Không chuyên ngành, vẫn sống sót với nghề lập trình
#14. Nội dung phỏng vấn kỹ thuật thường gặp của lập trình viên mới vào nghề
[Các vùng nhớ của bộ nhớ chính]
- Vùng mã: Vùng lưu trữ mã nguồn của chương trình, CPU lấy các lệnh (nguồn, hàm, câu lệnh điều khiển) được lưu trữ trong vùng mã để xử lý. Ví dụ, khi một chương trình được viết bằng ngôn ngữ C được thực thi, vùng mã sẽ lưu trữ mã nguồn của chương trình này.
- Vùng dữ liệu: Vùng lưu trữ các biến toàn cục và biến tĩnh, được cấp phát cùng với việc bắt đầu của chương trình và không bị hủy cho đến khi chương trình kết thúc. Ví dụ, khi một chương trình được viết bằng ngôn ngữ C được thực thi, vùng dữ liệu sẽ lưu trữ các biến toàn cục hoặc biến tĩnh được khai báo trong chương trình này.
- Vùng ngăn xếp: Vùng nhớ tạm thời mà chương trình sử dụng, lưu trữ các biến cục bộ và tham số liên quan đến việc gọi hàm. Được cấp phát cùng với việc gọi hàm và bị hủy khi hàm kết thúc. Ví dụ, khi một hàm được viết bằng ngôn ngữ C được gọi, các biến cục bộ hoặc tham số được sử dụng trong hàm đó sẽ được cấp phát vào vùng ngăn xếp.
- Vùng heap: Vùng mà người dùng cấp phát và giải phóng động không gian nhớ. Ví dụ, khi sử dụng hàm malloc() trong ngôn ngữ C để cấp phát động bộ nhớ, vùng nhớ được cấp phát sẽ được lưu trữ trong vùng heap.
- Ngăn xếp: Cấu trúc dữ liệu theo phương thức LIFO (Last-In, First-Out). Ví dụ, nút 'Quay lại' trong máy tính tương tự như ngăn xếp. Các trang đã truy cập trước đó được lưu trữ trong ngăn xếp và khi nhấn nút 'Quay lại', trang được lưu trữ gần đây nhất sẽ được lấy ra và hiển thị.
- Hàng đợi: Cấu trúc dữ liệu theo phương thức FIFO (First-In, First-Out). Ví dụ, việc lấy số thứ tự trong ngân hàng để chờ đợi tương tự như hàng đợi. Người đến trước được phục vụ trước và người đến sau được phục vụ sau.
- Cây: Cấu trúc dữ liệu thể hiện dữ liệu theo dạng phân cấp. Ví dụ, cây DOM của HTML tương tự như cây. Cấu trúc của trang HTML được thể hiện bằng cây, bắt đầu từ nút gốc là thẻ html và các nút con được thể hiện theo thứ tự.
- Heap: Một trong những cấu trúc cây nhị phân, được chia thành heap lớn nhất và heap nhỏ nhất. Ví dụ, trong hàng đợi ưu tiên, dữ liệu có mức độ ưu tiên cao nhất sẽ nằm ở nút gốc của heap và dữ liệu có mức độ ưu tiên thấp hơn sẽ nằm ở các nút con, đây là ví dụ của heap lớn nhất.
- RDBMS: Cơ sở dữ liệu định nghĩa và quản lý dữ liệu một cách có cấu trúc với sơ đồ nghiêm ngặt. Có thể phân tán lưu trữ dữ liệu và dễ dàng sửa đổi. Ví dụ, MySQL, Oracle, MS-SQL là những ví dụ điển hình của RDBMS.
- NoSQL: Cơ sở dữ liệu lưu trữ và quản lý dữ liệu với sơ đồ linh hoạt. Phù hợp với việc xử lý và lưu trữ dữ liệu lớn, khả năng mở rộng cao. Ví dụ, MongoDB, Cassandra, HBase là những ví dụ điển hình của NoSQL.
[Lập trình hướng thủ tục và lập trình hướng đối tượng]
- Lập trình hướng thủ tục: Kỹ thuật lập trình coi trọng việc xử lý tuần tự. Các ngôn ngữ như C, Pascal là những ngôn ngữ hướng thủ tục.
- Lập trình hướng đối tượng: Phương pháp xử lý bằng cách liên kết dữ liệu và thủ tục một cách logic dựa trên khái niệm đối tượng (Object). Các ngôn ngữ như Java, C++, Python là những ngôn ngữ hướng đối tượng. Ví dụ, trong chương trình mô phỏng ô tô, ô tô được thể hiện dưới dạng đối tượng, các thuộc tính của ô tô (màu sắc, gia tốc, v.v.) được biểu diễn dưới dạng dữ liệu và các chức năng mà ô tô thực hiện (chạy, dừng, v.v.) được biểu diễn dưới dạng phương thức.
[Ghi đè (Overriding) và quá tải (Overloading)]
- Ghi đè (Overriding): Việc định nghĩa lại phương thức mà lớp cha có trong lớp con để sử dụng. Khi lớp con gọi phương thức của lớp cha, phương thức được định nghĩa lại trong lớp con sẽ được thực thi thay vì phương thức của lớp cha. Ví dụ, phương thức toString() trong Java là ví dụ về ghi đè.
- Quá tải (Overloading): Định nghĩa nhiều phương thức cùng tên nhưng với các kiểu và số lượng tham số khác nhau để đáp ứng các loại gọi khác nhau. Nhiều phương thức cùng tên nhưng với tham số khác nhau sẽ hoạt động. Ví dụ, phương thức print() trong Java là ví dụ về quá tải.
[Thuật toán thay thế trang]
- FIFO: Thay thế trang đã được tải vào bộ nhớ vật lý lâu nhất. Việc 'Đóng' trong thanh tác vụ của máy tính cũng tương tự như thuật toán FIFO. Chương trình được chạy đầu tiên sẽ được hiển thị cuối cùng và đóng cuối cùng.
- LRU: Thay thế trang chưa được sử dụng trong thời gian dài nhất. Ứng dụng 'Tắt ứng dụng' cũng tương tự như thuật toán LRU, tắt ứng dụng cũ trong số các ứng dụng ít được sử dụng.
- LFU: Thay thế trang có số lần tham chiếu ít nhất. Ví dụ, tính năng 'Đóng tab' trong trình duyệt cũng tương tự như thuật toán LFU, đóng tab ít được sử dụng nhất trong số các tab mới được mở.
- MFU: Thay thế trang có số lần tham chiếu nhiều nhất. Thuật toán MFU thường không được sử dụng.
- Quá trình: Đơn vị công việc được hệ điều hành cấp phát để thực thi, nghĩa là chương trình. Khi nhiều quá trình được thực thi đồng thời, mỗi quá trình sẽ được cấp phát vùng nhớ và CPU độc lập.
- Luồng: Đơn vị thực thi hoạt động trong quá trình, chia sẻ tài nguyên được quá trình cấp phát để thực thi. Ví dụ, mỗi tab trong trình duyệt web không phải là quá trình mà là luồng.
- Lớp ứng dụng: Lớp kết nối người dùng với mạng, bao gồm các giao thức như HTTP, FTP, SMTP.
- Lớp trình bày: Lớp định nghĩa cách thức biểu diễn dữ liệu, bao gồm các giao thức như JPEG, MPEG, SSL.
- Lớp phiên: Lớp quản lý phiên giữa hai hệ thống đang giao tiếp.
- Lớp vận chuyển: Lớp chịu trách nhiệm truyền tải dữ liệu, bao gồm các giao thức như TCP, UDP.
- Lớp mạng: Lớp thiết lập đường dẫn để truyền tải dữ liệu, bao gồm các giao thức như IP, ICMP.
- Lớp liên kết dữ liệu: Lớp truyền tải dữ liệu dựa trên địa chỉ vật lý (địa chỉ MAC), bao gồm các giao thức như Ethernet, Token Ring.
- Lớp vật lý: Lớp chịu trách nhiệm về kết nối vật lý và phương tiện truyền dẫn.
- TCP: Dịch vụ định hướng kết nối, truyền tải dữ liệu một cách đáng tin cậy. Sử dụng phương thức 3-way handshaking và 4-way handshaking để thiết lập hoặc hủy kết nối. Ví dụ, khi đăng nhập vào trang web hoặc truyền tải tệp, TCP được sử dụng.
- UDP: Dịch vụ không định hướng kết nối, không cần thực hiện các bước xác nhận để truyền tải dữ liệu, độ tin cậy thấp nhưng tốc độ xử lý nhanh. Ví dụ, trong phát trực tuyến video hoặc trò chơi trực tuyến, truyền tải nhanh là rất quan trọng, do đó UDP được sử dụng.
Bình luận0