Задачка при собеседовании

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
systemiv
Сообщения: 360
Зарегистрирован: 2011.06.26, 22:55
Откуда: Липецк
Контактная информация:

Задачка при собеседовании

Сообщение systemiv »

Завтра собеседование на работу, и я усиленно читаю хабр, где люди делятся своим опытом при собеседованиии.
Наткнулся на такую задачку, и не допру как её решить=)
Задача: у меня есть banner.php, пусть он выводит статичное изображение, какой-то банер. Мы включаем его на страницу просто <img src="/banner.php"/>

Мне нужно знать, сколько раз мы его показали. Прошу написать код.

Если кандидат предлагает какое-то простое решение, подсчитать хиты в логах апача, я усложняю условия, например говрю «логи выключены», или «давайте использовать базу», или «а сколько уникальных?».
Хотел написать JS который ловит все изображения с таким атрибутом и значением, но потом перечитал, и понял что нужно написать именно banner.php.
Сейчас идея, реализовать счётчик в скрипте, где при каждом вызове увеличивается значение.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Задачка при собеседовании

Сообщение slavcodev »

можно, как вариант переименовать banner.php в count.php
Жду Yii 3!
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Задачка при собеседовании

Сообщение esche »

Очень простой пример, который можно "прокачивать" фишками - разные ip-шники, добавить группировку в сессии, фиксировать referer

Код: Выделить всё

<?php
mysql_connect(...); mysql_select_db(..);
mysql_query ('update counter set count=count+1');
header ('content-type:image/gif');
readfile('1.gif'); 
* можно в файл писать.. с lock-ом между чтением и записью
...
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Задачка при собеседовании

Сообщение Svyatov »

esche писал(а):Очень простой пример, который можно "прокачивать" фишками - разные ip-шники, добавить группировку в сессии, фиксировать referer

Код: Выделить всё

<?php
mysql_connect(...); mysql_select_db(..);
mysql_query ('update counter set count=count+1');
header ('content-type:image/gif');
readfile('1.gif'); 
* можно в файл писать.. с lock-ом между чтением и записью
Отдавать картинку через php, т.е. через апач, т.е. запуская каждый раз новый процесс, считывая весь файла с диска и тратя кучу оперативки - это хорошее решение? :)

На самом деле вопрос на знание технологий. Вот такие решения - это самая база :)

Вариант с хорошим запасом прочности: использовать nginx и заголовок "X-Accel-Redirect", таким образом в скрипте мы можем вести учет (MySQL для начала, memcache или redis, или что-то такое в дальнейшем), а сам файл отдавать nginx'ом; дальше из этого скрипта можно делать демона. Писать код тут бессмысленно, надо объяснять и показывать понимание.

А вообще к собеседованиям можно особо не готовиться, все равно спросят что-то совсем другое :)
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: Задачка при собеседовании

Сообщение esche »

Привёл решение работающее.. хорошее или не хорошее - смотреть применительно к ситуации. Если "дано": shared на Apache и 100 человек в день, то переезд на VPS с nginx и Redis ради картинки не совсем оправдан...
* через php != через апач
ps. Думаю, вопрос не только на знание технологий, но и на умение соображать и применять их.. точнее - находить пути решения конкретной изменяющейся задачи...
...
Аватара пользователя
alexk984
Сообщения: 433
Зарегистрирован: 2010.10.21, 15:03
Контактная информация:

Re: Задачка при собеседовании

Сообщение alexk984 »

esche писал(а):Очень простой пример, который можно "прокачивать" фишками - разные ip-шники, добавить группировку в сессии, фиксировать referer

Код: Выделить всё

<?php
mysql_connect(...); mysql_select_db(..);
mysql_query ('update counter set count=count+1');
header ('content-type:image/gif');
readfile('1.gif'); 
* можно в файл писать.. с lock-ом между чтением и записью
+1 это то решение, которое ждут от вас на собеседовании, задача на понимание основ.
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Задачка при собеседовании

Сообщение Ekstazi »

Как-то на практике делал так - вышло очень медленно и тормознуто. Пересмотрев свои взгляды написал скрипт банерокрутилки на js с прогоном через google analitycs :)
Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Задачка при собеседовании

Сообщение Svyatov »

alexk984 писал(а):
esche писал(а):Очень простой пример, который можно "прокачивать" фишками - разные ip-шники, добавить группировку в сессии, фиксировать referer

Код: Выделить всё

<?php
mysql_connect(...); mysql_select_db(..);
mysql_query ('update counter set count=count+1');
header ('content-type:image/gif');
readfile('1.gif'); 
* можно в файл писать.. с lock-ом между чтением и записью
+1 это то решение, которое ждут от вас на собеседовании, задача на понимание основ.
Я бы программиста, который предложил такое решение на работу не взял :)
Ответить