Закулисный Java-клуб Alibaba Tencent набирает сотрудников (предложение уже принято)

Java
Закулисный Java-клуб Alibaba Tencent набирает сотрудников (предложение уже принято)

1. Основная ситуация

блогер17届双非一本毕业, в основномJava开发Да, без крупного заводского опыта.2020поторопитесь3年工作经验Если вы не ищете возможности поступить на большой завод для дальнейшего обучения, конкурентоспособность и личное совершенствование будут более сложными, поэтому, после двух лет оттачивания компании, она начинает двигаться в сторону большого завода~ Этот блог в основном хочет поделиться Проблемы, с которыми я столкнулся в процессе собеседования, были относительно грубыми, и я сталкивался с ними до и после.3个多月.Я надеюсь, что каждый сможет проявить настойчивость в процессе поиска работы!

2. Результаты интервью

  • 阿里-蚂蚁支付宝 P6 offer
  • 腾讯-pcg 2-3 offer
  • 字节 2 сторонысдаться

3. Процесс собеседования

3.1. Супермаркет Али-Тмолл

одна сторона

1, статический прокси, динамический прокси

Кратко опишите разницу, затем выяснитеjdk动态代理иcglibОсновной принцип реализации (ProxyиInvocationHandler).

реинтродукцияSpring AOPРеализации прокси, используемые в разных ситуациях

Финальный пример динамического прокси в проектесцены, которые будут использоваться(Общий日志打印)

2. будущее (выделение)

FutureИспользуется для представления асинхронных результатов.ExecutorService.submitиExecutorService.executeразница

Если вы изучали исходники некоторых фреймворков, то можете что-то сказатьFutureроль в нем(Контроль времени ожидания)

3. Реализация пула потоков — уничтожение потоков

Поддержка должна быть указана здесьExecutorsиThreadPoolExecutorОтношения между

Путем задания разных входных параметров реализуются разные пулы потоков.SynchronousQueueПринцип реализации можно изучить подробно

Переработка пула потоков:портал

4, объединенный индекс mysql

Представьте, что такое联合索引, проиндексируйте сценарии использования и сбои, если вы понимаете索引下推можно сказать

выявлять联合索引и主键索引В чем разница.Тогда можно сравнить по глубинеInnodbиMYISAMразница

Последний штрих: Напишите сами несколько sql, чтобы проверить правила выбора индекса. Вы обнаружите, что не уйдете, если установили индекс, и не обязательно будете использовать его, если индекс проталкивается вниз. Это может включатьmysql 一条sql 的执行过程

5. Кластер Redis

Основные виды кластеров:主从,哨兵иredis ClusterЭти типы серверных кластеров.TwemproxyиCodisЭто своего рода реализация прокси, если вы в ней разбираетесь, о ней можно говорить.

Подробный вопрос: Какое решение (Sentry) в настоящее время принято компанией и почему (объем данных небольшой, master-slave + sentinel может поддерживать бизнес-сценарии), и представлен принцип работы дозорного.

Был задан вопрос: Как уведомить клиента после выбора мастера после того, как мастер повесит трубку.Какая связь между клиентом и часовым (связана ли она)

6, подтаблица подбазы данных mysql

Сначала спросите: какова текущая емкость базы данных и существует ли дизайн подбазы данных и подтаблицы.

Ответ: В настоящее время объем данных в одной таблице составляет5000wвокруг, растет ежедневно в10w以内, на данный момент рассмотрения по этому поводу нет(ниже, чем выше).

Повторное извлечение: каковы способы подбиблиотеки и подтаблицы (垂直分库, 垂直/水平分表), объясните разницу.Можно сказать больше分布式自增idсхемы реализации, такие как雪花算法, Meituan-лист

7. Содержание проекта

项目介绍,主要是挖掘你在工作中的思考以及亮点. 后面统一介绍, 因为每轮面试基本都会说一次

две стороны

二面流程比较快, 没有什么特点
  • Представить проект и текущую модель прибыли компании
  • Самая большая трудность, с которой столкнулся проект
  • Дизайн проекта и др.

В общей сложности более 20 минут, я чувствую, что не должно быть большой проблемы.

результат

Почему результат так скоро, холодно~

Через несколько дней после собеседования пообщайтесь со вторым интервьюером, да通过А теперь позвольте мне подготовиться к последующему письменному тесту.

Возможно, производительность немного хуже, сравнениеубийствоили没hcохватывать

3.2 Тенсент ТЭГ

одна сторона

Базовая реализация HashMap

Представьте базовую структуру и сравните различия между версиями 1.7 и 1.8.

Рекомендуется углубленное чтение1.8 resize()Исходный код и процесс преобразования красного меланина

Является ли HashMap потокобезопасным, если вам нужно использовать потокобезопасный

В сравненииHashMap,HashTableиCurrentHashMapОтличия и сценарии использования

дать个HashMapбыть в线程安全используется, добавляяиCollections.SynchronizedMapдля текущегоHashMapинкапсулировать

Познакомить с красно-черным деревом

принцип:красно-черный портал дерева

Сценарий применения:JDK1.8 HashMap, В сравненииB+树и跳跃表

Почему Redis быстрый?

  • ОЗУ
  • один поток
  • структура данных
  • мультиплексирование ввода-вывода

узкое место в производительности (内存,网络io), можно указать, что для решения网络IOузкое место, вredis 6.0Предлагаемый дизайн с одним основным потоком и несколькими рабочими потоками можно сравнить с многопоточной моделью Memecached.

Введение в индексы mysql

  • Разница между кластеризованным индексом и некластеризованным индексом (сравнение InnoDb и MyISAM)
  • Выбор индекса (как оптимизатор выбирает индекс)
  • аннулирование индекса
  • выталкивание индекса

Почему стоит выбрать b+ дерево

Представьте разницу между деревом b+ и деревом b и сравните преимущества дерева b+ в дисковом вводе-выводе (одна страница может хранить больше индексов), вы можете упомянуть, что mongodb использует индекс дерева B.

Вы можете обратиться к:Почему индекс MongoDB выбирает B-дерево, а Mysql выбирает дерево B+

Кластеризованные и некластеризованные индексы

Ссылаться на:Кластерные и некластеризованные индексы Анализ и сравнение

В то время я наступил на яму,聚集索引и聚簇索引на самом деле это вещь

Индекс первичного ключа по умолчанию

Если индекс первичного ключа не установлен,innodbСкрытый столбец будет добавлен по умолчанию в качестве индекса первичного ключа.

Зачем вам нужен этот скрытый столбец, вы можете обратиться кinnodbструктура хранения данных

Как создать индекс первичного ключа:Схема первичного ключа MySQL

виртуальная память и физическая память

Ссылаться на:Понимание виртуальной памяти и физической памяти

короче:

物理内存有限, 虚拟内存通过磁盘映射的形式进行分配物理内存
从而解决多个进程同时运行的情况下内存不足的问题.

ложный обмен

Принцип псевдосовместного использования

можно комбинироватьvolatileиConcurrenthashMap.countercellотвечать

Как TCP обеспечивает надежную передачу

  • проверка пакетов
  • изменение порядка
  • удалить повторяющиеся данные
  • механизм реагирования
  • тайм-аут повторной передачи
  • управление потоком

контроль перегрузки

  • Начните медленно.
  • Предотвращение перегрузки.
  • Быстро ретранслируйте.
  • быстрое восстановление
计算机网络这部分的内容相对来说比较考验背诵理解.
需要你用自己的语言表达出来

Дизайн проекта

后续补充

Вы использовали kafka/es?

Знаете ли вы последнюю версию Redis (поддерживает многопоточность)

Ручные вопросы

Содержание письменных экзаменационных вопросов больше, есть编程题,算法题и程序运行结果的选择题Ждать

две стороны

Проект сталкивается с самой большой проблемой (OOM) - будет дольше

Шаги личного анализа, если вы заинтересованы, вы можете обратиться к нему.В основном он основан на теоретической основе для анализа, а затем проверяется шаг за шагом.

1、jvm oom排查 (Java heap space)
排查过程:
1、分析oom 的原因: 主要分为内存泄漏和内存溢出
内存泄漏: 对象分配了内存, 在方法调用结束之后没有进行回收,直接进入了老年代中
内存溢出: 我们的内存容量不够,导致内存分配不足
主要从这两方面进行排查

首先排查的是内存溢出:我们机器的配置是 2核4g 的机器, 堆内存分配的是3G,按照1:2的比例进行分配
这里通过
jmap -heap 可以查看到我们的堆内存使用情况.
然后根据 jstat -gc 查看我们的gc 次数, 可以粗略的查看到我们的系统gc 情况

当时通过分析 gc.log 文件看到fgc的次数相对来说还是比较少的, 因此可以暂时排除我们内存溢出导致的oom 的可能性.

其次就是排查内存泄漏了.这里使用到了 -XX:HeapDumpOnOutOfMemoryError 命令来保存 oom 时产生的堆栈信息.
通过 MAT 工具来进行分析 内存使用情况.
当时分析看到占用比较多内存的是 java.util.map 对象比较多. 通过 MAT 工具的 leak suspects 进行分析内存泄漏可能存在的原因.
当时定位到的是我们的一个学生作业报告的接口的方法. 

然后查看了一下 这个接口的调用情况,发现一天的调用量在20万次左右,平均响应时间是在400毫秒.

根据分析到的有效信息, 初步排查就是由于这个接口调用量比较多,然后导致生成比较多的一些聚合数据(主要通过map 来进行聚合), 然后由于响应时间比较长,可能会导致在ygc 的时候,根据可达性分析(gc root)判断这个对象还是存活的,然后分配到了老年代,当方法调用结束了, 就会导致这部分对象会一只存活在老年代,直到触发fgc.

如果是正常情况下, 应该会在fgc 的时候就会触发垃圾回收, 而不是发生oom. 这里是根据查看我们ygc 产生的剩余对象占用内存来进行分析的, 即如果ygc 产生了大量的存活对象,而oldgc 没有足够的内存存放这部分对象,就会导致oom.

优化过程:
1、jvm 的优化,主要有做了, 一个是增加内存,调整新生代和老年代的比例(修改成1:1),修改垃圾回收器
2、代码上面进行优化处理: 
减少聚合数据对象的创建, 这个可以通过提前生成相应的报告数据
减少接口耗时

Зачем использовать редис

Внедрение промежуточного программного обеспечения должно решить текущие проблемы, например, давление доступа к базе данных относительно велико, хранилище данных часто меняется, частота доступа к данным высока, а своевременность данных низкая.

Далее можно объяснить проблемы, связанные с введением Redis, и способы их решения, например: как внедрить Redis для обеспечения согласованности данных и как обеспечить доступность службы, когда Redis недоступен.

Улучшенная пропускная способность, количество запросов к базе данных

Тестом здесь является чувствительность данных.После каждого изменения требуется оценка системы.Определить, улучшило ли изменение производительность сервиса, насколько оно улучшилось, где есть узкие места и т. д.

Транзакция базы данных, принцип реализации индекса innodb

Уровни изоляции транзакций и их реализация.

Как этого добиться нужно понимать mvcc

мультиплексирование ввода-вывода

select,pollиepollВ сравнении

есть подробные вопросыepollКак реализованы уведомления о событиях.

рекомендовать:Подробное объяснение режима ввода-вывода Linux и выбор, опрос, epoll

Узкое место в производительности, как повторно оптимизировать

Анализ в основном вращается вокруг этих трех пунктов:

  • cpu
  • ОЗУ
  • io

процесс вызова rpc (зачем смотреть исходный код dubbo)

Есть много вопросов о процессе вызова rpc.Вы можете обратиться к дизайну архитектуры dubbo, а затем шаг за шагом следовать исходному коду, чтобы понять его.

Зачем смотреть: Совершенствуйте свои навыки кодирования и дизайна (смотрите исходный код с вопросами, иначе легко забыть)

Должностные обязанности в группе

Три стороны

содержание работы

  • Разработка версии
  • решение проблем
  • распределение спроса
  • технический обзор

Рефакторинг (идея, реализация)

Предлагаемое чтение:《重构-改善既有代码的设计》

что делает оптимизация производительности

jvm 调优 ,sql 优化/重建索引иMQ 解耦

Разница между синхронным и асинхронным

Мультиплексирование ввода/вывода Linux/aio

см. выше面试二

линукс выбрать уведомление

B+ дерево и красно-черное дерево

HashMap красно-черное дерево

Как общаться между процессами

  • трубопровод
  • анонимная трубка
  • Сигнал
  • сигнал
  • очередь сообщений
  • Общая память
  • разъем

Узкое место в производительности системы

Анализ в основном вращается вокруг этих трех пунктов:

  • cpu
  • ОЗУ
  • io

результат

TEGИнтервью здесь тожеNохватывать

3.3 Тенсент PCG

одна сторона

Как RocketMQ гарантирует надежность сообщений

Анализ производства, MQ и потребления

Выбор технологии очереди сообщений

по сравнению с обычнымRabbitMQ,RockerMQиKafkaТехнические характеристики в сочетании с реальным выбором сцены компании.

rocketmq half message

вводитьhalf message, как перезвонить в случае сбоя и т.д.

Не удалось потреблять RocketMQ

Как решить проблему сбоя потребления, и возможные причины сбоя потребленияn+1проблема

даббо коммуникационный процесс

rpcпроцедура вызова

адрес локального кэша dubbo

dubboбазовый исходный код

кластерный режим Redis

Синхронизация master-slave redis

Механизм распространения транзакций Spring

уровень изоляции mysql

Настройка номера слоя таблицы переходов Redis

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

две стороны

二面的过程有点像聊天,面试官跟 我前面别的部门(不是上面的TEG)的面试官认识,因此了解我的整体情况。
整个面试过程有点类似指导吧,指出我的不足,然后给我一些建议。
也有问一下比较常规的问题,也是上面有提到的一些内容。

Три стороны

Введение в проект

项目介绍主要从:
 1、业务场景
 2、性能数据
 3、问题难点
 4、性能瓶颈
这几个方面进行分析吧
1. Бизнес-сценарии

Проект, выполненный блогером, представляет собой систему в индустрии образования, в основном описывающую бизнес-сценарий ответов студентов на вопросы в Интернете. Вы можете отсортировать его в соответствии с вашим собственным проектом.

2. Данные о производительности

Данные о производительности должны быть более важным вопросом для социального найма.По сути, в каждом раунде интервью интервьюер будет спрашивать, какова производительность.Нам нужно иметь определенное понимание нашей собственной системы и знать, каковы фактические данные. Конкретно: Каждый день访问量,Служитьqps/tps, Количество пользователей и количество машин (конфигурация машины) и другие данные.

3. Трудности

Здесь я в основном фокусируюсь на двух моментах: один — это обнаружение и обработка проблемы oom, упомянутые выше, а другой — разделение RocketMQ.

oom представлен выше, а ниже приведено краткое введение в RocketMQ в сочетании с проектом.

1、为什么引入RocketMQ
通过对核心接口的压测, 发现接口 tps 相对较低,经过排查发现主流程中操作步骤相对较多。
一次写请求处理了比较多内容,导致整个请求的响应缓慢。
通过将核心的流程和辅助功能进行拆分, 通过异步的方式完成后续的工作,从而提高接口的吞吐量。

问题: 响应缓慢,吞吐量低
期望: 快速响应,提高tps
解决方式: 通过引入 RocketMQ 进行异步操作/解耦

2、为什么使用RocketMQ
技术选型: RabbitMQ,RocketMQ和Kafka 
主要从:消息堆积,响应速度,底层语言和使用场景进行分析

3、如何保证消息的可靠性
从 客户端,MQ和消费端来进行保证消息可靠。
客户端: 通过事务消息来进行保证,或者失败重试(sendResult判断)
MQ : 通过RocketMQ 集群,进行保证,主要由运维负责(可能会牵扯到MQ消息保存的问题)
消费端:1、消费幂等和2、流水表的形式 
这个问题需要结合到项目中的实际场景进行分析, 不能硬套

4、优化后的吞吐量
这个是比较核心的问题, 你优化完之后, 没有做性能的测试,凭什么说引入就好了
(引入中间件原本就会降低系统可靠性,提高复杂度)

因此需要在优化后,进行一轮的压测(注意测试场景要保持和生产或上一次测试场景一致)和消息的消费速度(避免消费过慢导致堆积)


5、优化后的性能瓶颈在哪?
主要从: cpu,内存和IO 三方面进行分析吧, 具体系统具体分析。

4. Трудности

Давайте проанализируем три аспекта процессора, памяти и ввода-вывода, а также проанализируем конкретную систему. Не должно быть системы без узких мест.

часовая поверхность

содержание работы

идентичность команды

учебный план

планирование карьеры

личная эффективность

offer

После долгой напряженной работы я наконец получил предложение от Tencent.Хотя я написал содержание интервью только для двух отделов, я провел собеседование как минимум с 4 отделами (в течение 2 месяцев).Поэтому нет подходящего времени, только для переезда вперед с тяжелым грузом.к осуществлению мечты.

3.3 Али Ант

одна сторона

1. Анонимный класс, статический внутренний класс внутреннего класса

2. Разница между HashMap 1.7 и 1.8

3. Знание BlockingQueue

4. Форма создания пула потоков и сценарии использования

5. Реализовать счетчик при многопоточности

6. ждать и уведомлять

7. B+ дерево и красно-черное дерево

8. Уровень изоляции базы данных

9. Как база данных решает проблему фантомного чтения

10. индекс mysql

11. Распределенная блокировка Redis

12. Кластер Redis Sentinel

13. Процесс вызова RPC

14. Как работает сервис zookeeper

15. Обнаружение сердцебиения Zookeeper

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

две стороны

Вторая сторона также быстрее, в основном из-за двух проблем.

Введение в проект

Это похоже на выше

вопрос сцены

Дизайн базы данных прав доступа к ресурсам пользователя

Три стороны

Вопросы интервьюера с трех сторон в основном связаны с бизнес-сценариями и архитектурой, и в целом они аналогичны трем сторонам Tencent (на самом деле, потому что я забыл, что спросить, в основном связанные с проектом).

четыре стороны

Весь процесс занял около 10 минут, и это было немного неожиданно после того, как я только что закончил заголовки.

Трудности проекта

решение проблем

командная роль

метод исследования

часовая поверхность

Часовая лапша длилась минут 10 в общей сложности.В то время было много паники после окончания лапши.Почему так быстро? Основные задаваемые вопросы:

Причина ухода

планирование карьеры

Уровень зарплаты

offer

В итоге я тоже удачно получил предложение от али и воплотил свой идеал! позже九灵Прогулка по рекам и озерам~~

4. Резюме и рекомендации

Процесс собеседования с арендодателем не был гладким, и он прошел через него с трудностями.2020Это не стабильное время, и каждый день происходят различные изменения. Только坚持,把握,不放弃для достижения ваших целей.

Давай, парень!

Наконец, опубликуйте новый публичный аккаунт (Java 补习课), пожалуйста, обратите внимание.Я в основном поделюсь содержанием интервью (см. предыдущую статью блоггера), технологиями с открытым исходным кодом Али и тому подобным, связанным с жизнью Али. Если вы хотите обменяться опытом интервью, вы можете добавить мой личный WeChat (Jayce-K) в группу, чтобы узнать ~