You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 KiB

Coding Interview University

Asl versiyasi: Inglizcha

Dastlab men bu proyektni dasturchi (software engineer) bo'lish uchun o'qish kerak bo'lgan mavzularning qisqacha ro'yxati sifatida yaratdim, ammo bu proyekt bugun siz ko'rib turgan katta ro'yxatga aylandi. Ushbu o'quv rejasidan o'tib, men Amazon-ga dasturchi sifatida ishga yollandim! Ehtimol, menga o'xshab o'qishingizga to'g'ri kelmaydi. Baribir sizga kerak bo'lgan hamma narsa shu yerda.

Bir necha oy davomida kuniga taxminan 8-12 soat o'qidim. Bu mening hikoyam: Nega men Google-da intervyudan o'tish uchun 8 oy davomida kechayu kunduz o'qidim?

Bu yerda keltirilgan narsalar sizni har qanday dasturiy ta'minot kompaniyalari, shu jumladan gigantlar: Amazon, Facebook, Google va Microsoft-da o'tkaziladigan texnik suhbatga yaxshi tayyorlaydi.

Sizga omad tilayman!

Bu nima uchun kerak?

Bu mening web dasturchi (web developer) darajasidan katta kompaniyada ishlaydigan dastur injineri (software engineer) darajasiga chiqish uchun qilgan ko'p oylik o'qish rejam.

Coding at the whiteboard - from HBO's Silicon Valley

Bu proyekt yangi dasturchi injinerlar uchun juda foydali. Va yana, oddiy programmistlikdan (masalan web yoki mobildan) dasturiy injinerlikka (dastur injinerlaridan computer science bilimlari talab qilinadi) o'tmoqchi bo'lganlar uchun foydali.

Agar sizda dasturchilik bo'yicha ko'p yillik tajribangiz bo'lsa, shuni bilingki: Google, Amazon, Facebook, va Microsoftga o'xshagan katta kompaniyalar dasturiy injinerlikni (software engineer) oddiy dasturchilik (software/web developer) dan farqli deb ko'radi va ular computer science bilimini talab qiladi.

Agar siz reliability engineer yoki operations engineer bo'lmoqchi bo'lsangiz, unda siz ixtiyoriy ro'yxatdan ko'proq o'qing (networking, xavfsizlik va boshqalar).

Mundarija

---------------- Quyidagilar ixtiyoriy ----------------

Qo'shimcha manbalar


Nima uchun foydali?

Ushbu loyihani boshlaganimda, men stack bilan heap-ni farqini bilmas edim, Big-O ni nimaligini bilmas edim, tree-lar yoki graph-lar haqida hech qanday tushunchaga ega emas edim. Agar tartiblash algoritmini (sorting) yozishni so'rashganda, aniq qovun tushirgan bo'lar edim. Umrimda ishlatgan data strukturalarni hammasini tayyor holda ishlatganman (built-in library) va ularning asosida nimalar yotishini umuman bilmas edim. Juda ko'p kod yozgan bo'lsamda, lekin men hech qachon qandaydir data strukturani noldan yozmaganman.

Bu uzoq vaqt talab qiladigan jarayon bolib, sizga bir necha oy kerak bo'lishi mumkin. Agar siz allaqachon bu narsalarni ko'pini bilsangiz, bu resurslar sizni ko'p vaqtingizni olmaydi.

Qanday foydalanish kerak?

Quyida foydalanish qoidalari berilgan bo'lib, bosqichlarni yuqoridan pastga tartibda bajarishingiz kerak.

Men natijalarni kuzatish uchun vazifalar ro'yxatini o'z ichiga olgan Github markup-idan foydalanmoqdaman.

Bu kabi elementlarni tekshirishingiz uchun yangi "branch" yarating, so'ngra shunchaki qavs ichiga x qo'shib, ro'yxat elementlarini belgilashingiz mumkin: [x]

 Branch-ni o'zingizga fork qiling va quyidagi buyruqlarni ketma-ketlikda bajaring:

Ulash uchun https://github.com/jwasham/coding-interview-university havola(link) ga o'ting va "Fork" tugmasini bosing

Shaxsiy(local) repo-ga ko'chirib oling

git clone git@github.com:<your_github_username>/coding-interview-university.git

git checkout -b progress

git remote add jwasham https://github.com/jwasham/coding-interview-university

git fetch --all

O'zgarishlaringizni tugatganingizdan so'ng barcha qismlarni X bilan belgilang

git add .

git commit -m "Marked x"

git rebase jwasham/main

git push --set-upstream origin progress

git push --force

Github-flavored markdown-haqida ko'proq ma'lumot

O'zingizni omadsiz deb hisoblamang

Video qo'llanmalar haqida

Ba'zi video darsliklarni faqat Coursera yoki EdX platformalari orqali ro'yxatdan o'tgan holda olish mumkin. Ular MOOC (ommaviy ochiq onlayn kurs) deb nomlanadi. Ba'zan darslar sessiyada bo'lmaganligi sababli siz bir necha oy kutishingizga to'g'ri keladi.

Bepul va har doim ham ochiq ommaviy manbalarni yaratishda o'z hissangizni qo'shishingizni xohlagan bo'lar edim. 
Bu manbalar Youtube dagi video darsliklar ham bo'lishi mumkin. Masalan menga universitet 
ma'ruzalaridan foydalanish yoqadi.    

Suhbat jarayoni va intervyuga tayyorgarlik

Intervyu uchun bitta dasturlash tilini tanlang

Intervyuning kodlash qismini bajarish uchun o'zingizga qulay bo'lgan dasturlash tilidan foydalanishingiz mumkin, lekin yirik kompaniyalar quyida berilgan tillarning biridan foydalanishni talab qilishlari mumkin:

  • C++
  • Java
  • Python

Shuningdek quyidagilarni ham ishlatishingiz mumkin:

  • JavaScript
  • Ruby

Quyida intervyu uchun dasturlash tilini tanlash haqida yozgan maqolam: Pick One Language for the Coding Interview.

Siz intervyu uchun tanlagan dasturlash tilida erkin kod yoza oladigan va o'z bilimingizga ega bo'lishingiz kerak.

To'g'ri tanlov haqida ko'proq o'qishingiz uchun manbalar:

Dasturlash tillari bo'yicha manbalar

Quyida berilgan kitoblar ro'yxatida o'zim o'rganayotgan C, C++, va Python ga oid manbalarni ko'rishingiz mumkin.

Kitoblar ro'yxati

Bu sizning vaqtingizni tejash uchun men ishlatgan kitoblar ro'yxatining qisqartirilgan ko'rinishi.

Intervyuga tayyorlanish

Agar sizda bo'sh vaqtingiz ko'p bo'lsa:

Quyidagi kitoblardan birini tanlashingiz mumkin:

Dasturlash tiliga oid

Yuqorida aytilganidek siz intervyu uchun bitta dasturlash tilini tanlashingiz kerak

Mening tilga oid tavsiyalarim. Menda barcha tillar uchun resurslar yo'q shuning uchun sizda qo'shimcha ma'lumot bo'lsa tavsiya qilishingiz mumkin. Agar siz bulardan birini o'qib chiqsangiz, masalalarni yechishda kerak bo'lgan barcha data strukturalar va algoritmlari bo'yicha bilimlarga ega bo'lishingiz kerak. Loyihadagi video resurslarni o'tkazib yuborishingiz mumkin, agar ko'rib chiqishni xohlamasangiz.

Tilga oid qo'shimcha resurslar.

C++

Men bularning ikkitasini o'qimaganman, lekin ular yuqori baholangan va Sedgewick tomonidan yozilgan. Sedgewick aka zo'rlar :)

Agar sizda C++ bo'yicha yaxshiroq tavsiyalaringiz bo'lsa iltimos biz bilan baham ko'ring.

Java

Yoki:

  • Java da ma'lumotlar tuzilmasi va algoritmlar
    • Goodrich, Tamassia, va Goldwasser tomonidan yozilgan
    • UC Berkeley-dagi CS(Computer Science) kirish kursi uchun qo'shimcha kitob sifatida ishlatiladi
    • Quyida Python dasturlash kitobi uchun men qoldirgan izohlar bu kitobga ham tegishli.

Python

O'rganishni boshlashdan oldin

Mazkur ro'yxat bir necha oylar davomida shakllanganligi sababli biroz qo'ldan chiqdi. Bu yerda men ba'zi yo'l qo'ygan xatoliklar bor, bu esa sizlarga yaxshiroq tajriba orttirishingizga yordam beradi.

1. Bularning barchasini eslab qolmaysiz

Men soatlab videolar ko'rardim va eslatmalar yozib qo'yar edim, va bir necha oydan so'ng hammasini eslab qola olmas edim. Men yozib olgan eslatmalarim va fleshkartalarim yordamida takrorlab chiqishim uchun 3 kun sarfladim.

Men qilgan xatolarni siz ham takrorlamasligingiz uchun iltimos o'qib chiqing:

Retaining Computer Science Knowledge.

Menga tavsiya qilingan kurs (shaxsan o'zim ko'rib chiqmaganman): Learning how to Learn.

2. Fleshkartalar(kartochkalar) ishlating

Muammoni yechish uchun, men fleshkartalar uchun sayt yaratdim, u yerga 2 turdagi fleshkartalar joylanadi: umumiy eslatmalar va kod. Har bir karta o'z formatiga ega.

Vebsaytdan telefon yoki tabletdan ham xohlagan joyda foydalana olishim uchun mobil telefonga moslangan sayt yaratdim.

O'zingizni saytingizni ham tekinga yarating:

Yodingizda bo'lsin, menda assembly language va Python triviyalaridan tortib, machine learning va statistikani o'z ichiga olgan kartalarim bor. Bu esa talab qilinadigan narsalardan ham ko'p hisoblanadi. (Ya'ni bularning barchasini siz bir vaqtda o'zlashtirgan bo'lishingiz shart emas)

Fleshkartalardagi eslatmalar : Birinchi marta fleshkartadagi javobni topa olganingizda uni o'zlashtirilganlar qatoriga qo'shmang. Aksincha huddi shu kartani ajratib qo'ying va bir necha marta javob bering toki haqiqatdan ham javobni anglab yetguningizgacha. Takrorlash natijasida ma'lumot miyangizga chuqurroq joylashadi.

Fleshkartalar uchun bir necha marta menga tavsiya qilingan alternativ vebsayt Anki. Bu sizning eslab qolishingizga yordam berish uchun takrorlash sistemasini ishlatadi. Buni ishlatish qulay va barcha platformalarda mavjud va cloud bilan sinxronizatsiya qilingan. iOS platformalari uchun narxi $25, lekin boshqa platformalar uchun tekin.

Anki formatidagi mening fleshkartalarim bazasi: https://ankiweb.net/shared/info/25173560 (@xiewenya ga tashakkur).

3. Ma'lumotlar tuzilmalari va algoritmlarini o'rganish jarayonida coding intervyu savollariga javob topishni boshlang.

O'rganayotgan narsalaringizni masalalar yechishda qo'llab ketishingiz kerak, aks holda o'rganganlaringizni tez unutishingiz mumkin. Shaxsan menda shunday bo'lgan. Biror bir mavzuni masalan bog'langan ro'yxatlar (linked lists) ga oid mavzuni o'rganganingizdan keyin agar o'zingizni shu mavzuda erkin his qilishni boshlasangiz coding intervyu kitoblaridan linked list ga oid masala yechishga urinib ko'ring. So'ng, keyingi mavzuga o'ting. Bir qancha vaqtdan keyin yana ortga qaytib linked listga yoki rekursiyaga oid masala yeching. Asosiysi o'rganish jarayonida ko'proq masalalarni yechishda davom eting. Sizni ishga bilimingiz uchun emas, bilimingizni qo'llay olishingiz uchun qabul qilishadi. Men sizlarga tavsiya qiladigan kitoblar va saytlar bor. Ko'proq ko'rish uchun havolaga o'ting: Coding bo'yicha savollar ustida ishlash.

4. Takrorlang, takrorlang va yana takrorlang

Menda ASCII, OSI stack, Big-O notations va boshqa mavzularda eslatma varaqlarim bor. Ularni biroz bo'sh vaqtim bo'lganda o'rganaman.

Masalalar yechish jarayonida biroz tanaffus oling va o'zingizni fleshkartalaringizni takrorlab chiqing.

5. Diqqatingizni bir joyga jamlang

Atrofimizda juda ko'p narsalar bizni chalg'itib qo'yadi va qimmatli vaqtimizni oladi. Shuning uchun diqqatni jamlash va konsentratsiya qilish oson emas. Buning bir usuli, matnsiz biron musiqa tinglang, bu esa diqqatingizni jamlashingizga yordam beradi.

Bu proyekt nimalarni o'z ichiga olmaydi

Bular keng tarqalgan texnologiyalar lekin bu proyekt ularni o'z ichiga olmaydi:

  • SQL
  • Javascript
  • HTML, CSS, va boshqa front-end texnologiyalar

Kunlik reja

Bazi mavzular bir kun oladi, va bazilariga bir necha kunlar kerak bo'ladi. Bazilari faqat o'rganish, kod yozish kerak emas.

Har kuni bitta mavzu olib, videolarini ko'rib, quyidagi tillarda kodda yozib chiqaman:

  • C - struct-lardan va struct * oladigan funksiyalarni ishlatgan holda
  • C++ - built-in tiplarni ishlatmagan holda
  • C++ - built-in tiplarni ishlatgan holda, masalan STL-ning std::list
  • Python - built-in tiplarni ishlatgan holda (Python-ni mashq qilish uchun)
  • va testlar yozgan holda (oddiy assert() ishlatib)
  • siz Java yoki boshqa tilda qilishingiz mumkin

Sizga bularni hammasi kerak emas. Intervyu uchun sizga faqat bitta til kerak.

Nega turlicha yozish kerak?

  • Mashq, mashq, mashq, ko'nglim ayniguncha. Shunda muammosiz tushimda ham qila olaman.
  • Past darajada (low level) yoza olish uchun (masalan, garbage collection ishlatmagan holda)
  • Har kunlik ishda built-in tiplardan bemalol foydalana olish uchun (production-da array listni yoki linked listni boshidan yozib o'tirmaymanku)

Har bir mavzuni tepadagi tarzda o'qiyolmasligim mumkin, lekin harakat qilaman.

Meni kodlarimni bu yerda ko'rishingiz mumkin:

Har bir algoritmni ikr-chikirini eslab qolishingiz shart emas.

Birinchi kodizni doskada yoki qog'ozda yozing, kompyuterda emas. Og'zaki test qiling. Keyin kompyuterda yozib test qiling.

Oldindan nima bilish kerak

Algoritmik murakkablik / Big-O / Asimtotik tahlil

Ma'lumotlar tuzilmasi (Data structures)

  • Massivlar

    • Avtomatik ravishda o'lchamlarini o'zgartiradigan vektorni amalga oshirish.
    • Tavsif:
    • Vektorni bajaring (o'lchamini o'zgartiradigan massiv):
      • Massivlar va ko'rsatgichlar(pointerlar) yordamida kod yozishni mashq qiling va massivning indeksiga o'tish uchun indeks o'rniga pointer matematikasini ishlating.
      • Massivimiz elementlarini ushlab turadigan ichki (private) massiv
        • int massivni elementlarni saqlash uchun ishlatsak bo'ladi, faqat uning xususiyatlaridan foydalanmaslik kerak
        • 16 dan boshlang, agar boshlanayotgan son kattaroq bo'lsa 2 ning darajalarini ishlating(2 - 16, 32, 64, 128)
      • size() - massivdagi elementlar soni
      • capacity() - massiv o'z ichiga olishi mumkin bo'lgan elementlar soni
      • is_empty() - massiv bo'sh yoki yo'qligini tekshirish
      • at(index) - ko'rsatilgan indeksdagi massiv elementini qaytaradi. Agar berilgan index massiv indekslaridan tashqarida bo'lsa xatolik qaytaradi.
      • push(item)
      • insert(index, item) - ko'rsatilgan indeksga elementni qo'shadi, indeksdagi eski element(lar)ni esa o'zidan o'ngga ko'chiradi
      • prepend(item) - Massivning birinchi elementidan oldin yangi element qo'shish
      • pop() - Massivning oxirgi elementini o'chiradi va o'chirilgan elementni qaytaradi.
      • delete(index) - Massiv elementini index bo'yicha o'chiradi, Qolgan elementlar chapga ko'chiriladi
      • remove(item) - Berilgan qiymatni izlaydi va shu qiymatga ega index-larni barchasini o'chiradi
      • find(item) - Berilgan qiymatni izlaydi va shu qiymatga ega birinchi index-ni qaytaradi, agar topilmasa -1 qaytaradi
      • resize(new_capacity) // private function
        • Massiv hajmi to'lganda, uni ikki baravar oshirish uchun o'lchamini o'zgartiring
        • Massivda element olib tashlanganda, agar hajmi umumiy hajmning 1/4 ga teng bo'lsa, hajmini yarimiga o'zgartiring
    • Ish vaqt xarajati (Time)
      • O(1) Oxiriga qo'shish yoki olib tashlash (ko'proq joy ajratish uchun amortizatsiya qilingan), index, yoki o'zgartirish
      • O(n) boshqa joyga qo'shish yoki olib tashlash
    • Ish joy xarajati (Space)
      • elementlar xotirada yonma yon joylashgan, shuning uchun yaqinlik yordam beradi
      • bo'sh joy kerak = (massiv hajmi >= n) * element hajmi, agar 2n bo'lsa ham O(n) hisoblanadi
  • Linked Lists (O'zaro bog'langan ro'yxatlar)

    • Tavsif:
    • C Code (video) - butun videoni ko'rmang, Node struct va xotira ajratish (memory allocation) qismlarini ko'ring
    • Linked List va Array(massiv)lar:
    • nega linked list-dan foydalanmaganingiz maqul (video)
    • Yodda tuting: siz "pointer to pointer" nimaligini tushuningiz kerak: (funksiyaga pointer berilganda, funksiya pointer ko'rsatib turgan adresni o'zgartirishi mumkin) Bu sahifa "pointer to pointer" ni tushinish uchun foydali. Lekin bunday list traversal stilini tavsiya etmayman chunki kodni o'qish va uni maintain qilish qiyin.
    • Kodda yozaman (tail pointer va tail pointer-siz):
      • size() - listdagi elementlar sonini qaytaradi
      • empty() - agar list bo'sh bo'lsa true qaytaradi
      • value_at(index) - n-inchi elementning qiymatini qaytaradi (0 dan boshlab)
      • push_front(value) - listning boshiga element qo'shadi
      • pop_front() - birinchi elementni olib tashlab va uni qiymatini qaytaradi
      • push_back(value) - oxiriga element qo'shadi
      • pop_back() - oxirgi elementni olib tashlab va uni qiymatini qaytaradi
      • front() - birinchi elementni qiymatini qaytaradi
      • back() - oxirgi elementni qiymatini qaytaradi
      • insert(index, value) - index-ni joyiga value-ni joylashtiradi
      • erase(index) - index joyida turgan elementni o'chirib tashlaydi
      • value_n_from_end(n) - oxiridan sanaganda n-inchi elementni qiymatini qaytaradi
      • reverse() - listni teskari safga qo'yadi
      • remove_value(value) - value qiymatiga ega bo'lgan birinchi elementni o'chirib tashlaydi
    • Doubly-linked List
  • Stack

  • Queue

    • Queue (video)
    • Circular buffer/FIFO
    • [Review] Queues in 3 minutes (video)
    • linked-list dan foydalangan holda kodda yozaman (tail pointer bilan):
      • enqueue(value) - qiymatni queue-ni oxiriga qo'yadi
      • dequeue() - queue-ni boshidagi elementni o'chirib uni qiymatini qaytaradi
      • empty()
    • belgilangan o'lchamli massivdan foydalangan holda kodda yozaman:
      • enqueue(value) - mavjud xotirani oxiriga qiymatni qo'yadi
      • dequeue() - queue-ni boshidagi elementni o'chirib uni qiymatini qaytaradi
      • empty()
      • full()
    • Ish xarajati:
      • queue uchun linked-list ishlatib, list boshiga enqueue qilish va oxiridan dequeue qilish - bu yomon yondashuv. Chunki har safar dequeue qilinganda O(n) vaqt ketadi
      • enqueue: O(1) (amortized, linked list va massiv [probing])
      • dequeue: O(1) (linked list va massiv)
      • empty: O(1) (linked list va massiv)
  • Hash table

Ma'lumotlar tuzilmasi vizualizatsiya (Data structure Visualizations)

Animatsiya orqali ma'lumotlar tuzilmalari va algoritmlarini vizualizatsiya qilish. Quyidagi havolada siz ma'lumotlar tuzilmasi aslida qanday ishlashini tushunib olasiz.

Qo'shimcha bilimlar

Trees (daraxtlar)

Sorting (Saralash)

Vizual tarzda ma'lumot olish uchun 15 ta saralash algoritmlari. Agar sizga ushbu mavzu bo'yicha batafsil ma'lumot kerak bo'lsa, "Saralash" bo'limiga qarang Ba'zi mavzular bo'yicha qo'shimcha ma'lumotlar

Graflar

Computer science da graflar bir talay masalalarni tasvirlashda ishlatiladi. Shuning uchun tree va tartiblash algoritmlari kabi bu qism yetarlicha uzun

Yanada ko'proq bilim

Tizim Dizayni, Scalability, Ma'lumotlar bilan ishlash

agar sizda 4+ yil ish tajribasi bo'lsa intervyularda sizga tizim dizayn bo'yicha savolar tushadi


Yakuniy tahlil

Bu qismda ko'p muhim tushunchalarni tez qaytarib olish uchun kerak bo'ladigan qisqa videolar bor

Coding bo'yicha savollar ustida ishlash

Yuqoridagi barcha "computer science" mavzularini bilb oldingiz, endi coding bo'yicha masalalarga javob berishni mashq qilish vaqti keldi.

Coding masalalarini yechishga tayyorlanish bu javoblarni yodlab qolish emas

Masalalar yechishni mashq qilish nima uchun zarur:

  • Muammoni aniqlash va kerakli ma'lumotlar tuzilmalari va algoritmlari mos keladigan joyni topa olish
  • Masala uchun kerakli talablarni to'plash
  • Huddi intervyudagi kabi muammoni yechish uchun qadam baqadam yurish
  • Doskada yoki qog'ozda kod yozish, kompyuterda emas
  • Yechimlaringizga ish joyi xarajati va ish vaqti xarajatini aniqlash
  • Yechimlaringizni testlash

Suhbatda metodik, kommunikativ muammolarni hal qilish uchun ajoyib kirish qismi mavjud. Siz buni dasturlash uchun intervyu kitoblaridan ham topa olishingiz mumkin, lekin men buni ular ichida juda foydali deb topdim: Algorithm design canvas

Uyingizda doska yo'qmi? Bu tabiiy. Men o'zgacha insonman, menda kotta doskam bor. Doska o'rniga, rasm chizish uchun mo'ljallangan daftar ishlating. Shunda divanda o'tirib, mashq qilishingiz mumkin. Bu mening "divanga mo'ljallangan doskam". Men rasmda qalamimni ham qo'shganman qulaylik uchun. Agar siz ruchkadan foydalansangiz, o'chirish istagi paydo bo'lishi mumkin. Tez Chalkashib ketadi. Shuning uchun men qalam va o'chirg'ichdan foydalanaman.

mening divan uchun doskam

Qo'shimcha:

Dasturlash masalalarini o'qing va bajaring (ketma ketlikda):

Ko'ring Book List above

Coding mashqlar/savollar

Miyyangiz og'rigunigacha o'rganib bo'lganingizdan keyin o'sha miyyangizni ishga soling Har kuni coding savollar ishlang, qancha ko'p bo'lsa shuncha yaxshi

Coding Intervyu Savollar Videolari:

Mashq saytlari:

Til o'rganish saytlari, mashqlari bilan

Mashqlar repolari

Mock intervyular

Intervyuga yaqin kelganingizda

Sizni rezyumeingiz

  • 'Cracking The Coding Interview' kitobini Resume prep qismini va 'Programming Interviews Exposed' kitobini orqasini ko'ring

Intervyuga yaqin kelganda quyidagilar haqida o'ylab yuring

Sizdan so'rashlari mumkin bo'lgan 20 tacha intervyu savollarini o'ylab toping (pastagi savollarga o'xshagan). Har biri uchun 2-3 javobiz bo'lsin. Siz amalga oshirgan biror narsa haqida hikoyangiz bo'lsin.

  • Nega bu ishni xohlayapsiz?
  • Siz yechgan mushkul masala/muammo?
  • Qanday qiyinchiliklar bo'lgan?
  • Siz ko'rgan eng yaxshi/eng yomon dizaynlar?
  • Mavjud produktni takomillashtirish uchun g'oyalar?
  • Qanday holda yaxshi ishlaysiz, yolg'iz yoki jamoda?
  • Sizni qanday ko'nikmalaringiz/mahoratlaringiz bu ish o'rinida katta foyda bo'ladi va nega?
  • [x ishda / y proyektda] sizni eng ko'p zavqlantirgan narsa?
  • [x ishda / y proyektda] siz duch kelgan eng katta muammo?
  • [x ishda / y proyektda] siz duch kelgan eng mashaqqatli bug?
  • [x ishda / y proyektda] siz nima o'rgandingiz?
  • [x ishda / y proyektda] siz nimani yaxshiroq qilgan bo'lardingiz?

Intervyuver uchun savollaringizni tayyorlab qo'ying

Mening savollarimning bazilari (Bu savollarga javobni bilsam ham ularni fikrlarini yoki jamoaviy nuqtai nazarlarini bilishni xohlayman):
  • Jamoangiz qanchalik katta?
  • Sizning dasturlash siklingiz qanday tarzda o'tadi? waterfall/sprintlar/ yoki agile ishlatasizmi?
  • Deadline-lar ga shoshilish odatiy holmi? Yoki erkinlik ko'proqmi?
  • Jamoangizda qarorlar qanday qabul qilinadi?
  • Haftasiga nechi marta jamoaviy meeting-lar tashkil etiladi?
  • Sizning ishdagi atmosferangiz sizga konsentratsiya qilishga yordam beradimi?
  • Hozirda nima ustida ishlayapsizlar?
  • Bunda sizga nima ko'proq yoqadi?
  • Ish hayoti qanday tarzda o'tadi?
  • Ish va shaxsiy hayot balansi qanday yo'lga qo'yilgan?

Ishga qabul qilinganingizdan so'ng

Tabriklaymiz!

O'rganishda davom eting.

Hech qachon tugatgan bo'lmaymiz.


*****************************************************************************************************
*****************************************************************************************************

Ushbu bandning ostidagi hamma narsalar ixtiyoriydir.
Ularni o'rganish orqali siz ko'proq CS tushunchalariga ega bo'lasiz va har qanday dasturiy injinerlik
ishi uchun yaxshi tayyorlangan bo'lasiz. Siz ancha mukammal dasturchi darajasiga erishasiz.

*****************************************************************************************************
*****************************************************************************************************

Qo'shimcha kitoblar

O'zingizni qiziqtirgan mavzuga chuqur sho'ng'ishingiz uchun resurslar
  • The Unix Programming Environment

    • Eski lekin yaxshi
  • The Linux Command Line: A Complete Introduction

    • Zamonaviy variant
  • TCP/IP Illustrated Series

  • Head First Design Patterns

    • Dizayn pattern-larga yengil kirish
  • Design Patterns: Elements of Reusable Object-Oriented Software

    • Shuningdek, "Gang Of Four" yoki "GOF" nomi bilan tanilgan
    • Qoidaga aylangan dizayn pattern kitobi
  • UNIX and Linux System Administration Handbook, 5th Edition

  • Algorithm Design Manual (Skiena)

    • Qaytarish uchun va muammoni tanib olish uchun
    • Algoritm katalog qismi intervyularda tushadigan savollardan ancha qiyin
    • Bu kitob ikki qismdan iborat:
      • Data strukturalar va algoritmlar bo'yicha sinf darslik kitobi
        • Yaxshi taraflari:
          • Boshqa algoritm sinf darsliklari kabi qaytarish uchun yaxshi
          • Ishda va akademiyada bo'lgan o'zining masala yechish tajribasidan yaxshi hikoyalar bor
          • Kod namunalari C da
        • Yomon taraflari:
          • CLRS kabi zich va tushinishga qiyin bo'lishi mumkin, va hatto bir xil mavzularga CLRS yaxshiroq bo'lishi mumkin
          • Bazi narsalar yetarlicha yoritilmagani uchun, 7, 8, 9-boblar tushunishga qiyin (Ehtimol menikidan aqlliroq kalla kerakdir)
          • Meni noto'g'ri tushunmang: Menga Skiena, uni o'qitish uslubi, va mannerizmi yoqadi, lekin men Stony Brook universitetdagilar kabi emasman
      • Algoritm katalogi:
        • Bu kitobni sotib olishingizni asl sababi
        • Bu qismga yetib qoldim. Tugatganimdan so'ng bu yerni yangilab qo'yaman
    • kindle-da ijaraga olsangiz bo'ladi
    • Javoblar
    • Errata
  • Write Great Code: Volume 1: Understanding the Machine

    • Kitob 2004-yilda nashr etilgan va bir oz eskirgan, lekin kompyuterni qisqa vaqta tushunish uchun zo'r resurs
    • Muallif HLA ni kashf etgan. Shunday ekan, HLA haqida gaplar va namunalarga skeptik qarang. Keng ishlatilmaydi lekin assembly qanday ko'rinishini ko'rsatadigan namunalar
    • Bu boblar sizga kompyuterni tushunishda yaxshi bilim poydevori bo'ladi
      • Chapter 2 - Numeric Representation
      • Chapter 3 - Binary Arithmetic and Bit Operations
      • Chapter 4 - Floating-Point Representation
      • Chapter 5 - Character Representation
      • Chapter 6 - Memory Organization and Access
      • Chapter 7 - Composite Data Types and Memory Objects
      • Chapter 9 - CPU Architecture
      • Chapter 10 - Instruction Set Architecture
      • Chapter 11 - Memory Architecture and Organization
  • Introduction to Algorithms

    • Muhim: Bu kitobni o'qish siz uchun cheklangan qiymatga ega. Bu kitob algoritmlar va data strukturalar tahlili uchun zo'r, lekin yaxshi kod yozishni o'rgatmaydi. O'zingiz to'g'ri yechim topishingiz kerak bo'ladi
    • CLR nomi bilan ham tanilgan (bazida CLRS chunki Stein keyinroq kitob mualliflariga qo'shilgan)
  • Computer Architecture, Sixth Edition: A Quantitative Approach

    • Nisbatan ancha boyroq va yangiroq (2017), lekin uzunroq yozilgan
  • Programming Pearls

    • Boshlang'ich bir ikki boblari muammolarga ajoyib yechimlar taqdim qiladi, lekin bu shunchaki kirish. Bu kitob dasturning dizayn va arxitekturasi uchun qo'llanma

Qo'shimcha o'rganish

Men bularni har tomonlama rivojlangan dasturchi bo'lishingizga yordam berish va ba'zi texnologiyalar va algoritmlardan xabardor bo'lishingiz uchun qo'shdim,
Natijada sizda kattaroq asboblar qutisi bo'ladi.

Ba'zi mavzular bo'yicha qo'shimcha ma'lumotlar

Men bularni Yuqorida keltirilgan ba'zi fikrlarni mustahkamlash uchun qo'shdim, lekin yuqorida qo'shishni xohlamadim
chunki juda ko'p resurslarni o'z ichiga oladi. Bitta mavzuda juda ko'p qolib ketish ham yaxshi emas.
Siz shu asrda ishga qabul qilinishingizni xohlaysiz shundaymi?

Video Seriyalar

Qulay joylashib oling va maroqlaning. "Netflix va skillar" :P

Computer Science Kurslari

Algoritmlarning kodda yozilishi

Maqolalar

Litsenziya

CC-BY-SA-4.0