Technical Interview - Armenian

Հայ | Eng

Տեխնիկական հարցազրույց

Նկարագրություն: Տվյալ փաստաթուղթը իրենից ներկայացնում է «Տեխնիկական հարցազույց»֊ի սահմանումը, կիրառման ձեւերը, անցկացման մեթոդները, կարեւորությունը եւ ներառում է ընդհանուր խորհուրդներ։
Տերմինաբանություն: Այսուհետ հարցազրույց անցնող անձին կանվանենք դիմորդ, իսկ հարցազրույց անցկացնող անձին՝ տեխ. մասնագետ։
Նշում: Նյութը կազմել եմ հիմնվելով իմ փորձի՝ իմ կողմից անցկացրած ավելի քան 100 տեխնիկական հարցազրույցների եւ դիմորդներից ստացած feedback - ների հիման վրա։

Բովանդակություն


Սահմանում

Տեխնիկական հարցազրույցը, որպես պրոցես, հետապնդում է հետևյալ նպատակը՝ Ֆիքսված ժամանակում մաքսիմալ օբյեկտիվ գնահատել դիմորդի տեխնիկական գիտելիքները ժամանակի տվյալ պահին եւ հնարավոր պոտենցիալը առաջիկա t ժամանակահատվածում։


Անցկացման մեթոդները

Տեխնիկական հարցազրույցի հիմնական անցկացման մեթոդներն են՝ “Բանավոր”, “Թեստային” ( quiz ) եւ “Տեխնիկական Առաջադրանք” ( task )։ Ցանկացած մեթոդ ունի իր նպատակը եւ անցկացման կարգը։ Վերը նշվածները կարող են անցկացվել, որպես առանձին փուլեր, տարբեր հերթականությամբ, հնարավոր է նաեւ “Թեստային” եւ “Տեխնիկական Առաջադրանք” փուլերի բացակայություն, կախված ընկերության պահանջներից։ Տեխնիկական հարցազրույցի հիմնական փուլեր համարվում են “Բանավորը”, որը որպես կանոն համարվում է կարեւոր եւ մինիմալ բաղկացուցիչ մասը, եւ “Տեխնիկական առաջադրանքը”։

Բանավոր

Համապատասխան միջավայր

Ելնելով վերը նշված սահմանումից՝ տեխ. մասնագետի հիմնական նպատակը դիմողի տեխնիկական գիտելիքների մաքսիմալ օբյեկտիվ գնահատումն է, այսինքն՝ առաջին հերթին պետք է ստեղծել համապատասխան միջավայր, որպեսզի դիմորդը հոգեբանական տեսանկյունից լինի հավասարակշռված վիճակում, հակառակ դեպքում գնահատականը օբյեկտիվ չի կարող համարվել։ Եթե դիմորդը լինի լարված, այդ փաստը կարող է ազդել նրա պատասխանների եւ ինքնաարտահայտման վրա։

Կոմֆորտ միջավայր ստեղծելու համար.

  • Ցանկալի է տեխնիկական հարցազրույցը անցկացնել մեկ կամ երկու տեխ. մասնագետի հետ, բայց ոչ ավել (1).
  • Չսկսել անմիջապես տեխնիկական հարցերից։
Օրինակ.
Տեխ. մասնագետ - Բարեւ Ձեզ։ ( ժպիտ :) )
Դիմորդ - Բարեւ Զեզ։
Տեխ. մասնագետ - Իմ անունը Կարեն է։
Դիմորդ - Հաճելի է, Արմեն։
Տեխ. մասնագետ - Հաճելի է Արմեն ջան, ի՞նչպես եք։
Դիմորդ - Լավ, շնորհակալություն, Դու՞ք։
Տեխ. մասնագետ - Լավ, շնորհակալություն, ինչպե՞ս է տրամադրությունը։
Դիմորդ - Մարտական :)
Տեխ. մասնագետ - Օքայ, Արմեն ջան, լինելու է տեխնիկական հարցազրույց, հիմնականում JavaScript - ից, բայց մինչեւ ֆորմալ հարցադրումներին անցնելը, կխնդրեմ ծանոթանանք, լա՞վ։ Մի քիչ պատմեք Ձեր մասին, կրթություն, փորձ եւ այլն։
Դիմորդ - …
  • հարցազրույցի ընթացքում մաքսիմալ խուսափեք դիմորդի արտահայտած միտքը ժխտելուց (“Սխալ եք”, “Պնդումը ճիշտ չէր” եւ այլն)։ Հարցազրույցի վերջում, դիմորդի ցանկությամբ, կարող եք անդրադառնալ նրա բոլոր սխալներին, հարկ եղած դեպքում տալ խորհուրդներ եւ այլն (2)։ Միեւնույն ժամանակ հարցազրույցը չպետք է իրենից ներկայացնի միակողմանի հարցադրումներ։ Օրինակ.
Տեխ. մասնագետ - Խնդրում եմ ներկայացրեք JavaScript - ը, որպես ծրագրավորման լեզու, մի քանի նախադասությամբ, Ձեր բառերով, ինչպես Ձեզ հարմար է։
Դիմորդ - Դե, JavaScript - ը սկրիպտային լեզու է, արագ է, օգտագործվում է զննարկիչում, նաեւ BackEnd - ում, եւ այլն։

Վերը նշված պատասխանը տեխնիկական տեսանկյունից, ոչ կոռեկտ, անբավարար պատասխան է։ Ցանկալի, համեմատաբար ավելի պռոֆեսիոնալ եւ սպասելի պատասխան կարող էր լինել հետեւյալը։

- JavaScript - ը բազմապարադիգմ, ինտերպրետացվող, միահոսք ու դինամիկ տիպիզացված ծրագրավորման լեզու է։

Դիմորդի պատասխանի եւ ենթադրյալ ճիշտ պատասխանի տարբերությունը դեռ բավարար չէ ենթադրելու համար, որ դիմորդը չգիտի այնպիսի գաղափարների մասին, ինչպիսիք են՝ “բազմապարադիգմ” - ը, “ինտերպրետացվող” - ը, “միահոսք” - ը, “դինամիկ տիպիզացված” - ը եւ այլն։ Հաջորդ հարցը։

- Նայեք, գրեթե բոլոր ծրագրավորման լեզուներն ունեն ընդհանուր բնորոշիչներ, դրանք են - դինամիկ տիպիզացված է, թե՞ ստատիկ, միահոսք է, թե՞ բազմահոսք, ինտերպրետացվող է, թե՞ կոմպիլացվող եւ այլն։ Եկեք, փորձենք պատասխանել հետեւյալ հարցերին, խոսակցության target դիտարկելով JavaScript - ը։ Սկսենք առաջինից - դինամիկ տիպիզացված է, թե՞ ստատիկ։

Տեխնիկական հարցադրումների ճիշտ հերթականություն

Տեխնիկական հարցադրումների ճիշտ հերթականությունը ( բարդության տեսանկյունից ) հնարավորություն է տալիս հնարավորինս ստույգ գնահատել դիմորդի գիտելիքները։ Սովորաբար խնդիր է առաջանում ոչ թե իմանալ, թե արդյոք դիմորդը գիտի կամ չգիտի տվյալ խնդիրը, այլ քանի տոկոսով գիտի։ Նման դեպքերում պետք է կարողանալ ճիշտ գնահատել տոկոսային հարաբերակցությունը, որի համար պետք է, որ տվյալ խնդրին վերաբերող հարցերը լինեն բարդության տեսանկյունից աճման կարգով դասավորված, իսկ նրանց սկզբնակետը կամ հաջորդին անցման քայլի չափը որոշվում է դիմորդի տեխնիկական մակարդակից (junior, middle, senior եւ այլն)։

Հաճախ հանդիպող խնդիր. սովորաբար ավելի ցածր մակարդակի մասնագետին տրվում է «բարդ» հարց, որին չպատասխանելով, տվյալ խնդրի վերաբերյալ դիմորդի գիտելիքները գնահատվում է 0, այնինչ դիմորդը տվյալ խնդրի մասին ուներ որոշ պատկերացումներ եւ գիտելիքներ։

Տեխնիկական հարցադրումների ճիշտ հերթականության կազմակերպումը պատկերացնելու համար հարցերը բաժանենք երկու խմբի։

  1. Կոնկրետ թեմային վերաբերող հարցեր, եւ այդ հարցերի դասակարգում ըստ բարդության։

Օրինակ ( որպես օրինակ կդիտարկվի setTimeout - ը WebApi - ից )։
Հնարավոր հարցերը կապված setTimeout - ի հետ ըստ ճիշտ հերթականության.

1 - Նկարագրեք setTimeout - ը որպես ֆունկցիա։
* ոչ կարեւոր հարցեր:
1. Կարո՞ղ է setTimeout - ի առաջին արգումենտը ֆունցիա չլինել։
2. գոյություն ու՞նի երրորդ արգումենտ setTimeout - ի համար, եթե այո ապա ինչ է իրենից ներկայացնում եւ ունի արդյոք սահմանափակումներ, եթե այո ապա ինչպիսի։
2 - Տվեք մաթեմատիկական պնդում setTimeout - ի երկրորդ արգումենտի համար։
3 - setTimeout - ի աշխատանքի մանրամասն նկարագրություն։
4 - Ռեկուրսիվ setTimeout եւ setInterval։
5 - setTimeout(fn, 0) - ն որպես բացառություն։
6 - Dom minimum timeout value.
7 - setImmediate, setImmediate - ի polyfill, polyfill - ի իմպլեմենտացիան։
8 - process.nextTick, Promise.resolve(). Համեմատությունը setTimeout() - ի հետ
9 - Task, MicroTask, տարբերությունները, կատարման հերթականությունը, իմպլեմենտացիան տարբեր զննարկիչներում։
10 - setTimeout - ների կատարման հերթականությունը հերթից, FIFO, LIFO, random

Եթե չկազմենք ճիշտ հերթականություն, եւ օրինակ սկսենք խոսել setTimeout - ի մասին սկսելով 6 - րդ հարցից կամ նրա մասնավոր դեպքից, օրինակ.

- Խնդրում եմ, նշեք DOMMINTIMEOUTVALUE - ը կամ DOMCLAMPTIMEOUTNESTING_LEVEL - ը Google Chrome - ում եւ FireFox֊ում։

ապա հարցի սխալ պատասխանը կամ պատասխանի բացակայությունը չի կարող տալ ոչ մի ինֆորմացիա դիմորդի setTimeout - ի մասին ունեցած գիտելիքների մասին։

Օգտագործեք հարցադրումների ճիշտ հերթականություն։

  1. Թեմաներ, որոնց կարող եք անդրադառնալ, միայն եթե դիմորդը համապատասխանում է տվյալ մակարդակին։

Օրինակ - հարցեր Engine - ից

  • Parsing

    • Lazy Parsing
    • Pre parsing
    • Full parsing
  • Tockenazing/Lexing
  • AST ( Abstract Syntax Tree )
  • JIT (Just in Time compiler)

    • Compile + Optimization
    • Re-optimization / De-optimization
  • Հիշողության ավտոմատ կառավարում - Automate Memory Management - GC

    • համեմատություն Manual memory management - ի հետ
    • առավելություններ/թերություններ
  • Web Assemble

    • toolchain
    • emscripten
    • clang
    • llvm
    • Աշխատանքի մանրամասն նկարագրություն։
  • եւ այլն

Ընդհանուր հարցեր

Հիմնական հարցերը տրվում են դիտարկվող position - ին վերաբերող հարցերից առանձին ( առաջ կամ հետո ), կարող է անցկացվել նաեւ առանձին փուլով։
Վերջիններն իրենց հերթին բաժանվում են երկու խմբի.

  1. Ընդհանուր ՏՏ զարգացվածության հարցեր

    • Ալգորիթմների տեսություն
    • Թյուրինգի մեքենա
    • Վերջավոր ավտոմատներ
    • “Բաժանիր եւ տիրիր” - Divide-and-Conquer
    • Սորտավորման ալգորիթմներ
    • Օպերացիոն համակարգեր
    • Գրաֆների տեսություն
    • Գրաֆ
    • Ծառ
    • Փնտրման ալգորիթմներ

      • DFS - Depth-First Search
      • BFS - Breadth-First Search
    • Կարճագույն ճանապարհ
    • Մինիմալ կմախքային ենթածառ
    • Տվյալների կառուցվածք
    • Հերթ
    • Ստեկ
    • Ցուցակ
    • B-Tree
    • Տվյալների հենքեր
    • Հավանականության տեսություն
    • Խաղերի տեսություն
    • Դիսկրետ մաթեմատիկա
    • Ֆունկցիոնալ ծրագրավորման հիմունքներ
    • Կլասիֆիկացիա / Կանխատեսման ալգորիթմներ - Մեքենայական ուսուցում

    Նշում: * Տվյալ հարցաշարը կախված ընկերության պահանջներից, դիտարկվող position - ից եւ դիմորդի տեխնիկական մակարդակից, կարող է փոխվել։

  2. Հարցեր կապված դիմորդի ՏՏ նախասիրություննեի հետ

1 - Նախընտրելի օպերացիոն համակարգ
2 - Նախընտրելի տեքստային խմբագրիչ կամ IDE
3 - Բացի Ձեր հիմնական ծրագրավորման լեզվից, նշեք այլ լեզուներ, որոնցով հետաքրքրված եք կամ կցանկանայիք աշխատել։
4 - Ինչպե՞ս եք հետեւում նորություններին։ Ի՞նչ ռեսուրսներից եք օգտվում։
5 - Ի՞նչ նպատակների է ծառայում Ձեր GitHub account - ը ( եթե այն կա )

Նշում: Տվյալ հարցաշարի ցանկացած հարց, որպես առանձին հարց, հնարավոր է բավարար ինֆորմացիա չտա դիմորդի մասին։ Սակայն բոլոր հարցերի պատասխանները, որպես մեկ ամբողջություն, կարող է թույլ տալ հասկանալ դիմորդի աշխարհայացքը ՏՏ ոլորտում։ Օրինակ. դիտարկեք երկու տարբեր դիմորդների պատասխաններ։

Տարբերակ 1.

1 - Windows
2 - Microsoft Visual Studio, WebStorm, Notepad++
3 - C#, Visual Basic, PHP
4 - Փնտրում եմ Google - ում, ինչ ինձ պետք է։ Կարդում եմ Toster.ru, եւ հիմնականում նայում եմ screencast - եր Youtube.com - ում։

Տարբերակ 2.

1 - Linux, Unix-like operating systems.
2 - Vim, Sublime Text կամ այլ տեքստային խմբագրիչ, բայց ոչ IDE
3 - C/C++, Rust, OCaml, Elixir (Erlang/OPT), Python
4 - Medium, Hackernoon, Habr, Twitter… subscribe եղած եմ Google - ի եւ Mozilla - ի Youtube - ի channel - ներին։

Նշում: Օրինակները բերված են իրական կյանքից։

“Վերջին” հարցը

- Խնդրում եմ գնահատեք Ձեր տեխնիկական գիտելիքները 0 - 10 բալանոց համակարգում։

Հարցազրույցի ընթացքում տեխ. մասնագետի մոտ ձեւավորվելու է գնահատական, որը կհամարվի ենթադրյալ օբյեկիվ գնահատականը, կարեւոր է ստանալ նաեւ այդ գնահատականը դիմորդի կողմից։ Եւ ստացված երկու գնահատականների համեմատությունից կարելի անել հավելյալ ենթադրություններ։

Task

Տեխնիկական առաջադրանքը իրենից ներկայացնում է դիտարկվող position - ին համապատասխան տեխնիկական խնդրի ներկայացում։ Տվյալ մեթոդի նպատակը դիմորդի տեխնիկական գիտելիքների գնահատումն է պրակտիկ առաջադրանքների կատարման տեսանկյունից։
Դրանք կարող են լինել.

  • Code quality
  • Coding style
  • Code architecture
  • Naming convention
  • File/Folder structure
Կարեւոր կետեր
  • Խնդրի ժամանակային տեսանկյունից գնահատումը ( estimation ), պետք է թողնել դիմորդի հայեցողությանը։ Նրա խնդրի բարդության գնահատականը եւ ժամանակ / որակ հարաբերակցությունը կարող է հանդիսանալ հավելյալ տեղեկություն։
  • Խնդրի բարդությունը չի հանդիսանում գլխավոր նպատակը, եւ հիմնականում լինում է ավելի ցածր քան դիմորդի տեխնիկական մակարդակը։
  • Առաջադրանքի պատասխանները ցանկալի է ստուգվեն մի քանի տեխնիկական մասնագետների կողմից ավելի օբյեկտիվ գնահատական ստանալու համար։
  • Առաջադրանքը պետք է ունենա ֆունկցիոնալ եւ տեխնիկական մասնագիր։

Quiz

Quiz կամ թեստային աշխատանքը իրենից ներկայացնում է ինչ-որ քանակությամբ հարցերի հաջորդականություն հնարավոր պատասխաններով։ Տվյալ մեթոդը կարող է օգտագործվել նախընտրական փուլերի ֆիլտրացիայի համար, կամ որպես հավելյալ ինֆորմացիա հիմնական փուլերին։

Համեմատություն

  • Quiz
  • Առավելություն
    Մինիմալ ջանքերի գործադրում։
  • Թերություն
    Հաճախ տրվող հարցերին պատասխանելը եւ բանավոր խոսքի բացակայությունը հնարավոր է, որ չլինի օբյեկտիվ գնահատական։
  • Task
  • Առավելություն
    Պրակտիկ աշխատանքի գնահատման հնարավորություն։
  • Թերություն
    Սովորաբար “տեխնիկական աշխատանք” - ը կատարվում է remote, եւ վերահսկողության բացակայությունն ու կողմնակի օգնություններից օգտվելու հնարավորության առկայությունը ազդում են աշխատանքի գնահատականի հիմնավոր լինելու վրա։
  • Oral
  • Առավելություն
    Տեսական գիտելիքների օբյեկտիվ գնահատում, բանավոր խոսքի առկայություն։
  • Թերություն
    Որոշ դեպքերում բարդություն է առաջանում գնահատել դիմորդի գիտելիքները, նրա՝ բանավոր խոսքի կամ ինքնաարտահայտման խնդիրներից ելնելով։

Տեխնիկական հարցազրույցի կարեւորություն

Ցանկացած տեխնիկական հարցազրույցի անցկացման կարգ միարժեքորեն ցույց է տալիս տվյալ ընկերության տեխնիկական մակարդակը։

Հարցազրույց անցկացնող անձի գնահատականի վրա հիմնվելով՝ ընկերությունը կարող է աշխատանքի ընդունել դիմողին։ Հարցազրույց անցկացնող անձի սխալ գնահատականը հետագայում կարող է առաջացնել խնդիրներ։


Disclaimer

Փաստաթուղթը նպատակ չի հետապնդում կազմելու տեխնիկական հարցազրույցի կարգավորված ընթացք կամ անցկացման փուլեր կոնկրետ ծրագրավորման լեզվի, տեխնոլոգիայի կամ ընկերության համար։ Վերը նշված կետերը հանդիսանում են հիմնական դրույթներ ՏՏ ոլորտում տեխնիկական հարցազրույցների համար, իսկ JavaScript - ը այս դեպքում ուղղակի հանդիսանում էր օրինակ։ ( JavaScript - ի ավելի մանրամասն հարցաշար, որպես հարցազրույցի ուղեցույց կարող եք գտնել հետեւյալ ֆայլում )։ Հեղինակը փորձել է չսահմանել տեխնիկական հարցազրույցի անցկացման փուլերը փաստաթղթի ճկունությունը պահելու համար։ Հարցազրույցի անցկացման փուլերի քանակը եւ հերթականությունը կարող է կախված լինել ծրագրավորման լեզվից, տեխնոլոգիայից, դիմորդի տեխնիկական մակարդակից, ընկերության պահանջներից ու ռեսուրսներց։ Վերը նշված կետերը կհամարվեն ճիշտ նաեւ կոնկրետ library - ների կամ framework - երի հետ կապված հարցազրույցների համար։ Օրինակ.

JavaScript - ReactJs / NodeJs and etc.
Python - Django and etc.
Rust - Exonum and etc.


Նշումներ

Նշում 1

Երկուսից ավելի տեխ. մասնագետների ներկայությունը սենյակում (որում անցկացվելու է հարցազրույցը) կարող է ստեղծել ճնշող մթնոլորտ։ Երկրորդ տեխ. մասնագետի ներկայությունը ցանկալի է ավելի օբյեկտիվ կարծիք կազմելու համար։ Սակայն, եթե տեխ. մասնագետը փորձառու է եւ կարող է անցկացնել հարցազրույցը միայնակ, ապա մեկ տեխ. մասնագետի ներկայությունը կլինի ավելի օպտիմալ։

Նշում 2

Հարցազրույցի վերջում, անկախ դիմորդի գնահատականից կամ նրա պոտենցիալ թեքնածու լինել կամ չլինելուց, տրամադրեք 5 րոպե խորհրդակցության համար, նշեք կատարված սխալները, տվեք խորհուրդներ, ուղղորդեք եւ ցույց տվեք այն բացերը, որն ունի տեխիկական գիտելիքներում։ Ուղարկեք համապատասխան հոդվածների հղումներ, գրքեր կամ այլ ռեսուրսներ բացը լրացնելու համար։ Դարձնենք աշխարհը փոքր-ինչ ավելի լավը :)

Շնորհակալություն։


This post in GitHub

Check out our forums for more discussions, and if you like what you read, then join iterate hackerspace for a community of programmers in Yerevan for coding workshops, coding community.


Comments powered by Talkyard.