2017 был для меня напряженным годом, я готовился к весеннему набору на стажировку с начала года, и я работал над исходным кодом JDK в 30-х годах, я прошел пять интервью с Али в марте, и успешно получил предложение стажировки в апреле. Затем Мэй начала стажировку в Ant Financial с тревожным настроением. В августе, после еще двух раундов собеседований, я наконец получил очередное предложение. Пока что я наконец-то могу в полной мере насладиться последним временем в кампусе. Надеюсь, мой опыт и знания помогут вам.
Мой опыт учебы
Али является важной целью моего обучения в аспирантуре.Когда я был на первом курсе аспирантуры, я установил флаг и спланировал, что делать и чему учиться в течение трех лет аспирантуры. Просматривая свой блог, я все еще могу найти план обучения в аспирантуре, который я написал в то время (думая о том, как быстро летит время). В моем сердце Али всегда был местом паломничества технологов, собирая группу технических фанатиков, которые могут забыть о еде и сне, чтобы немного улучшить производительность. После установки этого флага я всем вокруг сказал, что хочу на Али. Я не хочу оставлять себе выхода, теперь, когда великолепие погасло, его нужно претворить в жизнь.
Мой план в то время был таким: я работал над опасным для жизни проектом, ведь написание кода — это навык, который делает совершенным, а написание большего количества кода, естественно, углубит мое понимание технологии. Факты действительно доказали это. На летних каникулах, когда я заканчивал выпускной курс, я впервые столкнулся с "Глубоким пониманием виртуальной машины JVM". Прочитав его, я был ошеломлен. Я знал все китайские иероглифы, но почему не Разве я не понимаю этого после того, как они были объединены в предложение? Затем, с этим растерянным выражением лица, он насильно дочитал книгу, но так как не понял ее достаточно глубоко, то вскоре забыл ее. Затем, после года сумасшедших проектов, когда я снова взялся за эту книгу, мое отношение к книге изменилось на 180 градусов, что было легко понять. Я задавался вопросом, почему я был таким глупым в то время. В этом году я сделал четыре проекта в общей сложности. Таким образом, написание кода может немного улучшить ваше понимание технологии.
Помню, в конце марта были объявлены результаты вступительных экзаменов в аспирантуру нашей школы, когда я узнала, что меня приняли, то ненадолго обрадовалась, а на следующий день пошла в лабораторию к тьютору для участия в проекте. Поскольку мой разум очень ясен, моя цель — Али. Когда я впервые пришел в лабораторию, я почувствовал себя полным идиотом, я не мог понять ни слова из того, что братья обсуждали на собрании, и мне было трудно выполнить поставленную в начале работу. Но я человек, который рождается неубежденным, и чем больше я не понимаю, тем больше мне приходится побеждать. (PS: То же самое касается погони за девушками. В то время я влюбился в хладнокровную богиню. Чем хладнокровнее, тем больше я должен победить... опустить 10 000 слов... и, наконец, преуспел) . Я постепенно не отставал от своих братьев, и со второго проекта я был руководителем проекта. Направление, которое я выбрал для себя, — это Java, и есть различные проекты в лаборатории, Qt, C++, графика и т. д., но в глубине души я знаю, что эти проекты могут расширить мой кругозор, тренировать мои способности к обучению и способы обучения. думаю, но это необходимо Технология, которая глубоко изучена, по-прежнему Java. Поэтому я воспользовался окном проекта, чтобы прочитать много книг по Java, и в конце статьи я составил список для справки.
После года работы над проектом я почувствовал, что моя способность решать проблемы и быстро использовать новые технологии улучшились, однако я слепо искал скорость и время для выполнения проектов, и мое понимание многих технологий было поверхностным. Так что чаще мне кажется, что я двигаю кирпичи и мне сложно писать качественный код. В то время я решил, что в первой половине второго семестра я должен иметь прочную основу, глубоко понимать принципы, лежащие в основе технологии, замедлять ритм проекта, а не гнаться за скоростью вслепую.
Однако по разным причинам я отправился на стажировку в стартап-компанию. Поскольку у меня нет выбора, я принимаю перемены. Как только это произойдет, я надеюсь, что время, которое я провожу, будет полезным. Поэтому я вкладываю душу в свою работу. Компания устроила меня заниматься фронтендом, хотя это и не то, чем я хочу заниматься, но выбора у меня на данный момент нет. Я провел месяц, изучая интерфейс, изучая Angular, React, разбираясь в их дизайнерских идеях, изучая принципы, лежащие в основе JS, и наблюдая за текущим развитием интерфейса. Интерфейсная технология повторяется очень быстро, но принципы, лежащие в основе технологии, схожи, поэтому очень важно понять суть технологии. Эта стажировка продлилась до января этого года.Я четко знаю, что набор на стажировку Али начнется в конце февраля и начале марта, поэтому я выжал перерыв в полдень, время после работы вечером и время выходных, чтобы пересмотреть то, что я накопил раньше.
3 марта, первое интервью в моей жизни, когда я увидел телефонный звонок из Ханчжоу, я одновременно нервничал и волновался. До этого я не знала, какой у меня уровень среди всех новоиспеченных выпускников, а до подключения звонка я была полностью психологически готова и представляла различные сцены повешения и избиения со стороны интервьюера. Первое интервью длилось 54 минуты, интервьюер казался терпеливым, и весь процесс интервью был очень приятным. Это интервью придало мне огромную уверенность, потому что я знал, что я был на один шаг ближе к своей цели. В течение следующего месяца я получил один за другим пять звонков с интервью.Каждое собеседование – это возможность учиться, открывать собственные недостатки, узнавать о новейших технологиях в процессе общения с интервьюером. , лучший метод реализации.
14 апреля я вспомнил тот день, когда только что давал своему репетитору урок алгоритмов для студентов, и после обеда я получил предложение от Али. Радость в то время была неописуемой, и столь долгие усилия не прошли даром. Но я также знаю в глубине души, что уровень стажировки Али всегда был очень низким, и пройти стажировку нелегко. Поэтому на следующий вечер после того, как я получил предложение от Али, я перепланировал следующий учебный план и обновил свою краткосрочную цель: выиграть предложение от Али.
5:20, прекрасный день, я вошел в здание Alipay с тоской, опасениями и волнением и начал свою трехмесячную стажировку. Трехмесячная стажировка многому меня научила, я увидела свой ежедневный прогресс и свои недостатки. За последние 100 дней я пережил слишком много вещей и получил слишком много опыта.Когда у меня будет время, я напишу отдельную статью о своих инсайтах во время стажировки, чтобы поделиться с вами.
В 11 часов вечера 9.1 мой статус изменился с "собеседование" на "будет предложено", я понимающе улыбнулась, и я добилась цели первого этапа своей жизни. В тот момент я не был слишком взволнован, после 8 месяцев затяжных боев в 2017 году это предложение уже соответствовало моим ожиданиям.
На следующий день была суббота, и я дал себе два выходных в эти выходные. Хотя я пробыл в Ханчжоу 102 дня и хотя здание Alipay находится рядом с Западным озером, я никогда не был на Западном озере по работе в два часа каждый день. Той ночью мой друг купил билет сразу после того, как узнал, что я получил предложение, и сел на ночной поезд в Ханчжоу, чтобы отпраздновать за меня. Благодаря ему я впервые посетил этот прекрасный город в эти выходные.
В последние школьные дни я поставила перед собой новую цель, которая может быть полна вызовов, лишений и трудностей, но я думаю, что если я смогу ее достичь, моя жизнь сильно изменится. Я все еще борюсь в своей жизни. Надеюсь поделиться с вами.
несколько советов
В процессе интервью с Али мне очень помог блог. Не то чтобы ведение блога принесло вам дополнительные баллы на собеседовании, но процесс ведения блога углубляет ваше понимание знаний и особенно эффективен в ретроспективе (в конце концов, это то, что вы написали сами).
Я выработал привычку вести блог с самого начала исследований, и теперь я начну с этого.За последние два года я написал в общей сложности 185 статей с 22 Вт трафика, и я имею честь называться эксперт блогер. Мой блог теперь стал одним из моих самых ценных активов, документируя всю архитектуру моей технологии, а также мысленный путь изучения технологий.
Может быть, у многих студентов есть опыт ведения блога, но очень немногие могут сохраняться в нем долгое время. Я хочу сказать всем, что любое дело стоит упорства. Просто придерживайтесь этого в течение 21 дня, чтобы сформировать привычку. Иногда трудно продолжать без интереса к этому, но думайте о своих целях, стискивайте зубы и придерживайтесь их, и вы победите.
Мой блог это вообще подведение итогов после прочтения книги.Я буду записывать в книгу самые основные вещи по своему разумению. Я прочитаю каждую книгу три раза, первый раз — беглый просмотр, чтобы понять всю архитектуру книги, мысли автора, узнать важное и неважное содержание книги, то есть установить глобальный взгляд. Во второй раз я буду читать его интенсивно, выбирая содержание, которое я считаю важным, чтобы сосредоточиться на чтении, повторном понимании и тщательном осмыслении. Когда я перечитываю ее в третий раз, часто появляются новые понимания, у меня часто бывает такое ощущение, что «прочитал книгу сто раз и сам увидел ее смысл». Прочитав его три раза, я записал основной контент в блог в соответствии с моим собственным пониманием. Поскольку это мое собственное письмо, мне нужно потратить всего три или пять минут, чтобы прочитать его при рецензировании, и все точки знаний снова пробудятся.
Прочесывание тестового сайта Java-интервью
Эта статья основана на моем опыте прохождения собеседований и посвящена организации системы знаний, необходимой для собеседований с Java-программистами.
Часть 1: Основы работы с компьютером
Крупные интернет-компании придают большое значение базовым навыкам программистов, то есть базовым знаниям компьютера. Как далеко может зайти программист и как высоко он сможет подняться, во многом зависит от того, насколько прочны его базовые навыки. Что касается новичков, то большинству из них не хватает практического проектного опыта, хотя у них есть определенный проектный опыт, существует огромный разрыв между качеством этих курсовых и лабораторных проектов и реальными проектами компании. Таким образом, базовые знания стали основным предметом обсуждения на собеседовании, а программисты с прочной базой более гибки и могут легко и быстро начать работу с чем угодно.
В курс «Основы компьютера» входят следующие курсы, которые, по моему мнению, студенты, специализирующиеся в области компьютерных наук, уже должны были изучить. Тем не менее, тестовые сайты для собеседований в интернет-компании могут немного отличаться от ваших сайтов для выпускных экзаменов, и я разобрал их все.
1. Компьютерные сети
Компьютерные сети в университетских курсах обычно вводятся в соответствии с семиуровневой эталонной моделью OSI, однако из-за особенностей интернет-компаний они уделяют больше внимания транспортному уровню и прикладному уровню, задействованным в повседневной разработке, поэтому необходимо сосредоточить внимание на освоении транспортного уровня и прикладного уровня все очки знаний.
【Тестовый сайт】
- Роль транспортного уровня
- Значение мультиплексирования и демультиплексирования транспортного уровня
- Разница между транспортным уровнем и сетевым уровнем
- Особенности протокола UDP
- Структура сообщения протокола UDP
- Особенности протокола TCP
- Структура сообщения протокола TCP
- Процесс трехстороннего рукопожатия TCP
- Четырехволновой процесс TCP
- Как достигается надежная передача TCP
- перестать ждать соглашение
- Протокол скользящего окна
- управление TCP-потоком
- Контроль перегрузки TCP
- HTTP-протокол
- Рабочий процесс HTTP
- Формат HTTP-запроса
- 8 методов запроса в HTTP 1.1
- Формат HTTP-ответа
- Важные поля заголовка запроса и ответа в HTTP
- Общие коды состояния HTTP и их значения
- протокол HTTPS
- Разница между протоколом HTTPS и протоколом HTTP
- Рабочий процесс протокола HTTPS
【Расположение данных】
- Полный охват точек знаний на передающем уровне компьютерной сети
- HTTP Detailed (1) - Принципы работы
- Подробное объяснение HTTP (2) — запрос, ответ, кэш
- Подробное объяснение HTTP (3) - разница между http1.0 и http1.1
- Проиллюстрируйте процесс связи HTTPS
2. Структура данных
Знание структуры данных — это самая базовая грамотность программиста.Выбор подходящей структуры данных в реальной разработке сильно повлияет на эффективность программы. Интервьюеры обычно не задают вопросов о структурах данных напрямую, но проверяют ваше понимание структур данных и возможность их гибкого применения в реальных проектах, задавая некоторые вопросы по алгоритмам, включающим структуры данных. Вы можете улучшить эту часть способности, почистив вопросы алгоритма, порекомендуйте «Предложение фехтовальщика» и «Золотой код собеседования программиста» (обратите внимание, чтоДжиндиан! ). Из этих двух книг выбраны банки вопросов по алгоритмам многих компаний.
Конечно, цель чтения этих двух книг не в том, чтобы заучить темы наизусть, темы постоянно меняются, и интервьюер может менять их по своему желанию. Самое главное в прочесывании вопросов по алгоритму — воспитывать представление о решении проблем и умение решать практические задачи. В процессе причесывания вопросов следует многое обобщать, опять же, не зазубривать!
3. Алгоритмы
Как и структуры данных, алгоритмы обычно изучаются с помощью конкретных вопросов по алгоритмам.Вы также можете улучшить свои навыки в этой области, изучив вопросы по алгоритмам в «Предложении фехтовальщика» и «Золотой книге интервью программистов». Но прежде чем приступить к решению этих вопросов по алгоритмам, вам необходимо освоить несколько типов базовых алгоритмов и понять их идеи решения проблем (это наиболее важно). Эти алгоритмы я организовал ниже.
- Общая задача о рюкзаке
- лучший режим слияния
- остовное дерево с минимальной стоимостью
- Алгоритм Дейкстры
- Алгоритм Фрейда
- самая длинная общая подпоследовательность
- 0/1 Задача о рюкзаке
- проблема с полиграфом
- проблема с ферзями
- BFS
- DFS
4. Операционная система
【Тестовый сайт】
- Четыре характеристики операционной системы.
- Основные функции операционной системы.
- Каковы состояния процесса, диаграмма перехода состояний и события, которые приводят к переходу.
- Разница между процессом и потоком.
- Несколько способов взаимодействия процессов.
- Несколько способов синхронизации процессов
- Разница между пользовательским режимом и режимом ядра.
- Понятие тупика, причина тупика.
- Четыре необходимых условия для возникновения взаимоблокировки.
- Четыре способа борьбы с взаимоблокировками.
- Способы предотвращения взаимоблокировок и способы избежать взаимоблокировок.
- Алгоритм планирования процесса.
- Существует несколько алгоритмов непрерывного выделения памяти, их преимущества и недостатки.
- Базовое управление хранилищем подкачки.
- Базовое управление сегментированным хранилищем.
- Сравнение методов сегментированного пейджинга имеет свои преимущества и недостатки.
- Несколько алгоритмов замены страниц рассчитывают необходимое количество замен страниц.
- Определение и реализация виртуальной памяти.
【Расположение данных】
- Резюме трудных и трудных моментов в интервью по операционной системе
- Разбор общих вопросов на собеседовании — операционная система (требуется для каждого разработчика)
5. База данных
【Тестовый сайт】
- Что такое индекс?
- Классификация индексов
- Анализ преимуществ и недостатков индексов
- Когда мне нужно использовать индекс? Когда мне не нужно использовать индекс?
- Что такое транзакция?
- Четыре характеристики транзакций
- Три парадигмы базы данных
- Какие объединения таблиц есть в базе данных?
【Расположение данных】
- Комплексный анализ индексов базы данных
- Подробное объяснение транзакций базы данных
- Три парадигмы базы данных
- Разбор общих вопросов для интервью — статьи из базы данных (требуются для каждого разработчика)
Часть 2: Java
Для квалифицированного Java-программиста недостаточно знать, как использовать Java. Ваша способность умело использовать Java показывает только то, что вы стали квалифицированным специалистом по кодированию и можете использовать Java для выполнения определенных функций. Как организациям, занимающимся получением прибыли, компаниям необходимо извлекать максимальную выгоду с наименьшим количеством ресурсов, что требует от программистов способности писать высококачественный код, а то, писать ли высококачественный код, зависит от вашего понимания принципов, лежащих в основе технология. Только поняв принципы, лежащие в основе Java, вы сможете писать более эффективный код, основанный на возможностях Java. Это очень ценная вещь в реальном бизнесе. Крупные интернет-компании обслуживают большое количество пользователей, уделяют больше внимания производительности системы и больше внимания уделяют пониманию программистом принципа.
Что касается базовых знаний Java и способов его использования, я не буду здесь упоминать, в любой книге по Java есть подробное введение. Здесь я разобрал базовые баллы знаний по Java, и эти баллы знаний станут дополнительными баллами для вашего собеседования.
1. Виртуальная машина Java
【Тестовый сайт】
- Особенности и функции модели памяти виртуальной машины Java
- счетчик команд
- Стек виртуальной машины Java
- область локального метода
- куча
- область метода
- процесс создания объекта
- процедура доступа к объекту
- структура памяти объекта
- Алгоритмы сборки мусора
- Как определить, какие объекты нуждаются в переработке?
- Стратегия выделения памяти объекта
- Механизм гарантии распределения
- Сравнение сборщиков мусора
- Структура файла класса
- время загрузки класса
- процесс загрузки класса
- Модель родительского делегирования
[Организация ресурсов очков знаний]
- Глубокое понимание JVM (1) — модель памяти JVM
- Глубокое понимание JVM (2) - Раскройте тайну создания объекта HotSpot
- Глубокое понимание JVM (3) - подробное объяснение стратегии сборки мусора
- Глубокое понимание JVM (4) - стратегия выделения памяти объекта
- Глубокое понимание JVM (5) - подробное объяснение сборщика мусора HotSpot
- Глубокое понимание JVM (6) — практика настройки производительности JVM
- Глубокое понимание JVM (7) - Структура файла класса
- Глубокое понимание JVM (8) - время загрузки классов
- Глубокое понимание JVM (девятка) — процесс загрузки классов
- Глубокое понимание JVM (десять) — загрузчик классов
2. Параллельное программирование на Java
【Тестовый сайт】
- Что такое тупик? Как избежать тупика?
- Что такое переупорядочить?
- Каковы характеристики летучих?
- Что такое видимость памяти?
- Почему volatile может гарантировать видимость памяти?
- механизм прерывания
- Каковы способы связи потоков?
- Какова роль пула потоков?
- Как используется ThreadPoolExecutor?
- Как установить размер пула потоков?
- Как обеспечить потокобезопасность?
- Какие оптимизации были сделаны для блокировок в JDK 1.6?
[Организация ресурсов очков знаний]
- Искусство параллельного программирования на Java (1) — вопрос о потребностях параллельного программирования
- Искусство параллельного программирования на Java (2) — Изменение порядка
- Искусство параллельного программирования на Java (3) - volatile
- Искусство параллельного программирования на Java (4) — Состояние потоков
- Искусство параллельного программирования на Java (5) — Прерывание
- Искусство параллельного программирования на Java (6) — Связь между потоками
- Искусство параллельного программирования на Java (7) — Исполнители
- Искусство параллельного программирования на Java (8) — Подробное объяснение блокировок, барьеров синхронизации и семафоров
- Искусство параллельного программирования на Java (9) — Получение результатов выполнения нескольких потоков в пакетах
- Искусство параллельного программирования на Java (10) — Пул потоков (1)
- Искусство параллельного программирования на Java (11) — Пул потоков (2)
- Искусство параллельного программирования на Java (12) — Безопасность потоков
- Искусство параллельного программирования на Java (13) — Блокировка оптимизации
- Коллекция параллельных контейнеров Java
3. Тестовый сайт контейнера Java и организация данных
- Общий каркас серии Java collection 01
- Коллекция Архитектура Java Collection Series 02
- Подробное введение в Java Collection Series 03 ArrayList (анализ исходного кода) и примеры использования
- Краткий обзор отказоустойчивости коллекции Java серии 04 (через ArrayList, чтобы проиллюстрировать принцип и решение отказоустойчивости)
- Подробное введение в LinkedList of Java Collection Series 05 (анализ исходного кода) и примеры использования
- Подробное введение (анализ исходного кода) и примеры использования Vector of Java Collection Series 06
- Java Collection Series 07 Подробное введение в стек (анализ исходного кода) и примеры использования
- Сводка списка Java Collection Series 08 (сценарии использования LinkedList, ArrayList и т. д. и анализ производительности)
- Архитектура карты Java Collection Series 09
- Подробное введение в Java Collection Series 10 HashMap (анализ исходного кода) и примеры использования
- Подробное введение в Hashtable (анализ исходного кода) и примеры использования Java Collection Series 11.
- Подробное введение (анализ исходного кода) и примеры использования TreeMap в Java Collection Series 12.
- Подробное введение (анализ исходного кода) и примеры использования WeakHashMap в Java Collection Series 13.
- Сводка карт Java Collection Series 14 (HashMap, Hashtable, TreeMap, WeakHashMap и другие сценарии использования)
- Набор архитектур Java Collection Series 15
- Подробное введение в HashSet (анализ исходного кода) и примеры использования Java Collection Series 16.
- Подробное введение в Java Collection Series 17 TreeSet (анализ исходного кода) и примеры использования
- Сравнение итератора и перечисления в Java Collection Series 18
4. Центр тестирования Java IO и организация данных
- Введение в ByteArrayInputStream из серии java io 02, анализ исходного кода и примеры (включая InputStream)
- Введение в ByteArrayOutputStream из серии java io 03, анализ исходного кода и примеры (включая OutputStream)
- Введение, анализ исходного кода и примеры каналов (PipedOutputStream и PipedInputStream) серии java io 04
- ObjectInputStream и ObjectOutputStream из серии java io 05
- Сводка сериализации (Serializable и Externalizable) серии java io 06
- FileInputStream и FileOutputStream из серии java io 07
- Резюме файла серии java io 08
- Резюме FileDescriptor в серии java io 09
- FilterInputStream из java io серии 10
- FilterOutputStream из серии java io 11
- Познание, исходный код и пример BufferedInputStream (буферизованный входной поток) серии java io 12
- Познание, исходный код и пример BufferedOutputStream (буферизованный поток вывода) серии java io 13
- Познание, исходный код и пример DataInputStream (поток ввода данных) серии java io 14
- Понимание, исходный код и пример DataOutputStream (поток вывода данных) серии java io 15
- Подробное объяснение PrintStream (поток вывода на печать) серии java io 16
- Принцип System.out.println("hello world") серии java io 17
- CharArrayReader из серии java io 18 (входной поток массива символов)
- CharArrayWriter из серии java io 19 (выходной поток массива символов)
- Java io Series 20 PipedReader и PipedWriter
- InputStreamReader и OutputStreamWriter из серии java io 21
- FileReader и FileWriter из серии java io 22
- BufferedReader из серии java io 23 (входной поток с буферизацией символов)
- BufferedWriter из серии java io 24 (выходной поток с буферизацией символов)
- PrintWriter из серии java io 25 (поток вывода символов)
- RandomAccessFile из серии java io 26
- Углубленный анализ того, как работает ввод-вывод Java
5. Краткое изложение других пунктов знаний Java
- Глубокое понимание механизма обработки исключений Java.
- Понимание WeakReference и WeakHashMap в Java
- Анализ возможных проблем HashMap при параллелизме
- Углубленный анализ ConcurrentHashMap
- Контейнер копирования при записи в Java
- 9 вещей, которые нужно знать о Null в Java
- Говоря о нескольких часто используемых методах веб-атак
- Анализ исходного кода Collections.sort
- Переосмысление HashMap в серии Java8
- Глубокое понимание String в Java
- Arrays.sort() Вещи, которые вы должны знать
- Подсчет шаблонов проектирования в JDK
- Проблема блокировок с двойной проверкой в одноэлементном шаблоне Java