Некоторые каверзные вопросы на собеседовании по кодированию, с которыми вам придется столкнуться. Эти вопросы могут показаться простыми, но в них есть кое-что подозрительное. Итак, сегодня я собираюсь показать вам 10 сложных вопросов, которые вы должны задать перед собеседованием по программированию.
1. Для данной строки переверните каждое слово в предложении.
var string = "Welcome to this Javascript Guide!";
// Output becomes !ediuG tpircsavaJ siht ot emocleW
var reverseEntireSentence = reverseBySeparator(string, "");
// Output becomes emocleW ot siht tpircsavaJ !ediuG
var reverseEachWord = reverseBySeparator(reverseEntireSentence, " ");
function reverseBySeparator(string, separator) {
return string.split(separator).reverse().join(separator);
}
2. Как очистить массив в JavaScript?
var arrayList = ['a', 'b', 'c', 'd', 'e', 'f'];
способ 1
arrayList = [];
Приведенный выше код установит переменную arrayList
в новый пустой массив. Это рекомендуется, если у вас нет ссылок на исходный массив arrayList
где-либо еще, потому что это фактически создаст новый пустой массив.
способ 2
arrayList.length = 0;
Приведенный выше код очистит существующий массив, установив его длину равной 0. Этот способ очистки массива также обновляет всю ссылочную переменную, которая указывает на исходный массив.
способ 3
arrayList.splice(0, arrayList.length);
Вышеупомянутая реализация также будет работать отлично. Этот способ опустошения массива также обновит все ссылки исходного массива.
3. Как проверить, является ли число целым?
Очень простой способ проверить, является ли число десятичным или целым, - это посмотреть, остался ли остаток при делении на 1.
function isInt(num) {
return num % 1 === 0;
}
console.log(isInt(4)); // true
console.log(isInt(12.2)); // false
console.log(isInt(0.3)); // false
4. Объясните, что такое функция обратного вызова, и приведите простой пример.
Функция callback
- это функция, которая передается другой функции в качестве аргумента и выполняется после завершения некоторой операции. Ниже приведен пример простой функции обратного вызова, которая регистрируется в консоли после завершения некоторых операций.
function modifyArray(arr, callback) {
// do something to arr here
arr.push(100);
// then execute the callback function that was passed
callback();
}
var arr = [1, 2, 3, 4, 5];
modifyArray(arr, function() {
console.log("array has been modified", arr);
});
5. Для двух строк верните true, если они являются анаграммами друг друга.
анаграмма строки - это другая строка, содержащая те же символы, только порядок символов может отличаться. Например, «abcd» и «dabc» - это анаграмма друг друга.
var firstWord = "Mary";
var secondWord = "Army";
isAnagram(firstWord, secondWord); // true
function isAnagram(first, second) {
// For case insensitivity, change both words to lowercase.
var a = first.toLowerCase();
var b = second.toLowerCase();
// Sort the strings, and join the resulting array to a string. Compare the results
a = a.split("").sort().join("");
b = b.split("").sort().join("");
return a === b;
}
6. Что будет на выходе из следующего кода?
var y = 1;
if (function f() {}) {
y += typeof f;
}
console.log(y);
Приведенный выше код даст результат 1undefined
. Если оператор условия оценивается с использованием eval
, поэтому eval(function f() {})
, который возвращает function f() {}
, что истинно, поэтому код оператора if выполняется внутри. typeof f
возвращает значение undefined, потому что код оператора if выполняется во время выполнения, поэтому оператор внутри условия if
оценивается во время выполнения.
7. Что будет выводить следующий код?
(function() {
var a = b = 5;
})();
console.log(b);
Приведенный выше код выведет 5, хотя кажется, что переменная была объявлена внутри функции и к ней нельзя получить доступ за ее пределами. Это потому что
var a = b = 5;
интерпретируется следующим образом:
var a = b;
b = 5;
Но b
нигде не объявляется в функции с var
, поэтому он устанавливается равным 5 в глобальной области.
8. Что будет выводить следующий код?
for (var i = 0; i < 4; i++) {
setTimeout(() => console.log(i), 0)
}
Классическая ошибка здесь - нулевые задержки. setTimeout(callback, 0)
не означает, что обратный вызов будет активирован через ноль миллисекунд.
Вот что происходит на стороне цикла событий:
- Текущий стек вызовов установлен на первый setTimeout ().
- windows.setTimeout () рассматривается как веб-API (для лучшего неблокирующего ввода-вывода). Таким образом, стек вызовов отправляет эту часть кода для исправления веб-API. Через 0 миллисекунд обратный вызов (здесь анонимная функция) будет отправлен в очередь (а не в стек вызовов).
- Поскольку стек вызовов свободен, цикл for может продолжить до второго setTimeout… (повторить после того, как мы выполним это условие i ‹4)…
- Теперь цикл окончен и
i === 4
. JS теперь может выполнять очередь обратного вызова один за другим. Каждый console.log (i) напечатает 4.
9. Проблема палиндрома
Палиндром - это слово, предложение или другие типы символьных последовательностей, которые читаются так же назад, как и вперед. Например, «гоночная машина» и «Анна» - палиндромы. «Таблица» и «Джон» не являются палиндромами, потому что они не читаются одинаково слева направо и справа налево.
const palindrome = str => {
// turn the string to lowercase
str = str.toLowerCase()
// reverse input string and return the result of the
// comparisong
return str === str.split('').reverse().join('')
}
10. Найдите гласные
Вероятно, это одна из менее сложных проблем (без каламбура) - с точки зрения сложности - но это не умаляет того факта, что вы могли столкнуться с ней во время собеседования. Это так.
const findVowels = str => {
let count = 0
const vowels = ['a', 'e', 'i', 'o', 'u']
for(let char of str.toLowerCase()) {
if(vowels.includes(char)) {
count++
}
}
return count
}
Это все на сегодня. Спасибо всем, что дочитали до конца. Продолжай учиться :)
Примечание команды Plain English
Вы знали, что у нас четыре публикации? Проявите немного любви, предложив им следующие слова: JavaScript на простом английском, AI на простом английском, UX на простом английском , Python на простом английском - спасибо и продолжайте учиться!
Мы также запустили YouTube и хотели бы, чтобы вы поддержали нас, подписавшись на наш канал Plain English.
И, как всегда, Plain English помогает продвигать хороший контент. Если у вас есть статья, которую вы хотели бы отправить в какую-либо из наших публикаций, отправьте электронное письмо на адрес [email protected] с вашим именем пользователя Medium и тем, о чем вы хотите написать, и мы вернуться к вам!