Сборник практических задач PHP для подготовки к собеседованию
Хотел бы поделиться небольшим сборником практических задач, которые могут встречаться на собеседовании.
На просторах хабра и сети имеется множество сборников вопросов для подготовки к устной части собеседования, а вот сборника практических задач, который было бы удобно использовать для подготовки — не нашлось.
Для старта достаточно клонировать сборник себе и начать описывать реализацию, все оставльное уже есть. Есть готовые входящие данные для задач, есть FB класс, который позволяет уйти от var_dump() или print_r(). Все есть, поставил и сразу можно выполнять задачи — без лишней суеты. Надеюсь, кому-нибудь это окажется нужным.
Как пользоваться?
Для удобства, задачи представилены несколькими интерфейсами папка на Github. Возьмем интерфейс ITestSortInterface (/src/Training) в качестве иллюстрации. Из названия видно, что в нем лежат задачи по сортировке:
array('price'=>10,'count'=>2), * '2'=>array('price'=>5,'count'=>5), * '3'=>array('price'=>8,'count'=>5), * '4'=>array('price'=>12,'count'=>4), * '5'=>array('price'=>8,'count'=>4), * ) * На выходе отсортированный массив * по 'price' DESC и во вторую очередь по 'count' DESC * array( * '2'=>array('price'=>5,'count'=>2), * '5'=>array('price'=>8,'count'=>4), * '3'=>array('price'=>8,'count'=>5), * '1'=>array('price'=>10,'count'=>5), * '4'=>array('price'=>12,'count'=>4), * ) * */ public function testSort2($array); /** * Отсортировать числа на диагонали квадратной матрицы * На входе квадратная матрица * array( * array(10,5,3,6), * array(8,2,11,13), * array(9,25,30,18), * array(34,37,38,24) * ) * * На выходе должен быть массив * array( * array(2,5,3,6), * array(8,10,11,13), * array(9,25,24,18), * array(34,37,38,30) * ) * */ public function testSort3($array); >
Для начала выполнения заданий необходимо создать класс имплементирующий желаемые интерфейсы. Я назвал свой класс Test:
$array[0]) $x[] = $array[$i]; else $y[] = $array[$i]; > return array_merge($this->testSort1($y), array($array[0]), $this->testSort1($x)); > /** * Отсортировать двумерный массив пришедший из БД * * На входе array( * '1'=>array('price'=>10,'count'=>2), * '2'=>array('price'=>5,'count'=>5), * '3'=>array('price'=>8,'count'=>5), * '4'=>array('price'=>12,'count'=>4), * '5'=>array('price'=>8,'count'=>4), * ) * На выходе отсортированный массив * по 'price' DESC и во вторую очередь по 'count' DESC * array( * '2'=>array('price'=>5,'count'=>2), * '5'=>array('price'=>8,'count'=>4), * '3'=>array('price'=>8,'count'=>5), * '1'=>array('price'=>10,'count'=>5), * '4'=>array('price'=>12,'count'=>4), * ) * */ public function testSort2($array) < // TODO: Implement testSort2() method. >/** * Отсортировать числа на диагонали квадратной матрицы * На входе квадратная матрица * array( * array(10,5,3,6), * array(8,2,11,13), * array(9,25,30,18), * array(34,37,38,24) * ) * * На выходе должен быть массив * array( * array(2,5,3,6), * array(8,10,11,13), * array(9,25,24,18), * array(34,37,38,30) * ) * */ public function testSort3($array) < // TODO: Implement testSort3() method. >> $test = new Test(); /** * Тут подробнее. * \FireDog\FB::info() - выводит дебаг инфу в консоль сервера * Data::getData(Data::ARR_SIMPL_INT) - предоставляет готовые данные для заданий */ \FireDog\FB::info($test->testSort1(Data::getData(Data::ARR_SIMPL_INT)));
Тут используются два вспомогательных класса \FireDog\FB и Training\Data. ( Позвольте небольшую ремарку: Использование FB или Data не обязательно — это вспомогательные классы для удобства. Однако, консоль браузера представляется мне более удобной альтернативой var_dump() или print_r() )
Первый выводит дебаг инфу в консоль браузера:
Для браузера потребуется установка плагина firephp. Тут плагин для Хрома.
Второй класс Data, хранит готовые данные для заданий. Для задания $test->testSort1() нам нужен массив array(2,5,3,5,6,7,8,9,25,24,18,26,27,28,29,30,31) его то мы и получаем Data::getData(Data::ARR_SIMPL_INT)
Сборник будет пополняться и его можно использовать не только для подготовки к собеседованию, но и просто для тренировки навыков программирования на PHP. Присылайте свои задачи, наиболее интересные будут опубликованы в сборнике.
P.S.
Сборник содержит, только простые задачи, которые встречаются в рамках собеседования. По этой причине некоторые задачи содержат формулировки вроде: «Отсортировать одномерный массив своими силами» Да-да, есть функция sort(), но тут важен контекст собеседования. Если Вам ставят задачу сформулированную именно так и вы на собеседовании, то вероятнее всего, такая задача преследует единственную цель, а именно оценить вашу алгоритмическую подготовку. Надеюсь, это понятно.