40 câu hỏi và trả lời phỏng vấn Python phổ biến nhất

1) Python là gì? Lợi ích của việc sử dụng Python?

Python là ngôn ngữ lập trình với đối tượng, mô-đun, luồng, ngoại lệ và quản lý bộ nhớ tự động. Lợi ích của việc sử dụng Python là nó đơn giản, dễ dàng, uyển chuyển, có thể mở rộng, có các cấu trúc dữ liệu đi kèm và nó là một ngôn ngữ mã nguồn mở.

2) PEP 8 là gì?

PEP 8 là một quy ước cách viết mã nguồn, một bộ khuyến nghị về cách viết mã Python để chúng dễ đọc hơn.

3) Thế nào là giầm(pickling) và vớt(unpickling)?

Mô-đun giầm (Pickle) chấp nhận bất kỳ đối tượng Python nào và chuyển đổi nó thành đối tượng biểu diễn dạng chuỗi và kết xuất nó thành một tệp bằng cách sử dụng hàm dump, quá trình này được gọi là giầm (pickling). Quá trình chuyển đổi thành đối tượng Python ban đầu từ đối tượng biểu diễn dạng chuỗi đã được lưu trữ trước đó được gọi là vớt (unpickling).

4) Quá trình thông dịch của Python như thế nào?

Ngôn ngữ Python là một ngôn ngữ thông dịch. Chương trình Python chạy trực tiếp từ mã nguồn. Nó chuyển đổi mã nguồn được lập trình viên viết thành ngôn ngữ trung gian, sau đó một lần nữa được dịch sang ngôn ngữ máy để thực thi.

5) Làm thế nào quản lý bộ nhớ trong Python?

  • Bộ nhớ Python được quản lý bởi không gian heap riêng của Python. Tất cả các đối tượng Python và cấu trúc dữ liệu được đặt trong một heap riêng. Lập trình viên không có quyền truy cập vào heap riêng này và trình thông dịch của Python sẽ quản lý heap riêng này.
  • Việc phân bổ không gian heap của Python cho các đối tượng được thực hiện bởi trình quản lý bộ nhớ Python. API lõi cung cấp quyền truy cập vào một số công cụ để lập trình viên viết mã.
  • Python cũng có một trình thu gom rác sẵn có, giải phóng tất cả bộ nhớ không sử dụng và giúp không gian heap có thể sử dụng bộ nhớ này.

6) Có các công cụ nào giúp tìm lỗi hoặc thực hiện phân tích tĩnh?

PyChecker là một công cụ phân tích tĩnh phát hiện các lỗi trong mã nguồn Python và cảnh báo về kiểu và độ phức tạp của lỗi. Pylint là một công cụ khác để xác minh xem mô-đun có đáp ứng tiêu chuẩn mã nguồn hay không.

7) Decorator trong Python là gì?

Decorator trong Python là một thay đổi cụ thể chúng ta thực hiện trong cú pháp Python để khiến việc thay đổi chức năng dễ dàng hơn.

8) Sự khác biệt giữa danh sách và tuple là gì?

Sự khác biệt giữa danh sách và tuple đó là danh sách có thể thay đổi trong khi tuple thì không. Tuple có thể được băm (hash), ví dụ như việc làm khóa cho từ điển.

9) Cách truyền theo tham trị và tham chiếu như thế nào?

Mọi thứ trong Python đều là đối tượng và tất cả các biến đều trỏ tới các đối tượng nhất định. Các giá trị tham chiếu phụ thuộc vào các hàm, và vì thế bạn không thể thay đổi giá trị tham chiếu. Tuy nhiên bạn có thể thay đổi đối tượng nếu đối tượng có thể được thay đổi.

10) Comprehension cho từ điển và danh sách là gì?

Chúng là cấu trúc cú pháp giúp việc tạo từ điển và danh sách dựa trên một tập có thể duyệt.

11) Có những kiểu dữ liệu dựng sẵn nào trong Python?

Python hỗ trợ kiểu dữ liệu dựng sẵn có thể thay đổi và không thể thay đổi. Các kiểu dữ liệu dựng sẵn có thể thay đổi bao gồm:

  • Mảng
  • Set
  • Từ điển

Các kiểu dữ liệu dựng sẵn không thể thay đổi:

  • Chuỗi
  • Tuple
  • Số

12) Không gian tên trong Python là gì?

Trong Python, mỗi tên được khai báo đều có một ví trí để lưu trữ và tìm kiếm. Nó được gọi là không gian tên (namespace). Nó giống như một chiếc hộp nơi tên biến được ánh xạ tới vị trí lưu đối tượng. Bất cứ khi nào biến được tìm kiếm, chiếc hộp này cũng sẽ được tìm để trả lại đối tượng tương ứng.

13) Lambda trong Python là gì?

Nó là hàm ẩn danh một biểu thức thường được sử dụng làm hàm trực tiếp (inline).

14) Tại sao biểu mẫu lambda lại không có câu lệnh?

Một hàm lambda trong python không có câu lệnh vì nó được sử dụng để tạo đối tượng hàm mới và sau đó trả về chúng khi chạy.

15) Pass trong Python là gì?

Pass có nghĩa là câu lệnh Python không được thực thi, hay nói cách khác, nó là một cách giữ chỗ trong câu lệnh ghép, trong đó cần có một khoảng trống bên trái và không có gì được viết ở đó.

16) Trong Python, biến lặp là gì?

Trong Python, các biến lặp (iterator) được sử dụng để lặp lại một nhóm các thành phần, phần tử của mảng.

17) Kiểm thử đơn vị trong Python là gì?

Nền tảng kiểm thử từng đơn vị trong Python được gọi là kiểm thử đơn vị. Nó hỗ trợ chia sẻ thiết lập, kiểm thử tự động, dừng mã nguồn để kiểm thử và kết hợp các phép thử thành bộ.

18) Hàm slice(cắt) trong Python là gì?

Một cơ chế cho phép lựa chọn một loạt các đối tượng từ đối tượng kiểu danh sách, tuple, chuỗi…được gọi là cắt (slicing).

19) Hàm sinh (generator) trong Python là gì?

Phương pháp thực thi biến lặp được gọi là hàm sinh. Nó giống như hàm thông thường ngoại trừ trường hợp nó chứa một biểu thức trong hàm.

20) Docstring trong Python là gì?

Chuỗi chứa tài liệu trong Python được gọi là docstring, nó là cách để viết tài liệu cho các hàm, mô-đun và lớp trong Python.

21) Làm thế nào để sao chép một đối tượng trong Python?

Để sao chép một đối tượng trong Python, bạn có thể dùng copy.copy() hoặc copy.deepcopy() cho các trường hợp tổng quát. Không phải tất cả các đối tượng đều có thể được sao chép nhưng đa số chúng là có thể.

22) Chỉ số chỉ mục âm trong Python là gì?

Trình tự trong Python có thể được lập chỉ mục bằng số dương và số âm. Đối với chỉ số dương, 0 là chỉ số đầu tiên, 1 là chỉ số thứ hai và cứ như vậy. Đối với chỉ số âm, (-1) là chỉ mục cuối cùng và (-2) là chỉ mục thứ hai từ cuối lên và cứ như vậy.

23) Làm thế nào để chuyển đổi một số thành một chuỗi?

Để chuyển đổi một số thành một chuỗi, hãy sử dụng hàm dựng sẵn str(). Nếu bạn muốn biểu diễn ở hệ bát phân hoặc thập lục phân, hãy sử dụng hàm dựng sẵn oct() hoặc hex().

24) Sự khác biệt giữa xrange và range là gì?

Xrange trả về đối tượng kiểu xrange trong khi range trả về một danh sách, và sử dụng cùng bộ nhớ dù kích thước phạm vi có là bao nhiêu.

25) Mô-đun và gói trong Python là gì?

Trong Python, mô-đun là cách để tổ chức chương trình. Mỗi tệp chương trình Python là một mô-đun, một mô-đun có thể nạp các mô-đun khác giống như một đối tượng hoặc thuộc tính.

Thư mục của chương trình Python là một gói các mô-đun. Một gói có thể có các mô-đun hoặc thư mục con.

26) Quy tắc cho biến cục bộ và biến toàn cục trong Python?

Biến cục bộ: Khi một biến được gán giá trị ở một vị trí bất kỳ trong thân hàm, nó được coi là một biến cục bộ.

Biến toàn cục: Những biến chỉ được tham chiếu trong thân hàm được ngầm hiểu là biến toàn cục.

27) Làm thế nào bạn có thể chia sẻ biến toàn cục giữa các mô-đun?

Để chia sẻ biến toàn cục giữa các mô-đun trong một chương trình, hãy tạo một mô-đun đặc biệt. Nạp mô-đun cấu hình trong tất cả các mô-đun ứng dụng của bạn. Mô-đun đó sẽ có thể sử dụng như là một biến toàn cục được chia sẻ giữa các mô-đun.

28) Giải thích cách bạn có thể thực thi một tệp mã nguồn Python trên Unix?

Để thực thi mã Python trên Unix, bạn cần làm hai việc:

  • Chế độ của tệp mã nguồn phải cho phép thực thi và
  • dòng đầu tiên phải bắt đầu bằng # (#!/usr/local/bin/python)

29) Giải thích cách xóa một tệp trong Python?

Bằng cách sử dụng lệnh os.remove(tên tệp) hoặc os.unlink(tên tệp)

30) Giải thích cách bạn có thể tạo số ngẫu nhiên trong Python?

Để tạo số ngẫu nhiên trong Python, bạn cần nhập lệnh dưới dạng

import random

random.random ()

Chương trình này trả về một số dấu phẩy động ngẫu nhiên trong khoảng [0,1)

31) Trình bày cách truy cập một mô-đun được viết bằng Python từ C?

Bạn có thể truy cập một mô-đun được viết bằng Python từ C bằng phương pháp sau:

Mô-đun = = PyImport_ImportModule (“<tên mô-đun>”);

32) Cách sử dụng toán tử // trong Python?

Nó là toán tử lấy phần nguyên, được sử dụng để chia hai toán hạng và kết quả được trả về chỉ bao gồm các số trước dấu phẩy. Ví dụ: 10 //5 = 2 và 10.0 // 5.0 = 2.0.

33) Nêu năm lợi ích của việc sử dụng Python?

  • Python bao gồm một thư viện tiêu chuẩn khổng lồ cho hầu hết các nền tảng Internet như Email, HTML, v.v.
  • Python không yêu cầu việc chủ động quản lý bộ nhớ vì trình thông dịch tự phân bổ bộ nhớ cho các biến mới và tự động giải phóng chúng
  • Giúp người đọc dễ hiểu bằng cách sử dụng dấu ngoặc vuông
  • Dễ học cho người mới bắt đầu
  • Có các kiểu dữ liệu dựng sẵn giúp tiết kiệm thời gian và công sức lập trình từ việc khai báo các biến

34) Cách sử dụng hàm split trong Python ?

Mục đích của hàm split trong Python là để tách một chuỗi thành các chuỗi ngắn hơn thông qua các dấu phân tách cho trước. Nó sẽ trả về một danh sách các từ sử dụng trong chuỗi.

35) Flask là gì và lợi ích của nó?

Flask là một nền tảng để lập trình web cho Python dựa trên “Werkzeug, Jinja 2 và mục đích tốt” được cấp phép BSD. Werkzeug và jingja là hai gói phụ thuộc của nó.

Flask là một phần của nền tảng nhỏ (micro-framework). Điều đó có nghĩa là nó sẽ có ít hoặc không phụ thuộc vào các thư viện bên ngoài. Điều này khiến nền tảng nhẹ hơn do có ít sự phụ thuộc cần cập nhật và ít lỗi bảo mật hơn.

36) Sự khác biệt giữa Django, Pyramid và Flask là gì?

Flask là một “nền tảng nhỏ” chủ yếu được xây dựng cho một ứng dụng nhỏ với các yêu cầu đơn giản. Trong flask, bạn phải sử dụng các thư viện bên ngoài. Flask có thể sử dụng luôn.

Pyramid được xây dựng cho các ứng dụng lớn hơn. Nó cung cấp sự linh hoạt và cho phép nhà phát triển sử dụng các công cụ phù hợp với dự án của họ. Nhà phát triển có thể chọn cơ sở dữ liệu, cấu trúc URL, kiểu mẫu và nhiều hơn nữa. Pyramid có thể tùy chỉnh rất mạnh.

Giống như Pyramid, Django cũng có thể được sử dụng cho các ứng dụng lớn hơn. Nó có chứa một ORM.

37) Trình bày về Flask-WTF và các tính năng của chúng?

Flask-WTF cung cấp khả năng tích hợp đơn giản với WTForms. Các tính năng của Flask WTF bao gồm:

  • Tích hợp với wtforms
  • Mẫu bảo mật với token csrf
  • Bảo mật csrf toàn cầu
  • Tích hợp đa quốc gia
  • Hỗ trợ mã Recaptcha
  • Tải lên tệp có thể làm việc với Flask Uploads

38) Giải thích cách hoạt động thông thường của đoạn mã Flask?

Cách thông thường để đoạn mã Flask hoạt động là:

  • Hoặc nó là đường dẫn để nạp cho ứng dụng của bạn
  • Hoặc nó là đường dẫn tới một tệp Python

39) Giải thích cách bạn có thể truy cập các phiên trong Flask?

Một phiên về cơ bản cho phép bạn ghi nhớ thông tin từ yêu cầu này sang yêu cầu khác. Trong một flask, nó sử dụng cookie đã ký để người dùng có thể xem nội dung phiên và sửa đổi. Người dùng có thể sửa đổi phiên chỉ khi có khóa bí mật Flask.secret_key.

40) Flask có là một mô hình MVC hay không? Nếu có hãy đưa ra ví dụ thể hiện mẫu MVC trong ứng dụng của bạn?

Về cơ bản, Flask là một nền tảng tối giản hoạt động giống như MVC. Vì vậy, MVC hoàn toàn phù hợp với Flask. Xem ví dụ về mẫu MVC sau:

  from flask import Flask

  app = Flask(_name_)

  @app.route(“/”)

  def hello():

     return “Hello World”

  app.run(debug = True)

Trong đoạn mã này,

  • Phần cấu hình sẽ là

from flask import Flask

app = Flask(_name_)

  • Phần hiển thị sẽ là

@app.route(“/”)

def hello():

return “Hello World”

  • còn phần mô hình hay phần chính sẽ là

app.run(debug = True)

41) Giải thích cách kết nối cơ sở dữ liệu trong Python Flask?

Flask hỗ trợ ứng dụng chạy trên nền cơ sở dữ liệu (RDBS). Hệ thống như vậy đòi hỏi phải tạo một lược đồ (schema), điều này yêu cầu chuyển đổi tệp schema.sql thành lệnh sqlite3. Vì thế bạn cần cài đặt lệnh sqlite3 để khai báo hoặc khởi tạo cơ sở dữ liệu trong Flask.

Flask cho phép gửi yêu cầu tới cơ sở dữ liệu theo ba cách

  • before_request(): Chúng được gọi trước một yêu cầu và không có đối số truyền vào.
  • after_request(): Chúng được gọi sau một yêu cầu và truyền vào câu trả lời sẽ được gửi cho máy khách.
  • torndown_request(): Chúng được gọi trong tình huống khi ngoại lệ xảy ra và phản hồi không được đảm bảo. Chúng được gọi sau khi phản hồi được xây dựng. Yêu cầu sẽ không được phép thay đổi và giá trị của chúng sẽ bị bỏ qua.

42) Bạn đang có nhiều máy chủ Memcache chạy trên Python, nếu một máy chủ memcache bị lỗi, và nó chứa dữ liệu của bạn, liệu có cách để lấy dữ liệu quan trọng từ máy chủ bị lỗi đó không?

Dữ liệu trong máy chủ bị lỗi sẽ không bị xóa, nhưng có một phương án dự phòng cho việc chịu lỗi, bằng cách đó, bạn có thể thiết lập môi trường nhiều máy. Mô hình chịu lỗi có thể được kích hoạt trong bất kỳ lỗi nào thuộc máy chủ socket hoặc Memcached chứ không phải trong máy khách bình thường như việc thêm khóa đã tồn tại.

43) Trình bày cách giảm thiểu lỗi máy chủ Memcached trong lập trình Python?

  • Khi một máy gặp lỗi, một số máy khác không hoạt động, điều này sẽ khiến máy chủ cơ sở dữ liệu chịu tải lớn hơn do yêu cầu lấy lại dữ liệu đã mất từ phía máy khách. Để tránh điều này, mã nguồn của bạn cần được viết theo hướng tối thiểu sự trùng lặp cache. Như vậy sẽ gây ra ít ảnh hưởng nhất.

44) Hiệu ứng Dogpile là gì? Làm cách nào để ngăn chặn nó?

Hiệu ứng Dogpile được dùng để chỉ sự kiện xảy ra khi cache đã hết hạn, và trang web đang gặp rất nhiều yêu cầu từ phía máy khách tại cùng một thời điểm. Hiệu ứng này có thể được phòng tránh bằng cách sử dụng khóa semaphore. Trong hệ thống này, khi giá trị hết hạn, tiến trình đầu tiên sẽ có được khóa và bắt đầu sinh giá trị mới.

45) Trình bày cách sử dụng Memcached cần tránh trong Python?

  • Memcached thường bị nhầm lẫn khi bị sử dụng dưới dạng lưu trữ dữ liệu, chứ không phải cache.
  • Không bao giờ sử dụng Memcached dưới dạng nguồn thông tin duy nhất bạn cần để chạy chương trình. Dữ liệu cần luôn luôn sẵn sang thông qua các nguồn khác.
  • Memcached chỉ là nơi lưu trữ khóa hoặc giá trị và không thể được truy vấn dữ liệu hoặc duyệt nội dung nằm trích xuất thông tin.
  • Memcached không cung cấp bất kỳ dạng bảo mật nào dù là mã hóa hoặc định danh.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *