Топ-8 важных вопросов и ответов на собеседованиях по кодированию 2022 [для новичков и опытных]
Опубликовано: 2021-08-25Необходимы хорошие основы структур данных, таких как массивы, двоичные деревья, хеш-таблицы и связанные списки. Вы должны знать основные алгоритмы, методы и хорошо разбираться в языках программирования, таких как Java, особенно если вы претендуете на работу программиста. Вы определенно можете узнать ответы на важные вопросы собеседования по программированию, но настоятельно рекомендуется активно практиковаться в решениях самостоятельно.
8 лучших вопросов для интервью по программированию и ответы на них
Давайте рассмотрим некоторые из наиболее важных вопросов по кодированию, которые задают в интервью, проводимых крупными компаниями, такими как Microsoft, IBM, Google и т. д.
1. Как найти в слове первый неповторяющийся символ?
Для того, чтобы ответить на этот вопрос, нужно сначала понять, что необходимо сделать для продвижения этой функции. Необходимо написать функцию, которая принимает строки и возвращает первые неповторяющиеся символы.
Например, в слове «проход» «р» — это первый неповторяющийся символ, а в слове «черепаха» — «у» — это первый неповторяющийся символ. Итак, как нам решить эту проблему? Мы можем создать таблицу для хранения повторений для всех символов, а затем выбрать первые записи, которые не повторяются.
Чтобы написать код, который будет возвращать первые неповторяющиеся буквы, мы можем использовать LinkedHashMap для хранения количества символов. Этот HashMap следует порядку вставки, а символы инициализируются в той же позиции, что и в строке. Отсканированную строку необходимо повторить с помощью LinkedHashMap, чтобы выбрать нужную запись со значением 1.
Другой способ решить эту проблему — использовать firstNonRepeatingChar(String word). Это позволяет идентифицировать неповторяющийся символ, который появляется первым, за один проход. Этот подход использовал два хранилища для замены взаимодействия. Этот метод хранит неповторяющиеся и повторяющиеся символы отдельно, и когда итерация заканчивается, требуемый символ является первым элементом в списке.
2. Как удалить дубликаты из массивов?
Во-первых, вы должны использовать LinkedHashSet (интерфейс набора), чтобы сохранить исходный порядок вставки элементов в набор. Вы должны использовать циклы или функции рекурсии для решения таких вопросов интервью по программированию.
Главный фактор, который мы должны учитывать при работе с массивами, — это не элементы, имеющие дубликаты. Основная проблема здесь заключается в удалении дубликатов. Массивы — это статические структуры данных фиксированной длины, поэтому их нельзя изменить. Итак, чтобы удалить элементы из массивов, вам нужно создать новые массивы и продублировать содержимое в эти новые массивы.
Во-первых, вы должны преобразовать массивы в Arraylists, а затем создать LinkedHashSets из этих ArrayLists. Если входные массивы содержат большее количество дубликатов, это может привести к созданию нескольких временных массивов, что увеличивает стоимость импорта содержимого. Это ограничение заставляет нас подходить к этой проблеме таким образом, который требует меньше памяти и вычислительной мощности.
Мы должны удалить дубликаты, но не копировать их в результирующие массивы, таким образом, не удаляя дубликаты полностью, а просто заменяя их на 0 в качестве значения по умолчанию.
3. Как проверить, является ли число простым?
Это один из самых распространенных вопросов на собеседовании по кодированию, который включает в себя выяснение, является ли заданное число простым числом или нет. Такие программы являются основой алгоритмического мышления, поскольку мы должны придумывать решения, основанные на том факте, что все простые числа — это натуральные числа, которые не могут делиться на положительные числа, кроме 1.
Мы должны написать код для создания циклов, которые проверяют каждое число, начиная с 1 до целевого числа, чтобы увидеть, делится ли целевое число на любое другое положительное число, кроме самого себя или 1.
Эта функция приведет нас к решению. При проверке особенно большого числа мы можем просто проверить квадратный корень из N, где N является целевым числом. Нет необходимости проверять до N в случае приемлемого квадратного корня.
Если число не делится на 2, нет необходимости проверять, делится ли оно на другие четные числа, что сокращает время, необходимое для поиска решения. Это оптимизированная версия решения, в которой пригодится анализ числа перед написанием решения.
4. Как проверить, содержат ли строки только цифры?
Если вы хотите написать регулярные выражения для проверки того, являются ли строки только числами или содержат ли они нецифровые символы, вы должны сначала освоиться с использованием наборов символов в регулярных выражениях Java. Языки программирования, такие как Java, поддерживают регулярные выражения с помощью класса java.util.regex.Matcher и java.util.regex.Pattern. Java.util.regex — специальный пакет для этой цели.
Чтобы проверить наличие только чисел с помощью регулярных выражений, мы можем использовать код для анализа того, содержат ли строки необработанное целое число. Мы проверим, содержит ли строка только цифры в диапазоне от 0 до 9. Даже если строка содержит цифры, а также другие символы, это не простая числовая строка. Регулярные выражения проверяют только целые числа и не учитывают символы точки (.), поэтому десятичные числа и числа с плавающей запятой не проходят тест.
5. Как поменять местами слова в целевом предложении без помощи библиотечных методов?
Это также один из самых распространенных вопросов на собеседованиях по программированию. Во-первых, мы должны понять требование и то, как заполнить пробел в этом требовании. Столкнувшись с подобными вопросами, мы должны сначала сосредоточиться на том, чтобы задавать правильные вопросы. Строки — это не что иное, как предложения определенных символов, которые могут содержать одно слово или несколько слов.
Предложение также может быть пустым. Например, если нам дали предложение «Программирование — это весело», мы должны изменить его на «Развлечение — это программирование». эффективно. Мы должны использовать регулярные выражения в Java, чтобы разделить заданные строки на пробелы, а затем применить метод reverse() из служебного класса Collections.
Как только вы сможете разделить строки с помощью регулярного выражения '\\s', в результате будет возвращен массив слов. Это также касается слов, разделенных несколькими пробелами. Как только массив будет возвращен, вы можете создать ArrayLists из этих массивов, а затем использовать метод Collections.reverse(). Это инвертирует ArrayLists, и каждое слово будет повторно инициализировано в обратном порядке.
Теперь все, что осталось, — это использовать StringBuilder для объединения нескольких строк с помощью итерации ArrayList. Необходимо убедиться, что размер указан, поскольку изменение размера StringBuilder является дорогостоящим процессом с точки зрения вычислительной мощности и памяти. Изменение размера приводит к созданию новых массивов путем копирования содержимого из старых массивов.
6. Как можно заменить или удалить символы из строк?
Предположим, у нас есть строка «Woocommerce», и мы хотим заменить букву «r» на «n». Для этого существует несколько способов. Строковые классы в Java предоставляют несколько подходов к замене символов внутри строк с помощью CharSequence и подстрок.
Вы можете легко вызвать метод замены внутри строки, который в конечном итоге заменит целевой символ и в результате вернет желаемый символ. Строки неизменяемы в таких языках программирования, как Java.
Таким образом, каждый раз, когда над строками выполняются такие операции, как удаление или замена, по умолчанию генерируются новые строковые объекты. Существует 4 перегруженных метода замены строк с помощью Java:
- заменить (char oldChar, char newChar)
- replaceAll (регулярное выражение строки, замена строки)
- replace (цель CharSequence, замена CharSequence)
- replaceFirst (регулярное выражение строки, замена строки)
CharSequence — это один из суперинтерфейсов для строк, StringBuilder и StringBuffer, позволяющий нам передавать любые объекты из них в качестве аргументов для этого метода замены. replaceAll() в конечном итоге заменяет каждое совпадение строками замены, в то время как replaceFirst() заменяет только первые совпадения.
В общем, все это мощные методологии, которые принимают регулярные выражения. Класс Java.lang.String позволяет использовать все эти перегруженные методы, которые могут легко заменять отдельные символы или подстроки в Java.
Настоятельно рекомендуется использовать replaceAll(), так как это заменяет каждое вхождение совпадающих символов. Следование этому подходу позволяет нам ожидать шаблоны регулярных выражений, таким образом получая больше мощности. Этот метод также может заменить каждую запятую конвейером для преобразования файлов, разделенных запятыми, в строки с разделителями.
Однако, если кто-то хочет заменить только один символ, можно просто использовать метод replace(), который учитывает старый и новый заданный символ.
Читайте: Java-интервью, вопросы и ответы
7. Как вы можете добавлять тексты к файлам на таких языках программирования, как Java?
Добавление сильно отличается от создания новых файлов и записи данных в новые файлы. В случае добавления файлы уже существуют, и нам нужно просто добавить текст в конец файла. Это похоже на файлы журналов, поскольку они постоянно обновляются системой.
Файлы журналов — прекрасный пример добавления текста, поскольку приложения итеративно продолжают добавлять данные журналов в эти файлы. Для решения этой проблемы не требуются фреймворки протоколирования, но вы должны знать, как добавлять текст в существующие файлы. Чтобы решить эту проблему, вы должны знать об удобных классах для записи символьных файлов.
У класса есть конструкторы, которые предполагают приемлемость байтового буфера и кодировки символов по умолчанию. Если вы хотите указать значения самостоятельно, вы можете просто создать OutputStreamWriter, используя FileOutputStream. Доступность файлов зависит от базовых платформ, которые определяют, может ли файл быть создан или нет.
Несколько платформ позволяют инициализировать файлы для записи функций с использованием одного объекта FileWrite или нескольких объектов записи файла. Однако конструкторы из этого класса будут давать сбой, как только задействованный файл уже будет инициализирован. FileWriter используется для записи потоков символов, а FileOutputStream может записывать необработанные потоки байтов.
Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.
8. Как найти наибольшее или наименьшее число в массиве целых чисел?
Для этого решения мы должны написать функцию или метод, который может найти наибольшее или наименьшее число из массивов, являющихся полноценными целыми числами. Сначала мы должны создать исходный файл на Java с именем MaximumMinimumArrayDemo.java и скопировать сюда написанный код для компиляции и выполнения.
Мы можем использовать две переменные, которые мы можем назвать «наибольшей» и «наименьшей», чтобы хранить максимальное и минимальное значения соответственно из массивов. Наименьшее число может быть инициализировано с помощью integer.MIN_VALUE, а наибольшее может быть инициализировано с помощью integer.MAX_VALUE.
С каждой итерацией циклов, которые вы инициировали, вы можете сравнивать текущие числа с «самыми большими» и «наименьшими» и соответствующим образом обновлять их. Массивы не переопределяют метод toString в Java, поэтому вы можете использовать Arrays.toString() для печати содержимого целевых массивов.
Вы можете использовать этот статический метод для прямого вызова основной функции. Затем вы должны передать случайные массивы через этот метод, чтобы проверить, были ли возвращены максимальные и минимальные значения точно. Вы также можете автоматизировать это тестирование с помощью модульных тестов в вашей среде IDE.
Оформить заказ: 4 лучших навыка работы с компьютером для вашего резюме
Заключение
Курсы, ориентированные на программирование, не только отлично подходят для решения задач, но и дополнительно повышают ваши шансы быть выбранными при приеме на работу. Если вы хотите узнать больше о программировании на Java и о более сложных проблемах кодирования, вы можете записаться на комплексный курс, например, на курс магистра наук в области компьютерных наук от upGrad или курс разработки полного стека .