Câu hỏi thường gặp khi phỏng vấn Software Engineer ở Got It

  • Bạn đang chuẩn bị đi phỏng vấn Software Engineer ở Got It nhưng chưa biết chuẩn bị gì?
  • Bạn là sinh viên sắp ra trường và sắp sửa tham gia những cuộc phỏng vấn đầu tiên?
  • Hay đơn giản là bạn muốn kiểm tra xem những gì mình vẫn chuẩn bị liệu có khớp với những gì nhà tuyển dụng mong muốn?

Là một môi trường trẻ, hơn ai hết, Got It hiểu rất rõ những lo lắng này. Bởi chính chúng mình, không lâu trước, cũng đã từng trải qua cái cảm giác mờ mịt, hoang mang trước khi đi phỏng vấn. Vào những phút giây đó, mình đã ước gì có cỗ máy thời gian của Doraemon để biết trước được buổi phỏng vấn sẽ như thế nào!

Và đó cũng chính là lí do bài viết này ra đời: Tuy không thể biến ra một cỗ máy thời gian, nhưng Got It sẽ giúp bạn biết mình sắp sửa “đối mặt” với điều gì khi phỏng vấn tại Got It.

Bạn đã sẵn sàng đi phỏng vấn tại Got It Vietnam?
Bạn đã sẵn sàng để trở thành thành viên của một team cực cool?

Như đã tiết lộ từ Phần 3. CV Review — Thế nào là một CV tiềm năng?, mỗi ứng viên khi ứng tuyển vào vị trí Software Engineer ở Got It đều sẽ “bị soi” cực kĩ hiểu biết về 6 mảng kiến thức cơ bản nhất của bộ môn Khoa học Máy tính (Computer Science). Và không phải chờ lâu thêm nữa, hãy đọc thật kĩ những câu hỏi sau đây, vì rất có thể bạn sẽ gặp chúng khi tham gia phỏng vấn Phone ScreenCompetency Interview ở Got It đấy nhé!

(Để thưởng cho những bạn đã cất công “ôn bài”, chúng mình đã hỏi các Engineers để đưa ra một vài gợi ý về câu trả lời rồi đó ;’)).

1. Cấu trúc dữ liệu và Giải thuật

– Name the differences between array and linked list in: storage allocation, order of the elements, accessing the elements, insertion and deletion, searching, memory utilization and memory required.
(Kể ra sự khác nhau giữa mảng và danh sách liên kết về: phân bổ lưu trữ, thứ tự của các phần tử, truy cập phần tử, chèn và xóa, tìm kiếm, tối ưu bộ nhớ và cấp phát bộ nhớ.)

  • Gợi ý 1 (mức độ cơ bản):
    – Trong mảng, các phần tử nằm cạnh nhau trong bộ nhớ. Trong danh sách liên kết, chúng được kết nối với nhau thông qua các con trỏ.
    – Nhìn chung, độ phức tạp của không gian ở danh sách liên kết lớn hơn do có thêm con trỏ.
  • Gợi ý 2 (mức độ trung cấp):
    – Truy cập phần tử thông qua chỉ mục: O(1) trong mảng và O(n) trong danh sách liên kết.
    – Chèn và xóa khi đã biết vị trí: O(n) trong mảng và O(1) trong danh sách liên kết.
  • Gợi ý 3 (mức độ nâng cao):
    – Danh sách liên kết có nhiều lợi thế hơn khi bộ nhớ bị phân mảnh.
    – Mảng có nhiều lợi thế hơn khi cấu trúc dữ liệu thường được truy cập bằng chỉ mục.
    – Mảng có bộ nhớ đệm nội bộ (cache locality) tốt hơn.

– Find the reverse of a number. Example: 1234 -> 4321.
(Tìm số đảo ngược của một số. Ví dụ: 1234 -> 4321.)

  • Trường hợp 1 (mức độ tốt): Có thể đưa ra cách giải mà không cần bất kỳ gợi ý nào.
  • Trường hợp 2 (mức độ cơ bản): Có thể tìm ra cách giải sau khi được cung cấp gợi ý như sau:

1234 có thể viết dưới dạng 1234 = 1*103 + 2*102 + 3*101 + 4

Số đảo ngược 4321 có thể viết lại dưới dạng 4321 = 4*103 + 3*102 + 2*101 + 1

  • Nếu phương án đưa ra là biến số thành chuỗi rồi đảo ngược thì cần đưa ra lý do hợp lý.

– Given a list of integers, how to check if a number exists in that list?
(Cho một danh sách các số nguyên, làm thế nào để kiểm tra liệu một số bất kỳ có tồn tại trong danh sách đó không?)

  • Gợi ý:
    Dùng Linear search (tìm kiếm tuyến tính) và Binary search (tìm kiếm nhị phân).

– What are the differences between Stack and Queue?
(Sự khác biệt giữa Stack và Queue là gì?)

– What are the differences between a tree and a graph?
(Sự khác biệt giữa cây và đồ thị là gì?)

– An HTML website contains many <a> tags, and each tag has an `href` attribute that contains the url link that navigates to the destination website. A web crawler will fetch the HTML content from a website and analyze its content to detect the url links which will be crawled next. This process will repeat until there is no new link for crawling.
Design the algorithm to build a web crawler.
+ Input: URL link of a web site
+ Output: A list of all the links that will be crawled.

(Cho một trang web HTML chứa nhiều thẻ <a>, mỗi thẻ có một thuộc tính`href`chứa liên kết URL điều hướng đến trang web đích. Trình thu thập dữ liệu web sẽ tìm nạp nội dung HTML từ trang web và phân tích nội dung của nó để phát hiện liên kết URL nào sẽ được thu thập thông tin tiếp theo. Quá trình này sẽ lặp lại cho đến khi không có liên kết mới để thu thập thông tin.
Thiết kế thuật toán để xây dựng trình thu thập dữ liệu web.
+ Đầu vào: URL của một trang web
+ Đầu ra: Một danh sách tất cả các liên kết cần được thu thập thông tin.)

2. Lập trình hướng đối tượng

– What is OOP? Why should we use OOP?
(OOP là gì? Vì sao chúng ta nên sử dụng OOP?)

  • Gợi ý:
    – Ứng viên có thể kể tên 4 tính chất: tính đóng gói (encapsulation), tính đa hình (polymorphism), tính kế thừa (inheritance) và tính trừu tượng (abstraction).
    – Ứng viên có thể giải thích từng tính chất.

– What is composition? Compare composition vs inheritance.
(Composition là gì? So sánh composition và inheritance.)

Explain class constructor.
(Giải thích khái niệm class constructor.)

Tell the differences between Interface and Abstract class. Give some examples of each.
(Phân biệt Interface và Abstract class. Đưa ra một vài ví dụ minh hoạ.)

– Tell the differences between Override and Overload.
(Phân biệt Override và Overload.)

Bí kíp phỏng vấn Software Engineer ở Got It Vietnam
Trở thành một Got It-ian quả không dễ dàng chút nào đúng không? Cùng tiếp tục nhé!

3. Mẫu thiết kế phần mềm

– What are design patterns? Why should we use design patterns?
(Design patterns là gì? Vì sao chúng ta nên sử dụng design patterns?)

– Describe the Singleton pattern.
(Hãy mô tả Singleton pattern.)

– (Observer pattern) Given a Controller that has a property named “view” representing a view it controls. How does the view notify the controller when a certain event occurs?
((Observer pattern) Một Controller có một thuộc tính có tên là “view” thể hiện một view mà nó điều khiển. Làm thế nào để view thông báo cho controller biết khi một sự kiện nhất định xảy ra?)

– (Architectural pattern) Explain microservices vs monolithic.
((Architectural pattern) Hãy giải thích hai khái niệm microservices và monolithic.)

– (Dependency injection) Given a class A which needs to use an instance of class B. How do you implement this idea without creating a direct dependency between 2 classes?
((Dependency injection) Biết rằng lớp A cần sử dụng một thể hiện của lớp B. Làm thế nào để thực hiện ý tưởng này mà không tạo ra sự phụ thuộc trực tiếp giữa 2 lớp?)

– (Architectural pattern) Describe MVC. Provide a solution to solve the “Massive controller” issue.
((Architectural pattern) Hãy mô tả mô hình MVC. Đưa ra cách giải quyết vấn đề “Massive controller”.)

4. Cơ sở dữ liệu

– How do you represent the n-n relationship in a relational database?
(Mô tả quan hệ nhiều – nhiều trong trong cơ sở dữ liệu quan hệ.)

  • Gợi ý:
    Sử dụng một bảng kết hợp (association table) với khóa ngoại (foreign key) trỏ vào hai bảng.

– What is index used for?
(Chỉ mục được dùng để làm gì?)

– Compare primary key and foreign key. Does a table have to have a primary key?
(Hãy so sánh khóa chính và khóa ngoại. Một bảng có nhất định phải có khóa chính không?)

– Compare SQL and noSQL databases.
(Hãy so sánh hai cơ sở dữ liệu SQL và noSQL.)

– How do you represent key-value structure in a relational database?
(Mô tả key-value structure trong cơ sở dữ liệu quan hệ.)

– What is database normalization? Why should we need to normalize when designing a new database? 
(Chuẩn hóa cơ sở dữ liệu là gì? Vì sao chúng ta cần chuẩn hóa khi thiết kế một cơ sở dữ liệu mới?)

Phần tiếp theo - Các câu hỏi phỏng vấn Software Engineer
Stay tune! Chỉ còn 2 phần nữa thôi!!

5. Mạng máy tính

– Compare UDP vs TCP.
(Hãy so sánh UDP và TCP.)

– Compare GET vs POST, POST vs PUT.
(Hãy so sánh GET và POST, POST và PUT.)

– What happens from when we enter a domain (“google.com” for example) into browser to when the page is rendered?
(Điều gì sẽ xảy ra từ khi nhập một tên miền (ví dụ: “google.com”) vào trình duyệt đến khi trang được hiển thị?)

– Name some of the protocols belonging to the application layer (OSI) that you know.
(Kể tên một số giao thức thuộc tầng ứng dụng (OSI) mà bạn biết.)

– Describe the format of HTTP request and response.
(Mô tả định dạng request và response của HTTP.)

– Name layers of OSI Model.
(Kể tên các tầng của Mô hình OSI.)

6. Hệ điều hành

– Compare thread vs process.
(So sánh luồng và tiến trình.)

– Explain the term “Deadlock”.
(Giải thích thuật ngữ “deadlock”.)

– Define “cache”. Why do we need to use cache?
(Hãy định nghĩa “bộ nhớ đệm”. Vì sao ta cần sử dụng bộ nhớ đệm?)

– Which criteria can be used to classify Operating Systems?
(Những tiêu chí nào có thể được sử dụng để phân loại Hệ điều hành?)

– What does 32-bit mean in Windows 32-bit OS?
(32-bit có nghĩa là gì trong Hệ điều hành Windows 32-bit?)

– What is round-robin scheduling?
(Round-robin scheduling là gì?)

Quả thật có rất nhiều kiến thức đúng không nào? Cũng bởi vậy nên mỗi chúng mình đều cực kỳ tự hào khi vượt qua biết bao cửa ải và trở thành một Got It-ian.

Vượt qua các vòng phỏng vấn khó nhằn không chỉ đơn thuần là đáp ứng được yêu cầu của nhà tuyển dụng. Đó còn là khi bạn thử thách chính mình, tự nhìn lại và kiểm tra xem những kiến thức mình có đang ở đâu so với nhu cầu của thị trường, và so với mục tiêu mà bạn hướng đến.

Got It Vietnam - Cơ hội việc làm cho Software Engineer
At Got It, we’re building global-scale products while having fun!

Got It rất mong rằng khi đọc xong bài viết này, bạn có thể phần nào hiểu hơn về bản thân, để khi bước chân khỏi cánh cổng đại học, bạn đã không còn quá non nớt và bỡ ngỡ.

Còn nếu bạn muốn phỏng vấn Software Engineer ở Got It, hãy nhớ rằng Got It luôn chào đón bạn vào bất cứ thời điểm nào bạn cảm thấy sẵn sàng!

Nếu bạn quan tâm, hãy xem các vị trí đang tuyển dụng của Got It tại: bit.ly/gotit-hanoi và đọc thêm về quy trình tuyển dụng tại đây.

https://d1iv5z3ivlqga1.cloudfront.net/wp-content/uploads/2021/04/29235048/1_QAG9RXQyyMAY7i9OYo84FA.png
Got It Vietnam
April 24, 2021
Share this post to:
Tags:
0 Comments
Inline Feedbacks
View all comments
Các bài viết liên quan
Phân biệt trí tuệ nhân tạo và học máy

Phân biệt trí tuệ nhân tạo và học máy

Trong thời đại số hóa hiện nay, trí tuệ nhân tạo (AI) và học máy (Machine Learning) đang trở thành hai thuật ngữ phổ biến trong lĩnh vực công nghệ. Mặc dù có sự tương đồng, nhưng chúng không phải là hai khái niệm hoàn toàn tương đương. Bài viết này sẽ giúp bạn hiểu […]
Got It ra mắt MathGPT Platform cho các nhà cung cấp dịch vụ giáo dục toán học

Got It ra mắt MathGPT Platform cho các nhà cung cấp dịch vụ giáo dục toán học

Mục lụcGot It ra mắt MathGPT Platform cho các nhà cung cấp dịch vụ giáo dục toán họcMathGPT Platform được xây dựng dành cho nhóm đối tượng nào?Hành trình khai sinh ra MathGPT PlatformMục tiêu phía trước Got It ra mắt MathGPT Platform cho các nhà cung cấp dịch vụ giáo dục toán học Chúng […]
Cơ hội có 1-0-2: Gặp gỡ AI expert hàng đầu thế giới, trở thành world-class engineers!

Cơ hội có 1-0-2: Gặp gỡ AI expert hàng đầu thế giới, trở thành world-class engineers!

Nếu là độc giả thân thiết của Got It, ắt hẳn bạn đã biết đến đợt tuyển dụng lớn nhất năm của chúng mình – Code Your Impact 2023! Dù mới khởi động được 2 tuần nhưng Got It đã nhận được sự quan tâm từ đông đảo các bạn ứng viên cho vị trí […]
Got It @ Sài Gòn: Bạn đã sẵn sàng về chung nhà cùng Got It?

Got It @ Sài Gòn: Bạn đã sẵn sàng về chung nhà cùng Got It?

Hai năm dịch bệnh là hai năm Got It chứng kiến những biến chuyển cực kỳ mạnh mẽ khi team chúng mình chuyển từ làm 100% tại văn phòng sang 100% làm việc tại nhà trong thời gian giãn cách, đồng thời chào đón các Software Engineer gia nhập team từ xa. Đó cũng là […]
Developer là gì? Tất tần tật về developer bạn nên biết

Developer là gì? Tất tần tật về developer bạn nên biết

Sự phát triển chóng mặt của thời đại 4.0 đã tạo ra nhu cầu tuyển dụng vô cùng lớn đối với lĩnh vực IT. Trong đó, Developer là trong những ngành nghề đang trong tình trạng “khát” ứng viên nhất. Vậy, developer là gì? Liệu bạn có phù hợp với công việc này hay không? […]
Những câu hỏi thường gặp khi phỏng vấn Test Engineer

Những câu hỏi thường gặp khi phỏng vấn Test Engineer

Chìa khoá ôn tập giúp bạn “công phá” vòng phỏng vấn QA Engineer tại Got It