T0 Công ty lớn Baidu
Baidu AI Infra (2)
Câu hỏi phỏng vấn AI Infra tại Baidu thật, gồm tối ưu toán tử
Tối ưu toán tử
Vòng một
Đào sâu dự án
- Giới thiệu dự án và bài báo trên CV, hỏi tiếp quanh các điểm kỹ thuật liên quan
Tính toán hiệu năng cao
- Mở vùng song song OpenMP thế nào? (cú pháp liên quan pragma omp parallel)
- Trong vùng song song, chạy
for(int i=0;i<100;i++){sum++;}kết quả có khớp tuần tự không? Làm sao bảo đảm nhất quán? - Phân cấp bộ nhớ GPU: phạm vi của Register File, L1 Cache, Shared Memory, L2 Cache, Global Memory
Kiến trúc máy tính
- Phân loại và đặc điểm ánh xạ Cache (set-associative, fully associative, direct-mapped)
Nền tảng C++
- Phân loại smart pointer và kịch bản dùng
- Khái niệm và cách triển khai đa hình C++ (khác biệt override và overload)
- Khác biệt dynamic linking và dynamic binding
Vòng hai
Đào sâu dự án
- Thảo luận sâu quanh CV và dự án
Nền tảng C++
- Cấu trúc dữ liệu tầng dưới của STL map là gì?
- Khác biệt BST cân bằng (AVL) và red-black tree
- Nguyên lý triển khai tầng dưới của unordered_map
- Cách xử lý xung đột hash phổ biến
Kiến trúc máy tính
- Phân cấp lưu trữ máy tính (register, Cache, main memory, secondary storage)
- Trong CPU, register mà lập trình viên ứng dụng thấy được chia loại nào? Program counter (PC) làm gì?
Khác
- Các lệnh hệ điều hành thường dùng?
Vòng ba
Nền tảng C++
- Chạy một hàm trước khi main chạy thế nào?
- Khi debug, đặt conditional breakpoint thế nào?
- Theo dõi call stack thế nào?
- Chương trình phân đoạn trong bộ nhớ thế nào (code, data, heap, stack, v.v.)
- Nguyên lý triển khai tầng dưới của STL deque
Kiến trúc máy tính
- Register hay Cache nhanh hơn? Cache và main memory mỗi cái dùng kỹ thuật gì? Giống và khác gì?
Lập trình CUDA
- Phân loại bộ nhớ trong CUDA (local memory, global memory, v.v.)
- Khái niệm Kernel; vai trò của
__global__ - Lấy số thread tối đa GPU cho phép thế nào?
Thuật toán
- Khác biệt greedy và dynamic programming
- Thuật toán tìm kiếm trên đồ thị phổ biến (BFS, DFS)