tima: (bandana)
tima ([personal profile] tima) wrote2018-09-21 07:52 am
Entry tags:

Интеллект думающих out of box proficient DB specialists

Прочитал пост Малобукова про IQ и почему-то вспомнил как я интервьюирую желающих поработать в нашем учреждении. Есть у меня три-четыре задачки-вопроса, на которые, как правило, никто из приходящих ответа не знает, поскольку готовятся они по верхним линкам, выпадающим из гугла на вопрос "какие вопросы задают на интервью". И мне очень интересно как себя ведет человек, не знающий ответа и мечущийся у себя в голове в ужасе от этого.

И когда кто-то из претендентов клеймает себя как думающего out of box, я потираю под столом руки, сладко улыбаюсь и предлагаю показать оное умение, ответив на вот такой простенький вопрос...

Дело в том, что мне и правду нужны думающие, а выполнять какие-то рабочие шаги по подсказке 1-2-3 я их и сам научу, дело нехитрое.

А еще приходят специалисты по базам данных, которые объявляют свои знания proficient. Этим я задаю и вовсе простой вопрос - напишите мне в одну строку процедуру, которая при засаживании в нее аргументом текущего дня будет выдавать последнее число месяца. То есть, если ей дать 21 сентября 2018, то она выдаст на выходе 30. Если задать 11 декабря 2018 - 31, а если задать, скажем, 3 февраля 2020, то она выдаст 29. Ну, и так далее. Какого я только бреда не наслушался за эти годы от этих proficient out of box спецов. Но это вовсе не значит, что они тупые люди. Может даже они могут сыграть всю девятую симфонию Бетховена наизусть, а я - нет.

P.S. Работал со мной в BBN Planet Джаш Пюринтон. Он в одну строку Пёрла такое писал, что я день разбирался потом что эта его строка делает и как.

[personal profile] gb0 2018-09-21 12:42 pm (UTC)(link)
date_part('days' от транкейта с шагом в месяц – это сильно сложно. Люди частенько не до конца работу планировщика с индексами и group by представляют, а тут такой ванлайнер нарисовать надо...
brmail: (Default)

[personal profile] brmail 2018-09-21 08:41 pm (UTC)(link)
ну идея то в целом простая - взять первый день следующего месяца и попросить уменьшить дату на 1 день.
brmail: (Default)

[personal profile] brmail 2018-09-24 02:54 pm (UTC)(link)
кто писал на js какой-либо UI в браузере во времена засилья IE и отсуствия массовых фреймворков, которые за тебя уже все сделали, тот трюков с датами накушался по самое немогу. Вообще некий опыт работы с реальным html и DOM который как раз и видит браузер - очень хорошее подспорье. Так как в итоге, все эти красивые высокоуровневые языки и фреймворки как раз этим и оперируют. Так что иногда залезть ручками и пошебуршить там очень полезно.
Кстати, в микрософтовcком сиквеле начиная с 2012 кажется версии есть функция которая по дате возвращает последний день месяца.
brmail: (Default)

[personal profile] brmail 2018-09-24 03:40 pm (UTC)(link)
гы-ы. Напомнил. Ты в курсе, какой у VB 5 и VB 6 был один из наиболее быстрых, и гарантированно удобных в употреблении способов сортировки строковых массивов? Типа быстро отсортировать несколько тысяч строк не особо напрягаясь с кодом и не используя внешних библиотек?
Загнать эти строки тупо в невидимый комбобокс и приказать сортировать. Экономия в скорости выполнения на циклах интерпретатора покрывала с лихвой наличие дололнительного элемента на форме.
Я как то даже однажды на интервью про это рассказал. Не поверили...
Edited 2018-09-24 15:41 (UTC)

Заинтересованно

[personal profile] malobukov 2018-09-21 12:44 pm (UTC)(link)
А какой ответ вы ожидаете от кандидата? SELECT date('now','start of month','+1 month','-1 day')?

CASE WHEN по костяшкам пальцев, с обработкой високосного года, и всё в одну строчку?

Разбить дату на число-месяц-год, увеличивать число от 27 до тех пор, пока конвертация обратно в дату не вернёт ошибку, и вернуть последнее число, где ещё не было ошибки?

Заранее заполненную LastDayOfTheMonthLookupTable где первичный ключ год и месяц?

Класс LastDayOfTheMonthAbstractFactory, унаследованный от летоисчисления, чтобы работал не только в григорианском календаре?

Re: Заинтересованно

[personal profile] gb0 2018-09-21 01:14 pm (UTC)(link)
Наверное, ожидается что-то вроде
create or replace function get_days_of_a_month(a_date IN date) returns int
as
$_$
select cast(date_part('days',date_trunc('month',a_date) + cast('1 month' as interval) - cast('1 day' as interval)) as int)
$_$ language sql;

а то и вовсе что-то реально 1-line при помощи ораклового
cast(to_char(last_day(a_date),'dd') as int)
, только все это сложно, и вроде несложно ищется :(

[identity profile] i-mko.livejournal.com 2018-09-21 01:09 pm (UTC)(link)
Обычно отвечаю что-то простенькое, типа добавить месяц, отнять от новой даты день.

[personal profile] buran293 2018-09-21 01:21 pm (UTC)(link)
Страшный Вы человек!))
Небось, при интервьюировании, ещё и улыбаетесь располагающе!?))

[personal profile] buran293 2018-09-21 04:09 pm (UTC)(link)
ггг))
olindom: (Default)

[personal profile] olindom 2018-09-21 01:46 pm (UTC)(link)
В общем, развлекаешься, как можешь. Уважаю. В отличие от ... долбаных эйч аров, у тебя есть профзапросы, на которые люди должны отвечать.
olindom: (Default)

[personal profile] olindom 2018-09-21 02:09 pm (UTC)(link)
Не сомневаюсь!!! )))