Пересмотрев видео и прочитав комменты появилось желание отписаться для того что-бы не судили строго. Во-первых я сам себя не узнал - я очень волновался и суетился. Во-вторых у меня нет профильного образования. В этом контексте, считаю что интервью получилось удачным (не считая заминок со связью), более того - всем советую, посмотрев на себя со стороны вы получите массу полезной информации о себе в первую очередь. Спасибо Евгению за проведенное время!
Не стоит переживать :) В любом тестовом собеседовании наши цели: 1. Определить текущий уровень. 2. Акцентировать внимание на пробелах. 3. Скорректировать процесс изучения, чтобы эти пробелы закрыть. Остальное - лирика, на которую не стоит обращать внимания. Развитие себя как разработчика - первично :) И по моему мнению, для "самоучки", уровень не плохой + момент волнения присутствует на любом собеседовании (особенно публично).
Забавно осознавать, что после шести лет работы разработчиком (из них на Java около 1.5 года, остальное на C#, C++, JS/TS), я на гипотетическом собесе не тяну даже на джуна. Это при том, что работа ведется с достаточно крупными и сложными проектами.
Только решение возможно не очень, учитывая что сам indexOf содержит вложенные циклы. Очевидное решение взять первую строку, во внешнем цикле бежать по её символам, во внутреннем сравнивать их с символами на той же позиции других строк.
с микрофоном полная боль.. а вот за задачку лайк, только я бы вначале нашел самое короткое слово, и его резал бы.. а то вдруг первое слово на 100500 символов
@Иван Ррр а какие данные раскрывать? твоё ФИО да откуда ты? )такие базы у тех кого надо давно есть, к тому же ещё с паспортными данными, номером телефона и тд. если ты хотя бы раз взял кредит или заказал карту в банке. считай твои данные так или иначе слили)
с 2018 года jjwt обновляется не как один пакет, а как много разных. Где можно подробнее про это почитать? Там есть jjwt-root, jjwt-iml, jjwt-api.... что к чему
Меня недавно очень красиво нагнули на первом вопросе: class A{private int x, public int getx(){return x;}}, class B extend A. Есть ли поле х в классе Б? что будет при вызове геттера из объекта Б? И до одного места, что я там знаю про коллекции, многопоточность и тд. Вопрос действительно элементарный, так что гуглите "вопросы на собеседование", господа.
А что сложного в этом вопросе? Поле в Х в классе B есть. Но к нему нельзя обратиться. При вызове геттера из класса B вызовется вернётся поле X класса В. Поправьте меня если я не прав, просто мне этот вопрос не кажется сложным, но я на него может не верно отвечаю.
@@user-oc7py1vy6s Если в потомке не переопределен метод getx(), то при вызове этого метода у экземпляра класса потомка будет вызываться реализация этого метода в родителе и вернет значение переменной х родителя. Если нужно получить значение переменной потомка - нужно переопределить в потомке getx() и создать поле х в явном виде. Хотя я самоучка с гуманитарным образованием, так что могу и ошибаться.
Евгений , Добрый день! Хочу попасть на тестовое собеседование! Я закончил курсы Java Complex от OktenWeb во Львове. Сейчас ищу работу , хочу проверить свои знания перед реальным собесом). Буду рад любому фидбэку)
@@Denis-xc4qz Именно! Сейчас такие тенденции во всем. Все опять начали устанавливать в домах стационарные проводные телефоны, а вместо электричества использовать керосиновые лампы и лучины
А зачем два цикла? public String longestPrefix(String[] strings) { if (strings == null) { throw new IllegalArgumentException("Массив не должен быть null!!!"); } if (strings.length == 0) { return ""; } int count = 0; for (int i = 1; i < strings.length; i++) { if (!(strings[0].length() >= i) || !(strings[i].length() >= i)) { break; } else { if (strings[0].substring(0, i).equals(strings[i].substring(0, i))) { count++; } } } return strings[0].substring(0, count); }
class Test { public static String longestPrefix(String[] strs) { for (String str : strs) { if (str == null || str.isEmpty()) { return ""; } } String shortestString = Arrays.stream(strs).min(Comparator.comparingInt(String::length)).get(); return checkString(shortestString, strs); } public static String checkString(String s, String[] strings) { String result = s; for (String string : strings) { if (!string.contains(s)) { checkString(s.substring(0, s.length() - 1), strings); } } return result; } public static void main(String[] args) { System.out.println(Test.longestPrefix(new String[]{"abc","abcd","abcsdf","abcefe"})); } Такая же задача мне попадалась на собесе, только там был не префикс, а просто подстрока. Решила вот таким образом, ограничения на использование стримов не было.
Ни в коем случае не в обиду собеседующимся, но каждый раз офигеваю от того, что человек уже полез в сервлеты и того хуже - в спринг, хибернэйт... При этом явно не разбирается и не понимает базовые вещи core java.
Можно еще сделать решение стримами. Не очень эффективно по сложности, но более читаемо (мне так кажется). Разъеб приветствуется. @SpringBootTest(classes = {ServiceRunner.class}) public class LongestPrefixTests { @Test public void test() { assertEquals(findLongestPrefix(new String[]{ "ab", "abc", "abeeee"}), "ab"); assertEquals(findLongestPrefix(new String[]{ "ab", "a", "abeeee"}), "a"); assertEquals(findLongestPrefix(new String[]{ "abee", "abe", "abeeee"}), "abe"); assertEquals(findLongestPrefix(new String[]{ "abee", "abe", "agfs"}), ""); }
public String findLongestPrefix(String[] array) { List list = Arrays.asList(array); return list.stream() .filter(prefix -> list.stream().allMatch(str -> str.startsWith(prefix))) .findFirst() .orElse(""); } }
Спасибо, учту. И просто для информации (во время монтажа некоторые моменты были вырезаны + были проблемы со связью и иногда 10-30 секунд выпадают из видео).
Такс, сразу лайк, и пошли смотреть
Смотрю все выпуски, что не знаю - сразу в Гугл читать. Очень помогло недавно пройти собеседование. Спасибо вам
Спасибо за отзыв!
Что спрашивали на собесе?
@@asdasd-fu4ow core, collections, exceptions, stream API, ооп
@@andrprv Спасибо, удивило что только по кору вопросы. А английский как-то проверяли?
@@andrprv на какую позицию рассматривались? И что по итогу, взяли? Удачи!
Евгений, большое спасибо за тайминги и список вопросов, так гораздо легче ориентироваться!
Евгений, очень импонирует Ваша корректность.
Чуть ли не каждый день жду очередное собеседование, очень помогают закрыть свои дыры в знаниях, спасибо большое, Евгений, за ваш труд
Спасибо за ваш отзыв!
Пересмотрев видео и прочитав комменты появилось желание отписаться для того что-бы не судили строго. Во-первых я сам себя не узнал - я очень волновался и суетился. Во-вторых у меня нет профильного образования. В этом контексте, считаю что интервью получилось удачным (не считая заминок со связью), более того - всем советую, посмотрев на себя со стороны вы получите массу полезной информации о себе в первую очередь. Спасибо Евгению за проведенное время!
Не стоит переживать :) В любом тестовом собеседовании наши цели:
1. Определить текущий уровень.
2. Акцентировать внимание на пробелах.
3. Скорректировать процесс изучения, чтобы эти пробелы закрыть.
Остальное - лирика, на которую не стоит обращать внимания. Развитие себя как разработчика - первично :)
И по моему мнению, для "самоучки", уровень не плохой + момент волнения присутствует на любом собеседовании (особенно публично).
Да. ну отписываться. все ок. лучше целься в звезды. так ты точно в луну попадешь)))
@@leetovetz я имел в виду написать пояснение, а не отписываться от канала ;)
@@leetovetz чуток навпаки, цілиться в міцясь і в між зірками точно будеш ;)
Смысл отписываться? Ну понервнечал, ну нет знаний. Ну ты ж для этого и пошёл на собеседование.
Евгений, звук! Звук, Евгений! Вся польза сводится к минимуму, когда учишься приставив ухо к динамику :) Спасибо!
Смотрел с телефона, со звуком всп норм
Евгений, неплохо было бы с микрофоном что-то решать. Потому что качество записи совсем не соответствует качеству содержимого :(
Да, спасибо, никак не могу победить - уже и техника должна позволять, но, качество ещё страдает
согласен, качество аудио и видео оставляет желать лучшего, хотя тут многие и не за этим, просто вызывает некое удивление))
Даешь синиора!
P.S. Спасибо огромное за труды!
сижу записываю вопросы.Спасибо Вы очень помогаете тем кто на начальном сложном пути))
Спасибо за отзыв :)
Забавно осознавать, что после шести лет работы разработчиком (из них на Java около 1.5 года, остальное на C#, C++, JS/TS), я на гипотетическом собесе не тяну даже на джуна. Это при том, что работа ведется с достаточно крупными и сложными проектами.
тоже самое)))
Побольше бы таких комментариев)
Прохождение собесов - отдельный навык, это точно
Очень нравилось когда в конце говорили подходит на работу или нет... джун или нет!
Сначала лукас, потом смотрим)
Волнуется чувак сильно, поэтому поплыл после первой ошибки. Я его прекрасно понимаю, у самого такая же беда.
Кст, в решении задачи string.indexof(“”) будет возвращать 0 в любом случае, так что if не обязательно писать, не?
В этот раз нормальная задача 👍
Спасибо!
В чем ее нормальность? Мне она наоборот совершенно бессмысленной представилась.
Только решение возможно не очень, учитывая что сам indexOf содержит вложенные циклы. Очевидное решение взять первую строку, во внешнем цикле бежать по её символам, во внутреннем сравнивать их с символами на той же позиции других строк.
Крутяк, с меня подписка)
34:20 Мне казалось, что Servlet - это интерфейс, реализация которого расширяет функциональные возможности сервера, а не класс
Евгений, ваше мнение ?
Servlet - да, все верно. Интерфейс, у которого есть реализации и http лишь одно из них.
Человек пытался говорить про httpServlet, а это абстрактный класс
Терпения тебе! Даже для меня, только начинающему изучать джаву, это жёстко. :)
Как бы узнать правильные ответы на поставленные вопросы? Можно ли текстом выводить на экран ответ? Это было бы супер здорово!!
дык выписать вопросы, да погуглить
с микрофоном полная боль.. а вот за задачку лайк, только я бы вначале нашел самое короткое слово, и его резал бы.. а то вдруг первое слово на 100500 символов
Что значит "Spring уже в прошлом" ? Серьезно?
Это где было сказано?)
@@EugeneSuleimanov Мне показалось что Владимир это сказал 37:21 Может я контекст неправильно понял?)
@@FilmicFil это сервлеты в прошлом имелось
в этот раз список слов в оглавлении к видео уже более знакомый))))
@Иван Ррр а какие данные раскрывать? твоё ФИО да откуда ты? )такие базы у тех кого надо давно есть, к тому же ещё с паспортными данными, номером телефона и тд. если ты хотя бы раз взял кредит или заказал карту в банке. считай твои данные так или иначе слили)
с 2018 года jjwt обновляется не как один пакет, а как много разных. Где можно подробнее про это почитать? Там есть jjwt-root, jjwt-iml, jjwt-api.... что к чему
Посмотрел HashMap и выключил :(
Меня недавно очень красиво нагнули на первом вопросе: class A{private int x, public int getx(){return x;}}, class B extend A. Есть ли поле х в классе Б? что будет при вызове геттера из объекта Б? И до одного места, что я там знаю про коллекции, многопоточность и тд. Вопрос действительно элементарный, так что гуглите "вопросы на собеседование", господа.
Да, такие вопросы тоже встречаются. Особенно, если интервьюер готовится/готовился к сертификации Oracle. Там такие вопросы сплошь и рядом :)
А что сложного в этом вопросе?
Поле в Х в классе B есть. Но к нему нельзя обратиться.
При вызове геттера из класса B вызовется вернётся поле X класса В.
Поправьте меня если я не прав, просто мне этот вопрос не кажется сложным, но я на него может не верно отвечаю.
@@user-oc7py1vy6s Если в потомке не переопределен метод getx(), то при вызове этого метода у экземпляра класса потомка будет вызываться реализация этого метода в родителе и вернет значение переменной х родителя. Если нужно получить значение переменной потомка - нужно переопределить в потомке getx() и создать поле х в явном виде.
Хотя я самоучка с гуманитарным образованием, так что могу и ошибаться.
Хотел бы как нибудь через месяц попробоваться на миддла? Евгений, будет такая возможность или у вас все сильно занято?
Пишите на почту proselytear@yahoo.com - обсудим )
@@EugeneSuleimanov отписал)
Такая реализация получилась
public class Test {
@org.junit.Test
public void smoke() {
String[] input = {"abcd", "abc", "abcd", "abc", "abcf"};
System.out.println(commonPrefix(input));
}
private String commonPrefix(final String[] input) {
if (input == null) {
throw new NullPointerException();
}
if (input.length == 0) {
return "";
}
final String elToCompare = input[0];
String prefix = "";
String wishedPrefix = "";
for(int i = 0; i < elToCompare.length(); i++) {
wishedPrefix = elToCompare.substring(0, i + 1);
for (int j = 1; j < input.length; j++) {
if (!input[j].contains(wishedPrefix)) {
return prefix;
}
}
prefix = wishedPrefix;
}
return prefix;
}
}
Евгений , Добрый день!
Хочу попасть на тестовое собеседование!
Я закончил курсы Java Complex от OktenWeb во Львове.
Сейчас ищу работу , хочу проверить свои знания перед реальным собесом).
Буду рад любому фидбэку)
Пишите на почту - proselytear@yahoo.com- обсудим детади
Почему в комментариях нет умного человека который кратко разложит каждый вопрос по полочкам?
Евгений, а можно ли пройти у вас собеседование, но без видео и не разглашая фамилию и имя?
Собеседник сказал в конце, что он не знал что учить и что spring уже в прошлом? Это как то странно...
Сприг в прошлом, уже снова все пишут на чистых сервлетах)
@@Denis-xc4qz Именно! Сейчас такие тенденции во всем. Все опять начали устанавливать в домах стационарные проводные телефоны, а вместо электричества использовать керосиновые лампы и лучины
А зачем два цикла?
public String longestPrefix(String[] strings) {
if (strings == null) {
throw new IllegalArgumentException("Массив не должен быть null!!!");
}
if (strings.length == 0) {
return "";
}
int count = 0;
for (int i = 1; i < strings.length; i++) {
if (!(strings[0].length() >= i) || !(strings[i].length() >= i)) {
break;
} else {
if (strings[0].substring(0, i).equals(strings[i].substring(0, i))) {
count++;
}
}
}
return strings[0].substring(0, count);
}
Прикинь у тебя в массиве 1000 строк, первая строка в котором "abc". Попробуй выполнить strings[0].substring(0, 999)
По HashMap поправте если я не прав. Вычесляеться hash ключа, допустим он 55664 этои есть наш index и мы сразу зная его получаем value
Это не совсем индекс, но, на основании ключа мы определяем этот индекс бакета.
@@EugeneSuleimanov Точно там есть формула index = hashCode(key) & (n-1).
@Nikita Petrenko эта формула была в старой версии Java если я не ошибаюсь
(с остатнком от деления) взгляните на сорсы
Евгений, а ты в Москве живешь?
Нет
Евгений, с будущими джава разработчиками уже все обмусолено, когда будут мидлы и сеньоры? :)
Как только появятся желающие такого уровня :)
А почему решили, что первый элемент самый короткий?
Такого предположения не было, насколько я помню
Забавные собеседования.
Забавный комментарий.
что он говорит....
Тяжко , ещё учить надо , желательно почитать книги с примерами
Да, конечно, учить нужно всегда :)
Наваял наркоманское решение задачки пока смотрел.
Вроде работает)
public static String longestPrefix(String[] strs) {
char commonSymbolPrefix = strs[0].charAt(0);
for (int i = 0; true; i++) {
try {
for (String word :
strs) {
if (word.charAt(i) != commonSymbolPrefix) {
throw new IndexOutOfBoundsException();
}
}
commonSymbolPrefix = strs[0].charAt(i + 1);
} catch (IndexOutOfBoundsException e) {
return strs[0].substring(0, i);
}
}
}
public static String longestPrefix(String [] strs) throws Exception {
if(Arrays.asList(strs).contains(null)) {
throw new Exception("Contains null!");
}
String donor = strs[0];
int index = 0;
for(int i = 0; i < donor.length(); i++) {
for(int j = 1; j < strs.length; j++) {
try {
if(strs[j].charAt(i) != strs[0].charAt(i)) {
return donor.substring(0, index);
}
}
catch(StringIndexOutOfBoundsException e) {
return donor.substring(0, index);
}
}
index = i + 1;
}
return donor.substring(0, index);
}
Я один условие задачи не понял?)
class Test {
public static String longestPrefix(String[] strs) {
for (String str : strs) {
if (str == null || str.isEmpty()) {
return "";
}
}
String shortestString = Arrays.stream(strs).min(Comparator.comparingInt(String::length)).get();
return checkString(shortestString, strs);
}
public static String checkString(String s, String[] strings) {
String result = s;
for (String string : strings) {
if (!string.contains(s)) {
checkString(s.substring(0, s.length() - 1), strings);
}
}
return result;
}
public static void main(String[] args) {
System.out.println(Test.longestPrefix(new String[]{"abc","abcd","abcsdf","abcefe"}));
}
Такая же задача мне попадалась на собесе, только там был не префикс, а просто подстрока. Решила вот таким образом, ограничения на использование стримов не было.
Что у вас выведет условно для кейса {"a","b"}?
@@porosyonocheg спасибо за ваш комментарий, поняла свою ошибку, выведется первая минимальная строка 'a'
Ни в коем случае не в обиду собеседующимся, но каждый раз офигеваю от того, что человек уже полез в сервлеты и того хуже - в спринг, хибернэйт... При этом явно не разбирается и не понимает базовые вещи core java.
как-то совсем каша в голове у человека, нужно более углублённо изучать основы
Да, есть определённые пробелы, но, человек изучает полностью самостоятельно, поэтому требовать системности знаний не имеет смысла на текущем этапе.
Задачу не могу решить (((
Можно еще сделать решение стримами. Не очень эффективно по сложности, но более читаемо (мне так кажется). Разъеб приветствуется.
@SpringBootTest(classes = {ServiceRunner.class})
public class LongestPrefixTests {
@Test
public void test() {
assertEquals(findLongestPrefix(new String[]{ "ab", "abc", "abeeee"}), "ab");
assertEquals(findLongestPrefix(new String[]{ "ab", "a", "abeeee"}), "a");
assertEquals(findLongestPrefix(new String[]{ "abee", "abe", "abeeee"}), "abe");
assertEquals(findLongestPrefix(new String[]{ "abee", "abe", "agfs"}), "");
}
public String findLongestPrefix(String[] array) {
List list = Arrays.asList(array);
return list.stream()
.filter(prefix -> list.stream().allMatch(str -> str.startsWith(prefix)))
.findFirst()
.orElse("");
}
}
Нафиг нам это собеседование, где мобильные приложения на java?
В прошлом :)
Во время задачи вы не даёте человеку подумать, сбивая его мысли с толку перебивая его, не делайте так, дайте ему секунд 30.
Спасибо, учту. И просто для информации (во время монтажа некоторые моменты были вырезаны + были проблемы со связью и иногда 10-30 секунд выпадают из видео).
@@EugeneSuleimanov Я написал не в упрёк, а для пользы, по себе знаю. )
P.s. Спасибо за реакцию, отличные видео.
@@johndavids6297 Ещё раз спасибо. Самому себя сложно оценивать, поэтому я всегда крайне положительно отношусь к конструктивной критике :)
On слышу как Боатенг, думаю прочем тут футболист)
gist.github.com/Fedrilko/ebc38f740a34cf7e1a323aa345838830
Я так зарешал эту задачку
Задачу я бы завалил аж бегом
чтоб ее нормально сделать нужен бинарный поиск
в общем, не завидую мужику)
Это не настоящее собеседование?
Нет, это тестовое собеседование (mock)
Евгений спортом нужно заниматься хотя бы по 3 км в день проходить быстрым шагом. Вид такой как будто из дома месяц не выходил