+133

Trải nghiệm phỏng vấn Software Engineer của mình tại TikTok Singapore

Hello các bạn lại là mình đây 👋👋

Các bạn ăn Tết thế nào rồi, bia rượu vừa vừa thôi không qua Tết đi làm lại đồng nghiệp không nhận ra nhé 😄. Chúc các bạn đang xem bài viết này một năm mới với thật nhiều may mắn, sức khoẻ và thành công 🧧🧧

Trong bài blog hôm nay mình sẽ chia sẻ về trải nghiệm phỏng vấn của mình tại TikTok Singapore cho vị trí Frontend Software Engineer, từ đầu tới cuối, và chút kinh nghiệm của mình sau lần phỏng vấn này nha 😉

Tâm sự chút...

Mình đã làm ở công ty được tròn 3 năm, và trong khoảng hơn 1 năm gần đây, mình hay cảm thấy rằng mình cần một thứ gì đó mới để push (đẩy) bản thân hơn, vì có vẻ mình đang hơi bị "chậm", lí do chính xác thì mình không biết giải thích là gì, nhưng một phần trong đó là mình thấy công việc ở trên cty hơi "nhàn" quá 😅.

Thực tế mình thấy "nhàn" trong ngắn hạn thì thấy chew chew, nhưng với mình nếu cái nhàn đó diễn ra quá dài thì cảm giác hơi bị "chậm" 😃, mặc dù mình vẫn là người được manager tin tưởng giao cho nhiều project nhất và đều là key projects hoặc framework của cả department (cho mình tự sướng tí 🤣🤣). Nhưng khi mọi thứ đã vào form và lặp đi lặp lại cả năm thì mình dần cảm thấy hơi bị chậm chút.

Bạn mình làm ở những cty khác cũng thi thoảng có dụ mình đi apply đi, nhưng mình phần vì lười, phần vì ngại phá vỡ sự ổn định, phần lớn khác thì vì rén ôn thuật toán (như mình đã đề cập ở bài Con đường làm engineer ở Singapore 😂),nên mình cứ delay hết lần này đến lần khác.

Vậy là một ngày đẹp trời cuối tuần, trên chuyến xe bus đi chơi với ny, mình tự nhiên nghĩ ngợi thế nào muốn nhắn cho thằng bạn bên TikTok hỏi team nó có đang mở vị trí nào không, nó báo có, dặn mình chuẩn bị CV và gửi cho nó, vậy là mình ngồi làm CV, gửi cho bạn mình nó refer, và...

Bắt đầu chiến đấu

Phải nói là TikTok phần interview process của họ làm rất chỉn chu, nhanh, chỉ vài ngày sau khi gửi CV thì HR team của bạn mình đã connect và confirm interview.👍️👍️

Đoạn đó sau khi confirm mình run v~, bởi vì phỏng vấn big tech thì đương nhiên là thuật toán rồi, lúc đó mình chả ôn cái đó để đi phỏng vấn bao giờ bởi vì như mình đã đề cập trước đây là mình thấy "bất mãn" khi dùng thuật toán đánh giá ứng viên 😂😂, nhưng mình phải chấp nhận rằng phải học nó, interview đến đít rồi mà 😫😫😫

Vòng đầu tiên - bỡ ngỡ

Khi mình đã confirm join interview thì HR sẽ hỏi mình bao giờ muốn làm vòng đầu tiên. Bởi vì mình rất ngại thuật toán (không hiểu sao lại ngại đến vậy 😂😂), nên mình muốn delay kéo dài dài ra tí để có thời gian ôn (ôn từ đầu mà 🥲), mình tính bảo 3 tuần nhưng thằng bạn mình bảo lâu quá, thế là mình hẹn xuống 2 tuần, hôm đó là thứ 2, mình hẹn thứ 6 tuần sau, tính ra về số ngày thì cũng chả được 2 tuần đâu.

Đoạn đó thì mình cũng không biết nên ôn như thế nào, ôn những gì, mình có kết nối với mấy người cũng đã interview frontend ở TikTok thì họ cho một số gợi ý, mình cũng lên cả LinkedIn và search "TikTok software engineer", gặp ai người Việt thì connect luôn hỏi kinh nghiệm phỏng vấn, tổng hợp lại thì lúc đó mình có một số gợi ý:

  • có thể có thuật toán
  • có thể có system design
  • có thể có hỏi frontend (HTML, CSS, JS, React, Web fundamentals.....)
  • có thể có hỏi về công việc hiện tại, về tech skill,....

Lúc đấy mình kiểu: còn gần 2 tuần học kiểu gì cho nổi những thứ bên trên ??????!!!! 😭😭😭😭

Ô kê, đâm lao rồi thì phải theo lao, lúc đó mình quyết tâm lắm. Về công việc hiện tại hay kiến thức về frontend vì nó là công việc hàng ngày nên sẽ không mất nhiều thời gian tổng hợp, tập trung vào thuật toán và system design. Thuật toán trước 😰

May có người bạn ở STEAM for Vietnam cho mình mượn tài khoản Educative, mình ôn thuật toán theo course kinh điển Grokking Coding Interview Patterns in JavaScript, nó chia theo topic: Sliding window, fast-slow pointer,... giải thích khá là dễ hiểu.

Học lý thuyết thì mình cũng thực hành song song trên Leetcode về topic đó, mình ôn theo Leetcode 150 (cũng chả biết chọn ôn theo gì đâu, thằng bạn mình nó đề xuất, mình xem qua cũng khá tổng quát và cũng xêm xêm course Educative kia, sẽ dễ để mình thực hành, thế là ôn theo thôi 😅).

Thật sự lúc đầu rất rất rất rất khó với mình, rất nhiều câu phải xem solution mới làm được, mặc dù vừa xem lý thuyết trên cái khoá ở Educative 🥲

Nhưng mà đợt đó quyết tâm cao độ lắm, sáng 5h sáng dậy ôn, ban ngày làm việc trên công ty, tối về lại ôn tiếp, người yêu sang Sing chơi nhưng từ hôm mình bắt đầu ôn là cũng ở nhà không đi chơi gì nữa 😂😂, các problem nào mình không làm được thì tìm video youtube giải thích từng problem cặn kẽ và mình note ra 1 file google sheet tổng hợp lại.

Có một sự thật khá hài là mình đã phải xoá App TikTok để phỏng vấn vào TikTok, vì mình khá là nghiện TikTok 🤣

Target của mình là phải làm được khoảng 30-40 câu trong cái series Leetcode 150 kia. (Nghe ảo thật, còn có chưa đến 2 tuần 😂😂)

Bên cạnh đó thì mình cũng phải ôn song song System Design và JS nữa, 2 cái đó thì hầu như mình ôn theo Front End Interview HandbookGreat Frontend, họ tổng hợp lại các vấn đề phổ biến hay được hỏi khi phỏng vấn big tech. Nghe lại càng ảo nhỉ, thời gian thì ngắn mà ôn đủ thứ. Thực tế là mình đã làm như vậy đó các bạn à 😁, nói chung đợt đó cũng khá là mệt mỏi.

Rồi ngày interview cũng tới, hôm đó mình ngủ kĩ lắm để tránh ngủ gật trong khi interview 😃, khi vô phỏng vấn thì là một anh người Trung, tiếng Anh nói dễ nghe, chắc là technical lead (hoặc senior), và là người ở team mà mình apply vào. Trước khi interview thì ở email của HR đã set limit thời gian là 1 tiếng (60')

Lúc zô thì cũng như bao interview khác là giới thiệu bản thân, kinh nghiệm làm việc, sau đó đi vào những thứ mình viết ở CV, ở CV thì mình highlight nổi bật lên một số thứ, anh ý cũng chủ yếu xoáy vào mấy cái đó, nhiều câu hỏi cũng sâu phết, nhưng mà đúng những chỗ mình "ngứa" nên là chia sẻ nhiệt tình, anh này có vẻ khá thích microfrontend framework mà mình build, hỏi rất nhiều, mình thì thấy vậy cũng vẽ vời diagram giải thích các kiểu 😎😎

Bên cạnh đó là hỏi các vấn đề khác nữa (về Web/frontend):

  • HTTP caching
  • CDN, dynamic CDN
  • Server Side Rendering, Client Side rendering, server component, SSG, ISG,...
  • useEffect vs useLayoutEffect
  • useRef, useImperativeHandle (cái này mình chủ quan quá không xem lại vì ít dùng 🥲)

Xong phần hỏi đáp (chừng 35-40') thì đến đoạn coding, ở bài này thì có một câu medium về two pointer, 2 câu về Promise cũng khá khoai, trong suốt quá trình làm là vừa làm vừa phải giải thích suy nghĩ cho interviewer, áp lực thực sự. Mình làm đc 2,5 / 3, mắc quá hết thời gian không làm được 🥲

Cuối buổi thì mình có hỏi thêm về team hiện tại, interviewer cũng nhiệt tình nói qua về một số mảng mà team đang làm

Kết thúc vòng 1, mình nhờ bạn nó hỏi feedback cho thì thấy bảo ok, 1 ngày sau thì HR nhắn là pass và chuẩn bị vòng 2, sướng rơnnnnnnnnnn 😎😎💪, mình hẹn 1 tuần sau phỏng vấn (delay thêm thời gian 😉)

Vòng hai - may mắn mỉm cười

Thời gian ôn tiếp cho vòng 2 thì mình cũng vẫn ôn như vòng 1: algorithm, design system và Javascript. Vẫn vậy, sáng 5h mò dậy ôn, mắt mũi lờ đờ 😵😵. Lúc này mình mới ôn được gần 30 câu leetcode

Ngày phỏng vấn cũng đến, zô thì là một chú (nom có vẻ hơi dừ thôi gọi bằng chú 😂), theo mình được biết thì chú ấy ở team khác team mình phỏng vấn (cái này kiểu như là cross-functional interview, để đánh giá cho khách quan), trông cũng hơi khó tính.

Thực tế là khó thật 😂😂, đoạn đầu vẫn là hỏi về kinh nghiệm làm việc trong CV, lúc đó mình nhớ cứ nói ra cái gì là sẽ bị xoáy vô liền, may quá CV toàn những thứ mình đã và đang làm nhiều, tiếp tục series là bị xoay tới xoay lui:

  • what is HTTP, TCP/IP, HTTP 1 vs 2 vs 3
  • JS, event loop, async/await, Promise, nextTick, re-render/re-draw
  • why 0.1 + 0.2 !== 0.3: câu này may vãi chưởng, mình mới xem tới nó và biết lí do vì sao 😂, được nước chém gió là mình giải thích hùng hồn lắm
  • ...còn nhiều câu nữa mà mình không nhớ là gì

Hết chừng 40' thì zô phần coding:

  • 1 câu về binary search: tại thời điểm họ vừa đưa ra problem là mình kiểu "thôi xong rồi", vì mình mới ôn tới binary search, rõ ràng thấy câu tương tự trong Leetcode 150 nhưng nghĩ là họ chưa hỏi tới, khoảng 15 giây đầu sau khi đọc bài mình nghĩ "tiếc ghê, giá mà ôn kĩ", lúc đó còn định bảo chú là chuyển qua câu khác, nhưng như vậy thì sợ bị đánh giá thấp. Oke chơi tiếp, mày mò phân tích giải thích, vừa làm vừa nói cho interviewer, xong cũng ra được 1 cái solution, nhưng không cover hết được test case 🥲
  • 2 câu còn lại thì là về JS array và promise

Kết thúc buổi phỏng vấn trong sự hồi hộp, không thấy tự tin lắm. Ngay hôm sau HR nhắn là mình đã Pass. Phewwww, nhẹ nhõm, đã xong 2/3 vòng technical rồi, 1 vòng nữa thôi 💪💪

Vòng ba - nụ cười đã tắt

Vòng này thì mình đã dặn lòng không được chủ quan gì nữa, ôn hết, càng nhiều càng tốt, vì vòng này sẽ là phỏng vấn với Hiring Manager (Manager của ông lead ở vòng 1 - team mà mình đang apply vào), thằng bạn mình cũng có gợi ý một số thứ nên ôn thêm, ừ thì cũng làm theo. Mình hẹn HR tuần sau làm tiếp (vẫn cố delay 😃)

Lúc đó mình nghĩ rằng "ầy, manager thì chắc không code mấy, lại dô hỏi mấy câu về management, behavioural, how to resolve conflict,..."

Ngày ấy cũng đến, vô interview cũng là một chú, nói chuyện khá là nice. Mở đầu vẫn là giới thiệu bản thân và kinh nghiệm làm việc các thứ, mình được hỏi thêm một số câu về management (vì ở cty hiện tại mình cũng đã và đang lead). Phần này có vẻ cũng mượt

Vào phần chính thì mình được hỏi 1 series các câu hỏi về product management, team management, leadership,....

  • Lấy ví dụ như project mà bạn ghi ở CV này, vậy success metrics cho project đó là gì?
  • Làm sao bạn đánh giá performance của từng member trong team?
  • Bạn có nói chuyện với team member về career growth cho họ không? Sau khi nói chuyện bạn có giúp họ thực hiện điều đó không?
  • Bạn monitor lỗi trong product của bạn như thế nào? analyze lỗi ra sao?
  • ...

Lúc đó mình cũng trả lời theo những thứ mình làm và trải nghiệm thôi, nhưng mà nhiều chỗ mình nói khá là qua loa, lủng củng, càng nói càng bị người ta xoáy vào và vặn cho quằn hết người 🥲🥲

Cuối buổi phỏng vấn thì chú ấy hỏi "Why TikTok" - tại sao mình chọn TikTok, mình dùng chút tự tin còn lại và nói là vì mình đang muốn tìm môi trường mới thử thách hơn, build impactful product ... Và kết thúc buổi phỏng vấn

Sau buổi này mình đã thấy lo lắm rồi, 🥲, thôi đành chờ tin HR vậy

Nghĩ rằng như các vòng trước, 1-2 ngày sau có kết quả, nhưng 1 tuần vẫn chưa thấy, nhắn cho HR, HR bảo để họ reach out tới manager hỏi....

2 tuần vẫn chưa thấy lại hỏi HR, rồi 3 tuần... 😰😰

Đến tuần thứ 3 thì mình nhận được tin là mình tạch 😭😭😭😭😭😭😭😭😭

Cảm xúc cực cực cực kì thất vọng, tự vấn tại sao mình không làm tốt hơn, chuẩn bị kĩ hơn, chủ quan rằng manager thì họ sẽ hỏi những câu xuề xoà, nghĩ rằng qua 2/3 vòng mà tự tin thái quá. Cộng thêm nữa là nghĩ lại quãng thời gian ôn luyện vừa rồi dành hết tâm trí và thấy mệt mỏi qúa, giờ làm lại lần nữa thấy nản 😢😥, có lẽ năm nay (2023) không thích hợp để chuyển việc hay sao? Hôm đó là ngày thứ Tư trong tuần.

Bạn mình bên TikTok cũng động viên bảo là có người còn phải interview 3-4-5 team mới được, mình fail là do mình không hợp với vị trí đó, tại thời điểm đó, không hợp thì thôi chuyển team, nó lại refer mình vào vài vị trí nữa. Đến thứ 2 tuần sau thì đã có HR của một team khác contact và hẹn phỏng vấn. Một lần nữa lại phải công nhận Interview Process bên TikTok rất nhanh và chuyên nghiệp, cái này 10 điểm không có nhưng 👍️👍️

Vòng một phẩy - ngã ở đâu làm lại ở đó

Lần này mình không hẹn 1 tuần nữa, hôm đó là thứ 2 thì hẹn thứ 6 làm luôn. Tới bến đê 🚀

Rút kinh nghiệm từ lần fail trước, lần này ngoài xào đi xào lại phần technical/algo và system design, mình ôn kĩ thêm cả những câu về management/leadership như bên trên nữa. Về Leetcode thì lúc này làm được chừng hơn 50 câu.

Và ngày đó lại đến, vô phỏng vấn là một anh người Trung, là leader của team mình đang apply vào, khá là nice, nói chuyện từ tốn. Anh nói rằng vì mình đã làm khá tốt khi phỏng vấn với team trước nên lần này sẽ chỉ cần làm 2 vòng technical thôi (tốt mà sao vẫn tạch anh ơi 😭😭).

Vẫn bắt đầu bằng giới thiệu về bản thân, kinh nghiệm làm việc, những thứ mình đã và đang làm ở công ty hiện tại. Phần này khá lâu, nhưng mà mình cảm giác nó mang tính trò chuyện tâm sự hơn chứ ít có cảm giác bị hỏi xoáy đáp xoay 😁

Được chừng hơn 30' thì bắt đầu phần code, có một câu về Binary Search, một câu Javascript và 1 câu đố về toán kiểu tổ hợp chỉnh hợp như lớp 12 mình học ấy, câu đố thì mình mới làm được happy case chứ chưa cover được hết (cũng không nghĩ đến trường hợp họ hỏi cái này trong interview 🥲). Nhìn chung cũng tạm ổn.

Cuối buổi thì mình lại hỏi về team hiện tại xem họ làm gì các thứ, anh interview cũng rất nhiệt tình giới thiệu team. Và tạm biệt.

Chừng 2 hôm sau thì HR nhắn mình đã pass, phewwwwww, phiêu linh nhẹ nhõm 😊, mình hẹn vòng tới làm tiếp sau 3-4 ngày (lúc đó không muốn kéo dài nữa, ôn nhọc quá 😂)

Vòng hai phẩy - băng băng tiến lên

Vòng hai này cũng như vòng 2 của team trước, hình như cũng là một người từ team khác phỏng vấn mình. Ông này là frontend architect.

Vô phỏng vấn thì như thường lệ vẫn là giới thiệu bản thân và kinh nghiệm. Và sau đó là xoáy vào cái framework, những cái libraries mình build trên công ty, cách tổ chức code làm sao cho reusable, scalable,... các kiểu, ông này đúng là architect, toàn quan tâm về architect các thứ, mình thì toàn được hỏi vào những chỗ đang ngứa, chém mệt nghỉ.

Mình cũng có hỏi ông ý là làm architect ở TikTok thì ông có những khó khăn gì, ông này cũng chia sẻ khá thoải mái.

Vèo cái hết 1 tiếng 😂😂, và xong, vòng này không có câu coding nào, yeahhhhhhhh 💪💪

Sau vòng này cảm giác lấy lại được chút tự tin, 1 ngày sau là HR nhắn mình đã pass. Giờ chỉ còn 1 vòng cuối là HR round, deal lương lậu benefit các thứ.

Vòng cuối

Ở vòng này là HR chủ trì, mình được hỏi vài câu về behavioural kiểu trong công việc có khó khăn thì làm như thế nào, xung đột/choảng nhau với đồng nghiệp thì giải quyết ra sao😂...

Cái này lời khuyên của mình là không nên xem nhẹ mà ta phải ôn kĩ nếu không có thể sẽ gây ấn tượng không tốt và ảnh hưởng tới quá trình deal về sau

Cuối buổi là deal lương lậu, giới thiệu chế độ đãi ngộ các thứ,... và kết thúc

Tầm gần 3 tuần sau thì mình cuối cùng cũng có được offer (hơi lâu vì cũng mất thời gian deal qua lại sau buổi interview nữa, cũng chiến thuật và mất thời gian phết 😂)

Những thứ mình đúc kết

Nhìn chung với mình lần phỏng vấn này khá là mệt mỏi, nhưng đáng đồng tiền bát gạo công sức bỏ ra, bõ những ngày dậy sớm mắt mũi lờ đờ. Dù cho 1 lần bị fail kia cũng khá buồn 😊

Dưới đây là những điều mình nhận ra:

  • Khi bản thân cảm thấy muốn tìm kiếm thử thách tiếp theo, thì không nên chần chừ quá lâu, hãy nhấc đít lên và bắt đầu tìm kiếm cơ hội mới, nhắn với thằng bạn lâu năm chưa nói chuyện, hay connect với những người ở công ty mình đang thích hỏi họ xem có vị trí không
  • Khi đã bắt đầu vào interview loop phải xác định nghiêm túc ôn luyện có chiến lược, phân chia thời gian cụ thể, cân bằng với công việc hiện tại trên công ty để không thấy quá tải
  • Không được chủ quan, kiểu nghĩ rằng người ta là manager thì không biết tech và sẽ hỏi mấy câu vô tri, hay là câu leetcode này nom xa vời quá chắc chả ai hỏi, 0.1 + 0.2 bằng bao nhiêu xàm xàm vậy ai hỏi làm chi...Nhưng mà họ hỏi đó các bạn à 😂. Như các bạn thấy đấy, qua các vòng họ hỏi mình từ web HTTP, TCP/IP, CDN đến JS, React, architecture, team management,... cái gì cũng có thể bị hỏi
  • Cuối cùng, nếu fail, đừng quá buồn (như mình 🥲), luôn có nhiều hơn 1 cơ hội cho bạn, nhất là mấy công ty lớn như TikTok, thì ngoài team A, còn team BCDEF (cả 1 bảng chữ cái), tha hồ interview 😉

Về tech:

  • bằng một cách nào đó qua lần interview này tự nhiên mình cảm thấy cách mình code hàng ngày cũng có nhiều thay đổi, viết vòng lặp, khai báo biến để ý kĩ hơn, chú ý hơn về performance,...
  • vì phỏng vấn frontend nên mình phải ôn lại rất nhiều kiến thức về Web, JS eventloop, nó giúp mình giải thích những thứ mà mình vẫn dùng ví dụ setTimeout, hoặc hiểu ra cách mà các framework như React hay Vue chúng thực hiện render/re-render như thế nào
  • Design một system là nó phải chuẩn chỉ như thế này như thế kia, success metrics cụ thể ra sao...
  • Manage 1 team nó không phải đơn giản xuề xoà như mình nghĩ (và từng làm)
  • ...

À với cả mình cũng rất may mắn vì có những người bạn tốt xung quanh, cho mượn tài khoản ôn thuật toán, hay vừa refer vừa hướng dẫn mình nhiệt tình trong quá trình ôn luyện 🙏🙏🙏, ny mình cũng rất hiểu cho mong muốn phát triển nên đã không đòi đi chơi mặc dù đã sang tận Sing với mình 😂

Pheww, cuối cùng cùng xong, nhìn lại bên dưới là những gì mình tổng hợp trong suốt quá trình ôn để thở phào kết thúc 1 mùa interview:

Đây là ảnh từ Canva mình tự tổng hợp trong quá trình ôn luyện (và thêm vào sau mỗi buổi interview):

[ARCHIVED] Frontend interview prep.jpg

Còn đây là quá trình luyện Leetcode của mình:

Screenshot 2024-02-14 at 6.14.00 PM.png

Tính đến ngày cuối cùng thì mình làm được 61 câu:

Screenshot 2024-02-15 at 10.42.40 AM.png

Hiện tại thì mình cũng mới đi làm được một thời gian ngắn, mọi thứ vẫn còn rất mới với mình 😃. Hi vọng rằng đây sẽ là một trải nghiệm tuyệt vời ❤️

Bên dưới là một số hình ảnh văn phòng chew chew của mình:

Sảnh vào công ty. Bytedance là công ty mẹ của TikTok IMG_8088.jpg

Góc ra chơi mỗi 45' của mình đây, có góc này chăm ra chơi hẳn 😂 IMG_8067.jpg

IMG_8068.jpg

View thành phố

IMG_8069.jpg

Giờ ăn trưa ở TikTok là giờ mình thích nhất, với dân ăn thùng uống chậu như mình thì buffet là số 1 rồi, lại còn free nữa thì 10 điểm không có nhưng chỉ thấy ưng😎

IMG_8077.jpg

IMG_8076.jpg

IMG_8075.jpg

IMG_8086.jpg

Thân ái

Hi vọng mình đã mang tới cho các bạn chút góc nhìn và trải nghiệm khi phỏng vấn ở Tiktok. Năm mới mong rằng sẽ có thật nhiều điều tốt đẹp và thú vị đến với các bạn đọc của mình, cảm ơn các bạn đã luôn theo dõi ❤️ ❤️.

Hẹn gặp lại các bạn ở những ngày sau 👋👋


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí