• Jobs
  • Phát triển nghề nghiệp
    • Remote work
    • Kỹ năng làm việc IT
    • Developer
    • Data Science – Machine Learning – AI
    • IT gurus
    • Business Analyst
    • Project Manager
    • Thiết kế UIUX
    • IT trong công ty non-tech
  • Kỹ năng tìm việc
    • Tìm việc IT cần biết
    • Phỏng vấn IT
    • Câu hỏi phỏng vấn
    • CV xin việc
    • Đàm phán lương
    • Mô tả công việc
  • Công nghệ
    • Công nghệ ứng dụng IT
    • Ngôn ngữ lập trình
    • Kiến thức công nghệ
  • Lương-Xu hướng
    • Lương bổng phúc lợi
No Result
View All Result
  • Jobs
  • Phát triển nghề nghiệp
    • Remote work
    • Kỹ năng làm việc IT
    • Developer
    • Data Science – Machine Learning – AI
    • IT gurus
    • Business Analyst
    • Project Manager
    • Thiết kế UIUX
    • IT trong công ty non-tech
  • Kỹ năng tìm việc
    • Tìm việc IT cần biết
    • Phỏng vấn IT
    • Câu hỏi phỏng vấn
    • CV xin việc
    • Đàm phán lương
    • Mô tả công việc
  • Công nghệ
    • Công nghệ ứng dụng IT
    • Ngôn ngữ lập trình
    • Kiến thức công nghệ
  • Lương-Xu hướng
    • Lương bổng phúc lợi
No Result
View All Result
No Result
View All Result
  • Jobs
  • Phát triển nghề nghiệp
  • Kỹ năng tìm việc
  • Công nghệ
  • Lương-Xu hướng

3 câu hỏi phỏng vấn coding khó nhất của các công ty FAANG

Long Pham by Long Pham
November 23, 2021
in Câu hỏi phỏng vấn, IT resources, Phỏng vấn IT
0
0
3 câu hỏi phỏng vấn coding khó nhất của các công ty FAANG
0
SHARES
393
VIEWS
Share on FacebookShare on Twitter

Các cuộc phỏng vấn về lập trình ngày càng khó hơn và việc chuẩn bị để có kết quả tốt không phải là một việc dễ dàng. Không có giới hạn cho các loại câu hỏi mà nhà tuyển dụng có thể được đưa ra trong một cuộc phỏng vấn.  Tùy vào kiến thức, kinh nghiệm và kỹ năng của mỗi người mà các câu hỏi có thể khó với người này nhưng lại có thể dễ dàng với người khác và ngược lại.

Bài viết này tổng hợp 3 câu hỏi khó nhất thường được hỏi trong các cuộc phỏng vấn về lập trình tại các công ty công nghệ hàng đầu FAANG (Facebook, Apple, Amazon, Netflix và Google). Cho dù có hay không có cơ hội để tham gia vào các cuộc phỏng vấn của các công ty đó, các câu hỏi này cũng giúp cho bạn học hỏi thêm được nhiều điều. Bạn có cũng có thể xem lại 11 câu hỏi phỏng vấn về lập trình Python của các công ty FAANG trong bài viết trước

1-Cách thiết kế bộ thu gom rác – design garbage collector

Các vấn đề liên quan đến garbage collector (bộ thu gom rác) thường là rất khó. Mục đích của hệ thống thu gom rác là tự động khôi phục bộ nhớ không sử dụng, giúp cho bộ nhớ heap  luôn có dung lượng cho các objects mới được tạo.  Garbage collection (thu gom rác) là một quá trình quản lý bộ nhớ tự động và là một khái niệm quan trọng trong một số ngôn ngữ lập trình hiện đại. Bất kể bạn làm việc bằng ngôn ngữ lập trình nào nào, điều quan trọng là phải biết làm thế nào ngôn ngữ đó giải quyết vấn đề này một cách hiệu quả.

Trong các cuộc phỏng vấn về thiết kế hệ thống, người phỏng vấn thường đặt ra các câu hỏi về chủ đề này và không chỉ có ở các công ty FAANG. Dưới đây là một số vấn đề đáng chú ý bạn cần nắm vững để có thể trả lời tốt câu hỏi này.

Yêu cầu của hệ thống garbage collector

1/ Yêu cầu chức năng 

Có hai chức năng cơ bản mà hệ thống thu gom rác của sẽ cần thực hiện:

  • Tìm kiếm các đối tượng không còn được tham chiếu (referenced).
  • Giải phóng các đối tượng không được tham chiếu này khỏi bộ nhớ.

2/ Yêu cầu phi chức năng (non-functional)

Ngoài các chức năng trên, việc triển khai tốt bộ thu gom rác cần có các thuộc tính sau để nâng cao trải nghiệm người dùng:

  • Hiệu suất nhanh: thời gian chạy của bộ thu gom rác càng ngắn càng tốt.
  • Độ tin cậy: việc triển khai GC phải luôn hoạt động chính xác.
  • Sử dụng không gian tối thiểu: bộ thu gom rác cần sử dụng không gian bộ nhớ một cách hiệu quả.

Giải pháp để cải thiện hiệu suất: chia theo thế hệ

Các garbage collector thực hiện theo một chiến thuật chung là chia đối tượng theo thế hệ (generation). Ý tưởng garbarge collection thế hệ dựa trên giả thuyết thế hệ (generational hypothesis) của David Ungar , nói rằng nếu một vật thể tồn tại trong một khoảng thời gian nhất định, thì nó được kỳ vọng sẽ tồn tại lâu hơn. Các đối tượng mới có xu hướng biến thành rác nhanh hơn các đối tượng cũ.

Sử dụng giả thuyết này, chúng ta tạo ra một garbage collector có thể hoạt động theo từng bit, theo dõi các đối tượng trẻ thường xuyên hơn, vì chúng có xu hướng chết nhanh và giải phóng nhiều dung lượng hơn cho máy tính. Đối với các đối tượng cũ, chúng có thể được giám sát ít thường xuyên hơn. Cách tiếp cận này giúp tăng tốc hiệu suất và giảm thời gian tạm dừng cho ứng dụng.

Trong bộ thu gom rác thế hệ (generational garbage collectors), chẳng hạn như bộ thu gom rác được sử dụng trong Java, các đối tượng được chia thành các nhóm theo độ tuổi của chúng thành nhiều vùng được gọi là thế hệ, như thể hiện trong sơ đồ trên. Có Thế hệ trẻ, Thế hệ già và Thế hệ vĩnh viễn (Young Generation, Old Generation and Permanent Generation).

generational hypothesis - câu hỏi phỏng vấn FAANG

Thiết kế hệ thống garbage collector

Có một số cách khác nhau để thiết kế hệ thống garbage collector. Mặc dù việc triển khai thực tế phức tạp hơn và liên quan đến các tối ưu hóa khác nhau, chúng ta cần tìm hiểu về các khái niệm phổ biến nhất, bao gồm mark-and-sweep (đánh dấu và quét ) và reference counting (đếm tham chiếu) để có thể trả lời tốt trong phỏng vấn:

Thuật toán đánh mark-and-sweep

Một trong những hình thức thu gom rác đơn giản nhất là thuật toán mark-and-sweep. Nó được phát minh bởi John McCarthy khi phát triển ngôn ngữ lập trình LISP. LISP là ngôn ngữ lập trình đầu tiên được phát triển vào năm 1960, sử dụng bộ thu gom rác.

Thuật toán này là một bộ thu gom rác theo dõi (tracing garbage collector) vì nó theo dõi tất cả các đối tượng mà chương trình có thể truy cập trực tiếp hoặc gián tiếp. Như tên của nó, thuật toán bao gồm hai giai đoạn: đánh dấu và quét. Mọi đối tượng đều có một bit đánh dấu. Nó được lưu trữ trong header của object. Ngay sau khi đối tượng được tạo, bit đánh dấu của nó là 0 (false).

Ưu và nhược điểm của thuật toán mark and sweep:

Ưu điểm:

  • Nó xử lý trường hợp với các tham chiếu theo chu kỳ, ngay cả trong trường hợp có chu kỳ, thuật toán này không bao giờ kết thúc trong một vòng lặp vô hạn.
  • Không có thêm chi phí phát sinh trong quá trình thực hiện thuật toán.

Nhược điểm:

  • Nhược điểm chính của phương pháp đánh dấu và quét là thực tế là việc thực thi chương trình bình thường bị tạm dừng trong khi thuật toán thu gom rác chạy.
  • Điểm bất lợi khác là, sau khi Thuật toán Đánh dấu và Quét được chạy nhiều lần trên một chương trình, các đối tượng có thể truy cập cuối cùng bị phân tách bởi nhiều vùng nhớ nhỏ không sử dụng.

Tìm hiểu thêm về thuật toán mark-and-sweep tại đây

2- Bài toán tìm lượng đồng xu nhỏ nhất (Coin change problem)

Bài toán tìm lượng đồng xu nhỏ nhất, coin change prolem, thường thấy trong các cuộc phỏng vấn của Facebook và Amazon. Bạn được cung cấp tiền xu có mệnh giá khác nhau và tổng số tiền. Từ đó, bạn cần viết một hàm để tính số lượng xu ít nhất mà bạn cần để tạo nên số tiền đó. Nếu bạn không thể đạt được số tiền nhất định với bất kỳ sự kết hợp nào của các đồng xu, bạn sẽ trả về -1.

Dưới đây là ba cách bạn có thể giải quyết vấn đề này:

  • Brute force
  • Quy hoạch động theo cách tiếp cận từ trên xuống (Top-down) với Memoization.
  • Quy hoạch động theo cách tiếp cận từ dưới lên (Bottom-up) với Tabularization.

Tìm hiểu thêm về:

  • Các giải bài toán coin change problem trong bài viết của  Andrew Romanenco
  • Tìm hiểu về Memoization và Tabularzation trong quy hoạch động

3- Bài toán bữa tối của các triết gia (dining philosophers problem)

Bài toán nhà triết học ăn uống thường được sử dụng trong thiết kế thuật toán đồng thời để chứng minh các vấn đề với sự đồng bộ hóa và các kỹ thuật để giải quyết chúng. Bài toán nói rằng có năm triết gia đang ngồi quanh một chiếc bàn tròn. Các triết gia phải thay đổi suy nghĩ và ăn uống.

Mỗi triết gia có một bát thức ăn trước mặt họ và họ yêu cầu mỗi người cầm một đôi đũa để ăn. Tuy nhiên, chỉ có năm chiếc đũa có sẵn. Bạn cần thiết kế một giải pháp mà mỗi triết gia đều có thể ăn thức ăn của họ mà không gây ra bế tắc.

Với vấn đề này được dùng để minh họa các loại vấn đề mà bạn có thể gặp phải khi thực thi chương trình theo chuỗi và / hoặc xử lý khóa cẩu thả. Ý tưởng là giúp bạn suy nghĩ về những hạn chế và sắp xếp thứ tự phù hợp để hoàn thành nhiệm vụ này một cách hiệu quả nhất.

Bữa tối của các triết gia - dining philosophers problem
Image credit: sphof.readthedocs.io

Để chuẩn bị cho câu hỏi này, bạn cần tìm hiểu sâu về đồng bộ hóa (synchronization), điều khiển đồng thời (concurrency control) và semaphores

Dưới đây là hai cách có thể để giải quyết vấn đề này:

  • Sử dụng Semaphores
  • Một số cách khác

 

Bài viết có tham khảo từ các nguồn:

  • System Design Interview: Designing A Garbage Collection System

 

Bạn có biết?


tham gia cộng đồng ITguru trên Linkedin, Facebook và các kênh mạng xã hội khác có thể giúp bạn nhanh chóng tìm được những chủ đề phát triển nghề nghiệp và cập nhật thông tin về việc làm IT mới nhất

Linkedin Page:
Facebook Group:
cơ hội việc làm IT : ITguru.vn

Bạn đánh giá bài viết thế nào?

Average rating 5 / 5. Vote count: 3

No votes so far! Be the first to rate this post.

Tags: câu hỏi phỏng vấnDeveloperskỹ năng lập trình viênlập trình viênphỏng vấn developerphỏng vấn ngành CNTT
Previous Post

NFT là gì và cơ hội nghề nghiệp của các developer trong lĩnh vực này

Next Post

Mở Màn Bí Mật Xoay Quanh DevFest HCMC 2021

Long Pham

Long Pham

Related Posts

Chọn cơ sở dữ liệu

Năm 2023: làm thế nào để chọn đúng cơ sở dữ liệu cho ứng dụng

April 1, 2023
Phỏng vấn lập trình phần mềm

9 lý do các công ty phần mềm có thể từ chối các lập trình viên giỏi

April 15, 2022
Nguyên tắc kiến trúc phần mềm

Các nguyên tắc trong kiến trúc phần mềm để sử dụng hàng ngày

January 9, 2022
10 Python framework hàng đầu để phát triển web năm 2022

10 Python framework hàng đầu để phát triển web năm 2022

December 28, 2021
PyTorch và TensorFlow: nên chọn framework nào trong năm 2022?

PyTorch và TensorFlow: nên chọn framework nào trong năm 2022?

December 20, 2021
CryptoKitties dapp

Dapp là gì và lộ trình để trở thành một nhà phát triển ứng dụng phi tập trung

December 16, 2021
Next Post
Mở Màn Bí Mật Xoay Quanh DevFest HCMC 2021 (GDG DevFest)

Mở Màn Bí Mật Xoay Quanh DevFest HCMC 2021

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

About ITGuru.vn

  • Trang Chủ ITguru.vn
  • Về chúng tôi
  • Thỏa thuận sử dụng
  • Quy định bảo mật
  • Quy chế hoạt động
  • Liên hệ ITguru

Nhà tuyển dụng

  • Đăng tuyển

Người tìm việc

  • Việc làm IT
  • About ITguru Blog
  • Viết bài cùng ITguru

© 2022 ITguru.vn - Web site tuyển dụng và phát triển nghề nghiệp IT

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • About ITguru Blog
  • Viết bài cùng ITguru

© 2022 ITguru.vn - Web site tuyển dụng và phát triển nghề nghiệp IT