Собеседование Senior Android разработчика. Часть 1

Подготовка к собеседованию на Android Developer

Транскрипция видео:

  • так но начнут технических вопросов получается как я понимаю на Джаве ты писал Ну да первое приложение было на Java да да так Ну давай начнем с такой вещи Это довольно частые программисты почему-то пустая выпускают именно в изучении данной темы этой коллекции сложность коллекцию такое Давай Какие ты знаешь типы коллекций Ну смотря насколько далеко абстрактно мы заходим Но если дальше еще [музыка] Окей окей можешь тогда сказать отличие и в каких местах при надо применять такие коллекции Как лист сеты Map

    00:00:00 - 00:01:38

  • Ну скажем так лист но если говорить о реализации например рейлиста то это одна из самых не оптимизированных и самых скажем плохие для вставки и чтение коллекций Вот Но тем не менее применяют скорее всего чаще всего Потому что если надо чисто получить список причем небольшой список и с ним что-то сделать то в принципе нету Большой разницы Единственное что в нем Хорошо это доступно контактное время то есть если мы знаем индекс элемента мы к элемента можем Достучаться за концентратное время потому что

    00:01:07 - 00:02:32

  • под собой это обычный практически обычно динамический массив который автоматически расширяется в зависимости вот если мы говорим о мэппи то это сложная структура но Ну наверное самый оптимизированное то есть быстрая вставка быстрая извлечение быстрый доступ все закону все за константное время все очень быстро оптимизировано вот ну обычная скажем самая частая реализация она у нее есть один минус на мой взгляд это он не сохраняет порядок которым мы записываем потому что записывается записывается просто

    00:01:55 - 00:03:28

  • случайном порядке Ну зато быстро красиво для сохранения порядка есть Кстати я недавно первый раз в жизни воспользовался Мне нужно было именно и мне надо было чтобы порядок сохранился я наконец-то хоть раз понял где интересно вот Ну вот так вот Link хэшмэп это ну хэшмэп который там связан с списком тоже связанным Я не уверен даже двух Связном или связанным связанным точно связанным не запомним и нет позднее смотрел реализации именно сама хэшме Вроде я я как-то смотрел прям разбирался но я не помню вот так

    00:02:49 - 00:04:42

  • окей окей окей Так что можно сказать про многопоточные коллекции Скажем я с ними никогда не работал не приходилось никогда вот поэтому в теории я про них читал но сказать на практике что там с ними конкретно происходит вот Ну на практике Не при мне то есть я в теории вроде как понимаю что там происходит но на практике сложно лично тоже никогда их не использовал так Окей окей про что можно сказать про сложность добавление так сейчас доступа Так что можно сказать про сложность доступа добавление удаления в например Лиги для стен

    00:03:58 - 00:05:39

  • так Линт лист это связано Это как раз был связанный список Да сложность добавления и удаление там за константное время потому что надо только ссылку записать на предыдущий объект и удаление это добавление сложность удаления тоже никак Ну такая же константная потому что нам надо просто получается опять-таки нам [музыка] так вот сложности удаления нам надо найти объект получается но сама удаление как бы делается за константное время Так это с учетом что мы уже знаем имеем ссылку на конкретный объект тогда

    00:04:54 - 00:06:35

  • вот ну а дальше там время поиска но вставка соответственно ставка за концентратное время потому что мы просто записываем ссылку на предыдущий объект и все в принципе в предыдущей записываем ссылку на текущий вот все что мы делаем так хорошо давай тогда пойдем дальше так делегатами пользовался точно пользоваться думаю делегирование так интересно делегат знакомое слово или как делегат я что-то туплю делегаты когда Помнишь мы через Buy прописываем например да вот все все дошло Окей А знаешь какие типы делегатов вообще

    00:05:46 - 00:07:28

  • есть котлине Но ты уже сказал эти Я нет я не про это один из видов Ну нет что-то возможно знаю но не знаю как они так называют просто на самом деле там делегат на глаз или делегат на Поле может это объяснить принцип работы имплементирует Блин нет он как он это делает примитирует Да он имплементирует получается класс по конкретной реализации который мы указываем бай Вот вот как то так Ну да получается нас есть интерфейсик Окей окей Вот смотри сколько не еще есть стандартные делегаты какие-то из них

    00:06:42 - 00:08:22

  • знаешь 5 наверное я не знаю что не так называется Но честно делегатами очень мало пользовался вот поэтому возможно возможно знаю пользовался и даже не знаю что это стандартная делегаты Вот инжектор Ну тот же not Now это тоже делегата это стандарт Ну вот Ну значит я не знаю что это деле какие они чтобы уже знать смотри там есть получается дальше Ну да Понятно есть у нас тоже понятно это последний был я не помню Окей буду знать буду знать что дефолтные делегитс лежат в самом корень библиотеке Окей окей буду знать Это стандартный

    00:08:05 - 00:10:03

  • делегат а надо ли оно знать знания никогда не помешает тоже верно так смотри у нас есть Ну так возможно но так не не вспомню даже это не точно всегда но знал Ну так не вспомню даже чтобы я где-то прям вот нам использовал тогда этот момент опустим скажем разница между принципиальная Разница в том что зайдите за инжектор ну скажем Зайдите правильно будет сказать его в любом случае но сделает это тогда когда к нему первый раз обращаться то есть когда нам понадобится сам ничего не сделает его надо заменить самостоятельно обязательно если

    00:09:21 - 00:11:03

  • мы этого не сделаем и обратимся к нему то он краснется потому что ссылка на не существующее может сказать такой момент внутри является ли потока безопасным Lazy потока безопасным так я пытаюсь представить что может произойти если к нему обратятся из двух потоков Ну теоретически нет но он может что-то под собой нести вот не уверен но теоретически может что-то произойти что он уже там к нему уже один обратился одновременно 2 и они что-нибудь там с ним не то сделать пытается заинить два раза Вот что не

    00:10:31 - 00:11:51

  • такое может скорее всего произойти вот есть для этого другие нотации которые можно заставить его быть потока безопасным вот Ну вообще вообще в доке [ __ ] написано что она прям потока безопасно один раз и все и больше ни разу Не сработает А ну Lazy чисто про инида уже только заставить скажем тот кто первый обратился он его за инитет и все И дальше давай про модификаторы доступа наверное само опыт трогать не будем она уже замученная всеми в себя надо модификаторы доступа можешь назвать вообще какие есть

    00:11:22 - 00:12:51

  • но паблик он там по умолчанию так как таковой не используется поэтому правил этой протектор в принципе только они в общем-то Хотя опытный модификатор доступ так вот у нас 10 минут конференции потом перезайти надо будет там нельзя сразу увеличить Но это это минус так еще раз вопрос про Internal слышал что-то очень знакомое где-то я его видел ходе прям недавно Что же делает Блин не могу читать точно есть но что он делает сейчас доступ по модулю только в модуле терного доступ только в модуле модуль по моему в модуле был знаешь что

    00:12:13 - 00:13:50

  • Java есть есть модификатор это только в модуле А как он на модуль тогда смотрит что для него является модулем то что ниже тут скорее нет модуль это как именно структурка то есть набор packg Ну да откуда он будет просто интересно а что он будет читать типа кто лежит в том же Ну то есть этот класс И все кто ниже Но те все глубже получается да Получается кто во мне вообще весь модуль то есть и не только соседние пкджи но не только сам все что глубже именно и соседние Вы тоже видят Я просто не вижу смысла его использовать

    00:13:34 - 00:15:05

  • не знаю часто встречаемый кто его знает Может также как этот раз в жизни пригодится Ну окей внутри модуля Ну вдруг не Ну хотя какая-то логике в этом есть если и тебе надо чтобы в либе она была доступна но Извне никто не мог до него Достучаться теоретически пойди Да теоретически это может быть ты хочешь могут Достучаться может Достучаться любой из твоего из твоих либо но Извне никто не должен получить Ну война в этом логика прям хорошая прослеживается Ну ладно так окей можно опускать все вопросы

    00:14:29 - 00:16:14

  • связанные так Окей Смотри такой вопрос интересный у тебя объявлено правит поле да Получается ты можешь язык экземпляры вот дернуть Нет конечно правильно внутри класса доступно Окей как ты можешь мне вообще доступ получить извне но через функцию куни сектор гетеротом публично сделать А если условно закрыта для изменений данный файл данный класс вот сейчас не совсем понял есть класс у него есть [музыка] экземпляр ну скажем если у него есть какой-то метод который может его изменить но то вот через этот метод Мы можем

    00:15:25 - 00:17:09

  • изменить Но по идее никак потому что в этом суть инкапсуляции А если черной магии воспользоваться блин не знаю вратарь дернуть Ой нет Если ты правильно но нет но это как Почему можно Ну да нет но теоретически можно Ну не знаю как раз наоборот чтобы оптимизировать из-за этого же серии забыл как раз переделали что это капец как долго работать Я смотрел недавно ролик Кстати как замеры по времени там человек который миллиона переменных и специальный Ну типа чтобы время максимальное было берет делать

    00:16:27 - 00:18:16

  • блин огромная разница по времени Ну там миллион переменных кого они нужны Но нет суть суть была в том чтобы показать показать разницу вот между тем и тем вот Ну вот на миллионе переменных она как бы существенно там видно что Разница есть и не маленькая так Ну все мы любим на собесах спрашивать про память коллектор и памяти интересная тема да Вот я недавно прям статью читал про то как работает современных версиях Android Я не знаю про старые это как это карточка электро или всякого такой вот ну там типа сейчас которая

    00:17:39 - 00:19:24

  • система Она работает так так было написано статье сейчас он работает по такому принципу основной принцип чем старший объект тем меньше вероятность что это не нужно на том что большинство объектов которые надо удалять те объекты которые создали и их надо почистить и он работает так он пробегает первый раз включается тогда когда не хватает памяти он пробегает и чистит Объект который Ну который он понимает что на него нет активной ссылки он его удаляет объект на который активная ссылка есть на данную

    00:18:34 - 00:19:55

  • Ну на данную единицу времени он его камень помечает как ну типа нормальный объект удалять пока не надо вот он так пробегает если памяти после этого хватает то все он вырубается также включится просто пробежит также по отмечать и вырубить и так будет до тех пор пока ему пока не получится Так что он пробежит ему памяти не хватит Он почистил А памяти все еще не хватает если это произойдет он будет бежать по всем существующем объектам это такая типа оптимизация его вот он будет бежать по всем отмеченным объектам и проверять

    00:19:25 - 00:20:42

  • их вот ну и опять получается те которые ну которые уже освободились память освободилась у которых ссылка он их тоже подали вот Суть в том что они объясняют что они за счет за этот счет значит очень сильно оптимизировали скорость работы он бегает не каждый раз по всем объектам каждый раз только по не отмечен Вот такая теоретически если мы заюзали экран фрагмент он пробежался мы удалили этот фрагмент то этот фрагмент будет висеть до тех пор пока ему не будет хватать памяти после вот так эти мемы религии такие

    00:20:04 - 00:21:49

  • Наше время пришло мы бессмертны бессмертными будут это все да Да скажем до какого-то времени пока накопится и он пробежит и удалит их конечно интересно было бы посмотреть в Реал тайме как это все происходит Я очень хотел это посмотреть но блин звучит вроде как Логично Ну вообще где хранятся объекты горчикалипторе Ну куча Как это странно не звучал так смотри Но ты уже ранее объяснил как они оттуда удаляются и не удаляются вообще помнишь про эти про генерации генерации чего Ну вот этих вот это как раз получается это то что я

    00:20:58 - 00:22:34

  • объяснял то что Он отмечает его он его отмечает как раз как Old Generation сразу отмечает это как раз и есть Generation это как раз те которые по которым он бежит как только он пробежал и понял что объект не надо пока удалять он его отмечает какого-то Generation вот это как раз таки генерации Вот такая прикольно реализации когда мы из первого Янга во второй Янг там 1 2 часть чаще всего потом если второй пережил идет вот Generation Ну возможно возможно то что вот я прочитал что это какой-то я не знаю 12 Android совсем

    00:21:58 - 00:23:26

  • новые возможности Я не знаю там не было написано версия там была статья типа про то что типа чего добился Google до чего они смогли до из усовершенствовать OK [музыка] статья была не Гугла Я честно поверим что что это так Окей окей так А можешь сказать сколько получается нас есть анастасики что тусуется что хранится в таких хранятся по сути какие-то ссылки на то что есть Какие рассылки есть стронг ссылочка что-то знакомое но стронг Soft Week Phantom что-то знакомое но я что-то топлю проект Мне страшно вообще редкость в их

    00:22:41 - 00:24:40

  • использования чаще всего просто использовал Я помню что я что-то что-то делал своих не надо было я прям тогда Google что с этим делать я Выкинь использовал но но так в каждом по моему активите даже не за тебя интересно вполне так Окей окей а можно сказать про Горбач коллектор руты не знаю Я если честно не не до конца понимаю как как там Что делается что там вообще является рутом Если честно я не понимаю до конца Вот потому что ну как таковой application Android все сложно с тем чтобы понять где границы приложения

    00:24:12 - 00:25:42

  • как бы сам класс который Application это чаще всего просто для места входа вот а дальше каждый активити же может быть вообще типа вызываться с отдельного приложения используется вообще отдельно поэтому Ну да ну и плюс это можно мы можем любой активите сделать открытым и доступ к нему дать типа его можно будет по ключу там вызвать другого активите с другой вообще в принципе вот поэтому сложно сказать что там конкретно является рутом но теоретически теоретически это как раз вот какой-то Майнкрафт который используется вот

    00:25:27 - 00:26:59

  • главный Вот это это рут ссылка народ вот как-то так на него ссылается Окей ну вообще руты чаще всего начинаются от потока именно то есть на каком потоке не так поток который считается у нас просто от него дальше от объект ссылочное дерево строится и так так А мы теперь идем к примитивам которых нас то ли есть как бы нету кстати вот интересный вопрос всегда про примитивне они есть Ну да они есть там же я недавно узнал что там синтами очень интересная вещь происходит Вот оказывается и ты от 0 до 100

    00:26:19 - 00:27:54

  • они за кашированный и короче ссылка на на числа именно от 0 до 100 ссылка всегда будет одинаковая вот на единицу ссылка в любом месте приложения навсегда будет совпадать поэтому цифра от 0 до 100 числа от 0 до 100 по ссылке тоже будут всегда совпадать Не ну это логичному решение чаще всего мы используем от 0 до 100 короче это оптимизация она не сразу была не сразу было в котле не короче это ввели потому что короче они взяли статистику что чаще всего int от 0 до 100 используется примерно для всяких циклов и так далее

    00:27:29 - 00:29:03

  • Вот и чтобы каждый раз не генерить скажем не делать новые объекты можно взять константы это будет работать быстрее Ну потому что все это Окей прикольная хитрость хитрость заключается в том что у нас котлен компилируется примитивы и она все равно преобразова Недавно видел такой код вот в котором была допущена такая ошибка ошибка незнания как что это не ссылок int это не ссылочный объект А припятить по крайней мере он ведет себя как примитив вот было было так написано такой код был значит объявлен int равен

    00:28:17 - 00:29:51

  • 0 потом вызывалась функция в которой передавался этот функция этот комментировался каждый раз Ну то есть должен был записывать типа как и он всегда равен нулю потому что мы Передаем это же примите его функции новый int Каждый раз он каждый раз то есть вот это вот как раз особенность примитива Вот то есть но по факту В котлине Это ссылочный тип но ведет себя как примитив вот вот как то так а знаешь про объекты обертки Ну вообще что можно сказать Ну да как раз для всех примитивов есть классы обертки

    00:29:05 - 00:30:46

  • для Лонг так и называется Long Точное название просто большая буковка например другое слово насколько я знаю для чего их вообще сделали Короче когда начались дженерики и понадобилось чтобы в дженерики вставлять части дженерика Например у мэп и ключом сделать int А мы не можем потому что ты примитивно нужно ссылка Вот и тогда пришлось делать Может быть и не сделать а уже использовать Но по крайней мере вот там им явное применение нашлось потому что нужны ссылки примитив это

    00:29:59 - 00:31:24