169 похожих чатов

Тест 1, Удалить дубли из хеша Уровень: middle Дан хеш %h. Необходимо

удалить из него лишние пары, у которых значения повторяются (т.е. только 1 такую пару оставить) наиболее эффективным методом. В хеше может быть миллион пар, так что приоритет – процессорное время.
Тест 2. Аксессоры

Уровень: middle

Напишите на Perl примитивный базовый класс MyApp::Accessor для использования в качестве базового класса для генерации аксессоров (методов которые сохраняют и отдают свойство объекта). Аксессоры должны работать настолько быстро, насколько это возможно в принципе. Какими технологиями/модулями, по вашему, лучше всего пользоваться в реальной разработке для создания аксессоров?

P.S. Accessor – это примитивная функция, которая служит для доступа к свойству объекта извне. Т.е. $obj->property – возвращает значение, а $obj->property($value) – устанавливает.
Тест 3. Обработка данных из БД

Уровень: middle

В базе данных есть большая таблица из 2х полей (id bigint primary key, data test), на порядки превышающая объем оперативной памяти. Нам требуется обработать её (т.е. прочитать все значения data). Как бы вы это организовали? Какие проблемы могут возникнуть при такой обработке?

PS: курсоры данная база не поддерживает.
Тест 4. Поправить утечку памяти

Уровень: middle

В данном примере память, естественно, утекает из-за перекрёстных ссылок.

while (1) {
my $a = {b => {}};
$a->{b}{a} = $a;
}

Как правильно инициализировать перекрестные ссылки, чтобы память из-за них не утекала?
Тест 5. Работа с памятью

Уровень: senior

while (1) {
my $a = {};
$a->{func} = sub {
$a->{cnt}++;
};
}

Что произойдет с памятью в этом примере и почему? Как исправить положение? Учтите, что это только искусственный пример - на практике $a чаще всего является долгоживущим объектом, который где-то хранится, и мы хотим иметь возможность звать на нём $a->{func}->() в других точках кода. Представьте, что вам надо дописать некий код в теле цикла так, чтобы можно было добавить $a->{func}->() в конце, и функция бы корректно вызвалась.
HTTP запрос

Пожалуйста, при выполнении этого задания не пользуйтесь LWP::* или AnyEvent, они не помогут во втором пункте задания, да и задание это нужно, чтобы посмотреть как вы умеете работать с сокетами, а не как это умеют работать модули.
Тест 6.1. Синхронный

Уровень: middle

Написать функцию http_get($host, $path, $query, $timeout), которая делает http запрос на адрес http://$host/$path?$query с таймаутом $timeout. Реализация http должна быть примитивной, то есть мы рассчитываем на ответ HTTP 200 OK с content-length, но при этом ответ надо вычитать до конца. $query передают в функцию хешом.
Тест 6.2. Асинхронный

Уровень: senior

А также написать асинхронную версию этой функции, которая (для простоты задания) отличается тем, что пока ждет ответа занимается заполнением какого-нить массива числами и выводит на экран сколько элементов успела добавить пока ждала ответа удаленного сервера. Программа должна оставаться в рамках 1 процесса и 1 потока (т.е. без fork и без threads).
Тест 7. Наследование

Уровень: middle

Есть следующие классы:

package AA;
sub func { print "AA\n" }

package BB;
use parent 'AA';
sub func { print "BB\n"; shift->SUPER::func(@_); }

package CC;
use parent 'AA';
sub func { print "CC\n"; shift->SUPER::func(@_); }

package DD;
use parent qw/BB CC/;
sub func { print "DD\n"; shift->SUPER::func(@_); }

В каких классах и в каком порядке будут вызваны функции func, если вызвать DD->func? По какому принципу мы должны построить наследование, если нам необходимо, чтобы при вызове DD->func, были вызваны функции во всех этих классах, и не меняя иерархию наследования?
Тест 8. Поиск в массиве

Уровень: middle

Дан массив из большого числа элементов (числа), отсортированный по возрастанию. Необходимо написать функцию, которая быстро найдет индекс элемента массива, значение по которому наиболее близко к переданному в аргументах функции числу. Используйте модуль Benchmark, чтобы оценить скорость написанного решения и оптимизировать его.

23 ответов

89 просмотров

Это не то которое в вакансии, если что

Задание такое себе: переизобретение event loop'а, MRO. Надеюсь, с ним массово справляется хотя бы 1 человек в месяц.

Warstone
Вы DBIx::Class пользуете?..

Мы где-то пользуем, где-то нет. Я бы не стал :)

Warstone
Поздравляю. Вы пользуетесь MRO 'C3'

Умение в C3 должно воспитываться с младенчества, это понятно, но на удивление пользовался DBIx::Class и без этого понимания. Но в целом очевидно, что все, которые не в курсе, уже неисправимы

Андрей Коновалов
Умение в C3 должно воспитываться с младенчества, э...

Я не понимаю - к чему вы ведете... Если вы пользуете Перл для веба и у вас Каталист или Моджо с эвент лупом внутри, то позвравляю - вам желательно знать как работает эвент луп. Чтобы у вас код не утекал. Если он у вас утекает, то ваш код не эффективен с точки зрения ресурсов. Каталист, да и Моджо вроде, зная что их будут использовать невежественные люди имеют режим принудительной перезагрузки после Х запросов. Это тормозит работу сервера, но позволяет не думать. Если вы используете наследование, то вам надо знать как работает множественное наследование в Перле. А MRO - это просто настройка этого наследования. И добровольный отказ от знания... Ну это как приехать в Диснейленд и весь день у входа на качельках просидеть. Можно? Можно.

Алексей-Галаев Автор вопроса
Warstone
Я не понимаю - к чему вы ведете... Если вы пользуе...

У каталиста нет своего сервера для прода. Мы используем апач, которы киляет чилдов при достижении лимита и создаёт новых.

Алексей-Галаев Автор вопроса
Warstone
path-through

Не слышал такого. Мы пробовали стармана, не зашло. Я пытался подружить каталист с nginx unit, но тогда они не дружили.

Алексей Галаев
Не слышал такого. Мы пробовали стармана, не зашло....

У нас раньше старман был... Сейчас движок от нашего UE пользуем.

Warstone
Я не понимаю - к чему вы ведете... Если вы пользуе...

Я веду к тому, что задание неадекватно: большинство перловиков не используют MRO и не пишут event loop'ы. И это не значит , что "не понимают, как event loop работает". Это какая-то уловка нехорошая: "если ты не написал свой event loop, то ты не понимаешь..." А с почему ли? Логика вышла из чата? А "изучить" MRO можно, просто прочитав, что это такое. Тем не менее, это не значит, что люди, которые знают, что такое MRO - особенные и как-то особенно подходят. Всё зависит от конкретных условий: если знания применяются, то они - инструмент, если нет - это в лучшем случае отличный повод попонтоваться. Я тогда пишу на ассемблере прям в машинных кодах местами, самостоятельно настраивая при этом переходя в защищённый решим и настраивая GDT, LDT и IDT.. А что, писал же 22 года назад - значит, могу. Мои понты жирнее Ваших, сэр!

Стикер

А если CC и BB местами внутри qw поменять -- иерархия наследования изменится?

Anton Petrusevich
удивительно, но да

Иерархия ж вроде такая же остаётся? Или я в глаза долблюсь

Sergei Zhmylove
Иерархия ж вроде такая же остаётся? Или я в глаза ...

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

Anton Petrusevich
по дефолту методы в перле ищутся вглубь, а при мно...

Ну очевидно в ответ они что-то про с3 хотят увидеть

Андрей Коновалов
Я веду к тому, что задание неадекватно: большинств...

Каждое задание в нашем тестовом - это то с чем придется столкнуться работая у нас. Оно не просто так такое.

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
TCodePointer = record cp: CodePointer; name: string; cnt: Integer; next: TCodePointerArray; // этот тип ещё неизвестен end; TCodePointerArray = array of ...
notme
9
Привет ) есть такой кусок кода, он считывает ini файл. my $conf = Config::IniFiles->new( -file => $ini_file ); if (!$conf) { $self->my_die('cannot_read_cfg', ...
Kolya lastname
7
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
13
why html and css is not standard? i mean why different browser has their own engine and styles and how them work to show result to end user?
Mr Thieves
10
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
Карта сайта