Однажды коллега попросил меня вместе провести собеседование с кандидатом, который невнимательно читал резюме, поэтому, спросив о шаблонах проектирования, попросил рассказать о своем понимании утечек памяти и сборки мусора, кандидат был ошеломлен. Только потом я узнал, что он занимается младшими и средними позициями развития, наверное, кандидаты тоже ругали меня в душе.
Я сам проводил собеседования с кандидатами разными способами и проходил собеседования разными способами. Некоторые позволяют использовать компьютер для непосредственного написания кода, некоторые позволяют писать идеи, рисовать структуры на доске или задавать вопросы один за другим. Собеседование должно быть посвящено проверке «способности кандидата делать определенные вещи», а не «способности знать определенные вещи». Хотя эти два вопроса часто связаны между собой, существует большой процент вопросов, которые ничего не делают для «достижения цели». Одной из них является проблема «вы знаете об этом только тогда, когда вам это не нужно, и вы можете понять это за минуту, когда вам это нужно использовать», даже если вы разработчик, который более готов учиться , вы обычно видите какие-то вещи, не так связанные с вашей работой, вещи, и могут быть очень четкими, но спустя долгое время, если я попрошу у вас подробностей, я думаю, это тоже будет расплывчато и даже с ошибками.
Эта статья не является банком вопросов для интервью. Вместо этого я надеюсь, что, классифицируя вопросы для собеседования, Java-инженеры смогут помочь Java-инженерам занять прочную позицию и быстро найти необходимые знания при подготовке к собеседованию. В то же время я приведу несколько хороших и плохих примеров, надеясь помочь некоторым людям.
Классификация вопросов на собеседовании.
Вопросы о Java, которые будут заданы, можно условно разделить на следующие категории:
1. Проблемы, связанные с Hotspot VM (Runtime, GC, JIT)
На самом деле эти вопросы нужно понимать, и они хороши для руководства кодированием, устранения неполадок и понимания логики среды выполнения.
Но если вам приходится спрашивать вас о методах реализации сборщиков мусора G1, CMS и Serial и их различиях, если только вы не занимаетесь настройкой JVM, то вам не повезло, и решением может быть только внезапная атака перед интервью Закрепите эти знания.
2. Использование определенных классов в JDK
Если в вашей работе будут использоваться какие-то классы, возможно, вы с ними знакомы, но, честно говоря, есть еще много классов, которые использовались много раз, и каждый раз вам придется заходить в исходный код, чтобы увидеть комментарии...
Некоторые отмечали, что Мао тратит впустую драгоценные способности мозга. больной
3. Проблемы реализации конкретных классов (или операторов, ключевых слов) в JDK
Я считаю, что большая часть содержания работы (опытных) инженеров не требует рассмотрения этих вопросов, но многие начинающие инженеры с удовольствием исследуют эти вопросы, такие какHashMap
принцип реализации,TransferQueue
логика алгоритма.
но, Есть так много типов, которые могут гарантировать, что запомнят их все четко, если они есть, это должно быть выучено наизусть до прихода на собеседование.
4. Некоторые другие извращенные ловушки
Все виды вопросов, которые становятся все более и более увлекательными, типа «разница между перегрузкой и переписыванием», «разница между final, finally и finalize» и т. д., действительно бессильны жаловаться. Люди, которые задавали эти вопросы, вероятно, хотели проверить ваши базовые навыки, но им не терпелось, поэтому они выкопали яму, чтобы посмотреть, как вы танцуете.
Есть своего рода программирование, для которого вам не нужна поисковая система.
Измените здесь свою позу и спросите, и тут же проявится навязчивость интервьюера. Например, "Как JDK гарантирует, что блок finally в try-catch-finally будет выполнен?", но это относится к третьему типу вопросов. Если он не может на него ответить, ему следует руководствоваться существующими знания и собственные идеи.
5. Решайте практические задачи
Это действительно ценный вопрос, который исследует мышление людей и их способность решать проблемы. И независимо от того, связано ли это с бизнесом или с технической теорией, можно задать ценные вопросы.
например, «создай свой собственныйArrayList
/LinkedBlockingQueue
», «Разработайте систему seckill», «Если вы столкнулись с проблемами XXX, как вы думаете, в чем проблема» и так далее.
6. Проблемы, не связанные с Java
Этот тип вопросов обычно предназначен для изучения личности, характера, знаний, способностей к обучению и т. д. заявителя, например, «Кратко опишите рабочий процесс HTTPS», «Читали ли вы книги или знания в последнее время» и т. д. У некоторых есть рутина, которую можно втиснуть и вычистить, расчесывая вопросы. Другие могут только просить о своих собственных благословениях.
Примеры связанных вопросов
Ниже приведены некоторые вопросы, которые я видел в Интернете или задавал себе сам, только для справки.
Вопросы типа 1
1. Кратко опишите GC JVM
A: Не стесняйтесь играть... вы можете обратиться кОсновы настройки GC в Java 9
Это типичный открытый вопрос, и интервьюируемый может начать с аспектов, которые он понимает, таких как генерация и структура памяти во время выполнения. Если вы знаете больше о сборщике мусора, вы можете говорить более свободно.
Если вам задают более целенаправленный вопрос, то это зависит от того, хорош ли ваш класс перед собеседованием или нет.
2. Какие есть средства многопоточной синхронизации в Java
Этот вопрос также может расширить знания,synchronized
принцип реализации,synchronized
Заблокируйте вздутие живота, почему его иногда используютvolatile
Может повысить производительность, концепция пессимистической блокировки и оптимистичной блокировки, новое поколение, основанное наLock
Механизм блокировки и многое другое можно задать модели памяти Java (JMM).
второй тип проблемы
1. StringBuilder
vs StringBuffer
A: Первая версия является разблокированной версией второй, использующей сцену BlaBla...
До сих пор есть люди, задающие этот вопрос, и есть только две возможности: 1. Уровень интервьюера или кандидата относительно элементарный 2. Интервьюер не может придумать, о чем еще спросить.
2. Какие новые функции добавляет Java8 по сравнению с Java7?
A: Лямбда, потоки, методы интерфейса по умолчанию...
Если бы я его одобрил, я бы раньше изучал гуманитарные науки.
3. Каков метод собственного пула потоков Java, чтобы определить, завершен ли пул потоков?
A: isShutdown и isTerminated.
4. BlockingQueue
,CountDownLatch
иSemeaphore
сценарии использования
5. java.util.Date
иjava.sql.Date
Какая разница
A: Наследственные отношения
Не уверен, в чем смысл этого вопроса.
6. Если вы хотитеLinkedBlockingQueue
Извлеките объект заголовка из , и какой метод вернет значение null, выдаст ошибку или заблокирует
A: взять - заблокировать, опросить - вернуть ноль, удалить - выкинуть ошибку
третья категория вопросов
1. ThreadLocal
Принцип реализации
A: Это метод, к которому может получить доступ только текущий поток.ThreadLocal
Экземпляр является ключевымHashMap
, его внутреннюю реализацию карты иHashMap
Реализация аналогична, экземпляр этой карты хранится вThread
объекта, поэтому посредством инкапсуляции поток может получить доступ только к своему собственномуThreadLocal
Переменная.
Ну, скорее всего, это то, что хочет услышать интервьюер.
Но причина, по которой ThreadLocal важен, на самом деле заключается в идее дизайна, лежащей в его основе. Он передает переменные из общей среды, требующей многопоточной синхронизации, в среду с частным потоком, которая не требует синхронизации. Эту идею можно использовать для решения множества различных сценариев. ...проблема.
Но кого это волнует?
2. LinkedList
Принцип реализации
A: Это двусторонний список, который реализуетList
,Deque
,Cloneable
Равный интерфейс
Честно,Deque
(двусторонняя очередь) Эту штуку я видел несколько раз, но ни разу не пользовался, поэтому не очень разбираюсь в ее характеристиках и реальных сценариях использования, так что не хочу нести чушь.
3. ConcurrentHashMap
Принцип реализации
О: Это блокировка операций записи.HashMap
, разница в том, что он выполняет вторичное деление, а элементы хранятся в разных сегментах для эффективной блокировки диапазона данных и повышения производительности.
Эта реализация была снова изменена в JDK8, в JDK8ConcurrentHashmap
На основании CAS иTreeBin
Для этого нет необходимости блокировать сегменты или глобальные переменные, только однострочные скобы (тот же hashCode), а связанный список позади — это связанный список плюс красно-черное дерево. Используйте CAS для изменения одного значения.
Это, вероятно, то, что хочет услышать интервьюер, но здесь важна концепция «разделяй и властвуй». На самом деле, кандидаты вполне могут попытаться разработать его самостоятельно.ConcurrentHashMap
, а затем направьте его на разделениеHashMap
, это правильный путь.
4. hashcode()
иequals()
Отношение
A: Согласно стандарту JVM,equals()
равные объекты,hashcode()
всегда должно быть относительным, в противном случае не обязательно, см.HashMap
реализация.
Этот вопрос на самом деле неплохой, но если это просто вопрос, он не имеет никакого смысла, а тест — это все еще память.
5. TransferQueue
Как выглядит алгоритм, он иBlockingQueue
что изменилось
A: Это в исходном коде.
Этот ответ точно не годится, пойдем делать уроки. Если вы считаете, что интервьюер слишком скучен, чтобы спрашивать об этом, вы можете отклонить его после получения предложения.
Вопросы категории 5
1. Используйте ожидание-уведомление, чтобы написать кусок кода для решения проблемы производитель-потребитель, и далее, как решить ее в распределенной среде
A: Ха-ха-ха, давайте напишем код...
wait()
иnotify()
обаThread
Методы класса могут напрямую воздействовать на поведение потока. Их суть заключается в передаче соответствующих сообщений производителей и потребителей.Если вы это понимаете, это очень просто в распределенной среде, пока вы найдете сторонний носитель (Zookeeper, Redis, Kafka), который можно использовать для передачи сообщения и т. д.) в порядке.
2. Создайте пул потоков
О: Вы можете обратиться кТеория и практика пула потоков Java
Если пул потоков JDKjava.util.concurrent.ThreadPoolExecutor
Если вы понимаете это лучше, вы можете добавить в него несколько простых функций. Если вы этого не знаете, вы можете напрямую спроектировать массив потоков, а затем добавить некоторую бизнес-логику. Так называемый пул потоков в основном такой же.
3. Спроектируйте IOC-контейнер
A: Использование рефлексии, аннотаций и теории IOC
Вопросы категории 6
1. Расскажите о своем понимании проблемы C10K.
A: Преимущества NIO перед BIO в пропускной способности можно отнести кОт модели ввода-вывода к Netty (1)