Привет, Хабр!
Хотел бы поделиться небольшим сборником практических задач, которые могут встречаться на собеседовании.
На просторах хабра и сети имеется множество сборников вопросов для подготовки к устной части собеседования, а вот сборника практических задач, который было бы удобно использовать для подготовки — не нашлось.
Для старта достаточно клонировать сборник себе и начать описывать реализацию, все оставльное уже есть. Есть готовые входящие данные для задач, есть FB класс, который позволяет уйти от var_dump() или print_r(). Все есть, поставил и сразу можно выполнять задачи — без лишней суеты. Надеюсь, кому-нибудь это окажется нужным.
Как пользоваться?
Для удобства, задачи представилены несколькими интерфейсами папка на Github. Возьмем интерфейс ITestSortInterface (/src/Training) в качестве иллюстрации. Из названия видно, что в нем лежат задачи по сортировке:
Для начала выполнения заданий необходимо создать класс имплементирующий желаемые интерфейсы. Я назвал свой класс Test:
Тут используются два вспомогательных класса \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. Присылайте свои задачи, наиболее интересные будут опубликованы в сборнике.
Сборник на Github
P.S.
Сборник содержит, только простые задачи, которые встречаются в рамках собеседования. По этой причине некоторые задачи содержат формулировки вроде: «Отсортировать одномерный массив своими силами» Да-да, есть функция sort(), но тут важен контекст собеседования. Если Вам ставят задачу сформулированную именно так и вы на собеседовании, то вероятнее всего, такая задача преследует единственную цель, а именно оценить вашу алгоритмическую подготовку. Надеюсь, это понятно.
Хотел бы поделиться небольшим сборником практических задач, которые могут встречаться на собеседовании.
На просторах хабра и сети имеется множество сборников вопросов для подготовки к устной части собеседования, а вот сборника практических задач, который было бы удобно использовать для подготовки — не нашлось.
Для старта достаточно клонировать сборник себе и начать описывать реализацию, все оставльное уже есть. Есть готовые входящие данные для задач, есть FB класс, который позволяет уйти от var_dump() или print_r(). Все есть, поставил и сразу можно выполнять задачи — без лишней суеты. Надеюсь, кому-нибудь это окажется нужным.
Как пользоваться?
Для удобства, задачи представилены несколькими интерфейсами папка на Github. Возьмем интерфейс ITestSortInterface (/src/Training) в качестве иллюстрации. Из названия видно, что в нем лежат задачи по сортировке:
<?php
namespace Training;
interface ITestSortInterface
{
/**
* Отсортировать одномерный массив своими силами
*
* На входе array(2,5,3,5,6,7,8,9,25,24,18,26,27,28,29,30,31)
* На выходе отсортированный массив
*/
public function testSort1($array);
/**
* Отсортировать двумерный массив пришедший из БД
*
* На входе 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);
/**
* Отсортировать числа на диагонали квадратной матрицы
* На входе квадратная матрица
* 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:
<?php
// Подгрузка файлов
require_once('loader.php');
use Training\ITestSortInterface;
use Training\Data;
// Класс Test реализует интерфейс ITestSortInterface
class Test implements ITestSortInterface
{
/**
* Отсортировать одномерный массив своими силами
*
* На входе array(2,5,3,5,6,7,8,9,25,24,18,26,27,28,29,30,31)
* На выходе отсортированный массив
*/
public function testSort1($array)
{
// Условие окончания рекурсии
if (!$lenght = count($array)) return $array;
// Обнуляем
$x = $y = array();
// Те, что меньше первого элемента в одну сторону, те что больше в другую.
// А что-бы цыкл не ушел в бесконечность начинаем его с $i = 1
for ($i = 1; $i < $lenght; $i++) {
if ($array[$i] > $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. Присылайте свои задачи, наиболее интересные будут опубликованы в сборнике.
Сборник на Github
P.S.
Сборник содержит, только простые задачи, которые встречаются в рамках собеседования. По этой причине некоторые задачи содержат формулировки вроде: «Отсортировать одномерный массив своими силами» Да-да, есть функция sort(), но тут важен контекст собеседования. Если Вам ставят задачу сформулированную именно так и вы на собеседовании, то вероятнее всего, такая задача преследует единственную цель, а именно оценить вашу алгоритмическую подготовку. Надеюсь, это понятно.