Задачки из Тестовых Заданий

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

Любимая задачка: перевернуть строку, по символьно, задом на перед.

Я понимаю зачем это надо уметь делать на С/C++ без дополнительного выделения памяти когда каждый байт на счету…
Но на собеседовании по JavaScript? Это ж интерпретируемый (иногда не однозначно) язык, где мегабайты памяти утекают по мелочи!

Ну ок, сел и на бумажке написал примерно вот такое. Выпендрился, fat arrow function заюзал 🙂

const reverseStringByHalfLoop = (value) => {
	const length = value.length; 
	const halfLength = Math.floor(length / 2);

	let result = value.split('');
	for (let i = 0; i < halfLength; i++) {
		const char = result[i];
		result[i] = result[(length - 1) - i];
		result[(length - 1) - i] = char;
	}
	return result.join('');	
}

Этот код поставил в тупик интервьювера! Он даже начал проверять что будет если длинна строки нечетная…

Отвечаю: ничего не будет, средний символ сразу стоит на своем месте 🙂

Ёбушки-воробушки© Вот мы и дожились до программистов (более того интервьюверов) которые про алгоритмы вроде и слышали, вопросы на собеседованиях задавать умеют, но вот «стандартные ответы» на эти вопросы видят в первый раз.

Оказалось от меня ожидали JavaScript style ответа. Я потом загуглил, типа вот такого:

function reverseStringByArray(value) {
	return value.split('').reverse().join('');
}

Ладно, проехали…

Вот вам еще вопрос (точнее связка) который уже 2 раза встречал:

  1. Напишите функцию которая суммирует все переданые в неё аргументы (прикол в том что кол-во аргументов может быть любым)
  2. Передайте в написаную вами выше функцию массив как список параметров (подколка на знание spread синтакстиса)

В общем очередная шизиловка 🙂 Если что, это делается это как-то так:


export const sumOfAllArgs = (...args) => {
	return [...args].reduce((a, b) => a + b, 0);
}

let arr = [1,2,3,4,5];
sumOfAllArgs(...arr);

Но я так и не понял зачем 2 вопроса об одном и том же? Скорее всего этим вопросам тоже 100 лет в обед, а раньше, до ES6 синтаксиса, решалось через proptypes или еще какую-то олдскульной JavaScript Magic.

В общем технические интервью это иногдза забавно. Но качество специалистов удручает… Все знают SOLID и меряются кол-вом патернов, а вот чужой код и best practices уже никто не изучает.

P.S. Да, я на старости подрабатываю программистом. Это прикольно, не дает мозгам засохнуть, ну и 30+ баксов в час это таки деньги 🙂

Крестики-Нолики на React JS

Что-то меня на приздниках пробило на по-программить. Раз такое дело, вот еще одна «поделка» и немного кода на JavaScript + React:

Играть в Крестики-Нолики прямо в браузере

Исходные коды игры Крестики-Нолики на JavaScript + React

Cо временем добавлю «всякой крастоты»: индикаторов, преключатель режимов PvP, PvE, Demo Mode и т.д.

Тестовое задание на React JS

Обычно я такой фигней не стардаю, но тут задачка интерсная и близкая к реальному миру.

Список ресторанов с разными вариантами фильтров и отображений.

Вот наваял Поиск с Сортировкой Ресторанов на React JS. Может еще чего-то добавлю со временем, Debug Info там интересный получилося.

Исходники выложил на GitHub, может кому-то полезно будет… Хотя писал я это за один день, так что не факт что стоит копировать мои решения не задумываясь 🙂

Правда про IT-шников

Послание от пьяного Карполана для нового поколения IT-шников:

Записано на Silicon Drinkabout в iHub Kyiv группой студентов, будущих ОйТи-шнегов 🙂

P.S. Все будет хорошо, просто выходите иногда из «IT пузыря» в «реальный мир».

Тот редкий случай когда Гавно-Код™ лучше универсального.

Опять занесло меня в PHP программирование, надо было сделать подержку настроек из глобального config.json для уже существующих сайтов на WordPress.

И вот столкнулся с тем редким случаем когда Гавно-Код™ aka Как-Индусы® лучшее решение:

$props = explode('.', $configPropertyName);
switch (count($props)) {
// TODO: Add more deep cases if the Config become too nested.
    case 3:
        $value = $config->{$props[0]}->{$props[1]}->{$props[2]};
        break;
    case 2:
        $value = $config->{$props[0]}->{$props[1]};
        break;
    default:
        $value = $config->{$props[0]};
}    

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

P.S. Не забывайте писать TODO: для таких вот «хаков», через год сами не поймете почему так написано и вместо добавить пару копи-пастов начнете рефакторить с криками: «Да кто так пишет?!»

Английский перевод книги опубликовал

На самом деле текст мне перевели пару месяцев назад, но как обычно не доходили руки опубликовать все статьи. Сегодня во время бессоницы закончил…

P.S. Надо бы конечно вычитать нетивами, но то уже в следующей жизни…

Придумал как бороться с бессоницей

Видимо возраст уже, но стоит мне включить какой-то видео урок (Udemy, Coursera, YouTube) как через 10-15 минут начинаю засыпать!

Бывают конечено исключения… Но тогда за пол ночи изучаю что-то полезное, а не всякую фигню в голове ворочаю.

Не благодарите 🙂

Идея на миллиард: Codename «Gone Fishing»

Примерно год назад я решил сделать «боле оцфрованным» такое хобби как рыбалка.

Идея в 2х словах на этом видео:

Я сразу сделал закрытую группу в Facebook, собрал аудиторию потенциальных клиентов и тестеров, провел разные опросы и обсуждения с ними, определилсся с родмапом приложений…

Так же написал технические задания, разбил на таски и попытался найти подрядчиков или партнеров на изготовление прототипов…

В общем пытался построить продукт и компанию по правильному, с customer development и по lean методике.

Краткий отчет за первый год: НЕ СДЕЛАНО НИЧЕГО!

Вывод простой: Хотите что-то сделать? Ищите деньги и нанимайте людей. Даже закрывшись от всего мира на полгода, вряд ли что-то нафигачите самостоятельно 😦

Читать «Идея на миллиард: Codename «Gone Fishing»» далее

Изобретаю лисапеды

В этот раз на PHP:

<?php $y = (date("Y") - 2004 - 1); $m = date("m"); if (($m > 8) || (($m == 8) && (date("j") >= 20))) $y += 1; echo $y; ?>

Это я возраст Кристины вывожу скриптом на сайте, чтобы не менять текст каждый год 🙂

Не верьте зависимым людям

Вот не верьте и все тут! Неважно человек накоман, алкоголик, игроман, сексоголик, интриган или просто патологический врун.

Даже если договоритесь чтобы человек говорил вам правду и все как есть, не зависимо от любых своих поступков — все равно не верьте! Соврет просто, потому что другим то он продолжает врать. В какой-то момент он и вам соврет, первый раз возможно автоматически, ну а дальше пошло-поехало.

А еще большей ошибкой строить отношения с такими людьми, что личные, что бизнес. Все договоренности и планы в один прекрасный день полетят к черту! Просто из-за того что человек врет, его на этом ловят, он признаться во лжи или нарушение договоренностей не хочет/не может и начинает врать еще больше… Ему уже пофиг на незаконченные дела или какие-то обязательства, он просто по привычке оправдывается и огрызается. Ну и самое противное, что после такого человек ничего доделывать больше не будет! Он обиделся, его «не правильно поняли», он больше не намерен «терпеть такое отношение».