Frontend собеседование на позицию middle+
HTML-код
- Опубликовано: 23 ноя 2023
- / discord
DONATIONS: www.donationalerts.com/r/euge...
visit us telegram channel:
t.me/frontend_interview_full
#react #frontend #interview #algorithm #codewars #coding #learntocode #learnprogramming #javascript #learnjavascript #frontenddeveloper #programming #programminglife #computer #computerscience #computers #homework #learning #tutorial #programmingtutorials #programmingtutorial #javascripttutorial #javascripttutorialforbeginners #javascripttutorials #kata #code #codes #beginners #beginner #howto #howtocode #learningjavascript #codingtutorials #codingtutorial #learn2code | #conditionaloperator #conditional #condition #operator #operators #ternaryoperator #ternary #slice #method #methods #slices - Игры
17:00 просто перепиши callback внутри setTimeout, как стрелочную функцию. Тогда стрелочная функция возьмет контекст от родителя. А еще, с apply решение не правильное! apply и call вызывают функцию в моменте. То есть в этом примере функцию вызвал не setTimeout, а сам пользователь. Тут нужно использовать bind. Будьте внимательнее собеседующие.
const removeDublicates = (arr) => {
const hash = new Map()
const result = []
for (let i = 0; i < arr.length; i++) {
const jsonItem = JSON.stringify(arr[i])
if (!hash.get(jsonItem)) {
hash.set(jsonItem, jsonItem)
result.push(arr[i])
}
}
return result
}
Или так))
const removeDublicates = (arr) => [...new Set(arr.map(item => JSON.stringify(item)))].map(item => JSON.parse(item))
Читаемость вышла из чата))
Ставьте лайки!!! Если будет много лайков еще запишу
На 22:45 логика улетела. apply() сразу отработал, setTimeout() не у дел вообще. Там не apply(obj) надо, а bind(this)
Полезно, выкладывай еще
Молодец парень которого собесят. Да там есть какие-то недочеты, но красавчик, что не сломался не сдался молоток, так держать. Интервьюеры, вижу что по хардам вы молодцы где-то, но качайте софты вы же проводите собеседование на вас будут равняться…
22:33 - некорректно применить apply к функции, таким образом она сразу же исполняется и выводит в консоль 42, здесь правильнее использовать именно bind, т.к. в таком случае возвращается новая функция. P. S. вижу, что до меня это уже отметили, но пусть будет.
👍👍👍👍👍
Мини-сторис:
Пошёл на вакансию Middle, где зп была 80-100к (+в условиях было как на джуна) - ну и подумал что на джуна.
Скрининг прошёл, тестовое сделал, на тех-собесе 2-3 вопроса из 15 завалил. После проанализировал и понял, что меня хотели развести и всё же это была Middle позиция, тк вопросы 1в1 как в этом собесе на видео )))
livecoding это жоско респект автору 👍
интересно на какую зп, такой ур-нь вопросов и задач
Конечно, на собеседовании гораздо сложнее сходу всё решать, но всё же
1:05:30 - два редусера вместо arr.map(JSON.stringify) и arr.map(JSON.parse)
Но всё же JSON.parse тут вообще не нужен и решается всё в один проход
@@EgorMoscowNeverSleep ну я говнокодер прост
@@EgorMoscowNeverSleep на пример как ты это решишь без JSON.parse в один проход?
@@vadimveksler7699 По условиям задачи, нужно было только удалить "дубликаты", а копирование объектов не предполагалось.
```javascript
var oldArr = [ { a: 1 }, { b: 1 }, { b: 2 }, { a: 1 }, { c: 3 } ];
var set = new Set();
oldArr.reduce((newArr, item) => {
const key = JSON.stringify(item);
if (set.has(key)) return newArr;
newArr.push(item);
set.add(key);
return newArr;
}, []);
```
@@vadimveksler7699 проверяешь есть ли твой стрингифаенный объект в сете, если нет добавляешь его и в сет и в результирующий массив.
ИНКЛАДС сюда...
сложность будет O(n x m)
function removeDuplicates(arr){
return [...new Set(arr.map(item => JSON.stringify(item)))].map(item => JSON.parse(item))
}
в последнем задании такой кейс не будет работать [{a:1, b:1}, {b:1, a:1}]
вот тебе и миддл+ разработчик)
Потому что условия такого и не было, был дан массив объектов где всегда 1 свойство.
расскажи плс какие вопросы тимлид в конце задавал?
это долго друг
похоже собес в втб, еще кто-то экспресс использует.
56:40 почему O(n^2)?? Что такое n в данном случае. Сложность этого алгоритма O(k + n) где k - количество элементов в массивах read, write, а n - это количество таких массивов. Дальше вообще шок, это можно решить линейно через редьюс, может я плох в алгоритмах, но я в лоб не понимаю как это можно решить линейно и причем тут редьюс, если у редьюса под капотом те же фор и редьюс никак не уменьшает сложность по времени, а наоборот увеличивает сложность по памяти. Есть пара методов оптимизации данного алгоритма 1. использовать хэш таблицу чтобы сделать сложность O(1), но по условию задачи это невозможно. 2. Чтобы сделать алгоритм линейным, нужно использовать some вместо инклюд и тогда в лучшем кейсе мы получим O(n), а в худшем все также и останется O(k + n) или O(n * m) где n число свойств, а m среднее количество элементов.
Не совсем понимаю, почему это не O(n^2) если Include это та же итерация по массиву. И каким образом some спасет ситуацию, если он так же будет итерироваться по массиву и в худшем случае это все равно O(n)
@@andreiostapenko288Потому что как минимум объясни что такое n? Допустим для тебя n это среднее количество элементов в обеих массивах, в нашем случае это 3, 3^2 будет 9, include пройдет 1 раз по write (3 элемента) + read (3 элемента) = 6. Вопросы почему это не O(n^2)? На второе даже отвечать не буду, внимательней читай что я написал
N ключей в объекте data * N элементов в массиве каждого ключа.
@@tnsaturday N ключей в объекте дата = 2, N элементов в массиве каждого ключа в нашем случае 6, получаем 2 * 6 = 12. В нашем случае итераций будет 6, по 3 пробега на каждый массив. Ну и выведите формулу вы одной переменной N назначили два смысла
@@den4ik9992 жесть
честно говоря не понял почему оффер не дали. Нормально же собесился.
какие умники блин сидят спрашивают про сеттаймоут от мидла
Как же приятно самоутверждаться за счёт таких собесов, автор давай ещё.
Глупый, самоутверждаться надо в другом месте
@@user-ry1zf7sl8i в таком случае, ты зря пытаешься здесь самоутвердиться за счёт моей глупости.
На какую зп был собес?
скорее всего на 1000 usd
@@AzwartNkmiddle+ на 1000usd?
сделали офер по итогу?
В этой компании нет
А это мок собес или в компанию?
в компанию
@@front_interviewsа почему в последний задаче получилось о от н, если он два раза пробежался по массиву плюс делал сет ?
@@victard7512 Потому что циклы все идут друг за другом
@@victard7512 тут получается по одному и тому же набору данных проходится 4 раза:
1. Первый редюс, где он мапит данные в строку (по сути arr.map(JSON.stringify))
2. Преобразование массива в Set - от этого шага можно было бы избавиться, если бы он на первом проходе заполнял сразу выше объявленный Set, а вставка в Set насколько помню константа, поэтому ее не считаем
3. Преобразование обратно Set в массив
4. Маппинг их обратно в объекты (arr.map(JSON.parse))
Итоговая сложность 4n (если оптимизировать 3n), числовой индекс обычно откидывают, поэтому можно говорить про O(n).
В лучшем варианте тут наверное будет ввести сразу и Set и массив с итоговым ответом.
И затем в один проход делать следующее:
1.преобразовывать элемент в строку,
2. проверять, есть ли такая строка в Set
3. если нету, то добавлять строку в сет, а объект в массив ответов
после одного прохода вернуть массив ответов.
Ясно я мидл+
Дома, сидя на стуле, глядя видео собеса))) ты мидл+
Челу чел подсказал ответ а чел сделал вид типо сам допер , я так заебался учить js что попутно выучил основы swift и напиликал пет проект на SwiftUI + написал API на node + pg
const removeDublicates = (arr) => {
const tmp = {};
return arr.reduce((acc, item) => {
const tmpKey = Object.keys(item).sort().reduce((acc, key) => acc + key + item[key], '');
if(tmp[tmpKey] === undefined) {
acc.push(item);
tmp[tmpKey] = 1;
}
return acc;
}, []);
}
console.clear();
console.log(removeDublicates([{a: 1, b: 1}, {b: 1}, {a: 2}, {b: 2}, {b: 1, a: 1}, {c: 4}]));
removeDuplicates([
{ a: 11, b: 11 },
{ a: 11, b: '11' },
])
test
@@valentynkuriato605
typeof to tmpKey
(acc + key + (typeof item[key]) + item[key])