Тестовое собеседование Java разработчика #25 - Алексей Пригода
Vložit
- čas přidán 4. 07. 2024
- Кандидат - действующий мидл Java разработчик - Алексей Пригода.
Алексей работает Java разработчиком в течение двух лет в аутстаф компании.
Материалы для разработчиков:
proselyte.net/
Телеграмм канал для общения:
t.me/pse_club
00:00:00 Вступление.
00:00:51 Знакомство.
00:14:27 Решение алгоритмической задачи.
00:41:50 Системный дизайн CZcams.
01:04:22 Дополнительные вопросы.
01:12:10 Ответы на вопросы кандидата.
01:14:21 Финал.
Ещё не смотрел ,но огромное Вам спасибо, Евгений !❤
Спасибо за отзыв :)
Отличное видео! Продолжай данный вид интервью, вопросы про дизайн просто топ!!!
Спасибо за отзыв!
Женя, спасибо за интервью! Думал, что будет страшно смотреть, но в целом ты прав, что всё получилось хорошо. Было очень приятно пообщаться!
Конечно, хотелось блеснуть техническими знаниями, но, на мок-интервью я шёл в первую очередь узнать свои пробелы (с чем мы успешно справились). Будем работать)))
Тебе спасибо за время, Лёша!
Взаимно, было очень приятно пообщаться :)
Спасибо, было приятно смотреть интервью, очень уверенные и разумные ответы.
Скажи пожалуйста, а задачи по типу "сделать автоматическое тестирование через инструкции постман" ты сам себе ставишь или такое от лида/сеньора прилетает?
@@katefedorova624 Спасибо!
Задача была от лида, и было это когда я только пришёл на проект джуном (допускаю, что возможно это был один из способов занять меня :D).
У нас скопилась довольно обширная коллекция таких тестов, лид рассматривал это как один из вариантов теста API. Я проверил эту возможность и довёл до рабочего решения. В итоге этот вариант не пригодился и не был интегрирован.
@@Guhar4k понятно) очень любопытно, как всё устроено в других проектах
Было очень интересно!!! Евгению, как всегда огромная благодарность👍👍👍
Спасибо за отзыв!
Спасибо большое за такой формат собеседования!! Сам мечу в FAANG, поэтому начинаю разбираться c форматом System Design интервью!
Спасибо за отзыв :)
Спасибо огромное!
Спасибо за комментарий!
Большое спасибо за проделанную работу. Интересно смотреть интервью мидл, сеньер разработчиков!
Спасибо за отзыв!
Познавательно. Спасибо. Идея с превью в начале ролика хорошая, передаёт кратко содержимое и настраивает на просмотр.
Спасибо за отзыв!
Спасибо! Очень интересно!
Спасибо за отзыв!
Спасибо за видео 🤝
Спасибо за отзыв!
Спасибо, Ваши видео помогают в обучении.
Спасибо за комментарий! Рад, что материал оказался полезен.
Отличное собеседование, пробежались по многим темам, самые интересные вопросы - "как вы ... " по текущей работе,
при этом в вопросах много информации по теме, спасибо.
Спасибо за отзыв :)
Ооо, то что нужно! Еду в штаты, там как раз упор на дизайн. Спасибо, Евгений!
Спасибо за комментарий! Надеюсь, материал будет полезен :)
реферал дать ?
@@UFOBroCaptainа можно??
Faang формат интервью тоже очень интересный. Спасибо, Евгений.
Большое спасибо за отзыв!
1:22 Ха-ха! Тоже 1.5 года на проекте и не понимаю, что он делает 😂
Отличный формат видео, более оживленный) Евгений, подскажите пожалуйста, что бы вы порекомендовали почитать/посмотреть по system design из актуального сегодня?
Спасибо за отзыв!
Я оставлю полный список рекомендаций в разборе интервью. Материалы по системному дизайну будут там.
Круто
Спасибо за комментарий!
полезно
Спасибо за отзыв!
Интересное видео, при прохождении курса Java в онлайн школе мы изучали строки и там была такая задачка, мб где то недопонимаю, почему "миддл"? Потому что он знает Spring? А я еще нет?
Задачку можно было сетом решить вроде
Складывать символы в сет, проверяя, есть ли в нем уже такой символ, если есть, то создавать новый сет, при этом иметь переменную, в которой будет изначально пустой сет и с ним будет сравниваться по длине наш рабочий, в случае превышения размера, обновлять ссылку в переменной на наш рабочий сет
Не смотрел ещё, как решил задачу, но для подобного рода задач придумал алгоритм не так давно. Делаешь структуру, например линкед лист. Заводишь инт результат. Проходишься в цикле по строке. Смотришь, есть ли в листе этот символ. Если есть, то удаляешь с начала списка симовлы до тех пор, пока он не будет содержаться там. В любом случае добавляешь елемент в конец и в результат добавляешь маусимум от пары длина списка - результат.
Но кажется, это не очень быстро
Не думаю, что через LinkedList оптимальное решение, ведь поиск по нему - O(n).
@@EugeneSuleimanov конечно не оптимально. Но как решение в лоб работает)
Задачу неповторяющихся символов проще всего через последовательный граф-дерево. Или перепоручить ее BingChat-у: ======> Java: в строке найти длину самой длинной подстроки из неповторяющихся символов =========> Для того чтобы найти длину самой длинной подстроки из неповторяющихся символов в строке на Java, можно использовать алгоритм "скользящего окна". Этот алгоритм работает следующим образом:
1. Создаем пустой HashSet.
2. Инициализируем два указателя - left и right - в начало строки.
3. Перемещаем правый указатель вправо до тех пор, пока не встретим повторяющийся символ.
4. Запоминаем длину текущей подстроки без повторяющихся символов.
5. Перемещаем левый указатель вправо до тех пор, пока не удалим повторяющийся символ из HashSet.
6. Повторяем шаги 3-5 до конца строки и запоминаем максимальную длину подстроки без повторяющихся символов.
Вот пример кода на Java:
```java
public static int lengthOfLongestSubstring(String s) {
Set set = new HashSet();
int left = 0;
int right = 0;
int maxLength = 0;
while (right < s.length()) {
if (!set.contains(s.charAt(right))) {
set.add(s.charAt(right));
maxLength = Math.max(maxLength, set.size());
right++;
} else {
set.remove(s.charAt(left));
left++;
}
}
return maxLength;
}
```
Спасибо за комментарий!
тут 2 указателя и всё
Отличное интервью, сделал себе пометки что подтянуть надо, у меня получился чуть другой вариант, без мапы но с "прыгающим" назад курсором. Для любителей кода
public static void main(String[] args) {
String s = "abcadefa";
Set chars = new HashSet();
int maxLen = 0;
for(int i=0; i
Спасибо за отзыв!
Выглядит как рабочий вариант - нужно будет толко через тесты прогнать.
зачем i -= chars.size(); ? Вазш код не работает на первой строке из примера
public int lengthOfLongestSubstring(String s){
if(s.length() == 0) return 0;
Set chars = new HashSet();
int maxLen = 0;
for(int i=0; i
можно ещё проще:
String s = "bbbbbbb";
int ans = 0;
char[] c = s.toCharArray();
for(int i = 0; i < c.length - 1; i++) {
for(int j = i + 1; j < c.length; j++) {
if(c[i] == c[j]) {
if(ans < j - i) {
ans = j - i;
}
break;
}
}
}
Здравствуйте, Евгений,... По поводу задачки про стринги, где нужно найти самую длинную из неповторяющихся символов... Здесь, мне кажется, очень помогут Set ..... Через Set решать. Будет мало кода довольно... Хотя, не уверен, что работать будет быстрее... СПС )))))))
Спасибо за комментарий. Если приведён пример реализации - будет отлично. Я, к сожалению, на данный момент не вижу решения через Set.
@@EugeneSuleimanov Сейчас попробую.... привести...... СПС..
Эту задачу можно решить через sliding window + Map, чтобы запоминать позицию символа в строке, на которую нужно сдвигать наше "окно", если пришел повторяющийся символ. А вообще эта задача с литкода под номером 3))
@@LacqueredNoCap Вот решение на Set-e от BingChat :
```
public static int lengthOfLongestSubstring(String s) {
Set set = new HashSet();
int left = 0;
int right = 0;
int maxLength = 0;
while (right < s.length()) {
if (!set.contains(s.charAt(right))) {
set.add(s.charAt(right));
maxLength = Math.max(maxLength, set.size());
right++;
} else {
set.remove(s.charAt(left));
left++;
}
}
return maxLength;
}
@@madcalm2024 интересно, опробую. Спасибо
Даёшь System Design !
Обязательно, скоро начну публиковать видео отдельно по нему :)
@@EugeneSuleimanov Недавно проходил System Design в Авито. Всё было хорошо, интервьюер остался доволен. Хвалил. Пришёл отказ. Сейчас для меня очень не понятны критерии таких интервью и материалы для подготовки.
@@konstantinemelyanov1684 могли прост обнайтовивший другого кандидата, который запросил более низкую ЗП. Масса вариантов.
Формат интервью отличный, но для этого нужен быть синьор на той стороне. Человек за 2 года не понял что его проект делает, а тут ему Ютуб надо написать...
Да, формат не самый простой - перегнул с уровнем вопросов в ютом случае.
И спасибо за отзыв!
Я уж думал, что для джуна сложноватые вопросы, а это миддл) фух)
А какой смысл на интервью рассказывать сценарий решения задачи?
Обычно происходит так: продумал 5 минут, всё, дальше можно не решать, свободен.
Не понял задачу, значит на работе не поймёт задачу с первого раза.
Отакої
Люди, подскажите книгу мощную по stream API, а то я щас с ума сойду, как работать со стримом. Весь ютуб в простых примерах, а у меня задания сложные 😪
А есть пример задания?
@@Guhar4k Дан массив студентов с оценками по предметам. Найти (необходимо получить Map):
Найти среднее каждого студента по предметам;
class Student3_1 {
//1.Дан массив студентов с оценками по предметам. Найти (необходимо получить Map):
//• Найти среднее каждого студента по предметам;
//• Найти среднее по предмету среди всех студентов;
//• Найти среднее среди всех студентов по всем предметам (общее среднее);
//• Посчитать «оценку» студента, исходя из его общего количества баллов: 0-7 - bad, 8-15 - normal, 16+ - good.
//• Получить String - название самого легкого предмета среди студентов.
//• Получить String - самого умного студента.
String name;
Map marks;
public Student3_1(String name, Map marks) {
this.name = name;
this.marks = marks;
}
}
@@Guhar4k мне либо с окна прыгать, либо норм книгу искать. 😹Видел решение одного из заданий через стрим с Collection. singletonelist, так это вообще сущий кошмар, как понять, когда его в стримах исп-ть!
Java 8 in action
@@MrRomanvideo вау, выглядит внушающе) спасибо!
В 30 лет не может связать 2х слов не вставив "ну"...
и не справился после 2х лет работы?...
а нафиг вам map? вам же не требуется хранить несколько значений, вы ищите одно.
Задача с неповторяющимися символами, не нашел такого решения в комментариях, но тесты проходят
int calc(String str) {
int maxSize = -1;
Set unique = new HashSet();
for (Character s : str.toCharArray()) {
if (unique.contains(s)) {
if (maxSize < unique.size()) { //update size
maxSize = unique.size();
}
unique.clear();
}
unique.add(s);
}
return maxSize == -1 ? unique.size() : maxSize; //prevent 'bbbbb'
}
ваш метод для строки "ababc" возвращает двойку🙃
А между тем, метод то рабочий, просто нужно return заменить на
Math.max(unique.size(), maxSize)