Front-End Engineer Blog
4.99K subscribers
36 photos
101 links
Hi, my name is Evgenii Ray. I'm SWE at Meta. Here is my place for posting notes about UI, career and personal development

Welcome on board 🚀
Contact: @evgeniiray
Languages: English, Russian
Download Telegram
Обновил цель на smartprogress. Добавил туда следующие степы по подготовке и материал. Если у вас есть какой-либо полезный материал по темам, присылайте мне, добавим в док 👍

https://smartprogress.do/goal/374957/
День 57 - Графы и геморрой 🙈

Закончил работать над 7ой неделей курса по алгоритмам. Могу сказать, что данная неделя одна из самых сложных пока на курсе. Что проходим?

1. Undirected Graphs
2. Directed Graphs

Теория графов довольно обширная и алгоритмов целая гора. Как мне кажется, материала на курсе не хватает, пришлось брать дополнительно 👨‍🏫 . И так, материал, который я рекомендую для просмотра / прочтения:

Видео с канала гугл инжинера:

1. Введение в теорию графов https://www.youtube.com/watch?v=eQA-m22wjTQ&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P

2. Какие проблемы решают графы - https://www.youtube.com/watch?v=87X57ldq1ok&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=2

3. DFS - https://www.youtube.com/watch?v=7fujbpJ0LB4&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=3

4. BFS - https://www.youtube.com/watch?v=oDqjPvD54Ss&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=4

5. BFS on grid - https://www.youtube.com/watch?v=KiCBXu4P-2Y&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=5

Как подходить к теории на курсере?
Здесь лучший совет будет - имлементировать следующие вещи самостоятельно:

1. UndirectedGraph и DirectedGraph. Отличий на самом деле минимум. Разница только в том, что в первом варианте графа, вершины связаны в обе стороны всегда.

2. Обход в глубину DFS

3. Обход в ширину BFS

4. Топологическая сортировка

5. Connected and Strongly Connected Components

Не поленитесь и имлементируйте все.


————————————
Ассаймент 7ой недели
————————————
Тут нам предстоит написать свой WordNet, программа по поиску однородных слов.

Как начать? 🤔

1. Обязательно посмотреть в чек лист - https://www.cs.princeton.edu/courses/archive/spring19/cos226/assignments/wordnet/checklist.php . В нем содержится подсказки и частые вопросы по имплементации данного задания. Странно, что опять пришлось его искать самостоятельно. Курсере стоит добавить его в ссылки на ресурсы.

2. Дополнительные разъяснения по заданию, ссылка из чеклиста. Лично мне очень помогли, так как после прочтения задания на сайте, я не понимал, что мне надо в итоге сделать. https://www.youtube.com/watch?v=EtPfujaKHwc&feature=youtu.be

3. Советую начать с парсинга файлов с hypernyms и synsets. Используйте необходимые структуры для хранения. Имлементировать ничего не нужно, используйте пакет java.lang и algs4 либу

Cпойлер: HashMap и Digraph

4. Для определения, зациклен ли граф - можно использовать класс DirectedGraphCycle

5. Далее переходим к SAP - Shortest Ancestor Path. Тут главное не за оверинженирить. Существует популярная на лит коде проблема Least Common Ancestors. Которая фактически повторяет то, что пытаемся сделать мы. Есть несколько решений - динамика - одно из них. Не надо его применять. Мы ограничены структурой данных пакета и от нас ожидают наиболее простое решение - наивное 😂

6. c Outcast сложностей возникнуть не должно, это самая простая часть задания.

Лично для меня, теория графов всегда была слабым местом, а задачи на графы довольно часто встречаются на литкоде, поэтому то, что мы прошли на неделе, недостаточно для закрепления материала. Я возьму дополнительно неделю, чтобы разобрать основные задачи на графах.

Next Steps - Leecode ❤️

Разминка:
1. https://leetcode.com/problems/find-the-town-judge/

Основная часть:

1. Topological Sort - https://leetcode.com/problems/course-schedule-ii/

2. Cycle Detection - https://leetcode.com/problems/course-schedule/

3. Check Graph is Bipartite - https://leetcode.com/problems/is-graph-bipartite/

4. Escape Dungeon Problem - https://leetcode.com/problems/escape-a-large-maze/

5. DFS - https://leetcode.com/problems/find-eventual-safe-states/

Идем дальше 💪
День 60 - Решаем литкод 🤔

В связи со временным переездом в другой город ✈️, смог приступить к задачам только сегодня. Решил 4 задачки на графы.

Разобью задачи по типу проблемы:

Немного размяться:

997.
Find the Town Judge

Простенькая задачка, чтобы по-упражняться на графах. Комментарии не требуются 😄

Топологическая сортировка и поиск цикла в графе.

1.
207 - Course Schedule
2. 210 - Course Schedule II

Обе задачи сводятся к тому, чтобы топологически отсортировать граф. В первой, просят определить можно ли это сделать, во второй вывести отсортированный массив. Тут надо просто один раз изучить алгоритм топологический сортировки, я взял Kahn's Algorithm, разобрал его и реализовал обе задачи. Алгоритм очень простой 👍

Рисуете все на листочке или доске, проделываете каждый шаг. Так хорошо запоминается и укладывается все в голове.

Определение двудольного графа ( Bipartite Graph )

785.
Is Graph is bipartite

Интересная задачка. Тут просто нужно разобраться что такое Bipartite Graph и как он выглядит.

Поможет: https://www.geeksforgeeks.org/bipartite-graph/

У меня ушло примерно по 30-40 минут на каждую задачу. Но сейчас, скорость решения не преследую, главное закрепить теоритический материал.

Что дальше ? 🙈
1.
https://leetcode.com/problems/escape-a-large-maze/
2. https://leetcode.com/problems/find-eventual-safe-states/

Всем stay home и не болеть, сейчас это актуально, как никогда 💪
День 62 - Закончил решать задачки на графы ☄️

Сегодня решил 2 задачки:

1036 - Escape a large maze ( hard 🤔 )
Задача хоть и с пометкой - hard, но не является сложный. Перед нами Dungeon Problem aka Maze. - матрица миллион на миллион. Нам нужно понять, можно ли найти выход. Основная сложность, оптимизировать, чтобы не искать путь полностью и выбрать правильные эвристику для оценки

Если сложно, помогут вот эти ссылки. Там нет решения задачи, скорее полезный материал👇:
1. https://www.youtube.com/watch?v=KiCBXu4P-2Y&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=5 - BFS on grid
2. https://cs.stanford.edu/people/abisee/gs.pdf - Презентация стенфорда рассматривающие основные алгоритмы поиска путей

Ну и на крайний случай, ссылка на мое решение на JS с комментами:
https://leetcode.com/problems/escape-a-large-maze/discuss/561992/Javascript-BFS-solution-with-explanation

802. Find Eventual Safe States

Тут отрабатывается стандартный DFS. Задача показалась не очень сложной. Ссылка на решение:
https://leetcode.com/problems/find-eventual-safe-states/discuss/562069/Easy-to-understand-Javascript-solution

В общем, после решение набора задачек на графы, чувствую себя на много увереннее в теме. Готов приступать к 8 Неделе курса по алгоритмам 💪

Следующие шаги:
1. Начать 8 неделю курса
2. Обновить материалы на smartprogress

Всем хороших выходных 👍
День 67 - Конец теории 8ой недели - Часть 1 🤔

Закончил изучение теории 8ой недели - Shortest Paths, Minimum Spanning Tree. Неделя очень насыщенная и интересная в плане теории.

Разберем каждую тему по порядку👇

Minimum Spanning Tree
Тут Сенджвик дает нам intro в Greedy 👨‍🏫 алгоритмы, которое мне показалось совсем недостаточным чтобы понять основную концепцию.

Отличное пояснение дает Abdul Bari вот здесь👇
https://www.youtube.com/watch?v=ARvQcqJ_-NY&list=PLDN4rrl48XKpZkf03iYFl-O29szjTrs_O&index=40&t=0s

Далее разбираются основные алгоритмы для нахождения Minimum Spanning Tree - далее MST.

Kruskal's Algorithm
На практике, довольно простой алгоритм. Советую имлементить его в ходе прохождения курса.

Чтобы максимально эффективно разобраться с ним, нам понадобится👇

1. Знание структуры Union Find прямиком из 1ой недели - используется, для того того чтобы эффективно понять, что вершина уже в MST
2. Знание приоритетной очереди - Priority Queue из 4ой недели - Сортирует ребра по весу
3. Имлементация взвешенного графа. Единственное отличие от обычного - ребро представляется в виде объект Edge(v,w,weight).
4. Сам алгоритм - Сенджвик довольно понятно его объясняет.

Полезный материал, который поможет👇
https://www.youtube.com/watch?v=4ZlRH0eK-qQ&t=700s

Prims's Algorithm - lazy version
Отличается от Крускала тем, что тут мы начинаем с 0 вершины и идем по графу по соседним вершинам, кладя ребра в приоритетную очередь. Требования к знаниям такие же как в случае с Крускалом. Имеет один drawback, для того, чтоы обновить вес ребра, приходится класть в MinPQ дубликат. Фиксится с использованием eager версии алгоритма.

Полезный материал👇
1. Prim's explanation https://www.youtube.com/watch?v=jsmMtJpPnhU&t=193s
2. Abdul Bari example https://www.youtube.com/watch?v=4ZlRH0eK-qQ&t=700s

Prims's Algorithm - eager version 😳
А вот тут я немного приуныл. Алгоритм несложный, основное отличие, что мы избегаем хранения дублируемых ребер, которые кладем в приоритетную очередь, путем использования IndexPriorityQueue 🤯. Это небольшое расширение над обычной PQ, которая позволяет нам эффективно изменять приоритет элементов, которые мы храним в ней.

Странно, что Сенджвик не разбирает это на 4 неделе. Для того, чтобы полностью понять, как все работает, советую самостоятельно ее заимплементить. Потратьте на это время, очень поможет!

Материал для погружения👇
1. Index PQ https://www.youtube.com/watch?v=DT8xZ0Uf8wo
2. Prims Eager version - https://www.youtube.com/watch?v=xq3ABa-px_g

Конец 1 части 👨‍🏫
День 68 - Конец теории 8ой недели - Часть 2

Краткий обзор второй части теории недели 🤔 Данная часть знакомит нас с основными алгоритмами поиска кратчайших путей в графе:

1. Алгоритм Дейкстра
2. Алгоритм для Edge Weighted Acyclic Graph на основе топологической сортировки
3. Алгоритм Беллмана-Форда

Сами алгоритмы несложные и легко реализуются, и в целом похожи немного друг на друга. Ниже приложил полезные материалы по каждому из них:

Дейкстра:
1. Abdul Bari - https://www.youtube.com/watch?v=XB4MIexjvY0&list=PLDN4rrl48XKpZkf03iYFl-O29szjTrs_O&index=45
2. William Fillset https://www.youtube.com/watch?v=pSqmAO-m7Lk&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=15&t=760s

Здесь нам снова понадобиться IndexMinPQ, поэтому советую, если не изучили, посмотреть материал на эту ДС

DAG:
1. William Fillset - https://www.youtube.com/watch?v=TXkDpqjDMHA&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=13

Беллман-Форд
1. William Fillset - https://www.youtube.com/watch?v=lyw4FaxrwHg&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=16

Советую также уделить особое внимание алгоритму Дейкстра, так как он необходим для выполнения задания 8ой недели 👨‍🏫

Ниже прикладываю небольшое саммари по использованию каждого из алгоритмов. Слайд из презентации Сенджвика:
День 68 - Конец ассаймента 8ой недели ☄️

Завершил задание 8ой недели - Seam Carver 🎉 Задача решает проблему content-aware image resizing - изменение размера картинки с сохранинием наиболее важных частей контента, путем расчета "энергии" пикселя

Мне понравилась задача, особенно зная, что данный алгоритм применяется внутри современных графический редакторов. и самое главное, она решается с помощь графов и алгоритма поиска кратчайшего пути Дейкстра 👨‍🏫 На первый взгляд, задача кажется сложной, но достаточно внимательно вчитаться и начать имлементить простые методы - станет легче 😊

Как начать и не сдаться? 💪

1. Повторяем алгоритм Дейкстра для поиска SP

2. Имлементим первые методы SeamCarver
- getPicture() - возвращаем копию картинки
- width() - возвращаем ширину картинки
- height() - возвращаем высоту картинки
- energy(x, y) - расчитываем по формуле из задания энергию пикселя
- SeamCarver конструктор, в двумерный массив, записываем энергию каждого пикселя

3. Тестим расчет энергии через утилитный класс ShowEnergy, который идет в комплект к заданию вместе с файлами для тестов

4. Далее переходим к самому сложному:
- findVerticalSeam() - seam - это полоса пикселей, которую мы можем "вырезать" из картинки. По-сути это поиск кратчайшего пути, где весом является энергия пикселя. Ищем этот кратчайший путь, записываем номера колонок и возвращаем.

- transponse() - просто переворот картинки, для того, чтобы не имлементить findHorizontalSeam()
- findHorizontalSeam() - Делаем transpose() картинки и вызываем findVerticalSeam()

На этом основные методы закончились, удаление removeHorSeam & removeVerSeam, не представляют сложности, по-сути это просто копирование массивов исключая наши horizontal & vertical seam.

Следующие шаги:
1. Обновить материалы на smart-progress 👨‍🏫
2. Решить: https://leetcode.com/problems/network-delay-time/
3. Решить: https://leetcode.com/problems/cheapest-flights-within-k-stops/
4. Начать 9ую неделю курса ☄️

Идем дальше 💪
День 70 - Начало 9 недели

Закончил решать задачки:
1. https://leetcode.com/problems/network-delay-time/
2. https://leetcode.com/problems/cheapest-flights-within-k-stops/

Обе задачи являются неплохой практикой по практике алгоритмов Shortest Paths в графе. Нужно выбрать алгоритм, который вам нравится 🤔

1. Дейкстра
2. DFS
3. Беллман-Форд

Я выбрал Bellman-Ford, так как он не требует использования Priority Queue для решение задачи. В JS нет стандартной имлементации этой ДС 😔. Поэтому, если вы на джаве или шарпах, то Дейкстра для вас не проблема.

Min cut - Max Flow

Также, начал теорию 9ой недели. Как я понимаю, это заключительная часть по графам на курсе 🎉

Следующие шаги:
1. Закончить 1 тему недели Min cut - Max Flow
2. Выполнить assignment Baseball Elimination

Идем дальше 💪
День 74 - Конец ассаймента 9ой недели 🎉

Закончил изучать первую часть теории - Network Flow. Разобьем все по порядку:

Теория
Мне было немного тяжело воспринимать теоритический материал на этой неделе. Пришлось пересматривать по 5-6 раз видосы 🤯, чтобы разобраться, как же считается этот граф и флоу. В последний день, уже снились сны, что я на листке рисую граф и поток 😂

И так, полезные видео, чтобы влиться в топик:
1. Разбор алгоритма Форда - Фалкерсона https://www.youtube.com/watch?v=LdOnanfc5TM&list=PLDV1Zeh2NRsDGO4--qE8yH72HFL1Km93P&index=34&t=0s
2. Max-Flow / Min-Cut - https://www.youtube.com/watch?v=oHy3ddI9X3o

Понять основные моменты и термины:
1. Augmenting Path - Если простыми словами, путь от источника (source) до стока (sink)
2. Bottleneck - ребро с наименьшей пропускной способностью (capacity)
3. Flow Augmenting - Обновление значений потока на пути в augmenting path
4. Residual Graph & Residual Edge - Обратный граф и ребро.

Все термины отлично разъясняются в видео выше 👨‍🏫. Сам алгоритм несложный в имлементации, но технические моменты обновления ребер графа придется разобрать на листочке. Рисуете сначала алгоритм с нуля вместе с обходом графа на доске / листе бумаги, обновляем capacity ребер, только так можно победить 😂

Доказательства 🤯
Я не стал погружаться в доказательство, почему алгоритм Форда-Фалкерсона находит Min-Cut и Max-Flow. Но если сильно хочется, советую посмотреть раздел учебника - Section 6.4 (pp. 886–902) and 5.1 in Algorithms, 4th edition. Там все довольно подробно объясняется 👨‍🏫
1
Baseball Elimination Assignment 👨‍🏫

ps: Следующую часть лучше прочитать, только когда будете делать задание, иначе без контекста не сложно понять :)

У нас есть таблица бейсбольный матчей. Нам нужно понять, какие команды точно не попадут в победители, как бы не сыграли другие команды.

Как выполнить задание и не сдаться? 💪
Читаем презентацию: https://www.cs.princeton.edu/~wayne/papers/baseball_talk.pdf

1. Начинаем с самого простого, считываем таблицу из текстового файла и записываем в нужные структуры:

- массив с количеством побед win[teams.length]
- массив с количеством проигрышей losses[teams.length]
- массив с оставшимися играми rem[teams.length]
- массив с количеством матчей команд с другом другом games[teams.length][teams.length]
- массив команд teams[teams.length]
- мапа для конвертации индекса команды в название Map<int,string>

Для того, чтобы построить FlowNetwork, чтобы определить вылетит ли команда, нам нужно:

- Все матчи где не участвует эта команда - пилим отдельный метод на это и возвращаем все матчи, других команд
- Размер сети - Количество команда + Количество матчей + sink node + source node

2. Теперь у нас есть все, чтобы построить сеть:
- Коннектим с помощью FlowEdge sink node c нодами команды и выставляем им capacity = w[target] + r[target] - w[current], где target команда, которую проверяем на вылет, a current - текущая.

Зачем это делаем? Так мы ограничиваем количество побед, которых команда может получить. Далее поясню.

- Соединяем матчи с командами, тут capacity не ограничен, ставим Infinity
- Соединяем source node c матчами, capacity будет равен количеству оставшихся игр у команда games[team1][team2]

Я долго не мог уловить момент с распределением capacity, пока хорошенько не вчитался в течении 2 дней 😂

Суть такова: если ребра из source node, во время работы алгоритма Фалкерсона, заполняются не полностью, это значит что ограничение, которое мы создали в соединении команд и sink node нарушается, если бы они наполнились полностью. А это значит, что команда не может победить так как количество игр, распределенное между командами будет больше, чем количество возможных побед искомой команды.

В целом, это базовые советы, которые решают 90% задачи.

Следующие шаг: Закончить теорию по Radix Sort

#week_9 #assiignment
👍2
День 76 - Конец 9 недели 🎉

Закончил изучать теорию по Radix Sort и Key-Counting sort. Мне данная часть курса не особо понравилась, уж слишком сухой материал у Сенджвика, как мне кажется. Зато теперь вы точно будете знать, как отсортировать массив миллиона интов за O(N) 😂

Я посмотрел вот эти видео, чтобы полностью разобраться в топике:
1. https://www.youtube.com/watch?v=1mh2vilbZMg
2. https://www.youtube.com/watch?v=XiuSW_mEn7g

А вот забавное видео на эту тему: https://www.youtube.com/watch?v=k4RRi_ntQc8

Следующие шаги:
1. Начинаю 10 неделю - Tries & Substring search, как мне кажется, неделя будет насыщенной и интересной 💪
2. Обновить Smart Progress

Идем дальше ☄️
День 79 - Конец 10 недели 😳

Получилось закончить неделю в рекордные 2 дня. По ощущениям, теория на этой недели оказалась довольно несложной. Разберем все по порядку:

Tries
Преффиксные деревья
или "бор", в русской литературе. Данная тема разбирает одну из имплементаций Symbol Tables. Лично я, никогда не использовал Tries на практике, но был приятно удивлен, на сколько это полезная структура данных при работе со строками. Применение trie, довольно широкое

- Синтаксические проверки слов
- Знаменитый Т9 - (о да, он был написан с использованием Trie
- Автодополнения в строке поиска
- Маппинг REST эндпоинтов в серверных фреймворках

Все это прекрасно дополняется сравнением с хэш таблицей. Я не использовал дополнительные материалы на этой неделе. Так как объем теории вполне sufficient для понимания.

Для погружения, я бы рекомендовал сделать следующее:

1. Напишите интерфейс StringST с базовыми методами таблицы символов

2. Имлементируйте самостоятельно TrieST, тут вам очень поможет первый курс, так как рекурсивные методы практически идентичны секции с деревьями

3. Для обычного Trie, мы используем довольно много места, для каждого узла приходится создавать массив длинной R, где R количество уникальных символов алфавита (26 для английского например), для этого дядюшка Сенджвик придумал структуру Ternary Trie 👨‍🏫, у которой нет такого недостатка. Имлементим ее тоже.

👉 Почему важно самостоятельно заимлементить это? 👈

В большинстве языков, нету стандартной имплементации Trie, а вот задачи на собесе дать по ним могут :troll-face:
К тому же, это знание вам понадобится, чтобы выполнить задание недели 🤔

Substring Search 👨‍🏫
Тут скорее не на столько практичная, сколько академическая и для личного кругозора теория, о том как организован современный поиск по строкам. В большинстве случаев, данные вещи уже есть в практически любом языке программирования. Как мне кажется, сильно заострять внимание на этом не стоит, но знать полезно.

Assignment - Boggle

Задание представляет собой игру, квадрат 4х4, с буквами английского алфавита, нам надо собрать все возможные слова. Задание является отличной практикой Trie и как мне показалось, является одним из самых простых за оба курса.

Как победить? 👌
1. Задание предполагает, что мы считываем словарь с английскими словами, который потом будет использовать для поиска нужного слова. Первое, что мы делаем - имлементим BoggleTrie.

Базовые методы:
- get
- put
- contains

Тут смело возвращаемся к теории недели и пилим ДС. Тут есть одна особенность. R = { буквы англ алфафита } = 26. Но в игре используются большие буквы, а это значит, что Индекс первой заглавной А = 65 (из таблицы ASCI), нам надо привести индекс к обычному виду 0 .. 26, для этого используем OFFSET = 65

2. После имлементации trie, считываем наш словарь и кладем все слова в ДС

3. Все слова есть, теперь надо организовать поиск. Как это сделать? DFS 👨‍🏫. BoggleBoard, это квадрат 4х4, а значит, нам надо для каждой клетки выполнить DFS. Двигаться можем в 8 сторон ( юг, запад, восток, север + диагонали). Если встречаем слово из словаря, кидаем его в результат.

И в целом, базовая часть задания закончилась. Далее придется сделать оптимизации, чтобы попасть в тайминги тестов, но тут уже ничего сложного 💪

Следующие шаги:
1. Идем вперед графика - Week 11 - RegExp, Data Compression. На этой недели нас ждет последнее задание на курсе 🎉
2. Обновить smart progress

Не болеем 💪
Небольшое сравнение имлементаций ST
День 81 - Конец 11 и 12 недели - Финал Курса 🎉

Сегодня я полностью закончил курс Algorithms and Data Structures from Princeton.

Я не ожидал, что последние 2 недели получится закрыть за 4 дня, учитывая, что на предыдущих неделях, я еле укладывался в неделю 🧐. На самом деле, это не от того, что я очень умный :troll: , просто 11,12 неделя преподносятся на курсе, как более-менее опциональные , и зная это заранее, я бы не стал на них тратить время. Курс вообще считается законченным, если закрыть 11ую неделю. И так по порядку.

Week 11 - Regular Expressions and Data Compressions 💩

В первой части разбирается применение регулярок. Во второй части, алгоритм сжатия бинарных данных с заданием написать свой мини gzip. Как мне кажется, тратить на эту неделю время, не стоит. Съэкномьте ваши силы и потратьте их на литкод 💪

Week 12 - Reductions, NP problems 👩‍💻

Опциональная неделя, которая в целом мне показалась полезна. Дается неплохой разбор и определение NP hard и NP complete проблем и много сухой теории. Если хотите сразу и по-существу и разобрать все эти термины:

- P vs NP - Determenistic | Non-Determenistic problem
- Satisfiability
- Reduction
- NP-Hard vs NP-Complete

товарищ Абдул за 32 минуты расскажет и пояснит все: вот тут

Лично я когда читал описание некоторых задач, не понимал, что означает, что проблема - NP Hard или NP Complete. После этого видео, все встает на свои места. Обязательно рекомендую к просмотру 👍

Я бы хотел написать больше, но это весь правдивый итог по последним 2ум неделям 🧐

Чуть позже, напишу отзыв о двух курсах в целом и сделаю одним постом все ссылки на посты по неделям.

Следующие шаги:
1. Сделать пост-дэшбоард со всеми ссылками
2. Обновить материалы на smart-progress, пройдусь по всем постам, соберу инфу в кучу
3. Начать планирование следующей итерации подготовки

Спасибо всем, кто писал и проходил курс вместе со мной 💪 Было очень приятно видеть комментарии от Вас ❤️

Ближайшие 2 месяца я планирую сфокусироваться на литкоде и решении алгоритмических задач. Все полезные материалы и коментарии буду также выкладывать здесь и на smart-progress

Бомбим дальше 🔥
👍2
Общий отзыв по курсу Сенджвика 👨‍🏫

Решил небольшое саммари курса. И так, курс состоит из 2ух частей и по 6 недель каждая. Итого - 12 недель = 84 дня

Время за которое у меня получилось его пройти: 81 день, с учетом того, что я еще еще иногда решал литкод на темы недель.

Ну как курс?

Я не жалею ни секунды, потраченного времени на него. По-хорошему, это то, что должна давать универская подготовка (ха-ха). Даже если вы сеньор-помидор 🧔, будет полезно пройти его, я открыл для себя много новых вещей. Самое главное, нашел дыры в своей теоритической подготовке и залатал их. Могу только рекомендовать пройти его

Расписание, по корому я проходил курс:

1. 3-4 часа в будние дни, я решал задачи и изучал теорию ( половину курса я вставал утром, до основной работы, вторую половину, решил попробовать после работы).
2. 6 часов в выходные выполнял задания недели (assignments)

Советую заранее определится, до или после работы проводить подготовку. Лично для себя осознал, что утром моя эффективность выше 💪 и в конце рабочего дня, хочется только размять булки и спать.

Общие заметки:

1. На ассайменты может уходить больше, чем день, не сдавайтесь . Даже имея почти 5 лет коммерческого опыта, я сидел как школьник и не понимал, после прочтения инструкции по ассайменту

2. На неделях, где разбираются структуры данных, обязательно нужно имлементировать ее самому ( кроме исключений, в виде некоторых операций над Red Black Tree ). Только так придет полное понимание

3. Решайте 5-10 задач на литкоде на топик ДС, которую прошли. Поможет закрепить материал.

4. Использование дополнительных материалов в виде ютубчка и прочих сервисов - must - на курсе.

5. Мотивация в самом начале будет на максимуме, но постепенно, вы будете чувствовать, что становится лениво и тяжело. Это нормально :) Мне помогло в конце каждой недели заказывать набор сушей, дофамин в мозг никогда не помешает

Недели, которые, по моему мнению, можно пропустить 👎

1. Week 6 - Hash Tables, довольно поверхностно, лучше взять другой материал. Серия статей на хабре Структуры данных в картинках, полностью покрывает данную тему
2. Week 11,12, 11 неделя не супер practical для интервью, а 12ую, лучше заменить на видео с канала Абдула, съэкономите 2 часа жизни.

Сейчас чувствую себя, как выжатый лимон 😵. Решил дать себе 2-3 дня на отдых и планирование дальнейшей подготовки.

Пока в кратце план такой:
1. 1.5 - 2 месяца литкода, минимум 200-250 решеных задач
2. 1.5 месяца на фронтендовые топики + System Design, на этом этапе начну проходить мок интервью
3. Неделю на софт-скилную подготовку и тренировку с нативом
4. В конце июля начинать подаваться через реферралов.

Всем не болеть 😊
👍3