У нас задача на знание MySQL, на моём опыте не один кандидат не осилил. Вот она:
users
-----
id
name
comments
-----
id
message
user_id
post_date
Получить последнее сообщение для каждого пользователя.
P.S: Вот решение, на всякий случай
SELECT
u.name, c.message
FROM
users AS u
INNER JOIN (
SELECT
c.user_id,
c.message
FROM
comments AS c
INNER JOIN (
SELECT
c.user_id,
MAX(c.post_date) AS max_post_date
FROM
comments AS c
GROUP BY
c.user_id
) AS cmax
ON
c.user_id = cmax.user_id AND
c.post_date = cmax.max_post_date
) AS c
ON
c.user_id = u.id
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
sz47181
16.10.2014 - 22:55
chee Так и никого не взяли ?
AllesKlar
16.10.2014 - 23:02
chee
На мой взгляд, таких задач на тесте не должно быть.
Если человек претендует на место архитектора базы Оракл, то да, он должен уметь одним запросом убить человека.
А обычный разработчик.. тест не место, где меряются письками, тест должен выявить способность логически мыслить, владение современными технологиями, понимание безопасности, грамотной структуры приложения.
Даже соблюдение синтаксиса, на мой взляд, не критично.
_____________
[продано копирайтерам]
inpost
17.10.2014 - 03:52
cheeУ меня вопрос, точно ли выберет MAX последнюю запись, если в одинаковую дату будут 2 сообщения? Не лучше тогда уже по ID для надежности?
И как работает с большим числом пользователей? Даже с индексами выборка будет отправляться во временную таблицу, а оттуда и могут возникнуть медленная работу.
У меня реализовано так, что дублируется последнее сообщение отдельно. Лишний UPDATE, зато выборка просто идеально работает.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
AllesKlar это средней сложности запрос, мы при построении отчетов строим запросы и по сложнее, с кучей групировок, хэвингами, юнионами. Каких то сверх знаний не надо, но если я вижу, кандидат не справляется, облегчаю задачу на более легкий запрос с той же структурой данных.
Цитата (sz47181 @ 16.10.2014 - 22:55) |
chee Так и никого не взяли ? |
Нет, не взяли. Но я всё ещё таю надежды.
inpost, да, здесь есть нюанс с дублированием записей, можно сделать групировку по user_id. Что на счет производительности, то это совсем другая история.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
T1grOK
17.10.2014 - 07:58
SQL. Имеется таблица:
id|status
id - autoincrement
status - 0/1
Составить запрос, который выберет сначала записи со статусом 0(в порядке убывания id), потом со статусом 1(в порядке возрастания id).
Решение довольно простое, но многих ставит в ступор. Все выполняется одним простым запросом - без подзапросов, JOIN-ов, UNION-ов.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
paul85
17.10.2014 - 08:38
T1grOK, интересная задача! На правах самопровозглашенного джуниора, постараюсь ее решить:
SELECT * from test ORDER BY id*(status-1), id
Цитата (inpost @ 17.10.2014 - 03:52) |
У меня реализовано так, что дублируется последнее сообщение отдельно. Лишний UPDATE, зато выборка просто идеально работает. |
Можно поступить по другому. Поставить memcache, выполнять тот вариант запроса, который я написал, 1 раз в минуту, а результат помещать в memcaсhe. Производительность увеличится еще больше, но есть в этой схеме минусы, которые мне лень перечислять.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Полностью поддерживаю идею
inpost и
sergeiss.
Прeдоставим полный доступ к интернету, напишу четкое ТЗ по созданию простой гостевой книги (листинг всех сообщений + добавление нового).
Думаю этого будет достаточно чтобы понять, как человек знает основы безопасности, PHP и MySQL, нежели непонятные тесты.
_____________
Заработок для веб-разработчиков: CodeCanyon Мое
Портфолио
sz47181
17.10.2014 - 15:12
Кстати интересно а если я гостевую напишу полностью на популярном фреймфорке это будет засчитано или меня сразу выгонят ?
Игорь_Vasinsky
17.10.2014 - 15:13
sz47181
с чего бы это?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sz47181
17.10.2014 - 15:16
Игорь_Vasinsky На хабре много тем было что соискателей за то что не умеют пользоваться современными фреймворками не брали на работу, хотя разработчики великолепные.
Считаю крайне неверным давать задание и требовать чтобы оно было выполнено на каком-то из популярных фреймворках, ибо если будет качественный, легко читаемый код в котором будет видно что человек понимает что такое XSS, sql-inj, разделение логики от представления, то свои знания он применит на любом доступном инструменте. Хуже когда наобарот.
_____________
Заработок для веб-разработчиков: CodeCanyon Мое
Портфолио
T1grOK
17.10.2014 - 17:33
Цитата (paul85 @ 17.10.2014 - 04:38) |
SELECT * from test ORDER BY id*(status-1), id |
Да посыл верный, перевод в отрицательные значения для достижения нужного эффекта.
Хоть я и быстро решил данное задание, но в первый момент возникла мысль "НЕВОЗМОЖНО".
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
17.10.2014 - 20:43
Цитата (sz47181 @ 17.10.2014 - 15:12) |
а если я гостевую напишу полностью на популярном фреймфорке... |
Если в вакансии на эту должность четко написано знание именно этого фреймворка, то это будет однозначным плюсом

Да и вообще в одном и том же тесте разные люди увидят разное.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.