Подготовка к собеседованию на Java Developer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
[музыка] Всем привет на связи Николай технический мент RW И сегодня я проведу интервью на позицию jor Java develop интервью пройдёт улья Худяков мы поднимем такие темы Как gc работа jav платформы в целом работу с коллекциями Exception хелин и многое другое мы проводим такие собеседования в рамках карьерного трекинга и в рамках личных консультаций это помогает нашим ребятам чувствовать себя более уверенными на собеседованиях получать заветные офферы и подтягивать знания в целом Поэтому если вы хотите записаться на пробное
00:00:00 - 00:01:02
собеседование переходите по ссылочки внизу но мы начинаем Привет Получается Илья вот сегодня получается небольшой Собес вот на позицию разработчика вот тогда можешь вкратце о себе сначала рассказать буквально парочку минут и потом уже тогда перейдём непосредственно к самому Собес начнём с платформы Ja в принципе в общем поговорим о ней и потом уже Может быть поговорим а бэнде в принципе в целом вот уже отойдём немножко конкретно языка уже перейдём каким-то таким более техническим вопросам характера Кэн Вот
00:00:32 - 00:01:46
Угу Да ещё раз Всем привет Меня зовут Илья Я 6 с по лет проработал специалистом технической поддержки параллельно своими силами Изучая джаву вот последние полгода увлёкся го но до этого никакого опыта именно в разработке у меня не было Окей хорошо и какие вообще цели перед собой ставишь Если вкратце тоже можешь рассказать может быть какие-то ещё задачи пришлось решать интересные тоже можешь об этом рассказать какие-то сложные Ну каких-то сложных интересных задач что-то мне сейчас не припоминает
00:01:09 - 00:02:27
но цель - это конечно же найти достойную работу и попробовать вообще себя в этой сфере всегда как бы нравилась разработка Но вот никогда даже в принципе не знаю как оно там на той стороне Вот именно в плане в коммерческой сфере только вот свои личные под проекты какие-то писал и вот как-то так О'кей Я тебя понял Давай тогда с тобой перейдём к технической части небольшой И начнём А наверное не с jav Core А вообще в принципе в Java платформе Ты можешь мне рассказать вообще чем а Java примечательна если мы
00:01:48 - 00:03:00
говорим о ней в контексте платформы то есть что у неё такое есть благодаря чему например Java является платформа независимым языком а вот об этом да Если можно конкретику больше то вот о двм в принципе вот и рассказать может быть какую-то предысторию вообще почему Java А вот развивалась как платформа Независимый язык то есть где она вообще использовалась и вот к чему мы сейчас пришли в 2023 году вкратце Угу Ну да как ты уже сказал Java это некая платформа которая позволяет нам разрабатывать приложения и запускать их вне
00:02:26 - 00:03:36
зависимости от операционной системы э это позволяет нам сделать как раз-таки jvm Java Virtual Маши которая написана уже под большинство известных и Да я думаю и не очень операционных систем и то есть мы один раз пишем какой-то код какую-то программу и благодаря G можем запускать эту программу на различных устройствах скажем так Ну вот основной плюс её в том что мы не привязываем к операционной системе у них даже слоган такой написал Однажды работает всегда как-то так Если я ничего не путаю Ну Java нам
00:03:00 - 00:04:33
предоставляет jdk Java develop Kit который в который как раз-таки входит Java env который позволяет запускать нам приложения библиотеки которые позволяют нам писать Ну используем эти библиотеки чтобы писать приложение и Java компилятор который компилирует наше написанное приложение в байт-код который последовательность уже передаётся Ну с использованием дре можем его воспроизводить Окей хорошо А ты знаешь какие-то ещё языки которые используют B код который который как этап тоже Ну я думаю CP их платформа dnet Я думаю это в
00:03:47 - 00:05:18
принципе наверное Может ещё с питоном работать там тоже есть то есть всё тоже по оператора обрабатывается да а да если мы говорим ове то тоже У нас есть код который собственно GM Тоже имеет возможность всё тело тоже обрабатывать А вот да то есть прин подход если мы говорим желе тут немножко отличается от c+ Потому что всё-таки эти языки у нас платформы зависимы Да если мы пишем Наго у нас зависит очень сильно от того На какой машине будем разворачивать если мы говорим от Java то в принципе там ве автомат какое-то
00:04:35 - 00:05:43
устройство нам нужно просто создать какую-то определённую там мент какую-то среду а да которая собственно будет потом уже какие-то брать Ну ресурсы операционной системы собственно Вот и потом будет Вот собственно выполнять какой-то Наш какие-то наши какую-то нашу там бизнес задачу Окей хорошо а а ты можешь ещё рассказать тогда о такой вещи как gc вот как тоже одна из особенностей это платформы Java потому что в принципе она есть и была всегда А да то есть Мо рассказывать Вообще какую задачу Он решает когда он
00:05:10 - 00:06:13
применяется когда-то не применяется Да как е можем может подн немножко вот да gc Garbage колектор Он позволяет нам особо не париться по поводу памяти то есть запускается в jav сам когда это необходимо и почиа ет объекты которые мы уже не используем в программе что оним рассказать Ну наверное Может этапы как это происходит то есть э э Сами мы руками вызвать его не можем Но есть метод system.gc который вроде как позволяет нам это сделать но всё равно Java Сама решает запускать э сборщик мусора или нет
00:05:41 - 00:07:22
и в момент запуска у нас происходит так называемый stop the world пауза которая останавливают все потоки все процессы ээ и начинает помечать э объекты которые необходимо в дальнейшем удалить то есть На которые нет больше ссылок никаких э И после этого производит очистку памяти как-то так Окей хорошо а ты говорил то что у нас есть пау Да смотри ты что ты сказал что Они оста потоки а потоки чего останавливают то есть потоки вообще всего или потоки потоки приложения потоки приложения Ну то есть потоки в
00:06:31 - 00:07:54
принципе которые там Мы создали Наши или наше потоки сборщика не живут у нас бы сборщик он работает там каки своми потоками вот поэтому он живёт может работать и смотреть хорош тодай тоже вопрос смотри а может быть такое что за время работы вообще нашего поз ве его там какой-то жизненный цикл короткий не гери gc вообще то есть чтобы он не вступал в работу то есть со время работы нашего приложения Ну я думаю вполне возможно тоже зависит от приложения Угу хорошо А да а с чем это можно связать то есть какая тут есть
00:07:13 - 00:08:28
получается какой-то фактор который как бы заставляет жи работать то есть после какого момента он понимает что нужно собирать мусор Ну может [музыка] это ну какая-то нехватка памяти ну по факту там да если мы просто нем ровать память какую-то да А нам память нужна А Стара у нас достаточно много есть которую хорошо бы проверить если там Мусор да И если да такое вот условие выполняется то начина в принципе вступать работу если у нас такого нету триггера да и у нас доста много места в кипе ещё то у нас может быть такое что
00:07:51 - 00:08:59
зарабо наше приложени вообще в принципе ц не будет собирать память такое тоже может быть и есть такие Я знаю какой-то софт который на вообще gc не использует вот там есть определённый вид gc там как н по-моему который вообще в принципе собирает Вот Но обычно по умолчанию ставит First потому что он показал в принципе как достаточно хороший gc для большинства вообще в принципе ну работающих приложений на Джаве поэтому и сделали его фак стандартом определён до этого был как я понял он взял лучше из и
00:08:29 - 00:09:40
из наверно вроде как так да можешь вобще расказать Какие знаеш ЕС уж тогда говорил какие есть какие слышал ну вот слышал про Я так понимаю если мы пишем какое-то десктопное приложение не веб-сервис то по сути нам достаточно будет се потому чтоль [музыка] програм буквально на миллисекунды вот этот происходит и тут ничего мы особо не потеряем А если же это какой-то веб-сервис то у которого там не знаю сотни запроса в секунду то здесь конечно же не подойдёт тут Наверное Вот уже как раз таки лучше использовать First
00:09:03 - 00:10:48
хорошо Слушай как мы можем например задавать вот эти параметры конфигурации То есть когда у нас что происходит Мы можем например выбрать какой gc мы хотим использовать Ну я так понимаю это при запуске приложения можем с помощью каких-то флагов Ну да то есть флаги которые позволяют нам при подъёме виртуальной машины можем собственно указать при создании виртуалки то есть какой мы хотим gc использовать можем его поменять gc G1 gc Да он используется умолчание так можем выбрать как бы и в принципе любой который мы захотим то
00:10:00 - 00:10:58
есть зависи Т какой-то наш задаче мы брам соответствующий ц Но обычно А я редко встречал на практике чтобы люди именно конфигурировать gc До мелочей обычно как бы j1 хватает на самом деле Ну вроде как сказано в документации лучше вообще туда не лезть и не трогать Ничего если всё работает там работает достаточно всё оптимизировано но если ты как бы угараешь по какой-то оптимизации И ты очень хорошо знаешь как работает ВПО То есть как у тебя лоцируется память как она потом очищается то ты можешь как
00:10:29 - 00:11:20
бы вследствие этого выбирать gc если ты как бы не то чтобы очень сильно осведомлён только пришёл вну проект И ты даже сам не знае даже е документацию нечи ничего то лучше коне потому что банально ты можешь всё сломать вот у меня вот на проекте есть тоже параллельной команды ребята которые поменяли G у них всё сломалось Потому что есть такая штука какле Котова процесс Вот и изза работы определённого определённой его стадии работы Вот она просто ка который был н поэтому делать если ты не знае Ой хорошо
00:10:54 - 00:12:04
сри что ещё можно например Какие можно ещё плаги например попробовать проставить при создании там при создании виртуальной машины то есть что ещё можно указать например ну наверное размер [музыка] хипак это называется лаги не XS указать соотношение младшему поколения к старшему Ну это тоже там можно всё указать О'кей Хорошо давай тогда перейдём с тобой к У наверно кор вот можешь тогда сказать мне тоже достаточно вопрос которые часто всем задают и мне вот ещё раз задавали и я наверное продолжу эту практику по поводу
00:11:29 - 00:12:50
икса шкод вот у нас есть два таки контракта Да у базового класса о А какой между ними вообще контракт есть и какие-то могут может быть примеры А работы то есть когда в принципе можем эти методы использовать То есть почему важно нам их переопределять и пере правильно вот Ну да наверное Что надо сказать если если два объекта Мы сравниваем через equals и они равны это Следовательно и хш код у них должен быть тоже равен но в обратную сторону не так если шкод равен не значит что будет объект равен по
00:12:11 - 00:13:33
equ переопределять мы должны если мы пере определяем метод equ то Я думаю обязаны переопределить и шкод Да потому что ну это используется допустим в той же хш мапе когда [музыка] мы ищем когда ищем объект в хш мапе и если у нас будет как-то не переопределения как-то неправильно пере определим то использование ш У нас тоже будет немного нерациональным То есть если у нас все все объекты будут попадать в какой-то допустим Один Бакет то у нас принцип ш он просто превратится в обычный по-моему да [музыка]
00:12:51 - 00:14:39
в использовани HM плюс в том что у нас доступ [музыка] к К объекту у нас сложность от единиц то есть от константы Ну да это в хорошем случае если у нас по одному по одному какому-то объекту там ключ значение в бате да Тогда мы точно знаем куда нам нужно будет пойти в какой Бат если у нас это всё дело вырождается вли у нас уже будет линейна сложность для поиска не очень хорошо поэтому в принципе можно полагаться на допол конечно генерацию и там идеи тебе предлагают Ну в принципе если ты сам шаришь Какие ля ты хочешь учитывать при
00:13:59 - 00:15:07
сравнении как ты потом будешь использовать если ты будешь одну сущ сравнивать с другой то ты можешь сам заниматься собственно переопределения этих методов но можно оставить это всё дело как бы идеи по-моему такие кейсы у меня были когда Ребята в принципе просто брали какую-то дефолт ную там имплементации этого метода в зависимости от того как сколько нам у них полей в сущности О'кей Хорошо смотри а вот когда мы например создаём свою сущность Да какую-то бизнесов например там студента У нас есть какие-то набор каких-то полей
00:14:34 - 00:15:24
которые его опис свойство имя не знаю там какие-то имя фамилия телефон какие-то там набор каких-то ещ параметров смотри обязательно учитывать все поля в Или можем какие-то методы не методы какие-то поля можем упустить и не учитывать их в эде Я думаю если ты сечас прил пример имя фамилия и номер телефона Я думаю здесь надо скорее всего все исполь потому с одинаковым им и фамилией но при этом Телефоны у них точно будут разные Ну то есть я наверно скоре да наверно скорее к тому веду что в принципе мы как бы как с
00:14:58 - 00:16:25
точки зрения разработки мы можем тоже сами решать какие мы хотим поля Какие поля у на должны участвовать сравнивание обычно это бизнес поля которые мы создаём бизнесов какие-то конкретные мы должны учитывать и шкод то есть обязательно и мы сами же в принципе решаем что мы хотим какие-то Каля Коля какие-то поля которые там инфраструктурные для нашего конкретного бка который мы потом никуда не передаём вот если там мы не являемся клие Ну кто-то там не дёргает данные как у нас то мы можем их в принципе и не
00:15:42 - 00:16:45
сравнивать Но если нужно будет то можем тоже включать Окей хорошо тогда поговорили про то как можно ещ потерять объект в мапе изза того что мы криво определили шкод Окей хорошо давай тогда поговорим немножко про проги в принципе ты тоже наверное знаешь вот в принципе да можно вкратце тоже тогда рассказать методы объектов Да методы объекта базового класса само об есть да Ну это как мы уже сказали equ методы string который [музыка] позволяет при вызове при как позволяет предоставить [музыка] нам строково описание объекта как-то так
00:16:13 - 00:17:56
потом методы метод вот вроде все может что-то у да Это строковое скорее представление Просто если мы передам как аргумент если мы передам просто по умолчанию какой-то об же поча Да если мы потом пере определяем стрин можем красиво вывести там поле его какое-то состояние этого поля в виде какому-то Красиво напечатанного там не знаю Аля не знаю или Ну хороший формат вот где мы можем посмотреть сразу репрезентативной представление нашего объекта вот какой экземпляр вот а так мы да Хорошо А что по умолчанию например Мы
00:17:07 - 00:18:15
хотим напечатать клас который мы с сами сделали Там пять полей там всё дела Гетеры всё Окей но они сделали там ту STR например и пытаемся его передать как аргумент в например какой-то метод там То есть а что у нас будет тогда в итоге то есть Что у нас по умолчанию в принципе будет там я так понимаю название класса и соба е Циферки будут да то есть мы в принципе не увидим какого-то там не сможем увидеть внутренности мы не увидим Да какое там состояние переодели нужно буде переопределить хорошо давай тогда нано с тобой
00:17:47 - 00:18:59
поговорим сейчас про EX вообще в Джаве он устроен тоже немножко можешь вкратце рассказать какая вообще идея обработки ошибок в Джаве То есть если мы говорим там оси о плюсах у нас там не очень скажем так удобная обработка там если мы говорим о да то есть у нас есть какой-то флаг мы его проверяем потом проверяем там состояние этого флага если что-то не то то мы обрабатываем прямо же в коде саму ошибку вот в Джаве У нас очень достаточно удобно сделана в общем обработка ошибок tion Hand А ты можешь как раз рассказать
00:18:23 - 00:19:16
какие-то конструкции Как мы можем вообще это обрабатывать какие-то заключительные ситуации Ну да конструкция cch которая позволяет нам как раз-таки отлавливать какие-то эсп в блоке мы просто описываем вызываем допустим функцию которая в которой ожидаем что может вывалиться Exception А в блоке мы уже описываем то что надо сделать в том случае если выпадет есть хо во сразу голову Давай тогда наверное про Трай с ресурсами Ты наверно тоже знаешь та конструкцию часто использует можеш сказать какое вообще условие
00:18:50 - 00:20:11
должно быть чтобы мы ресурс передали вот в эту конструкцию Трай скобочки что должно выполняться Да он по-моему должен от какого-то интерфейса имплементировать который Лоза был Возможно или что-то такое чтобы у него был метод CL который Как раз-таки выполняется после выполнение вот этого блока там там все объекты которые это деламен можно спихнуть тогда он будет работать Окей хорошо давай тогда Следующий вопрос по поводу перетирания исключений Смотри когда у нас может такая ситуация произойти Когда мы можем
00:19:34 - 00:20:45
перетереть исключение то есть перетереть исключение В каком плане Ну например у нас есть несколько исключений У нас есть какая-то ирах исключений от более какого-то базового исключения до более какого-то конкретного може какую-то ситуацию привести например что вот мы идм по коду у нало У нас есть конце ке например да получается попытаемся допустим пойти в какое-то хранилище или у нас какой-то репозиторий например да Spring там например да мы получаем какую-то ошибку что мы не можем например найти текстовка что мы не можем найти
00:20:11 - 00:21:16
пользователя с таким-то ашнико да А ты можешь мне привести пример когда мы можем потерять сообщение об этом исключении то есть что мы должны сделать такого чтобы потерять сообщение об этом Ну наверно Тут надо обрабатывать исключения в порядке их иерархии То есть если мы обработаем исключение просто Exception то наверное он в том случае в этом случае как раз перетрясово более общему потому что в принципе если мы Ну обычно бизнесов исключение не там что это экн от R Exception потом мы делаем какую-то там статическое поле
00:20:42 - 00:21:52
которое там презентует какое-то текстовое сообщение потом делаем конструктор и потом уже создаём какой-то Эля нашего исключения Но он же вс-таки подпадает например и под пра если мы говорим про дерево наследование про всю иерархию поэтому можем его таким образом перетереть у нас просто было ке выполнится О и собственно всё как-то так вот Окей хорошо А тогда можеш мне рассказать ещё про конструкцию наверно сли тоже может быть ты её где-то видел где может быть о рече может прини выполняется в любом случае неважно что
00:21:23 - 00:22:32
выпало исключение или не выпало исключение и возможно его можно использовать как раз таки для того чтобы закрыть какие-то какие-то ресурсы То есть это ну по сути аналог который видимо появился раньше чем сам ресурс и в этом блоке мы как раз можем закрывать какие-нибудь допустим подключение базе нало открыто можем его зарыть сути обязательно выполнится Ну да собственно в принципе неважно у нас выпало исключение или нет во время работы с чем-то мы ВС но должны закрыть ресурс как бы какой-то там и и какие-то
00:22:03 - 00:23:16
другие ресурсы Да может зна со соединени и прочее мы должны в любом случае освобождать как бы ресурсы которые по них были выделены Окей хорошо давай тогда Наверно с тобой ещё поговорим промы поговори про в принципе есть Но обычно в принципе тоже бы используется Окей хорошо давай тогда нано с тобой поговорим о коллекциях перейдём в принципе там спми всё понятно более-менее Ну да я могу спросить в принципе как создавать исключения без плюс-минус тоже понимаешь как это надо сделать наследоваться наверно
00:22:39 - 00:23:53
да вот Во чек нече исключения тоже спрашивают в принципе достаточно часто у нас есть два каких-то да таких больших Две таких больших группы исключений это проверяемое исключения и не проверяемое исключения ты можешь какую-то разницу между ними сказать какие-то может примеры чек исключений Аче исключений и наверное в контексте того вот наших исключений бизнесов которые мы генерируем то есть какой группе они будут скорее всего относиться к или Ну проверяемые это те [музыка] которые компилятор э ещ может ну как
00:23:26 - 00:24:36
заругает Уже наверное больше ошибки какой-нибудь виртуальные машины с которыми мы уже сделать ничего не сможем и Ну вот наши бизнесов - это проверяемые получается Угу не да да ты сказал я тебя не потом сказал есть же ошибки Да там уровням какие-то R да да там когда у нас переполняется который у нас выделен а у нас есть of Да когда у нас всё мы не можем ровать какое-то место кипе Да это Р В принципе мы можем по идее это всё дело словить но у нас нет инструментов для их какой-то обработки потому что что ты будешь
00:24:03 - 00:25:14
делать у тебя больше нет ресурсо выполняться и как Ну у тебя хи переполнен например или на у тебя к переполнен Ну даже если ты поймал что ты сделаешь дальше Да не очень понятно А ну с точки зрения разработки разработчика уже это дело лить не получится нужно просто причину понять почему это получилось а если мы говорим о Check and Check то там Exception Да Check оно проверяется компиляции как ты сказал всё окей оно будет это проверять А если мы говорим обчак исключениях то в принципе мы а все наши бизнес исключения тоже генерируем
00:24:42 - 00:25:42
как ачак исключение Почему Потому что ну какой-то кейс У нас есть какой-то ст-сервис например да у нас есть какие-то там пост запросы Get запросы А мы же не можем при компиляции знать например про наши исключения которые могут возникнуть в ран тайме в принципе правильно это логично поэтому мы они называются исключения то есть они как-то как-то создаются как-то обрабатываются как-то прокиды уровне выше Да через там ну различные механизмы Вот и мы получаем какую-то там 404 и про какую-то вьюшку там тамп уже на фронте и всё хорошо да
00:25:12 - 00:26:10
то есть ну при компиляции мы об этом не знаем то есть у нас Потому что трафик динамический У нас меняется постоянно столько-то людей пришло там столько-то запросов было столько-то не было может быть вообще ноль запросов за день Кто знает и у тебя не будет сгенерирован вообще ни один объект исключения поэтому Окей хорошо в принципе про исключение Всё окей там ещ есть вопросы про пробросить исключение дальше ли обработать но в принципе ты тоже это знаешь мы есть два метода достим Да как можем с ними работать прора Дальше
00:25:41 - 00:26:43
например да вообще уже в виртуально машину можно или в принципе обрабатываем на меся на это ты наверное тоже ответишь поэтому давай с тобой к коллекциям перейдём расскажи вообще просто об бараке коллекции какие есть основные интерфейсы кто кого расширяет да так Ну да нанм Корень это интерфейс от которого у нас идёт интерфейс Collection и тут уже у нас три Интерфейс это Set или у нас этот интерфейс реализуют ла [музыка] L linked list потом интерфейс Set реализует ш и интерфейс Q реализуют класс priority Ну заст ты будешь скоре с
00:26:12 - 00:28:11
очередями работать можешь Link просто брать в принципе это хорошее решение как ици также ещ есть Да который реализует ш Table ш Map и Угу Да ты сейчас сказала там потоки безопасные сразу и не поток безопасные вот там есть Кока ш там есть могу потом спросить тоже отличия Ну сейчас у меня много потоки Можем потом о ней поговорить Окей хорошо А почему вообще мапа стоит очере Ну она стоит как-то особняком да то есть если мы говорим про всю иерархию мы видим то что у нас мапа стоит как бы она не наследуется например да она не
00:27:21 - 00:28:33
расширяет itb Хотя как бы это тоже коллекция Да можешь сказать вообще твоё предположение Почему так получилось почему она одна Ну вообще мапа нам позволяет хранить данные в виде ключ значения и она не имеет доступа э по по индексу Может в этом ещё тоже дело Ну а так вот наверно ключ значение Даго Ну если мы говорим о коллекциях типа лист там сет и прочее то мы там имеем какой-то один объект который мы хотим в памяти вот если мы говорим о если мы да говорим о мапе то мы имеем ключи значения и храним как бы
00:28:00 - 00:29:19
получается вместе как пару Поэтому в принципе поэтому она как бы и стоит отдельно Окей хорошо давай тогда про Ма поговорим про ш наверное поговорим вообще в чём достоинство ш то есть как вообще организована сама мапа Ну как бы изнутри из чего он состоит о внутренней какой-то структуре можешь рассказать и можешь ещё сказать Наверное в принципе как Вообще процесс Фло работы Если мы например хотим там вызвать мед Get например да если мы хотим что-то положить там мапу Значение если мы хотим что-то достать Вот и
00:28:51 - 00:29:58
прочее Ну вообще под капотом уш называемых Батов а Бакет - это хранит в себе связанный список Ну да то есть при добавлении в хэш мапу у нас происходит сначала высчитывание шкод потом получаем из этого хш кода индекс обычно это просто получаем остаток отделения на количество Батов и число которое получим общем это и есть номер Бакета в который нам надо положить Ну само значение тем самым ш Map нам даёт быстрый доступ к Ну к элементам своим так как под капотом это по сути всё хранится в так называемом
00:29:22 - 00:31:08
массиве как я помню идея была взята на само с массива если мы так посмотрим на Бат на бакеты да Как устроена мапа идея была да изначально мне кажется взята с массива то что у нас есть просто непрерывный участок памяти а да где у нас есть получается какие-то сущности Вот и у нас есть по факту массив баке тов который себ представляет там Link лист каждый и мы по идее можем а обеспечить контракт от единички да то есть констант ную сложность там поиска вставки а и потом доступа посколько мы будем как-то например иметь хорошую хэш
00:30:19 - 00:31:29
функцию и мы будем уверены то что у нас одна пара ключ значения на Да лежит в каком-то одном бате и поэтому мы сможем точно там за одно действие сказать то что вот в этом бате лежит то вот в этом бате лежит то и прочее если возникают коллизии Да это не очень хороший вариант для нас потому что когда у нас это всё дело немножко вырождается в лист мы начинаем там смотреть по Шкоду потом сравниваем по equals потом перезаписывать при записываем А если всё-таки объекты разны то мы начинаем растягивать у нас получается мапа
00:30:54 - 00:31:43
увеличивалась Да и как бы мапа у нас увеличивается есть там да можешь рассказать ещё кстати под вопросик по Может ли ма меня структуру например да в после набора элементов не помню не помню После какого количества но потом вместо связанного списка она превращается каждый Бакет превращается в три по-моему Ой три Ну в дерево красно Чёрное дерево Ну да там есть определённые параметры там по-моему при че батах и ше элементах в каждом бате вли лист А у нас есть получается Перестройка просто чёрно дерева то есть которая слан дерево да и
00:31:18 - 00:32:39
у нас собственно соблюдается ещё все свойства бинарного дерева поиска Да то что у нас есть логарифмическая сложность поиска вставки АС Можем отсекать по деревья и собственно идти в ту часть дерева которая нас интересует вот когда мы хотим что-то найти в ней вот Да такое есть а О'кей Хорошо ты про это сказал про то как мы можем потерять объект ты тоже сказал в мапе в принципе да А может ли мапа например сужаться то есть в размерах своих или может только расширяться становится больше ну я думаю только
00:31:59 - 00:33:05
расширяться некий параметр fact который как раз таки при достижении этого значения по-моему 75% если память не изменяет у нас происходит как раз таки расширение увеличивается количество Батов и я думаю в обратную сторону это не работает [музыка] Батов ты помнишь в мапе Находи 16 если да А сколько о увеличивается раз если мы [музыка] де наверное раза в два там два раза 32 64 Да а окей хорошо давай тогда наверное ещё поговорим про может быть тоже лист тоже затронем такую коллекцию вообще какая вообще изначально взята структура данных
00:32:35 - 00:34:14
Да просто информатики Ну массив не список это структура данных и собственном структуру Дан Хорошо а ты можешь мне сказать вообще из чего Она состоит что у нас есть как мы ищем элементы как мы пытаемся удалять элементы как мы вставлять пытаемся нут из так называемых внутри себя содержит сам элемент ссылку на следующий элемент и ссылку на предыдущий элемент и поэтому Когда нам надо найти какой-то элемент мы начиная с начала либо же с конца начинаем идти просто поэлементно ища нужный нам объект у но добавление при этом
00:33:27 - 00:35:02
происходит проще потому что мы просто переписываем ссылку на предыдущий у одного объекта и на последующий у добавляемого и в итоге у нас очень быстрое происходит добавление Ну смотря куда наверно даве да Но Ну середину Ну если мы хотим хорошо а вот если мы хотим добавить на какой-то индекс например ноду то есть мы хотим всё равно пройтись нам ВС но будет сложность скорее всего линей пра если мы хотим какое-то конкретное место Даже если мы ссылки просто ставим мо сдела мы всё ра до до это момента дойти Ну да
00:34:23 - 00:35:37
если мы опираемся на голову хост Ну то есть в принципе да там достаточно просто имплементировать да там делаешь Статик класс ноду у него есть там Левы право указатели само там какой-то in Вот и потом може ещё там как статически поля сделал головы и хвост если мы вставляем в конец начала то у нас будет какая-то константная сложность по факту мы можем как-то запоминать состояние где они находятся Да кто является хвостом кто головой Да и потом просто по факту просто ссылки например менять Да это всё ой если мы вставляем
00:35:01 - 00:35:54
какой-то конкретный индекс или мы пытаемся найти что-то по конкретному индексу например да Или какой-то найти элемент по значению Да лучше найти там ноду по значению какому п мы долж Всё роваться у нас будет Лине сложно пройти по всем да да как-то Так поэтому Link наверное не очень часто используются наверно скорее для имплементации Q Вот Но вообще дали Наверное это самая ма имплементация для листа То есть Окей хорошо Так это мы получается говорили А давай тогда наверное наверное ещё спрошу тебя по поводу
00:35:28 - 00:36:34
М может быть немножко ноготочки тогда Если уж Мы тоже начали о ней говорить ты можешь мне сказать вообще Какие есть варианты синхронизации вот в Джаве Ну в принципе вообще если мы говорим о любых там языках программирования то есть что мы можем использовать для того чтобы а привести там в порядок наш какую-то конкурент конкурентную какую-то среду где у нас потоки борется за какие-то ресурс за расшаренную какую-то память Ну в Джаве мы можем использовать ключевое слово Сина которое помечает либо часть какой-то блок кода либо сразу
00:36:07 - 00:37:11
целиком метод Это говорит о том что данный метод или часть коды помеченные словом сирона будет выполняться в одном потоке то есть остальные будут ждать пока из этого потока пото не выйдет из этого Из этого метода из этой части кода также есть пакет ээ concurrent по-моему в котором тоже есть всякие вспомогательные так скажем м элементы Там те же Локи которые тоже позволяют нам блокировать ээ Ну блокировать какой-то объект пока мы его допустим изменяем в одном потоке и другие потоки будут ждать пока этот
00:36:39 - 00:38:06
объект не разблокируется не включил микрофон Да сори окей да хорошо с этим Да давай тогда сразу по этому фид скажу то что всё окей по вот этим вот токам прошлись в принципе всё Окей если что-то надо повторить в принципе всё окей по коллекциям может быть надо просто ещё почитать какие есть коллекции может быть какие-то могут ИМП промеж интерфейс обычно спрашивают прин какие-то основные суно же проче вот ну и также ещё могут спросить по поводу того что мы будем если у нас будут какие-то налы в мапе Какая мапа
00:37:22 - 00:38:35
пойдёт Какая нет тоже можно просто потестить там три нар Будет ли подать сразу Когда у нас будет какой-то новый ключ Да и вообще или там ш Map тоже можно проверить потому что они разные всё-таки по имплементации вот как там ещё компараторы работают в в как мы как мы поряд общем объекта вот такое тоже могут спросить поэтому здесь всё О'кей
00:38:04 - 00:38:44