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

63 просмотра

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

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

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

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

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

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

На днях задумался над будущей кроссплатформенностью. Пришел к выводу, что будущее за WEB технологиями. Например Skia. Вспомнил тут Петром приводилась информация о проекте Fr...
Kirill Filippenok
20
посоны, а барьер - это примитив синхронизации или что? встречаю упоминания что это примитив
Киану Ривз
13
👋 Hey Team, Interested in the prospect of adding a Junior Developer to your crew for *FREE*? Yes, it's totally on us! We've partnered with a training center to offer a progr...
Tomás Leonangeli
1
Есть задача. Распарсить байт-строку из потока, чтобы получился plain текст. По формуле вычисляется количество байт в выборке. В этой выборке содержатся данные, которые состоят...
Basil Backend
9
меня в школе заставляют учить фронтенд, в полицию можно жаловаться?
владик
10
А замеры синтетические делал? Например альфаблендинк с масштабированием кто всех рвет? (подозреваю D2D)
Александр (Rouse_) Багель
13
Всем привет! А что, в Odoo 17 отменили для модели _log_access = False ? Ругается Оду при доступе к такой модели. Стоит добавить в модель write_date = fields.Datetime('Last M...
Max Lit
3
Есть резидентный обработчик прерываний 09h под DOS. Пока он ничего не делает. После запуска программы выяснилось, что на клавиши навигации (стрелок вверх и вниз) новый обраб...
Крутой Пацантре
2
Много вопросов задаю в последнее время, но вот ещё один... julia> @time +(1, 2) |> typeof 0.000001 seconds Int64 julia> @time +(1, 2.) |> typeof 0.000001 seconds Float64 ...
Александр
2
I don't understand why some people get surprised when they find someone using eclipse, rather than Intellij Idea. How's that surprising? (if it is surprising for you, at all)
required optional
7
Карта сайта