Trong khi liên tục tìm hiểu thông tin chi tiết về ngôn ngữ lập trình yêu thích của mình, tôi luôn theo dõi những nội dung thú vị trên nhiều trang Notion
Trong bài viết này, tôi đã biến một số ghi chú của mình thành 20 câu hỏi phỏng vấn liên quan đến cấu trúc dữ liệu, khái niệm lập trình cốt lõi và các phương pháp hay nhất về Python.
Thật thú vị, rất nhiều câu hỏi trong số này được hỏi trong các cuộc phỏng vấn về khoa học dữ liệu.
Hy vọng bạn sẽ xem qua một số trong số chúng và nâng cao kỹ năng Python của mình
Không cần phải quảng cáo thêm nữa, hãy bắt đầu ngay. 🏊
Tham gia Medium với liên kết giới thiệu của tôi - Ahmed Besbes
Đọc mọi câu chuyện của Ahmed Besbes [và hàng nghìn nhà văn khác trên Medium]. Phí thành viên của bạn hỗ trợ trực tiếp…
Trung bình. com
1— Sự khác biệt giữa danh sách và bộ dữ liệu là gì?
Danh sách là cấu trúc dữ liệu có thể thay đổi trong khi bộ là cấu trúc không thể thay đổi.
Một đối tượng có thể thay đổi trong Python có khả năng thay đổi giá trị của nó.
Danh sách động. bạn có thể thêm các mục vào chúng hoặc ghi đè và xóa các mục hiện có.
Tuple có kích thước cố định. họ không có phương pháp append
hoặc phương pháp extend
. Bạn cũng không thể xóa các mục khỏi chúng.
Cả bộ và danh sách đều hỗ trợ lập chỉ mục và cho phép sử dụng toán tử in
để kiểm tra các phần tử hiện có trong đó.
→ Có một số tình huống mà tôi nghĩ rằng các bộ dữ liệu có thể hữu ích
- Nếu bạn khai báo một tập hợp các mục mà bạn biết sẽ không bao giờ thay đổi hoặc bạn sẽ chỉ lặp lại mà không thay đổi giá trị của nó, hãy sử dụng bộ dữ liệu
- Nếu bạn tìm kiếm hiệu suất, bộ dữ liệu sẽ nhanh hơn danh sách vì chúng là cấu trúc chỉ đọc. Nếu bạn không cần thao tác ghi, hãy cân nhắc sử dụng bộ dữ liệu
- Các bộ dữ liệu có thể làm cho mã của bạn an toàn hơn nếu bạn muốn ngăn việc vô tình ghi dữ liệu không cần thay đổi
Đây là một mẫu mã cho thấy bộ dữ liệu khác với danh sách như thế nào
2 — Sự khác biệt giữa đa xử lý và đa luồng là gì?Đa xử lý và Đa luồng là các mô hình lập trình nhằm tăng tốc mã của bạn
Khi bạn sử dụng đa xử lý, bạn song song hóa tính toán của mình qua các quy trình. Các quy trình độc lập và không giao tiếp với nhau. chúng không chia sẻ cùng một vùng bộ nhớ và có sự cách ly nghiêm ngặt giữa. Về mặt ứng dụng, đa xử lý phù hợp với khối lượng công việc sử dụng nhiều CPU. Tuy nhiên, nó có dung lượng bộ nhớ lớn tỷ lệ thuận với số lượng quy trình
Mặt khác, trong các ứng dụng đa luồng, các luồng nằm trong một tiến trình đơn lẻ. Do đó, chúng chia sẻ cùng một vùng bộ nhớ. chúng có thể sửa đổi các biến giống nhau và có thể can thiệp lẫn nhau. Mặc dù các quy trình được thực thi nghiêm ngặt song song, nhưng chỉ có một luồng được thực thi tại một thời điểm nhất định trong Python và điều này là do Khóa phiên dịch toàn cầu [GIL]. Đa luồng phù hợp với các ứng dụng liên kết với IO như quét web hoặc tìm nạp dữ liệu từ cơ sở dữ liệu
→ Nếu bạn muốn tìm hiểu thêm về đa luồng và đa xử lý, tôi khuyên bạn nên xem qua bài đăng blog tuyệt vời này để vẽ nên một bức tranh toàn diện về hai khái niệm
3 — Sự khác biệt giữa mô-đun, gói và thư viện là gì?Một mô-đun chỉ đơn giản là một tệp Python được dự định nhập vào các tập lệnh hoặc các mô-đun khác. Nó chứa các hàm, lớp và biến toàn cục
Gói là tập hợp các mô-đun được nhóm lại với nhau bên trong một thư mục để cung cấp chức năng nhất quán. Các gói có thể được nhập giống như các mô-đun. Họ thường có một tệp __init__.py
trong đó yêu cầu trình thông dịch Python xử lý chúng như vậy
Một thư viện là một tập hợp các gói
4 — Vấn đề với đa luồng trong python là gì?Khóa phiên dịch toàn cầu [hoặc GIL] ngăn trình thông dịch python thực thi nhiều luồng cùng một lúc. Nói một cách đơn giản, GIL buộc chỉ có một luồng được thực thi tại bất kỳ thời điểm nào trong Python
Điều này thể hiện một nút cổ chai lớn về hiệu suất trong các ứng dụng gắn với CPU dựa trên mã đa luồng
5 — Trang trí là gì?Trình trang trí là một hàm nhận một hàm làm đầu vào và trả về một hàm dưới dạng đầu ra. Mục tiêu của trình trang trí là mở rộng hành vi của hàm đầu vào mà không thay đổi cơ chế cốt lõi của nó
Sử dụng một trang trí cũng ngăn bạn lặp lại chính mình. Nó buộc bạn phải viết mã chung một lần và sau đó gõ mã đó vào mọi chức năng cần nó
Một trường hợp sử dụng điển hình mà người trang trí tỏa sáng là ghi nhật ký
Ví dụ, hãy tưởng tượng rằng bạn muốn đăng nhập vào thiết bị đầu cuối tất cả các giá trị của các tham số được truyền cho mọi hàm được gọi trong chương trình của bạn. Bạn có thể xem qua mọi định nghĩa hàm và viết nó ra hoặc bạn chỉ có thể viết một trình trang trí duy nhất thực hiện tác vụ ghi nhật ký này và áp dụng nó cho tất cả các hàm cần nó
Áp dụng một trình trang trí cho một chức năng chỉ là vấn đề thêm một dòng duy nhất phía trên định nghĩa của chức năng đó
# without decorator def my_awesome_function[]:
# do awesome stuff # with a decorator @my_awesome_decorator
def my_awesome_function[]:
# do even more awesome stuff
Đây là một mẫu mã tạo một trình trang trí có tên là log
ghi lại các giá trị của các tham số được truyền cho một hàm
Bộ trang trí cũng có thể được sử dụng cho các mục đích khác như chức năng định thời gian, xác thực dữ liệu đầu vào, thực thi kiểm soát và xác thực truy cập, lưu vào bộ đệm, v.v.
, bộ nhớ đệm, v.v.
6 — Làm cách nào để ghi dữ liệu vào tệp đúng cách?Sử dụng trình quản lý bối cảnh là chìa khóa
Khi bạn sử dụng câu lệnh open
mà không có trình quản lý ngữ cảnh và một số ngoại lệ xảy ra trước khi bạn đóng tệp [việc đóng tệp là điều bạn phải nhớ khi mở tệp theo cách này] có thể xảy ra sự cố bộ nhớ và tệp có thể bị hỏng trong quá trình thực hiện
Khi bạn sử dụng with
để mở tệp và xảy ra ngoại lệ, Python đảm bảo rằng tệp đã được đóng
Tất cả các đối số hàm được truyền bằng tham chiếu trong Python. điều này có nghĩa là nếu bạn truyền một tham số cho một hàm, thì hàm đó sẽ nhận được một tham chiếu đến cùng một đối tượng đó
Nếu đối tượng có thể thay đổi và chức năng thay đổi nó, tham số sẽ thay đổi trong phạm vi bên ngoài của chức năng. Hãy xem một ví dụ
8 — Làm cách nào để ghi đè cách in đối tượng?Sử dụng các phương pháp dunder __str__
và __repr__
Đây là một ví dụ minh họa cách một thể hiện từ lớp Person có thể được định dạng độc đáo khi được in ra bảng điều khiển
9 — Viết hàm tính giai thừa của một số nguyên n10 — Sự khác biệt giữa toán tử is và == là gì?Đệ quy là chìa khóa
append
0 là toán tử kiểm tra đẳng thức trong khi append
1 là toán tử kiểm tra danh tính
Hai đối tượng có thể có giá trị bằng nhau mà không nhất thiết phải giống hệt nhau [i. e. có cùng địa chỉ bộ nhớ]
Hãy nhớ rằng append
2 là đường cú pháp cho append
3
Câu lệnh append
4 hữu ích cho kiểm tra nội bộ và kiểm tra độ chính xác
Tuy nhiên, nó không nên được sử dụng để thực hiện xác thực dữ liệu hoặc xử lý lỗi vì nó thường bị vô hiệu hóa trong mã sản xuất vì lý do hiệu suất
Hãy tưởng tượng nếu bạn kiểm tra đặc quyền của quản trị viên bằng cách sử dụng khẳng định. điều này có thể giới thiệu một rò rỉ bảo mật lớn trong sản xuất
Thay vì sử dụng câu lệnh append
4, bạn có thể đưa ra một lỗi tùy chỉnh
Trình tạo Python là một hàm tạo ra một chuỗi các mục
Trình tạo trông giống như các chức năng điển hình nhưng hành vi của chúng thì khác. Đối với người mới bắt đầu, thay vì sử dụng câu lệnh append
6, họ sử dụng câu lệnh append
7
Sau đó, gọi hàm tạo không chạy hàm. nó chỉ tạo một đối tượng trình tạo. Mã của trình tạo chỉ thực thi khi hàm append
8 được áp dụng cho đối tượng trình tạo hoặc nếu trình tạo được lặp lại [trong trường hợp này, hàm append
8 được gọi ngầm]
Số lần hàm append
8 được gọi trên đối tượng trình tạo bằng với số lần câu lệnh append
7 được gọi trong hàm trình tạo
Bạn có thể xác định trình tạo bằng vòng lặp for hoặc biểu thức trình tạo
13 — Sự khác biệt giữa phương thức lớp và phương thức tĩnh là gì?Phương thức tĩnh là phương thức biết mọi thứ về lớp hoặc thể hiện đã gọi nó. Đó là một phương thức thuộc về lớp một cách logic nhưng không có đối số ngầm định.
Một phương thức tĩnh có thể được gọi trên lớp hoặc bất kỳ thể hiện nào của nó.
Một phương thức lớp là một phương thức được truyền vào lớp mà nó được gọi, giống như extend
2 được truyền cho các phương thức thể hiện khác trong một lớp. Đối số bắt buộc của một phương thức lớp không phải là một thể hiện của lớp. nó thực sự là chính lớp học
Một trường hợp sử dụng điển hình của các phương thức lớp là cung cấp một cách khác để xây dựng các thể hiện. một phương thức lớp thực hiện điều này được gọi là một nhà máy của lớp
Đây là một lớp Nhân viên sử dụng một phương thức lớp tạo một thể hiện theo một cách hơi khác so với hàm tạo chính của lớp
14— Cho ví dụ về cách bạn sử dụng zip và liệt kêHàm extend
3 lấy nhiều lần lặp làm đầu vào và tổng hợp chúng thành một bộ. Ví dụ: điều này có thể hữu ích nếu bạn muốn lặp lại hai danh sách cùng một lúc
Hàm extend
4 cho phép lặp qua một lần lặp và truy cập cả chỉ mục đang chạy và mục cùng một lúc
*args và **kwargs làm cho các hàm Python linh hoạt hơn bằng cách chấp nhận một số lượng đối số thay đổi
- * args chuyển một số lượng đối số không có từ khóa khác nhau trong danh sách
- **kwargs chuyển một số đối số từ khóa khác nhau trong từ điển
Dưới đây là ví dụ về một hàm lấy một số lượng đối số có từ khóa khác nhau được thu thập trong từ điển có tên là extend
5 [lưu ý rằng nó không cần được đặt tên là extend
6 ]
Ảnh của tác giả — Hàm sử dụng **kwargs16 — Cho ví dụ về lập trình hàm sử dụng bản đồ17 — sự khác nhau giữa câu lệnh continue và break
Câu lệnh extend
7 kết thúc vòng lặp chứa nó. Chương trình ngay lập tức di chuyển đến phần mã nằm trong phạm vi bên ngoài của vòng lặp
Hình ảnh của tác giả
Mặt khác, câu lệnh extend
8 bỏ qua phần mã còn lại của lần lặp hiện tại và chuyển sang bước lặp tiếp theo
Hình ảnh của tác giả18 — Làm cách nào để ngăn một chức năng bị gọi trong một khoảng thời gian không cần thiết?
sử dụng bộ nhớ đệm
Nếu đầu ra được liên kết với một đầu vào nhất định không thay đổi trong một khoảng thời gian, thì việc sử dụng bộ nhớ đệm sẽ có ý nghĩa đối với chức năng
Một tình huống điển hình sẽ là truy vấn một máy chủ web. nếu bạn truy vấn một URL lần đầu tiên và bạn biết rằng phản hồi sẽ không thay đổi, bạn có thể lưu kết quả vào bộ nhớ cache
19 — Đưa ra một số nguyên tắc PEP8- Sử dụng 4 dấu cách cho mỗi mức thụt đầu dòng
- Nhập khẩu nên được nhóm lại theo thứ tự sau
- Nhập thư viện tiêu chuẩn
- Nhập khẩu của bên thứ ba có liên quan
- Nhập ứng dụng cục bộ/thư viện cụ thể
- Tên hàm và tên biến phải là chữ thường và được phân tách bằng dấu gạch dưới
- Tên lớp sử dụng quy ước CapWords
Giải pháp này phù hợp với mọi tệp lớn [và thậm chí lớn hơn]
Khi bạn mở tệp, tất cả những gì bạn cần làm là sử dụng đối tượng tệp làm trình vòng lặp. trong khi lặp qua đối tượng tệp này, bạn sẽ tìm nạp từng dòng một và các dòng trước đó sẽ bị xóa khỏi bộ nhớ [tôi. e. chúng được thu gom rác]
Bằng cách này, tệp sẽ không bao giờ được tải hoàn toàn vào bộ nhớ và quá trình xử lý của bạn sẽ được thực hiện khi đang di chuyển
Tài liệu tham khảo 📖- https. //www. phòng phân tích. đồng. trong/blog/trăn-phỏng-vấn-câu-hỏi-cho-dữ-liệu-khoa-học/
- http. //wiki. con trăn. org/moin/GlobalInterpreterLock
- https. // stackoverflow. com/câu hỏi/986006/how-do-i-pass-a-variable-by-reference
- https. //Trung bình. com/contentsquare-engineering-blog/multithreading-vs-multiprocessing-in-python-ece023ad55a
- https. // pep. con trăn. org/pep-0008/
- https. // stackabuse. com/pythons-classmethod-and-staticmethod-explained/
Đây là tổng quan về một số câu hỏi mà tôi thường thấy trong các cuộc phỏng vấn. Tôi hy vọng bạn đã học được một vài điều từ họ