Các câu hỏi phỏng vấn Python cơ bản và nâng cao

Kiến thức nền tảng

  • Hàm lambda trong Python dùng để làm gì?
  • Từ khóa pass có ý nghĩa gì trong Python?
  • Python hoạt động như thế nào khi là ngôn ngữ thông dịch?
  • Unit test trong Python là gì? Thư viện unittest hỗ trợ điều gì?
  • Cách chuyển số thành chuỗi trong Python?
  • Phân biệt module và package trong Python.
  • Cách sinh số ngẫu nhiên trong Python?
  • Toán tử // thực hiện phép toán gì?
  • Nêu 5 ưu điểm khi sử dụng Python.
  • Cách sử dụng hàm split() để phân tách chuỗi?
  • JSON và dict khác nhau ở điểm nào?
  • Làm thế nào để kết nối và thao tác với cơ sở dữ liệu trong Python?

Kiến thức nâng cao

  • Làm sao truy cập module viết bằng C từ Python?
  • Khác biệt giữa rangexrange (trong Python 2)?
  • Cú pháp *args**kwargs dùng để làm gì? Cho ví dụ.
  • Decorator là gì? Viết một decorator và "giải mã" nó về dạng hàm gốc.
  • Kết hợp map(), reduce()lambda như thế nào?
  • Ý nghĩa của biến bắt đầu bằng dấu gạch dưới đơn (_var) và kép (__var)?
  • So sánh đa luồng và đa tiến trình. Trường hợp I/O-bound nên chọn cách nào?
  • Coroutine là gì? Lợi ích của nó ra sao?
  • Pickling và unpickling trong Python là gì?
  • Công cụ nào hỗ trợ debug hoặc phân tích tĩnh mã nguồn Python?
  • Generator trong Python hoạt động như thế nào?
  • Khác biệt giữa __new____init__?
  • Cách sao chép đối tượng trong Python? Phân biệt copydeepcopy.
  • Python hỗ trợ xử lý song song như thế nào?
  • Mô tả ngắn gọn sự khác nhau giữa mô hình selectepoll trong lập trình socket.
  • Quy tắc phạm vi biến cục bộ và toàn cục trong Python?
  • Làm sao chia sẻ biến toàn cục giữa các module?
  • Cách tạo script Python có thể thực thi trên Unix?
  • Cơ chế thu gom rác (garbage collection) trong Python hoạt động ra sao?
  • Viết chương trình:
    1. Tải nội dung trang https://en.wikipedia.org/wiki/Machine_translation và lưu thành file mt.html.
    2. Đếm tần suất xuất hiện của từng từ trong thẻ HTML, ghi vào file mt_word.txt theo định dạng: mỗi dòng gồm từ + tab + số lần xuất hiện, sắp xếp giảm dần theo tần suất.

Cấu trúc dữ liệu

  • Set và list, cái nào hiệu quả hơn trong thao tác tìm kiếm?
  • Với 1 triệu bản ghi, nên dùng cấu trúc dữ liệu nào để truy vấn nhanh nhất?
  • Triển khai thuật toán duyệt cây nhị phân.
  • Dùng hai stack để xây dựng một queue.
  • Xử lý xung đột hash như thế nào khi key bị trùng?

Thuật toán

  • Triển khai thuật toán tìm kiếm nhị phân.
  • Dùng hàm sinh số ngẫu nhiên từ 1-7 để tạo số ngẫu nhiên 0-1 với xác suất đều nhau (giới hạn độ sâu đệ quy).
  • Đếm tần suất ký tự trong chuỗi "a b c c a b".
  • Viết chương trình bán vé: 1 quầy bán 5 vé, dùng Python hoặc Java mô phỏng.
  • Cho hai danh sách l1, l2. Tìm cặp phần tử từ l2 sao cho tổng với phần tử trong l1 bằng 10.
  • Cho mảng số nguyên và một số target. Tìm hai số trong mảng có tổng bằng target với độ phức tạp O(n).
  • Cho n số nguyên, tìm m số liên tiếp có tổng lớn nhất.
  • Giải bài toán Tháp Hà Nội cho n đĩa.
  • Tìm bội số chung nhỏ nhất của một danh sách số nguyên.
  • Cho danh sách [1,2,3,4,5] và target=3. Tìm hai phần tử có tổng bằng target với giải pháp tối ưu (độ phức tạp thời gian là bao nhiêu?).
  • Đếm số dương và số âm trong danh sách [1, 3, 5, 7, 0, -1, -9, -4, -5, 8].
  • Từ chuỗi "axbyczdj", trích xuất thành "abcd".
  • Từ chuỗi "hello_world_yoyo", tạo danh sách ["hello","world","yoyo"].
  • Chuyển số 1 thành chuỗi "0001".
  • Di chuyển phần tử đầu tiên của danh sách [1, 3, 5, 7] đến vị trí thứ ba → [3, 5, 1, 7].
  • Hoán đổi giá trị hai biến a=9, b=8 sao cho a=8, b=9.
  • In tất cả số "Armstrong" (số có tổng lập phương các chữ số bằng chính nó) trong khoảng 100–999.
  • Tìm tất cả số hoàn hảo (số bằng tổng các ước số thật sự của nó) nhỏ hơn 1000.
  • Viết thuật toán sắp xếp nổi bọt (bubble sort).
  • Với danh sách [1, 3, 6, 9, 7, 3, 4, 6]: sắp xếp tăng dần, giảm dần, loại bỏ phần tử trùng lặp.
  • Tính giai thừa của n.
  • In dãy Fibonacci nhỏ hơn 100.
  • Tính x mũ n (ví dụ: 3^4 = 81).
  • Viết chương trình nhập email (username@companyname.com), kiểm tra định dạng, in ra username và companyname. Cho phép lặp lại đến khi nhập 'Q' để thoát.
  • Liệt kê tất cả file con trong một thư mục, lọc theo đuôi mở rộng.

Phát triển Web

  • Viết một API đơn giản với Flask.
  • Flask là gì? Ưu điểm của nó?
  • So sánh Flask, Django và Pyramid.
  • Flask-WTF là gì? Đặc điểm nổi bật?
  • Cách truy cập session trong Flask?
  • Flask có phải là mô hình MVC không? Cho ví dụ minh họa.
  • Kết nối cơ sở dữ liệu trong Flask như thế nào?
  • Cách giảm thiểu gián đoạn Memcached trong phát triển Python?
  • Có nên dùng Memcached trong dự án Python không? Vì sao?
  • Vai trò của Nginx và uWSGI trong triển khai ứng dụng.
  • Middleware trong Django dùng để làm gì?
  • CSRF là gì?
  • Cách sử dụng cache trong Django?

Hiểu mã nguồn

  • Đoạn mã sau in ra gì? Có vấn đề gì?
    def f(x, l=[]):
        for i in range(x):
            l.append(i*i)
            print(l)
    
    f(2)
    f(3, [3,2,1])
    f(3)
  • Cho đoạn mã sau, giá trị cuối cùng của A0 đến A6 là gì?
    A0 = dict(zip(('a','b','c','d','e'), (1,2,3,4,5)))
    A1 = range(10)
    A2 = [i for i in A1 if i in A0]
    A3 = [A0[s] for s in A0]
    A4 = [i for i in A1 if i in A3]
    A5 = {i:i*i for i in A1}
    A6 = [[i,i*i] for i in A1]

Thẻ: python interview algorithm data-structure Flask

Đăng vào ngày 4 tháng 6 lúc 19:56