Реших много проблеми с изтичане на код. Хей, момчета, все още съм безработен, така че нека разрешим друг проблем с изтичане на код.

И в крайна сметка получих оферта от Google, където интервюирах над дузина кандидати. След стотици часове шлайфане и обясняване на проблеми, научих, че има различни нива на подготовка. И ще споделя всичко, което знам за процеса, включително как да практикувате, колко проблеми трябва да решите, често срещани грешки, които трябва да избягвате, и дали смятам, че изтичането на код е пълна загуба на време.

Като повечето хора, започнах с лесни въпроси, използвах C++, защото това беше първият език, който научих, но това беше малка грешка и за съжаление го научих чак по-късно. Първоначално дори не успях да реша лесните задачи. Дори и да знаех решението, винаги щях да се спъвам от крайни случаи. Не бях експерт по структури от данни и алгоритми. Знаех основно основите като масиви, свързани списъци, хеш карти, дървета, сортиране и двоично търсене.

И честно казано, мисля, че това е достатъчно, преди всъщност да започнете да решавате проблеми. Защото много от лесните задачи ще затвърдят разбирането ви за основите. И 50 проблема по-късно, ето къде бях. Можех да реша много от тривиалните проблеми като обръщане на низ или обръщане на двоично дърво, но дори не бях докосвал проблем с графики и дори не знаех какво е динамично програмиране.

Но вярвате или не, 50 задачи ми бяха достатъчни, за да получа стаж в банка. Но знаех, че трябва да продължа да работя, ако исках да си намеря работа в голяма технологична компания. Така че продължих да решавам задачи в произволен ред, което беше друга грешка. Но вероятно 60 или 70 въпроса и преминах на Python. Винаги разглеждах раздела за обсъждане на кода за изтичане и виждах, че кодът на Python винаги е най-краткият и най-сбитият. Въпреки че никога не съм използвал Python преди и до днес, никога не съм използвал Python на работа или стаж. Беше лесен избор, защото не е нужно да научите целия език.

Наистина просто трябва да научите основния синтаксис, как да пишете оператори if, цикли for и всички стандартни структури и методи на данни. И всъщност можете да ги научите, докато решавате проблеми с кода за изтичане, просто като търсите в Google, ако е необходимо. C++ също не е лош избор, но определено бих избегнал многословен език като Java. Езикът вероятно няма да наруши сделката, но определено може да ви спести няколко минути, когато въвеждате кода си, което определено може да има значение в истинско интервю. Но няма значение колко бързо пишете, ако всъщност не можете да разрешите проблема. И дори след решаването на 100 проблема, докато бях научил всички алгоритми с висока стойност като DFS, BFS, плъзгащ се прозорец и обратно проследяване, не успях да разреша последователно нов проблем за първи път.

Тогава не го знаех, но причината беше, че много въпроси за код за изтичане са последователни. Вероятно сте виждали въпроси като House robber one, House robber two и House robber three. Очевидно трябва да разрешите тези въпроси по ред, но всъщност повечето въпроси за кода за изтичане трябва да бъдат решени в определен ред. Например, никога не трябва да се опитвате да решавате проблеми с динамичното програмиране, освен ако вече нямате солидно разбиране за обратно проследяване. Вероятно не трябва да се опитвате да решавате проблеми с графики, докато не разберете солидно за дърветата. Това е очевидно в заден план, но съм сигурен, че много хора правят тази грешка, поради което създадох пътна карта, така че да не правите същата грешка, която направих аз. Оказва се, че редът, в който решавате проблемите, има значение.

Също така смятам, че решаването на един или два проблема на ден последователно е много по-добро от тъпченето, защото идеите наистина ще се задържат. Разбрах, че ако не мога да разреша въпрос за 45 до 60 минути, нямаше да бъда мога да го реша сам. Преди буквално си блъсках главата в стената три-четири часа върху един проблем, защото смятах, че това е единственият начин да се науча. Но нека просто бъдем честни, повечето от нас няма да могат сами да измислят някои от тези сложни академични алгоритми. И дори да можете да измислите алгоритъма за костенурка и коса на Флойд, това вероятно не е ефективно използване на времето ви. Не е срамно да търсите решение, стига да можете да разберете точно защо работи. Ето защо в моите видеоклипове наистина се опитвам да обясня мисловния си процес зад всеки проблем. Това в крайна сметка ми спести много време, защото щях да стигна до наистина труден проблем, проблем с главичката на пукнатина, който обичам да ги наричам, като спукани балони, и щях да се доближа до решаването на проблема.

Знаех, че това е проблем с динамично програмиране, но просто не можах да разбера трика зад него. Тогава щях да разгледам решение и само след пет минути четене щях да осъзная, о, това е номерът. И тогава щях да мога веднага да разреша проблема. Успях да премина от 100 до 250 решени въпроса много по-бързо, отколкото успях да реша първите си 100 въпроса. И дотогава бях научил 99% от моделите, които ми трябваха, дори някои от сложните. И стигнах дотам, че писането на тези алгоритми като DFS, BFS и двоично търсене беше толкова лесно за мен, колкото писането на for цикъл, дори някои напреднали като Union Find, Dijkstra’s, можех да напиша за по-малко от пет минути. И тогава разбрах, че повечето проблеми с изтичащия код попадат в тези кофи. За средни въпроси просто трябва да разберете какъв алгоритъм имате нужда и след това да го приложите. Трудните въпроси са подобни, с изключение на това, че зад тях обикновено стои наистина сложен трик.

И понякога, освен ако не сте го виждали преди, само Бог може да ви помогне да го разберете. Или може би вашият интервюиращ, ако се окаже щедър. В този момент бях уверен, че мога да премина интервюта, но не бях 100% сигурен дали съм готов за големите технологични интервюта като Google или Facebook. И предупреждение за спойлер, вероятно никога няма да се почувствате 100% подготвени. Не е двоично решение дали сте готови за интервю или не, защото никога не знаете кои въпроси ще ви бъдат зададени. Това е по-скоро разпределение. Може да имате 50% шанс за преминаване или може да стигнете до точката, в която имате 90% шанс за преминаване. Ако сте перфекционист, сигурен съм, че искате 100% шанс. Но това почти никога няма да е така. Мисля, че добро правило е, че трябва да можете да разрешите среден проблем, който никога преди не сте виждали, за 20 до 25 минути. Ако можете да направите това, вероятно имате поне 80% шанс да преминете повечето интервюта на Fang.

Продължавам да решавам до 569 задачи, въпреки че вече бях влязъл в Google, най-вече защото съм губещ. Но не отнема толкова много време, колкото си мислите, защото стигнах дотам, че мога да решавам повечето средни въпроси за 10 до 15 минути. Но определено не го препоръчвам, защото има намаляваща възвръщаемост при решаването на все повече и повече проблеми. Мисля, че качеството е много по-добро от количеството.

Препоръчвам да решите около 150 въпроса като спретнатия списък с код 150, който съдържа видео решения и кодови решения на 14 езика. Но се уверете, че наистина разбирате всеки проблем. Голяма грешка, която повечето хора правят е, че не се връщат назад и не преглеждат предишни проблеми. За да потънат наистина в тези сложни алгоритми, се нуждаете от повторение. Ето защо работя върху вземането на всеки проблем от спретнатия списък с код 150 и превръщането му във викторина с множество възможности за избор. Защото е наистина трудно да се върнете назад и да разрешите отново всеки въпрос. И обикновено всичко, което трябва да направите, е да прегледате трика. Така че направих тестове, които би трябвало да можете да решите за няколко минути, но и да получите голяма полза от тях. Можете да проверите шепа проблеми точно сега. Но когато списъкът е пълен, в идеалния случай трябва да можете да го прегледате само за един ден.

Мисля, че това ще спести огромно време за хората. Така че в края на краищата това е код за изтичане само на голяма загуба на време. Да, ако се опитвате да научите за разработката и действителното изграждане на приложения, изтичащият код вероятно няма да ви помогне да направите това. Но хората ще прекарат хиляди часове в получаване на диплома за CS, за да получат прилично платена работа, но няма да прекарат допълнителни 100 часа, за да получат голямо увеличение на възнаграждението. Това наистина няма смисъл за мен. Не ме разбирайте погрешно, кодът за изтичане не е най-вълнуващото нещо на света. Но мисля, че това ви помага да мислите за ръбовите случаи и как бихте тествали модулно своя код. Това са умения, които могат да се приложат при разработването на приложения. И вярвате или не, алгоритмите и структурите от данни се използват широко в индустрията от двигатели на бази данни до компилатори. Но е вярно, че кодът за изтичане няма да ви научи на всичко.

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

Ако ви е харесал този блог и искате да му помогнете да достигне до по-широка аудитория, моля, щракнете върху бутона за харесване. Също така ще се радваме да чуем вашите мисли за тези AI инструменти от Google. Така че не се колебайте да споделите мненията си в секцията за коментари.

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

Благодаря.