Skip to content

Instantly share code, notes, and snippets.

@akleandrov
Created April 25, 2018 19:59
Show Gist options
  • Save akleandrov/58469b0e71666efde9ac8eea13624552 to your computer and use it in GitHub Desktop.
Save akleandrov/58469b0e71666efde9ac8eea13624552 to your computer and use it in GitHub Desktop.
SIMDAQ
Тестовое задание:
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