Duyệt bởi
Category: Kiến thức kỹ thuật

Tại sao ứng dụng bị crash khi đệ quy quá nhiều

Tại sao ứng dụng bị crash khi đệ quy quá nhiều

Chắc hẳn nhiều người đã từng bị hiện tượng ứng dụng của mình bị crash khi đệ quy quá nhiều lần hoặc đệ quy vô hạn. Đây là một bài viết giải thích tại sao ứng dụng bị crash dưới góc độ kĩ thuật. Chúng ta bắt đầu! 1. Stack frame Có thể hiểu đơn giản stack frame là một vùng nhớ (đơn vị của stack) của stack. Nó chứa dữ liệu của mỗi lần gọi hàm. Mỗi một function…

Đọc Thêm Đọc Thêm

Go CI/CD

Go CI/CD

Kể từ bài viết cuối cùng về Feature Flags thì đã lâu lắm rồi mình chưa viết bài nào. Nay tranh thủ có chút thời gian thì mình sẽ viết bài chia sẻ về quá trình cấu hình và sử dụng CI/CD cho project Go của mình. Let’s start. Vậy CI/CD là I. CI/CD là gì CI là quá trình tích hợp liên tục khi phát triển/bảo trì phần mềm. Các thành viên trong team sẽ tích hợp liên tục…

Đọc Thêm Đọc Thêm

Feature Flags

Feature Flags

Chào các bạn, dạo này vật lộn với cơm áo gạo tiền quá nên chưa có thời gian viết bài mới. Nay rảnh chút nên mình viết bài mới này. Đã bao giờ các bạn implement tính năng gì đó rất to. Khi cần release nó chúng ta sẽ phải merge branch của tính năng đó vào nhánh chính phải không nào. Khi đó cảm giác rất là thốn vì rất nhiều thứ đã thay đổi khi chúng ta đang…

Đọc Thêm Đọc Thêm

Advanced Debug Part 3

Advanced Debug Part 3

Tiếp nối 2 phần trước, phần này mình sẽ nói về công cụ debug khá là quan trọng và mạnh mẽ. Nó giúp chúng ta tìm ra những chỗ thay đổi giá trị của biến, để tìm ra những sự thay đổi bất thường của biến trong chương trình. Watchpoint là gì Watchpoint là một loại breakpoint được dùng để debug chương trình. Nó cho phép ta dừng chương trình tại dòng lệnh đọc/ghi một vùng nhớ nào đó. Như…

Đọc Thêm Đọc Thêm

Advanced Debug Part 2

Advanced Debug Part 2

Tiếp nối phần trước, phần này chúng ta sẽ tìm hiểu thêm về 1 số loại breakpoint khác. Các bạn có thể đọc lại phần 1 tại đây. Exception breakpoint Xét ví dụ sau: Chương trình trên bị crash và nhảy ra ngoài main. Như vậy rất khó để debug xem tại sao, nếu chỉ nhìn log thì không biết chỗ nào gây ra crash này. Lúc này ta có thể sử dụng Exception breakpoint để bắt xem Exception xảy…

Đọc Thêm Đọc Thêm

Advanced Debug Part 1

Advanced Debug Part 1

Không có chương trình nào là không có lỗi, thế nên là lập trình viên thì luôn luôn phải đối mặt với nó. Có những lỗi rất dễ dàng tìm ra bằng cách đọc code. Tuy nhiên có những lỗi rất khó tìm được ra nguyên nhân. Hoặc chúng ta mới vào dự án chưa hiểu được luồng của phần mềm thì cũng rất khó để tìm ra nguyên nhân nếu không có cách tiếp cận đúng. Trong series chúng…

Đọc Thêm Đọc Thêm

Autolayout Priority

Autolayout Priority

Mình thấy rất nhiều bạn bị hổng kiến thức rất nhiều về autolayout, đặc biệt là phần Autolayout priority. Nay có thời gian rảnh thì mình sẽ viết về đề tài này để các bạn nắm được để giải quyết các vấn đề liên quan tới UI của App iOS. Chúng ta cùng bắt đầu! Constraint priority Constraint priority là độ ưu tiên của constraint. Dùng để autolayout engine có thể giải quyết các xung đột xảy ra khi thực…

Đọc Thêm Đọc Thêm

Debug conflict autolayout constraints

Debug conflict autolayout constraints

Là lập trình viên iOS, chắc hẳn ai cũng biết về autolayout. Autolayout là tính năng giúp lập trình viên layout các thành phần để tạo ra giao diện cho app của mình. Tuy nhiên, có thể do vô tình mà chúng ta gây ra tình trạng conflict constraint( breaking constraint). Đó là tình trạng mà autolayout engine không biết nên xử lý layout như thế nào do có hai hoặc nhiều constraint bị conflict nhau. Khi bị conflict constraint…

Đọc Thêm Đọc Thêm

Block Internal

Block Internal

Đã bao giờ các bạn thắc mắc, block được implement như thế nào, nó hoạt động ra sao, tại sao lại có thể bị memleak khi dùng block trong Objc chưa. Mình có một sự tò mò suốt 1 thời gian dài, đó chính là block đã retain các biến của mình khi nào, và khi nào thì release chúng. Bài viết hôm nay sẽ giải đáp một phần thắc mắc đó, chúng ta sẽ đi tìm hiểu xem block…

Đọc Thêm Đọc Thêm

Message Dispatch

Message Dispatch

Như những bài trước mình đã trình bày, object sẽ chứa một trường là isa. Từ isa thì runtime sẽ lấy được thông tin của class đó. Và từ đó dùng nó để gọi hàm khi chúng ta gọi hàm trong objc. Thì hôm nay chúng ta sẽ tìm hiểu về cơ chế Message Dispatch – cách gọi hàm của objc thực chất hoạt động như thế nào. Series này được chia thành nhiều phần. Phần 1: Khái niệm, ưu…

Đọc Thêm Đọc Thêm