Заметки о предварительном интервью после Весеннего фестиваля в 2018 году

внешний интерфейс JavaScript Promise

написать впереди

Увы, я все еще немного подонок на переднем крае.

Последнее интервью:

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

Тем не менее, этот метод интервью все еще хорош.

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

О себе

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

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


Затем я осмотрел 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.

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

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


Хватит нести чушь!

Разберите несколько хороших вопросов для интервью, найденных в Интернете: (воспроизведено)

  1. О поднятии объявлений переменных и объявлении функций

alert(a);

a();

var a=3;

function a(){

    alert(10)
}   

alert(a);

a=6;

a();

Конечно же, я ошибся, когда прочитал это сам.

Ключевой момент: переменные, объявленные var, и функции функции life будут продвигаться, как раз в начало области видимости, но операция присваивания выполняться не будет;

1. Объявления функций имеют приоритет над объявлениями переменных, поэтому в начале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.