Основные вопросы на собеседовании программист: какие задают, что спрашивают, подготовка

Содержание

Вопросы и ответы по программированию на собеседование, техническое интервью

Готовясь к собеседованию, многие начинающие программисты понятия не имеют, каких вопросов ожидать от интервьеюров — будь то собеседование в стартап или технологический гигант вроде Amazon, Microsoft или Google. В статье на Hacker Noon разработчик Джавин Пол собрал вопросы, которые любят задавать на таких интервью, а также ответы на них и дополнительные ресурсы для подготовки.

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

Но прежде чем приступить к ним, понадобится хорошо изучить эти темы, или по крайней мере освежить навыки решения задач по ним. Для этого можно пройти курс по алгоритмам и структурам данных Роберта Хорвика: часть 1 и часть 2.

Список наиболее часто задаваемых вопросов для собеседований по программированию.

1. Массивы

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

Главный плюс такой структуры данных, как массив — он обеспечивает быстрый поиск сложностью О (1) при знании индексов, но добавление и удаление элементов из него происходит медленно, потому что нельзя менять размер массива после создания. Чтобы увеличить или уменьшить массив, нужно создать новый и скопировать в него все элементы из старого.

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

Вот самые частые вопросы:

  1. Как найти пропущенное число в заданном массиве целых чисел от 1 до 100? (
    решение)
  2. Как найти повторяющееся число в заданном массиве целых чисел? (решение)
  3. Как найти наибольшее и наименьшее число в неотсортированном массиве? (решение)
  4. Как найти все пары в массиве целых чисел, сумма которых равна заданному числу? (решение)
  5. Как найти повторяющиеся числа в массиве, если их несколько? (решение)
  6. Как удалить повторяющиеся элементы из заданного массива в Java? (
    решение)
  7. Как сортировать массив целых чисел без дополнительной памяти при помощи алгоритма быстрой сортировки? (решение)
  8. Как удалить повторяющиеся элементы из массива без дополнительной памяти? (решение)
  9. Как сделать поменять порядок элементов в массиве на обратный без дополнительной памяти в Java? (решение)
  10. Как удалить повторяющиеся элементы из массива без использования коллекций? (решение)

Эти вопросы помогут не только развить навыки решения задач, но и прокачать знания по массивам. Более сложные вопросы по теме можно найти в курсе по алгоритмам The Coding Interview Bootcamp: Algorithms + Data Structures, разработанном специально для подготовки к собеседованиям в таких технологических гигантах, как Google, Microsoft, Apple или Facebook.

Дополнительно можно поупражняться на этой подборке из 30 вопросов.

Записаться на курс Java Programming and Software Engineering Fundamentals от Coursera

2. Связный список:

Ещё одна базовая структура данных — связный список. Как и массив, это линейная структура данных, и элементы в нём хранятся линейно, но в отличие от массива — не в непрерывных областях. Они разбросаны в памяти и соединяются с помощью узлов. Связный список — ничто иное, как список узлов, каждый из которых содержит собственно данные и ссылку на следующий узел.

Благодаря такой структуре добавлять и удалять элементы в связном списке достаточно легко, так как нужно просто изменить ссылку без необходимости создавать новый список. При этом искать элементы сложнее; поиск по односвязному списку занимает линейное время O (n).

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

Есть разные виды связных списков: односвязный список, который позволяет передвигаться только в одну сторону: в начало или в конец; двусвязный список, дающий возможность перемещения как вперёд, так и назад; кольцевой список, который формирует зацикленную структуру.

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

Вопросы для собеседования:

  1. Как найти центральный элемент в односвязном списке за один проход? (
    решение)
  2. Как проверить заданный связный список на цикличность? Как найти исходный узел цикла? (решение)
  3. Как сделать реверс связного списка? (решение)
  4. Как сделать реверс односвязного списка без рекурсии? (решение)
  5. Как удалить повторяющиеся узлы из несортированного связного списка? (решение)
  6. Как найти длину односвязного списка? (решение
    )
  7. Как найти 3-й узел с конца в односвязном списке? (решение)
  8. Как найти сумму двух связных списков, используя стек? (решение)

Эти вопросы помогут развить умение решать задачи на связные списки и углубить знание этой структуры данных. Если они вызывают трудности, можно обновить свои знания структур данных и алгоритмов, пройдя курс Data Structures and Algorithms: Deep Dive Using Java.

Кроме того, можно потренироваться на этом списке из 30 вопросов.

Записаться на курс Профессия Java-разработчик от Skillfactory

3. Строки

Помимо массивов и связных списков, ещё одной популярной темой являются строки: вопросы по ним неизменно звучат на каждом собеседовании на должности в программировании.

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

Вот наиболее частые из них:

  1. Как вывести повторяющиеся символы из строки? (решение)
  2. Как проверить, являются ли две строки анаграммами? (решение)
  3. Как вывести первый неповторяющийся символ из строки? (решение)
  4. Как сделать реверс заданной строки с использованием рекурсии? (решение)
  5. Как проверить, что строка состоит только из цифр? (решение)
  6. Как найти повторяющийся символ в строке? (решение)
  7. Как посчитать количество гласных и согласных звуков в заданной строке? (
    решение)
  8. Как посчитать, сколько раз в строке встречается заданный символ? (решение)
  9. Как найти все возможные перестановки элементов строки? (решение)
  10. Как сделать реверс слов в заданном предложении, не используя классы-коллекции? (решение)
  11. Как проверить, является ли одна строка перестановкой другой? (решение)
  12. Как проверить, является ли заданная строка палиндромом? (решение
    )

Способность решить эти вопросы говорит о достаточно хорошем уровне владений строками. Более продвинутые задачи можно найти в книге «Алгоритмы. Руководство по разработке» Стивена Скиены.

Ещё 20 вопросов можно найти здесь.

4. Двоичное дерево поиска

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

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

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

Наиболее распространённые вопросы по бинарным деревьям:

  1. Как реализуется двоичное дерево поиска? (решение)
  2. Как выполнить обход в прямом порядке в заданном двоичном дереве? (решение)
  3. Как обойти заданное двоичное дерево в прямом порядке без рекурсии? (решение)
  4. Как выполнить симметричный обход в заданном двоичном дереве? (решение)
  5. Как вывести все узлы заданного двоичного дерева, используя симметричный обход без рекурсии? (решение)
  6. Как применяется алгоритм обхода в обратном порядке? (решение)
  7. Как обойти заданное двоичное дерево в обратном порядке без рекурсии? (решение)
  8. Как вывести на печать все листья двоичного дерева поиска? (решение)
  9. Как посчитать количество листьев в заданном двоичном дереве? (решение)
  10. Как выполнить двоичный поиск в заданном массиве? (решение)

Если пройти эти вопросы самостоятельно слишком сложно, не помешает пройти какой-нибудь качественный курс по структурам данных и алгоритмам, например From 0 to 1: Data Structures & Algorithms in Java. Вот ещё два списка книг и курсов на эту тему.

5. Прочие алгоритмы и вопросы

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

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

  1. Как реализуется сортировка пузырьком? (решение)
  2. Как реализуется итеративная быстрая сортировка? (решение)
  3. Как реализуется сортировка вставками? (решение)
  4. Как реализуется сортировка слиянием? (решение)
  5. Как реализуется блочная сортировка? (решение)
  6. Как реализуется сортировка подсчётом? (решение)
  7. Как реализуется поразрядная сортировка? (решение)
  8. Как поменять местами значения двух переменных без использования третьей? (решение)
  9. Как определить, пересекаются ли два прямоугольника? (решение)
  10. Как спроектировать торговый автомат? (решение)

Свыше 189 вопросов для прохождения собеседования по программированию с ответами можно найти в книге «Карьера программиста» (6-е издание) Гэйл Лакман Макдауэлл.

Здесь можно пройти ещё 50 вопросов по программированию для прохождения собеседований по телефону; закрепить навыки можно с помощью вот этих подборок книг и курсов.

Вот ещё несколько ресурсов и подборок, которые помогут подготовиться к собеседованию:

  • 10 книг для подготовки к техническому собеседованию по программированию/разработке
  • 10 книг по алгоритмам, которые должен прочитать каждый программист
  • 5 лучших книг по структурам данных и алгоритмам для Java-разработчиков
  • Онлайн-курс по анализу структур данных и алгоритмов с подготовкой к собеседованию

По теме

  • Выбрали Европу, ментальность, деньги, комфорт, международные проекты, work-life баланс. Запустился сайт про релокацию айтишников в Минск

Все материалы по теме

35 вопросов о программировании, на которые вы должны знать ответ

Подготовили список вопросов о программировании, которые вам могут задать на собеседовании. Они не относятся к конкретному ЯП, а раскрывают общий уровень.

Программирование – это процесс создания компьютерной программы, включающий в себя проектирование программы, использование алгоритмов, написание кода программы и так далее.

Код программы содержит инструкции, которые являются исполняемыми командами, выполняемыми машиной после преобразования кода компилятором.

Отладка – это процесс поиска и устранения ошибок в программе.

  • Синтаксические ошибки.
  • Runtime errors или ошибки времени выполнения.
  • Логические ошибки.

Синтаксическая ошибка возникает, когда в коде программы допущена опечатка или есть несоответствие правилам используемого языка в языковой конструкции, имени переменной, функции и так далее. Ошибка определяется на этапе компиляции программы.

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

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

Блок-схема – это графическое представление программы. Блок-схема помогает понять логику работы программы или ее части при проектировании.

Алгоритм – это конечный набор шагов, которые при следовании им решают какую-то задачу.

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

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

Зарезервированные или ключевые слова – это слова и выражения, которые имеют предопределенные значения и не могут использоваться при написании кода для иных целей, например, для именования переменных. Примеры распространенных ключевых слов в языках программирования – это конструкции if/then/else или различные варианты циклов. Вроде for и while.

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

В различных языках эти конструкции описываются по-разному, но в большинстве языков можно найти конструкции вида for, while, do … while. Цикл содержит условие окончания, и по времени проверки этого условия циклы могут быть с предусловием и постусловием.

For использует счетчик и полезен при выполнении заранее определенного количества итераций.

While будет выполнять действие до тех пор, пока заданное условие не станет ложным. Это полезно при необходимости использования цикла с неопределенным числом итераций.

Цикл, который выполняется в теле другого цикла, является вложенным.

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

Компилятор «читает» код, написанный на определенном языке программирования, и преобразует описанные команды и конструкции языка в исполняемый машинный код.

Двоичный код – это бинарная форма представления кода определенного языка программирования.

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

Числовые константы могут содержать целые, числа с одинарной и двойной точностью.

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

Операторы – это специальные символы, которые используются в коде программы для выполнения определенных операций над данными. Операторы могут быть арифметическими, логическими, реляционными и присваивающими.

Массив – это набор смежных областей памяти, которые хранят данные определенного типа.

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

Арифметические операторы применяются для выполнения арифметических операций над значениями.

Реляционные операторы используются в программировании для сравнения значений. Результатом оценки с использованием реляционных операторов будет true или false.

Логические операторы объединяют простые условия для построения более сложных (под условием мы имеем в виду выражение, оценивающее истинность).

Оператор присваивания используется для сохранения значений в переменной.

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

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

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

Надежность – это гарантированная правильная работа программы в течение определенного времени.

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

Бета-версия программы – это версия, которая может быть доработана и изменена после получения обратной связи от пользователей. Бета-версия – рабочая версия программы, не готовая к финальному запуску.

Анализ программы – это процесс решения проблемы программы путем разбиения большой проблемы на подзадачи. Каждая подзадача или «под-проблема» будет решаться отдельно, что в конечном итоге приведет к более простому решению глобальной проблемы.

Каждый алгоритм в программировании реализует по крайней мере три шага:

  1. Получение данных.
  2. Выполнение вычислений.
  3. Вывод результата.

Top OOPs Интервью Вопросы и ответы с примерами на 2023 год

OOPS, или система объектно-ориентированного программирования, является фундаментальной концепцией программирования. Если у вас техническое образование, интервьюер ожидает, что вы знаете об ООП. Чтобы убедиться, что вы не упустите свой шанс на следующем собеседовании, мы собрали базовые и расширенные вопросы интервью.

Тем не менее, эти вопросы интервью OOPS не ограничиваются новичками, но и опытными разработчиками Java и Python.

Основные вопросы для собеседования по ООП

Давайте начнем с некоторых основных вопросов интервью ООП.

1. Зачем нам нужно использовать ООП?

ООП необходимо использовать для:

  1. делает программирование более понятным, а решение проблем более лаконичным
  2. повторное использование кода с помощью наследования
  3. уменьшение избыточности
  4. инкапсуляция
  5. скрытие данных
  6. разделение на подзадачи
  7. Гибкость программы
  8. с использованием полиморфизма

2.

Что такое множественное наследование?

Если один класс разделяет поведение и структуру, определенные в другом множественном классе, это называется множественным наследованием.

3. Приведите пример инкапсуляции.

Понятие сокрытия данных называется инкапсуляцией. Защищенные и закрытые члены в C++ являются примерами.

4. В чем разница между перегрузкой и переопределением?

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

5. Определите модификатор защищенного доступа.

Защищенный модификатор доступа доступен для собственного класса и доступен для производного класса, но недоступен для всего мира.

6. Какова функция супер ключевого слова?

Ключевое слово super ключевое слово используется для переадресации вызова конструктора конструктору в суперклассе. Он вызывает переопределенный метод, который разрешает доступ к этим методам и скрытым членам суперкласса.

7. Что такое полиморфизм времени компиляции?

Когда выполняется полиморфный вызов, и компилятор знает, какая функция должна быть вызвана; это известно как полиморфизм времени компиляции. Такие функции, как аргументы функции по умолчанию, перегрузка и шаблоны в C++, поддерживают полиморфизм времени компиляции.

8. Как вызвать метод базового класса без создания экземпляра?

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

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

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

10. Какова цель ключевого слова «это»?

Это ключевое слово используется для ссылки на текущий объект класса. Он используется как указатель, который различает глобальный объект и текущий объект, ссылаясь на текущий.

Расширенные вопросы интервью OOPS

Далее мы рассмотрим некоторые продвинутые вопросы ООП-интервью!

1. Объясните концепцию наследования на примере из жизни.

Родительский класс — это логическое понятие, например, транспортное средство — это базовый класс, определяющий общие свойства, общие для всех транспортных средств. Однако дочерние классы представляют собой более конкретный тип классов, таких как грузовик, автобус, автомобиль и т. д. Наследование позволяет подклассам наследовать общие атрибуты транспортного средства и определять собственные атрибуты и методы.

2. Чем структура отличается от класса?

Структура — это определяемый пользователем набор переменных, имеющих разные типы данных. Однако невозможно создать экземпляр структуры или наследовать от нее. Таким образом, это не концепция ООП.

3. Что такое абстрактная функция?

Абстрактная функция — это функция, объявленная только в базовом классе. Он переопределяется в подклассе, поскольку не содержит определения в базовом классе.

4. Назовите три оператора, которые нельзя перегружать.

  •  “::” Оператор разрешения области действия
  • ». *» Указатель на оператор-член
  •  “. точка или оператор доступа к члену

5. Чем инкапсуляция отличается от абстракции данных?

Абстракция данных относится к способности скрывать нежелательную информацию. В то же время инкапсуляция относится к сокрытию данных, а также метода вместе.

6. Существуют ли ограничения наследования? Если да, то что?

Да. Ограничения наследования:

  1. Увеличение усилий и времени на выполнение
  2. Тесная связь родительского и дочернего классов
  3. Требуется правильная реализация
  4. Требуется прыгать между разными классами

7.

Определите виртуальные функции.

Функции, которые помогают достичь полиморфизма времени выполнения, являются частью функций, присутствующих в родительском классе и переопределяемых подклассом.

8. Перечислите ограничения объектно-ориентированного программирования.

  1. Требуется интенсивное тестирование
  2. Не подходит для незначительных проблем
  3. Требуется хорошее планирование
  4. Требуется больше времени для решения проблем
  5. Проблемы нужно рассматривать с точки зрения объектов

9. В чем разница между базовым классом и суперклассом?

Базовый класс — это корневой класс — наиболее обобщенный класс. В то же время суперкласс является непосредственным родительским классом, от которого наследуется другой класс.

10. Что такое модификатор доступа для методов внутри интерфейса?

Все методы внутри интерфейса по умолчанию общедоступны, и никакие другие модификаторы не могут быть указаны.

Вы веб-разработчик или заинтересованы в создании веб-сайта? Зарегистрируйтесь для участия в программе Full Stack Web Developer — MEAN Stack Master. Ознакомьтесь с предварительным просмотром курса!

Заключение

Мы надеемся, что эта статья послужит отличным дополнением к вашему следующему интервью с ООП. Для освоения объектно-ориентированного программирования требуется некоторое время, и лучший способ сделать это — связать его с его приложением, таким как полнофункциональная веб-разработка. Если вам интересно узнать больше о реальном применении ООП в мире, этот курс как раз для вас!

Топ-30 вопросов по программированию, заданных на собеседовании

Если вам нужно больше практики, вот еще один список 20 вопросов по кодированию строк.

2. Вопросы по программированию на массиве

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

9) В массиве хранится от 1 до 100 чисел, не хватает одного числа как его найти? ( решение )

10) В массиве 1-100 ровно одно число повторяется как его найти ? (решение)

11) В массиве 1-100 несколько чисел дублируются, как их найти? (решение)
Один из трюков в этом вопросе программирования заключается в том, что с помощью HashMap или Hashtable мы можем сохранить число как ключ и его вхождение как значение, если число уже присутствует в Hashtable, а затем увеличить его значение или вставить значение как 1 и позже on выведите все те числа, значения которых больше единицы.

12) Даны два массива, 1,2,3,4,5 и 2,3,1,0,5 найти, какое число отсутствует во втором массиве.
Вот быстрый совет для решения этого вопроса программирования: поместите элементы второго массива в Hashtable и для каждого элемента первого массива проверьте, присутствует ли он в хеше или нет, O/P все эти элементы из первый массив, которого нет в хеш-таблице

13) Как найти второе по величине число в массиве целых чисел? (решение)

14) Как в массиве целых чисел найти все пары, сумма которых равна заданному числу? (решение)

15) Как удалить повторяющиеся элементы из массива в Java? (решение)

16) Как найти наибольшее и наименьшее число в массиве? (решение)

17) Как найти два верхних максимальных числа в массиве? (решение)

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

Если вам нужны более сложные вопросы, основанные на массиве, вы также можете посмотреть The Coding Interview Bootcamp: Algorithms + Data Structures , курс в стиле учебного лагеря по алгоритмам, специально разработанный для подготовки к собеседованию, чтобы получить работу в таких технических гигантах, как Google, Microsoft, Apple, Facebook и т. д.



И, если вы чувствуете, что 10 вопросов недостаточно и вам нужно больше практики, вы также можете просмотреть этот список из 30 вопросов-расстановок.


3. Вопросы для собеседования по программированию в LinkedList

Связанный список — еще одна важная структура данных после массива и строки. На самом деле он дополняет массив, и все, что вы не можете сделать с массивом, вы можете сделать со связанным списком.

Например, массиву требуется непрерывная память для хранения объектов, но связанному списку это не нужно. Сложно добавлять и удалять элементы в массиве, потому что вам нужно сдвигать существующие элементы, но это очень легко со связанным списком, так как вам просто нужно изменить указатель, чтобы разместить их.

Но в этом мире нет ничего бесплатного. В то время как связанный список предоставляет все эти функции, но за счет этого вы теряете возможность поиска элементов в постоянное время с индексом. Поиск и элемент требуют обхода связанного списка, что означает проверку всех узлов, что требует около O(n) времени.


14) Как найти средний элемент связанного списка за один проход?
Чтобы ответить на этот вопрос программирования, я бы сказал, что вы начинаете с простого решения, в котором вы проходите по LinkedList, пока не найдете конец связанного списка, где он указывает на ноль, чтобы найти длину связанного списка, а затем повторяете до середины.

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

15) Как найти 3-й элемент с конца за один проход? (решение)
Этот вопрос по программированию аналогичен приведенному выше и может быть решен с помощью 2 указателей, запускайте второй указатель, когда первый указатель достигает третьего места.

16) Как узнать, есть ли петля в односвязном списке? Как найти начало цикла? (решение)
Этот вопрос программирования также можно решить, используя 2 указателя, и если вы увеличиваете один указатель на один шаг за раз, а другой – на два шага за раз, они встретятся в какой-то точке, если есть цикл.

17) Как перевернуть односвязный список? (решение)

18) Разница между связным списком и структурой данных массива? (ответ)


Если у вас возникли проблемы с ответами на эти вопросы по кодированию связанных списков, я предлагаю вам освежить свои навыки работы со структурой данных и алгоритмами, пройдя курс Grokking the Coding Interview: Patterns for Coding Questions на Educative, один из лучший курс для изучения шаблонов кодирования, таких как скользящее окно и интервалы слияния, которые можно использовать для решения более 100 задач Leetcode.


Если вам нужно больше вопросов на основе связанных списков, вы также можете просмотреть этот список из 30 вопросов для интервью со связанными списками, чтобы получить больше практических вопросов.

4. Вопросы для собеседования по программированию двоичного дерева

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

18) Как найти глубину бинарного дерева? (решение)

19) Написать код для печати InOrder обхода дерева? (решение)

20) Распечатать все листовые узлы бинарного дерева? (решение)

21) Напишите метод на Java, чтобы проверить, является ли дерево бинарным деревом поиска или нет? (решение)

22) Как проверить, сбалансировано дерево или нет в Java? (раствор)


23) Как реализовано бинарное дерево поиска? (решение)


24) Как вы выполняете предварительный обход в заданном двоичном дереве? (решение)


25) Как пройти заданное бинарное дерево в прямом порядке без рекурсии? (решение)


26) Как вывести все узлы заданного бинарного дерева, используя неупорядоченный обход без рекурсии? (решение)

27) Как реализовать алгоритм обратного обхода? (решение)

28) Как пройти бинарное дерево в обратном порядке без рекурсии? (решение)

29) Как печатаются все листья бинарного дерева поиска? (решение)

40) Как подсчитать количество листовых узлов в заданном бинарном дереве? (раствор)

41) Как вы выполняете бинарный поиск в заданном массиве? (решение)

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

Этот курс предоставляет всесторонний обзор наиболее важных структур данных, алгоритмов и принципов проектирования систем, а также предлагает пробные интервью с инженерами и менеджерами FAANG, демонстрирующие, как выглядят интервью, а также интерактивные проблемы кодирования на Python и JavaScript.

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

5. Программирование вопросов по поиску и сортировке

Я включил только два вопроса по программированию, связанные с поиском и сортировкой, но в Google можно найти больше. Цель этих вопросов по программированию — выяснить, знаком ли программист с основным механизмом поиска и сортировки или нет.

23) Написать программу для сортировки чисел на месте с помощью быстрой сортировки? (решение)

24) Написать программу для реализации алгоритма бинарного поиска на Java или C++? (решение)

25) Как вы сортируете объекты Java с помощью компаратора? (ответ)
Это еще один вопрос по программированию, специфичный для Java, и вы можете проверить, как сортировать объект с помощью Comparator и Comparable для ответа.

26) Написать код для реализации сортировки вставками в Java? (решение)

27) Написать код для реализации пузырьковой сортировки в Java? (раствор)

Если вы можете легко решить эти вопросы, то вы в хорошей форме. Для более сложных вопросов я предлагаю вам решить задачи, приведенные в «Руководстве по проектированию алгоритмов » Стивена Скиены , книге с самыми сложными вопросами по алгоритмам.


6. Вопросы по программированию чисел

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

26) Напишите код, чтобы проверить, является ли нет степенью двойки или нет? (решение)

27) Напишите программу, которая проверяет, является ли число палиндромом или нет? (решение)
Посмотрите этот пост, в котором показано, как обратить число в Java, и его можно использовать, чтобы определить, палиндром это или нет.

28) Напишите код для проверки, является ли целое число числом Армстронга или нет? (решение)
Вот программа на Java для поиска числа Армстронга, вы можете использовать ту же логику для написания кода на любом другом языке программирования, таком как C и C++.

29) Напишите программу для поиска всех простых чисел до заданного числа? (решение)
Вот еще одна программа на Java для поиска простых чисел и их вывода. Используя логику, продемонстрированную в этой программе; вы можете написать аналогичную программу на C и C++.

30) Написать функцию для вычисления N-го числа Фибоначчи? И итеративный и рекурсивный? (решение)
Вы можете проверить эту программу Java для печати рядов Фибоначчи, используя рекурсию и итерацию.

31) Как проверить, является ли число двоичным? (решение)
Для этого вопроса вам нужно написать функцию, которая будет принимать целое число и возвращать истину, если оно содержит только 0 и 1, например. если вход равен 123, то ваша функция вернет false, для 101 она должна вернуть true.

32) Как инвертировать целое число в Java? (решение)

33) Как посчитать количество установленных битов в заданном числе? (решение)

34) Как найти сумму цифр числа с помощью рекурсии? (раствор)

35) Как поменять местами два числа без использования временной переменной? (решение)

36) Как найти наибольшее из трех целых чисел в Java? (решение)

37) Напишите программу для нахождения простых делителей целого числа? (решение)

38) Как сложить два целых числа без использования арифметического оператора? (решение)

Если вам нужно больше таких вопросов по кодированию, вы можете воспользоваться помощью таких книг, как Cracking the Coding Interview  книга Гейл Лакман Макдауэлл, в которой представлено более 189 вопросов по программированию и решения. Хорошая книга для подготовки к собеседованию по программированию за короткое время.


7. Общие вопросы для интервью по программированию

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

Я не включил многие вопросы по программированию, связанные с разработкой программного обеспечения, которыми я поделился в топ-20 вопросов и ответов по разработке программного обеспечения; вы также можете проверить это.

31) Напишите программу, которая определяет, пересекаются ли два прямоугольника R1 и R2? (решение)

32) Вам нужно написать функцию для подъема по n ступеням, вы можете подниматься либо по 1 ступени за раз, либо по 2 ступени за раз, напишите функцию, возвращающую количество способов подняться по лестнице с n ступенями. (решение)
На самом деле это ряд Фибоначчи, поэтому вы можете решить его так.

33) Написать код для генерации случайного числа в диапазоне от минимального до максимального? (решение)

34) Написать программу для переноса слов, которая должна работать на любом размере экрана? (решение)

35) Разработайте алгоритм для определения частоты появления слова в статье? (решение)

36) Написать программу для реализации блокирующей очереди на Java? (решение)

37) Написать программу для задачи производитель-потребитель? (решение)
В этой статье решается проблема производитель-потребитель с использованием BlockingQueue в Java. Вы можете обратиться к нему, чтобы ответить на этот вопрос.

8. Книги для подготовки к собеседованию по программированию

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


1. Интервью по программированию: секреты получения следующей работы

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

2. Интервью по кодированию: 189 вопросов и решений по программированию

Эта книга содержит набор вопросов из широкого круга тем программирования, включая структуру данных, алгоритмы, строки, Java, сети, базы данных, SQL, объектно-ориентированное программирование, разработку программного обеспечения и т. д. Эта книга даст вам полную картину того, что можно спросить.

3. 10 главных проблем на собеседовании по кодированию, заданных в Google, с решениями: Алгоритмический подход

Это книга, которую обязательно нужно прочитать, если вы готовитесь к собеседованию в Google или что-то в этом роде, например. Facebook, Amazon или Microsoft Интервью. Он содержит 10 самых популярных проблем программирования, часто задаваемых в Google, с подробно разработанным решением, объяснением как в псевдокодах, так и на C++.

9. Советы по ответам на вопросы по программированию

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

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

Вот несколько советов, которые помогут вам успешно пройти собеседование по программированию:

1. Если Interviewer попросит вас написать функцию, убедитесь, что вы выполнили необходимую проверку на наличие неправильных входных данных, например. нулевой чек или пустой чек. Большую часть времени программист забывает проверить не нулевой, пустой, меньше 1, больше 1 или нулевой ввод.

2. 2), которую можно уменьшить до O (n) с помощью Memoziation.

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

5. Большую часть времени интервьюер задает уточняющий вопрос, как решить проблему. он спросит, как найти взаимоблокировку, а затем как исправить взаимоблокировку в java и т. д.

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

Если вы новичок или младший разработчик и у вас не было большого опыта собеседования по программированию, я предлагаю вам пройти Grokking Modern System Design for Software Engineers & Manager обучающий курс . Один из лучших курсов для освоения одной из самых сложных тем на собеседовании по программированию — системного проектирования.


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

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

10. Теперь вы готовы к собеседованию по программированию

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

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

Эти распространенные вопросы о кодировании, структуре данных и алгоритмах — те, которые вам необходимо знать, чтобы успешно пройти собеседование в любой компании, большой или маленькой, для любого уровня работы по программированию.

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

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

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

Дополнительное обучение
Структуры данных и алгоритмы: глубокое погружение с использованием Java
10 книг для подготовки к собеседованию по техническому программированию/кодированию
10 книг по алгоритмам, которые должен прочитать каждый программист
5 лучших книг по структуре данных и алгоритмам для Java-разработчиков
100+ данных Вопросы по структуре и алгоритму с решением
75+ вопросов для собеседования по кодированию для опыта работы от 2 до 5 лет
10 Программирование и кодирование Курсы собеседования для программистов

Заключительные заметки
Спасибо, вы дочитали статью до конца… Удачи на собеседовании по программированию! Конечно, это будет нелегко, но, следуя этой дорожной карте и руководству, вы станете на один шаг ближе к получению работы, о которой всегда мечтали.

Оставить комментарий