Видеозапись mock интервью с разработчиком, специализирующимся на высоконагруженых системах, Денисом Шуваловім
Пікірлер: 155
@MrRomanvideo2 жыл бұрын
00:00 - Знакомство 00:55 - Ежедневные задачи 3:19 - Отличие Aerospike от Redis 4:14 - Какие существую функциональные фичи в Java 4:41 - Отличие Unmodifiable от Immutable 5:24 - Функциональные интерфейсы 5:50 - Что такое Lambda 6:47 - Метод reduce() 7:22 - чем его преимущество перед циклом 8:43 - HashTable и ConcurrentHashMap - отличия и что эффективнее 9:53 - Классы мониторов для мониторинга многопоточки 10:45 - retry block 12:39 - Шаблон Builder - что такое и для каких задач 13:30 - что будет если конструктор класса будет private , и зачем это нужно 14:00 - Singleton - почему его называют анти-паттерн 14:51 - Как обойтись без synchronized в многопоточке на Singleton”е 15:52 - Что такое Double check 16:58 - Stateful и Stateless сервисы 18:54 - Optimistic vs. Pessimistic locking 20:33 - Задачка 40:07 - Ключевое отличие SQL vs NoSQL DBs 41:03 - Возможно ли изоляция транзакций в распределенных системах 42:27 - Доказать CAP теорему 43:45 - Почему нет смысла гнаться за 100% или 99.999% надежности, если есть 99.99% 44:48 - Что такое Rest 45:14 - Какие минусы Rest в высоконагруженных сис-мах 46:40 - Что такое JRPC 47:04 - Процесс от пуша кода до продакшена 48:32 - Сколько нужно instance`ов чтобы обеспечить CI\CD 49:38 - Заключение
@EugeneSuleimanov2 жыл бұрын
Спасибо вам, добрый человек :)
@MrRomanvideo2 жыл бұрын
@@EugeneSuleimanov и вам за видео! Полгода назад ничего не понял в этом интервью. А сейчас наоборот все зашло. Растем :).
@romanfirsov892 жыл бұрын
@@EugeneSuleimanov а есть ли у вас возможность закрепить этот комментарий с тайм-кодами в верху. УдобоПросматриваемость видео от этого повысится.
@EugeneSuleimanov2 жыл бұрын
@@romanfirsov89 сделано, спасибо :)
@antonzernov37024 жыл бұрын
Аж дух захватывает, и какой контраст по сравнению с собеседованием джуниора. Это видео не только демонстрирует интервью, но и носит обучающий характер. Спасибо, Евгений!!!
@timurkhasanov59784 жыл бұрын
Очень интересно смотреть интервью с опытными разработчиками. Пока этот парень один из лучших. Быстро и ясно отвечает на все вопросы
@katatonicTheMad4 жыл бұрын
Крутой, думающий разработчик., интересно объяснял некоторые вещи. Спасибо за прекрасный контент!
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв!
@ВасилийГоловко-д9и4 жыл бұрын
Супер интервью. То, что давно ждал - общение с скилованными разработчиками. Ждем ссылок на ресурсы, где можно это прочитать
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв!
@alexandrshuvaev40464 жыл бұрын
Более того, Денис еще и очень круто формулирует мысли и объясняет. Реально, было бы даже интересно послушать ответы на какие-то простые вопросы.
@Holdy_Couldy4 жыл бұрын
с 2:29 начали что-то на эльфийском
@dark_evil774 жыл бұрын
Ахаах
@vmir883 жыл бұрын
У собеседуемого ещё и иврит местами проскакивает ))
@МаксимТолстобров-э9х4 жыл бұрын
Евгений, я не поленился зайти сюда и выразить благодарность за труды. Я изучаю паттерны проектирования по твоим видео, прошел курс по hibernate у тебя на сайте (не совсем курс, но этот минимум уже помог мне больше узнать о технологии). Из всех преподавателей на ютубе вы выглядите более толковым их всех, ваш труд помогает нам. Спасибо!!!
@denisshuvalov57264 жыл бұрын
Большое спасибо Евгению за предоставленную возможность и время. Могу только представить сколько сил отнимает создание подобного контента. Когда я только начинал и не знал как проходит интервью, что спрашивают на что смотрят, мне очень не хватало такого материала. п.с. Саму задачку я потом довольно быстро решил на скале рекурсивно def rev[T](xs: List[T]): List[T] = { xs match { case List() => xs case head :: tail => rev(tail) ::: List(head) } }
@andrewshapovalov4844 жыл бұрын
А зачем рекурсия на плоском списке? На pure Java задача решается без рекурсии например так ===================== package com.jc.interview; public class Main { public static void main(String[] args) { IntLikedNode head = new IntLikedNode(1, null); IntLikedNode item1 = new IntLikedNode(2, null); IntLikedNode item2 = new IntLikedNode(3, null); IntLikedNode item3 = new IntLikedNode(4, null); IntLikedNode item4 = new IntLikedNode(5, null); IntLikedNode item5 = new IntLikedNode(6, null); head.setNext(item1); item1.setNext(item2); item2.setNext(item3); item3.setNext(item4); item4.setNext(item5); System.out.println("==== Source List ===="); printListItems(head); System.out.println("==== New Reversed List ===="); IntLikedNode newReversedList = newReversedList(head); printListItems(newReversedList); IntLikedNode reverseList = reversedList(head); System.out.println("==== Reversed List ===="); printListItems(reverseList); } static IntLikedNode reversedList(IntLikedNode head) { IntLikedNode prevPrev=null; IntLikedNode prev=null; IntLikedNode current = head; while (current!=null && current.hasNext()) { prevPrev=prev; prev = current; current=current.getNext(); if (prevPrev==null) { prev.setNext(null); } else { prev.setNext(prevPrev); } } current.setNext(prev); return current; } static IntLikedNode newReversedList(IntLikedNode head) { IntLikedNode current = head; IntLikedNode prev = null; IntLikedNode newNode = null; if (current!=null) { while (current.hasNext()) { if (prev != null) { newNode.setNext(prev); } prev = newNode; newNode = new IntLikedNode(current.getValue(), null); current = current.getNext(); } } newNode.setNext(prev); prev=newNode; newNode = new IntLikedNode(current.getValue(),null); newNode.setNext(prev); return newNode; } static void printListItems(IntLikedNode head) { IntLikedNode node = head; while (head!=null) { System.out.println(node.value); if (node.hasNext()) { node=node.getNext(); } else { break; } } } } ================ package com.jc.interview; public class IntLikedNode { Integer value; IntLikedNode next; public IntLikedNode(Integer value, IntLikedNode next) { this.value = value; this.next = next; } public Integer getValue() { return value; } public void setValue(Integer value) { this.value = value; } public IntLikedNode getNext() { return next; } public void setNext(IntLikedNode next) { this.next = next; } boolean hasNext() { return next!=null; } }
@denisshuvalov57264 жыл бұрын
@@andrewshapovalov484 На скале, как правило, это более идиоматичный подход. Любой алгоритм можно написать как рекурсивно так и итеративно, чаще при рекурсии меньше дополнительных переменных и состояний. Хотя даже если отбросить производительность, то я бы не дал однозначного ответа когда какой подход лучше. На скале можно и без реукрсии в одну строчку решить через foldLeft, но после драки кулаками не машут :)
@andrewshapovalov4844 жыл бұрын
@@denisshuvalov5726 Ну на Java тоже можно, в одну строчку, подключил Guava и Lists.reverse(). Видидимо таск был из "другого круга понятий"-).
@redeyes2564 жыл бұрын
@@denisshuvalov5726 денис, спасибо за то, что приняли участие в этом интервью. Очень интересно было смотреть
@caffeinejavacode14754 жыл бұрын
Денис дай совет как учить java.util.cuncurrent
@ЛенарИсхаков-л5э4 жыл бұрын
Спасибо, Евгений за ваш контент, очень интересно и информативно. Желаю вам успехов!
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв и пожелания!
@АлександрШ-й5ж4 жыл бұрын
Отличный формат! Услышать, как какие-то вещи представляют и объясняют практикующие специалисты, бесценно!
@danielsedoff3 жыл бұрын
Спасибо вам, это очень интересно и при надлежащем использовании может быть очень полезно.
@zhenyalee27314 жыл бұрын
было бы неплохо, чтоб в описании хотя бы было написано про того, с кем общаетесь Допустим: Время работы джун, мид, синиор
@romanihnatov56294 жыл бұрын
Евгений, очень всё круто, классно, что нашёл материал такого вектора, спасибо вам за старания и работу, отправил письмо на почту, прочтите пожалуйста!
@КоноваловАлександр-т5ж4 жыл бұрын
Пурум пурум новый собес
@EugeneSuleimanov4 жыл бұрын
Запись запускается секунд 10, а заполнить паузу чем-то нужно ))
@РоманК-в5т4 жыл бұрын
Какое мотивационное видео! Пошёл учиться!)
@mrshmitt45832 жыл бұрын
Шикарное интревью! Спасибо огромное!
@EugeneSuleimanov2 жыл бұрын
Спасибо за отзыв!
@mrshmitt45832 жыл бұрын
@@EugeneSuleimanov с нетерпением жду новых выпусков. Очень надеюсь, что будешь продолжать!
@iurii-goncharov4 жыл бұрын
Спасибо за видео! Из всей серии это пока лучшее)
@bauyrzhanmaksot30224 жыл бұрын
Очень крутое интервью по Java
@undefined3104 жыл бұрын
парень молодец, держался на позитиве в стрессовой ситуации(собеседование), мне к сожалению такого качества не хватает
@misteranderson60584 жыл бұрын
Так он уже миллион собесов прошел.
@denisshuvalov57264 жыл бұрын
Спасибо, все приходит с годами. Я первое время тоже очень волновался на собеседованиях.
@Alex-gn6xb Жыл бұрын
100 собеседований в помощь
@dark_evil774 жыл бұрын
Евгений почему вам не создать телеграм группу?
@ИванБорзов-л8ф4 жыл бұрын
А вот ни одного вопроса к Денису я не вижу в комментах. Мне, например, интересно было бы узнать, на какой позиции он работает, чем конкретно занимается каждый день. В целом побольше о человеке с профессиональной стороны.
@denisshuvalov57264 жыл бұрын
@Иван Борзов Работаю как Big Data Engineer в Appsflyer. В основном занимаюсь оптимизацией процессов Spark'a и Druid'a, поиском новых решений для насущных проблем. На данный момент работаю над так называемым capacity planning для одного из наших Druid кластеров. Мы ожидаем много новых клиентов с китайского рынка и хотим понять сможем ли мы выдержать такую нагрузку. К примеру как наш кластер поведет себя при горизонтальном масштабировании, улучшится ли и на сколько performance. А при смене настроек, а с другими типами машин? Какие на текущий момент bottlenecks. А что если паттерн запросов изменится, и как будут взаимодействовать запросы которые сканируют большое количество данных (report queries) с точечными (ad-hoc queries). Будут ли одни влиять на другие, и что с этим делать. Ну и так далее.
@goodwin22234 жыл бұрын
@@denisshuvalov5726 Если не секрет, для каких задач используете Clickhouse и Aerospike?
@denisshuvalov57264 жыл бұрын
@@goodwin2223 Не секрет. Aerospike - как key-value, Clickhouse как аналитическую бд ) Мы работаем с данными мобильных аппликаций. Когда пользователь совершает какое-то действие нам приходит событие, как правило мы хотим связать его либо с какой то сессией либо добавить другие данные (enrichment). Это происходит по ключу уникально идентифицирующему пользователя. Aerospike идеально подошел для этой задачи. Clickhouse хранит небольшую часть данных для наших аггрегативных репортов, как правило за последний день. Мы пишем в него данные в режиме real-time, Druid хранит уже все данные и пишут в него ночные batch процессы. Мы пробовали использовать Clickhouse для хранения всех данных, но он подходит когда запросы попадают в primary key, если нет, то он начинаем сканировать слишком много данных и время ответа становится слишком большим. Кода данных в нем немного, то это не слишком заметно.
Passing be - pushing there my unmodifiable awesome like!
@mikhail66944 жыл бұрын
public abstract class Enum
@mschief48674 жыл бұрын
Что это за Бог джавы ))
@JustForsaken4 жыл бұрын
Привет. а можно как то с тобой пройти интервью? (2 года опыта java)
@Serge_g9004 жыл бұрын
Я только начал изучать Java, вот сейчас разбираюсь с BufferedReader. Вообще не понимал о чём говорят , но просмотрел все видео, очень интересно было) Вопрос: как это разогреть кеш?
@denisshuvalov57264 жыл бұрын
@Сергей Маляренко О да, я его помню, он наводит ужас на неокрепшие умы :) Что такое кэш, я думаю, объяснять не надо. Вот представь, ты только запустил свой сервис и пока не придет хотя бы один запрос, ничего в кэшах нет и все запросы лезут в базу данных. После пары десятков запросов уже в них какая то информация закэшировалась, и ,вероятно, из поседющих ста не все полузет в базу. Теперь, когда работаешь с высокой нагрузкой, таких запросов тысячи в первые же минуты. Если все сразу пойдут в базу, то она вполне может и уйти в отказ. Поэтому новым сервисам, обычно, дают небольшую часть нагрузки, что бы кэш прогрелся.
@Serge_g9004 жыл бұрын
@@denisshuvalov5726 ясненько, спасибо большое за ответ =)
@millioner_iz_trushob4 жыл бұрын
Работаю сисадмином несколько лет.. ансибл , заббикс , баш, vbs , повершелл.. ip телефония - asterisk. Но в последнее время очень задумываюсь об изучении java программирования. Хочется сосредоточится на чем то одном
@bekzatsk2 жыл бұрын
Пом пом помм :) Классный интервью)
@tuareg774 жыл бұрын
Супер,класс!
@РадикГимадиев-ч3и4 жыл бұрын
Досмотрел до 5:30 - космос.
@dark_evil774 жыл бұрын
Как всегда лайк
@EugeneSuleimanov4 жыл бұрын
Спасибо :)
@undefined3104 жыл бұрын
пурумпурумпурум пум, возьму себе на вооружение, спс
@finalename74644 жыл бұрын
7:15 "String НИКУДА join" :-)) Никуда - точка на иврите.
@ИгорьКрасильников-ж3у3 жыл бұрын
Я знаю иврит ..но даже не заметил😃😀😅🤣
@fara0n3334 жыл бұрын
Денис инженер ! Крут )респект!
@EugeneSuleimanov4 жыл бұрын
Да, уровень крайне хороший )
@mikhail66944 жыл бұрын
уже больше месяца нет видео(
@daniilbredesku20474 жыл бұрын
У Дениса степень по computer science? просто интересно)
@denisshuvalov57264 жыл бұрын
Нету - я самоучка
@daniilbredesku20474 жыл бұрын
@@denisshuvalov5726 можно тебе по мейлу или фб задать пару вопросов на счет твоей работы? Я недалеко от Хайфы живу, тема актуальная как никогда)
@denisshuvalov57264 жыл бұрын
@@daniilbredesku2047 конечно, нет проблем - просто вбей в поиск Denis Shuvalov appsflyer. Просто не хочу почту писать в комментариях.
@maksimus.ssirotkin1124 Жыл бұрын
у меня previous == nextNode
@alexanderk37623 жыл бұрын
Я понимаю, что низкоуровневую многопоточность в java используют, но если человек отвечает с задумчивостью, значит опыт его работы не подразумевает большой практики в этом направлении и значит, что сама вакансия не подразумевает брать людей без практики. Стоит ли вообще это спрашивать? НЕ проще ли концепт спросить и современные паттерны, вроде реактора?
@EugeneSuleimanov3 жыл бұрын
Обычно, подобные вопросы задаются с целью выявить насколько человек любит углубляться при изучении материала. Для некоторых вакансий это качество крайне важно, но, не всегда. В реальной жизни эти знания применяются крайне редко. Здесь мы стаём на тонкий лёд, под которым холивар, но, без этих вопросов также можно оценить уровень подготовки человека :D
@alexanderk37623 жыл бұрын
@@EugeneSuleimanov понял, спасибо за ответ.
@mikhail66944 жыл бұрын
есть какая-то стратегия как и какие воросы задавать или импровизация?
@EugeneSuleimanov4 жыл бұрын
Безусловно, есть общие принципы, но конкретные вопросы, практически рандомны
@BtXFWkyZBtXFWkyZ4 жыл бұрын
А про Object класс не спросил...
@Vlad-cg3yd4 жыл бұрын
Прум-пум)
@barackobama3864 жыл бұрын
для джуна пойдет
@dark_evil774 жыл бұрын
Чтоо? Он не джун. Он миддл как минимум!
@denisshuvalov57264 жыл бұрын
Спасибо :)))
@AndreyDeveloper4 жыл бұрын
Senior?
@EugeneSuleimanov4 жыл бұрын
Да
@caffeinejavacode14754 жыл бұрын
я бы оценил его на Senior Dev
@pngun-gd9yb4 жыл бұрын
ты 50 минут монтировал переключение вебок??!?17717!?!7 звучит жёстко
@EugeneSuleimanov4 жыл бұрын
Нет, это запись от hangouts )
@Ofizerios4 жыл бұрын
А можно вопрос? В чем смысл собеседования вы берете на работу онлайн или как?
@EugeneSuleimanov4 жыл бұрын
Это mock интервью. Для человека проверить силы, для меня - провести интервью и опубликовать видео, для зрителей - посмотреть, как проходят интервью на практике
@SleePokeR4 жыл бұрын
@@EugeneSuleimanov Это не просто "win-win", а прям "win-win-win" ситуация)
@MrMoshell4 жыл бұрын
6 лет это машина. Давай теперь 15 лет. О чем говорить будете?)
@ВасилийГоловко-д9и4 жыл бұрын
Количество годов все-таки не показатель. По своему опыту сужу. Т.к. больше зависит от проектов, технологий, какие юзал. Можно и 15 лет проработать в одной конторе без развития, на саппорте какого-то легаси кода. Интереснее пособеседовать разработчиков каких-то топовых контор или реально топовых проектов
@EugeneSuleimanov4 жыл бұрын
Поговорить всегда есть о чем))
@Thebeamoflight59844 жыл бұрын
пум, пум пум
@thegaavr4 жыл бұрын
Евгений, думаю многим было бы удобнее, если бы Вы писали уровень разработчика с которым проходит собеседование :-)
@EugeneSuleimanov4 жыл бұрын
Это крайне субъективно, но здесь, безусловно, senior :)
@BCEMCPATb4 жыл бұрын
Eugene Suleimanov ели бы ты щас написал джун я бы бросил учебу ))
@wildjoe62594 жыл бұрын
@@BCEMCPATb я бы начал пить )))
@alexandernikolaev1744 жыл бұрын
Код разворота не отработает. Два момента поправить: while (current!=null) и return previous. Интервью отличное, собеседник позитивный и толковый.
@FightingFalcao4 жыл бұрын
Я так и не понял как это работает, но Вы совершенно правы! gist.github.com/ov-petrov/a97c0e859e108f39916db00cbb8fb891
@kolob2042 жыл бұрын
или добавить после цикла current.next = prev; так как итерация с последним элементом пропускается
@AnnSadovskaya4 жыл бұрын
Женя и Денис - интервью топ, очень интересно было слушать. И приятно осознавать, что понимаешь с большего нить интервью :)
@Individius Жыл бұрын
В решении задачи ошибка. Нужен while(current != null). В случае while(current.next != null) не переворачивается последний элемент исходного массива, у которого current.next == null
Евгений, хотел бы выразить большую благодарность за set mock интервью, эти видео мне очень помогли при прохождении собеседования, а так же остальные видео по спрингу и design patterns, в итоге получил свою первую работу :)
@AlexeySilichenko Жыл бұрын
24:36 При использовании рекурсии сложность по памяти - O(n) за счет использования рекурсивного стека, а без - O(1). 39:45 перед ретурном забыли переуказать next для новой головы, а то она остаётся оторванной =)
@EugeneSuleimanov Жыл бұрын
Да, вы правы, спасибо за уточнение, не учёл этот момент.
@nomatterwhoooo4 жыл бұрын
Вышло в рекомендациях, ничего не поняла, но было жутко интересно
@sergeistarodubov25344 жыл бұрын
Рекурсивное решение задачи в интервью. Контент реально годный)) public LinkedList reverse(Node head) { if (head == null ) return new LinkedList(); LinkedList result = reverse(head.next); result.addFirst(head); return result; }
@vlas10102 жыл бұрын
По-моему тут надо делать result.add(head) вместо addFirst. Потому что в конце рекурсии, когда head==null, мы начинаем возвращаться по стеку вызовов обратно, т.е. движемся в обратном направлении по элементам head. Поэтому в результат их надо складывать как есть.
@dzmitrydziachenka46024 жыл бұрын
Наверно это самое сильное собеседование. Вообщем спасибо очередной раз!
@EugeneSuleimanov4 жыл бұрын
Да, уровень, действительно, хороший. Спасибо за отзыв!
@FilmicFil4 жыл бұрын
У парня даже акцент проявляется по мелочи))
@ИгорьКрасильников-ж3у3 жыл бұрын
Он из израиля...у нас такой акцент...плюс в израиле английский в школе высокого уровня это даёт отпечаток
@sirojiddingroup Жыл бұрын
Which livel thats person ? middle,senior,or Junior
@EugeneSuleimanov Жыл бұрын
Senior
@sirojiddingroup Жыл бұрын
@@EugeneSuleimanov Thank you for ansver and attention . That interview was great .
@МаксимГорячев-м1л4 жыл бұрын
@Denis Shuvalov @Eugene Suleimanov Какие задачи ещё могут быть при прохождении собеседования? У меня с решением задач в подобном формате туговато, хотелось бы потренироваться
@alexandrguravskiy99852 жыл бұрын
Все, задачу не решил на интервью перевод в джуны!!! 😁
@svichkar_tech4 жыл бұрын
По grpc ... Первая буква в аббревиатуре, говорят, ничего не имеет общего с Гугл)
@TimC0x4 жыл бұрын
general-purpose RPC
@svichkar_tech4 жыл бұрын
@@TimC0x are you sure?
@EugeneSuleimanov4 жыл бұрын
Возможно, я точной расшифровки не видел нигде, но точно знаю, что разработано компанией Google.
@vladimirvychuzhanin41053 жыл бұрын
Yes ! grpc.io/about/ The story behind gRPC gRPC was initially created by Google, which has used a single "general-purpose RPC" infrastructure called Stubby to connect the large number of microservices running within and across its data centers for over a decade
@elpirato54284 жыл бұрын
Жалко нету видео о MV(C, P, VM) шаблонах, поскольку это самая тяжелая тема, которую каждый объясняет по своему и при этом, на своих готовых проектах, а не с нуля.
@denisshuvalov57264 жыл бұрын
Хорошо, что меня об этом не спросили, я бы точно поплыл :)
@АлександрБугримов-о1е4 жыл бұрын
Очень крутое собеседование! Спасибо за видео)
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв :)
@kekster22044 жыл бұрын
здравствуйте Евгений, спасибо вам за ваши видео! В тех, что я посмотрел вы используете java 11 и у меня возник вопрос, насколько новичку необходимо знать предыдущие версии версии (5 и 8) и на каком уровне.
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв! Я бы сразу изучал 11+. На данный момент это наиболее актуально.
@lWeRl3 жыл бұрын
Норм, ответы супер.
@Vikisnevistay4 жыл бұрын
Евгений, спасибо огромное за старания. Потрясающий канал, особенно помогло при подготовке к собеседованию.
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв! Рад, что материал оказался полезен)
@oleh_marchenko4 жыл бұрын
Разве ConcurrentHashMap на каждый бакет создает свой Lock? Если я правильно все помню, то ConcurrentHashMap объединяет бакеты в группы и на каждую группу создает Lock.
@EugeneSuleimanov4 жыл бұрын
Да, верно, локи ставятся по группам.
@denisshuvalov57264 жыл бұрын
Интересно, можно покопаться в коде, из того что написано тут локи создаютса на бакетах. > ConcurrentHashMap maintains a list of 16 locks by default (number of locks equal to the initial capacity , which is by default 16) each of which is used to lock on a single bucket of the Map Хотя может и поменялось уже. javahungry.blogspot.com/2015/02/how-concurrenthashmap-works-in-java-internal-implementation.html
@englishLevelUpFromA24 жыл бұрын
Евгений, вы лучший
@phil29644 жыл бұрын
Супер
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв!
@artemkostrych95374 жыл бұрын
Спасибо огромное, можно побольше интервю с D2 - D3 левелом))
@EugeneSuleimanov4 жыл бұрын
Спасиьо за отзыв!
@vadympylypchenko58014 жыл бұрын
Качественный контент интервью. Спасибо, Евгений!
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв!
@MrDepava4 жыл бұрын
Спасибо огромное, посмотрел с удовольствием!
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв!
@andreyb45954 жыл бұрын
Пурум пурум пум и в продакшен) Спасибо за видео!
@EugeneSuleimanov4 жыл бұрын
Спасибо за отзыв :)
@AlexeySilichenko Жыл бұрын
8:51 HashMap не является коллекцией, т.к. не реализует интерфейс Collection. Это всё же принципиально, хотя бы потому что Collection непосредственно связан с процессом итерирования, а мапа не поддерживает итерирование непосредственно. Это как исключение называть ошибкой или полагать что Throwable это интерфейс. Часто мапы приплетают к коллекциям на собеседованиях: либо собеседователи, либо собеседуемые. Было бы намного лучше, если бы эта тема использовалась в качестве вопроса с подвохом.
@EugeneSuleimanov Жыл бұрын
Она относится к коллекциям (Collections Framework), хоть и не наследуется от интерфейса Collection. Но безусловно - это часть фреймворка. Этот вопрос поднимался много раз в сообществе разработчиков и ответ был дан. docs.oracle.com/javase/tutorial/collections/interfaces/map.html В документации он относится к этому фреймворку. И в смой доке это упоминается.