Tổng hợp 38+ câu hỏi phỏng vấn Python #Hay và #Chất

ITNavi 22 Sep 2023 2546

Với sự phát triển thần tốc của Big Data, AI,... lập trình Python vẫn khẳng định sức hút đối với nhà tuyển dụng IT. Chuẩn bị các câu hỏi phỏng vấn Python mọi level fresher, junior, senior, master,... trước buổi phỏng vấn chắc chắn mang đến cho bạn sự tự tin thể hiện kiến thức và kỹ năng của bạn với ngôn ngữ lập trình Python!

Câu hỏi phỏng vấn Python level fresher và junior

Các câu hỏi phỏng vấn Python level này chủ yếu là kiến thức cơ bản, mang tính định nghĩa nhiều hơn về các câu lệnh, hàm, module, kiểu dữ liệu,... Với các ứng viên mới ra trường hoặc có khoảng 1 - 2 năm kinh nghiệm làm việc tại các vị trí liên quan đến ngôn ngữ lập trình Python, hãy tham khảo các câu hỏi Python thường được người phỏng vấn chuyên môn hỏi nhất dưới đây. 

1. Multithreading Python được thực thi thế nào?

Python quản lý thread bằng việc sử dụng Global Interpreter Lock (GIL) để chắc chắn mỗi thời điểm chỉ có một luồng được thực thi. 

Thread yêu cầu đến GIL để thực hiện công việc, sau đó chuyển GIL lên luồng tiếp theo trong thời gian ngắn. Điều này làm ta tưởng như các thread được thực hiện song song, nhưng thực ra chỉ là đang thay phiên nhau sử dụng lõi CPU. 

2. Hãy cho tôi biết vai trò của PEP 8

Python Enhancement Proposal #8 còn được gọi là đề xuất cải tiến Python, đóng vai trò cực kỳ quan trọng đối với lập trình code và doanh nghiệp:

  • Ghi lại các quy ước code Python để lập trình viên có thể viết clean code. 
  • Đảm bảo tính nhất quán trong phong cách code để các lập trình viên dễ dàng làm việc khi làm việc với nhau.
  • Cập nhật các quy ước bổ sung.

3.  Deep copy và Shallow copy khác nhau cơ bản ở điểm nào?

Sự khác biệt của Deep copy và Shallow copy liên quan đến các đối tượng phức hợp (compound objects - đối tượng chứa 1 đối tượng khác, ví dụ như lists, class instances,...). Cụ thể:

  • Deep copy: Xây dựng một compound objects mới và sau đó chèn các references vào nó cho các đối tượng tìm thấy trong bản gốc (trong phạm vi cho phép)
  • Shallow copy: Xây dựng một compound objects mới. Sau đó, theo phương pháp đệ quy, chèn vào đó các bản sao của đối tượng được tìm thấy trong bản gốc.

 

 

4. Cho 1 đoạn code. Hãy cho biết nó sẽ in ra kết quả thế nào và giải thích?

listA = ['1', '2', '3', '4', '5', '6']

print list[10:]

A, Index Error

B, []

C, 6

Câu hỏi phỏng vấn Python với dạng code thực tế ở mức đơn giản để người phỏng vấn chuyên môn đánh giá khả năng tư duy của bạn. Vì vậy, hãy giải thích ngắn gọn nhất lý do mà bạn chọn đáp án. Hãy tham khảo cách giải thích dưới đây:

Chọn đáp án B bởi vì:

Cần in ra list ở vị trí thứ 10, trong khi mảng chỉ có 6 phần tử, nên không chọn C. 

Bẫy ở chỗ dấu hai chấm (:), nếu gõ listA[10], kết quả chắc chắn sẽ ra IndexError (do mảng dữ liệu (array) chỉ có 6 phần tử). Tuy nhiên, đề bài lại đang cố gắng slice List (cắt list), nên kết quả Index Error sẽ là sai. 

5. Đoạn code dưới đây in ra kết quả gì? Hãy giải thích.

 list = [ [ ] ] * 3

list[0].append(1)

print(list)

list[1].append(2)

print(list)

A, [[1], [], []] và [[1], [2], []]

B, [[1], [1], [1]] và [[2], [2], [2]]

C, [[1], [1], [1]] và [[1, 2], [ 1, 2 ], [ 1, 2 ]]

Chọn C. Vì:

Đoạn code này bẫy ở chỗ [ [ ] ] * 3,. Tức là cú pháp này tạo ra 3 phần tử trong list, nhưng 3 phần tử này không độc lập để edit dữ liệu theo từng index.

[[]] * 3 đã tạo ra 3 item trong một list nhưng là references to the same list (tham chiếu tới cùng một giá trị).

Ta có list[0].append(1) ở đầu nạp ba giá trị 1 cho kết quả [[1], [1], [1]] và thêm  list[1].append(2) sẽ cho ra kết quả [[1, 2], [ 1, 2 ], [ 1, 2 ]].

Do đó kết quả là đáp án C.

6. Kiểu dữ liệu mutable/immutable trong Python là gì?

Trong Python có 2 loại object là mutable (có thể thay đổi), immutable (không thể thay đổi). Trong đó:

  • Kiểu dữ liệu thuộc immutable đó là: int, float, bool, str, tuple

Ví dụ:

x = (1,2,3)

y=x

y = (1,2,3,4)

print(x)

(1, 2, 3)

  • Kiểu dữ liệu thuộc mutable: list, set, dict

Ví dụ:

x = [1,2,3]

y = x

y.append(4)

print(x)

[1, 2, 3, 4]

7. Hãy nói ý hiểu của bạn về các phương thức split (), sub (), subn () của RegEx (module “re”)trong Python?

Module “re” Python cung cấp 3 phương pháp để thay đổi các chuỗi:

  • re.split () dùng một mẫu RegEx để chia một chuỗi delimiter đã cho và trả về kết quả danh sách các chuỗi con.
  • re.sub () tìm tất cả các phần tử mà RegEx khớp với nhau, sau đó thay thế chúng bằng một chuỗi khác.
  • re.subn () tương tự như hàm sub () và trả về chuỗi mới cùng với vị trí chuỗi đã thay thế.

8. Để xóa 1 file trong Python thì dùng lệnh gì?

Để xóa một file ta dùng lệnh os.remove(file_name) hoặc os.unlink(file_name).

9. Hàm Lambda trong Python là gì?

Hàm Lambda còn được gọi là hàm ẩn danh nhỏ, là cách ngắn gọn để khai báo các hàm nhỏ và ẩn danh. Hàm Lambda hoạt động như các hàm thông thường (được khai báo bằng def), được khai báo bằng từ khóa lambda và không có khả năng tái sử dụng.

Hàm Lambda có thể nhận bất kỳ số lượng đối số nào, nhưng chỉ có thể có một cú pháp đó là: lambda tham_so: bieu_thuc

Ví dụ: x = lambda a : a + 10

print(x(5)) # Output: 15

10. *args và **kwargs là gì?

*args và **kwargs được dùng để giải nén các loại đối số tương ứng, cho phép gọi function có list đối số mà không chắc sẽ có bao nhiêu đối số truyền vào.

  • *args (arguments): là đối số, dùng trong trường hợp truyền vào hàm các tham số là những giá trị không có key.
  • **kwargs (keyword arguments): đối số từ khóa, dùng trong trường hợp truyền vào hàm các tham số có cặp giá trị key = value.

Với các câu hỏi phỏng vấn Python về lý thuyết, hãy trả lời ngắn gọn, trọng tâm nhất có thể. Đừng quá lan man sang quá nhiều ý khác (như vai trò, đặc điểm, phân loại,...) mà nhà tuyển dụng không đề cập đến.

11. Tôi có thể không dùng tên *args **kwargs mà đặt 1 ký hiệu khác được không?

Có. *args và **kwargs chỉ là tên quy ước, ta có thể thay đổi tên, nhưng bắt buộc giữ nguyên cú pháp * và **. Ví dụ có thể viết là *var **var hoặc *bob **bob cũng được, không có vấn đề. 

12. Bạn biết những cách nào để đổi string thành number?

Có thể áp dụng các hàm có sẵn như hàm tạo int(),  float() 

  • Hàm int ()

Ví dụ:

>>> integerFirst = 23

>>> floatFirst = 23.23

>>> complextFirst = 1 + 23j

  • Hàm float ()

Ví dụ: 

>>> integerFirst = 23

>>> floatFirst = 23.23

>>> complextFirst = 1 + 23j

  • Dùng hàm phức tạp ()

Ví dụ:

>>> x = "23a"

>>> z = int(x)

Traceback (most recent call last):

  File "", line 1, in 

ValueError: invalid literal for int() with base 10: '23a'

Có thể dùng hàm eval() để chuyển string thành number nhưng eval() chậm hơn một chút và có tiềm ẩn nhiều rủi ro bảo mật, nên hạn chế dùng.

13. Hãy giải bài toán sau: Hãy tạo danh sách số nguyên tố từ 1 - 100 với Python

Ta có đoạn code sau:

prime List = []

for possiblePrime in range (2, 100):

      isPrime = True

      for num in range(2, possiblePrime):

           if possiblePrime % num ==0:

                isPrime = False

           if isPrime:

                primeList.append(possiblePrime)

print (primeList)

Các câu hỏi phỏng vấn senior Python mới nhất

Câu hỏi phỏng vấn Python level senior có độ khó trung bình, đi sâu vào kiến thức về các chủ đề lớn và kinh nghiệm xử lý code. Dưới đây, ITNavi tổng hợp một số câu hỏi Python thường gặp trong buổi phỏng vấn chuyên môn nhất.

1. Bạn có cách để tránh UnboundLocalError exception không?

Lỗi UnboundLocalError exception xuất hiện khi ta cố tình truy cập vào một biến trong hàm/phương thức, nhưng lại chưa gán giá trị cho nó.

Có rất nhiều lỗi liên quan đến UnboundLocalError ví dụ như trùng tên thư viện và tên function, các biến chưa được import,... Để tránh gặp UnboundLocalError Python, bạn chú ý khi đặt tên biến hoặc tham khảo một số cách sửa lỗi UnboundLocalError dưới đây:

  • Đánh dấu biến là local trong định nghĩa hàm.
  • Sửa thứ tự truy cập của biến local.
  • Sử dụng từ khóa global để Python có thể phân biệt được các loại biến.

2. Introspection/reflection trong Python là gì?

Introspection là khả năng xác định loại hoặc thuộc tính (khai thác các thông tin về class, method, module,...) ngay tại thời điểm runtime.

Reflection cũng là khả năng kiểm tra thuộc tính của các đối tượng có thể được truyền vào tham số cho một hàm.

3. Python có hỗ trợ Introspection/reflection không?

Có. Python cung cấp một số built-in methods như type(), isinstance(), hasattr(), dir(), id(), help(),... hỗ trợ cho việc code Introspection, qua đó hiểu chương trình hơn, nắm rõ các objects đang làm việc để xử lý đúng logic và debugging hiệu quả. 

Trong Python, các hàm Reflection-enabling functions có thể sử dụng như: type(), isinstance(), callable(), dir(), và getattr().

  • Bạn có thể sẽ được hỏi khá nhiều câu hỏi dạng trả lời có-không kiểu như câu hỏi phỏng vấn Python này. Nếu không hoàn toàn chắc chắn với câu trả lời của mình, bạn có thể nói rằng theo ý hiểu cá nhân thì là ___. Hoặc đề xuất người phỏng vấn chuyên môn có thể gợi ý để có câu trả lời chính xác nhất. Nên nhớ: hãy trung thực về trình độ kiến thức của bản thân, bởi những câu hỏi sẽ phơi bày bạn đó.

4. Chức năng của biến dấu gạch dưới _ trong Python là gì?

Một số mục đích, chứng năng của dấu gạch dưới bao gồm:

  • Dùng để lưu trữ giá trị của biểu thức trong trình thông dịch vào một biến cụ thể.
  • Đánh dấu là biến không quan trọng, chỉ được sử dụng tạm thời.
  • Dùng để bỏ qua giá trị
  • Dùng trong vòng lặp để tránh trùng lặp tên biến
  • Tách các chữ số dài
  • Đặt tên cho biến, hàm, class,... như _variable, variable_, __variable, __variable__,...

Ví dụ cho mục đích tránh trùng lặp tên biến:

for _ in range(10):

    # Thực hiện một số công việc nhưng không cần giữ giá trị của biến _

    pass

5. Các cách để làm việc với Transitive dependency là gì?

Một số cách để làm việc với các Transitive dependency hiệu quả đó là:

  • Dùng Package Manager: Một số công cụ quản lý gói như Pipenv, Poetry, Conda,...
  • Tạo Dependency File: Thêm các phụ thuộc transitive vào tệp requirements.txt của dự án.
  • Dùng pip freeze
  • Kiểm soát phiên bản và tùy chọn cấu hình (Configuration Options).
  • Dùng virtualenv để tách các dependencies cho từng dự án riêng biệt.
  • Kiểm tra xung đột Conflict Resolution

6. Kể tên một số thư viện, framework Python mà bạn biết hoặc đã từng sử dụng

Đối mặt với câu hỏi phỏng vấn Python này, bạn có thể liệt kê một số thư viện và framework phổ biến dưới đây. Lưu ý, chỉ nên trả lời cho nhà tuyển dụng những thư viện, framework bạn biết hoặc đã sử dụng, tránh việc liệt kê hết mà không hiểu bản chất và cách hoạt động thì có thể là điểm trừ trong buổi phỏng vấn.

Các framework Python phổ biến có:

Thư viện mã nguồn mở

  • NumPy: Cho phép thực hiện phép toán khoa học dữ liệu, toán học.
  • Pandas:Cho phép xử lý, phân tích dữ liệu trong Python.
  • SciPy: Cho phép tính toán khoa học và kỹ thuật.
  • Matplotlib: Tạo đồ thị và biểu đồ.
  • TensorFlow: Cho phép phát triển mô hình machine learning và deep-learning.

 

Framework

  • Django: Framework web mã nguồn mở, dùng để xây dựng các ứng dụng web phức tạp.
  • Flask: Framework web miễn phí, dùng để xây dựng các ứng dụng web nhỏ nhưng có độ phức tạp khá cao.
  • PyTorch: Framework cho phép phát triển mô hình machine learning và deep-learning

 

7. Phép gán "x = y or z" có nghĩa là gì trong Python?

Phép gán này sẽ gán giá trị biến x bằng giá trị biến y nếu y true. Ngược lại, nếu false thì x sẽ được gán giá trị của z.

Các câu hỏi phỏng vấn Python level master

Đối với trình độ master, các câu hỏi phỏng vấn Python không chỉ còn là đơn thuần các khái niệm, định nghĩa, mà điều nhà tuyển dụng cần thấy được đó là phía sau các khái niệm, định nghĩa đó, bạn áp dụng trong công việc thế nào? tư duy như thế nào? có thêm giải pháp gì để có thể viết clean code không? Hoặc sẽ quản lý các dự án liên quan đến lập trình Python thế nào?

Vì vậy, các câu trả lời dưới đây chỉ mang tính chất tham khảo để bạn củng cố lại kiến thức. Thứ ăn điểm chính là kinh nghiệm của bạn. 

1. Metaclass trong Python là gì?

Nói ngắn gọn nhất thì Metaclass là class tạo ra class. Metaclass định nghĩa các class hoạt động gồm cách chúng được tạo ra, thuộc tính và phương thức.

Trong Python, định nghĩa metaclass được mô tả như sau:

class MyMeta(type): 

 def __init__(cls, name, bases, attrs):

  # Thực hiện xử lý metaclass ở đây 

  super(MyMeta, cls).__init__(name, bases, attrs) 

 

class MyClass(metaclass=MyMeta): 

 pass

 

Bạn cũng có thể trích lại câu nói từ Tim Peters - tác giả của Zen of Python, một nhân vật khá nổi tiếng trong cộng đồng Python - để thấy được sự cần thiết hay không của metaclass:

“Metaclasses are deeper magic than 99% of users should ever worry about. If you wonder whether you need them, you don’t (the people who actually need them know with certainty that they need them, and don’t need an explanation about why).”

— Tim Peters

2.  Bạn dùng Metaclass khi nào?

Một số tình huống tôi sử dụng metaclass đó là:

  • Tự động hóa khi tạo các class.
  • Kiểm tra, quản lý kiến thức về class, thuộc tính, phương thức, framework,...
  • Áp dụng quy tắc tự động hoặc kiểu tra, phân tích mã nguồn.
  • Tạo các class động.
  • Ứng dụng vào thiết kế giao diện.

Nếu có thể, hãy hỏi thêm nhà tuyển dụng về các trường hợp hoặc tình huống sử dụng metaclass mà họ đã từng làm. Đó cũng là một cách thể hiện tinh thần học hỏi, cầu thị kiến thức của bạn.

3. Tại sao lại sử dụng khối else trong cấu trúc try/except trong Python?

Cấu trúc try/except trong Python được dùng để xử lý các ngoại lệ (exceptions) hoặc lỗi trong mã nguồn.

Lý do sử dụng khối else trong cấu trúc try/except là:

  • Làm cho code dễ đọc hơn bằng các thực hiện các tác vụ dọn dẹp.
  • Tối ưu quá trình xử lý exceptions bằng việc kiểm tra một đối tượng có tồn tại hay không hoặc đảm bảo thực hiện các tác vụ khi không có ngoại lệ xảy ra.

4. Bạn có thể định nghĩa singleton một cách đơn giản, ngắn gọn không?

Ngắn gọn nhất mà nói, singleton là một mẫu thiết kế trong lập trình, nó đảm bảo rằng chỉ có một instance của một class được tạo ra và có thể truy cập từ bất cứ đâu trong ứng dụng của mình.

Mở rộng câu hỏi chuyên sâu khi phỏng vấn Python 

Ngoài những câu hỏi theo level phía trên, ITNavi cũng phân chia các câu hỏi theo từng chủ đề cụ thể để các bạn có thể dung nạp được nhiều kiến thức hơn trong ngành. Các câu hỏi phỏng vấn Python dưới đây bao gồm Odoo, Flask và Django. Ngoài ra cũng sẽ có các nhóm câu hỏi với chủ đề khác sẽ được ITNavi cập nhật thường xuyên.

Câu hỏi phỏng vấn Flask Python

1. Bạn có biết đến Flask không?

Flask là một web-framework mã nguồn mở được viết bằng ngôn ngữ lập trình Python. Flask rất nhẹ và dễ dàng cho người dùng tạo ra một website nhỏ với nền tảng chính là Werkzeug WSGI và Jinja2.

2. Cách để lưu trữ và quản lý session data trong Flask là gì?

Một số cách hữu ích để lưu trữ và quản lý session data đó là:

  • Sử dụng cookie: dùng hàm session()
  • Lưu session data trong một CSDL
  • Lưu trữ session data trong hệ thống lưu trữ như Redis, Memcached,...
  • Lưu trữ trên URL

ITNavi cũng tổng hợp thêm một số câu hỏi chuyên sâu về Flask dưới đây để bạn luyện tập và tìm hiểu thêm:

  • Middleware trong Flask là gì?
  • Flask và Django khác nhau như thế nào?
  • Flask-WTF là gì?
  • Hãy nêu ví dụ về Routing và URL Converter trong Flask?
  • Để tạo một ứng dụng Flask đa ngôn ngữ cần làm những gì?
  • Middleware WSGI là gì
  • Flask làm việc với WSGI như thế nào?
  • RESTful API là gì?
  • Cách để xây dựng một RESTful API trong Flask?
  • Khi nào nên sử dụng Blueprints trong Flask?

Câu hỏi phỏng vấn Django Python

1. Django Python là gì?

Django là một framework lập trình web bậc cao được viết bằng ngôn ngữ Python. Django cung cấp một cơ sở hạ tầng mạnh mẽ lập trình web và thúc đẩy phát triển web nhanh, sạch và thực dụng.

Một số website phổ biến có sử dụng Django đó là: Pinterest, Instagram, Mozilla, và Bitbucket.

2. Middleware trong Django là gì?

Middleware trong Django là một thành phần trung gian nằm giữa request và response, có nhiệm vụ xử lý, trả kết quả cho Middleware kế tiếp hoặc là trả về cho controllers hoặc tầng logic chính.

Một số câu hỏi phỏng vấn Python khác nhà tuyển dụng có thể hỏi liên quan đến chủ đề Django như sau:

  • Làm thế nào để tối ưu hóa các truy vấn ORM?
  • Hãy giải thích cách Django xử lý CSRF (Cross-Site Request Forgery) và cách bảo vệ ứng dụng khỏi cuộc tấn công này.
  • Làm thế nào để xây dựng một API RESTful với Django REST framework?
  • Middleware authentication và authentication backends trong Django có điểm gì khác nhau?
  • Hãy tạo một ứng dụng Django đa ngôn ngữ.

Câu hỏi phỏng vấn Odoo Python

1. Odoo Python là gì?

Odoo là nền tảng mở được dựa trên ngôn ngữ lập trình Python và sử dụng cơ sở dữ liệu PostgreSQL. Odoo cho phép bạn tích hợp, tuỳ biến nhiều mô-đun dành cho quản trị doanh nghiệp (hay còn gọi là Enterprise Resource Planning - ERP) ví dụ như xây dựng website TMĐT, CMS, CRM, INVOICE, POS, ACCOUNTING,...

2. Hiện nay có bao nhiêu phiên bản Odoo? 

Tính đến thời điểm tháng 9/2023, phiên bản mới nhất của Odoo là Odoo 16 và dự kiến sẽ phát hành Odoo 17 với nhiều ưu điểm vượt trội trong tháng 10/2023.

Odoo vẫn giữ các phiên bản cũ (Odoo 15, 14, 13, 12,...) để người dùng có thời gian chuyển đổi, nâng cấp.

Hiện nay, Odoo có 2 phiên bản chính phục vụ nhu cầu của khách hàng, doanh nghiệp:

  • Odoo Community: Bản miễn phí.
  • Odoo Enterprise: Bản trả phí và được hỗ trợ bởi Odoo SA.

 

Ngoài các câu hỏi về Odoo phía trên, bạn có thể tìm hiểu thêm về một số câu hỏi khác như:

  • Tại sao các doanh nghiệp ngày càng ưa dùng Odoo trong vận hành kinh doanh?
  • Trong Odoo Mô-đun là gì và cách chúng tương tác với nhau?
  • Hãy mô tả về cấu trúc của một mô-đun Odoo bao gồm __manifest__.py và các tệp XML?
  • Cách tận dụng QWeb trong Odoo để tạo templates cho giao diện người dùng là gì?
  • Có bao nhiêu cách để tạo báo cáo tuỳ chỉnh trong Odoo?

Kinh nghiệm phỏng vấn tìm việc lập trình Python

Không chỉ chú trọng vào các câu hỏi phỏng vấn Python chuyên môn, bạn đừng quên “dắt túi” những kinh nghiệm phỏng vấn xin việc Python thuyết phục và khôn khéo. ITNavi sẽ tóm tắt bí quyết để ghi điểm với nhà tuyển dụng trong mọi cuộc phỏng vấn dưới đây:

Vượt chướng ngại vật vòng CV đầu tiên

  • Tối ưu giao diện, làm đẹp CV để ăn những điểm đầu tiên.
  • Thông tin trên CV thể hiện tính chuyên nghiệp, gãy gọn, trọng tâm.

Vượt vòng phỏng vấn gay cấn

  • Luôn trung thực.
  • Thể hiện thái độ cầu thị, tinh thần cầu tiến.
  • Khéo léo biến cuộc phỏng vấn thành buổi trao đổi kiến thức.
  • Xác nhận đúng, đủ, rõ các yêu cầu của người phỏng vấn chuyên môn về đề bài test.
  • Đầu tư về phần clean code trong các bài thực hành
  • Có thể giải thích phương thức, công cụ, logic mà bạn giải quyết bài toán.

Về đích sau buổi phỏng vấn

  • Gửi mail cảm ơn đã có cơ hội cùng trao đổi và học hỏi thêm nhiều kiến thức.
  • Kịp thời phản hồi mail thông báo từ nhà tuyển dụng. 

Trên đây là tổng hợp các câu hỏi và câu trả lời về Python ở các level fresher, junior, senior, master,... Những kinh nghiệm và câu hỏi phỏng vấn Python sẽ được cập nhật thường xuyên để các bạn có một hành trang tốt hơn khi đi phỏng vấn xin việc. Cảm ơn bạn đã đọc hết bài viết Python này. Chúc bạn có buổi phỏng vấn như ý!

 

ITNavi - Nền tảng kết nối việc làm IT

Nguồn: Tổng hợp 38+ câu hỏi phỏng vấn Python #Hay và #Chất

Bài viết liên quan

NEWSLETTER

Nhập địa chỉ email của bạn dưới đây để đăng ký nhận tin mới nhất

KẾT NỐI VÀ THEO DÕI