Решаем задачу с технического собеседования | Топ задача с собеседования | 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

  • @user-nd6xv4jv7u
    @user-nd6xv4jv7u3 ай бұрын

    В условии задачи сказано, что нужно представить, что среда разработки не позволяет хранить целые 64-битные числа, но при этом задача решена с помощью long, которое как раз хранит 64-битное число. Корректнее было бы вместо использования long переменной и условия с ипользованием константных значений использовать понимание, что происходит с int числом, когда мы выходим за его пределы. Можно использовать допольнительную переменную int temp для сравнения с предыдущей итерацией добавления числа. В случае если temp / 10 != reversed мы понимаем, что произошел выход за пределы и тогда можно возвращать 0

  • @user-wn7cs5bs1h

    @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

    @user-nd6xv4jv7u

    3 ай бұрын

    @@user-wn7cs5bs1h пришел к такому выводу следующим образом: если есть некоторое число которое мы хотим умножить на 10 и добавить некоторый остаток от деления, при этом произойдет выход за пределы, в таком в случае число будет выглядеть совсем иначе чем перед умножением и добавлением. Для того, чтобы проверить, равняется ли оно предыдущему, просто делим его на 10, таким образом добавленный остаток отбросится и останется лишь та часть, которая как подразумевается при невыходе за предел, будет равнятся предыдущему. Ну а если все же не равняется, значит произошел выход за пределы

  • @spider9872

    @spider9872

    3 ай бұрын

    ​@@user-nd6xv4jv7uдостаточно просто проверить, что модуль следующего значения переменной аккумулятора больше модуля предыдыдущего

  • @igormyatlyuk503

    @igormyatlyuk503

    2 ай бұрын

    ​@@user-wn7cs5bs1h ваше решение немного сложное для понимания и черезчур мудреное. Много ненужных проверок. Лично я выкрутился таким образом: if (Math.abs(reversed) > Integer.MAX_VALUE / 10) { return 0; } тут мы сразу понимаем, что следующее умножение reversed на 10 даст переполнение Integer и неважно, какой 'y' и какой знак 'x'

  • @alibaba40thiefs

    @alibaba40thiefs

    2 ай бұрын

    /* if ((res * 10 + tmp) Всего то проверить что инт ушел на следующий круг....

  • @Cesar-on-potomac
    @Cesar-on-potomac3 ай бұрын

    Привет, Макс! Хорошая идея начать делать разборы примеров с algorithm interview, т.к. зачастую это является первым фильтром для отсеивания кандидатов на позицию.

  • @antonsmirnov5707
    @antonsmirnov57073 ай бұрын

    Очень круто. Классный формат, приятно, виртуально так сказать посидеть и поразбираться с задачей.

  • @user-zo5gt9ck9b
    @user-zo5gt9ck9b3 ай бұрын

    Очень круто, спасибо, ждём подобных видео

  • @anjelomanoranjan
    @anjelomanoranjanАй бұрын

    Спасибо! Больше таких видео (с кодингом) хочу видеть на твоем канале!

  • @JohnJohn31595
    @JohnJohn315953 ай бұрын

    It's good. Thank you!

  • @alexkos2593
    @alexkos25933 ай бұрын

    топ контент, спасибо!

  • @user-lw3ib2gb9n
    @user-lw3ib2gb9n3 ай бұрын

    Макс молодец) спасибо

  • @alexkos2593
    @alexkos25933 ай бұрын

    я когда решал эту задачу вообще костыльно всё делал с помощью стринг билдера. В итоге конечно дофига памяти съело и рантайм был не оч. А вот это решение выглядить весьма элегантно

  • @hybi666

    @hybi666

    3 ай бұрын

    Да почему костыльно то. Если у стрингбилдера есть reverse.))

  • @SVA88

    @SVA88

    3 ай бұрын

    @@hybi666 бл**** )))) тот случай когда решил стрингбилдером но без reverse... стыдно

  • @user-lk8n0fgjk
    @user-lk8n0fgjk3 ай бұрын

    Проверку на отрицательное число, на ноль и на число кратное десяти можно вынести в отдельный if, что сэкономит время отработки кода при данных кейсах

  • @andreykatskin818
    @andreykatskin8183 ай бұрын

    подскажите ! где брать задачки по java !

  • @normanjayden352
    @normanjayden352Ай бұрын

    Сделал через StringBuilder и NumberFormatException: примерно все остальные решения быстрее моего. :D

  • @normanjayden352

    @normanjayden352

    Ай бұрын

    Но работает же!

  • @user-mb1dj3pk2d
    @user-mb1dj3pk2d3 ай бұрын

    Вот только по условию, мы не можем использовать 64-битные числа. Можно явно указать тип и отловить исключение либо добавить в цикл сравнение reversed с Integer.MAX_VALUE/10

  • @bezdna88
    @bezdna883 ай бұрын

    А можно ссылку на саму задачу?

  • @maksymz6695
    @maksymz66952 ай бұрын

    Я делал почти так же только прооверял на диапазон от нуля до инт мах

  • @ktotam8913
    @ktotam89133 ай бұрын

    задача на алгоритм подразумевает, что методами типа reverse / parse пользоваться не желательно при решении?

  • @Jetbulb

    @Jetbulb

    3 ай бұрын

    Каждый решает как может, а потом уже интервьюер смотрит на качество и на мысли наталкивает. К слову, применение готового алгоритма это лучше, чем писать свой и куда умнее

  • @Procestus

    @Procestus

    3 ай бұрын

    Я встречал 2 варианта, либо когда при постановке задачи запрещают сахарные reverse sort пользоваться, либо с хитрецой ждут что ты назовешь такие опции типа ты о них знаешь, а потом попросят без них. Случаев когда называешь секундную имплементацию и тебе - ок, пошли дальше - небыло

  • @user-007-1
    @user-007-13 ай бұрын

    Если не использовать лонг, то можно смотреть, положительное ли число пришло на вход - то есть завести boolean isPositive например, и в каждой итерации сравнивать, не изменило ли получаемое число свой знак. Если изменило - значит произошло переполнение. Но в проде я бы конечно использовал лонг

  • @igormyatlyuk503

    @igormyatlyuk503

    2 ай бұрын

    проверка на изменение знака не поможет. попробуйте ревертнуть число 1534236469. число не изменит свой знак, но будет некорректным

  • @kensaitakeso
    @kensaitakeso3 ай бұрын

    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

    @moovestone

    2 ай бұрын

    нельзя лонг использовать

  • @BlogipsE
    @BlogipsE3 ай бұрын

    Пожалуйста сможете сказать нужен ли высшие образование диплом для Java Software Engineer ?

  • @1shakirov

    @1shakirov

    3 ай бұрын

    нет

  • @Jetbulb

    @Jetbulb

    3 ай бұрын

    И да, и нет. Все зависит от компании и требований, которые они выдвигаются к кандидатам.

  • @BlogipsE

    @BlogipsE

    3 ай бұрын

    @@Jetbulb ну Вабше я планировал вступить универ политехнический но везде идут престижные универы там Американский, французский И так далее и вабше пристиж универа играет рол? Для в этом сфере по?

  • @Jetbulb

    @Jetbulb

    3 ай бұрын

    @@BlogipsE Престиж играет роль в локациях, где ВУЗ признан. В остальном, это все "вкусовщина". Стандартный политехнический с кафедрой по разработке ПО - более чем достаточно. Хотя, такая кафедра есть далеко не везде

  • @twobeerornottwobeer5973
    @twobeerornottwobeer59733 ай бұрын

    Не понял насчет var. Почему явно не написать что это long. Каюсь, не смотрел видео полностью

  • @twobeerornottwobeer5973

    @twobeerornottwobeer5973

    3 ай бұрын

    Вообще var я использую, когда не хватает места записать в одну строчку, например у класса слишком большое имя.

  • @user-uh9ss3nd2b
    @user-uh9ss3nd2b3 ай бұрын

    Где автор находит такие задачи для собеседований? Я ищу вакансии java Junior и мне присылают задачи по типу: создайте аналог банковского приложения с валидацией входа на REST, с пагинацией, многопоточностью и так далее. Если бы мне такую задачу дали, как в видео, давно бы уже устроился. Я все чаще замечаю, как автор "преуменьшает" требования к джунам, это видно и по его интервью и по таким "кодинг-сессиям".

  • @vitamin2845

    @vitamin2845

    3 ай бұрын

    Это задание на стажёра, поэтому и не прошел на джуна. На джуна минимум полгода опыта еще нужно

  • @vadiknsk

    @vadiknsk

    3 ай бұрын

    это алгоритмическая часть собеса, в фаангоподобных компниях всегда есть, в остальных тоже может быть

  • @flint2159

    @flint2159

    3 ай бұрын

    Это тебе присылают тестовое задание)) а это алгоритмическое собеседование, которое идет после тех собеседования до которых ты так и не дошел 😂

  • @user-ze3zo3oq5b
    @user-ze3zo3oq5b3 ай бұрын

    Изучайте математику а именно высшую математику алгебру дискретную математику тригонометрию прикладную математику без этих знании в программировании делать нечего

  • @rytmtembr251

    @rytmtembr251

    3 ай бұрын

    Фронтэндеры тихонько хихикают

  • @alla1672

    @alla1672

    3 ай бұрын

    И бэкэндэры 😂

  • @petrivanov1565
    @petrivanov15653 ай бұрын

    return Integer.parseInt(new StringBuilder(String.valueOf(number)).reverse().toString());

  • @user-mb1dj3pk2d

    @user-mb1dj3pk2d

    3 ай бұрын

    Не будет работать. Отрицательные числа не учитывает. Но за основу самое то

  • @petrivanov1565

    @petrivanov1565

    3 ай бұрын

    @@user-mb1dj3pk2d так это и есть основа, обыграть знаки не сложно.

  • @user-mb1dj3pk2d

    @user-mb1dj3pk2d

    3 ай бұрын

    @@petrivanov1565 опять же не все учтено. Если передается отрицательное число, то метод должен возвращать тоже отрицательное число. И так же в условии сказано, что если число превышает int, то надо возвратить 0.

  • @user-mb1dj3pk2d

    @user-mb1dj3pk2d

    3 ай бұрын

    Не очень подходит здесь stringBuilder. Лучше через цикл.

  • @user-tk7nh1jw3y

    @user-tk7nh1jw3y

    3 ай бұрын

    Будет медленней работать

  • @rytmtembr251
    @rytmtembr2513 ай бұрын

    Херь какая то, максимум тянет за знания базовой арифметики, java тут вообще хз зачем, если нельзя баловаться обертками и исключениями

  • @alekseysverbeev2934
    @alekseysverbeev29343 ай бұрын

    fun reverse(x: Int): Int = if (x < 0) -(-x.toString().reversed().toInt()) else x.toString().reversed().toInt()

  • @PivDen-jv3th

    @PivDen-jv3th

    3 ай бұрын

    String reversedStr = new StringBuilder().append(Math.abs((long) x)).reverse().toString(); try { return (x } catch (NumberFormatException e) { return 0; }

Келесі