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 ответов

152 просмотра

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

Задание такое себе: переизобретение 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 хотят увидеть

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

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта