Monday, May 4, 2020

[USA] Microsoft-д Програм Хангамжийн Инженерээр орохдоо хэрхэн бэлдсэнээ энд бичлээ


Parallel World: Сайн байнуу, Gates ахын явуулсан Жама байнаа гээдл шууд Microsoft-д ажилд орсон юмдаа.






Anyway all jokes aside, 2017 оны 10-р сард магистрын зэрэгтэй суралцахаар АНУ-д ирснээс яг 2 жил хагасын дараа буюу 2020 оны 3-р сард Microsoft-д нийт гурван багт сүүлийн шатны ярилцлага өгсөн юм. Үүнээс нэг багаас нь үгүй гэсэн хариу авч, нөгөө баг нь covid-19 вирустэй холбоотойгоор ажилд авахаа хойшлуулснаа мэдэгдсэн. Харин үлдсэн нэг багаасаа 2020 оны 4-р сарын 1-нд бүтэн цагийн ажлын санал хүлээн авсан билээ.
(Software Engineer @ Azure Cloud Engineering, Microsoft - Atlanta, GA)

Олон блог болон ярилцлага дээрээс уншсаны дагуу IT Giant-д (Google, Microsoft, Apple & Amazon) орохын тулд хамгийн гол нь Data Structures-уудаа а-гаас я-гүй мэддэг байх мөн хэдэн алгоритмуудаа түс тас сурсан байх л гэдэг маш тодорхой байсан.

Хүн хэрхэн аливаад сайн суралцдаг вэ? Өдөр бүр давтаж, чаддаг байсан ч өөртөө байн байн сануулж гартаа оруулах. Яг л энэ зарчмыг баримталж өдөр ажил дээр зав зайгаараа мөн ажил тараад номын санд сууж LeetCode-той найзалсан. (https://leetcode.com/jamsrandorj/)

Анхлан бүх төрлийн бодлогуудаас нь нэг нэгийг бодоод юуг хийж чадаад байна, юун дээр гацаад байгаагаа тодорхойлсон. Сүүлийн зургаан сар чадахгүй байгаа зүйлс дээрээ төвлөрч яс суусан. Тааруухан, гацаад байсан topic-ууд нь: Tree (BST, N-Ary Tree & TRIE), LinkedList, Heap, Graph (BFS & DFS), and Backtracking төрлийн бодлогууд.

Ингээд өөртөө нэг зорилго тавьсан нь: IT Giant-c offer автлаа өдөрт хамгийн багадаа нэг алгоритмын бодлого бодох. Зарим өдрүүдэд мэдээж онгод төрөөд 2 эсвэл 3-ийг нухчихна заримдаа нэг бодлого дээрээ гацчихна.  Ямар нэг зорилгын төлөө явж байгаа бол өөртөө сануулж keep on track байх нь чухал, миний хувьд github-ийн commit section-ийг энэндээ ашигласан. Бодлого бодож Repo-руугаа commit хийсэн бол ногоон үгүй бол хоосон. Доор зурагт 2019 оны 9 сарын дундаас 2020 оны 4-р сар хүртэлх миний commit history.


Одоогийн байдлаар нийт 305 бодлого Leetcode дээр бодсон байна. Үүнээс 135 - easy, 141 - medium, 29 - hard түвшний бодлого. Бүгдэнг нь өөрөө 100 хувь бодсон гэж хэлэхгүй, зарим чадахгүй зүйлсээ youtube-ээс бичлэг үзэх мөн тухайн бодлогын discussion хэсэгрүү орж бусад хүмүүс хэрхэн энэ бодлогыг бодсон тухай постыг уншиж суралцаж байсан. Юутай ч 75-80 хувийг бол яг өөрөө бодсон.


Ажилд авах процесс: IT Giant-ууд ер нь бүгд төстэй шат дамжлагаар програм хангамжийн инженерээ сонгон шалгаруулдаг. Доор Microsoft-ийнх:

  1. Resume-ээ өөрсдийнх нь career сайтаар орж бөглөх эсвэл тэр компанид ажилладаг найз таньдаг хүнээрээ refer-дүүлэх. (миний хувьд хүнээр refer-дүүлээгүй өөрөө apply хийсэн.)
  2. Online Assessment буюу онлайнаар алгоритмын хоёроос гурван бодлого 80 минутанд бодох. Ихэвчлэн LeetCode Easy to Medium түвшний бодлого.
  3. Technical Screening буюу орох гэж буй багийнхаа гишүүнтэй нэг бодлого цугтаа бодно, ихэвчлэн онлайнаар. Мөн одоо ямар төсөл дээр юу хийж байгаа, ямар технологиуд ашиглаж байгаа гэх зүйлсийг ярилцана. 1 цаг үргэлжлэх ба эхлээд амархан юм асууна дараа нь follow up questions асууж бага багаар асуултаа хүндрүүлсээр аль болтол явахыг нь харна.
  4. Ингээд эцсийн шат буюу Onsite Interview ирнэ. Энэ шатанд
    -төслийн менежертэйгээ  1 цаг,
    -ахлах инженертэйгээ 1 цаг,
    -SDE-2 эсвэл SDE-3 түвшний инженертэй 1 цаг,
    -энэ гурван interview-ээ давбал AA interview буюу эцсийн шийдвэр гаргах Principal түвшний албан тушаалтантай 1 цаг interview хийнэ.
    Бүх interview дээр "ийм нөхцөлд яах байсан бэ? яаж байсан бэ?" гэх мэт personal character харсан асуултууд асууна мэдээж мэргэжилтэй холбоотой, мөн дээр нь ихэвчлэн LeetCode Medium түвшний бодлого асууна. (Non Disclosure Agreement дээр гарын үсэг зурсан тул яг ямар асуулт & бодлого асуусныг хэлж болохгүй.)
  5. Onsite interview-ээ давбал Offer letter авна. Үүний дараагаар compensation package negotiation, relocation, background check & visa transfer процессууд явна. Ингээд эцэст нь ажиллаж эхлэх өдрөө товлоно. Миний ажиллаж эхлэх өдөр 2020 оны 6 сарын 1. Ер нь том компани процесс нь удаан санагдсан. (cэдвээсээ жоохон хазайхад одоо ажиллаж байгаа газартаа 2 weeks notice-oo өгөх, нүүж суух гээдл асуудал их байна, шинэ хамт олонтой болно ядаж байтал virtual-аар хэдий болтол ажиллах нь тодорхойгүй гэх мэт, айдас хүйтэс...) 

Resume дээр анхаарах зүйлс: 10 жил ажилласан туршлага бүрт нэг нүүр, нөгөө үгээр хэрэгтэй хэрэггүй зүйлс resume дээрээ овоолохгүй байх. Товч бөгөөд тодорхой, угаасаа таны resume-г ихдээ л 60 секунд харна.

Алгоритмын бодлоготой хэсэг дээр нь анхаарах зүйлс: Бодлогын өгүүлбэрээ уншаад шууд код бичээд эхэлж хэрхэвч болохгүй. Юун түрүүнд энэ бодлогыг уншаад ямар аргачлалаар бодмоор санагдаж байгаагаа хэлж ярилцах нь чухал, зөв чиглэлрүү яваад байнуу, interview авж байгаа хүний хүссэн үр дүн нь мөнүү гэдгийг эхлээд лавлах нь зүйтэй. Мөн edge case-үүдээ тооцоолж асуух хэрэгтэй, input ямар байхуу гэх мэт. Үүний дараагаар санал болгож байгаа solution-ийхаа Runtime complexity болон Space Complexity-ийг хэлээд, энэ түвшний бодолт хийхэд хангалттай юу? гэж асуух хэрэгтэй. Зарим үед үнэхээр brute force solution олчихсон, нөгөө хүн чинь илүү зүйл хүсээд байвал ярилцаад better solution олох хэрэгтэй. Ихэнх тохиолдолд interview авж байгаа хүмүүс hint өгдөг, харин түүнийг нь зөв лавлаж мөн зөв өлгөж авч ашиглах хэрэгтэй. Бодлогоо бодож дуусчихаад жишээ өгөгдөл дээр solution-оо debug хийх хэрэгтэй. Үүний дараагаар test case-үүдээ дурайтал бичнэ. (happy case, validation check case, error case, different variation input case, null input case гэх мэт.. ингэснээр таныг хөнгөн хуймгаа юм хийдэггүйг илэрхийлнэ)



Алгоритмын бус interview-ийн үед анхаарах зүйлс: STAR method гэж байдаг, аливаа асуултанд энэ аргаар хариулж сурах. Interview-ийн төгсгөл 5-с 10 минут өөрт тань оноогдох ба үүнд зорилусан Ice Breaking асуулт бэлдэх. үүнд хэдэн жижүүрний асуулт байж болно, жишээ нь:
  • Does the team have on call rotation? 
  • How often do you deploy to prod? 
  • What is the biggest challenge that your team is facing now? 
  • What was the worst production issue you have ever dealt with? 
гэх мэт яриа өдөх асуултууд мөн Job description-ээ уншаад тэр дундаасаа өөрийнхөө мэдэхгүй эсвэл өмнө ажиллаж байгаагүй технологио асуух. Дээр нь илүү natural болгохын тулд interview-ийн дундуур сонирхолтой санагдсан зүйлсээ гүнзгийрүүлж лавшруулж асууж болно. Ингэж асуулт бэлдсэнээр таныг энэ ажилд үнэхээр дур сонирхолтой байгааг илтгэнэ.
Note: Хэрэв таны ажилласан жил олон бол дээрх асуултууд дээр нэмэгдээд System Design-ы асуултууд ирнэ. Luckily, I am not senior engineer yet, phew..
Санамж: IT Giant-ууд cool down period-той байдаг ба энэ нь та ямар нэгэн ажлын байрлуу apply хийгээд interview-ийн аль нэг шатнаас хасагдах юм бол зургаан сараас нэг жил хүртэл дахин interview-дээ урьдаггүй. Иймд бэлтгэлээ сайн базааж байгаад нэг мөр үзсэн нь дээр болов уу.

Covid-19 тай холбоотойгоор дээрх бүх interview-үүд онлайнаар хийгдсэн нь миний хувьд маш том давуу тал болсон гэж харж байна. Учир нь өөрийн дасал болсон keyboard, laptop, танил орчин буюу өөрийнхөө өрөөнөөс interview өгөж байсан тул сандрах нь бага, өөрийнхөөрөө тайван байсан. Ихэнх interview-ийн бодлогууд нь өмнө нь LeetCode дээр бодож байсан эсвэл  төстэй бодлогуудыг нь бодож байсан тул алгоритмын бодлогууд дээр асуудал байгаагүй.

Аль монголд байх үеээс л Apple, Google, Amazon-д ажилладаг монгол залуусын нийтлэл блогийг уншаад урам авч ямар процесс болдог юунд бэлдэх тухай мэдээлэл нэлээдгүй авч байсан, тэр нь ч их хэрэг болсон тул өөрийнхөө туршалагаас энд бичлээ. Хэрэгтэй хүндээ хүрэх болтугуай.


Хэрэгцээт линкүүд:
1. Microsoft career website: http://careers.microsoft.com/
2. Миний АНУ-д ирсэн сургуулийн website: https://compro.miu.edu/
3. Algorithm-ийн бодлогуудаа бэлдсэн website: https://leetcode.com/
4. Algorithm-ийн бодлого дээр будаа иддэг байсан youtube channel: https://www.youtube.com/channel/UCKvwPt6BifPP54yzH99ff1g
5. Мэдээж free reliable version control system: https://github.com/
6. Star Method-ийн талаар дэлгэрэнгүй: https://www.indeed.com/career-advice/interviewing/how-to-use-the-star-interview-response-technique