написать впереди
Увы, я все еще немного подонок на переднем крае.
Последнее интервью:
Это компания по производству облачных сервисов, и процесс собеседования относительно прост: ответственный за интерфейс взял доску и маркер, думая, что ему придется какое-то время писать код. . . .
Тем не менее, этот метод интервью все еще хорош.
Перед отъездом я думал, что почти готов, но на самом деле подготовки было далеко не достаточно.
О себе
В начале вас, как правило, попросят дать краткое представление о себе.Я в основном расскажу об опыте работы в предыдущей компании, опишу проекты, за которые я отвечал, бизнес-функции каждого проекта и в основном представлю Использование каждого проекта в деталях.Технология.
Хотя я говорил много, но постфактум чувствовал, что когда я выражался, упорядоченность, логика и точность моего языка были не очень хороши Сила моей способности выражать также часть предпочтения интервьюера. , то можно поговорить с ним в будущем. Работайте вместе, чтобы обменяться содержанием работы, обсудить технологии и т. д. Поэтому также очень важно представиться. Самопредставление представляет собой первое впечатление интервьюера о вас. Даже если у вас есть интервью много раз, вы говорили это много раз.Вы также должны хорошо разобраться в своем языке.
Затем я осмотрел js. Интервьюер медленно взял свою маленькую доску, и я немного занервничал на душе. . . .
Метод проверки также вполне удовлетворительный, один за другим в соответствии с основными категориями в js.
- Первая — это функция
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
— А?.. Разве это не случилось со мной в последнем интервью?
Тогда я спокойно сказал в ответ:
"setTimeout
Функция задержит выполнение, поэтому дождитесь выполненияconsole.log()
когда,i
Их стало 5, так что в итоге одновременно будет напечатано 5 пятерок;"
Вопрос: "Тогда я хочу вывести 0~4?"
"Почему у тебя эта проблема? Ты хочешь спросить меня, как изменить закон..."
я просто говорюvar
изменить наlet
просто хорошо
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
Или добавьте замыкание:
for (var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000);
})(i)
}
или это:
for(var i = 1;i < 5;i++){
var a = function(){
var j = i;
setTimeout(function(){
console.log(j);
},1000)
}
a();
}
Это также метод использования замыкания, фактически эквивалентный превращению var в эффект let, так что значение i не будет привязано по умолчанию в начале, а новое значение будет присваиваться i каждый раз. время выполнения цикла.
Вопрос: «Если удалитьfunction
внутреннийi
Шерстяная ткань? "
«Таким образом, нет ссылки на память, и я все еще 5 в конце».
Поскольку подобные вопросы для интервью встречаются часто, мы собрали несколько связанных вопросов для интервью:
Например это:
for (var i = 0; i < 5; i++) {
setTimeout((function(i) {
console.log(i);
})(i), i * 1000);
}
Первым параметром функции задержки становится функция немедленного выполнения, которая должна бытьundefined
, Эквивалентно:
setTimeout( undefined, … )
;
Немедленная функция будет выполнена немедленно, поэтому она немедленно выведет от 0 до 4;
Обещанная проверка:
setTimeout(function() {
console.log(1)}, 0);
new Promise(function executor(resolve) {
console.log(2);
for( var i=0 ; i<10000 ; i++ ) {
i == 9999 && resolve();
}
console.log(3);
}).then(function() {
console.log(4);
});
console.log(5);
Для проверки рабочего механизма сначалаPromise
асинхронный,Promise
Есть только три состояния,pending、fulfilled(成功)、rejected(失败)
, последние два вместе называютсяresolve
(Это было стереотипно), как только состояние установлено, предложение не может быть изменено.
Первая функция задержки сначала установит время и передаст эту функцию в очередь задач после окончания времени, поэтому она не будет выводить 1 в начале;
Promise
Функции будут выполняться по порядку, вывод 2 3 ,Promise
внутреннийthen
Он будет выполняться асинхронно и помещаться в текущийPromise
последнее выполнение очереди задач, в то время какconsole.log(5)
выполняются последовательно, поэтому сначала выведите 5, затем 4.Promise.then()
Обратный вызов внутри относится к микрозадаче и будет выполняться в конце текущего цикла событий, иSetTimeout
Обратный вызов внутри принадлежит макрозадаче и будет выполняться в следующем цикле событий.
Наконец, будет выведено 1.
Конечный результат: 2 3 5 4 1
- осмотр объекта
Самый простой первый
var obj = {
a: "1"
};
var obj2 = obj;
obj2.a = "2";
console.log(obj.a);
"Должен быть выход 2"
ojb2 — это просто ссылка на экземпляр объекта obj, и, в конце концов, это значение измененного объекта obj.
этот указатель
name = "name of window";
function show() {
var name = "name in function show()";
alert(this.name);
}
show();
Вот определенная глобальная переменнаяname
, эта переменная принадлежитwindow
Да, вshow
Функция также объявляетname
Переменная.
this
определяется для указания на объект, вызвавший текущую функцию,show()
Функция вызывается глобально, поэтомуthis
должен указывать на текущийwindow
объект.
Посмотрите на следующий:
var myObj = {
name: " my Object",
show: function() {
var name = "my Object in function";
alert(this.name);
},
};
myObj.show();
На этот раз позвониmyObj.show()
ОбъектmyObj
, так что будет выводmy Object
- массивмассив
Сначала разберем:
var arr = [ 2, 4, 50, 20, 3 ];
Пузырьковая сортировка:
var arr = [ 2, 4, 50, 20, 3 ];
for(var i = 0 ; i < arr.length-1; i ++){
for(var j = 0; j < arr.length-i; j++ ){
var ls;
if(arr[j] > arr[j+1]){
ls = arr[j];
arr[j] = arr[j+1]
arr[j+1] = ls
}
}
}
console.log(arr);
На самом деле я собираюсь начать думать о том, чтобы использоватьsort()
,ноsort
Вывод не очень стабилен, и его сортировка по умолчанию основана на кодовой точке Unicode строки.
Также меня спросили, сколько параметров у сортировки, какой второй параметр?
Я не подумал об этом в то время, я разберусь с этим позже!
Необязательный параметр — это функция сравнения,compareFunction
, используемый для указания функции для сортировки в определенном порядке. Если он опущен, элементы сортируются по положению Unicode каждого символа преобразованной строки.
- если
compareFunction(a, b)
Если меньше 0, то A будет располагаться перед B;
- если
compareFunction(a, b)
равным 0, относительные положения a и b остаются неизменными;
- если
compareFunction(a, b)
Больше 0, b будет отсортировано перед a. -
compareFunction(a, b)
Всегда должен возвращать один и тот же результат сравнения для одних и тех же входных данных, иначе результат упорядочивания будет неопределенным.
Чтобы сравнивать числа вместо строк, функция сравнения может просто вычесть b из a, следующая функция отсортирует массив в порядке возрастания.
function compareNumbers(a, b) {
return a - b;
}
Так что на вершине такого рода можно просто написать как:
var arr = [ 2, 4, 50, 20, 3 ];arr.sort(function (a, b) {
return a - b;
});
console.log(arr);
Или немного короче:
var arr = [ 2, 4, 50, 20, 3 ];
arr.sort((a, b) => a -b );
console.log(arr);
Я снова изменил его и сказал, как использовать сортировку для сортировки объекта?
var obj = [
{ name: 'a', value: 21 },
{ name: 'b', value: 37 },
{ name: 'c', value: 45 },
{ name: 'd', value: -12 },
{ name: 'e' }
];
должно быть:
obj.sort(function (a, b) {
return (a.value - b.value);
});
Кстати, вставьте подробное объяснение MDN
Я много спрашивал по частям, а остальное не могу четко вспомнить, это все интеллектуальные вещи, поэтому я не буду их перечислять.
Затем я спросил о некоторых технических принципах, связанных с реакцией и редукцией, жизненным циклом, односторонним потоком данных, виртуальным DOM и так далее. . .
Я хорошо ответил на эти вопросы, потому что я использую это каждый день на работе, и я знаком с этим. На некоторые вопросы в базовом классе js не очень хорошо ответили. Я также знаю, что моя основа js не является прочной. Кроме того, я читал меньше вопросов на собеседовании, хотя эти основы Очки знаний мало используются в работе, и некоторые люди просто гуглят, если не помнят четко, и это не повлияет на ход разработки.Однако, даже если вы владеете реакцией , самая важная основа js! Самое главное, что фреймворк написан на js.
Думая об этом, я столкнулся с некоторыми незнакомыми или незнакомыми технологиями в моей предыдущей работе.После того, как гугл придумал ответ, я использовал его непосредственно.Я не изучал принцип тщательно, и я не знал, почему!
Я не резюмировал это потом, в следующий раз, когда я столкнусь с этим техническим моментом, мне, возможно, придется снова гуглить. . .
Хватит нести чушь!
Разберите несколько хороших вопросов для интервью, найденных в Интернете: (воспроизведено)
- О поднятии объявлений переменных и объявлении функций
alert(a);
a();
var a=3;
function a(){
alert(10)
}
alert(a);
a=6;
a();
Конечно же, я ошибся, когда прочитал это сам.
Ключевой момент: переменные, объявленные var, и функции функции life будут продвигаться, как раз в начало области видимости, но операция присваивания выполняться не будет;
function a(){alert(10)}
, вы увидите эту функцию.2.
a()
, исполнительная функция, должна появитьсяalert(10)
3. Казнен
var a=3;
такalert(a)
просто покажи3
4. Из-за
a
Это больше не функция, поэтому она выполняется доa()
Когда возникает ошибка. Посмотри снова:
alert(a);
a();
var a=3;
var a=function(){
alert(10)
}
alert(a);
a=6;
a();
Отличие в том, что функция в этот раз объявляется с var.По принципу он только объявляется заранее, а не присваивается как функция,
Итак, изначально alert(a)undefined
;
a() сообщает об ошибке;
Похожие темы:
var a=0;
function aa(){
alert(a);
var a=3;
}
aa();
В функции aa есть var a=3, тогда в области видимости aa переменная a объявлена заранее, но она не будет присвоена, поэтомуundefined
;
var a=0;
function aa(a){
alert(a);
var a=3;
};
aa(5);
alert(a);
//5,0
В теле функции параметр a имеет приоритет над переменной a;
var a=0;
function aa(a){
alert(a);
a=3;
alert(a);
}
aa();
alert(a);
Прежде всего, никакие параметры не передаются,aa()
даundefined
;
a=3, на самом деле модифицируется значение формального параметра a, а не глобальной переменной a, идем внизalert(a)
также формальный параметр a;
Последнийalert(a)
, является глобальным a;
напиши в конце
Хватит говорить! . . .
Я собираюсь почистить вопросы интервью и продолжить вкушать суть моего языка JavaScript.