Уточнение. За O(n*log(n)) отрабатывают сортировки сравнением. Есть такие алгоритмы сортировки подсчетом, как Counting Sort и Radix Sort, которые могу отработать за O(n) при определенных ограничениях на входные данные (диапазон значений, символьная длина значений). Буду рад уточнению на свой комментарий
@@LacqueredNoCap Спасибо за комментарий :) Если мы говорим про числа, и конечно radix sort будет лучше. В то время, как тот же quickSort - универсальный алгоритм.
Главная страница на ютюбе в роликах Евгения - это прекрасно, значит ролики идут стабильно. В целом у меня это проф деформация какая то. когда на главной только видео по жаве и расту чувствую себя комфортно )) Евгений, вы знаете,что делаете большое дело. Спасибо! Не пропадайте пожалуйста
Евгений, здравствуйте. Готов снять свою шапку, скажу более - свой мозг, перед Вашим терпением...... Парнишка очень волновался, но все-таки думаю, что ему нужно больше решать логических задач на смекалку и упорядочение мышления..... И еще раз убеждаюсь, что не все очевидное является целесообразным. Понимание того, как работает комп необходимо..... Благодарю Вас за Ваше потраченное время. получил удовольствие от Вашего урока...
Интервью очень понравилось) Никита крут Также было видно эмоции/реакции Евгения, в этот момент понимаешь, правильно ли отвечает Никита. Особенно с вопросом про docker, что это виртуальная машина. Ведь у Евгения есть отдельное видео посвящённое Docker'у, где он специально подчеркивал, что Docker - не виртуальная машина =) Спасибо за видео, жду новое)
На 27:16. Можете пояснить почему мы нарушаем принцип Лисков, ведь класс другой и метод новый (не наследуемый). В этом классе же все методы родителя остаются и можно подставлять объект класса вместо родителя, не пойму в чем потенциальная опасность. Да и в чем тогда смысл наследования если не могу метод добавить)
Если в данном примере мы обращаемся к объекту класса В по интерфейсу класса А, то LSP не нарушается. Потенциально может быть нарушен SRP, если новый метод будет предназначен для взаимодействия с другим актором
Мы не нарушаем - мы потенциально можем его нарушить, но для этого нужно очень постараться. Пример, есть 3 класса A B extends A C extends A В класс C мы добавляем публичный метод test100500 и в классе-клиенте "завязываемся" на него. После этого - заменить C классом B без рефакторинга мы уже не сможем.
@@EugeneSuleimanov Спасибо за пояснение. Я вроде так и представлял, что в задании имелось в виду. Представлял принцип Лисков, как вместо родителя пихаем наследника, а вместо наследника пихать родителя это ваще что-то другое и так не надо никогда)
Интересно и познавательно смотреть. Парень неплохо отвечал, но очень сильно посыпался на SQL, там надо либо подучить я думаю, тема не такая сложная, либо просто освежить память т к он хорошо давал ответы на другие более сложные вопросы)
Потому что при большом количестве заполненных бакетов мы начинаем терять время на поиск бакета для нового хешкода. Поэтому имеет смысл расширять при заполнении 75%. В динамическом массиве такой необходимости просто нет :)
Так тут же вопрос производительности. Если делать лод фактор, равный 1, то к моменту заполнения всех корзин мы все чаще будем поучать коллизии. И наоборот, если сделать это значение, например 0,5, то будем терять время на неоправданно частом перестроении структуры. 0,75 - оптимальный коэффициент
Еще нужно не забыть добавить исключение всех небуквенных значений из строки и приведение ее к одному регистру. Я бы сделал стандартно через Java API: String generalizedString = s.toLowerCase().replaceAll("[^a-z]", "");
@@LacqueredNoCap Вообще написано, что эти чары содержат как буквы, так и числа. Objects.requireNonNull(s); String result = s.toLowerCase() .replaceAll("[^a-z0-9]", ""); if (result.isEmpty() || result.length() == 1) { return true; } return new StringBuilder(result) .reverse() .toString() .equals(result); Ну или можно сделать с циклом, первое решение с ним и сделал. Я когда решение парня увидел, подумал, что может я чего-то не понял и нагородил xD Ан нет)
Есть пара вопросов к реализации проверки на палиндром. Или я чего-то не понимаю, или нет перехода к единому регистру, ведь по условию 'f' и 'F' -- одинаковые буквы, но в вашей реализации они будут считаться различными. Также, по первому примеру видно, что пробельные символы вообще учитываться не должны, но в вашей реализации это не учитывается, т.е., я предполагаю, что на первый пример будет выведено false даже если бы в нём все буквы были одного регистра
Вопрос: каков ваш фидбек? На момент интервью вы бы взяли такого инженера на позицию Junior, если нет то что нужно подтянуть, мне почему то кажется что до февраля 2022 с таким уровнем и на junior+ можно было устроиться, сейчас требования растут постоянно.
Евгений, простите за беспокойство. У меня есть вопрос по многопоточности... Никто не смог на него определенно ответить. Если не будете против, хотел бы задать его Вам..... СПС))))))
Жень, вот совсем не круто записывать видео с русскими в то время, когда война в твоей стране. Я понимаю, что они могут никакого отношения не иметь к происходящему и вообще "протиф путина", но все же это слегка аморально и цинично с твоей стороны помогать им в данный момент.
мое убогое решение😪 class Palindrome { public static boolean isPalindrome(String str) { Pattern pattern = Pattern.compile("\\w"); Matcher matcher = pattern.matcher(str); StringBuilder stringBuilder = new StringBuilder(); while (matcher.find()) { String newStr = matcher.group().toLowerCase(); stringBuilder.append(newStr); } String s = stringBuilder.toString(); for (int i = 0, k = s.length()-1; i < s.length() / 2; i++, k--) { if (s.charAt(i) != s.charAt(k)) return false; } return true; } public static void main(String[] args) { System.out.println(isPalindrome("A car, A plan: A Panama")); //false System.out.println(isPalindrome("A c, A")); //true System.out.println(isPalindrome(" ")); //true } } ps. нет времени учить теорию наизусть, ментор задачами заваливает. когда смотрю, как ребята отвечают на вопросы, типа буква О в SOLID грусть, тоска, депрессия подкрадывается, времени не хватает на это учить пока что, но чтобы поднять настроение, вспоминаю, что опытные программисты создавали RUTUBE ))))))
не бывает сортировки за log(n), лучший алгоритм как раз n*log(n)
Да, вы правы - здесь ошибка.
Сложность по времени - N log N
Сложность по памяти log N
Спасибо за уточнение.
Уточнение. За O(n*log(n)) отрабатывают сортировки сравнением. Есть такие алгоритмы сортировки подсчетом, как Counting Sort и Radix Sort, которые могу отработать за O(n) при определенных ограничениях на входные данные (диапазон значений, символьная длина значений). Буду рад уточнению на свой комментарий
@@LacqueredNoCap
Спасибо за комментарий :)
Если мы говорим про числа, и конечно radix sort будет лучше. В то время, как тот же quickSort - универсальный алгоритм.
Евгений, спасибо за Ваш труд👍👍👍
Хотел бы пожелать всем удачи и терпения💪👍👍
@@МаксМакс-ч8к спасибо за отзыв!
Не успел посмотреть ролик!!!
Но нет сомнений в качестве!!!
Просто Евгению с ходу ЛАЙКОС👍👍👍
Спасибо за комментарий :)
Главная страница на ютюбе в роликах Евгения - это прекрасно, значит ролики идут стабильно.
В целом у меня это проф деформация какая то.
когда на главной только видео по жаве и расту чувствую себя комфортно ))
Евгений, вы знаете,что делаете большое дело. Спасибо!
Не пропадайте пожалуйста
Большое спасибо за отзыв :)
Каждое видео - на вес золота для начинающих! Спасибо за труды, сенсэй!)
Спасибо за отзыв :)
Евгений, в очередной раз спасибо.
Классные вопросы подбираешь.
Есть что мне нужно повторить и более детально разобрать.
Спасибо за отзыв :)
Евгений, здравствуйте. Готов снять свою шапку, скажу более - свой мозг, перед Вашим терпением...... Парнишка очень волновался, но все-таки думаю, что ему нужно больше решать логических задач на смекалку и упорядочение мышления..... И еще раз убеждаюсь, что не все очевидное является целесообразным. Понимание того, как работает комп необходимо..... Благодарю Вас за Ваше потраченное время. получил удовольствие от Вашего урока...
Спасибо за отзыв!
И операционные системы и модель OSI тоже не помешает
Спасибо большое, Евгений, что снова начали делаеть видео и писать статьи на сайте . Очень понравилось про jvm и volatile 😊
Спасибо за отзыв :)
Интервью очень понравилось) Никита крут
Также было видно эмоции/реакции Евгения, в этот момент понимаешь, правильно ли отвечает Никита. Особенно с вопросом про docker, что это виртуальная машина. Ведь у Евгения есть отдельное видео посвящённое Docker'у, где он специально подчеркивал, что Docker - не виртуальная машина =)
Спасибо за видео, жду новое)
Спасибо за отзыв :)
огонь 🔥🔥🔥
Спасибо
Спасибо большое за отличные ролики.
Спасибо за отзыв!
дякую за відео, освіжають память та можна дізнатись прогалини в своїх заннях)
Дякую за відгук :)
Спасибо за видео :)
Спасибо за отзыв :)
Спасибо за видео!Видно было что Никита переживал) особенно на sql.Сразу вспомнил себя на первых собеседованиях.
Спасибо за отзыв :)
Спасибо вам большое!
Спасибо за отзыв!
гарне інтерв'ю. Дякую за роботу
Дякую за коментар!
На 27:16. Можете пояснить почему мы нарушаем принцип Лисков, ведь класс другой и метод новый (не наследуемый). В этом классе же все методы родителя остаются и можно подставлять объект класса вместо родителя, не пойму в чем потенциальная опасность. Да и в чем тогда смысл наследования если не могу метод добавить)
Если в данном примере мы обращаемся к объекту класса В по интерфейсу класса А, то LSP не нарушается. Потенциально может быть нарушен SRP, если новый метод будет предназначен для взаимодействия с другим актором
Мы не нарушаем - мы потенциально можем его нарушить, но для этого нужно очень постараться.
Пример, есть 3 класса
A
B extends A
C extends A
В класс C мы добавляем публичный метод test100500 и в классе-клиенте "завязываемся" на него. После этого - заменить C классом B без рефакторинга мы уже не сможем.
@@EugeneSuleimanov Спасибо за пояснение. Я вроде так и представлял, что в задании имелось в виду. Представлял принцип Лисков, как вместо родителя пихаем наследника, а вместо наследника пихать родителя это ваще что-то другое и так не надо никогда)
@@EugeneSuleimanov Пример хороший, но он не относится к LSP, т.к. B и C не связаны между собой иерархией наследования, а LSP как раз про это
@@LacqueredNoCap но они связаны с классом А, если я не ошибаюсь - это относится к LSP
Спасибо за видео!
Спасибо за отзыв!
Спасибо большое
Спасибо за отзыв!
Интересно и познавательно смотреть. Парень неплохо отвечал, но очень сильно посыпался на SQL, там надо либо подучить я думаю, тема не такая сложная, либо просто освежить память т к он хорошо давал ответы на другие более сложные вопросы)
Спасибо за отзыв :)
Спасибо
Спасибо за комментарий!
А почему тогда в хешмапе при 0.75 увеличиваем по той же логике, что остальные будут простаивать!? Типа запас на неточность хэшкода!?
Потому что при большом количестве заполненных бакетов мы начинаем терять время на поиск бакета для нового хешкода. Поэтому имеет смысл расширять при заполнении 75%.
В динамическом массиве такой необходимости просто нет :)
@@EugeneSuleimanov а разве индекс банкета не однозначно определяется хэшкодом?
@@MrRomanvideo да, вы правы. Нужно было написать - новый хеш-код :)
Так тут же вопрос производительности. Если делать лод фактор, равный 1, то к моменту заполнения всех корзин мы все чаще будем поучать коллизии. И наоборот, если сделать это значение, например 0,5, то будем терять время на неоправданно частом перестроении структуры. 0,75 - оптимальный коэффициент
Реакция на ответ на 42:26 топ )))
Спасибо за видео, кину мою реализацию алгоритма)
public static boolean isPalindrome(String s) {
for (int i = 0; i < s.length() / 2; i++)
if (s.charAt(i) != s.charAt(s.length() - i - 1))
return false;
return true;
}
Спасибо за отзыв :)
Еще нужно не забыть добавить исключение всех небуквенных значений из строки и приведение ее к одному регистру. Я бы сделал стандартно через Java API: String generalizedString = s.toLowerCase().replaceAll("[^a-z]", "");
@@LacqueredNoCap Вообще написано, что эти чары содержат как буквы, так и числа.
Objects.requireNonNull(s);
String result = s.toLowerCase()
.replaceAll("[^a-z0-9]", "");
if (result.isEmpty() || result.length() == 1) {
return true;
}
return new StringBuilder(result)
.reverse()
.toString()
.equals(result);
Ну или можно сделать с циклом, первое решение с ним и сделал.
Я когда решение парня увидел, подумал, что может я чего-то не понял и нагородил xD Ан нет)
Есть пара вопросов к реализации проверки на палиндром. Или я чего-то не понимаю, или нет перехода к единому регистру, ведь по условию 'f' и 'F' -- одинаковые буквы, но в вашей реализации они будут считаться различными. Также, по первому примеру видно, что пробельные символы вообще учитываться не должны, но в вашей реализации это не учитывается, т.е., я предполагаю, что на первый пример будет выведено false даже если бы в нём все буквы были одного регистра
Также, условие в цикле while можно сделать строгим
Вопрос: каков ваш фидбек? На момент интервью вы бы взяли такого инженера на позицию Junior, если нет то что нужно подтянуть, мне почему то кажется что до февраля 2022 с таким уровнем и на junior+ можно было устроиться, сейчас требования растут постоянно.
На позицию trainee-junior позицию вполне можно брать кандидата. Немного подтянуть некоторые моменты - и можно было бы ставить на проект.
Евгений, частные уроки даёте?
"Ответил в ЛС" © :)
Если серьезно - напишите. пожалуйста, на почту proselytear@yahoo.com или telegram: @proselyte
Сможем обсудить более детально.
Топ )
20:24:00 поправь плз )
Сделано, спасибо за исправление :)
Евгений, простите за беспокойство. У меня есть вопрос по многопоточности... Никто не смог на него определенно ответить. Если не будете против, хотел бы задать его Вам..... СПС))))))
Конечно - пишите сюда иди в ТГ - попробую помочь :)
@@EugeneSuleimanov СПС. Вопрос будет длинный
это собеседование джуна :?
Да, верно
Жень, вот совсем не круто записывать видео с русскими в то время, когда война в твоей стране.
Я понимаю, что они могут никакого отношения не иметь к происходящему и вообще "протиф путина", но все же это слегка аморально и цинично с твоей стороны помогать им в данный момент.
Hi! Good job 👍 It’s interesting 😎
Thank you :)
Thank you :)
мое убогое решение😪
class Palindrome {
public static boolean isPalindrome(String str) {
Pattern pattern = Pattern.compile("\\w");
Matcher matcher = pattern.matcher(str);
StringBuilder stringBuilder = new StringBuilder();
while (matcher.find()) {
String newStr = matcher.group().toLowerCase();
stringBuilder.append(newStr);
}
String s = stringBuilder.toString();
for (int i = 0, k = s.length()-1; i < s.length() / 2; i++, k--) {
if (s.charAt(i) != s.charAt(k))
return false;
}
return true;
}
public static void main(String[] args) {
System.out.println(isPalindrome("A car, A plan: A Panama")); //false
System.out.println(isPalindrome("A c, A")); //true
System.out.println(isPalindrome(" ")); //true
}
}
ps. нет времени учить теорию наизусть, ментор задачами заваливает. когда смотрю, как ребята отвечают на вопросы, типа буква О в SOLID грусть, тоска, депрессия подкрадывается, времени не хватает на это учить пока что, но чтобы поднять настроение, вспоминаю, что опытные программисты создавали RUTUBE ))))))
Спасибо за комментарий!
Если мы выделяем StringBuilder - проще просто вызвать у него reverse и сравнить строки после удаления «лишних» символов :)
@@EugeneSuleimanov сорян, стараюсь руку набить на Pattern/Matcher)
Странное ощущение когда со всем этим работаешь а территорию знаешь хуже😂.
Это норма :)