Mục lục khóa học
Khóa học gồm 22 phần và 59 chương, chia theo 8 cấp độ. Các phần chưa mở sẽ được bổ sung dần. Bạn nên học tuần tự vì mỗi phần đều dựa trên phần trước.
Làm quen với lập trình và ngôn ngữ C
Hiểu C là gì, cài được môi trường, biết chương trình biến thành file chạy như thế nào, và viết được chương trình đầu tiên.
Chương 1. C là gì?
Lịch sử, vị trí của C trong hệ thống phần mềm, môi trường làm việc, và toàn bộ đường đi từ mã nguồn tới file chạy được.
- 1.1Tổng quan về CC ra đời thế nào, dùng ở đâu, mạnh yếu ra sao, và vì sao sau hơn 50 năm nó vẫn chưa bị thay thế.14 phút
- 1.2Cài đặt môi trườngChọn và cài trình biên dịch, editor, công cụ gỡ lỗi trên Linux, WSL, macOS hoặc Windows.12 phút
- 1.3Quy trình biên dịchBốn giai đoạn tiền xử lý, biên dịch, hợp dịch, liên kết. Chạy tay từng bước và đọc kết quả trung gian.20 phút
- 1.4Chương trình C đầu tiênMổ xẻ Hello World từng thành phần, và chứng minh main không phải điểm bắt đầu thật sự.16 phút
Cơ sở ngôn ngữ
Nắm cú pháp cơ bản, kiểu dữ liệu, nhập xuất, toán tử và rẽ nhánh.
Chương 2. Cú pháp cơ bản
Cấu trúc chương trình, biến, kiểu dữ liệu, sizeof, hằng số.
- 2.1Cấu trúc chương trình CNăm thành phần của một file nguồn, phân biệt câu lệnh với khối lệnh, và luật dấu chấm phẩy.13 phút
- 2.2BiếnBiến là một ô nhớ có tên. Khai báo, khởi tạo, gán, phạm vi và thời gian sống.15 phút
- 2.3Kiểu dữ liệuKích thước, miền giá trị, vì sao chuẩn C không cố định kích thước, tràn số và bẫy số thực.24 phút
- 2.4sizeofToán tử tính lúc biên dịch, in bằng %zu, và bẫy sizeof trên tham số mảng.13 phút
- 2.5Hằng sốSo sánh define, const và enum. Đọc const với con trỏ, và ba cạm bẫy của macro.15 phút
Chương 3. Input / Output
printf, xâu định dạng, scanf, fgets và các lỗi nhập liệu thường gặp.
- 3.1printfGiá trị trả về, escape sequence, và cơ chế đệm quyết định khi nào chữ hiện ra màn hình.15 phút
- 3.2Format specifierGiải phẫu đầy đủ năm thành phần của một đặc tả định dạng, kèm lỗ hổng chuỗi định dạng.28 phút
- 3.3scanfGiá trị trả về, giới hạn độ rộng, khoảng trắng trong chuỗi định dạng và tập ký tự.19 phút
- 3.4Nhập chuỗi bằng fgetsCách nhập an toàn được dùng suốt khóa học, kèm hàm nhập số nguyên hoàn chỉnh.17 phút
- 3.5Các lỗi nhập liệu thường gặpNăm lỗi khiến chương trình bỏ qua lượt nhập, treo vô hạn, hoặc bị tràn bộ đệm.17 phút
Chương 4. Toán tử
Số học, so sánh, logic, gán, tăng giảm và độ ưu tiên.
- 4.1Toán tử số họcBẫy chia số nguyên, dấu của phép lấy dư, chia cho 0, và các ứng dụng của toán tử %.15 phút
- 4.2Toán tử so sánhKết quả so sánh là số nguyên, và năm lỗi so sánh kinh điển của người mới học C.15 phút
- 4.3Toán tử logicQuy tắc chân lý trong C, đánh giá ngắn mạch, và phân biệt toán tử logic với toán tử bit.13 phút
- 4.4Toán tử gánCác dạng gán rút gọn, phép gán là biểu thức, và bẫy ép kiểu ngầm.11 phút
- 4.5Tăng và giảmPhân biệt tiền tố với hậu tố, và những biểu thức tuyệt đối không được viết.13 phút
- 4.6Độ ưu tiên toán tửBảng độ ưu tiên đầy đủ và năm bẫy khiến biểu thức chạy khác hoàn toàn ý định.17 phút
Chương 5. Cấu trúc điều khiển
if, else if, switch, break, continue, toán tử ba ngôi.
- 5.1Câu lệnh ifĐiều kiện trong C là một con số, và bài học từ lỗi bảo mật goto fail của Apple.12 phút
- 5.2if và elseRẽ hai nhánh, và bẫy else lơ lửng khi bỏ ngoặc nhọn ở if lồng nhau.11 phút
- 5.3else ifChuỗi nhiều nhánh loại trừ nhau, và vì sao thứ tự điều kiện quyết định tính đúng sai.12 phút
- 5.4if lồng nhauKhi nào cần lồng, và kỹ thuật guard clause để làm phẳng mã nguồn.13 phút
- 5.5switchNăm ràng buộc bắt buộc nhớ, fallthrough có chủ ý và vô ý, và bảng nhảy.19 phút
- 5.6breakThoát switch và thoát vòng lặp, và vì sao break chỉ thoát được một tầng.11 phút
- 5.7continueBỏ qua phần còn lại của lượt lặp, và bẫy vòng lặp vô hạn khi dùng trong while.11 phút
- 5.8Toán tử ba ngôiToán tử duy nhất của C có ba toán hạng. Khi nào nên dùng và khi nào không.11 phút
Vòng lặp và tư duy thuật toán
Thành thạo ba loại vòng lặp và biết cách nghĩ ra thuật toán trước khi viết code.
Chương 6. Loop
while, do while, for, vòng lặp lồng nhau, điều khiển vòng lặp.
- 6.1whileVòng lặp kiểm tra điều kiện trước, ba thành phần bắt buộc, và ba nguyên nhân chạy vô hạn.15 phút
- 6.2do whileVòng lặp kiểm tra điều kiện sau, chạy ít nhất một lần, và hai ứng dụng chính.12 phút
- 6.3forBa phần trong ngoặc, các biến thể, khai báo biến trong for, và bẫy size_t đếm ngược.18 phút
- 6.4Vòng lặp lồng nhauQuan hệ hàng và cột, độ phức tạp nhân lên, và vì sao thứ tự duyệt quyết định tốc độ.17 phút
- 6.5Điều khiển vòng lặpbreak, continue, goto và return trong vòng lặp, cùng cách thoát nhiều tầng.14 phút
- 6.6Vòng lặp vô hạnBa cách viết, các ứng dụng hợp lệ, và cách chẩn đoán khi vô hạn ngoài ý muốn.13 phút
Chương 7. Tư duy giải thuật
Quy trình giải bài toán, mã giả, lưu đồ, độ phức tạp Big-O.
- 7.1Quy trình giải bài toánSáu bước từ lúc đọc đề tới lúc có chương trình chạy đúng, kèm ví dụ áp dụng đầy đủ.18 phút
- 7.2Thuật toánNăm tính chất bắt buộc, và vì sao cùng một bài toán có thể chênh nhau hàng vạn lần.16 phút
- 7.3Mã giảCách mô tả thuật toán không phụ thuộc ngôn ngữ, và quy ước dùng trong khóa học.14 phút
- 7.4Lưu đồSáu ký hiệu chuẩn, cách vẽ ba cấu trúc cơ bản, và giới hạn của lưu đồ.14 phút
- 7.5Độ phức tạpBig-O, cách đếm nhanh từ vòng lặp, quy đổi ra thời gian thật, và độ phức tạp không gian.22 phút
- 7.6Phân tích một bài toánMô hình vào xử lý ra, bảng phân tích bắt buộc, và năm câu hỏi trước khi viết code.17 phút
Hàm
Chia chương trình thành hàm, hiểu khung ngăn xếp, nắm đệ quy.
Chương 8. Function
Khai báo, định nghĩa, tham số, giá trị trả về, phạm vi, static, đệ quy.
- 8.1Khái niệm hàmVì sao cần hàm, sáu lợi ích cụ thể, và sáu nguyên tắc thiết kế một hàm tốt.14 phút
- 8.2Khai báo hàmNguyên mẫu hàm, vì sao trình biên dịch cần nó, và ba cách đặt nguyên mẫu.14 phút
- 8.3Định nghĩa hàmBốn thành phần của một định nghĩa, quy tắc một định nghĩa, và hàm inline.15 phút
- 8.4Lời gọi hàm và khung ngăn xếpĐiều gì thật sự xảy ra khi gọi một hàm, và cách nhìn thấy khung ngăn xếp bằng gdb.22 phút
- 8.5Tham sốTham số hình thức và đối số thực tế, truyền mảng, và khi nào nên gom vào struct.16 phút
- 8.6Giá trị trả vềBa cách trả về nhiều giá trị, ba quy ước báo lỗi, và bẫy thiếu return.18 phút
- 8.7Truyền theo giá trịC luôn truyền bản sao. Vì sao swap cần con trỏ, và vì sao mảng trông như ngoại lệ.18 phút
- 8.8Phạm vi biếnBiến cục bộ, biến toàn cục, che khuất biến, và vì sao nên tránh biến toàn cục.16 phút
- 8.9staticMột từ khóa hai nghĩa hoàn toàn khác nhau, và bảng tổng hợp năm lớp lưu trữ.17 phút
- 8.10Đệ quyHai thành phần bắt buộc, chạy tay ngăn xếp đệ quy, chi phí thật, và khi nào không nên dùng.24 phút
Array và String
Thành thạo mảng một và hai chiều, hiểu chuỗi C là mảng ký tự kết thúc bằng ký tự null.
Chương 9. Mảng một chiều
Khai báo, duyệt, tìm kiếm, min max, sắp xếp cơ bản.
- 9.1Mảng là gìBố cục bộ nhớ, công thức địa chỉ, và lý do C không kiểm tra biên mảng.18 phút
- 9.2Khởi tạo mảngSáu cách khởi tạo, khởi tạo có chỉ định của C99, và vì sao không gán mảng bằng dấu bằng.17 phút
- 9.3Truy cập phần tửBốn cách viết tương đương, công thức địa chỉ, và bẫy chỉ số có dấu.15 phút
- 9.4Duyệt mảngBa cách duyệt, macro đếm phần tử và giới hạn của nó, cùng cách in mảng gọn gàng.16 phút
- 9.5Tìm kiếmTìm tuyến tính, tìm nhị phân, bẫy tràn khi tính điểm giữa, và bsearch của thư viện chuẩn.22 phút
- 9.6Tìm giá trị nhỏ nhất và lớn nhấtCách khởi tạo đúng, trả về cả vị trí, và thuật toán tìm cả hai bằng ít phép so sánh hơn.16 phút
- 9.7Tổng và trung bìnhHai cái bẫy tràn số và chia nguyên, cùng sai số cộng dồn với số thực.17 phút
- 9.8Sắp xếp cơ bảnBa thuật toán sắp xếp O(n bình phương), tính ổn định, và bài đo thời gian thực tế.28 phút
Chương 10. Mảng hai chiều
Ma trận, cộng, nhân, chuyển vị, đường chéo.
- 10.1Ma trậnKhai báo, bố cục theo hàng, vì sao chiều thứ hai bắt buộc phải ghi.18 phút
- 10.2Nhập và xuất ma trậnVòng lặp lồng chuẩn, căn cột khi in, và cách kiểm tra dữ liệu vào.15 phút
- 10.3Cộng và trừ ma trậnPhép toán theo từng phần tử, điều kiện kích thước, và cách viết hàm dùng lại được.14 phút
- 10.4Nhân ma trậnBa vòng lặp lồng nhau, độ phức tạp lập phương, và thứ tự vòng lặp quyết định tốc độ.24 phút
- 10.5Chuyển vịChuyển vị ra mảng mới và chuyển vị tại chỗ cho ma trận vuông.14 phút
- 10.6Đường chéo và tam giácHai đường chéo, ba vùng tam giác, và điều kiện chỉ số của từng vùng.15 phút
Chương 11. String
Ký tự kết thúc chuỗi, thư viện string.h và tự cài lại các hàm.
- 11.1Chuỗi trong CChuỗi là mảng ký tự, khác biệt giữa mảng ghi được và hằng chuỗi chỉ đọc.18 phút
- 11.2Ký tự kết thúc chuỗiVì sao mọi hàm chuỗi đều phụ thuộc vào một byte 0, và chuyện gì xảy ra khi thiếu nó.18 phút
- 11.3Nhập chuỗiVì sao gets bị xóa khỏi chuẩn, cách dùng fgets đúng, và xử lý ký tự xuống dòng.20 phút
- 11.4strlenĐếm ký tự trước byte 0, chi phí tuyến tính, và bẫy gọi strlen trong điều kiện vòng lặp.15 phút
- 11.5strcpySao chép chuỗi, vì sao strcpy nguy hiểm, và cách dùng snprintf thay thế.18 phút
- 11.6strcatNối chuỗi, chi phí bậc hai khi nối trong vòng lặp, và cách nối hiệu quả.17 phút
- 11.7strcmpSo sánh theo thứ tự từ điển, ý nghĩa dấu của kết quả, và bẫy so sánh chuỗi bằng dấu bằng.16 phút
- 11.8strchrTìm ký tự trong chuỗi, chiều tìm ngược, và cách tách chuỗi bằng con trỏ.15 phút
- 11.9strstrTìm chuỗi con, độ phức tạp thực tế, và cách thay thế mọi lần xuất hiện.18 phút
- 11.10Tự cài lại thư viện chuỗiCài lại tám hàm của string.h, kèm bộ kiểm thử tự động so với bản chuẩn.26 phút
Pointer
Bước chuyển quan trọng nhất của C. Hiểu bộ nhớ, địa chỉ, con trỏ và con trỏ hàm.
Chương 12. Pointer cơ bản
Bộ nhớ, địa chỉ, giải tham chiếu, con trỏ với hàm và mảng.
- 12.1Bộ nhớ, địa chỉ và giá trịMô hình bộ nhớ phẳng, mỗi byte một địa chỉ, và vì sao con trỏ là khái niệm tất yếu.18 phút
- 12.2Toán tử lấy địa chỉToán tử và, kiểu của kết quả, và những thứ không lấy địa chỉ được.15 phút
- 12.3Con trỏKhai báo, khởi tạo, con trỏ rỗng, con trỏ hoang, và vì sao kiểu con trỏ quan trọng.22 phút
- 12.4Giải tham chiếuToán tử sao, đọc và ghi qua con trỏ, và bốn cách giải tham chiếu sai.20 phút
- 12.5Con trỏ và hàmTruyền con trỏ vào hàm, trả về con trỏ, và quy tắc vàng về vòng đời.18 phút
- 12.6Mô phỏng truyền tham chiếuBa mẫu dùng con trỏ để hàm ghi ra ngoài, và cách kiểm tra tham số con trỏ.18 phút
- 12.7Con trỏ và mảngPhân rã mảng, bốn cách viết tương đương, và ba chỗ mảng không phân rã.20 phút
- 12.8Số học con trỏCộng trừ con trỏ đếm theo phần tử, hiệu hai con trỏ, và giới hạn của chuẩn.20 phút
Chương 13. Pointer nâng cao
Con trỏ tới con trỏ, mảng con trỏ, con trỏ hàm, callback, void*, const.
- 13.1Con trỏ tới con trỏHai tầng gián tiếp, khi nào cần, và cách đọc khai báo nhiều dấu sao.20 phút
- 13.2Con trỏ và chuỗiDuyệt chuỗi bằng con trỏ, cắt chuỗi không sao chép, và mẫu quét chuỗi.18 phút
- 13.3Mảng con trỏMảng chuỗi kiểu ragged, đối số dòng lệnh, và so sánh với mảng hai chiều.20 phút
- 13.4Con trỏ tới mảngPhân biệt con trỏ tới mảng với mảng con trỏ, và quy tắc đọc khai báo từ trong ra.18 phút
- 13.5Con trỏ hàmLưu địa chỉ hàm, gọi qua con trỏ, và bảng điều phối thay cho chuỗi if.22 phút
- 13.6Hàm gọi lạiĐảo ngược quyền điều khiển, qsort và bsearch, và mẫu truyền ngữ cảnh.20 phút
- 13.7Con trỏ voidCon trỏ không kiểu, lập trình tổng quát, và những giới hạn phải nhớ.18 phút
- 13.8const với con trỏBốn tổ hợp const, quy tắc đọc từ phải sang trái, và cách chọn đúng.18 phút
Memory Management
Hiểu bản đồ bộ nhớ tiến trình, dùng đúng malloc và free, nhận diện bốn loại lỗi bộ nhớ.
Chương 14. Bộ nhớ
Stack, heap, vùng tĩnh, malloc, calloc, realloc, free và các lỗi kinh điển.
- 14.1Ngăn xếpCách ngăn xếp cấp và thu hồi bộ nhớ, giới hạn kích thước, và ba cách làm tràn nó.18 phút
- 14.2Vùng cấp phát độngVì sao cần heap, nó khác ngăn xếp ở đâu, và bộ cấp phát làm việc thế nào.20 phút
- 14.3Bộ nhớ tĩnhVùng .data và .bss, biến static trong hàm, và thứ tự khởi tạo trước khi main chạy.16 phút
- 14.4Bộ nhớ toàn cụcBiến toàn cục nằm ở đâu, liên kết ngoài và nội bộ, và định nghĩa dự phòng.16 phút
- 14.5Bản đồ bộ nhớSáu vùng của một tiến trình, cách xem chúng thật, và đọc địa chỉ để đoán loại lỗi.20 phút
- 14.6mallocCấp phát vùng nhớ lúc chạy, cách viết đúng, và bốn lỗi kinh điển khi gọi nó.22 phút
- 14.7callocCấp phát và xóa về 0 trong một bước, kiểm tra tràn tự động, và khi nào nên dùng.15 phút
- 14.8reallocĐổi kích thước vùng đã cấp, cái bẫy mất con trỏ, và mẫu mảng tự lớn.22 phút
- 14.9freeTrả bộ nhớ về hệ thống, các quy tắc bắt buộc, và vì sao free không xóa dữ liệu.18 phút
- 14.10Rò rỉ bộ nhớBốn nguyên nhân rò rỉ, cách phát hiện bằng công cụ, và bốn mẫu phòng tránh.22 phút
- 14.11Con trỏ treoBa cách tạo ra con trỏ treo, vì sao nó khó phát hiện, và cách phòng.18 phút
- 14.12Giải phóng hai lầnVì sao gọi free hai lần phá cấu trúc bên trong bộ cấp phát, và cách phòng tuyệt đối.16 phút
- 14.13Dùng sau khi giải phóngLoại lỗi bộ nhớ nguy hiểm nhất, cơ chế khai thác, và bộ công cụ phát hiện.20 phút
Struct / Union / Enum
Gom dữ liệu thành kiểu mới, hiểu padding và alignment.
Chương 15. Struct
Khai báo, typedef, con trỏ struct, struct lồng nhau, cấp phát động.
- 15.1Struct cơ bảnGom nhiều kiểu vào một, ba cách khởi tạo, và bố cục bộ nhớ kèm phần đệm.24 phút
- 15.2typedefĐặt tên mới cho kiểu, bốn cách kết hợp với struct, và khi nào không nên dùng.16 phút
- 15.3Con trỏ structToán tử mũi tên, truyền struct hiệu quả, và kiểu không hoàn chỉnh để giấu chi tiết.20 phút
- 15.4Struct lồng nhauStruct chứa struct, thành viên vô danh của C11, và bố cục bộ nhớ khi lồng.18 phút
- 15.5Mảng structDanh sách bản ghi, sắp xếp và tìm kiếm, cùng so sánh hai cách bố trí dữ liệu.20 phút
- 15.6Struct và hàmTruyền và trả về struct, quy ước gọi hàm, và mẫu thiết kế giao diện quanh struct.20 phút
- 15.7Struct và cấp phát độngCặp hàm tạo và hủy, sao chép nông so với sao chép sâu, và mảng thành viên linh hoạt.24 phút
Chương 16. Enum
Hằng số có tên, kết hợp switch, máy trạng thái.
- 16.1Enum cơ bảnHằng số có tên, quy tắc đánh số, kiểu thật của enum và những giới hạn của nó.18 phút
- 16.2enum với switchVì sao không viết nhánh mặc định, và cách để trình biên dịch bắt lỗi thiếu nhánh.16 phút
- 16.3Máy trạng tháiBảng chuyển trạng thái thay cho hàng chục nhánh if, và cách kiểm chứng nó.22 phút
Chương 17. Union
Chia sẻ vùng nhớ, tagged union, ứng dụng trong hệ nhúng.
- 17.1Union cơ bảnMọi thành viên dùng chung một vùng nhớ, kích thước, và quy tắc chỉ đọc thành viên vừa ghi.18 phút
- 17.2Union có nhãnGhép enum với union thành kiểu biến thể an toàn, và bộ hàm thao tác quanh nó.22 phút
- 17.3Ứng dụng thực tếĐọc dữ liệu theo byte, gói tin mạng, thanh ghi phần cứng, và giới hạn về tính di động.20 phút
File và dữ liệu
Đọc ghi file văn bản và nhị phân, làm được ứng dụng có dữ liệu bền vững.
Chương 18. File I/O
fopen, fclose, fprintf, fscanf, fread, fwrite, fseek, ftell.
Preprocessor và tổ chức project
Hết viết tất cả trong một file. Chia dự án nhiều file và dùng preprocessor đúng cách.
Chương 19. Preprocessor
include, define, macro, biên dịch có điều kiện, header guard.
Chương 20. Multi-file project
Chia .c và .h, khai báo và định nghĩa, extern, static, liên kết.
Data Structures
Tự cài các cấu trúc dữ liệu nền tảng bằng con trỏ và cấp phát động.
Chương 21. Linked List
Danh sách đơn, đôi, vòng. Thêm, xóa, tìm, đảo ngược.
Chương 22. Stack
Cài bằng mảng và bằng danh sách liên kết, ứng dụng tính biểu thức.
Chương 23. Queue
Hàng đợi, hàng đợi vòng, deque, hàng đợi ưu tiên.
Chương 24. Tree
Cây nhị phân, bốn kiểu duyệt, cây tìm kiếm nhị phân, AVL.
Chương 25. Hash Table
Hàm băm, va chạm, chaining, open addressing, rehash.
Algorithms
Cài và phân tích các thuật toán nền tảng, biết chọn đúng thuật toán.
Chương 26. Searching
Tìm tuyến tính, tìm nhị phân và độ phức tạp.
Chương 27. Sorting
Sáu thuật toán sắp xếp, so sánh và cách chọn.
Chương 28. Algorithm nâng cao
Chia để trị, tham lam, quy hoạch động, quay lui, đồ thị.
C nâng cao
Con trỏ hàm ở tầng thiết kế, lập trình tổng quát, thao tác bit và các từ khóa quyết định.
Chương 29. Function Pointer
Callback, bảng điều phối, máy trạng thái, mô phỏng đa hình, closure.
Chương 30. Generic Programming
void*, generic swap, container tổng quát, qsort, bsearch, _Generic.
Chương 31. Bit Manipulation
Toán tử bit, set, clear, toggle, bitmask, thao tác thanh ghi.
Chương 32. volatile, const, restrict
Ba từ khóa quyết định khi làm hệ thống và hệ nhúng.
Undefined Behavior và C chuyên sâu
Phân biệt lập trình viên C nghiệp dư với chuyên nghiệp.
Chương 33. Undefined Behavior
UB, unspecified, implementation-defined, strict aliasing.
Chương 34. Memory Debugging
Valgrind, AddressSanitizer, UndefinedBehaviorSanitizer.
Chương 35. GDB
Điểm dừng, bước chạy, xem bộ nhớ, watchpoint, backtrace.
Build System
Tự động hóa build, phân biệt debug và release, tích hợp kiểm thử.
Chương 36. GCC chuyên sâu
Các nhóm cờ cảnh báo, tối ưu, gỡ lỗi, sanitizer, gia cố bảo mật.
Chương 37. Makefile
Mục tiêu, phụ thuộc, biến, quy tắc ngầm, theo dõi header tự động.
Chương 38. CMake
CMakeLists, target, thư viện, build type, testing.
Static và Dynamic Library
Đóng gói code thành thư viện dùng lại được, hiểu linking và ABI.
Chương 39. Library
Thư viện tĩnh, thư viện động, symbol, ABI, dlopen.
Linux System Programming
Nói chuyện trực tiếp với hệ điều hành.
Chương 40. Linux Process
PID, fork, exec, wait, zombie và orphan.
Chương 41. File Descriptor
open, read, write, close, dup2 và chuyển hướng.
Chương 42. System Call
Ranh giới user space và kernel, errno, strace, mmap.
Chương 43. Pipe
Pipe, named pipe, giao tiếp giữa các tiến trình.
Chương 44. Signal
SIGINT, SIGTERM, sigaction và quy tắc viết handler.
Chương 45. Thread
pthread, mutex, đua dữ liệu, deadlock, biến điều kiện.
Network Programming
Viết được server và client TCP, UDP.
Chương 46. Socket
TCP/IP, socket API, server, client, UDP, select và epoll.
Embedded C
Nhánh chuyên sâu cho STM32, ESP32 và các vi điều khiển.
Chương 47. Embedded C
Kiến trúc MCU, thanh ghi, GPIO, UART, SPI, I2C, ADC, PWM, DMA.
Chương 48. Register Programming
Đọc datasheet, mẫu thao tác thanh ghi, trường bit.
Chương 49. Interrupt
Bảng vector, NVIC, quy tắc viết ISR, vùng tới hạn.
Chương 50. Embedded Project
Bảy dự án từ điều khiển LED đến mini RTOS.
C nâng cao nhất
Đọc được chuẩn C, hiểu mô hình bộ nhớ ở tầng chuẩn, làm chủ preprocessor.
Chương 51. C Standard
C89 đến C23, cách đọc tài liệu chuẩn, tính khả chuyển.
Chương 52. Advanced Memory Model
Vòng đời đối tượng, alignment, strict aliasing, effective type.
Chương 53. Struct Memory Layout
Padding, alignment, offsetof, packed struct.
Chương 54. Advanced Preprocessor
Macro biến đối số, nối token, chuỗi hóa, X Macro.
Chương 55. Generic Data Structures
Thư viện container hoàn chỉnh bằng void* và con trỏ hàm.
Software Engineering với C
Viết code người khác đọc được, sửa được, tin được.
Chương 56. Code Quality
Đặt tên, quy ước, chia module, đóng gói, xử lý lỗi.
Chương 57. Testing
Unit test, integration test, mock, độ phủ, tích hợp liên tục.
Chương 58. Static Analysis
Cảnh báo trình biên dịch, clang-tidy, cppcheck, fanalyzer.
Chương 59. Security
Tràn bộ đệm, chuỗi định dạng, tràn số, use after free, gia cố.
Project tổng kết
Tám dự án theo cấp độ tăng dần, từ máy tính bỏ túi đến mini RTOS.