Итак, на днях у меня было это интервью, верно? Мы болтали о его проекте, о том, над чем я работал, и обо всем этом хорошем. Все шло отлично! И вот настал момент:

"Хорошо, я задам вам несколько технических вопросов"

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

Потом возник вопрос, и я пошутил. Я действительно не жду ответа от них. Но все в порядке! Я куплю их в следующий раз!

Я узнал, что быть программистом-самоучкой означает, что в вашей базе знаний, вероятно, будут серьезные дыры. Спросите меня, когда я буду использовать функциональный компонент без состояния вместо обычного класса React (когда не нужны методы состояния или жизненного цикла), и я золотой. Попросите меня выяснить, является ли эта функция O (logN), O (! N) или O (god_pls_help_me), и я скажу последнее.

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

Может быть, мы сможем чему-то научиться вместе! (Я мог бы написать другие из них, но, может быть, не потому, что я заведомо плохой блогер).

Вот так. Давай, тигр!

(примечание: книга, которую я читал, Справочник самозванца Роба Конери потрясающая, и я не могу ее рекомендовать. Тот факт, что я знаю, что такое лямбда-исчисление, теперь говорит о многом.)

Связанные списки и массивы

Моя отмена из предыдущего анекдота.

Я уверен, что все мы знаем, что такое массив, верно?

['full', 'of', 'neat', 'stuff'] ← массив, полный интересных вещей.

Как насчет связанного списка? Это примерно так:

let aLinkedList = 
  {data: 'full', next: ->},
  {data: 'of', next: ->},
  {data: 'confusing', next: ->},
  {data: 'stuff', next: null}

Что-то вроде того? По сути, это объект с некоторыми данными и указатель на следующий бит данных. Лучшее представление, украденное из интернета:

Так в чем разница? Когда мы будем использовать одно вместо другого? Мой первоначальный ответ был примерно таким:

«* Mumble mumble * что-то насчет производительности ... обхода ... памяти? * кашель * кашель * следующий вопрос, пожалуйста »

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

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

let anArray = [1,2,3,4,5,6] ;
anArray.length; // 6
// now lets remove 3...
anArray = anArray.slice(0,2).concat(anArray.slice(3));
anArray; // [1,2,4,5,6]
anArray.length; // 5

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

Сейчас это не так уж важно, когда мы работаем с 6 элементами, но как насчет 10 000? 10 000 000? Гугл? Идк, как я уже сказал, я новичок во всем этом CS, но похоже, что это может быть довольно большой проблемой.

При использовании связанного списка все, что нам нужно сделать, это:

Не нужно ничего тасовать. Просто удалите наш элемент и измените предыдущий указатель на элемент после удаленного.

Так что это круто. А как насчет массивов?

Массивы лучше… кажется, в большинстве случаев. Мы получаем несколько хороших методов с уже существующими массивами, такими как push / pop / shift / unshift и slice / length / join / sort / reverse. Кроме того, у них есть дополнительный бонус в виде индекса, связанного с каждым элементом. Благодаря этому мы можем легко случайным образом вытащить искомый предмет.

let anArray = [1,2,3,4,5,6];
anArray[1]; // 2
anArray[anArray.length - 1]; // 6

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

So:

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

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

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

До следующего раза.

❤ Брайан

@spacebrayn в Твиттере, но у меня это действительно плохо получается. Ударь меня, и мы поговорим о ботанском дерьме.