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 - Заключение
Аж дух захватывает, и какой контраст по сравнению с собеседованием джуниора. Это видео не только демонстрирует интервью, но и носит обучающий характер. Спасибо, Евгений!!!
Большое спасибо Евгению за предоставленную возможность и время. Могу только представить сколько сил отнимает создание подобного контента. Когда я только начинал и не знал как проходит интервью, что спрашивают на что смотрят, мне очень не хватало такого материала. п.с. Саму задачку я потом довольно быстро решил на скале рекурсивно def rev[T](xs: List[T]): List[T] = { xs match { case List() => xs case head :: tail => rev(tail) ::: List(head) } }
@@andrewshapovalov484 На скале, как правило, это более идиоматичный подход. Любой алгоритм можно написать как рекурсивно так и итеративно, чаще при рекурсии меньше дополнительных переменных и состояний. Хотя даже если отбросить производительность, то я бы не дал однозначного ответа когда какой подход лучше. На скале можно и без реукрсии в одну строчку решить через foldLeft, но после драки кулаками не машут :)
Евгений, хотел бы выразить большую благодарность за set mock интервью, эти видео мне очень помогли при прохождении собеседования, а так же остальные видео по спрингу и design patterns, в итоге получил свою первую работу :)
Евгений, я не поленился зайти сюда и выразить благодарность за труды. Я изучаю паттерны проектирования по твоим видео, прошел курс по hibernate у тебя на сайте (не совсем курс, но этот минимум уже помог мне больше узнать о технологии). Из всех преподавателей на ютубе вы выглядите более толковым их всех, ваш труд помогает нам. Спасибо!!!
@Denis Shuvalov @Eugene Suleimanov Какие задачи ещё могут быть при прохождении собеседования? У меня с решением задач в подобном формате туговато, хотелось бы потренироваться
Рекурсивное решение задачи в интервью. Контент реально годный)) public LinkedList reverse(Node head) { if (head == null ) return new LinkedList(); LinkedList result = reverse(head.next); result.addFirst(head); return result; }
По-моему тут надо делать result.add(head) вместо addFirst. Потому что в конце рекурсии, когда head==null, мы начинаем возвращаться по стеку вызовов обратно, т.е. движемся в обратном направлении по элементам head. Поэтому в результат их надо складывать как есть.
здравствуйте Евгений, спасибо вам за ваши видео! В тех, что я посмотрел вы используете java 11 и у меня возник вопрос, насколько новичку необходимо знать предыдущие версии версии (5 и 8) и на каком уровне.
В решении задачи ошибка. Нужен while(current != null). В случае while(current.next != null) не переворачивается последний элемент исходного массива, у которого current.next == null
Работаю сисадмином несколько лет.. ансибл , заббикс , баш, vbs , повершелл.. ip телефония - asterisk. Но в последнее время очень задумываюсь об изучении java программирования. Хочется сосредоточится на чем то одном
Я только начал изучать Java, вот сейчас разбираюсь с BufferedReader. Вообще не понимал о чём говорят , но просмотрел все видео, очень интересно было) Вопрос: как это разогреть кеш?
@Сергей Маляренко О да, я его помню, он наводит ужас на неокрепшие умы :) Что такое кэш, я думаю, объяснять не надо. Вот представь, ты только запустил свой сервис и пока не придет хотя бы один запрос, ничего в кэшах нет и все запросы лезут в базу данных. После пары десятков запросов уже в них какая то информация закэшировалась, и ,вероятно, из поседющих ста не все полузет в базу. Теперь, когда работаешь с высокой нагрузкой, таких запросов тысячи в первые же минуты. Если все сразу пойдут в базу, то она вполне может и уйти в отказ. Поэтому новым сервисам, обычно, дают небольшую часть нагрузки, что бы кэш прогрелся.
24:36 При использовании рекурсии сложность по памяти - O(n) за счет использования рекурсивного стека, а без - O(1). 39:45 перед ретурном забыли переуказать next для новой головы, а то она остаётся оторванной =)
А вот ни одного вопроса к Денису я не вижу в комментах. Мне, например, интересно было бы узнать, на какой позиции он работает, чем конкретно занимается каждый день. В целом побольше о человеке с профессиональной стороны.
@Иван Борзов Работаю как Big Data Engineer в Appsflyer. В основном занимаюсь оптимизацией процессов Spark'a и Druid'a, поиском новых решений для насущных проблем. На данный момент работаю над так называемым capacity planning для одного из наших Druid кластеров. Мы ожидаем много новых клиентов с китайского рынка и хотим понять сможем ли мы выдержать такую нагрузку. К примеру как наш кластер поведет себя при горизонтальном масштабировании, улучшится ли и на сколько performance. А при смене настроек, а с другими типами машин? Какие на текущий момент bottlenecks. А что если паттерн запросов изменится, и как будут взаимодействовать запросы которые сканируют большое количество данных (report queries) с точечными (ad-hoc queries). Будут ли одни влиять на другие, и что с этим делать. Ну и так далее.
@@goodwin2223 Не секрет. Aerospike - как key-value, Clickhouse как аналитическую бд ) Мы работаем с данными мобильных аппликаций. Когда пользователь совершает какое-то действие нам приходит событие, как правило мы хотим связать его либо с какой то сессией либо добавить другие данные (enrichment). Это происходит по ключу уникально идентифицирующему пользователя. Aerospike идеально подошел для этой задачи. Clickhouse хранит небольшую часть данных для наших аггрегативных репортов, как правило за последний день. Мы пишем в него данные в режиме real-time, Druid хранит уже все данные и пишут в него ночные batch процессы. Мы пробовали использовать Clickhouse для хранения всех данных, но он подходит когда запросы попадают в primary key, если нет, то он начинаем сканировать слишком много данных и время ответа становится слишком большим. Кода данных в нем немного, то это не слишком заметно.
Разве ConcurrentHashMap на каждый бакет создает свой Lock? Если я правильно все помню, то ConcurrentHashMap объединяет бакеты в группы и на каждую группу создает Lock.
Интересно, можно покопаться в коде, из того что написано тут локи создаютса на бакетах. > 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
Жалко нету видео о MV(C, P, VM) шаблонах, поскольку это самая тяжелая тема, которую каждый объясняет по своему и при этом, на своих готовых проектах, а не с нуля.
Это mock интервью. Для человека проверить силы, для меня - провести интервью и опубликовать видео, для зрителей - посмотреть, как проходят интервью на практике
Я понимаю, что низкоуровневую многопоточность в java используют, но если человек отвечает с задумчивостью, значит опыт его работы не подразумевает большой практики в этом направлении и значит, что сама вакансия не подразумевает брать людей без практики. Стоит ли вообще это спрашивать? НЕ проще ли концепт спросить и современные паттерны, вроде реактора?
Обычно, подобные вопросы задаются с целью выявить насколько человек любит углубляться при изучении материала. Для некоторых вакансий это качество крайне важно, но, не всегда. В реальной жизни эти знания применяются крайне редко. Здесь мы стаём на тонкий лёд, под которым холивар, но, без этих вопросов также можно оценить уровень подготовки человека :D
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
Количество годов все-таки не показатель. По своему опыту сужу. Т.к. больше зависит от проектов, технологий, какие юзал. Можно и 15 лет проработать в одной конторе без развития, на саппорте какого-то легаси кода. Интереснее пособеседовать разработчиков каких-то топовых контор или реально топовых проектов
8:51 HashMap не является коллекцией, т.к. не реализует интерфейс Collection. Это всё же принципиально, хотя бы потому что Collection непосредственно связан с процессом итерирования, а мапа не поддерживает итерирование непосредственно. Это как исключение называть ошибкой или полагать что Throwable это интерфейс. Часто мапы приплетают к коллекциям на собеседованиях: либо собеседователи, либо собеседуемые. Было бы намного лучше, если бы эта тема использовалась в качестве вопроса с подвохом.
Она относится к коллекциям (Collections Framework), хоть и не наследуется от интерфейса Collection. Но безусловно - это часть фреймворка. Этот вопрос поднимался много раз в сообществе разработчиков и ответ был дан. docs.oracle.com/javase/tutorial/collections/interfaces/map.html В документации он относится к этому фреймворку. И в смой доке это упоминается.
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 - Заключение
Спасибо вам, добрый человек :)
@@EugeneSuleimanov и вам за видео! Полгода назад ничего не понял в этом интервью. А сейчас наоборот все зашло. Растем :).
@@EugeneSuleimanov а есть ли у вас возможность закрепить этот комментарий с тайм-кодами в верху. УдобоПросматриваемость видео от этого повысится.
@@romanfirsov89 сделано, спасибо :)
Аж дух захватывает, и какой контраст по сравнению с собеседованием джуниора. Это видео не только демонстрирует интервью, но и носит обучающий характер. Спасибо, Евгений!!!
Очень интересно смотреть интервью с опытными разработчиками. Пока этот парень один из лучших. Быстро и ясно отвечает на все вопросы
Большое спасибо Евгению за предоставленную возможность и время.
Могу только представить сколько сил отнимает создание подобного контента.
Когда я только начинал и не знал как проходит интервью, что спрашивают на что смотрят, мне очень не хватало такого материала.
п.с.
Саму задачку я потом довольно быстро решил на скале рекурсивно
def rev[T](xs: List[T]): List[T] = {
xs match {
case List() => xs
case head :: tail => rev(tail) ::: List(head)
}
}
А зачем рекурсия на плоском списке? На 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;
}
}
@@andrewshapovalov484 На скале, как правило, это более идиоматичный подход. Любой алгоритм можно написать как рекурсивно так и итеративно, чаще при рекурсии меньше дополнительных переменных и состояний. Хотя даже если отбросить производительность, то я бы не дал однозначного ответа когда какой подход лучше.
На скале можно и без реукрсии в одну строчку решить через foldLeft, но после драки кулаками не машут :)
@@denisshuvalov5726 Ну на Java тоже можно, в одну строчку, подключил Guava и Lists.reverse(). Видидимо таск был из "другого круга понятий"-).
@@denisshuvalov5726 денис, спасибо за то, что приняли участие в этом интервью. Очень интересно было смотреть
Денис дай совет как учить java.util.cuncurrent
Крутой, думающий разработчик., интересно объяснял некоторые вещи. Спасибо за прекрасный контент!
Спасибо за отзыв!
с 2:29 начали что-то на эльфийском
Ахаах
У собеседуемого ещё и иврит местами проскакивает ))
Супер интервью. То, что давно ждал - общение с скилованными разработчиками. Ждем ссылок на ресурсы, где можно это прочитать
Спасибо за отзыв!
Более того, Денис еще и очень круто формулирует мысли и объясняет. Реально, было бы даже интересно послушать ответы на какие-то простые вопросы.
Женя и Денис - интервью топ, очень интересно было слушать. И приятно осознавать, что понимаешь с большего нить интервью :)
Евгений, хотел бы выразить большую благодарность за set mock интервью, эти видео мне очень помогли при прохождении собеседования, а так же остальные видео по спрингу и design patterns, в итоге получил свою первую работу :)
Отличный формат! Услышать, как какие-то вещи представляют и объясняют практикующие специалисты, бесценно!
Спасибо, Евгений за ваш контент, очень интересно и информативно. Желаю вам успехов!
Спасибо за отзыв и пожелания!
Спасибо вам, это очень интересно и при надлежащем использовании может быть очень полезно.
Евгений, я не поленился зайти сюда и выразить благодарность за труды. Я изучаю паттерны проектирования по твоим видео, прошел курс по hibernate у тебя на сайте (не совсем курс, но этот минимум уже помог мне больше узнать о технологии). Из всех преподавателей на ютубе вы выглядите более толковым их всех, ваш труд помогает нам. Спасибо!!!
Евгений, спасибо огромное за старания. Потрясающий канал, особенно помогло при подготовке к собеседованию.
Спасибо за отзыв! Рад, что материал оказался полезен)
Какое мотивационное видео!
Пошёл учиться!)
Спасибо за видео! Из всей серии это пока лучшее)
Качественный контент интервью. Спасибо, Евгений!
Спасибо за отзыв!
Евгений, очень всё круто, классно, что нашёл материал такого вектора, спасибо вам за старания и работу, отправил письмо на почту, прочтите пожалуйста!
Спасибо огромное, посмотрел с удовольствием!
Спасибо за отзыв!
Очень крутое собеседование! Спасибо за видео)
Спасибо за отзыв :)
Очень крутое интервью по Java
Наверно это самое сильное собеседование. Вообщем спасибо очередной раз!
Да, уровень, действительно, хороший. Спасибо за отзыв!
Шикарное интревью! Спасибо огромное!
Спасибо за отзыв!
@@EugeneSuleimanov с нетерпением жду новых выпусков. Очень надеюсь, что будешь продолжать!
Супер,класс!
Пурум пурум новый собес
Запись запускается секунд 10, а заполнить паузу чем-то нужно ))
public abstract class Enum
Евгений, думаю многим было бы удобнее, если бы Вы писали уровень разработчика с которым проходит собеседование :-)
Это крайне субъективно, но здесь, безусловно, senior :)
Eugene Suleimanov ели бы ты щас написал джун я бы бросил учебу ))
@@BCEMCPATb я бы начал пить )))
Евгений, вы лучший
было бы неплохо, чтоб в описании хотя бы было написано про того, с кем общаетесь
Допустим:
Время работы
джун, мид, синиор
Как всегда лайк
Спасибо :)
Спасибо огромное, можно побольше интервю с D2 - D3 левелом))
Спасиьо за отзыв!
Норм, ответы супер.
Passing be - pushing there my unmodifiable awesome like!
@Denis Shuvalov @Eugene Suleimanov Какие задачи ещё могут быть при прохождении собеседования? У меня с решением задач в подобном формате туговато, хотелось бы потренироваться
Евгений почему вам не создать телеграм группу?
Супер
Спасибо за отзыв!
Рекурсивное решение задачи в интервью. Контент реально годный))
public LinkedList reverse(Node head) {
if (head == null ) return new LinkedList();
LinkedList result = reverse(head.next);
result.addFirst(head);
return result;
}
По-моему тут надо делать result.add(head) вместо addFirst. Потому что в конце рекурсии, когда head==null, мы начинаем возвращаться по стеку вызовов обратно, т.е. движемся в обратном направлении по элементам head. Поэтому в результат их надо складывать как есть.
Привет. а можно как то с тобой пройти интервью? (2 года опыта java)
Рекурсивный разворот связного списка:
public static ListNode reverse(ListNode head) {
return reverse(null, head);
}
private static ListNode reverse(ListNode prev, ListNode node) {
if (node.getNext() == null) {
node.setNext(prev);
return node;
}
ListNode head = reverse(node, node.getNext());
node.setNext(prev);
return head;
}
Пом пом помм :) Классный интервью)
Денис инженер ! Крут )респект!
Да, уровень крайне хороший )
здравствуйте Евгений, спасибо вам за ваши видео! В тех, что я посмотрел вы используете java 11 и у меня возник вопрос, насколько новичку необходимо знать предыдущие версии версии (5 и 8) и на каком уровне.
Спасибо за отзыв! Я бы сразу изучал 11+. На данный момент это наиболее актуально.
Досмотрел до 5:30 - космос.
парень молодец, держался на позитиве в стрессовой ситуации(собеседование), мне к сожалению такого качества не хватает
Так он уже миллион собесов прошел.
Спасибо, все приходит с годами. Я первое время тоже очень волновался на собеседованиях.
100 собеседований в помощь
В решении задачи ошибка. Нужен while(current != null). В случае while(current.next != null) не переворачивается последний элемент исходного массива, у которого current.next == null
Пурум пурум пум и в продакшен) Спасибо за видео!
Спасибо за отзыв :)
Код разворота не отработает. Два момента поправить:
while (current!=null) и return previous.
Интервью отличное, собеседник позитивный и толковый.
Я так и не понял как это работает, но Вы совершенно правы!
gist.github.com/ov-petrov/a97c0e859e108f39916db00cbb8fb891
или добавить после цикла current.next = prev;
так как итерация с последним элементом пропускается
Нерекурсивный разворот связного списка:
public static ListNode reverse2(ListNode head) {
ListNode prev = null;
ListNode node = head;
while (node != null) {
ListNode origNext = node.getNext();
node.setNext(prev);
prev = node;
node = origNext;
}
return prev;
}
Работаю сисадмином несколько лет.. ансибл , заббикс , баш, vbs , повершелл.. ip телефония - asterisk. Но в последнее время очень задумываюсь об изучении java программирования. Хочется сосредоточится на чем то одном
Я только начал изучать Java, вот сейчас разбираюсь с BufferedReader. Вообще не понимал о чём говорят , но просмотрел все видео, очень интересно было)
Вопрос: как это разогреть кеш?
@Сергей Маляренко О да, я его помню, он наводит ужас на неокрепшие умы :)
Что такое кэш, я думаю, объяснять не надо. Вот представь, ты только запустил свой сервис и пока не придет хотя бы один запрос, ничего в кэшах нет и все запросы лезут в базу данных. После пары десятков запросов уже в них какая то информация закэшировалась, и ,вероятно, из поседющих ста не все полузет в базу. Теперь, когда работаешь с высокой нагрузкой, таких запросов тысячи в первые же минуты. Если все сразу пойдут в базу, то она вполне может и уйти в отказ. Поэтому новым сервисам, обычно, дают небольшую часть нагрузки, что бы кэш прогрелся.
@@denisshuvalov5726 ясненько, спасибо большое за ответ =)
Прум-пум)
уже больше месяца нет видео(
24:36
При использовании рекурсии сложность по памяти - O(n) за счет использования рекурсивного стека, а без - O(1).
39:45
перед ретурном забыли переуказать next для новой головы, а то она остаётся оторванной =)
Да, вы правы, спасибо за уточнение, не учёл этот момент.
Вышло в рекомендациях, ничего не поняла, но было жутко интересно
пурумпурумпурум пум, возьму себе на вооружение, спс
Что это за Бог джавы ))
есть какая-то стратегия как и какие воросы задавать или импровизация?
Безусловно, есть общие принципы, но конкретные вопросы, практически рандомны
А вот ни одного вопроса к Денису я не вижу в комментах. Мне, например, интересно было бы узнать, на какой позиции он работает, чем конкретно занимается каждый день. В целом побольше о человеке с профессиональной стороны.
@Иван Борзов Работаю как Big Data Engineer в Appsflyer. В основном занимаюсь оптимизацией процессов Spark'a и Druid'a, поиском новых решений для насущных проблем. На данный момент работаю над так называемым capacity planning для одного из наших Druid кластеров. Мы ожидаем много новых клиентов с китайского рынка и хотим понять сможем ли мы выдержать такую нагрузку. К примеру как наш кластер поведет себя при горизонтальном масштабировании, улучшится ли и на сколько performance. А при смене настроек, а с другими типами машин? Какие на текущий момент bottlenecks. А что если паттерн запросов изменится, и как будут взаимодействовать запросы которые сканируют большое количество данных (report queries) с точечными (ad-hoc queries). Будут ли одни влиять на другие, и что с этим делать. Ну и так далее.
@@denisshuvalov5726 Если не секрет, для каких задач используете Clickhouse и Aerospike?
@@goodwin2223 Не секрет. Aerospike - как key-value, Clickhouse как аналитическую бд )
Мы работаем с данными мобильных аппликаций. Когда пользователь совершает какое-то действие нам приходит событие, как правило мы хотим связать его либо с какой то сессией либо добавить другие данные (enrichment). Это происходит по ключу уникально идентифицирующему пользователя. Aerospike идеально подошел для этой задачи.
Clickhouse хранит небольшую часть данных для наших аггрегативных репортов, как правило за последний день. Мы пишем в него данные в режиме real-time, Druid хранит уже все данные и пишут в него ночные batch процессы. Мы пробовали использовать Clickhouse для хранения всех данных, но он подходит когда запросы попадают в primary key, если нет, то он начинаем сканировать слишком много данных и время ответа становится слишком большим. Кода данных в нем немного, то это не слишком заметно.
Разве ConcurrentHashMap на каждый бакет создает свой Lock?
Если я правильно все помню, то ConcurrentHashMap объединяет бакеты в группы и на каждую группу создает Lock.
Да, верно, локи ставятся по группам.
Интересно, можно покопаться в коде, из того что написано тут локи создаютса на бакетах.
> 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
Жалко нету видео о MV(C, P, VM) шаблонах, поскольку это самая тяжелая тема, которую каждый объясняет по своему и при этом, на своих готовых проектах, а не с нуля.
Хорошо, что меня об этом не спросили, я бы точно поплыл :)
У Дениса степень по computer science? просто интересно)
Нету - я самоучка
@@denisshuvalov5726 можно тебе по мейлу или фб задать пару вопросов на счет твоей работы? Я недалеко от Хайфы живу, тема актуальная как никогда)
@@daniilbredesku2047 конечно, нет проблем - просто вбей в поиск Denis Shuvalov appsflyer. Просто не хочу почту писать в комментариях.
я бы оценил его на Senior Dev
У парня даже акцент проявляется по мелочи))
Он из израиля...у нас такой акцент...плюс в израиле английский в школе высокого уровня это даёт отпечаток
А про Object класс не спросил...
Which livel thats person ? middle,senior,or Junior
Senior
@@EugeneSuleimanov Thank you for ansver and attention . That interview was great .
7:15 "String НИКУДА join" :-))
Никуда - точка на иврите.
Я знаю иврит ..но даже не заметил😃😀😅🤣
Senior?
Да
для джуна пойдет
Чтоо? Он не джун. Он миддл как минимум!
Спасибо :)))
А можно вопрос? В чем смысл собеседования вы берете на работу онлайн или как?
Это mock интервью. Для человека проверить силы, для меня - провести интервью и опубликовать видео, для зрителей - посмотреть, как проходят интервью на практике
@@EugeneSuleimanov Это не просто "win-win", а прям "win-win-win" ситуация)
ты 50 минут монтировал переключение вебок??!?17717!?!7 звучит жёстко
Нет, это запись от hangouts )
у меня previous == nextNode
с самого начала сnало понятно , что тип шарящий.
Я понимаю, что низкоуровневую многопоточность в java используют, но если человек отвечает с задумчивостью, значит опыт его работы не подразумевает большой практики в этом направлении и значит, что сама вакансия не подразумевает брать людей без практики. Стоит ли вообще это спрашивать? НЕ проще ли концепт спросить и современные паттерны, вроде реактора?
Обычно, подобные вопросы задаются с целью выявить насколько человек любит углубляться при изучении материала. Для некоторых вакансий это качество крайне важно, но, не всегда. В реальной жизни эти знания применяются крайне редко. Здесь мы стаём на тонкий лёд, под которым холивар, но, без этих вопросов также можно оценить уровень подготовки человека :D
@@EugeneSuleimanov понял, спасибо за ответ.
По grpc ... Первая буква в аббревиатуре, говорят, ничего не имеет общего с Гугл)
general-purpose RPC
@@TimC0x are you sure?
Возможно, я точной расшифровки не видел нигде, но точно знаю, что разработано компанией Google.
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
пум, пум пум
Все, задачу не решил на интервью перевод в джуны!!! 😁
6 лет это машина. Давай теперь 15 лет. О чем говорить будете?)
Количество годов все-таки не показатель. По своему опыту сужу. Т.к. больше зависит от проектов, технологий, какие юзал. Можно и 15 лет проработать в одной конторе без развития, на саппорте какого-то легаси кода. Интереснее пособеседовать разработчиков каких-то топовых контор или реально топовых проектов
Поговорить всегда есть о чем))
8:51 HashMap не является коллекцией, т.к. не реализует интерфейс Collection. Это всё же принципиально, хотя бы потому что Collection непосредственно связан с процессом итерирования, а мапа не поддерживает итерирование непосредственно. Это как исключение называть ошибкой или полагать что Throwable это интерфейс.
Часто мапы приплетают к коллекциям на собеседованиях: либо собеседователи, либо собеседуемые. Было бы намного лучше, если бы эта тема использовалась в качестве вопроса с подвохом.
Она относится к коллекциям (Collections Framework), хоть и не наследуется от интерфейса Collection. Но безусловно - это часть фреймворка. Этот вопрос поднимался много раз в сообществе разработчиков и ответ был дан.
docs.oracle.com/javase/tutorial/collections/interfaces/map.html
В документации он относится к этому фреймворку. И в смой доке это упоминается.