for junior
of interviews
перевіряє навички програмування та здатність розв'язувати проблеми;
часто вимагає знання загальних структур даних, таких як масиви, рядки, дерева, зв'язні списки та хеш-таблиці, а також розуміння алгоритмів, таких як пошук, сортування, рекурсія, динамічне програмування та інше;
не лише про те, щоб отримати правильний розв'язок, але й про те, наскільки ефективно ви можете розв'язати проблему, вашу здатність чітко пояснити ваш процес мислення, а також те, як добре ви справляєтеся з крайніми випадками та потенційними помилками у вашому коді.
Розуміння задачі: Переконайтесь, що ви повністю розумієте завдання. Не соромтеся задавати уточнюючі питання, щоб ви мали ясне уявлення про те, що від вас очікують.
Планування розв'язку: Подумайте про різні способи вирішення проблеми та обговоріть їх з інтерв'юером. Оберіть найкращий варіант, звертаючи увагу на ефективність алгоритму.
Кодування: Почніть писати код, дотримуючись обраного плану. По можливості, використовуйте чистий та зрозумілий код, слідкуючи за стандартами кодування.
Перевірка та тестування: Після написання коду перевірте його на наявність помилок. Протестуйте його на різних випадках, включаючи крайні випадки, щоб переконатися, що він працює правильно.
Оптимізація: Якщо ви знайшли спосіб оптимізувати свій код або вирішити проблему ефективніше, внесіть відповідні зміни.
Пояснення розв'язку: Поясніть свій розв'язок інтерв'юеру, розкажіть про вашу стратегію, процес мислення і кроки, які ви виконали для вирішення проблеми.
Отримання зворотного зв'язку: Інтерв'юер може надати вам зворотний зв'язок або задати додаткові питання про ваш розв'язок. Будьте готові до обговорення та відповідей на питання.
знайти найменше число в масиві
function getMin(arr) {
return arr.sort( (a, b) => a - b)[0];
}
# PRESENTING CODE
# CHAPTER 2
Big O Notation tells accurately how long an algorithm takes to run. It is a basic analysis of algorithm efficiency.
# PRESENTING CODE
# PRESENTING CODE
# PRESENTING CODE
const add = (n) => {
if (n <= 0) return 0;
return n + add(n-1);
}
# PRESENTING CODE
const add = (n) => {
if (n <= 0) return 0;
return n + add(n-1);
}
1. add(4)
2. -> add(3)
3. -> add(2)
4. -> add(1)
5. -> add(0)
# PRESENTING CODE
const pairSum = (x, y) => x + y;
const addSequence = (n) = > {
let sum = 0;
for (let i = 0; i < n; i++) {
sum += pairSum(i, i + 1);
}
return sum;
}
#
Cyclomatic complexity of a code section is the quantitative measure of the number of linearly independent paths in it.
# Details
#
1 - 10 Simple procedure, little risk
11 - 20 More complex, moderate risk
21 - 50 Complex, high risk
> 50 Untestable code, very high risk
const transformData1 = (data) => {
let result = [];
for (let i = 0; i < data.length; i++) {
result.push(data[i]);
}
result.reverse();
return result;
}
# PRESENTING CODE
const transformData2 = (data) => {
let result = [];
for (let i = 0; i < data.length; i++) {
result.unshift(data[i]);
}
return result;
}
// Given an array of integers nums and an integer target,
// return indices of the two numbers such that they add up to target.
// You may assume that each input would have exactly one solution,
// and you may not use the same element twice.
// You can return the answer in any order.
# PRESENTING CODE
const twoSum = (nums, target) => {
for (let i = 0; i < nums.length; i++) {
const wanted = target - nums[i];
for (let j = i + 1; j < nums.length; j++ ) {
if (nums[j] === wanted) {
return [i, j];
}
}
}
return [-1, -1];
};
# PRESENTING CODE
const twoSum = (nums, target) => {
const map = new Map();
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (map.has(complement)) {
return [map.get(complement), i];
}
map.set(nums[i], i);
}
return [-1, -1];
};
# PRESENTING CODE
what's the approach?
function fibonacci(n) {
if (n <= 1) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
# PRESENTING CODE
what's time complexity?
function fibonacci(n, memo = {}) {
if (memo[n]) return memo[n];
if (n <= 1) return 1;
return (memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo));
}
# PRESENTING CODE
what's time complexity?
https://frontendmasters.com/courses/practical-algorithms/native-methods-javascript/
https://frontendmasters.com/courses/algorithms/
https://egghead.io/courses/algorithms-in-javascript
https://www.hackerrank.com/
https://www.codewars.com/
https://leetcode.com
https://jskatas.org/