Loading Now

15 Câu Hỏi Phỏng Vấn Thường Gặp Với Python?

Có thể nói, trong những năm gần đây Python luôn là một trong những cái tên được các nhà tuyển dụng săn đón và mong mỏi nhiều nhất ở một ứng cử viên. Không chỉ ứng dụng được vào nhiều lĩnh vực khác nhau và tạo ra nhiều cơ hội việc làm, Python còn thu hút các developer bởi mức lương cao ngất ngưỡng với một tháng có thể lên tới hàng ngàn đô. 

Và tất nhiên, chắc chắn không cần phải nói nhiều khi ngôn ngữ lập trình này chính là nền tảng cho rất nhiều sản phẩm cực kỳ nổi tiếng như Google, Quora, BitTorrent, v.v…. Đó chính là lý do nếu bạn là một Python Developer, thì cần phải chuẩn bị thật tốt trước khi phỏng vấn, bởi lẽ chính điều này sẽ giúp ích rất nhiều cho sự tự tin và tâm lý của bạn trước khi bước vào cuộc chiến sống còn sau này đấy.

Cùng mình điểm qua 15 câu hỏi thường gặp khi phỏng vấn với Python để có thể bỏ túi những bí kíp cần thiết nhé.

Đầu tiên, nếu muốn đi phỏng vấn Python thì việc hiểu những kiến thức nền tảng về nó là một điều cực kỳ cần thiết. Bạn không thể đi đánh trận nếu không có vũ khí bên mình và sự am hiểu về đối thủ, đúng không? Việc biết được ưu và nhược điểm của Python chắc chắn sẽ giúp ích cho bạn rất nhiều, một số câu hỏi dưới đây (bao gồm cả lý thuyết và code) sẽ kiểm tra kiến thức Python cơ bản của bạn.

1. Nêu những tính năng chính của Python? Điều gì làm cho Python trở nên thân thiện với người dùng?

  • 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ế. Mình thách bạn khai báo x = 2020 và sau đó lại gán x = “Hello World” với Python mà lại có lỗi đấy.
  • Viết code với Python thì cực kỳ nhanh nhưng đến lúc run thì nó lại chậm hơn so với các ngôn ngữ biên dịch khác. May mắn thay, Python lại 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 thì khỏi bàn. Nó 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 v.v…

Ngoài những ưu điểm như cú pháp gọn, đẹp và tính dễ đọc thì Python còn đem đến cho lập trình viên những lợi ích sau:

  • Năng suất cao: Cảm ơn trời vì nhờ các tính năng như tích hợp quy trình, framework unit testing và khả năng kiểm soát nâng cao mà các ứng dụng Python có thể cải thiện hiệu suất và chất lượng của chúng.
  • Là ngôn ngữ mã nguồn mở, hoàn toàn free và đa nền tảng: Có thể nói đây cũng chính là những thứ giúp cho Python trở nên thân thiện với người dùng và sở hữu một cộng đồng support lớn mạnh hơn bao giờ hết.
  • Có kho thư viện module khổng lồ: Với hơn 300 thư viện module với nhiều tính năng khác nhau như khả năng tạo ra các file tạm thời an toàn, map file vào trong bộ nhớ, lưu trữ tập tin, v.v…. Python giúp các lập trình viên có thể tiết kiệm được thời gian làm việc của mình nhanh và hiệu quả hơn.

2. Nêu sự khác biệt giữa list (danh sách) và tuple (bộ dữ liệu) trong Python?

  • Bộ Dữ Liệu (Tuple): Một tuple là một chuỗi các đối tượng bất biến (hay nói các khác tuple là list không thể chỉnh sửa được), với cú pháp cho Tuple được hiển thị bằng dấu ngoặc đơn (). Không giống với List, Tuple có chiều dài cố định và thường làm việc nhanh hơn. Cú pháp như sau: tup_1 = (10,’Chelsa’,20)
  • Danh sách (List): Một List là kiểu dữ liệu đa năng có thể thay đổi được với cú pháp được hiển thi bằng dấu ngoặc vuông []. Không giống với Tuple, List có thể có độ dài thay đổi được và nó làm việc chậm hơn so với Tuple. Cú pháp như sau: list_1 = [10,’Ronaldo’,20].

3. Kiểu dữ liệu chuẩn mà Python cung cấp là gì? Đâu là kiểu dữ liệu có thể thay đổi được (mutable), còn đâu là kiểu dữ liệu không thể 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ố

4. Tham số được truyền vào như thế nào: là truyền tham trị (pass by value) hay truyền tham chiếu (pass by reference)?

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.

5. 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. Python 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ộ.

6. Module Python là gì? Hãy nêu một vài module chuẩn thường dùng trong Python?

Module Python là những file chứa code Python, và những code này 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, v.v…

7. Thế nào là 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.

Ví dụ: 

//doi voi bien toan cuc
myVar = "global var" #khai báo biến myVar
def example():
    print("myVar of example() is: ", myVar)

example()
#Gọi myVar ngoài hàm example()
print("myVar ngoài hàm example():", myVar)

//doi voi bien cuc bo
def example1():
 myVar1 = "local var"
 print(myVar1)
example1()

//Neu ban lam nhu duoi day se bi thong bao loi
//UnboundLocalError: local variable 'myVar' referenced before assignment
myVar = 10 
def example():
   myVar=myVar*5 + 10    
   print(myVar)

example()

8. Làm cách nào để có thể random những item có trong một list khi làm việc với Python?

Gỉa sử ta có một ví dụ minh họa sau đây:

from random import shuffle
x = ['Keep', 'The', 'Blue', 'Flag', 'Flying', 'High']
shuffle(x)
print(x)

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

['Flying', 'Keep', 'Blue', 'High', 'The', 'Flag']

9. Tạo ra danh sách các số nguyên tố từ (1,100) với Python

primeList = []
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)

10. Output của dòng code dưới đây là gì? Đồng thời hãy cho biết cách để viết comment (thậm chí là comment nhiều dòng) trong Python?

x = [[]]*3
x[2].append(1)
print(x)

Output: 

[[1], [1], [1]]

Thường thì việc comment trong Python sẽ được bắt đầu bằng ký tự #. Tuy nhiên trong một số trường hợp ta cũng có thể dùng docstrings (hay còn gọi là document strings) với bộ ba dấu “”” bắt đầu và kết thúc. 

Bên cạnh đó, bạn cũng có thể comment nhiều hơn một dòng trong Python bằng cách sử dụng tổ hợp phím ctrl key và click trái chuột ở bất cứ chỗ nào mà bạn muốn để kí tự # và chỉ # một lần. Điều này sẽ giúp bạn comment tất cả các dòng ở những nơi mà bạn đặt con trỏ tới.

Ví dụ như: 

#Comment in one line
print("Comments in Python start with a #")

#Comment in multiple lines like this:
#hello world
#hello abcdxyz

""" Comment with docstrings like this:
Welcome to my blog ^^
"""

print("Hello World!")

11. [::-1} có thể làm được gì?

[::-1} trong Python được dùng để đảo thứ tự của một mảng hay một trình tự nào đó. Cụ thể như sau:

import array as arr
myArray=arr.array('i',[1,2,3,4,5])
myArray[::-1]


Output:

 array(‘i’, [5, 4, 3, 2, 1])

Như vậy có thể thấy [::-1} sẽ in lại bản copy bị đảo ngược của cấu trúc dữ liệu có thứ tự như một mảng hay một danh sách, và tất nhiên là mảng hay danh sách cũ vẫn được giữ nguyên, nó sẽ return cho bạn một mảng/danh sách mới.

12. 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ói nôm na thì lệnh pass không làm gì cả, 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 mà để “dành cho con cháu” mở rộng trong tương lai.

13. Làm cách nào để 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.

Ví dụ minh họa: 

string = "chao ban"
string1 = "Hello friends!"
print(string1.capitalize() + string.capitalize())
# output: Hello friends! Chao ban 

14. 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, v.v.
  • Hàm Dir (): Hàm dir () được sử dụng để hiển thị các ký hiệu đã xác định (defined symbols).

15. Giải thích 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.

Ví dụ: 

#Syntax of split() method: split(pattern, string, maxsplit)

import re

str = 'Support me more on codelearn.io'
match = re.split(r'e', str)
if match:                     
    print (match)
else:
    print ('Khong tim thay!')
# Kết quả:
# ['Support m','mor','on cod','l','arn.io']
  • sub(): có tác dụng so khớp và thay thế chuỗi so khớp được. 

 Ví dụ:

#Syntax of sub(): sub(pattern, replace, string, flags)

import re

str = 'Hello, please find me in codelearn.io'
match = re.sub(r'codelearn.io','https://codelearn.io', str)
if match:                   
    print (match)
else:
    print ('Khong tim thay!')
# output: Hello, please find me in https://codelearn.io
  • 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. .Như bạn thấy ở ví dụ minh họa dưới đây thì phương thức subn() return một một bộ dữ liệu với tổng số các lần thay thế cũng như đi kèm với nó là một chuỗi mới.

Ví dụ: 

#Syntax of subn() method: re.subn (pattern, repl, string, count=0, flags=0)

import re
print(re.subn('ov', '~*' , 'movie tickets booking in online'))
t = re.subn('ov', '~*' , 'movie tickets booking in online', flags = re.IGNORECASE)
print(t)
print(len(t))
print(t[0])

Output: 

('m~*ie tickets booking in online', 1)
('m~*ie tickets booking in online', 1)
2
m~*ie tickets booking in online

Tạm kết

Hi vọng qua bài viết trên, bạn đọc có thể bỏ túi được thêm những câu hỏi phỏng vấn thường gặp với Python cho công việc để chuẩn bị thật tốt cho buổi interview sắp tới của mình. Nếu bài viết này được ủng hộ, mình sẽ viết thêm về một bài khác nữa cũng với chủ đề này một cách chi tiết và cụ thể hơn nữa nhé!

Post Comment

Contact