Решаем задачу с технического собеседования | Топ задача с собеседования | Java Junior | Java Middle
Ойын-сауық
Выпуск серии "Техническое собеседование" на позицию Java Developer с Максом Добрыниным.
В этом видео разберем техническую задачу, которая часто встречается во время реальных технических собеседований.
Решение данной задачи покрывает широкий диапазон знаний и навыков, которые необходимы любому разработчику в комбинации с любым языком программирования.
После решения этой задачи вы прокачаете алгоритмическое мышление и научитесь решать комплексные задания, узнаете какие ошибки могут быть допущены при решение данной задачи и ей подобных.
Ну и в конечно итоге, всё это сделает вас более крутым инженером разработки программного обеспечения и приблизит к заветной мечте - получить работу в программировании.
Погнали!
Программа
00:00 Условия задачи
03:02 Решение задачи
08:10 Проверка решения
11:24 Отладка дефекта (Отладка бага)
19:04 Подведение итогов
Получи реальный опыт решения коммерческих задач в Agile команде
до 6 человек iprody.com/
Запись на обучение и собеседование:
iprody.com/interview
t.me/iPrody_Online
Мы в социальных сетях:
t.me/jetbulb
/ jetbulb
leetcode.com/
Пікірлер: 54
В условии задачи сказано, что нужно представить, что среда разработки не позволяет хранить целые 64-битные числа, но при этом задача решена с помощью long, которое как раз хранит 64-битное число. Корректнее было бы вместо использования long переменной и условия с ипользованием константных значений использовать понимание, что происходит с int числом, когда мы выходим за его пределы. Можно использовать допольнительную переменную int temp для сравнения с предыдущей итерацией добавления числа. В случае если temp / 10 != reversed мы понимаем, что произошел выход за пределы и тогда можно возвращать 0
@user-wn7cs5bs1h
3 ай бұрын
Лучше написать отдельные функции checked_add, checked_mul Если мы хотим сложить x + y, посмотрим на знак y. Если y положительный, то x должен быть меньше или равен MaxInt - y (так как y это положительное число, то переполнение не случится), иначе возвращаем ошибку. Аналогично, если y отрицательный, проверяем, что x больше или равен MinInt - y. Аналогично для умножения Странное конечно в конце замечание про реверс битов - это например 8 = 1000b в 0001b = 1 превратится P.S. Проверил, действительно проверка с делением на 10 корректная, что довольно неочевидно действительно, пусть мы хотим проверить, что 10 * x + y не переполнилось, -10 пусть (10 * x + y) / 10 == x MinInt
@user-nd6xv4jv7u
3 ай бұрын
@@user-wn7cs5bs1h пришел к такому выводу следующим образом: если есть некоторое число которое мы хотим умножить на 10 и добавить некоторый остаток от деления, при этом произойдет выход за пределы, в таком в случае число будет выглядеть совсем иначе чем перед умножением и добавлением. Для того, чтобы проверить, равняется ли оно предыдущему, просто делим его на 10, таким образом добавленный остаток отбросится и останется лишь та часть, которая как подразумевается при невыходе за предел, будет равнятся предыдущему. Ну а если все же не равняется, значит произошел выход за пределы
@spider9872
3 ай бұрын
@@user-nd6xv4jv7uдостаточно просто проверить, что модуль следующего значения переменной аккумулятора больше модуля предыдыдущего
@igormyatlyuk503
2 ай бұрын
@@user-wn7cs5bs1h ваше решение немного сложное для понимания и черезчур мудреное. Много ненужных проверок. Лично я выкрутился таким образом: if (Math.abs(reversed) > Integer.MAX_VALUE / 10) { return 0; } тут мы сразу понимаем, что следующее умножение reversed на 10 даст переполнение Integer и неважно, какой 'y' и какой знак 'x'
@alibaba40thiefs
2 ай бұрын
/* if ((res * 10 + tmp) Всего то проверить что инт ушел на следующий круг....
Привет, Макс! Хорошая идея начать делать разборы примеров с algorithm interview, т.к. зачастую это является первым фильтром для отсеивания кандидатов на позицию.
Очень круто. Классный формат, приятно, виртуально так сказать посидеть и поразбираться с задачей.
Очень круто, спасибо, ждём подобных видео
Спасибо! Больше таких видео (с кодингом) хочу видеть на твоем канале!
It's good. Thank you!
топ контент, спасибо!
Макс молодец) спасибо
я когда решал эту задачу вообще костыльно всё делал с помощью стринг билдера. В итоге конечно дофига памяти съело и рантайм был не оч. А вот это решение выглядить весьма элегантно
@hybi666
3 ай бұрын
Да почему костыльно то. Если у стрингбилдера есть reverse.))
@SVA88
3 ай бұрын
@@hybi666 бл**** )))) тот случай когда решил стрингбилдером но без reverse... стыдно
Проверку на отрицательное число, на ноль и на число кратное десяти можно вынести в отдельный if, что сэкономит время отработки кода при данных кейсах
подскажите ! где брать задачки по java !
Сделал через StringBuilder и NumberFormatException: примерно все остальные решения быстрее моего. :D
@normanjayden352
Ай бұрын
Но работает же!
Вот только по условию, мы не можем использовать 64-битные числа. Можно явно указать тип и отловить исключение либо добавить в цикл сравнение reversed с Integer.MAX_VALUE/10
А можно ссылку на саму задачу?
Я делал почти так же только прооверял на диапазон от нуля до инт мах
задача на алгоритм подразумевает, что методами типа reverse / parse пользоваться не желательно при решении?
@Jetbulb
3 ай бұрын
Каждый решает как может, а потом уже интервьюер смотрит на качество и на мысли наталкивает. К слову, применение готового алгоритма это лучше, чем писать свой и куда умнее
@Procestus
3 ай бұрын
Я встречал 2 варианта, либо когда при постановке задачи запрещают сахарные reverse sort пользоваться, либо с хитрецой ждут что ты назовешь такие опции типа ты о них знаешь, а потом попросят без них. Случаев когда называешь секундную имплементацию и тебе - ок, пошли дальше - небыло
Если не использовать лонг, то можно смотреть, положительное ли число пришло на вход - то есть завести boolean isPositive например, и в каждой итерации сравнивать, не изменило ли получаемое число свой знак. Если изменило - значит произошло переполнение. Но в проде я бы конечно использовал лонг
@igormyatlyuk503
2 ай бұрын
проверка на изменение знака не поможет. попробуйте ревертнуть число 1534236469. число не изменит свой знак, но будет некорректным
static int reverseInteger(int x) { String xString = ((x + "").replace("-", "")); long res = Long.parseLong(String.valueOf(new StringBuilder(xString).reverse())); if (res > Integer.MAX_VALUE || res return (int) ((x }
@moovestone
2 ай бұрын
нельзя лонг использовать
Пожалуйста сможете сказать нужен ли высшие образование диплом для Java Software Engineer ?
@1shakirov
3 ай бұрын
нет
@Jetbulb
3 ай бұрын
И да, и нет. Все зависит от компании и требований, которые они выдвигаются к кандидатам.
@BlogipsE
3 ай бұрын
@@Jetbulb ну Вабше я планировал вступить универ политехнический но везде идут престижные универы там Американский, французский И так далее и вабше пристиж универа играет рол? Для в этом сфере по?
@Jetbulb
3 ай бұрын
@@BlogipsE Престиж играет роль в локациях, где ВУЗ признан. В остальном, это все "вкусовщина". Стандартный политехнический с кафедрой по разработке ПО - более чем достаточно. Хотя, такая кафедра есть далеко не везде
Не понял насчет var. Почему явно не написать что это long. Каюсь, не смотрел видео полностью
@twobeerornottwobeer5973
3 ай бұрын
Вообще var я использую, когда не хватает места записать в одну строчку, например у класса слишком большое имя.
Где автор находит такие задачи для собеседований? Я ищу вакансии java Junior и мне присылают задачи по типу: создайте аналог банковского приложения с валидацией входа на REST, с пагинацией, многопоточностью и так далее. Если бы мне такую задачу дали, как в видео, давно бы уже устроился. Я все чаще замечаю, как автор "преуменьшает" требования к джунам, это видно и по его интервью и по таким "кодинг-сессиям".
@vitamin2845
3 ай бұрын
Это задание на стажёра, поэтому и не прошел на джуна. На джуна минимум полгода опыта еще нужно
@vadiknsk
3 ай бұрын
это алгоритмическая часть собеса, в фаангоподобных компниях всегда есть, в остальных тоже может быть
@flint2159
3 ай бұрын
Это тебе присылают тестовое задание)) а это алгоритмическое собеседование, которое идет после тех собеседования до которых ты так и не дошел 😂
Изучайте математику а именно высшую математику алгебру дискретную математику тригонометрию прикладную математику без этих знании в программировании делать нечего
@rytmtembr251
3 ай бұрын
Фронтэндеры тихонько хихикают
@alla1672
3 ай бұрын
И бэкэндэры 😂
return Integer.parseInt(new StringBuilder(String.valueOf(number)).reverse().toString());
@user-mb1dj3pk2d
3 ай бұрын
Не будет работать. Отрицательные числа не учитывает. Но за основу самое то
@petrivanov1565
3 ай бұрын
@@user-mb1dj3pk2d так это и есть основа, обыграть знаки не сложно.
@user-mb1dj3pk2d
3 ай бұрын
@@petrivanov1565 опять же не все учтено. Если передается отрицательное число, то метод должен возвращать тоже отрицательное число. И так же в условии сказано, что если число превышает int, то надо возвратить 0.
@user-mb1dj3pk2d
3 ай бұрын
Не очень подходит здесь stringBuilder. Лучше через цикл.
@user-tk7nh1jw3y
3 ай бұрын
Будет медленней работать
Херь какая то, максимум тянет за знания базовой арифметики, java тут вообще хз зачем, если нельзя баловаться обертками и исключениями
fun reverse(x: Int): Int = if (x < 0) -(-x.toString().reversed().toInt()) else x.toString().reversed().toInt()
@PivDen-jv3th
3 ай бұрын
String reversedStr = new StringBuilder().append(Math.abs((long) x)).reverse().toString(); try { return (x } catch (NumberFormatException e) { return 0; }