Хозяин нажал на 8-го, а закончил все процедуры 29-го.Время между первым и вторым интервью немного далеко, и некоторые проблемы не ясны.Запишите сюда все, что вы можете придумать.
Одна сторона (1 час):
В первые 10 минут я кратко рассказал о направлении исследований. Весь процесс позади C++.
Q: Основной язык — C++, верно?Давайте сначала рассмотрим основы C++.
ХОРОШО.
В: Как определяются константы в C++? Где константы хранятся в памяти?
A: Определение константы в C++ представляет собой константу верхнего уровня плюс тип объекта, и определение константы должно быть инициализировано. Для локальных объектов константы хранятся в области стека, а для глобальных объектов константы хранятся в глобальном/статическом хранилище. Для литеральных констант константа хранится в области памяти констант.
В: Вы только что упомянули const.Какова цель функций-членов, модифицированных const?
A: Константно-модифицированная функция-член указывает, что вызов функции не внесет никаких изменений в объект.На самом деле, если подтверждено, что объект не будет изменен, функция должна быть уточнена с помощью const, чтобы оба константных объекта а обычные объекты можно назвать функцией.
В: Если одновременно определены две функции, одна с константой, а другая без, возникнут ли проблемы?
A: Нет, это эквивалентно перегрузке функций.
Вопрос. Можно ли определить член ссылочных данных в классе C++?
A: Да, он должен быть инициализирован через список инициализации функции-члена.
Q: В чем разница между new/delete и malloc/free?
О: Во-первых, new/delete — это ключевые слова C++, а malloc/free — библиотечная функция языка C, при использовании которой приложение должно указывать размер пространства памяти для типа объекта класса, который не вызывает конструктор и деструктор деструктор.
В: В своем блоге вы упомянули неявное преобразование типов, можете вкратце рассказать об этом?
A: Во-первых, для встроенных типов неявное преобразование типов будет происходить, когда низкоточной переменной присваивается высокоточная переменная Во-вторых, для построения объекта конструктора только с одним параметром вызов функции может напрямую использовать параметр для передачи. Компилятор автоматически вызывает свой конструктор для создания временного объекта.
В: Как этого избежать?
A: Явное ключевое слово.
В: Расскажите мне о преобразовании типов, которое вы понимаете.
A: Преобразование типов C++ имеет четыре вида. (Эти четыре вида, пожалуйста, проверьте сами)
Q: Поговорите о reinterpret_cast.
О: Обычно это не используется. Его можно использовать для преобразования между указателями любого типа. Нет гарантии результата преобразования. Его можно использовать для хэширования (здесь не уверен).
В: Расскажите о dynamic_cast
О: На самом деле это не рекомендуется. Больше использовать static_cast, сам динамический можно использовать только для принудительного преобразования типов отношений родитель-потомок с виртуальными функциями. Для указателей, если преобразование не удается, он возвращает nullptr. Для ссылок, если преобразование завершится неудачно, будет выдано исключение.
В: Расскажите о const_cast
A: фактическое использование все еще очень распространено. Для функций-членов, которые не определяют версию const, нам обычно нужно использовать const_cast, чтобы удалить константу ссылочного объекта const и завершить вызов функции. Другой способ его использования, в сочетании с static_cast, может добавить const к неконстантной версии функции-члена.После вызова константной версии функции-члена используйте const_cast, чтобы удалить квалификацию const.
В: Расскажите нам, что вы знаете о RTTI.
A: Проверка типов во время выполнения в основном отражается в dynamic_cast и typeid на уровне C++.
Q: Как конкретно это реализовано?
A: Позиция -1 таблицы виртуальных функций в VS хранит указатель на type_info. Для типов с виртуальными функциями и typeid, и dynamic_cast будут запрашивать type_info.
В: Вы только что упомянули таблицу виртуальных функций, как добиться полиморфизма во время выполнения.
A: Проще говоря, если подкласс переписывает виртуальную функцию родительского класса, адрес функции будет заменен в таблице виртуальных функций.Для объектов класса с виртуальными функциями, в VS, заголовок объекта хранится модель объекта Указатель на виртуальную таблицу функций, через которую реализуется полиморфизм.
Вопрос: Каково максимальное значение пространства стека функций C++?
A: По умолчанию 1M, но его можно настроить.
Q: экстерн "C"?
A: C++ вызывает функции C, для которых требуется extern C, потому что язык C не поддерживает перегрузку функций.
В: Вы понимаете шаблоны проектирования?Позвольте мне представить шаблон синглтона.
О: Есть две реализации C++: одна из них — возвращать объект через локальные статические переменные, которые инициализируются только один раз. Другой — определить глобальный указатель, getInstance определяет, является ли указатель пустым, и создает экземпляр объекта только тогда, когда он пуст.
Q: Второе, о чем вы упомянули, это так называемая ленивая загрузка. Теперь возникает вопрос, что делать в случае одновременного доступа.
A: Используйте механизм блокировки, чтобы предотвратить множественный доступ.
В: Блокирует ли ваш замок все коды?
О: Да.
В: Это будет неоднократно определять, пусто ли оно, и каждый раз оно будет заблокировано.Есть ли способ улучшить его?
О: Это можно сделать таким образом.В первый раз, когда он оценивается как пустой и не заблокированный, если он пустой, он будет заблокирован, чтобы определить, является ли он пустым.Если он пустой, будет сгенерирован объект.
Q: Вы упомянули механизм блокировки, поэтому знаете несколько типов блокировок C++.
О: К блокировкам относятся блокировки мьютекса, условные переменные, спин-блокировки и блокировки чтения-записи (по последним двум ответа нет).
Q: Расскажите мне о том, что вы использовали.
О: Проблема производитель-потребитель может быть легко решена с помощью мьютексов и условных переменных, которые заменяют семафоры. балабала.
В: В C++ есть два типа карт.
A: unordered_map (хеш-таблица) и map (красно-черное дерево).
Q: Вы понимаете красно-черные деревья?
О: Знайте только, что суть — это BST, и вставьте O(logN).
В: Какова наихудшая временная сложность быстрой сортировки?
А: О(N2)
В: Когда самое худшее время?
A: Все элементы слева от поворотного элемента меньше, чем поворотный элемент (не уверен).
В: Какие виды стабильных сортировок существуют? Зачем?
A: Проверьте учебник, это очень просто.
В: Давайте поговорим о содержимом компьютерных сетей, что такое трехстороннее рукопожатие TCP?
A: В этой части, пожалуйста, обратитесь к соответствующим учебникам.
В: Почему не дважды?
О: Серверная сторона не получила подтверждения подключения от клиентской стороны, поэтому это необходимо сделать три раза.
В: А четыре раза?
О: Третье рукопожатие после подтверждения соединения уже содержит данные клиента, поэтому четыре раза не требуется.
Q: Вы понимаете перегрузку TCP?
О: Я не видел. (Пропустите эту часть напрямую).
В: Каковы необходимые условия для возникновения взаимоблокировки?
A: Четыре необходимых условия.
В: Как это предотвратить?
A: - Пожалуйста, проверьте книгу.
Q: Последние несколько вопросов, как вы обычно улучшаете себя с точки зрения языка?
A: Я буду серьезно читать некоторые классические книги, и в то же время я также прочитаю несколько книг, которые знакомят с новыми функциями языка, чтобы быть чувствительным.
В: Какие книги есть?
A: Учебник по C++, классическая вводная книга, подробное изучение объектной модели C++, которая помогла мне хорошо понять объектную модель C++. Эффективный C++, классический опыт продвинутого использования C++. Эффективный современный C++: Глубокий обзор новых возможностей C++ 11/14.
Q: Расскажите нам, что вы больше всего чувствуете в C++primer.
О: Эта книга обязательна к прочтению новичками.Я считаю, что наиболее впечатляющими являются новые возможности C++11, такие как автоматический вывод типов, лямбда, ссылка на rvalue (здесь прерывается).
Вопрос: Какие книги вы сейчас читаете?
A: Я просматриваю анализ исходного кода STL.
Q: Я закончил со своими вопросами, у вас есть что спросить меня?
A: Прокомментируйте мое интервью. (Мастерство С++ очень глубокое)
Одна сторона действительно слишком давняя, и, возможно, я не могу вспомнить некоторые вещи. В то время весь процесс был в основном наполнен C++, с небольшими вкраплениями проблем в других областях.
Второе лицо: второе лицо очень драматично и неприменимо к большинству людей.Проведенное исследование обсуждается с интервьюером на протяжении всего процесса, и время интервью заканчивается через 15 минут.
Три стороны (3.26):
Первый — спросить о направлении исследований, через 10 минут, а потом С++.
Вопрос 1:
Q: Как язык C выполняет вызовы функций?
A: Каждый вызов функции выделяет стек функций и выполняет функцию в стеке.
Q: Далее: Последовательность стекирования параметров языка C?
А: справа налево
В: Еще раз: как язык C обрабатывает возвращаемые значения?
A: Я не знаю языка C. C++ создаст временную переменную и передаст ее ссылку в функцию как параметр функции.
Вопрос 2:
В: Как C++ справляется с утечками памяти?
А: Я нервно болтала всякую ерунду, напоминая всем, если не знаете, просто скажите нет.
Вопрос 3:
Как C++ обрабатывает программные исключения?
A: Проверьте соответствующий код ошибки и найдите конкретную проблему в соответствии с кодом. (бессмыслица)
Вопрос 4:
В: Заводской режим? преимущество?
A: Преимуществами являются разделение, повторное использование кода и простота изменения функций.
HR (3.29): Избегайте наступать на ямы в HR, главным образом потому, что с некоторыми личностными проблемами следует быть осторожным, а другие - ничего.
ПРЕДЛОЖЕНИЕ Подтверждение (3.30): Обсудите содержание работы и время стажировки с руководителем.
Конкретно эти. Большая часть контента, подготовленного арендодателем, - это C ++ и алгоритмы, но в процессе окончательного собеседования алгоритм в основном не спрашивали, и большую часть составляли язык и исследовательский опыт.Вывод состоит в том, что должен быть один аспект, который вам нужен. особенно хорошо, чтобы произвести впечатление на вашего интервьюера.
Ссылка на техническое эссе Nuggets 👉 https://juejin.cn/post/1