Эта статья участвовала в учебном плане выходного дня, щелкните ссылку, чтобы просмотреть подробности:Наггетс.Талант/пост/696572…
Сначала опишите фон. В середине мая этого года я присоединился к моей нынешней компании, базе Пекин. Ранее, будучи первокурсником 2019 года, он проработал в компании в Ухане менее двух лет. В первой декаде апреля у меня возникла идея сменить работу.Идея эта пришла очень несвоевременно.Самое рискованное было то,что я не делал никакой подготовки к собеседованию до этого. Прошло около двух недель с тех пор, как я присоединился к компании. Давайте разберем вопросы интервью, которые у меня возникли в то время, чтобы дать некоторые подсказки для будущего исследования. Вы также можете обсудить.
golang
Базовая корреляция
- В чем разница между var и := для определения переменной? В чем разница между new и make для инициализации переменных?
- Для чего нужен отсрочка Что делать, если в программе несколько отсрочек?
- Как реализован нижний слой нарезки? Вы понимаете два варианта использования интерфейса? Вы понимаете базовую реализацию интерфейса?
- Как использовать карту, будут ли проблемы параллелизма? Как запросить длину карты (лен может, вредит). Может ли sync.Map использовать len для определения длины? (Он должен спрашивать о нижнем слое sync.Map)
- Разница между буферизованными и небуферизованными каналами
- Что произойдет, если в select нет значения по умолчанию? (выбор блокируется до тех пор, пока кейс не будет выполнен) Что происходит, когда канал в кейсе закрывается? (Только у этого будет бесконечный цикл, вы можете использовать, хорошо, чтобы судить)
- Карта заказана? Как лежащая в основе реализации map решает проблему коллизии хэшей?
- Принцип реализации восстановления и паники
- Вы понимаете отражение
- В чем разница между обычной блокировкой карты и прямым использованием sync.map? (соответственно указанные использование и производительность)
Связанный с параллелизмом
- Планирование сопрограмм golang, рассказ о понимании модели GMP
- Как добиться параллелизма?
- Как заставить сопрограмму ждать?
- Говорите об утечках горутин? Как избежать и устранить утечки горутин?
- конечный автомат для горутин
- Давайте поговорим о характеристиках канала, что происходит, когда вы получаете данные из нулевого канала?
разное
- При каких обстоятельствах будет паника? Можно ли восстановить все паники? Как зафиксировать использование функции восстановления?
- Для чего нужен контекст?
- Есть ли способ получить ссылку вызова функции?
- Как решить проблему тайм-аута при запуске сопрограммы?
- Как красиво закрыть канал?
- Расскажите о разнице между java и golang с точки зрения объектно-ориентированного подхода.
- GC Голанга
- Вы понимаете реализацию http-маршрутизации в golang, можете описать?
- В чем может быть причина зависания программы golang (там было сказано, что GC может быть невозможен из-за бесконечного цикла, golang1.13), как устранить неполадки (можно использовать pprof)
структура данных
- Какова временная сложность поиска массива и почему?
- Знаешь таблицу пропусков?
- Какие древовидные структуры вы знаете, и каковы их плюсы и минусы? (Лучше бы при ответе указать сценарий применения)
операционная система
- Вы когда-нибудь пользовались замком? Будет ли блокироваться операция записи, когда к блокировке чтения добавляется блокировка чтения-записи? Будет ли он блокировать операции чтения? (используется, да, нет)
Linux
- Вы решили какие-либо проблемы с командой ps? Что означает каждое поле результата запроса?
- Знаете о зомби-процессах? Как этого избежать?
- Как получить pid родительского процесса по pid (ответ — перейти в /proc) и как найти путь выполнения по pid? Как найти pid по номеру порта (в ответе было lsof -i, вы также можете использовать netstat, но я не знаю, добавил интервьюер)
база данных
- Разница между Redis и MySQL, когда использовать Redis и когда использовать MySQL (здесь я говорил о сценариях, используемых нашими сервисами)? Если бы вас попросили разработать систему seckill, как бы вы ее разработали? (Позже интервьюер напомнил, что в Redis есть еще один самоинкрементный ключ)
MySQL
- Сколько существует уровней изоляции? Какой уровень по умолчанию? Как повторяемое чтение решает проблему фантомного чтения? Вы знаете mvcc? Какой из следующих mysql будет использовать совместный индекс
Select * from table where a=1 and b=1 and c=1;
Select * from table where a=1 and b>1 and c=1;
Select * from table where a=1 and b>1 order by c
- Почему mysql использует дерево B+ вместо красно-черного дерева
- Есть таблица, поле id уникально, а поле name может повторяться. Напишите оператор SQL для запроса всех записей с повторяющимися именами. (грубо говоря, выберите group_concat (id) из группы xxx по имени)
- Какой индексный движок используется в MySQL (innodb), позвольте мне рассказать о реализации innodb (дерево b+), почему дерево b+ используется вместо красно-черного дерева или b-дерева (красно-черное — бинарное, b-дерево хранит избыточность бизнес-данных) Сложность времени поиска дерева b+ (O(logn)). Является ли innodb блокировкой таблицы или блокировкой строки (на это нет ответа, давайте посмотрим подробнее позже, все блокировки на уровне строк основаны на индексах, если оператор SQL не использует индекс, он не будет использовать блокировки на уровне строк, он будет использовать блокировки на уровне таблицы)
Redis
- А как насчет разбивки кеша? Как реализован фильтр Блума?
- Какие существуют структуры, для чего используется таблица пропуска, понимаете ли вы sds?
- редис Какие структуры использовались, ответ заключается в том, что использовалась только строка. Я также видел некоторые из них, использующие List (только что использовали Judge, Alarm и smsgateway) Являются ли lpush и lpop парой?
- Как Redis устанавливает время истечения срока действия?
coding
- реализовать коллекцию
- Реализация очередей с массивами
- Вывод кода ниже
x := []int{1,2,3}
Func(arr []int){
arr[0] = 7
arr = append(arr, 100)
arr = append(arr, 101)
fmt.Println(arr)
}(x)
fmt.Println(x)
- Когда данные достигнут 100, они будут отправлены.Если они не достигли 100 через определенный период времени, они также будут отправлены.
- Напишите программу. Количество задач равно m, а максимальный параллелизм равен n. Произошла ошибка выполнения задачи, и все горутины завершились.
алгоритм
- Нарды решают выиграть
- Найдите повторяющиеся числа в массиве. Длина равна n, а числа в массиве — неотрицательные целые числа, меньшие n.
- максимальная сумма подзаказа
- 25 лошадей, 5 трасс, нужно несколько раз, чтобы попасть в топ-3
- Двусвязный список, перевернуть каждые два
- Браузер вперед и назад, как спроектировать? (с двумя стопками)
- Быстрый ряд
- бинарный поиск
- 10 ips, 3 ips — это дубликаты, ips не по порядку и выходные ips не по порядку, требование: дубликаты ips не будут соседними
- Проверить, является ли строка числом с плавающей запятой
- Максимальная сумма делится на три
разное
- От браузера, вводящего URL-адрес, до конечной страницы отображения, что произошло в середине, чем подробнее, тем лучше
- Вы понимаете перехват трафика? Например, ввод baidu.com в итоге приводит к xiaomi.com (честно говоря, не понимаю)
- Открытые вопросы: дайте час постоять у дверей компании, чтобы понаблюдать и, наконец, оценить, сколько людей приходит на собеседование в день.