Меньше кода, больше волос
Я написал предыдущую статью для васСвежие выпускники проработали меньше года, от увольнения до выхода на берег, как нам перебороть себя? Как обеспечить их основную конкурентоспособность?Ответ был хорошим. Но я совершил ошибку, напомнил мне Ао Бин.
Это слишком сложно. Я не выкладывал оригинал последние несколько дней. Я даже забыл отметить оригинал. Это действительно глупо. Так что сегодня снова выкладываю статью, на этот раз могу отметить оригинал. Если вы не видели его, взгляните на него, это поможет вам постоянно.
Я провел собеседования почти с десятью компаниями, большими и маленькими, и некоторые очень важные вопросы интервью и опыт собеседования должны быть разобраны для всех.
Прежде всего, я заявляю, что позиции, на которые я претендовал, - это направление поиска, бэкенд-разработка (низкоуровневая, высокопроизводительная) и бэкэнд java (эту позицию интервьюер Али попросил увидеть мое резюме и позволить мне попробуй).
Вопросы интервью в основном разделены на несколько частей: C&C++&STL, структуры данных и алгоритмы (включая программирование), операционные системы, проблемы многопоточности, темы сцены и проекты.
Проект занимает высокий балл в социальном собеседовании по подбору персонала, поэтому у интервью будет больше времени, чтобы рассказать о проекте. Детали проекта не будут раскрыты всем, а очки знаний в проекте будут вкраплены в соответствующие модули знаний.
эта вещь
Это должно быть самой важной частью интервью. В течение всего собеседования по социальному набору самопрезентация всегда начинается с проекта и не будет рассказывать, откуда вы, как вас зовут и какие технологии вы знаете, как в школьном наборе.
Каждый раз, когда я представляюсь, я говорю так:
- какой проект ты сделал
- Если проект спроектирован и разработан самостоятельно, опишите, почему этот проект сделан и идеи дизайна
- Какую роль я играю в проекте (если это командный проект, я должен четко описать, какую функцию я выполнял и какую роль она играет)
- Какие модули включены в проект и какую функцию выполняет каждый модуль?
- Какие технологии использовались в проекте и почему они были выбраны
- Эти пункты в проекте очень значимы, почему
Это в основном все. Говоря о проекте, обратите внимание на некоторые важные предзнаменования, такие как основные моменты проекта. Очень хорошо сказать, что эти основные моменты очень хорошие.
Интервьюер Али дал мне несколько предложений, которые очень уместны, а также рассказать всем.
Я должен сказать, что ваш совет очень силен. Прочитав предложения, данные боссом, я быстро реорганизовал проект, чтобы увидеть, что выделяют технология и дизайн проекта, какие трудности и какую ценность он создает.
Так говорится о проекте и аспектах подготовки проекта. В процессе собеседования, когда интервьюер спрашивает о проекте, он действительно спрашивает вас о многом, чего вы никогда не ожидали.
Вы можете подумать, что это очень простой вопрос, и обычно вас это не волнует, но интервьюер копает глубоко и всегда чувствует, что под ним есть мина.
Может быть, интервьюер всегда может сбить вас с толку такими деталями, и вы также думаете, что это ваша проблема, и вы не очень хорошо ее поняли.
Например, большинство эффективных нижних уровней сетевого ввода-вывода реализуются с помощью epoll.
Интервьюер сначала спросил меня о принципе epoll, какова основная реализация? Почему это эффективно? Как насчет структуры epoll в красно-черной древовидной структуре? Какой обратный вызов используется для запуска? Запуск по краю и по горизонтали для epoll? Как операционная система управляет сигналами? Зачем здесь использовать красно-черное дерево вместо хеш-таблицы? и Т. Д.
Таким образом копайте слой за слоем, пока не прокопаетесь. Иногда вы говорите об операционной системе, уровне аппаратных прерываний.
Но интервьюер все еще голоден, вам все еще нужно говорить о высоких и низких уровнях, несущих импульсах?
Так что проект действительно должен иметь полное представление о деталях.Даже некоторые зависимые библиотеки, которые иногда используются, вы все знаете, почему вы используете это, есть ли что-то лучше?
проект спросилтонкийС одной стороны, с другой стороны, это спроситьглубокий.
Например, в то время было сказано, что в проекте использовался эффективный аллокатор памяти, а родной ptmalloc (то есть malloc) не использовался.
Не говорите новый, нижний слой нового это mallloc. Причина в том, чтобы уменьшить накладные расходы на блокировку в случае многопоточности, и каждый malloc будет выполнять процесс блокировки и разблокировки.
Интервьюер сразу спросил, значит вы использовали tcmalloc для уменьшения проблемы производительности блокировки в случае многопоточности. Если я позволю вам продолжить оптимизацию, каковы ваши способы? Это также проблема распределения памяти в случае многопоточности.
Затем я снова спросил, вы только что сказали, чтобы уменьшить накладные расходы на производительность блокировок, так что вы знаете, сколько стоит блокировка на уровне операционной системы? Знаете ли вы, как операционная система блокируется (какой принцип блокировки)?
Я действительно убежден, интервьюер все знает. 🐂, если вы этого не знаете, вы можете только сказать, что я не понимаю этого, пожалуйста, скажите мне мое понимание.
Социальный набор, хорошо сказано, что проект может занять высокий балл, конкретная доля зависит от соответствия проекта интервью. Если ваш проект используется другой компанией, это базовый проект чата.
Если это не хорошо, это немного сложно.
Подводя итог, как должен быть подготовлен проект? Как сказать?
Что касается подготовки, то здесь есть несколько основных моментов.
- Зачем делать этот проект?
- как?
- Каковы основные моменты, трудности и ценности проекта?
- Проект завершен, первоначальная проблема решена? Каковы преимущества?
Как сказать, на самом деле просто. Пока вы готовы, говорите ясно и красиво. Лучше иметь возможность говорить о взлетах и падениях, перемежая их несколькими историями.
На самом деле, неважно, как вы готовитесь к проекту, неважно из глубины проекта или деталей проекта.
C&C++&STL проблемы
проблема с компиляцией программы
- Программа компилирует весь процесс? Что делает каждый шаг?
- Лексический анализ, что анализировать? Синтаксический анализ, анализ чего? Семантический анализ, анализировать что?
Я очень хорошо знаю этот вопрос, его задавал Али. Это принцип составления.Хоть я и не профессионал, но книгу читал немного.
Не удивляйтесь, это все оупражняться.
- Как каждая процедура компилируется с помощью GCC?
- Как разобрать?
проблема с объектной моделью
- Какие объектные модели есть в C++ и какую из них C++ использует сейчас?
- Какова объектная модель обычного наследования? Что такое объектная модель наследования с виртуальными функциями?
- Что такое объектная модель виртуального наследования? Зачем нам нужно виртуальное наследование? Решить какую проблему?
- Множественное наследование для следующей модели?
- Будут ли переменные-члены выровнены по памяти? Зачем нужно выравнивание памяти? Как работает нижний слой?
- Почему объектная модель должна храниться таким образом?
проблема с умным указателем
- Какие типы умных указателей существуют?
- Как решить циклическую ссылку, почему ее можно решить с помощью weak_ptr?
- Каковы сценарии использования каждого интеллектуального указателя?
- Как нижний слой интеллектуальных указателей поддерживает и как это сделать?
STL-проблема
- Каковы компоненты STL?
- Зачем вам итератор?
- В чем проблема с удалением и вставкой вектора, не являющегося хвостовым узлом? Проблема инвалидации итератора?
- Как реализована приоритетная очередь?
- Какие функции-члены вам нужно реализовать для самостоятельной реализации последовательного контейнера? Как насчет ассоциативных контейнеров?
- Для чего нужен конфигуратор?
- В каких случаях используются функторы?
- Пользовались ли вы библиотекой boost? Какие функции вы использовали?
проблема полиморфизма
- Зачем нужен полиморфизм?
- Какие существуют виды полиморфизма? Что такое статический полиморфизм? А как насчет динамического полиморфизма?
- Как реализуется полиморфизм?
- Что такое указатель виртуальной таблицы? Как он хранится в виртуальной таблице? Каков порядок? Почему это должно быть в порядке объявлений?
- Для чего type_info хранится в первой позиции виртуальной таблицы? Для чего нужен механизм RTTI? Зачем нужен механизм RTTI?
- Какие проблемы возникают при использовании полиморфизма?
Есть и другие простые вопросы, например вопрос о том, определяется ли sizeof во время компиляции или во время выполнения? Каково соглашение о вызове функции? и т.д
Структуры данных и алгоритмы
Не так много людей, которые напрямую спрашивают вас о структуре данных, обычно это будут спрашивать в связке с проектом.
-
Почему вы выбрали именно эту структуру данных при проектировании?
-
Общие структуры данных и основные реализации?
-
Каковы преимущества и недостатки древовидной структуры и хеш-структуры?
-
Некоторые зададут вам несколько вопросов о структуре графа
Алгоритмы напрямую не просят вас написать быструю сортировку или что-то в этом роде, все они задают вам вопросы по сценарию и позволяют вам выбрать, какой алгоритм использовать.
Не исключено, что можно напрямую написать quicksort.Например, когда я в этот раз проходил собеседование в компании, меня попросили написать quicksort односвязного списка.Значения нельзя поменять местами, но адреса данных узлы должны быть заменены.
Алгоритм поиска и алгоритм сортировки тестируют многое.
Существует несколько видов алгоритмов поиска.
- пройти, чтобы найти
- поиск по дереву
- бинарный поиск
- интерполированный поиск
- хеш-поиск
- Поиск обхода графа
Алгоритмов сортировки всего несколько (картинки скопированы из предыдущих блогов)
Есть много вопросов о связанных списках, и вопросы по алгоритму написания часто задают, чтобы написать вопросы о связанных списках. В этом интервью я в основном написал алгоритм класса связанного списка.
Операционные системы и компьютерные сети
Эта часть тоже будет основываться на вопросах в проекте Мой проект - поисковик, и естественно много вопросов по операционной системе.
- Как mmap отображает? В каких сценариях используется mmap? Каковы преимущества?
- Как сопоставляются физические адреса и виртуальные адреса? Для чего нужна область подкачки? Могут ли 4 г памяти запускать 8 г программ?
- Чем отличается 32-битная система от 64-битной? Почему 32-битные системные адреса имеют 4 байта, а 64-битные — 8 байт?
- Как реализован механизм сигнального слота?
- Разница между сигналом и семафором?
- Накладные расходы на производительность блокировок, принцип реализации блокировок?
- Управление процессами и потоками?
- Многопоточная проблема с конфликтом ресурсов? Классическая проблема тупика (проблема обедающих философов)?
- Есть много вопросов о вводе-выводе, в том числе о файловом вводе-выводе/сетевом вводе-выводе/отображенном вводе-выводе, они все о принципах и деталях?
- Три рукопожатия и четыре взмаха руками нужно просить?
- Трехстороннее рукопожатие и четырехволновой переход состояний?
- Каждая функция программирования сокетов соответствует процессу рукопожатия? Некоторые интервьюеры даже спрашивали, что представляют собой параметры функции.
- Сколько копий данных происходит во всем процессе сетевого ввода-вывода?
название сцены
Эту тему действительно сложно подготовить, и все можно адаптировать. Большинство тем сцены основаны на мышлении, а некоторые основаны на вашем мышлении, а затем позволяют написать код для определенного модуля.
Позвольте мне рассказать вам о нескольких глубоких проблемах, с которыми я столкнулся на этот раз.
тема:
- Есть одномашинный высокопроизводительный сервис, который максимум выдерживает только qps 3k, а сейчас он поднялся до 5k из-за активного qps.
проблема:
Интервьюер: Как вы решаете проблему производительности, с каких аспектов?
Я: Давайте сначала посмотрим, нужно ли оптимизировать внутреннюю службу, посмотрим, где потребляется rt, оптимизируем для этого модуля и посмотрим, можно ли расширить ресурсы и т. д.
Интервьюер: Тогда скажем, ресурсы фиксированы и не могут быть расширены? Как обеспечить нормальный сервис?
Я: Я подумал об этом некоторое время и выразил удивление.
На самом деле в этом вопросе я ошибаюсь, и я запутался в оптимизации производительности сервиса. Интервьюер сказал очень четко, чтобы обеспечить нормальное обслуживание.
Поэтому его необходимо ограничить, а приоритет отдать обеспечению стабильности обслуживания.
Честно говоря, служба в работе строго не ограничена, но для ограничения тока используется очередь TCP-подключений.
Размер очереди TCP фиксированный, когда очередь заполняется, все новые соединения будут сброшены, и новые соединения могут быть приняты, когда очередь свободна.
тема:
- Существует сценарий ввода-вывода, в котором 100 рабочих потоков обрабатывают вычислительную службу и выполняют операции ввода-вывода с результатами вычислений.Время ожидания ввода-вывода велико.
проблема:
Интервьюер: 100 одновременных операций ввода-вывода занимают много времени, большинство потоков ждут, как вы оптимизируете?
Я: Можно использовать пакетный ввод-вывод, и для работы ввода-вывода выделен отдельный поток.
Интервьюер: Когда поток ввода-вывода переходит к пакетной обработке?
Я: поток ввода-вывода использует ожидание блокировки и выполняет ввод-вывод, когда пакет заполнен; или рабочий поток обнаруживает, что очередь заполнена каждый раз, когда он записывает данные, а затем пробуждает поток ввода-вывода.
Интервьюер: Как уведомить группу рабочих потоков о завершении потока ввода-вывода?
я: уведомление о сигнале
Интервьюер: Сигнальные уведомления не могут нести структуры данных. Предположим, что после завершения ввода-вывода структура данных должна быть возвращена каждому соответствующему рабочему потоку. Что мне делать?
Я: Используйте глобальную очередь, чтобы сохранить структуру данных, возвращенную IO, и рабочий поток, чтобы заблокировать и дождаться результата возвращенных данных.
Прежде чем приступить к работе, я думал, что написание кода должно быть очень сложным, и это относится к технической работе. Теперь я считаю, что собеседование — это техническая работа, гораздо более сложная, чем написание кода. Не только сила, но и удача.
Как бы вы ни готовились, интервьюер попросит вас усомниться в своей жизни. Большую часть времени мы следуем риторическим вопросам интервьюера и отвечаем, исходя из собственного опыта.
Три маленьких совета:
- Вам не нужно думать, как интервьюер, вам нужно иметь больше собственных идей.Не забывайте спрашивать интервьюера, когда это уместно?
- Не на все вопросы можно ответить, но вы, должно быть, ответили на очень хорошие вопросы.
- Если вы столкнулись с трудными или трудными вопросами, вы должны сначала рассказать о своих собственных идеях, а затем спросить интервьюера об идеях и методах интервью.
Почти готово, сегодняшняя публикация здесь. Не все вопросы интервью, выберите некоторые важные вопросы для обсуждения.
Не по теме
Сегодня я начал отказываться от некоторых компаний одну за другой.Что касается тех очень хороших компаний, я полон искренности по отношению к вам, и все же немного грустно отказываться от них.
В то же время я думал, что, в конце концов, я могу выбрать только одну компанию для работы. Но мне пришлось многое попробовать во время интервью.
Чем больше вы пытаетесь, тем больше вариантов вам приходится делать. Но когда дело доходит до выбора карьеры, это правдаНе лучший выбор.
У всех разные ожидания в отношении возвращения работы.Некоторые люди считают работу всем, местом реализации своих идеалов и местом реализации своих мечтаний; мечты в будущем; Люди там, чтобы делать деньги.
Подводя итог, три балла
- Накопить личные способности
- Накопить экономическое богатство
- Реализовать личные ценности или мечты
Выбирая карьеру, вы можете тщательно рассмотреть эти три аспекта. Было бы здорово, если бы все три условия были соблюдены.
Чаще всего приходится идти на компромиссы, и каждый делает свой собственный выбор.
В следующей статье будут обобщены некоторые выводы и проблемы, на которые необходимо обратить внимание при таком наборе кадров. Разумеется, все мои выводы основаны на собственном опыте, если у вас есть возражения, милости просим к обсуждению.
красивые мужчины и женщиныкакЭто самая большая движущая сила творения дяди Лонга, Оли дает ее! ! !