Вопросы с интервью-2

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Вопросы с интервью-2

Сообщение Marmot »

Ну ладно, раз пошла такая пьянка :) захотелось посмотреть реакцию каморочной общественнсти на мой вопрос, который вызвал наибольшую степень страдания у людей которым я его задавал.
Сразу хочу отметить, что мы нанимали только самых крутых, тех кто может делать работу 3-5 средних разработчиков, так что речь пойдёт не об опыте и знаниях а просто таки, как мне кажется ментальном блоке.
Короче, задачка:
Есть таблица описывающая фотографии и текстовые таги(метки) ассоциированные с ними, с двумя колонками photo_id, tag , вот примерно с таким содержимым

120 dead
100 sky
120 pig
100 sun
101 cat
113 cloud
101 kitten
113 sky
113 sun
234 sky
234 kitten
...

вопрос: написать select который возвращает какие таги и в каком количестве, наиболее часто встречаются в сочетании с каким либо конкретным тагом.
В нашем случае, например для тага sky ответ должен быть
sun 2
cloud 1
kitten 1

Ну и как водится, ограничение, не использовать sub-selects, т.к. в MySQL 4.0.* их нету :)
Аватара пользователя
aldep
Маньяк
Сообщения: 1593
Зарегистрирован: 18 фев 2003, 08:06
Откуда: Toronto
Контактная информация:

Сообщение aldep »

select t1.tag,count(*) as cnt from Tags t1 join Tags t2 on t1.photoid=t2.photoid
where t2.tag='sky' and t1.tag<>'sky'
group by t1.tag order by cnt desc
Аватара пользователя
aldep
Маньяк
Сообщения: 1593
Зарегистрирован: 18 фев 2003, 08:06
Откуда: Toronto
Контактная информация:

Сообщение aldep »

Точнее если это вопрос практический, то ответ: что вам мешает апргейдится на 4.1
Если теоретический, то чем это отличается от Карловского -х?
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

aldep писал(а):select t1.tag,count(*) as cnt from Tags t1 join Tags t2 on t1.photoid=t2.photoid
where t2.tag='sky' and t1.tag<>'sky'
group by t1.tag order by cnt desc
Быстро... до 5 человек из 6-ти идея join-a таблицы самой на себя не возникла после 10 мин. интенсивного потения.
Один из этих 5-ти, правда, после небольшой подсказки рассмеялся и за 30 секунд всё написал.
Остальные продолжали потеть до полной потери ориентации.
Коллеги которые их инервьюировали после меня, рассказывали потом как народ всё никак не мог отойти от потрясения и примитивности подхода :) .
Vovchik
Маньяк
Сообщения: 2841
Зарегистрирован: 20 фев 2003, 09:15
Откуда: Vancouver

Сообщение Vovchik »

Marmot писал(а):
aldep писал(а):select t1.tag,count(*) as cnt from Tags t1 join Tags t2 on t1.photoid=t2.photoid
where t2.tag='sky' and t1.tag<>'sky'
group by t1.tag order by cnt desc
Быстро... до 5 человек из 6-ти идея join-a таблицы самой на себя не возникла после 10 мин. интенсивного потения.
Один из этих 5-ти, правда, после небольшой подсказки рассмеялся и за 30 секунд всё написал.
Остальные продолжали потеть до полной потери ориентации.
Коллеги которые их инервьюировали после меня, рассказывали потом как народ всё никак не мог отойти от потрясения и примитивности подхода :) .
Вы хотите сказать что в Мускуле следущая контструкция не пролезет:


select tag, count(*) from table where photo_id In
(select photo_id from table where
tag = 'sky')
group by tag order by count(*)
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

aldep писал(а):Точнее если это вопрос практический, то ответ: что вам мешает апргейдится на 4.1
Дык заапгрейдились, а что толку, subselects в 4.1 тормозят со страшной силой, всё равно всё на join-ах пишем...
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

Vovchik писал(а):Вы хотите сказать что в Мускуле следущая контструкция не пролезет:


select tag, count(*) from table where photo_id In
(select photo_id from table where
tag = 'sky')
group by tag order by count(*)
В 4.0.* не пролезет, в >4.1, тормоз, тормоз, тормоз, completely unusable при нашей нагрузке 55K selets/ sec.
Vovchik
Маньяк
Сообщения: 2841
Зарегистрирован: 20 фев 2003, 09:15
Откуда: Vancouver

Сообщение Vovchik »

Marmot писал(а):
Vovchik писал(а):Вы хотите сказать что в Мускуле следущая контструкция не пролезет:


select tag, count(*) from table where photo_id In
(select photo_id from table where
tag = 'sky')
group by tag order by count(*)
В 4.0.* не пролезет, в >4.1, тормоз, тормоз, тормоз, completely unusable при нашей нагрузке 55K selets/ sec.
Нда, ну что можно сказать по такому поводу про Мускуль - A very low initail investment with a very high cost of total ownership.
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

Vovchik писал(а): Нда, ну что можно сказать по такому поводу про Мускуль - A very low initail investment with a very high cost of total ownership.
А вот не соглашусь, Oracle всё равно бы вышел дороже...
Аватара пользователя
aldep
Маньяк
Сообщения: 1593
Зарегистрирован: 18 фев 2003, 08:06
Откуда: Toronto
Контактная информация:

Сообщение aldep »

А Постгресс не пробовали, если уж такие жадные? Мож он порезвее будет.

А насчет того, что народ JOIN не делал, так может у вас вакансия так составлена была. Не много народу, из тех кто скажет разницу между PowerPC и Cell, знает еще и SQL.
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

aldep писал(а): А насчет того, что народ JOIN не делал, так может у вас вакансия так составлена была. Не много народу, из тех кто скажет разницу между PowerPC и Cell, знает еще и SQL.
А я разве сказал, что они не знали SQL, очень даже хорошо знали, но вот на идее join-a таблицы самой на себя дружно тормознули, я же написал как будто какой-то ментальный блок есть в этом вопросе, или в том как я его задавал...

А вообще-то, одно из наших неявных требований был широкий технический кругозор.
Как дополнение к опыту и знаниям...
Люди с заржавевшими мозгами у нас не приживаются...
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8565
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Re: Вопросы с интервью-2

Сообщение папа Карло »

Marmot писал(а):Ну ладно, раз пошла такая пьянка :) захотелось посмотреть реакцию каморочной общественнсти на мой вопрос, который вызвал наибольшую степень страдания у людей которым я его задавал.
Сразу хочу отметить, что мы нанимали только самых крутых, тех кто может делать работу 3-5 средних разработчиков, так что речь пойдёт не об опыте и знаниях а просто таки, как мне кажется ментальном блоке.
Короче, задачка:
Есть таблица описывающая фотографии и текстовые таги(метки) ассоциированные с ними, с двумя колонками photo_id, tag , вот примерно с таким содержимым

120 dead
100 sky
120 pig
100 sun
101 cat
113 cloud
101 kitten
113 sky
113 sun
234 sky
234 kitten
...

вопрос: написать select который возвращает какие таги и в каком количестве, наиболее часто встречаются в сочетании с каким либо конкретным тагом.
В нашем случае, например для тага sky ответ должен быть
sun 2
cloud 1
kitten 1

Ну и как водится, ограничение, не использовать sub-selects, т.к. в MySQL 4.0.* их нету :)
класический селфджойн с агрегаций....у меня тоже есть пару вопросов из этой области. что самое интересное, да, действительно, не многие знают как джойнить таблицу на себя,...
Аватара пользователя
Sheen
Маньяк
Сообщения: 2135
Зарегистрирован: 13 фев 2006, 21:16

Сообщение Sheen »

Ок, раз такая пьянка, у меня тоже пара вопросов из прошлых проектов:

* написать запрос возвращающий фейковым id, равный количеству возвращённых элементов (т.е. если какое-то условие возвращает 10 записей из 100, то этот id должен быть от 1 до 10)

* быстренько нарисовать структуры базы для хранения карты больного с анализами (анализы могут быть самые разные, например кровь и моча явно описываются разным количеством и типом записей. Как подсказка, у нас для этого использовалось 3 таблицы).

* ну и для самых продвинутых у нас был вопрос про физическую запись блоков данных в Oracle (т.е. что там происходит на уровне кластеров на диске).
Аватара пользователя
Marmot
Графоман
Сообщения: 39279
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Caulfeild
Контактная информация:

Сообщение Marmot »

Sheen писал(а):* ну и для самых продвинутых у нас был вопрос про физическую запись блоков данных в Oracle (т.е. что там происходит на уровне кластеров на диске).
Ну это сродни вопросу: в чём идеологическое отличие JVM и CLR bytecodes и чем они вызванны?
На супер узкого и глубокого специалиста :)
Аватара пользователя
Sheen
Маньяк
Сообщения: 2135
Зарегистрирован: 13 фев 2006, 21:16

Сообщение Sheen »

Marmot писал(а):На супер узкого и глубокого специалиста :)
У нас именно такой и был, и ему не терпелось показать свою узкость и глубокость. Зато когда он встретил другого такого же узкого и глубокого (про него я писал в другом топике) .....
Ответить