Попросите крупную фабрику сделать предложение: список вопросов для собеседования

интервью Java
Попросите крупную фабрику сделать предложение: список вопросов для собеседования

предисловие

Только лысая голова может стать сильнее.

Текст был включен в мою избранную статью на GitHub, Welcome Star:GitHub.com/Zhongf UC очень…

С сегодняшнего дня я, Сан Вай, официально начал писать серию интервью. Я назвал эту серию интервью «Спросите предложение у крупной фабрики».

Последний называется «Попросите крупную фабрику сделать предложение: как написать резюме».

Так эта статья называетсяПопросите крупную фабрику сделать предложение: список вопросов для собеседования

Давайте начнем.

Эта статья сопровождаетсявидеоСмотреть:уууууууу. Масштаб пропорций.com/video/BV1NT…Добро пожаловатьСанлиан.

Сцена интервью

Интервьюер: «Вы можете кратко представиться?»

Санвай: «Меня зовут Санвай, и в настоящее время я веду публичный аккаунт под названиемJava3y, написал более 300 оригинальных технических статей за последние годы, почти 1000 страницоригинальныйЭлектронные книги и интеллект-карты для нескольких точек знаний. Мое видение:Пока студенты, которые следуют за мной и Санлианом, могут получить большое заводское предложение.. мой...."

Интервьюер: «Стоп, стоп, давайте начнем».

Интервьюер: «Давайте поговорим о List в Java. Как много вы знаете о List?»

Три криво: «Список — это интерфейс в Java. Общие классы реализации включают ArrayList и LinkedList, а ArrayList чаще всего используется в разработке».

Интервьюер: «О разнице между ArrayList и LinkedList можно поговорить отдельно».

Три криво: «Базовая структура данных ArrayList — это массив, а базовая структура данных LinkedList — связанный список».

Интервьюер: «Тогда у нас уже есть массивы, зачем использовать ArrayList?»

Три криво: «Нативный массив будет иметь особенность: вы должны создать для него размер, когда будете его использовать, а ArrayList — нет»

Интервьюер: «Тогда расскажите, как реализован ArrayList, почему ArrayList не нужно создавать размер?»

Три криво: "Вообще-то так и есть.Я видел исходный код. когда мыnew ArrayList(), по умолчанию будет пустойObjectМассив размером 0. когда мыпервый разaddПри добавлении данных массив будет инициализирован с размером, значение по умолчанию этого размера равно 10"

Интервьюер: "Да"

Три криво: "Также размер массива фиксированный, а размер ArrayList переменный"

Интервьюер: «Как вы понимаете постоянное и переменное? Давайте поговорим об этом»

Санвэй: «Предположим, что размер нашего заданного массива равен 10. Чтобы заполнить массив элементами, мы можем добавить только 10 элементов. ArrayList отличается. Мы можем добавить 20 или 30 элементов в ArrayList, когда мы его используем. , и еще больше элементов"

Три криво: «Потому что ArrayList реализует динамическое расширение»

Интервьюер: «Тогда как это произошло?»

Три криво: "Используйте ArrayList в каждомaddКогда места достаточно, он сначала вычислит, достаточно ли места в массиве.Если места достаточно, просто добавьте его напрямую. Если этого недостаточно, то его необходимо расширить».

Интервьюер: "Как расширить мощности? Насколько?"

Три криво: "В исходнике естьgrowметод, каждый раз расширяя оригинал1.5раз. Например, начальное значение равно 10. Теперь, когда приходит мой 11-й элемент, я обнаружил, что в массиве недостаточно места, поэтому я расширю его до 15 дюймов.

Три криво: «После того, как пространство расширится, оно позвонитarraycopyскопировать массив"

Интервьюер: «О, да. Тогда почему вы упомянули, что ArrayList чаще всего используется в повседневной разработке?»

Санвэй: «Это определяется базовой структурой данных. В ежедневной разработке потребность в обходе больше, чем в добавлениях и удалениях. Даже добавления и удаления часто добавляются в конец списка. Это нормально. Например, добавление элементов в конце время сложности ArrayList равноO(1)"

Три криво: "Кроме того, нижний слой добавления и удаления ArrayList называетсяcopyOf()Оптимизированные современные процессоры могутблокировать операцию, добавление и удаление в ArrayList происходит не медленнее, чем в LinkedList.

Интервьюер: «Вы понимаете Вектор?»

Санвэй: «Ну, базовая структура Vector — это массив. Обычно мы редко его используем сейчас. По сравнению с ArrayList, он потокобезопасен. При расширении он напрямую расширяется дважды. Например, теперь там 10 элементов. когда вы хотите расширить, он увеличит размер массива до 20 дюймов.

Интервьюер: «Ну, если мы не используем Vector, что еще представляет собой потокобезопасный List?»

Санвэй: «Прежде всего, мы также можем использовать Collections, чтобы обернуть ArrayList и сделать его потокобезопасным. Но это определенно не то, что вы хотите услышать, верно.java.util.concurrentВ пакете также есть класс под названием CopyOnWriteArrayList.

Интервьюер: «Ну, вы продолжаете говорить»

Санвэй: «Прежде чем я хочу поговорить о CopyOnWriteArrayList, я хочу поговорить оcopy-on-writeЭто означает, что в дальнейшем я буду называть простоcow. Например, в Linux мы знаем, что все процессыinitпроцессforkout, помимо номера процесса,forkВыходящий процесс точно такой же, как и родительский процесс по умолчанию. существуетforkпослеexecРаньше два процесса использовали одно и то же пространство памяти, а это означает, что сегмент кода, сегмент данных и стек дочернего процессанаправлениефизическое пространство родительского процесса"

Интервьюер: "Да"

Три криво: «Когда происходит изменение в родительско-дочернем процессе, соответствующее физическое пространство выделяется дочернему процессу. Преимущество этого в том, что ресурсы выделяются только тогда, когда модификация действительно происходит, что может уменьшить выделение или копирование большого количества ресурсов.Мгновенная задержка. Проще говоря, это можно понимать как нашу ленивую загрузку или ленивый стиль шаблона singleton. Распространяйте, когда он действительно используется».

Интервьюер: "Да"

Три криво: "В файловой системе на самом деле естьcowМеханизмы. файловая системаcowТо есть при изменении данных он не будет работать непосредственно с исходным местоположением данных, а найдет новое местоположение для изменения. Например: чтобы изменить содержимое блока данных A, сначала прочитайте A и запишите его в блок B. Если в это время питание отключено, содержимое оригинального A все еще присутствует. Преимущество этого в том, что целостность данных может быть гарантирована, и можно легко мгновенно повесить трубку.восстанавливаться.

Санвэй: «Оглянитесь назад на CopyOnWriteArrayList, CopyOnWriteArrayList — это потокобезопасный список, нижний слойкопировать массивспособ достижения.

Три криво: «Позвольте мне поговорить об этомadd()внедрить метод"

Интервьюер: «ОК»

Три криво: «Вadd()На самом деле он добавитlockзаблокировать, а затем скопировать новый массив в новый массивaddРеальный элемент и, наконец, измените указатель массива на новый массив"

Три криво: "На самом делеget()метод илиsize()Метод просто получает элемент или размер массива, на который указывает массив. Читать без блокировки, писать с блокировкой"

Санвэй: «Можно обнаружить, что CopyOnWriteArrayList очень похож на механизм COW файловой системы»

Интервьюер: «Тогда вы можете рассказать о недостатках CopyOnWriteArrayList?»

Санвэй: «Очевидно, что CopyOnWriteArrayList очень интенсивно использует память, и каждый разset()/add()Массив будет скопирован, и CopyOnWriteArrayList может гарантировать только данныевозможная согласованность, согласованность данных в реальном времени не может быть гарантирована. Предположим, два потока, поток A читает данные CopyOnWriteArrayList, но не закончил их чтение.Теперь поток B очистил список, а поток A в это время еще может прочитать оставшиеся данные. "

Интервьюер: «Ну, все в порядке. Сегодняшнее интервью подошло к концу. Вы хотите меня о чем-то спросить?»

Три криво: "Как вам мое сегодняшнее выступление?"

Интервьюер: «Сегодняшнее выступление нормально, если на этот раз у вас нет 100как, предполагается, что отдел кадров больше с вами не свяжется. Если более 100как, хорошее выступление во втором туре. "

Интервьюер: «Позвольте мне сказать вам, что коллекция карт может быть хорошо подготовлена, и в следующем раунде мы рассмотримMapзнание"

Не по теме

Коллекция List, как правило, не слишком сложна, но CopyOnWriteArrayList может быть еще не известен многим учащимся.

Для этого интервью вы, возможно, захотите узнать больше деталей о Листе, например,ArrayList/LinkedList/CopyOnWriteArrayListИсходный код и вышеупомянутоеCOWмеханизма, вы можете ответить под официальным аккаунтом "List», чтобы получить то, что я написал ранееоригинальныйстатья.

необходимостьпредварительный просмотрИли студенты, получившие электронные книги, ответьте под официальным аккаунтом "888" может быть получен.

Эта статья сопровождаетсявидеоСмотреть:уууууууу. Масштаб пропорций.com/video/BV1NT…Добро пожаловатьСанлиан.

Резюме различных точек знаний

Следующие статьи имеют соответствующиеоригинально и красивоPDF, в постоянном обновлении, вы можете прийти ко мне, чтобы призвать к обновлению ~

Проект с открытым исходным кодом, охватывающий все аспекты бэкенда Java (уже более 10 тысяч звезд):

если ты хочешьв реальном времениЕсли вы обратите внимание на мои обновленные статьи и галантерейные товары, которыми я делюсь, поищите в WeChat.Java3y.

Содержимое PDF-документоввсе вручную, если вы ничего не понимаете, вы можете напрямуюспросите меня(В официальном аккаунте есть мои контактные данные).

Я Сан Вай, человек, который хочет стать сильнее. Спасибо за ваши лайки, избранное и пересылку. До встречи в следующем выпуске. Поставьте лайк Санваю, это очень важно для Санвая!