Files
coding-interview-university/translations/README-bg.md
2021-12-21 17:43:52 +02:00

33 KiB
Raw Blame History

Coding Interview University

Първоначално създадох това като кратък списък с теми за учене, за ставане на софтуерен инженер, но то се разрасна до този огромен списък, който виждате в момента. След като преминах през този учебен план, бях нает като софтуерен инженер в Amazon! Най-вероятно няма да Ви се налага да учите колкото мен, но все пак всичко, от което се нуждаете е тук.

Учих по около 8-12 часа на ден за няколко месеца. Това е историята ми: Why I studies full-time for 8 months for a Google interview

Моля обърнете внимание: Няма да Ви се налага да учите колкото мен. Загубих много време, учейки неща, които нямах нужда да знам. Може да прочетете повече за това надолу. Ще Ви помогна да достигнете до крайната цел без да прахосвате скъпото си време.

Темите, изредени тук, ще Ви подготвят добре за техническо интервю за почти всяка една компания, включително гигантите Amazon, Facebook, Google и Microsoft

Пожелавам Ви успех!

Преводи:
Текущи преводи:

Какво е това?

Coding at the whiteboard - from HBO's Silicon Valley

Това е моят многомесечен план за ставане на софтуерен инженер към голяма компания.

Изисквания:

  • Малко опит с програмиране (променливи, цикли, методи/функции и т.н)
  • Търпение
  • Време

Забележете, че това е учебен план за софтуерно инженерство, а не уеб разработка. Големите компании като Google, Amazon, Facebook и Microsoft различават софтуерното инженерство и уеб разработката. Amazon, например, имат Frontend инженери (FEE) и Software Development инженери (SDE). Това са 2 отделни позиции и интервютата за тях няма да са еднакви, тъй като всяка една от тях има своите специфики. Тези компании изискват знания по компютърни науки за позиции свързани с софтуерно инженерство/разработка


Съдържание

Учебният план

Теми за учене

Как да спечелите позицията

---------------- Всичко оттук надолу е по желание ----------------

Допълнителни теми и ресурси


Защо да го ползвате?

Ако искате да работите като софтуерен инженер в голяма компания, това са нещата, които трябва да знаете.

Ако също като мен не сте учили компютърни науки в университет това ще Ви помогне да наваксате и ще Ви спести години.

Когато започнах този проект не знаех какво е стек или опашка, нямах представа какво е Big-O, не знаех нищо за дървета или как да обхождам графи. Ако трябваше да напиша сортиращ алгоритъм мога да Ви кажа, че бих се справил ужасно. Всяка от структурите от данни, които бях използвал досега бяха имплементирани в езика, който ползвах и нямах представа как работят реално. Никога не ми се беше налагало да управлявам памет освен ако някой от процесите, които бях пуснал не връщаха грешка "out of memory"- тогава се налагаше да търся заобиколен път. Бях ползвал хиляди асоциативни масиви и многоизмерни масиви няколко пъти, но никога преди не бях имплементирал структури от данни от нулата.

Планът е дълъг. Може да Ви отнеме месеци. Ако вече сте запознати с повечето от темите ще Ви отнеме многи по-малко

Как да го ползвате

Всичко надолу е само схематично изложение и трябва да преминете през темите от горе до долу.

Не мислете, че не сте достатъчно умни

Бележка за видео ресурсите

Някои видеа са достъпни само след записване в курс на Coursera или EdX- т.нар. MOOCs. Понякога се налага да изчакате няколко месеца, за да стартира ново издание на курса, така че няма да имате достъп до тях.

Би било чудесно такива ресурси да бъдат заменену с безплатни и винаги-достъпни публични източници като YouTube видеота (по възможност университетски лекции), за да могат всички да учат навсякъде и по всяко време, а не само когато даден курс върви в момента.

Изберете език за програмиране

Трябва да изберете език за програмиране за интервютата на които ще се явявате, но също така трябва да изберете език, който можете да ползвате за учене на концепции от компютърните науки.

Желателно е този език да е един и същ, така ще Ви се налага да владеете само един език.

За този учебен план

Когато преминавах през учебния план ползвах 2 езика за по-голямата част от нещата: C и Python

  • C: Език на много ниско ниво. Дава Ви възможност да се справяте с пойнтъри и управляване на паметта, за да разберете структурите от данни и алгоритмите на много дълбоко ниво. В езици за програмиране на по-високо ниво тези неща са скрити от Вас. В ежедневната работа това е прекрасно, но когато се учите как тези структури от данни работят е хубаво да усещате как става всичко.
    • C е навсякъде. Ще виждате примери в книги, лекции, видеа навсякъде докато учите.
    • The C Programming Language, Vol 2
      • Това е кратка книга, но ще Ви даде добра представа за езика и с малко упражнения бързо ще имате добро владение над него. Ако разбирате C значи разбирате как програмите и паметта работят.
      • Не трябва да се зачитате много надълбоко в книгата (или дори да я прочитате докрай). Нужно е само да сте уверени в способността си да четете и пишете в C.
      • Отговори на въпросите в книгата
  • Python: модерен и много експресивен. Научих го защото е наистина много полезен и ми позволява да пиша по-малко код когато съм на интервю.

Това е моя личен избор. Вие можете да изберете каквото пожелаете, разбира се.

Може да не Ви трябват, но ето някои сайтове за учене на нов език:

За интервюто Ви по програмиране

Може да изберете език, в който се чувствате комфортно за интервюто Ви, но за големите компании това са най-добрите опции:

  • C++
  • Java
  • Python

Може да ползвате и тези, но поразгледайте преди това, защото може да има уловки:

  • JavaScript
  • Ruby

Това е статия, която написах за избирането на език за вашето интервю: Pick One Language for the Coding Interview. Това е оригиналната статия, на която базирах моя пост: http://blog.codingforinterviews.com/best-programming-language-jobs/

Трябва да се чувствате много удобно с вашия език и да сте знаещи.

Повече за вариантите:

Вижте ресурси за специфични езици тук

Книги за структури от данни и алгоритми

Тази книга ще положи вашата основа в компютърните науки.

Просто изберете една в език, с който ще се чувствате комфортно. Ще трябва да четете и да пишете код доста.

C

Python

Java

Изборът е ваш:

C++

Изборът е ваш:

Книги за подготовка за интервю

Няма нужда да купувате цял куп от тези книги. Честно казано "Cracking the Coding Interview" най-вероятно ще Ви бъде достатъчна, но аз си купих повече, за да се упражня по-добре. Но аз винаги правя прекалено много.

Купих тези двете, дадоха ми предостатъчно упражнение.

Ако имате изобилие от време:

Изберете една:

Не повтаряйте грешките ми

Този списък се разрасна с времето и да, нещата излязоха извън контрол.

Споделям някои от грешките, които направих, за да имате по-добро преживяване и за да си спестите месеци с време.

1. Няма да запомните всичко

Изгледах часове с клипове и водих записки за всичко, но след месеци имаше доста неща, които не си спомнях. Прекарах 3 дена преразглеждайки бележките си, за да си припомня някои неща. Не се нуждаех от всичките тези знания.

Моля, прочетете това, за да не повторите грешките миЛ

Да запазваме знания свързани с компютърни науки.

2. Използвайте флаш карти

За да се справя с проблема си направих малък сайт за флаш карти, където можех да добавям 2 вида карти: общи и такива с код. Всяка карта има ралично форматиране. Направих сайта mobile-first, за да мога да ги разглеждам от телефона или таблета си, навсякъде където съм.

Направете свои безплатно:

НЕ ПРЕПОРЪЧВАМ да ползвате моите флаш карти. Има прекалено много и някои от тях съдържат информация, която не е нужно да знаете.

Но ако не искате да ме послушате, ето:

Забележете, че аз прекалих и имам карти, които покриват всичко от assembly language и Python Trivia до machine learning и статистика. Прекалено много е за това, което се изисква.

Бележка за флаш картите: Първия път когато видите, че знаете отговора, не я отбелязвайте като "позната". Трябва да видите същата карта и отговора няколко пъти, преди наистина да знаете отговора. Повторението ще накара мозъка Ви наистина да запамети знанието.

3. Решавайте задачи от интервюта по програмиране докато учите

ТОВА Е МНОГО ВАЖНО.

Почнете да решавате задачи от интервюта по програмиране докато учите структури от данни и алгоритми.

Трябва да прилагате това, което учите като решавате задачи иначе ще забравите. Аз направих тази грешка.

Когато сте научили някоя тема и се чувствате що годе комфортно с нея, например linked lists:

  1. Отворете една от книгите за интервю за програмиране (или един от сайтовете със задачи, изредени по-долу)
  2. Решете 2-3 задачи свързани с linked lists.
  3. Продължете към следващата тема.
  4. По-късно се върнете и отново решете 2-3 задачи свързани с linked lists.
  5. Повтаряйте това с всяка нова тема, която учите.

Продължавайте да решавате задачи докато учите всичко това, а не след това.

Няма да ви наемат за знанията, които имате, а за това как ги прилагате.

Има много ресурси свързани с това надолу. Продължавайте да четете.

4. Фокусирайте се

Има много неща, които могат да отвлекат вниманието Ви и да Ви загубят ценно време. Да сте концентрирани е трудно. Пуснете си музика без текст и ще можете да се фокусирате сравнително добре.

Какво няма да намерите тук

Това са широко разпространени технологии, но не и част от учебния план:

  • SQL
  • Javascript
  • HTML, CSS, и други front-end технологии

Дневния план

Този курс преминава през множество от теми. Всяка от тях най-вероятно ще Ви отнеме няколко дена или дори седмица, или повече. Зависи от графика Ви.

Всеки ден взимайте следващата тема в списъка, изгледайте няколко клипа по тази тема и след това напишете имплементацията на въпросната структура от данни или алгоритъм в езика за програмиране, който сте избрали за този курс.

Можете да видите моя код тук:

Не е нужно да помните всеки алгоритъм наизуст. Необходимо е просто да ги разбирате достатъчно добре, за да можете да напишете собствена имплементация.