Logo

101 câu hỏi phỏng vấn python thường gặp

Lượt xem: 211
Ngày đăng: 13/03/2024

Tổng hợp những câu hỏi phỏng vấn python cơ bản, phổ biến, về chuyên môn, thường gặp kèm gợi ý trả lời chi tiết mới nhất không thể bỏ qua.

101 câu hỏi phỏng vấn python thường gặp

➤➤➤ Xem thêm: 1001 câu hỏi phỏng vấn thường gặp và cách trả lời hay nhất - Kinh nghiệm phỏng vấn ViecLamVui

Câu hỏi phỏng vấn python cơ bản

Câu hỏi phỏng vấn python cơ bản

Câu hỏi phỏng vấn python cơ bản

Những tính năng chính của Python?

Cũng giống như PHP và Ruby, Python được biết đến là một ngôn ngữ được dựa trên trình thông dịch, điều đó có nghĩa là, việc biên dịch không cần thiết phải có trước khi chạy như một số ngôn ngữ khác như C/C++.

Python là một ngôn ngữ kiểu động, tức là bạn không cần phải chỉ ra kiểu dữ liệu của các biến khi khai báo chúng hay bất cứ điều gì đó tương tự thế. 

Viết code với Python thì cực kỳ nhanh và cho phép các extension mở rộng dựa trên C để việc bottleneck (nút thắt cổ chai) có thể được tối ưu hóa. Package numpy chính là một ví dụ.

Python là ngôn ngữ lập trình dựa trên trình thông dịch, ngôn ngữ kịch bản hướng đối tượng và tương tác, và tất nhiên đây cũng là một ngôn ngữ được thiết kế để rất dễ đọc, dễ nhớ, dễ viết.

Tính đa năng của Python có thể ứng dụng cho nhiều lĩnh vực và các ứng dụng đa nền tảng khác nhau như ứng dụng web, big data, machine learning, mô hình khoa học,...

Tham số được truyền vào như thế nào?

Với Python, mọi thứ đều là một object và tất cả các biến đều tham chiếu tới các đối tượng. Các giá trị tham chiếu sẽ được link tới các hàm, và kết quả là ta không thể thay đổi giá trị của kiểu dữ liệu này. Tuy nhiên, chúng ta lại có thể thay đổi một đối tượng vì chúng là kiểu dữ liệu mutable.

Bên cạnh đó, bạn cũng có thể sắp xếp các đối số bằng cách sử dụng các chỉ định * và ** trong danh sách các tham số của hàm khi muốn truyền tham số tùy chọn hay từ khóa từ hàm này sang hàm khác trong Python.

Dữ liệu chuẩn mà Python cung cấp là gì? Phân biệt dữ liệu có thể thay đổi được (mutable) và dữ liệu không thay đổi được (immutable)?

  • Kiểu dữ liệu mutable chuẩn là những giá trị có dữ liệu có thể thay đổi được gồm có: List, Set, Dictionary
  • Kiểu dữ liệu immutable chuẩn những giá trị có dữ liệu không thể thay đổi được  gồm có: Chuỗi, Tuple, Số

Namespace trong Python là gì?

Namespace trong Python còn gọi là không gian tên, là một hệ thống có một tên duy nhất cho mỗi mọi đối tượng trong Python. Một đối tượng có thể là một biến hoặc một phương thức.

Bản thân Python duy trì một namespace dưới dạng từ điển Python và có nhiều loại namespace khác nhau, và khi người dùng tạo một module thì một namespace toàn cục sẽ được khởi tạo, việc tạo các hàm cục bộ sau đó sẽ tạo ra namespace cục bộ. Namespace tích hợp sẵn bao gồm namespace toàn cục và namespace toàn cục bao gồm namespace cục bộ.

Biến toàn cục và biến cục bộ trong Python?

Những biến nào được khai báo ở bên ngoài hàm hay trong phạm vi toàn cục (global) thì được gọi là biến toàn cục (global variable), chính vì vậy mà bạn có thể truy cập tới những biến này ở bất cứ đâu tùy thích trong chương trình.

Ngược lại, biến cục bộ (local variable) lại là những biến được khai báo bên trong một hàm nào đó. Những biến này chỉ có sẵn trong một phạm vi nhất định thay vì ở phạm vi toàn cục như các biến global.

Module Python là gì? Module chuẩn thường dùng trong Python?

  • Module Python là những file chứa code Python có thể là các biến hay các class function. Một module Python thường là một file .py chứa những dòng lệnh có thể thực thi được.
  • Một vài module chuẩn Python thường dùng là: os, sys, math, random, data time, JSON,...

Cách random những item có trong một list khi làm việc với Python?

Chúng ta có một ví dụ minh họa sau đây:

Cách random những item có trong một list khi làm việc với Python?

 

 

 

Khi đó output của dòng code trên sẽ là:

[‘Flying’, ‘Keep’, ‘Blue’, ‘High’, ‘The’, ‘Flag’]

Break, Continue và Pass trong Python làm việc như thế nào?

  • Break: Cho phép dừng vòng lặp khi gặp một số điều kiện nào đó và quyền điều khiển sẽ được đưa cho statement kế tiếp
  • Continue: Cho phép skip một số phần của vòng lặp khi gặp một số điều kiện cụ thể và quyền điều khiển sẽ lại được đưa về lúc bắt đầu vòng lặp.
  • Pass: Trong Python, pass là một lệnh trống, nó chỉ giữ chỗ cho các hàm, vòng lặp mà bạn đã thêm vào, nhưng chưa dùng đến trong hiện tại.

In hoa chữ cái đầu của một ký tự của chuỗi trong Python?

Trong Python, chuyện này trở nên đơn giản nhờ phương thức capitalize() có thể in hoa chữ cái đầu tiên của một chuỗi. Và nếu chuỗi đó đã được viết hoa sẵn chữ cái đầu thì qua phương thức trên, thì phương thức này sẽ return về chuỗi gốc ban đầu.

Function help () và dir () trong Python có chức năng gì?

  • Cả hai hàm help() và dir() đều có thể truy cập được từ trình thông dịch của Python và được sử dụng để xem một hàm tổng hợp của các hàm dựng sẵn.
  • Hàm Help (): Hàm help () được sử dụng để hiển thị chuỗi tài liệu và cũng tạo điều kiện cho bạn thấy trợ giúp liên quan đến các mô-đun, từ khóa, thuộc tính,…
  • Hàm Dir (): Hàm dir () được sử dụng để hiển thị các ký hiệu đã xác định (defined symbols).

Câu hỏi phỏng vấn python mới nhất

Câu hỏi phỏng vấn python thường gặp

Câu hỏi phỏng vấn python thường gặp

Phương thức slipt(), subn(), sub() của module “re” trong Python?

Để làm việc với string thì module “re” của Python đã cung cấp cho người dùng 3 phương thức sau:

  • split(): tách chuỗi thành các mảng bởi các ký tự, nếu ta cung cấp đối số num thì sẽ chia chuỗi thành num + 1 chuỗi con.
  • sub(): có tác dụng so khớp và thay thế chuỗi so khớp được. 
  • subn(): tương tự như sub() và đồng thời cũng return về một chuỗi mới đi kèm với sự thay thế của no. 

Làm sao để chuyển một list thành một tuple?

  • Cách 1: chuyển toàn bộ list a thành một tuple: tuple(a)
  • Cách 2: chuyển một số thành phần của list a = [1, 2, 3, 4, 5] thành tuple b: b = (a[0], a[3], a[4])

Python quản lý bộ nhớ thế nào?

Bộ nhớ Python được quản lý trong không gian nhớ riêng của Python. Tất cả các đối tượng cấu trúc dữ liệu được đặt trong một không gian nhớ riêng. Lập trình viên không truy cập vào vùng nhớ này được mà do Python tự quản lý.

Việc phân bổ vùng nhớ cho các đối tượng do trình quản lý bộ nhớ của Python đảm nhiệm. API lõi cho các lập trình viên truy cập qua một số công cụ để lập trình.

Python cũng có trình gom rác tích hợp sẵn để tái chế các vùng nhớ không còn sử dụng đến và giải pháp chúng tạo thêm chỗ cho không gian nhớ.

Làm sao để chuyển một list thành một array?

Khi lập trình, sẽ có lúc chúng ta cần chuyển list thành array để thực hiện các phép toán trên đó một cách hiệu quả hơn. Để thực hiện việc này, chúng ta sử dụng hàm numpy.array(). Hàm này nhận 1 list làm tham số và trả về một array chứa các thành phần của list. Ví dụ:

import numpy as np

a = [1, 2, 3]

a_array = np.array(a)

Monkey patching là gì?

  • Trong Python, thuật ngữ monkey patch chỉ việc thay đổi một lớp (class) hay một module trong quá trình thực thi (run-time).

Bạn thực hiện đa luồng (multithreading) trong Python thế nào?

Python có một thư viện đa luồng nhưng nếu bạn muốn sử dụng đa luồng để tăng tốc chương trình, sử dụng thư viện này không phải là một ý kiến hay.

Python có một cấu trúc gọi là Khoá Phiên Dịch Toàn Cục (Global Interpreter Lock - GIL). GIL đảm bảo rằng tại một thời điểm chỉ có một luồng được thực thi. Một luồng lấy GIL, làm một số công việc, rồi GIL cho luồng kế tiếp.

Quá trình này xảy ra rất nhanh, nên dưới ánh mắt con người, nó có vẻ đang thực hiện song song, nhưng thực ra chúng chỉ luân phiên sử dụng cùng một lõi CPU.

Tất cả quá trình luân chuyển GIL này làm tăng thêm tải cho quá trình thực thi. Điều này nghĩa là nếu bạn muốn tăng tốc cho chương trình của mình, sử dụng thư viện đa luồng không phải là ý tưởng tốt.

Pickling và unpickling là gì?

Module Pickle nhận một đối tượng Python, chuyển nó thành chuỗi đại diện, và lưu nó ra tập tin bằng hàm dump. Quá trình này gọi là pickling. Quá trình ngược lại, nghĩa là chuyển một chuỗi đại diện thành đối tượng Python được gọi là unpickling.

Câu hỏi phỏng vấn python về ngôn ngữ

Câu hỏi phỏng vấn python về ngôn ngữ

Câu hỏi phỏng vấn python về ngôn ngữ

Giải thích cơ chế kế thừa trong Python và đưa ra một ví dụ minh hoạ?

Kế thừa cho phép một Lớp (Class) thừa hưởng tất cả các thành phần (thuộc tính và hàm) của một Lớp khác. Kế thừa giúp tăng khả năng tái sử dụng mã nguồn, giúp dễ tạo và bảo trì các ứng dụng. Lớp cho kế thừa được gọi là Lớp cha (super class) và lớp kế thừa từ lớp khác được gọi là Lớp con (child class.)

Python hỗ trợ 4 kiểu kế thừa sau:

  • Kế thừa đơn - một lớp kế thừa từ một lớp cha duy nhất.
  • Kế thừa đa lớp - lớp con d1 kế thừa từ lớp Cha 1, và d2 kế thừa từ lớp Cha 2.
  • Kế thừa theo thứ bậc - một lớp cha có thể cho cho nhiều lớp con kế thừa.
  • Đa kế thừa - một lớp con kế thừa từ nhiều hơn một lớp cha.

PYTHONPATH là gì?

Đó là một biến môi trường được sử dụng khi một đơn nguyên ứng dụng (module) được nhập (import) vào chương trình. Khi nhập một module, PYTHONPATH sẽ được tìm kiếm để kiểm tra sự có mặt của module được yêu cầu nhập trong các thư mục khác. Trình phiên dịch dùng biến PYTHONPATH để xác định module nào sẽ được tải vào bộ nhớ.

Hãy giải thích sự khác nhau giữa hàm range() và hàm xrange()?

Trong phần lớn các trường hợp range() và xrange() chỉ cùng một tính năng. Chúng đều cho chúng ta tạo ra một Danh sách (List) các số nguyên để sử dụng. Sự khác biệt duy nhất là hàm range trả về một đối tượng Danh sách của Python, còn hàm xrange trả về một đối tượng xrange.

Numpy array có lợi thế gì so với list (hoặc list lồng trong list - nested list)?

Python list là những biến tập hợp đa dụng và hiệu quả. Chúng hỗ trợ khá tốt các thao tác chèn (insert,) xoá (deletion,) thêm vào cuối (appending,) và nối list (concatenate.) Cấu trúc duyệt danh sách (list comprehension) giúp cho list dễ xây dựng và thao tác.

Tuy nhiên, chúng có một số hạn chế sau: list không hỗ trợ các phép tính vector ('vectorized' operations) như cộng hay nhân theo từng phần tử (elementwise addition and multiplication,) và việc list chứa các phần tử thuộc nhiều kiểu dữ liệu khác nhau cho thấy Python phải lưu kiểu dữ liệu của mỗi phần tử, và phải thực thi lệnh theo kiểu dữ liệu khi thao tác trên mỗi phần tử.

NumPy không chỉ hiệu quả hơn; nó cũng tiện hơn. Bạn có thể thực hiện nhiều phép tính theo kiểu vector và ma trận miễn phí, giúp tiết kiệm thời gian làm các việc không cần thiết. Các phép tính này được thực hiện một cách hiệu quả.

NumPy array nhanh hơn và bạn có thể sử dụng rất nhiều hàm dựng sẵn (built-in) với Numpy, FFTs, tích chập (convolutions,) tìm nhanh, thống kê cơ bản, đại số tuyến tính, biểu đồ tần suất (histogram) v.v...

Tính đa hình (Polymorphism) trong Python là gì?

Tính đa hình chỉ khả năng một đối tượng có thể có nhiều hình thức khác nhau. Ví dụ, nếu Lớp cha có một hàm tên ABC, Lớp con có thể có một hàm cùng tên nhưng với các tham số và biến khác nhau. Python hỗ trợ tính đa hình.

Vật trang trí (decorator) Python là gì?

Vật trang trí là một mẫu thiết kế (design pattern) trong Python cho phép người dùng thêm tính năng cho một đối tượng sẵn có mà không cần sửa đổi cấu trúc của nó. Vật trang trí thường được gọi trước định nghĩa hàm chúng ta muốn trang trí.

PEP 8 là gì?

PEP là chữ viết tắt của Python Enhancement Proposal (Đề xuất tăng cường Python.) Đó là một bộ các quy ước về cách viết, định dạng mã nguồn, một bộ các đề xuất về cách viết mã nguồn Python để dễ đọc hơn.

Init là gì?

__init__ là một hàm tạo dựng (constructor) trong Python. Hàm này tự động được gọi để phân chia bộ nhớ khi một đối tượng hay một thực thể (instance) của một Lớp được khởi tạo. Tất cả các Lớp đều có hàm __init__

Câu hỏi phỏng vấn python phổ biến

Câu hỏi phỏng vấn python phổ biến

Câu hỏi phỏng vấn python phổ biến

Biến toàn cục (global) và biến địa phương (local) trong Python là gì?

Biến toàn cục là các biến được khai báo bên ngoài phạm vi một hàm hoặc được khai báo trong không gian toàn cục. Các biến này có thể được truy xuất bởi bất kỳ hàm nào trong chương trình.

Biến địa phương là các biến được khai báo trong phạm vi của một hàm. Các biến địa phương tồn tại trong không gian địa phương, và không tồn tại trong không gian toàn cục. Biến địa phương chỉ có thể được truy xuất trong phạm vi hàm mà nó được khai báo.

@property trong Python là gì?

@property là một vật trang trí trong Python. @property trước định nghĩa một hàm cho phép truy xuất hàm đó như cách truy xuất một thuộc tính (không cần cặp ngoặc đơn sau tên hàm.)

Toán tử bộ ba là gì?

Toán tử bộ ba là một cách viết câu lệnh điều kiện trong Python. Như từ 'bộ ba' trong tên gợi ý, toán tử này bao gồm 3 thành phần:

  • Giá trị điều kiện đúng: Giá trị sẽ được gán cho biến nếu biểu thức điều kiện trả về giá trị True
  • Điều kiện: một biểu thức trả về kết quả True hoặc False
  • Giá trị điều kiện sai: Giá trị sẽ được gán cho biến nếu biểu thức điều kiện trả về giá trị Sai.

Toán tử tạo từ điển từ biến khả lặp (dictionary comprehension) là gì?

Đây là một cách tạo 1 từ điển trong Python. Nó tạo ra một từ điển bằng cách sáp nhập 2 bộ dữ liệu ở dạng danh sách (list) hoặc mảng (array.)

Dữ liệu của một trong hai list / array sẽ trở thành 'từ khoá' của từ điển, cái còn lại là giá trị. Mỗi 'từ khoá' sẽ là khoá nhận dạng duy nhất cho 1 giá trị, và do đó, kích thước của 2 list/array nên bằng nhau.

Cú pháp chung:

tu_dien_moi = {key:value for (key, value) in bien_kha_lap}

Đơn nguyên (modules) Python là gì?

Một đơn nguyên Python là tập tin Python bao gồm một bộ các hàm và biến để sử dụng trong một ứng dụng. Các biến có thể thuộc bất kỳ kiểu dữ liệu nào. Đơn nguyên có thể thuộc 1 trong 2 dạng:

  • Dựng sẵn (Built in)
  • Do người dùng định nghĩa (User-defined)

Lợi ích của đơn nguyên trong Python?

Có một số lợi ích chủ chốt trong việc tạo và sử dụng đơn nguyên trong Python:

Mã nguồn có cấu trúc

  • Mã nguồn được tổ chức mạch lạc bằng cách nhóm chúng vào một tập tin Python. Việc này giúp cho quá trình phát triển trở nên dễ hơn, và ít bị lỗi hơn.
  • Dễ hiểu và sử dụng mã nguồn hơn.

Tái sử dụng

  • Các tính năng định nghĩa trong một đơn nguyên có thể dễ dàng được sử dụng lại ở những phần khác của ứng dụng. Qua đó, chúng ta không phải viết lại các đoạn mã nguồn đã viết ở chỗ khác.

Câu hỏi phỏng vấn python về chuyên môn

Câu hỏi phỏng vấn python về chuyên môn

Câu hỏi phỏng vấn python về chuyên môn

List và tuple khác nhau thế nào?

List Tuple
List là các đối tượng có thể thay đổi được. (Các đối tượng có thể thay đổi sau khi khởi tạo.) Tuple bao gồm các đối tượng không thay đổi được. (Các đối tượng không thể thay đổi được sau khi khởi tạo.)
List sử dụng bộ nhớ lớn. Tuple sử dụng bộ nhớ nhỏ.
List được lưu trong 2 khối bộ nhớ (một cái có kích thước cố định, cái còn lại có kích thước biến đổi để lưu trữ dữ liệu). Tuple được lưu trong một khối nhớ duy nhất.
Tạo list chậm hơn vì cần truy cập 2 khối bộ nhớ. Tạo tuple nhanh hơn tạo list.
Có thể xoá hoặc thay thế các thành phần trong list. Không thể xoá hoặc thay thế các thành phần trong tuple.
Một list có dữ liệu lưu trong cặp ngoặc vuông []. Ví dụ: [1,2,3] Một tuple có dữ liệu lưu trong cặp ngoặc đơn (). Ví dụ: (1,2,3)

Khi nào nên sử dụng list, khi nào nên dùng tuple?

Nên dùng tuple để lưu trữ những thông tin bạn không muốn thay đổi trong quá trình thực thi, chẳng hạn như danh sách chọn lựa giới tính của một người, chúng ta có thể định nghĩa dưới dạng một tuple như sau: gender_chocies = ((1, 'Nam'), (2, 'Nữ'), (3, 'Không tiết lộ')). Khi lưu vào database, chúng ta chỉ cần lưu các giá trị 1, 2, hoặc 3 để tiện xử lý. Khi hiện thị, chúng ta có thể dễ dàng hiện thị Nam thay cho giá trị 1, Nữ thay cho giá trị 2, và Không tiết lộ thay cho giá trị 3.

Vì lists có thể thay đổi được sau khi khởi tạo, chúng ta nên dùng nó để chứa các thông tin cần thay đổi trong quá trình thực thi chương trình. Ví dụ: danh sách các mã chứng khoán đáp ứng một tiêu chí lọc. Chúng ta lưu trong list để có thể thay đổi thứ tự của các mã chứng khoán trong danh sách đó theo tên, hoặc theo giá.

List và array khác nhau thế nào?

List Array
Python list linh hoạt và có thể lưu nhiều kiểu dữ liệu khác nhau. Python array là một bọc mỏng quanh C array.
List là một phần trong cú pháp của Python, nên không cần khai báo trước. Array cần được import, hoặc khai báo từ các thư viện khác (như numpy)
List có thể thay đổi kích thước một cách nhanh chóng vì Python khởi tạo thêm một số thành phần khác trong list ngay khi khởi tạo. Array không thay đổi kích thước được. Thay vào đó, các giá trị của một array sẽ được sao chép qua một array khác có kích thước lớn hơn.
List có thể chứa các dữ liệu không đồng nhất về kiểu. Array chỉ có thể chứa các dữ liệu đồng nhất về kiểu.
Không thể áp dụng các hàm toán học trực tiếp lên list. Thay vào đó, chúng phải được áp dụng lần lượt trên từng thành phần của list. Array được tối ưu hoá cho các phép tính số học.
List tiêu thụ nhiều bộ nhớ hơn vì chúng phân bổ thêm bộ nhớ cho một số thành phần bổ sung để dễ dàng đưa thêm thành phần vào list. Vì array không thay đổi kích thước sau khi khởi tạo, chúng tiêu thụ ít bộ nhớ hơn.

Hãy giải thích sự khác biệt giữa Python 2 và Python 3

Python 2 Python 3

Mã hoá chuỗi

Python 2 mã hoá chuỗi theo bộ mã ASCII. Unicode là bộ mã cha (super set) của ASCII và do đó, có thể mã hoá nhiều ký tự hơn, bao gồm cả các ký tự nước ngoài.

Mã hoá chuỗi

Python 3 lưu  chuỗi ở định dạng Unicode theo mặc định.

Phép chia 

Python 2 áp dụng hàm floor vào kết quả của phép chia và chỉ trả về phần nguyên của thương số. Do đó, 5 / 2 sẽ trả về kết quả 2 (thay vì 2.5)

Phép chia

Phép chia trong Python 3 trả về kết quả thập phân như thông thường. 5 / 2 = 2.5

Lệnh in (print)

Python 2 không yêu cầu cặp ngoặc đơn (). Ví dụ: print 'print me!'

Lệnh in 

Python 3 yêu cầu đặt nội dung in giữa cặp ngoặc đơn (). Ví dụ: print('print me!')

Các thư viện 

Nhiều thư viện được xây dựng cho Python 2 và không tương thích với Python 3

Các thư viện

Một số thư viện mới hơn được xây dựng cho Python 3, và không tương thích với Python 2

1001 CÂU HỎI PHỎNG VẤN

Tổng hợp những câu hỏi phỏng vấn python cơ bản, phổ biến, về chuyên môn, thường gặp kèm gợi ý trả lời chi tiết mới nhất không thể bỏ qua.

Trên đây là 101 câu hỏi phỏng vấn python thường gặp, ViecLamVui - chuyên trang việc làm 24h miễn phí - gửi đến bạn. Hy vọng tài liệu trên có thể hỗ trợ công việc của các bạn thật hiệu quả.

#ViecLamVui

 

Bạn có thể đăng tin tuyển dụng miễn phí, tìm việc làm miễn phí các vị trí công việcViệc Làm IT. Bài viết thuộc danh mụcBlog Việc Làm IT trên ViecLamVui