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ì?)

Trên đây là một vài câu hỏi mẫu mà chúng mình nghĩ bạn có thể gặp trong buổi phỏng vấn Software Engineer với Got It. Tuy nhiên, vẫn còn rất nhiều câu hỏi về Computer Science và cả những lĩnh vực khác sẽ được đề cập tới mà chúng mình không thể gói gọn chỉ trong một bài viết. Chúng mình đã tổng hợp các câu hỏi đó ở đường link bit.ly/GotIt-InterviewQuestions, bạn có thể tham khảo để chuẩn bị kĩ lưỡng hơn cho vòng phỏng vấn ở Got It nhé.

Quả thật có rất nhiều kiến thức đúng không? 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!

Chúng mình rất mong rằng khi đọc xong bài viết này, dù có quyết định apply Got It hay không, bạn cũng 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!


GOT IT NEW GRADS 2021 – BE A WORLD-CLASS ENGINEER

  • Thời gian nhận đơn ứng tuyển: 20/04/2021 – 15/05/2021

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
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
Câu hỏi thường gặp khi phỏng vấn Software Engineer ở Got It

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 […]
Hướng dẫn viết CV từ A đến Z cho Software Engineer

Hướng dẫn viết CV từ A đến Z cho Software Engineer

Trong hàng ngàn ứng viên apply vào Got It, có đến hơn 70% hồ sơ bị loại ngay từ vòng chấm CV. Điều này phần nào nói lên rằng rất nhiều ứng viên IT đang thiếu kỹ năng để viết được một CV tốt. Trước thực tế ấy, team HR của Got It đã quyết […]
Gợi ý 6 câu hỏi phỏng vấn tester thông dụng nhất năm 2021

Gợi ý 6 câu hỏi phỏng vấn tester thông dụng nhất năm 2021

Chuẩn bị kỹ những câu hỏi phỏng vấn tester sẽ giúp bạn dễ dàng lọt vào mắt xanh của nhà tuyển dụng. Từ đó cơ hội có được việc làm ưng ý sẽ rộng mở hơn bao giờ hết. Ngay sau đây chúng mình sẽ gợi ý 6 câu hỏi phỏng vấn tester được sử […]
Mức lương lập trình web trung bình trên thế giới

Mức lương lập trình web trung bình trên thế giới

Càng ngày các cá nhân và tổ chức dành thời gian ngày càng nhiều hơn trên mạng internet. Nhu cầu cho các nhà lập trình web phát triển ngày càng nhiều để tùy chỉnh, xây dựng những sân chơi trực tuyến để mọi người có thể kết nối với nhau. Vậy mức mức lương lập […]
Các loại cấu trúc dữ liệu lập trình viên cần biết

Các loại cấu trúc dữ liệu lập trình viên cần biết

Nắm vững kiến thức về cấu trúc dữ liệu (Data Structure) là một trong những yếu tố quan trọng giúp bạn trở thành một lập trình viên chuyên nghiệp. Nếu bạn đang băn khoăn không biết nên bắt đầu với loại cấu trúc nào thì hãy tham khảo bài viết sau đây! Mục lục1. Cấu […]