function recur($i)
{
if ($i <= 100) {
print $i;
recur(++$i);
print $i;
}
}
recur(99);
99
100
101
100
namespace Demo;
use DB;
class OrdersReport
{
public function getOrdersInfo($startDate, $endDate)
{
$orders = $this->queryDBForOrders($startDate, $endDate);
return $this->format($orders);
}
protected function queryDBForOrders($startDate, $endDate)
{
return DB::table('orders')->whereBetween('created_at', [$startDate, $endDate])->get();
}
protected function format($orders)
{
return '<h1>Orders: ' . $orders . '</h1>';
}
}
interface workerInterface
{
public function work();
public function sleep();
}
class HumanWorker implements workerInterface
{
public function work()
{
var_dump('works');
}
public function sleep()
{
var_dump('sleep');
}
}
class RobotWorker implements workerInterface
{
public function work()
{
var_dump('works');
}
public function sleep()
{
// No need
}
}
Условие: Функция принимает на вход массив чисел, и число Х, на выход отдает два индекса, числа по которым в сумме дают Х. Если таких нет - то -1, -1.
Пример: Дано: [1, 7, 3] 4 Результат: [0, 2]
$array = [1, 7, 3];
function ($array, $find) {
$hashmap = [];
foreach ($array as $index => $value) {
$hash = $find - $value;
if ($hashmap[$hash] ){
return [$hashmap[$hash], $index]
}
$hashmap[$value] = $index;
}
}
Необходимо использовать ключ в кеш и проверять занят ли скрипт в текущее время
var_dump((int) ('2test') . (int) ('test') );
var_dump((int) ('test2') . (int) ('test') );
20
00
1 << 3
$a = [1,2,3];
$b = [2,3,4];
foreach ($a as &$value)
++$value;
foreach ($b as $value)
++$value;
var_dump($a);
var_dump($b);
Через неделю Вашего знакомства с проектом, маркетинговый отдел запустил довольно успешную кампанию и время загрузки сайта за сутки увеличилось с 0.5c до 15с. Как вы будете решать проблему?
- Посмотрю на вывод SHOW PROCESSLIST; в консоли MySQL на кол-во и время выполнения запросов.
- Хорошо. Допустим, там постоянно висит 2-3 различных запроса с большим временем выполнения. Ваши действия?
- Оптимизация базы, индексы, объединения, запросы
- Ок, а если много различных запросов с небольшим временем выполнения?
- Необходимо использовать кэширование запросов
- Ок, допилили кэширование, но проблема все же осталась
- Некорректная работа кэширующего механизма?
- Допустим. Давайте немного скорректируем условия - вы открываете консоль MySQL и видите там обычное кол-во запросов. В чем ещё может быть проблема?
- Долгие запросы к сторонним ресурсам, проблемы на стороне выполнения скрипта.
class Foo {
public $test = NULL;
}
$foo = new Foo;
$foo->test = '12345678';
$bar = $foo;
$bar->test = '87654321';
echo $foo->test;
Переменной $bar присваивается ссылка на объект $foo поэтому ответ будет 87654321
$i = 10;
$i += ++$i + $i + $i++;
print $i;
12 + (11 + 11 + 11) 4 1 2 3 Порядок выполнения операций в данном выражении не определен явно. Результат может отличаться в зависимости от конкретной реализации и оптимизации компилятора.
10. Найти минимальное расстояние (разность) между произвольными двумя числами из массива (ниже аналоги)
function distClosestNumbers($data) {
// try to implement it!
}
$array = [3, 9, 50, 15, 99, 7, 98, 65];
$result = distClosestNumbers($array);
echo $result;
Решение в лоб — прямой перебор вложенным массивом, но его сложность — O(n²). Оптимальное решение — сначала отсортировать массив по возрастанию или убыванию, потом линейно пройтись и найти минимальное расстояние между двумя соседними числами. В этом случае временная сложность алгоритма — O(n log n).
11. Какие есть способы ограничения поступающих запросов на покупку 3 товаров, если хотят купить одновременно 50 пользователей
Ограничение на уровне приложения:
- Очереди (Queues)
- Блокировки (Locks)
Ограничение на уровне БД:
- Транзакции (Transactions)
- Хранимые процедуры (Stored Procedures)
Ограничение на уровне приложения и БД:
- Кэширование (Caching)