Giới thiệu
Bài viết này dựa trên kinh nghiệm và trải nghiệm lúc mình đi thực tập và ra trường, hiện tại mình có 2 năm kinh nghiệm với vị trí Web Developer, những chia sẻ của mình có thể không phù hợp với các bạn nhiều năm kinh nghiệm.
Bài viết được kể theo lối truyện nhập tâm vào thế giới nhân vật, giúp bạn cảm nhận được như trong luồng suy nghĩ thực sự. Mạch truyện được kể theo thời gian nên bạn sẽ thấy rõ các mức độ phỏng vấn tăng dần độ khó theo thời gian.
Chuẩn bị buổi phỏng vấn
Hãy chuẩn bị mẫu câu ngắn gọn để giới thiệu bản thân và một vài câu hỏi để hỏi nhà tuyển dụng khi buổi phỏng vấn gần kết thúc.
Điều thứ 2 là khi vừa gặp nhà tuyển dụng, để có một cái nhìn thiện cảm đầu tiên, theo mình, chỉnh chu về trang phục là điều cần thiết.
Điều thứ 3 là lúc phỏng vấn bạn hãy nói chuyện một cách to rõ để nhà tuyển dụng có thể nghe rõ bạn đang nói gì, nếu bạn trả lời ri rí sẽ khiến nhà tuyển dụng khó nghe thì đó có thể là một điểm trừ.
Và điều thứ 4 là bạn đã nghe kiểu phỏng vấn tạo áp lực chưa? Đó là kiểu phỏng vấn tạo ra áp lực bằng những câu hỏi khó, hay vô lý để bạn bộc lộ những tính cách thật nhất của bạn để đánh giá bạn. Vì vậy, hãy luôn giữ mình trong tâm thế thoải mái và bình tĩnh nhất.
Quá trình phỏng vấn
Sau đây là tổng hợp những câu hỏi kỹ thuật và tình huống mà mình đã được hỏi với vị trí Web Developer khi chuẩn bị đi thực tập và lúc mới ra trường với 7 lần phỏng vấn bởi 6 công ty.
Công ty đầu tiên
Công ty đầu tiên mình phỏng vấn là lúc trường mình tổ chức Ngày hội tuyển dụng, mong muốn của mình là tìm được vị trí Javascript/React nhưng khi vào phòng tuyển dụng thì có một anh bên mảng Tester phỏng vấn.
Câu hỏi 1: Khi được giao một công nghệ hay ngôn ngữ mới thì em mất bao lâu để làm được?
Lúc đó mình cũng còn non và xanh nên mình cũng chỉ trả lời đại khái là Chắc khoảng tầm 1 tháng gì đó anh, và sau đó bị phán là Sao lâu vậy em, tầm 1-2 tuần anh có thể làm được rồi.
Gợi ý trả lời:
- Đối với những công nghệ hay ngôn ngữ tựa như những gì bạn đã từng làm hoặc học qua thì bạn hãy trả lời khoảng thời gian ít hơn thời gian mà bạn từng học. Chẳng hạn, bạn từng học Javascript cơ bản trong 4 tuần, và khi được giao dự án làm bằng Typescript, vì Typescript cũng tựa như Javascript, bạn hãy mạnh dạn trả lời là em có thể làm được trong khoảng 1 tuần
- Còn nếu những công nghệ cao siêu hơn và bạn chưa từng biết đến thì bạn trả lời là cần research trước rồi mới ước lượng được, thường thì em sẽ làm được trong 1 tuần, 2 tuần hoặc 1 tháng tùy vào mức độ phổ biến của công nghệ đó
Câu hỏi 2: Hiện tại bên anh không tuyển vị trí này nữa, anh sẽ nhận em vào làm vị trí Tester, e thấy OK không?
Tất nhiên là mình trả lời OK rồi. Bạn hãy biết nắm bắt cơ hội, mỗi cơ hội được trao cho bạn đều mang tới những giá trị riêng.
Nhưng sau đó mình vẫn bị tạch.
Công ty thứ hai
Là công ty lúc mình xin đi thực tập. Công ty này mình gặp anh phỏng vấn có chuyên môn với vị trí tuyển dụng.
Câu hỏi 1: REST API là gì? Em tích hợp API của Youtube vào ứng dụng như nào? (Lúc này mình có làm app có tích hợp API của Youtube)
Câu hỏi 2: Sự khác nhau của GET và POST?
Câu hỏi 3: Sự khác nhau của SESSION và COOKIES?
Câu hỏi 4: git fetch và git pull khác nhau như thế nào?
Kết quả là tạch tiếp.
Công ty thứ ba
Đến với công ty thứ 3 thì mình được hỏi với những câu hỏi như sau:
Câu hỏi 1: Em biết gì về React?
Câu hỏi 2: Phân biệt props và state.
Câu hỏi 3: Kể tên những loại Hook mà em biết? Và những hook đó làm gì?
Câu hỏi 4: Biết sử dụng Redux không? Cách hoạt động của Redux với Redux Toolkit.
Mình được nhận vào công ty thứ 3 và sau khi thực tập xong thì mình xin nghỉ và tìm công ty mới để làm việc.
Rút ra được kinh nghiệm phỏng vấn và kinh nghiệm làm việc khi thực tập, lần này mình đi rải CV khá nhiều công ty (lưu ý rằng không nên rải CV vô tội vạ mà hãy chọn những vị trí phù hợp với mình), và được 4 công ty phỏng vấn.
Công ty thứ tư
Công ty đầu tiên sau khi ra trường là công ty thứ 2 mà mình phỏng vấn lúc thực tập. Mình lướt tìm việc thì thấy đang tuyển dụng, và với sự tự tin sau 2 tháng thực tập thì mình không ngại apply lần nữa. Phỏng vấn thôi!
Trái ngược với lần phỏng vấn trước đó của mình, lần phỏng vấn này đa phần cuộc trò chuyện là anh leader giới thiệu về dự án mà mình được join vào nếu được nhận, tình hình team hiện tại, thời gian làm việc và phúc lợi. Và kết thúc với câu hỏi là em mong muốn lương bao nhiêu.
Kết thúc buổi phỏng vấn và mình nhận được offer.
Công ty thứ năm
Công ty này làm dự án outsource cho khách hàng nước ngoài nên yêu cầu phỏng vấn tiếng anh. Vào phỏng vấn được anh Founder phỏng vấn trực tiếp luôn, bắt đầu với màn giới thiệu, chào hỏi bằng tiếng anh.
Sau đó thì anh có hỏi mình những câu hỏi sau:
Câu hỏi 1: Giữa vị trí quản lý và Tech Lead thì em chọn vị trí nào và vì sao?
Câu hỏi 2: Công ty của anh có môi trường làm việc giao tiếp bằng tiếng anh, em thấy thế nào, có khó khăn gì không?
Câu hỏi 3: Nêu những gì em biết về OOP? 4 thuộc tính của OOP, sự khác nhau về Overloading và Overriding? và rất nhiều câu hỏi liên quan đến OOP.
Câu hỏi 4: Bạn có một hệ thống đặt vé xem phim online, cả 2 user đặt cùng một vị trí ghế ngồi tại cùng một thời điểm thì bạn sẽ xử lý như nào?
Với câu hỏi này, lúc đó mình cũng không biết trả lời như thế nào. Sau một thời gian thì mình biết giải pháp xử lý tình huống đó, đó là sử dụng Queue.
Kết thúc buổi phỏng vấn thì mình được nhận thư phỏng vấn vòng 2 vào ngày khác (Mình từ chối vì lúc này đã có offer của công ty khác).
Công ty thứ sáu
Công ty này có 2 anh kỹ thuật phỏng vấn mình và mọi câu hỏi đều là chuyên môn và nằm trong lĩnh vực của mình luôn nên hỏi-đáp khá là ưng ý. Màn chào đầu vẫn là giới thiệu bản thân. Sau đó là hỏi dự án mình làm.
Câu hỏi 1: Anh Leader hỏi mình là em có làm chức năng nào liên quan đến sort chưa?
Mình trả lời là có. Anh đó hỏi tiếp là nếu lựa chọn phương án nhanh nhất thì em chọn sort nào.
Câu trả lời của mình là dùng hàm sort trong Javascript các bạn à. Lúc này chắc anh đó biết mình hiểu sai ý, nhưng cũng hỏi sâu thêm hàm sort này. Anh tuyển dụng hỏi thêm là sort này nếu a – b thì sao? b – a thì sao? Return 1, 0, -1 thì nó khác nhau như nào? Sau đó mình trả lời cũng dựa theo suy nghĩ của mình chứ cũng không làm nhiều hàm sort này.
Nhưng vì chưa đúng ý đồ của anh đó nên mình được chuyển qua đúng câu hỏi là các loại sort như Bubble, Insert sort,… Mình trả lời là dùng Bubble và giải thích cách hoạt động cũng như cách code.
Pass qua câu hỏi này thì mình tới câu hỏi tiếp theo.
Câu hỏi 2: Anh giao em làm một tính năng là search, users mỗi lần gõ từng kí tự đều bị gọi API, vậy làm thế nào tối ưu để giảm lần call API ít nhất có thể?
Lúc này có một kỹ thuật trong lập trình để giải quyết vấn đề này nhưng vì lúc đó mình chưa đụng tới kỹ thuật đó nên mình suy nghĩ khá lâu.
Cuối cùng quyết định trả lời là tạo button search hoặc user nhấn enter thì mới cho gọi API. Câu trả lời này thì không đúng ý của ảnh nên ảnh chỉ cười, và ảnh cũng không nói cách làm luôn.
Sau này mình biết đó là kỹ thuật Debounce (bạn có thể tìm hiểu sự khác nhau giữa Throttle và Debounce, sau này mình sẽ làm một bài viết liên quan đến 2 kỹ thuật này), đại khái là kỹ thuật này chỉ thực sự gọi hàm đó sau khi mình ngừng gọi hàm đó trong bao nhiêu millisecond.
Tiếp theo là những câu hỏi phỏng vấn liên quan đến React.
Câu hỏi 3: Sự khác nhau giữa props/state
Câu hỏi 4: useEffect và cách sử dụng của từng trường hợp trong useEffect
Câu hỏi 5: Một component bị re-render nhiều lần và tính toán logic nặng thì có cách nào tối ưu không?
Câu hỏi này thì mình trả lời là sử dụng useMemo, useCallback và anh có hỏi thêm là sự khác nhau giữa useMemo với React.memo
Kết quả là mình nhận được offer.
Công ty thứ bảy
Đến với công ty thứ 7, cũng là công ty hiện tại của mình, cuộc phỏng vấn có sự góp mặt của 2 anh Founder, 1 anh Leader và bạn HR, và đây cũng là buổi phỏng vấn khá là khó nhằn đối với mình tại thời điểm đó
Những câu hỏi đa số là những kiến thức mà mình thấy khá là nâng cao tại thời điểm đó của mình như:
Câu hỏi 1: Clean code, Refactor code
Câu hỏi 2: Design pattern
Câu hỏi 3: Docker, Microservice
Câu hỏi 4: Câu hỏi kỹ thuật như sau: Bạn xây dựng một web/app, và ứng dụng đó muốn truyền dữ liệu với nhau cho từng component/page thì bạn xử lý như thế nào?
Mình có kinh nghiệm làm với Redux nên sẽ nghĩ câu trả lời thì sử dụng Redux, không thì dùng useContext trong Reactjs, nhưng có lẽ câu trả lời này chưa phải là ý đồ mà anh Leader hỏi mình, ý đồ thật sự nằm ở Microfrontend với tình huống truyền data giữa nhiều framework/library khác nhau trong một dự án như Vue + Reactjs + Angular
Ngoài ra còn vài câu hỏi liên quan tới OOP
Sau đó thì một anh Founder có hỏi mình như vầy:
Câu hỏi 5: Theo em thì khi xây dựng phần mềm thì người dùng cần nó thì mình mới xây dựng hay là mình xây dựng trước rồi đưa đến người dùng sử dụng?
Theo các bạn thì câu trả lời như nào thì hợp lý? Với mình đây là câu hỏi mang tính chủ quan nhiều hơn, nếu anh BOD đó sau một thời gian dài gầy dựng công ty và anh nhận ra rằng người dùng cần thì mới xây dựng, và có một anh Founder công ty khác lại nhận ra rằng mình xây dựng trước rồi đưa người dùng sử dụng. Nếu bạn không biết gì về anh BOD đó thì hãy trả lời với suy nghĩ của bạn, quan trọng là bạn biện luận được lựa chọn của bạn và các nhà tuyển dụng thấy sự chân thành trong đó.
Kết luận
Như mình liệt kê ở trên thì mỗi công ty chỉ có vài câu hỏi, và các câu hỏi giữa các công ty đều khác nhau, nhưng trên thực tế mình đã được hỏi khá nhiều, và hầu hết các câu hỏi đều liên quan đến dự án mà mình làm. Những câu hỏi liên quan đến dự án là những câu hỏi chiếm phần lớn lượng thời gian phỏng vấn, vì vậy mà mình chỉ liệt kê những câu hỏi chung vì dự án của mình khác với dự án của bạn
Các nhà tuyển dụng sẽ hỏi rất nhiều những câu hỏi liên quan đến dự án của bạn và hỏi rất là sâu, các nhà tuyển dụng muốn biết bạn đã làm gì trong dự án, làm như thế nào và có thật sự là bạn đã làm nó không
Vì vậy, khi còn là sinh viên bạn hãy tham gia vào làm đồ án các môn học (mình biết có rất nhiều bạn khi làm đồ án toàn để đồng đội mình gánh) và khi đi làm thì hãy làm nhiều task nhất có thể và nắm rõ các chức năng cũng như cách hoạt động của những tính năng đó
Trích: Thang TD – một Web Developer với hơn 2 năm kinh nghiệm