|
@@ -156,7 +156,7 @@
|
|
|
## Чем это полезно?
|
|
|
|
|
|
Я следую этому плану, готовясь к собеседованию в Google. Я разрабатываю веб-приложения, сервисы и запускаю стартапы с
|
|
|
-1997 года. У меня есть степень по экономике, но нет по CS. На данные момент у меня очень успешная карьера, но я хочу работать
|
|
|
+1997 года. У меня есть степень по экономике, но нет по CS. На данный момент у меня очень успешная карьера, но я хочу работать
|
|
|
в Google. Я хочу работать с большими системами и понять принципы их работы, изучить эффективность алгоритмов и различные
|
|
|
структуры данных, узнать, как работают низкоуровневые языки программирования. Если ты не знаешь что-то из перечисленного,
|
|
|
Google не возьмёт тебя на работу.
|
|
@@ -254,7 +254,7 @@ Google не возьмёт тебя на работу.
|
|
|
прежде чем получите к ним доступ. Курсы на Lynda.com платные.
|
|
|
|
|
|
Я был бы вам благодарен за помощь в добавлении бесплатных, всегда доступных публичных ресурсов, таких
|
|
|
- как видео с YouTube сопровождающих онлайн курсы. Мне нравяться использовать университетские лекции.
|
|
|
+ как видео с YouTube сопровождающих онлайн курсы. Мне нравится использовать университетские лекции.
|
|
|
|
|
|
|
|
|
## Процесс собеседования & Основное в подготовке к интервью
|
|
@@ -275,11 +275,11 @@ Google не возьмёт тебя на работу.
|
|
|
|
|
|
- [ ] Подготовительные курсы:
|
|
|
- [ ] [Собеседование инженера-программиста (платный курс)](https://www.udemy.com/software-engineer-interview-unleashed):
|
|
|
- - Как самостоятельно подготовиться r собеседованию на позицию инженера-программиста от бывшего сотрудника Google
|
|
|
+ - Как самостоятельно подготовиться к собеседованию на позицию инженера-программиста от бывшего сотрудника Google
|
|
|
|
|
|
- [ ] Дополнительно (это не рекомендация Google, а моя собственная):
|
|
|
- [ ] [ABC: Программируй всегда](https://medium.com/always-be-coding/abc-always-be-coding-d5f8051afce2#.4heg8zvm4)
|
|
|
- - [ ] [4 шага в Google без образованияв CS](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx)
|
|
|
+ - [ ] [4 шага к Google без образования в CS](https://medium.com/always-be-coding/four-steps-to-google-without-a-degree-8f381aa6bd5e#.asalo1vfx)
|
|
|
- [ ] [Кодирование на доске](https://medium.com/@dpup/whiteboarding-4df873dbba2e#.hf6jn45g1)
|
|
|
- [ ] [Что думает Google о найме, управлении и культуре](http://www.kpcb.com/blog/lessons-learned-how-google-thinks-about-hiring-management-and-culture)
|
|
|
- [ ] [Эффективное кодирование на доске в процессе собеседования](http://www.coderust.com/blog/2014/04/10/effective-whiteboarding-during-programming-interviews/)
|
|
@@ -315,7 +315,7 @@ Google не возьмёт тебя на работу.
|
|
|
|
|
|
[Ресурсы по языкам программирования вы можете найти тут](../programming-language-resources.md)
|
|
|
|
|
|
-Вы найдете кое-что по С, С++ и Python ниже, потому-что я еще в процессе обучения.
|
|
|
+Вы найдете кое-что по С, С++ и Python ниже, потому что я еще в процессе обучения.
|
|
|
|
|
|
## Список книг
|
|
|
|
|
@@ -323,7 +323,7 @@ Google не возьмёт тебя на работу.
|
|
|
|
|
|
### Подготовка к собеседованию
|
|
|
|
|
|
-- [ ] [Собеседование по программированию в подробнастях: Секреты получения твоей следующей работы, 2-е издание](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
|
|
|
+- [ ] [Собеседование по программированию в подробностях: Секреты получения твоей следующей работы, 2-е издание](http://www.wiley.com/WileyCDA/WileyTitle/productCd-047012167X.html)
|
|
|
- ответы на C++ и Java
|
|
|
- рекомендации Google по обучению кандидатов
|
|
|
- это отличная разминка перед подробным разбором собеседования по программированию
|
|
@@ -346,11 +346,11 @@ Google не возьмёт тебя на работу.
|
|
|
|
|
|
- [ ] [Писать отличный код: Том 1: Понимание компьютера](https://www.amazon.com/Write-Great-Code-Understanding-Machine/dp/1593270038)
|
|
|
- Книга была опубликована в 2004 и отчасти она устарела, но благодаря ей вы быстро поймете как устроены компьютеры.
|
|
|
- - Автор придумал HLA, поэтому скептически отнеситесь к примерам и упоминаниям HLA. Широко не используется, но содержит ряд примеров, демострирующих assembler.
|
|
|
+ - Автор придумал HLA, поэтому скептически отнеситесь к примерам и упоминаниям HLA. Широко не используется, но содержит ряд примеров, демонстрирующих assembler.
|
|
|
- Чтение следующих глав не займет много времени и даст хорошую основу:
|
|
|
- Глава 2 - Представление в числовой форме
|
|
|
- Глава 3 - Двоичная арифметика и битовые операции
|
|
|
- - Глава 4 - Представление числа с плавующей запятой
|
|
|
+ - Глава 4 - Представление числа с плавающей точкой
|
|
|
- Глава 5 - Представление символа
|
|
|
- Глава 6 - Организация памяти и доступа
|
|
|
- Глава 7 - Составные типы данных и объекты в памяти
|
|
@@ -358,7 +358,7 @@ Google не возьмёт тебя на работу.
|
|
|
- Глава 10 - Набор инструкций
|
|
|
- Глава 11 - Архитектура и организация памяти
|
|
|
|
|
|
-Если вы рапологаете свободным временем (я хочу купить эту книгу):
|
|
|
+Если вы располагаете свободным временем (я хочу купить эту книгу):
|
|
|
|
|
|
- [ ] [Архитектура компьютера, 5-е издание: Количественный подход](https://www.amazon.com/dp/012383872X/)
|
|
|
|
|
@@ -378,7 +378,7 @@ Google не возьмёт тебя на работу.
|
|
|
- [ ] [Алгоритмы на C++, Части 1-4: Основы, Структуры данных, Сортировка, Поиск](https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Structure/dp/0201350882/)
|
|
|
- [ ] [Алгоритмы на C++ Часть 5: Алгоритмы графов](https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/0201361183/)
|
|
|
|
|
|
-Если вы можете порекоммендовать литературу по C++, которая лучше, сообщите мне об этом. Я ищу лучшие книги.
|
|
|
+Если вы можете порекомендовать литературу по C++, которая лучше, сообщите мне об этом. Я ищу лучшие книги.
|
|
|
|
|
|
### Java
|
|
|
|
|
@@ -417,12 +417,12 @@ Google не возьмёт тебя на работу.
|
|
|
- автор описывает реальный опыт решения задач как академических, так и промышленных
|
|
|
- примеры кода написаны на C
|
|
|
- недостатки:
|
|
|
- - местами изложение может быть не очевидным и не понятным как в CLRS (Cormen, Leiserson, Rivest, Stein), некоторые темы лучше описаны в CLRS
|
|
|
+ - местами изложение может быть неочевидным и непонятным как в CLRS (Cormen, Leiserson, Rivest, Stein), некоторые темы лучше описаны в CLRS
|
|
|
- главы 7, 8, 9 сложно понять, некоторые вещи плохо разъяснены или требуют больших знаний чем есть у меня
|
|
|
- - не поймите меня не правильно: Мне нравиться Skiena, ее стиль и манера изложения, но я не могу стать физически Stony Brook.
|
|
|
+ - не поймите меня неправильно: Мне нравится Skiena, его стиль и манера изложения, но я не могу стать физически Stony Brook.
|
|
|
- каталог алгоритмов:
|
|
|
- это реальная причина, почему следует купить эту книгу.
|
|
|
- - о том как дойти до этой части. Обновлю, когда изучу этот раздел.
|
|
|
+ - о том, как дойти до этой части. Обновлю, когда изучу этот раздел.
|
|
|
- Цитата Йеги: "Больше чем какая-либо другая книга, эта помогла мне понять насколько банальны задачи на графы - они должны
|
|
|
быть в инструментарии каждого программиста. Книга так же включает в себя разбор базовых структур данных и алгоритмов сортировки,
|
|
|
что является приятным бонусом. Но важнейшей частью стала вторая часть книги, которая написана как энциклопедия, описывающая большое
|
|
@@ -465,7 +465,7 @@ Google не возьмёт тебя на работу.
|
|
|
|
|
|
Прочитайте пожалуйста эту статью, что бы не совершать моих ошибок:
|
|
|
|
|
|
-[Как сохранить знания в CS](https://googleyasheck.com/retaining-computer-science-knowledge/)
|
|
|
+[Как сохранить знания в CS](https://startupnextdoor.com/retaining-computer-science-knowledge/)
|
|
|
|
|
|
### 2. Используйте карточки-напоминания
|
|
|
|
|
@@ -477,7 +477,7 @@ Google не возьмёт тебя на работу.
|
|
|
Сделай свой собственный бесплатно:
|
|
|
|
|
|
- [Репозиторий сайта Flashcards](https://github.com/jwasham/computer-science-flash-cards)
|
|
|
-- [Моя база данных с карточками](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Имейте ввиду, я зделал больше чем требуется в Google, описав все начиная с assembler и заканчивая Python с машиным обучением и статистикой.
|
|
|
+- [Моя база данных с карточками](https://github.com/jwasham/computer-science-flash-cards/blob/master/cards-jwasham.db): Имейте в виду, я сделал больше чем требуется в Google, описав все начиная с assembler и заканчивая Python с машиным обучением и статистикой.
|
|
|
|
|
|
**Заметка о карточках:** в первый раз вы сразу вспомните ответ, но не помечайте эту карточку как изученную. Нужно просмотреть
|
|
|
много раз карточку и ответить правильно прежде чем вы действительно ее запомните. Повторение позволяет мозгу надолго
|
|
@@ -541,10 +541,10 @@ Google не возьмёт тебя на работу.
|
|
|
## Необходимые знания
|
|
|
|
|
|
- [ ] **Изучайте C**
|
|
|
- - С используется везде. Вы встретите примеры в книгах, лекциях, видео, везде, пока вы будите учиться.
|
|
|
+ - С используется везде. Вы встретите примеры в книгах, лекциях, видео, везде, пока вы будете учиться.
|
|
|
- [ ] [Язык программирования С, Vol 2](https://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628)
|
|
|
- - Это небольшая книга, но после ее прочтения вы получите необходимые знания по С и если будите практиковать,
|
|
|
- то достаточно быстро его освоите. Понимание С поможет вам понять как программы и память работают.
|
|
|
+ - Это небольшая книга, но после ее прочтения вы получите необходимые знания по С и если будете практиковать,
|
|
|
+ то достаточно быстро его освоите. Понимание С поможет вам понять как работают программы и память.
|
|
|
- [ответы на вопросы](https://github.com/lekkas/c-algorithms)
|
|
|
|
|
|
- [ ] **Как компьютеры выполняют программу:**
|
|
@@ -599,9 +599,9 @@ Google не возьмёт тебя на работу.
|
|
|
- [ ] insert(index, item) - вставка элемента по индексу, сдвигает значение по индексу и следующие за ним элементы вправо
|
|
|
- [ ] prepend(item) - может вставить элемент выше индекса 0
|
|
|
- [ ] pop() - удалить последний элемент, вернуть значение
|
|
|
- - [ ] delete(index) - удаляет элемент по индексу, сдвигает все следующие за ним элементы в лево
|
|
|
+ - [ ] delete(index) - удаляет элемент по индексу, сдвигает все следующие за ним элементы влево
|
|
|
- [ ] remove(item) - ищет элементы по значению и удаляет их, даже если их несколько
|
|
|
- - [ ] find(item) - ищет элемент по значению и возвращает индекс первого найденного элемента, возвращает -1 если ничего не найденно
|
|
|
+ - [ ] find(item) - ищет элемент по значению и возвращает индекс первого найденного элемента, возвращает -1 если ничего не найдено
|
|
|
- [ ] resize(new_capacity) // private function
|
|
|
- когда массив полностью заполнен, увеличивает его размер вдвое
|
|
|
- при добавлении элемента, если размер массива 1/4 от общего размера, увеличиваем на половину
|
|
@@ -622,10 +622,10 @@ Google не возьмёт тебя на работу.
|
|
|
- [Core Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/rjBs9/core-linked-lists-vs-arrays)
|
|
|
- [In The Real World Linked Lists Vs Arrays (video)](https://www.coursera.org/learn/data-structures-optimizing-performance/lecture/QUaUd/in-the-real-world-lists-vs-arrays)
|
|
|
- [ ] [why you should avoid linked lists (video)](https://www.youtube.com/watch?v=YQs6IC-vgmo)
|
|
|
- - [ ] Ага, попался: тебе нужны знания указетелей на указатели:
|
|
|
+ - [ ] Ага, попался: тебе нужны знания указателей на указатели:
|
|
|
(для тех случаев, когда ты передаешь указатель функции, которая может менять адрес, куда указывает указатель)
|
|
|
Это страница просто для того, чтобы понять указатели на указатели. Читабельность и обслуживаемость страдает
|
|
|
- из-за искусность.
|
|
|
+ из-за искусности.
|
|
|
- [Указатели на указатели](https://www.eskimo.com/~scs/cclass/int/sx8.html)
|
|
|
- [ ] воплотить в жизнь (я сделал это с помощью указателя на хвост и без):
|
|
|
- [ ] size() - возвращает количество элементов в листе
|
|
@@ -661,13 +661,13 @@ Google не возьмёт тебя на работу.
|
|
|
- enqueue(value) - добавляет элемент в конец очереди
|
|
|
- dequeue() - возвращает значение и удаляет из очереди последний добавленный элемент(front)
|
|
|
- empty()
|
|
|
- - [ ] Реализация с приминением массива фиксированного размера:
|
|
|
+ - [ ] Реализация с применением массива фиксированного размера:
|
|
|
- enqueue(value) - добавляет элемент в конец очереди
|
|
|
- dequeue() - возвращает значение и удаляет из очереди последний добавленный элемент
|
|
|
- empty()
|
|
|
- full()
|
|
|
- [ ] Затраты:
|
|
|
- - плохая реализация с приминением связанного списка когда элемент добавляется в начало очереди и удаляется с конца очереди за O(n),
|
|
|
+ - плохая реализация с применением связанного списка когда элемент добавляется в начало очереди и удаляется с конца очереди за O(n),
|
|
|
операция dequeue в таком случае будет требовать каждый раз обхода всего списка
|
|
|
- enqueue: O(1) (amortized, связанный список и массив [probing])
|
|
|
- dequeue: O(1) (связанный список и массив)
|
|
@@ -694,7 +694,7 @@ Google не возьмёт тебя на работу.
|
|
|
- [Instant Uploads And Storage Optimization In Dropbox (video)](https://www.coursera.org/learn/data-structures/lecture/DvaIb/instant-uploads-and-storage-optimization-in-dropbox)
|
|
|
- [Distributed Hash Tables (video)](https://www.coursera.org/learn/data-structures/lecture/tvH8H/distributed-hash-tables)
|
|
|
|
|
|
- - [ ] реализация с помощью массива и приминением linear probing
|
|
|
+ - [ ] реализация с помощью массива и применением linear probing
|
|
|
- hash(k, m) - m размер хеш-таблицы
|
|
|
- add(key, value) - если ключ уже существует обновляем значение
|
|
|
- exists(key)
|
|
@@ -712,8 +712,8 @@ Google не возьмёт тебя на работу.
|
|
|
- бинарный поиск с использованием рекурсии
|
|
|
|
|
|
- ### Побитовые операции
|
|
|
- - [ ] [Bits cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - you should know many of the powers of 2 from (2^1 to 2^16 and 2^32)
|
|
|
- - [ ] Даст отличное понимание манипуляции битами с помощью: &, |, ^, ~, >>, <<
|
|
|
+ - [ ] [Bits cheat sheet](https://github.com/jwasham/google-interview-university/blob/master/extras/cheat%20sheets/bits-cheat-cheet.pdf) - ты должен знать сколько степеней двойки от (2^1 до 2^16 и 2^32)
|
|
|
+ - [ ] Даст отличное понимание манипуляций битами с помощью: &, |, ^, ~, >>, <<
|
|
|
- [ ] [words](https://en.wikipedia.org/wiki/Word_(computer_architecture))
|
|
|
- [ ] Хорошее введение:
|
|
|
[Bit Manipulation (video)](https://www.youtube.com/watch?v=7jkIUgLC29I)
|