Created
April 25, 2018 19:59
-
-
Save akleandrov/58469b0e71666efde9ac8eea13624552 to your computer and use it in GitHub Desktop.
SIMDAQ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Тестовое задание: | |
Coding task: | |
Please write a function wrapper slow_guard(timeout, fn) that logs a warning if | |
the function takes too long to complete. Here is a typical example of how your wrapper can be used: | |
Array.prototype.sort = slow_guard(1000, Array.prototype.sort); | |
After this, if sorting an array ever takes longer than one second, a warning | |
should appear on the developer console. | |
We expect a short solution about 5-10 lines of code. | |
Ответ: Если опустить тот факт что так делать ни в коем случае не надо, | |
то нормальных способов сделать это нет, так как упремся в то что сортировка заблокирует нам поток выполнения, | |
по хорошему конечно нужно наверно просто писать асинхронную сортировку или что-то в этом роде. | |
Если же костыльнуть то можно сделать так : | |
const slow_guard = (time, originalSort) => function (callback) { | |
const defaultCallback = (a, b) => a < b; | |
callback = defaultCallback || callback; | |
const startTime = new Date().getTime(); | |
let warningWasShown = false; | |
return originalSort.bind(this)((a, b) => { | |
const curTime = new Date().getTime(); | |
if ((curTime - startTime > time) && !warningWasShown) { | |
warningWasShown = true; | |
console.log('warning'); | |
} | |
return callback(a, b); | |
}); | |
}; | |
JS + nodejs: | |
1. Выполнится ли программа ниже? Если да, то как будет выглядеть массив `arr`? | |
var arr = [1, 1]; | |
arr[4] = 1; | |
console.log(arr[7] = undefined); | |
Ответ: Выполнится, в JS массивы фактически не ограничены по размеру, поэтому промежуточные индексы просто заполнились undefined. | |
[1, 1, empty × 2, 1, empty × 2, undefined] | |
2. Что выведет в консоль код ниже? Используя средства ES6, как добиться предполагаемого результата? | |
function f() { | |
this.a = 1; | |
return function () { | |
console.log(this.a); | |
}; | |
} | |
(new f)(); | |
Ответ: вывод – undefined. Сложно представить чего хотел добиться автор таким кодом, возможно хотел вернуть метод, который должен выводить a, недоступную снаружи. | |
function f() { | |
const a = 1; | |
return () => console.log(a); | |
} | |
f()(); | |
3. Что обычно передаётся в `callback` функцию в качестве первого параметра в nodejs? | |
Ответ: обычно callback`и в стиле NodeJS принимают сначала err, потом data, чтобы в реализации сначала проверить существование ошибки, а потом работать с данными если её нет. | |
4. Что такое callback hell (ад обратных вызовов) и какие основные сценарии его предотвращения? | |
Как только в одной цепочке начинают использовать больше 2-3 callback`ов код становиться очень трудночитаем и поддерживать его сложно. | |
В качестве решения были придуманы Promise, а в дальнейшем async/await. | |
DB | |
1. В чём разница между CHAR и VARCHAR2? | |
Ответ: CHAR – фиксированная длинна строки , VARCHAR – переменная длина строки. | |
2. В каких случаях следует создавать индекс, а в каких не следует. | |
Ответ: Следует создавать когда нам нужно ускорить поиск по данным или обеспечить целостность. Важны также при сортировке и соединении. | |
Про то когда их не надо использовать сложно дать простой ответ, индексы влекут накладные расходы, поэтому есть случаи когда при большом обновлении таблицы проще их удалить, а потом построить заново. Также например не нужно делать индекс на столбец, если он уже участвует в составном индексе. | |
2. Есть таблицы CATS(cat_id, name, age) - кошки, MICE(mouse_id,name,age) - мыши, MEALS(cat_id, mouse_id) - какая кошка с ее слов какую мышку съела. Нужно вывести наградную ведомость для кошек, упрядоченный по их возрасту начиная со старших, содержащий в себе имя кошки, сколько она съела мышей, имя самой молодой съеденой ей мыши, слова "Поощрить" для съевших более 3-х мышей, и "Наказать" для не съевших ни одной мыши. При этом дважды и более съеденные мыши не учитываются, поскольку являются явными приписками кошек. (В случае проблем с учетом какого либо условия - напишите без него, но укажите в чем вы упростили задачу). | |
ОТВЕТ: Как-то так наверное | |
SELECT MIN(mices.age) as yonger,cats.name,cats.age, COUNT(distinct meals.mouse_id) as eated, CASE | |
WHEN COUNT(meals.mouse_id) > 2 THEN 'Поощрить' | |
ELSE 'Наказать' | |
END as "Награда" | |
from MEALS as meals | |
LEFT JOIN CATS as cats ON meals.cat_id = cats.cat_id | |
LEFT JOIN MICE as mices ON mices.mouse_id = meals.mouse_id | |
group by cats.name, cats.age | |
ORDER BY cats.age DESC | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment