Hotline tư vấn - khiếu nại

Hướng dẫn từ đầu đến cuối cách tìm kiếm một công việc trong ngành công nghệ (phần 3)

1. Quá trình chuẩn bị cho một buổi phỏng vấn xin việc cho lập trình viên

1.1. Tại sao chúng ta nên dành thời gian cho chuẩn bị khi tìm việc cho lập trình viên?

Việc đầu tiên tôi muốn bạn hiểu rằng, quá trình chuẩn bị trước buổi phỏng vấn là cực kì quan trọng . Bạn là một học sinh giỏi ở trường không đồng nghĩa với việc bạn sẽ có một công việc cho lập trình viên tốt. Hãy nhìn chính tôi này, tôi đã từng nghĩ như vậy thời còn “ngựa non háu đá”, và kết quả là thất bại thảm hại trong lần đầu tiên phỏng vấn ở Facebook và Google, thậm chí đó chỉ là một công việc thực tập. Và nếu không thay đổi ngay, những thất bại khác đang chờ tôi ở phía trước.

Giờ thì bạn hiểu rồi chứ, hãy bình tĩnh ngồi lại, nhìn nhận vấn đề một cách thấu đáu  và hãy bắt đầu xây dựng một kế hoạch chuẩn bị dài hơi.

Ở buổi phỏng vấn, sẽ là cuộc cạnh tranh khốc liệt của bạn với các ứng viên khác, đừng bao giờ nghĩ mình sẽ trả lời tốt một câu hỏi, bởi vì có thể sẽ có người còn trả lời tốt hơn, trong một khoảng thời gian ngắn hơn bạn. Thật may mắn là chúng ta có một bộ gồm tầm 300 câu hỏi phỏng vấn thường gặp, công việc của các bạn là luyện tập và chắc chắn rằng nếu những câu hỏi đó có xuất hiện bạn sẽ có được lợi thế với những đối thủ khác. Google là một ngoại lệ,  các câu hỏi phỏng vấn đều rất lạ và nhiều mánh khóe, việc luyện tập thật nhiều sẽ giúp cho bạn phát triển tư duy tốt cho việc xử lý những tình huống mới.

Kể cả khi bạn nghĩ rằng mình sở hữu một kĩ năng thiên phú về trả lời phỏng vấn, thì việc chuẩn bị trước cũng là không hề thừa. Ở phần lớn các doanh nghiệp, sự thể hiện của một cá nhân ở buổi phỏng vấn sẽ quyết định SDE level ()  cũng như mức lương mà người đó có thể nhận được. Tôi có quen một nhà tuyển dụng ở Facebook, anh ta thậm chí còn chia sẽ rằng, mức lương khởi điểm cho một sinh viên mới ra trường ở FB có thể lên đến hơn 125.000 USD nếu anh ta có sự thể hiện thực sự xuất sắc ở buổi phỏng vấn, khoản lợi tức và và cổ phẩn cũng sẽ thay đổi từ 5.000 đến 150.000

1.2. Thang điểm đánh giá của Google

Để chuẩn bị thật tốt cho buổi phỏng vấn thì việc tìm hiểu cách chấm điểm của doanh nghiệp tuyển dụng cũng là rất quan trọng. Dưới đây là thang điểm đánh giá của Google cho một ứng viên

  1. Kĩ năng giải quyết vấn đề và khả năng phân tích (1 điểm)

  2. Cấu trúc dữ liệu và giải thuật (1 điểm)

  3. Viết mã (1 điểm)

a. Khả năng đưa giải thuật thành mã b. Khả năng viết mã không có lỗi c. Khả năng viết mã chính quy (formal code) (not pseudocode) d. Khả năng viết mã dễ nhìn(elegant code)

    4. Kĩ năng giao tiếp (1 điểm)

a. Làm thế nào bạn có thể “dạy” người khác thuật toán của bạn b. Còn được gọi là “Liệu tôi có muốn làm việc cùng người này không?”

Để vượt qua được vòng phỏng vấn ở Google, bạn cần cả 4 người trong hội đồng chấm điểm cho điểm từ 3.5 trở lên. Tuy nhiên không phải công ty nào cũng có yêu cầu “điên rồ” như vậy

1.3. Nâng cao trình độ về thuật toán và cấu trúc dữ liệu

improve

Về vấn đề này, cuốn “Cracking the coding interview” của Gayle Laakmann được xem như cuốn kinh thánh gối đầu giường cho bạn. Cuốn sách có tổng cộng hơn 300 trang và 150 câu hỏi. Nếu như có thể tự mình giải tất cả các câu hỏi trước khi nhìn lời giải thì bạn đã có một khởi đầu thật tuyệt vời. Nhớ là hãy trình bày ra giấy và đừng quên đọc lại lời giải, so sánh bài làm của mình và rút kinh nghiệm từ code mẫu. Hãy cố gắng tối ưu hóa giải thuật của mình về cả thời gian chạy cũng như bộ nhớ dữ liệu, các bài tập trong sách cũng đi khá sâu vào vấn đề này. Tôi cũng khuyên các bạn không nên bỏ qua các chú thích của tác giả trong sách và theo dõi các bài viết của bà trên careercup, quora hay các video youtube của bạn, chúng thực sự rất có ích cho quá trình chuẩn bị phỏng vấn.

Một cuốn sách khác tôi muốn nhắc đến đó là“Introduction to Algorithm” của 4 tác giả Thomas H. Cormen, Charles E.Leiserson, Ronald L. Rivest và Clifford Stein, cuốn sách cung cấp bạn có những kiến thức cơ bản về cấu trúc dữ liệu và cũng không tốn quá nhiều thời gian để tìm hiểu(CTDL). Tuy nhiên đọc thôi là chưa đủ, hãy thực hành sử dụng thật thành thạo các kiểu CTDL và tìm hiểu cách hoạt động của chúng, bởi vì chắc chắn nó sẽ được đề cập đến và là chủ đề khá khó nhằn trong buổi phỏng vấn.

1.4. Cải thiện khả năng viết code (coding skill)

coding

Ở trường, chúng ta đã quen với việc viết ra những đoạn code chỉ đơn giản có thể chạy được được, thế nhưng trong buổi phỏng vấn xin việc cho lập trình viên, từng dòng code bạn viết ra đều sẽ bị đem ra “soi” rất kĩ. Trước đây bạn viết những dòng code mà chỉ bạn mới “đủ khả năng” đọc, thì bây giờ công việc là làm cho ai cũng có thể hiểu được. Việc này thì ai cũng viết, nhưng chẳng phải ai cũng làm được,và  “InterviewBit” chính là một giải pháp cho cho vấn đề này. Interviewbit là một trang web để các bạn có thể luyện kỹ năng code, với các bài tập đa dạng và đi qua tất cả các chủ đề có thể được hỏi trong buổi phỏng vấn. Tôi thực sự bị cuốn hút bởi các nhiệm vụ ngày được đưa ra cùng với cách chấm điểm dựa trên độ hoàn chỉnh của bài làm của mình. Và bạn cũng chỉ được coi là đã “phá đảo” khi hoàn thành trọn vết ít nhất 1 bài tập trong mỗi chủ đề con.

Mỗi lỗi phổ phổ biến khác mà sinh viên chúng ta thường mắc phải, đó là thường không test kĩ lại code.

Hãy tạo một thói quen tự xây dựng cho mình một bộ test cases có thể kiểm trả tất cả các trường có thể xảy ra của bài toán. Các bài tập trên Interview bit cũng thường ẩn chứa nhiều bộ rất tests “hiếm” và “lạ”, nếu như không cẩn thận thì việc bạn sẽ phải mất hàng giờ đồng hồ để tìm được thiếu sót trong thuật giải của mình là hoàn toàn có thể. Kể cả khi chương trình của bạn đã vượt qua tất cả các test thì cũng nhớ đừng bỏ lời lời giải mẫu, nó sẽ rất hữu ích cho việc tạo nên thói quen cho bạn viết một đoạn code thật “đẹp” và “sach sẽ”. Hãy luyện tập hằng ngày và đều đặn, việc làm được 3 bài tập/ngày (21 câu hỏi một tuần) sẽ tốt hơn nhiều so với việc trả lời cả 21 câu hỏi trong 1 ngày và chẳng làm gì những ngày còn lại.

1.5. Sự quan trọng của các Mock Interviews (cuộc phỏng vấn giả định) - MI

Chẳng có ai là hoàn hảo cả, thất bại trong lần đầu tiên, thậm chí là vài lần tiếp theo là điều khó tránh khỏi . Ngay cả tôi cũng đã thất bại thảm hại đến 4 lần trước khi có đủ độ chín để vượt qua 6 buổi phỏng vấn tiếp theo. Chính vì vậy mà tôi khuyên các bạn nên thử trải nghiệm các MI càng nhiều càng tốt để có thể rút ra kinh nghiệm trước khi bước vào cuộc chiến thật sự. Bạn nên biết rằng doanh nghiệp hay nhà tuyển dụng sẽ chẳng bao giờ cho các bạn feedback về bất cứ những thiếu sót hay lỗi lầm nào của các bạn, nhưng những người bạn, thầy giáo hay người thân thì có). Hơn thế nữa, nếu không có những MI, liệu bạn có đủ khả năng đễ diễn thuyết một cách lưu loát trước mặt nhà tuyển dụng, và bạn có tự tin sẽ tận dụng tối đa thời gian cho phép để trình bày ý tưởng của mình? Tin tôi đi, kĩ năng trình bày là cực kì quan trọng cho bất cứ một cuộc phỏng vấn nào, và hãy bắt tay ngay vào việc luyện tập chúng.

Hãy kiếm cho mình một vài người đáng tin cậy để tiến hành ít nhất khoảng 15 MI trước khi bước vào lần phỏng vấn thật đầu tiên. Hãy tiến hành nó cho thật giống format của một cuộc phỏng vấn thật sự và xây dựng cho mình một chiến lược để ứng phó với mọi điều có thể xảy ra ở cuộc phỏng vấn. Hãy thử xem qua các video của Gayle Laakmann về cách tiến hành những MI như thế nào cũng như những nhận xét của bà, nó sẽ giúp bạn nắm được quy trình tổng quát diễn ra một cuộc phỏng vấn và những thứ hội đồng phỏng vấn muốn thấy được ở bạn.

Tôi cũng tự xây dựng cho mình một chiến lược chung để giải quyết bất cứ một vấn đề nào cục nhà tuyển dụng, bao gồm 4 phần: Code, Test, Ví dụ và phần Tối ưu hóa thời gian và bộ nhớ chạy. Thường tôi là đi  từ phân tích các ví dụ mẫu để tìm ra được thuật toán ; tiếp đến là viết thuật toán đó vào một mục và tiếp tục suy nghĩ và làm như vậy đến khi tìm ra được thuật toán tối ưu; sau đó sẽ trình bày giải thuật lên bảng với hội đồng phỏng vấn, sau đó là xây dựng bộ Tests trường hợp và CUỐI CÙNG mới là Code và dùng các tests để hoàn thiện code.

Tôi biết là các bạn rất nóng lòng code ngay, nhất là khi bị áp lực thời gian chi phối, nhưng thực sự đó là một sai lầm và bạn phải bỏ ngay thói quen này. Các MI chính là cơ hội để các bạn luyện tập và cố gắng hạn chế điều này. Việc suy nghĩ và xây dựng  các test trường hợp trước khi code là quy trình không thể đảo ngược và bạn sẽ phải làm đi làm lại điều này khi bước vào công việc cho lập trình viên thực sự. Không những thế, việc này còn giúp bạn ghi điểm trong mắt nhà tuyển dụng, trong trường hợp bạn đúng ngay, bạn sẽ có cơ hội được người phỏng vấn chuyển ngay đến câu hỏi tiếp theo, còn nếu bạn sai thì cũng sẽ dễ dàng tìm được lỗi của mình, đôi bên cùng có lợi

Một khi cảm thấy đã hoàn thành đủ các MI thì tôi tin là bạn gần như đã sẵn sàng cho buổi phỏng vấn thật, mọi chuyển sẽ diễn ra êm đẹp theo cách mà bạn mong đợi. Hãy mua ngay cho mình một các bảng trắng và dùng chúng trong MI như một buổi phỏng vấn thực sự, cảm giác code trên bảng trắng sẽ hoàn toàn khác biết so với bạn thường code trên máy tính và thậm chí là trên giấy. Bạn cũng nên thử vào vai nhà tuyển dụng trong một MI để hiểu được hơn mình sẽ phải làm gì. www.pramp.com là một trang web hỗ trợ một module y hết như vậy, cho phép bạn tìm và tương tác những người cũng đang chuẩn bị cho cùng công ty với bạn và xây dựng một MI , cho phép bạn vào vai cả thí sinh lẫn người người phỏng vấn. Tôi tin nó sẽ giúp bạn giảm bớt căng thẳng hơn nhiều trước khi tiến vào “cuộc chiến” thực.

2.Bước vào trận chiến thực sự..

Rất nhiều tip đã được tôi chia sẽ ở các mục trên, chỉ có thêm một vấn đề nữa mà tôi muốn bạn phải chú ý, đó là phải “nhập gia tùy tục”. Mỗi công ty đều có văn hóa riêng có thể sẽ có những phần phỏng vấn riêng. Hãy tìm hiểu điều này ở trên các trang web như Glassdoor hay những kinh nghiệm được chia sẻ trên Quora của những người đi trước. Ngoài ra hãy nghiên cứu thật kỹ thông tin về công ty đó và đặc biệt là vị trí mà bạn đang nhắm tới, chắc chắn sẽ có những câu hỏi về vấn đề này trong cuộc phỏng vấn. Cuối cùng là hãy thật BÌNH TĨNH, TỰ TIN VÀ CHIẾN THẮNG. Tôi tin bạn sẽ tìm được một công việc cho lập trình viên phù hợp

tìm việc cho lập trình viên

2.1. Các nguồn thông tin bổ ích

Dưới đây là các cuốn sách cũng như trang web tôi đã dùng trong quá trình chuẩn bị cho buổi phỏng vấn đã được sắp xếp theo mức độ quan trọng từ trên xuống:

  • Cracking the Coding interview
  • Programming interviews exposed

2.2. Những câu hỏi chắc chắn phải học

Mỗi chủ đề đều có một số dạng bài điển hình và đều có rất nhiều thuật giải cho mỗi bài như vậy. Bạn cần nắm vững tất cả thuật giải cho từng bài toán để tiết kiệm một khoảng thời gian không nhỏ trong khi phỏng vấn.. Tôi đã liệt kê ra ở đây một số câu hỏi điển hình, ngoài ra bạn cũng có thể tìm được nó nếu như  đã hoàn thành “khóa học” của  Interview Bit :

  • Mảng/xâu:
    • Xem một xâu có phải là palindrome hay không
    • Trộn 2 mảng đã được sắp xếp
    • Đảo ngược một mảng
    • Tìm xâu con (substring)
    • Các thuật toán sắp xếp
    • Tìm nhị phân trong một mảng sắp xếp đảo chiều (Binary search in a sorted rotated array)
    • Nhân ma trận
    • Max profit stock problem
    • Tìm tất cả các phần tử giống nhau trong mảng
    • In một mảng theo kiểu xoắn ốc
  • Danh sách liên kết (linked list) - DSLK
    • Đảo ngược một DSLK
    • Thêm/bớt một phần tử vào DSLK
    • Tìm xem có một vòng tròn nào trong list và trả về điểm khởi đầu
    • Trộn 2 list đã sắp xép
    • Chia 1 list thành 2 list với một mảng gồm phần tử chẵn và một mảng gồm phần tử lẻ
  • Cây
    • Kiểm tra cây có cân bằng không
    • Traversals, recursive and iterative implementations
    • BFS/DFS(Tìm kiếm theo chiều rộng và tìm kiếm theo chiều sâu)
    • Xây dựng 1 BST(cây nhị phân) từ một mảng đã sắp xếp
    • Kiểm tra xem 2 cây có cấu trúc giống nhau không
    • Tìm đường đi có tổng lớn nhất trong cây (có thể có số âm)
    • Tìm cha chung gần nhất của 2 phần tử trong cây
  • Đệ quy
    • Tìm tất cả các kết hợp và hoán vị (combination and permutation)
    • Tìm các tập hợp con
    • Bài toán N quân hậu
    • Chuyển từ các số sang dạng kí tự dựa trên bàn phím điện thoại cũ
  • Bảng hash
    • Các câu hỏi về khi nào thì bạn cần theo dõi các nhiều hoạt động của cùng một đối tưởng
    • Các câu hỏi về khi nào thì bạn cần lưu một một bộ 2 số vào biến (have a 2 tuple as a key)
  • Quy hoạch động
    • Nếu bạn có thể đi 1, 2 hoặc 3 bước trong 1 lần, có bao nhiêu cách để đến được đỉnh
    • Có bao nhiêu cách để đi từ góc trái trên xuống góc phải dưới trong một bảng dạng lưới mà có vật cản ở giữa
    • Thực hiện cả lời giải top-down và bottom up cho 2 bài toán ở trên

Hãy nhớ rằng đây không phải là một danh sách đầy đủ, chỉ là một điểm khởi đầu mà thôi.

Chúc bạn may mắn trong quá trình tìm kiếm công việc của mình :)

Người dịch: Phạm Quang Huy.

Nguồn: mohsinali.net.