FAANG Master pinned «Какие темы наиболее часто спрашивают на собеседовании Java программиста? #java #собеседование #темы #interview Свою первую программу на Java я написал 18 лет назад еще в универе. С тех пор я 13 лет профессионально писал код на Java, провел десятки собеседований…»
Основные концепции и элементы, которые нужно знать для system design собеседований
#systemdesign
System Design Interview являются неотъемлемой частью собеседований программиста, особенно это важно для Senior, Architect, Staff, Principal позиций.
Я планирую разбирать примеры и перечисленные тут концепции в будущем.
Сейчас же приведу основные строительные кирпичики, которые позволят вам успешно проходить такого рода собеседования.
1) Модель Client-Server
2) Publish-Subscribe system
3) Latency and Throughput
4) Availability
5) Fault tolerance
6) Resilience
7) Maintainability
8) CAP theorem
9) TCP/IP, HTTP
10) DNS
11) CDN (Content Delivery Network)
12) Consistent Hashing
13) Leader Election
14) Load Balancers
15) Replication and sharding
16) Relational Data Bases
17) Key-value storages
18) Blob Stores
19) Rate limiting
20) Circuit Breakers
21) Retries
22) Polling and Streaming
23) Distributed Cashing
24) Distributed Messaging Queues
25) Proxies
26) Service Monitoring
27) Configuration
28) Map Reduce
29) Peer-to-Peer Networks
30) Distributed Logging
31) Sharded Counters
32) Distributed Task Scheduling
33) Sequencer
#systemdesign
System Design Interview являются неотъемлемой частью собеседований программиста, особенно это важно для Senior, Architect, Staff, Principal позиций.
Я планирую разбирать примеры и перечисленные тут концепции в будущем.
Сейчас же приведу основные строительные кирпичики, которые позволят вам успешно проходить такого рода собеседования.
1) Модель Client-Server
2) Publish-Subscribe system
3) Latency and Throughput
4) Availability
5) Fault tolerance
6) Resilience
7) Maintainability
8) CAP theorem
9) TCP/IP, HTTP
10) DNS
11) CDN (Content Delivery Network)
12) Consistent Hashing
13) Leader Election
14) Load Balancers
15) Replication and sharding
16) Relational Data Bases
17) Key-value storages
18) Blob Stores
19) Rate limiting
20) Circuit Breakers
21) Retries
22) Polling and Streaming
23) Distributed Cashing
24) Distributed Messaging Queues
25) Proxies
26) Service Monitoring
27) Configuration
28) Map Reduce
29) Peer-to-Peer Networks
30) Distributed Logging
31) Sharded Counters
32) Distributed Task Scheduling
33) Sequencer
❤14👍7
FAANG Master pinned «Основные концепции и элементы, которые нужно знать для system design собеседований #systemdesign System Design Interview являются неотъемлемой частью собеседований программиста, особенно это важно для Senior, Architect, Staff, Principal позиций. Я планирую…»
Вопрос с собеседования: опишите иерархию коллекций в Java.
#java #interview #собеседование #вопрос #collections #коллекции
Описал иерархию коллекций в этой статье (Map и thread safe коллекции опишу отдельно):
https://telegra.ph/Ierarhiya-kollekcij-v-Java-05-08
#java #interview #собеседование #вопрос #collections #коллекции
Описал иерархию коллекций в этой статье (Map и thread safe коллекции опишу отдельно):
https://telegra.ph/Ierarhiya-kollekcij-v-Java-05-08
Telegraph
Иерархия коллекций в Java
На собеседовании это вопрос может звучать по разному: 1) Какие коллекции в Java вы знаете? 2) Какая иерархия коллекций в Java? 3) Какие структуры данных в Java вы знаете? 4) Какие стандартные коллекции в Java вы знаете? Тут дано уточнить, что их не интересует…
👍14
Вопрос с собеседования: опишите иерархию коллекций в Java. Часть 2. Maps.
#java #interview #собеседование #вопрос #collections #коллекции
Продолжение ответа на вопрос про иерархию коллекций в Java. Иерархия Map в Java: https://telegra.ph/Ierarhiya-kollekcij-v-Java-chast-2-05-08
#java #interview #собеседование #вопрос #collections #коллекции
Продолжение ответа на вопрос про иерархию коллекций в Java. Иерархия Map в Java: https://telegra.ph/Ierarhiya-kollekcij-v-Java-chast-2-05-08
Telegraph
Иерархия коллекций в Java часть 2.
Продолжение статьи https://telegra.ph/Ierarhiya-kollekcij-v-Java-05-08 Тут я, кратко, опишу иерархию Map: 1) Map - рутовый интерфейс для key-value таблиц/словарей/hash таблиц. Содержит объявления методов: put(K v, V v), get(K k), containsKey(K k), containsValue(V…
👍9
Плюсы работы и жизни в Лондоне
Я уже несколько лет живу и работаю в Лондоне и хотел бы поделиться некоторыми плюсами, которые я для себя выделил:
1) Достаточно знать только английский язык для жизни и работы. Этот плюс я выделил для себя, т.к. для жизни, например, в Германии, нужно знать еще и немецкий. На работе вы можете общаться на английском, но за пределами работы владеть немецким на каком-то уровне все же необходимо. Например, для взаимодействия с госучереждениями, да даже элементарно в магазине, т.к. далеко не все говорят по-английски. В Великобритании с этим намного проще.
2) Много it-вакансий и it-компаний. Тут есть офисы крупнейших банков, хэдж фондов, различных финансовых организаций, FAANG компаний, стартапов и т.д. Можно, не переезжая, легко найти себе другую работу. В маленьких Европейских городах не так много работодателей. И иногда, чтобы сменить работу придется переехать в другой город.
3) Легко получить гражданство. Если вы переедете по Skilled Worker визе, то надо 5 лет прожить до ILR(внж) и еще один год до гражданства. Если по Global Talent, то 3 года до внж и еще 2 года до гражданства.
3) Множество развлечений. Концерты мировых звезд, матчи Английской Премьер Лиги, театральные постановки со звездами Голливуда и т.д.
4) Высокий уровень жизни. Это относится к большинству Европейских стран.
5) Достаточно высокие зарплаты айтишников, чтобы обеспечить комфортную жизнь даже в таком дорогом городе как Лондон.
Я уже несколько лет живу и работаю в Лондоне и хотел бы поделиться некоторыми плюсами, которые я для себя выделил:
1) Достаточно знать только английский язык для жизни и работы. Этот плюс я выделил для себя, т.к. для жизни, например, в Германии, нужно знать еще и немецкий. На работе вы можете общаться на английском, но за пределами работы владеть немецким на каком-то уровне все же необходимо. Например, для взаимодействия с госучереждениями, да даже элементарно в магазине, т.к. далеко не все говорят по-английски. В Великобритании с этим намного проще.
2) Много it-вакансий и it-компаний. Тут есть офисы крупнейших банков, хэдж фондов, различных финансовых организаций, FAANG компаний, стартапов и т.д. Можно, не переезжая, легко найти себе другую работу. В маленьких Европейских городах не так много работодателей. И иногда, чтобы сменить работу придется переехать в другой город.
3) Легко получить гражданство. Если вы переедете по Skilled Worker визе, то надо 5 лет прожить до ILR(внж) и еще один год до гражданства. Если по Global Talent, то 3 года до внж и еще 2 года до гражданства.
3) Множество развлечений. Концерты мировых звезд, матчи Английской Премьер Лиги, театральные постановки со звездами Голливуда и т.д.
4) Высокий уровень жизни. Это относится к большинству Европейских стран.
5) Достаточно высокие зарплаты айтишников, чтобы обеспечить комфортную жизнь даже в таком дорогом городе как Лондон.
👍8
Хотите улучшить качество вашего кода и задать стандарты написания кода в вашей команде или организации?
#книги
Хочу порекомендовать книгу “Clean Code by Robert Martin”. Данная книга рассматривает вопросы написания читаемого и поддерживаемого кода. На практике код пишется один раз, но читается сотни раз. Поэтому критически важно писать читаемый код. Множество крупных организаций пользуется практиками описанными в этой книге. Обсуждаются так называемые “Code Smells”. Вы можете обсудить в вашей команде или организации, какие из практик описанных в книге вы хотите использовать и использовать это во время Code Review. Некоторые Code Smells могут показаться спорными и неактуальными, поэтому важно договориться на берегу с командой, какие вы хотите использовать, а какие нет. Задание стандартов написания кода поможет предотвратить огромное количество споров и конфликтов во время Code Review.
Например, я легко могу отличить код свежего выпускника вуза по использованию комментариев к месту и не к месту в коде. На практике, в больших IT- гигантах, комментарии используются только для документирования public API и библиотечных функций. Во всем остальном код нужно писать так, чтобы не нужны были комментарии, он должен быть понятным и самоочевидным. Более того, использование неуместных комментариев в коде приводит к тому, что вам надо одновременно с поддержанием и изменением кода менять комментарии. Очень быстро происходит рассинхронизация кода и комментариев к нему. Также забавляют Redundant Comment, например, i++; //increment i. А какой ваш любимый Code Smell?
#книги
Хочу порекомендовать книгу “Clean Code by Robert Martin”. Данная книга рассматривает вопросы написания читаемого и поддерживаемого кода. На практике код пишется один раз, но читается сотни раз. Поэтому критически важно писать читаемый код. Множество крупных организаций пользуется практиками описанными в этой книге. Обсуждаются так называемые “Code Smells”. Вы можете обсудить в вашей команде или организации, какие из практик описанных в книге вы хотите использовать и использовать это во время Code Review. Некоторые Code Smells могут показаться спорными и неактуальными, поэтому важно договориться на берегу с командой, какие вы хотите использовать, а какие нет. Задание стандартов написания кода поможет предотвратить огромное количество споров и конфликтов во время Code Review.
Например, я легко могу отличить код свежего выпускника вуза по использованию комментариев к месту и не к месту в коде. На практике, в больших IT- гигантах, комментарии используются только для документирования public API и библиотечных функций. Во всем остальном код нужно писать так, чтобы не нужны были комментарии, он должен быть понятным и самоочевидным. Более того, использование неуместных комментариев в коде приводит к тому, что вам надо одновременно с поддержанием и изменением кода менять комментарии. Очень быстро происходит рассинхронизация кода и комментариев к нему. Также забавляют Redundant Comment, например, i++; //increment i. А какой ваш любимый Code Smell?
👍6
Top алгоритмов и структур данных, которые нужно знать для прохождения собеседований
#interview #собеседование #algorithms
Задачи на использование алгоритмов и структур данных являются неотъемлемой частью собеседования в такие компании как Google, Facebook(Meta), Amazon, Apple, Microsoft, Uber, Lyft, Netflix. Но сейчас все больше и больше компаний используют такого рода задачи на собеседованиях (в России например Яндекс, Mail, OK.ru, Сбертех и другие).
Топ алгоритмов и подходов, которые нужно знать и уметь использовать, чтобы решить такого рода задачи:
1) Two pointers (Два указателя)
2) Prefix Sum
3) Recursion
4) DFS (поиск в глубину в графе)
5) BFS (поиск в ширину в графе)
6) Tree traversal (обход дерева)
7) Binary Search (бинарный поиск)
8) Quick Sort
9) Merge Sort
10) Backtracking
11) Dynamic Programming
12) Topological Sort
13) Sliding Window
Топ структур данных, которые нужно знать и уметь использовать:
1) HashTable
2) Array
3) String
4) List
5) Stack
6) Queue
7) Heap (Priority Queue)
8) Graph
9) Tree (Binary Tree, Binary Search Tree)
10) Tries (Prefix Tree)
11) Union Find
Данные алгоритмы и структуры данных нужно знать и уметь использовать в задачах. На собеседованиях вас напрямую не спросят - напиши Merge Sort, но могут дать задачу, в которой 90% решения совпадает с алгоритмом Merge Sort.
В дальнейшем буду разбирать как сами алгоритмы, так и примеры задач, если это будет кому-то интересно.
#interview #собеседование #algorithms
Задачи на использование алгоритмов и структур данных являются неотъемлемой частью собеседования в такие компании как Google, Facebook(Meta), Amazon, Apple, Microsoft, Uber, Lyft, Netflix. Но сейчас все больше и больше компаний используют такого рода задачи на собеседованиях (в России например Яндекс, Mail, OK.ru, Сбертех и другие).
Топ алгоритмов и подходов, которые нужно знать и уметь использовать, чтобы решить такого рода задачи:
1) Two pointers (Два указателя)
2) Prefix Sum
3) Recursion
4) DFS (поиск в глубину в графе)
5) BFS (поиск в ширину в графе)
6) Tree traversal (обход дерева)
7) Binary Search (бинарный поиск)
8) Quick Sort
9) Merge Sort
10) Backtracking
11) Dynamic Programming
12) Topological Sort
13) Sliding Window
Топ структур данных, которые нужно знать и уметь использовать:
1) HashTable
2) Array
3) String
4) List
5) Stack
6) Queue
7) Heap (Priority Queue)
8) Graph
9) Tree (Binary Tree, Binary Search Tree)
10) Tries (Prefix Tree)
11) Union Find
Данные алгоритмы и структуры данных нужно знать и уметь использовать в задачах. На собеседованиях вас напрямую не спросят - напиши Merge Sort, но могут дать задачу, в которой 90% решения совпадает с алгоритмом Merge Sort.
В дальнейшем буду разбирать как сами алгоритмы, так и примеры задач, если это будет кому-то интересно.
👍23🔥6❤1
FAANG Master pinned «Top алгоритмов и структур данных, которые нужно знать для прохождения собеседований #interview #собеседование #algorithms Задачи на использование алгоритмов и структур данных являются неотъемлемой частью собеседования в такие компании как Google, Facebook(Meta)…»
Алгоритм Бинарного поиска (binary search)
#собеседование #interview #алгоритмы #algorithms
Написал статью про алгоритм бинарного поиска: https://medium.com/@neronroman_30328/%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-binary-search-b7085268d641
#собеседование #interview #алгоритмы #algorithms
Написал статью про алгоритм бинарного поиска: https://medium.com/@neronroman_30328/%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-binary-search-b7085268d641
Medium
Бинарный поиск (binary search)
От также известен под названиями: двоичный поиск, метод деления пополам, метод дихотомии.
👍6🔥5
FAANG Master pinned «Алгоритм Бинарного поиска (binary search) #собеседование #interview #алгоритмы #algorithms Написал статью про алгоритм бинарного поиска: https://medium.com/@neronroman_30328/%D0%B1%D0%B8%D0%BD%D0%B0%D1%80%D0%BD%D1%8B%D0%B9-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA…»
Задача с собеседования в Facebook(Meta): Найти пиковый элемент
#собеседование #interview #algo #meta #binarysearch
Реальная задача с собеседования в компанию Meta.
Дан массив целый чисел. Любые два соседних числа не равны друг другу. Найти любой пик в массиве. Пик это элемент в массиве, который больше своих соседей слева и справа. Т.е. arr[i-1] < arr[i] > arr[i + 1] в этом случае i-индекс пика в массиве. Можно предположить, что arr[-1] = arr[n] = минус бесконечность.
Решение опубликую завтра. Подсказка - оптимальное решение работает за O(log(n)) с использованием бинарного поиска.
#собеседование #interview #algo #meta #binarysearch
Реальная задача с собеседования в компанию Meta.
Дан массив целый чисел. Любые два соседних числа не равны друг другу. Найти любой пик в массиве. Пик это элемент в массиве, который больше своих соседей слева и справа. Т.е. arr[i-1] < arr[i] > arr[i + 1] в этом случае i-индекс пика в массиве. Можно предположить, что arr[-1] = arr[n] = минус бесконечность.
Решение опубликую завтра. Подсказка - оптимальное решение работает за O(log(n)) с использованием бинарного поиска.
👍5
Задача с собеседования в Amazon: Пропущенный элемент в отсортированном массиве
#собеседование #interview #algo #amazon #binarysearch
Еще одна задача на бинарный поиск в компанию Amazon.
Дан отсортированный по возрастанию массив целых чисел, все элементы которого уникальны. В массиве есть пропущенные элементы.
Необходимо найти k-й пропущенный элемент начиная с нулевого элемента массива.
Например: [4, 7, 9, 10], k = 1 -> Ответ 5. [4, 7, 9, 10], k = 3 -> Ответ 8 (пропущены 5, 6, 8)
Решение опубликую позже. Подсказка - оптимальное решение работает за O(log(n)) с использованием бинарного поиска.
#собеседование #interview #algo #amazon #binarysearch
Еще одна задача на бинарный поиск в компанию Amazon.
Дан отсортированный по возрастанию массив целых чисел, все элементы которого уникальны. В массиве есть пропущенные элементы.
Необходимо найти k-й пропущенный элемент начиная с нулевого элемента массива.
Например: [4, 7, 9, 10], k = 1 -> Ответ 5. [4, 7, 9, 10], k = 3 -> Ответ 8 (пропущены 5, 6, 8)
Решение опубликую позже. Подсказка - оптимальное решение работает за O(log(n)) с использованием бинарного поиска.
👍3
Задача с собеседования в Facebook(Meta): Найти пиковый элемент
#собеседование #interview #algo #meta #binarysearch
Публикую решение вчерашней задачи с собеседования в Facebook.
Дан массив целый чисел. Любые два соседних числа не равны друг другу. Найти любой пик в массиве. Пик это элемент в массиве, который больше своих соседей слева и справа. Т.е. arr[i-1] < arr[i] > arr[i + 1] в этом случае i-индекс пика в массиве. Можно предположить, что arr[-1] = arr[n] = минус бесконечность.
Решение:
1. Первое решение, которое приходит в голову - линейный поиск. Просто в цикле пройти по массиву и сравнить каждый элемент с соседями. Как только найдем arr[i-1] < arr[i] > arr[i + 1] вернуть i. Временная сложность такого решения: O(n).
Можно еще немного упростить:
проверять только arr[i] > arr[i + 1],
т.к. дано, что на краях значения это минус бесконечность, значит вначале массив возрастает, можно найти первый случай, когда массив убывает.
Код:
Т.к. нам нужно найти любой пик, то вполне можно начать поиск с середины массива, как в бинарном поиске.
Давайте попробуем применить бинарный поиск для поиска такого пика.
Пусть мы смотрим на середину массива. К каким выводам мы можем прийти смотря на серединный и соседний элемент?
Равными они не могут быть по условию.
Если следующий элемент больше середины, то массив возрастает. Значит пик точно есть справа. Иначе - слева. На следующей итерации мы снова будет смотреть на новую середину, мы не обязательно найдем вершину, возрастание к которой мы обнаружили на предыдущем шаге. Но мы точно знаем, что в новой уменьшенной области он точно есть. Рано или поздно наша область поиска будет уменьшена до одного элемента, который гарантировано будет пиком. Он будет работать за O(log(n)), что быстрее линейного поиска.
Код:
#собеседование #interview #algo #meta #binarysearch
Публикую решение вчерашней задачи с собеседования в Facebook.
Дан массив целый чисел. Любые два соседних числа не равны друг другу. Найти любой пик в массиве. Пик это элемент в массиве, который больше своих соседей слева и справа. Т.е. arr[i-1] < arr[i] > arr[i + 1] в этом случае i-индекс пика в массиве. Можно предположить, что arr[-1] = arr[n] = минус бесконечность.
Решение:
1. Первое решение, которое приходит в голову - линейный поиск. Просто в цикле пройти по массиву и сравнить каждый элемент с соседями. Как только найдем arr[i-1] < arr[i] > arr[i + 1] вернуть i. Временная сложность такого решения: O(n).
Можно еще немного упростить:
проверять только arr[i] > arr[i + 1],
т.к. дано, что на краях значения это минус бесконечность, значит вначале массив возрастает, можно найти первый случай, когда массив убывает.
Код:
public int findPeakElement(int[] nums) {
for (int i = 0; i < nums.length -1; i++) {
if (nums[i] > nums[i + 1]) return i;
}
return nums.length - 1;
}
2. Можно ли еще улучшить решение? Т.к. дано, что соседние элементы не равны друг другу - в массиве присутствуют отрезки, где массив только возрастает или только убывает. Можно это использовать для применения бинарного поиска.Т.к. нам нужно найти любой пик, то вполне можно начать поиск с середины массива, как в бинарном поиске.
Давайте попробуем применить бинарный поиск для поиска такого пика.
Пусть мы смотрим на середину массива. К каким выводам мы можем прийти смотря на серединный и соседний элемент?
Равными они не могут быть по условию.
Если следующий элемент больше середины, то массив возрастает. Значит пик точно есть справа. Иначе - слева. На следующей итерации мы снова будет смотреть на новую середину, мы не обязательно найдем вершину, возрастание к которой мы обнаружили на предыдущем шаге. Но мы точно знаем, что в новой уменьшенной области он точно есть. Рано или поздно наша область поиска будет уменьшена до одного элемента, который гарантировано будет пиком. Он будет работать за O(log(n)), что быстрее линейного поиска.
Код:
public int findPeakElement(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int mid = (left + right) / 2;
if (nums[mid] < nums[mid + 1]) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}👍11❤1
Введение в Load Balancers. Часть 1 из 3
#собеседование #interview #systemdesign
Начал писать цикл статей посвященных system design собеседованиям.
Публикую первую часть посвященную Load Balancers.
Знать, что такое LB и уметь их применять критически необходимо на system design собеседовании.
https://telegra.ph/Load-Balancers-Vvedenie-CHast-1-iz-3-05-15
#собеседование #interview #systemdesign
Начал писать цикл статей посвященных system design собеседованиям.
Публикую первую часть посвященную Load Balancers.
Знать, что такое LB и уметь их применять критически необходимо на system design собеседовании.
https://telegra.ph/Load-Balancers-Vvedenie-CHast-1-iz-3-05-15
Telegraph
Load Balancers. Введение. Часть 1 из 3.
Это первая из трех статей, которые я планирую написать про Load Balancers (LB). Данная статья будет посвященна введению в тему. Давайте рассмотрим сайт google.com. Им пользуются миллиарды человек. Чтобы обработать запросы от всех пользователей, нам нужно…
👍6🔥5
Введение в Load Balancers. Часть 2 из 3
#собеседование #interview #systemdesign
Публикую вторую часть посвященную Load Balancers.
https://telegra.ph/Load-Balancers-Vvedenie-CHast-2-iz-3-05-16
#собеседование #interview #systemdesign
Публикую вторую часть посвященную Load Balancers.
https://telegra.ph/Load-Balancers-Vvedenie-CHast-2-iz-3-05-16
Telegraph
Load Balancers. Введение. Часть 2 из 3.
Предыдущая часть: https://telegra.ph/Load-Balancers-Vvedenie-CHast-1-iz-3-05-15 Глобальные и локальные LB Глобальный LB (Global server load balancing (GSLB)) - распределяет нагрузку между географическими района. Например, перераспределяет нагрузку между дата…
👍6🔥4
Минусы работы в IT/программистом
#мысли
Сейчас из каждого утюга рекламируют курсы по программированию и работы в IT.
Рассказывают про огромные зарплаты и удаленку из любой точки мира.
Но мало кто говорит про минусы и недостатки работы программистом или в IT в целом.
Конечно, работа в IT имеет большое число плюсов, иначе я бы этим не занимался. Но в этом есть и множество недостатков.
Я попытался выделить наиболее значимые, по-моему субъективному мнению:
1) Это сидячая работа перед компом/ноутом. Вам нужно проводить практически всю жизнь сидя (лежа, если вы на удаленке😄) возле компа. На первый взгляд, это может показаться плюсом. Это не в шахте работать. Но через много лет такой сидячей работы, почти гарантированно, у вас будут проблемы с осанкой, спиной, кистями рук, шеей, лишним весом. Кроме того, сейчас большинство людей предпочитает проводить свой отдых также за компом/ноутом/телефоном. Поэтому почти все время, не занятое сном, вы скорее всего будете проводить перед компьютером.
2) Постоянное обучение. Вы не можете просто закончить универ, курсы и использовать эти знания всю жизнь. В IT все очень быстро меняется. Каждый день появляются новые технологии, библиотеки, подходы, тулы и т.д. Вам нужно постоянно что-то изучать, чтобы не остаться за бортом. Т.е. кроме работы 40 часов в неделю вам нужно постоянно выделять время на самообразование и отнимать это время из своего личного (отдыха, времени с семьей и друзьями).
3) Конкуренция и стресс. Несмотря на большую потребность в программистах, получить работу и пройти собеседование очень сложно. Типичной, является ситуация, когда человек откликается на сотни вакансий, проходит десятки собеседований и получает одно предложение о работе после 6 месяцев поисков работы. Кроме конкуренции внешней, есть конкуренция внутри компаний. Есть перфоманс ревью вашей работы, конкуренция за повышение, за премию, за то, чтобы не быть уволенным. Это постоянный стресс.
4) Написание кода это лишь маленькая часть работы программистом. Допустим, вам нравится писать код или проектировать системы. Вы могли бы заниматься этим хоть целый день. Но в реальности, это будет лишь малая часть того, что вы будете делать. Вам нужно будет взаимодействовать с другими людьми, командами и о чем-то договариваться, писать формальные документы. И провожу 40-50% времени на митингах (совещаниях), которые часто не дают никаких результатов. Придумывание дизайна системы занимает очень мало времени. После этого нужно это все описать и очень долго ревьюить с другими людьми. Даже если вы сядете писать код, то вначале вам нужно прочитать тонну другого кода, чтобы понять куда его нужно вставить. Потом долго и упорно бороться с непонятными проблемами и багами. Если вы начинающий программист, что скорее всего вы будете часто застревать и искать помощи у других коллег.
5) У вас будет страдать ваша социальная жизнь. Из-за того, что вы много работаете, а потом еще и много учитесь у вас будет очень мало времени на друзей и семью. Если вы социально активный человек, то ваша социальная активность скорее всего сильно снизится.
6) Прокрастинация. Как и в любой другой умственной деятельности вы будете постоянно прокрастинировать и бороться с прокрастинацией. Особенно, в той части работы, которую вы не очень любите. А как я уже сказал, работа в IT это не только проектирование систем, написание кода, анализ данных или тестирование. Это много всякой бюрократии, митингов и попыток о чем-то договориться. Будьте готовы заставлять себя постоянно что-то делать, что вам не очень нравится.
Если вы уже работаете в IT, пишите в комментариях, что вам больше всего не нравится в вашей работе.
#мысли
Сейчас из каждого утюга рекламируют курсы по программированию и работы в IT.
Рассказывают про огромные зарплаты и удаленку из любой точки мира.
Но мало кто говорит про минусы и недостатки работы программистом или в IT в целом.
Конечно, работа в IT имеет большое число плюсов, иначе я бы этим не занимался. Но в этом есть и множество недостатков.
Я попытался выделить наиболее значимые, по-моему субъективному мнению:
1) Это сидячая работа перед компом/ноутом. Вам нужно проводить практически всю жизнь сидя (лежа, если вы на удаленке😄) возле компа. На первый взгляд, это может показаться плюсом. Это не в шахте работать. Но через много лет такой сидячей работы, почти гарантированно, у вас будут проблемы с осанкой, спиной, кистями рук, шеей, лишним весом. Кроме того, сейчас большинство людей предпочитает проводить свой отдых также за компом/ноутом/телефоном. Поэтому почти все время, не занятое сном, вы скорее всего будете проводить перед компьютером.
2) Постоянное обучение. Вы не можете просто закончить универ, курсы и использовать эти знания всю жизнь. В IT все очень быстро меняется. Каждый день появляются новые технологии, библиотеки, подходы, тулы и т.д. Вам нужно постоянно что-то изучать, чтобы не остаться за бортом. Т.е. кроме работы 40 часов в неделю вам нужно постоянно выделять время на самообразование и отнимать это время из своего личного (отдыха, времени с семьей и друзьями).
3) Конкуренция и стресс. Несмотря на большую потребность в программистах, получить работу и пройти собеседование очень сложно. Типичной, является ситуация, когда человек откликается на сотни вакансий, проходит десятки собеседований и получает одно предложение о работе после 6 месяцев поисков работы. Кроме конкуренции внешней, есть конкуренция внутри компаний. Есть перфоманс ревью вашей работы, конкуренция за повышение, за премию, за то, чтобы не быть уволенным. Это постоянный стресс.
4) Написание кода это лишь маленькая часть работы программистом. Допустим, вам нравится писать код или проектировать системы. Вы могли бы заниматься этим хоть целый день. Но в реальности, это будет лишь малая часть того, что вы будете делать. Вам нужно будет взаимодействовать с другими людьми, командами и о чем-то договариваться, писать формальные документы. И провожу 40-50% времени на митингах (совещаниях), которые часто не дают никаких результатов. Придумывание дизайна системы занимает очень мало времени. После этого нужно это все описать и очень долго ревьюить с другими людьми. Даже если вы сядете писать код, то вначале вам нужно прочитать тонну другого кода, чтобы понять куда его нужно вставить. Потом долго и упорно бороться с непонятными проблемами и багами. Если вы начинающий программист, что скорее всего вы будете часто застревать и искать помощи у других коллег.
5) У вас будет страдать ваша социальная жизнь. Из-за того, что вы много работаете, а потом еще и много учитесь у вас будет очень мало времени на друзей и семью. Если вы социально активный человек, то ваша социальная активность скорее всего сильно снизится.
6) Прокрастинация. Как и в любой другой умственной деятельности вы будете постоянно прокрастинировать и бороться с прокрастинацией. Особенно, в той части работы, которую вы не очень любите. А как я уже сказал, работа в IT это не только проектирование систем, написание кода, анализ данных или тестирование. Это много всякой бюрократии, митингов и попыток о чем-то договориться. Будьте готовы заставлять себя постоянно что-то делать, что вам не очень нравится.
Если вы уже работаете в IT, пишите в комментариях, что вам больше всего не нравится в вашей работе.
👍16❤3👎1
Хотите изучить многопоточность в Java и легко проходить собеседования на Backend Java Developer?
#книги #interview #собеседование #java
Рекомендую книгу от одного из создателей многопоточности в Java: "Java Concurrency in Practice by Brian Goetz". В ней разбираются основные понятия и концепции многопоточности в Java, рассматриваются конкретные примеры и тонкие места. Вы узнаете что такое thread safe классы, immutable, как работает volatile, final и synchronized в контексте многопоточности. Узнаете про thread safe коллекции в Java, создание, синхронизацию, приостановку и остановку потоков. Что такое dead lock и как его предотвратить. Что такое Java Memory Model и happens before. Если вы хотите стать backend разработчиком или улучшить свои знания, то я рекомендую эту книгу не просто полистать, а изучить очень подробно. Эту книгу я прочитал раз 5. Она мне помогла в свое время получить 3 офера о работе. Собеседования в такие компании как Яндекс, Сбертех, Mail, Revolut(раньше еще был Дойче Банк в России) на Java бэкендера содержат существенную часть посвященную многопоточности. Иногда это треть или даже половина всех вопросов связанных с Java напрямую. Очень много вопросов просто взяты из этой книги.
#книги #interview #собеседование #java
Рекомендую книгу от одного из создателей многопоточности в Java: "Java Concurrency in Practice by Brian Goetz". В ней разбираются основные понятия и концепции многопоточности в Java, рассматриваются конкретные примеры и тонкие места. Вы узнаете что такое thread safe классы, immutable, как работает volatile, final и synchronized в контексте многопоточности. Узнаете про thread safe коллекции в Java, создание, синхронизацию, приостановку и остановку потоков. Что такое dead lock и как его предотвратить. Что такое Java Memory Model и happens before. Если вы хотите стать backend разработчиком или улучшить свои знания, то я рекомендую эту книгу не просто полистать, а изучить очень подробно. Эту книгу я прочитал раз 5. Она мне помогла в свое время получить 3 офера о работе. Собеседования в такие компании как Яндекс, Сбертех, Mail, Revolut(раньше еще был Дойче Банк в России) на Java бэкендера содержат существенную часть посвященную многопоточности. Иногда это треть или даже половина всех вопросов связанных с Java напрямую. Очень много вопросов просто взяты из этой книги.
👍15❤3
Вопрос с собеседования: как работает HashMap в Java?
#собеседование #interview #java #collections #hashmap #коллекции
Это очень популярный вопрос на собеседовании. Встречается практически на любом собеседовании на Java программиста.
Описал ответ тут: https://telegra.ph/HashMap-05-18
#собеседование #interview #java #collections #hashmap #коллекции
Это очень популярный вопрос на собеседовании. Встречается практически на любом собеседовании на Java программиста.
Описал ответ тут: https://telegra.ph/HashMap-05-18
Telegraph
HashMap
На собеседовании это вопрос может звучать так: 1) Как работает HashMap в Java? 2) Как устроен HashMap в Java? 3) Какая временная сложность операций с HashMap и почему? HashMap позволяет хранить key-value соответствия(mappings). Временная сложность операций…
👍12🔥4❤1
Задача с собеседования в Яндекс на бинарный поиск
#собеседование #interview #algo #алгоритмы #яндекс #binarysearch #бинарныйпоиск
Решил сделать отдельный пост, т.к. задача оказалась несколько сложнее, чем я изначально думал.
Задача: Какое число итераций (чтений из массива) потребуется, чтобы при помощи бинарного поиска гарантированно найти индекс заданного числа или установить его отсутствие в отсортированном массиве из 1000 чисел в худшем случае?
Решение: Бинарный поиск работает за O(log(n)) т.к. сокращает область поиска в два раза на каждой итерации. Я описывал бинарный поиск тут: Бинарный поиск. Худший случай это, например, поиск элемента на краях массива. Скажем у нас есть массив: [1, 2, 3, 4] и нам требуется найти 4. Нам потребуется 3 итерации.
Давайте попробует установить общую закономерность для любого размера массива.
Для размера 1: 1 итерация.
Для размера 2: 2 итерации.
Для размера 3: 2 итерации.
Для размера 4: 3 итерации.
Для размера 5, 6, 7: 3 итерации.
Для размера 8: 4 итерации.
Для размера 9, 10, 11, 12, 13, 14, 15: 4 итерации.
Для размера 16: 5 итераций.
Общая закономерность: Если размер массива это степень двойки (2, 4, 8, ...), То число итераций равно log2(n) + 1. Если размер не является степенью двойки, то нужно округлить log2(n) вверх до ближайшего целого: roundup(log2(n)).
Или За k-итераций бинарный поиск может обработать от 2^(k-1) до 2^k - 1 элементов массива: В виде отрезка это: [2^(k-1), 2^k) 2^k - не включительно
Теперь вернемся к задаче.
2^10 = 1024. Это больше, чем 1000. За 10 итераций бинарный поиск сможет обработать [2^(10-1), 2^10) = [512, 1024) элементов. Или от 512 до 1023 элементов. Т.е. ответ 10
Или 1000 не является степенью двойки, поэтому ответ: roundup(log2(n)) = 10
Давайте посмотрим как будет уменьшаться область поиска по итерациям для 1000:
1: 1000->500
2: 500->250
3: 250->125
4: 125->62
5: 62->31
6: 31->15
7: 15->7
8: 7->3
9: 3->1
10: Находим элемент или устанавливаем его отсутствие.
Ответ: 10
Спасибо всем, кто писал свои соображения в комментариях и чате.
#собеседование #interview #algo #алгоритмы #яндекс #binarysearch #бинарныйпоиск
Решил сделать отдельный пост, т.к. задача оказалась несколько сложнее, чем я изначально думал.
Задача: Какое число итераций (чтений из массива) потребуется, чтобы при помощи бинарного поиска гарантированно найти индекс заданного числа или установить его отсутствие в отсортированном массиве из 1000 чисел в худшем случае?
Решение: Бинарный поиск работает за O(log(n)) т.к. сокращает область поиска в два раза на каждой итерации. Я описывал бинарный поиск тут: Бинарный поиск. Худший случай это, например, поиск элемента на краях массива. Скажем у нас есть массив: [1, 2, 3, 4] и нам требуется найти 4. Нам потребуется 3 итерации.
Давайте попробует установить общую закономерность для любого размера массива.
Для размера 1: 1 итерация.
Для размера 2: 2 итерации.
Для размера 3: 2 итерации.
Для размера 4: 3 итерации.
Для размера 5, 6, 7: 3 итерации.
Для размера 8: 4 итерации.
Для размера 9, 10, 11, 12, 13, 14, 15: 4 итерации.
Для размера 16: 5 итераций.
Общая закономерность: Если размер массива это степень двойки (2, 4, 8, ...), То число итераций равно log2(n) + 1. Если размер не является степенью двойки, то нужно округлить log2(n) вверх до ближайшего целого: roundup(log2(n)).
Или За k-итераций бинарный поиск может обработать от 2^(k-1) до 2^k - 1 элементов массива: В виде отрезка это: [2^(k-1), 2^k) 2^k - не включительно
Теперь вернемся к задаче.
2^10 = 1024. Это больше, чем 1000. За 10 итераций бинарный поиск сможет обработать [2^(10-1), 2^10) = [512, 1024) элементов. Или от 512 до 1023 элементов. Т.е. ответ 10
Или 1000 не является степенью двойки, поэтому ответ: roundup(log2(n)) = 10
Давайте посмотрим как будет уменьшаться область поиска по итерациям для 1000:
1: 1000->500
2: 500->250
3: 250->125
4: 125->62
5: 62->31
6: 31->15
7: 15->7
8: 7->3
9: 3->1
10: Находим элемент или устанавливаем его отсутствие.
Ответ: 10
Спасибо всем, кто писал свои соображения в комментариях и чате.
Medium
Бинарный поиск (binary search)
От также известен под названиями: двоичный поиск, метод деления пополам, метод дихотомии.
👍9❤2
Задача на алгоритмы и структуры данных: проверить правильность скобочного выражения
#собеседование #interview #algo #string #строка #stack #стек #алгоритмы
Эта задача широко известна, часто применяется как разминочная или для первичного отсева кандидатов на phone screen.
Встречал ее в реальности на собеседованию в компанию skyscanner. В модифицированном и усложненном виде встречал на собеседовании в facebook.
Кратко условие: дана строка, которая может содержать 3 типа скобок и другие символы. Проверить правильность скобочного выражение.
Эта задача поможет вам лучше понимать как работать со строками и стеком.
Решение описал тут: Решение.
#собеседование #interview #algo #string #строка #stack #стек #алгоритмы
Эта задача широко известна, часто применяется как разминочная или для первичного отсева кандидатов на phone screen.
Встречал ее в реальности на собеседованию в компанию skyscanner. В модифицированном и усложненном виде встречал на собеседовании в facebook.
Кратко условие: дана строка, которая может содержать 3 типа скобок и другие символы. Проверить правильность скобочного выражение.
Эта задача поможет вам лучше понимать как работать со строками и стеком.
Решение описал тут: Решение.
Medium
Проверить скобочное выражение
Дана строка, содержащая три вида скобок : (, ), {, }, [ , ], а также буквы латинского алфавита и цифры. Определите, верно ли скобочное…
👍7🔥5