1. Какие есть проблемы у этого кода?
<?php
namespace vBulletin\Search;
class Search {
public static function doSearch(): void {
if ($_REQUEST['searchid']){
$_REQUEST['do'] = 'showresults';
}elseif(!empty($_REQUEST['q'])){
$_REQUEST['do'] = 'process';
$_REQUEST['query'] = &$_REQUEST['q'];
}
$db = new \PDO('mysql:dbname=vbforum;host=127.0.0.1', 'forum', '123456');
if ($_REQUEST['do'] == 'process') {
$sth = $db->prepare('SELECT * FROM vb_post WHERE text like?');
$sth->execute(array($_REQUEST['query']));
$result = $sth->fetchAll();
self::render_search_results($result);
$file = fopen('/var/www/search_log. txt', 'a+');
fwrite($file, $_REQUEST['query'] . "\n");
} elseif ($_REQUEST['do'] == 'showresults'){
$sth = $db->prepare('SELECT * FROM vb_searchresult WHERE searchid = ?');
$sth->execute(array($_REQUEST['searchid']));
$result = $sth->fetchAll();
self::render_search_results($result);
}
else {
echo "<h2>Search in forum</h2><form><input name='q'></form>";
}
}
public static function render_search_results($result){
global $render;
foreach($result as $row){
if ($row['forumid'] != 5){
$render->render_searh_result($row);
}
}
}
}
2. На сайте на разных страницах в разных местах есть ссылки на мобильное приложение в AppStore. Это приложение отображает данные, которые получает от API сайта. Требуется после установки приложения определить с какого именно места на сайте произошла установка приложения. Опишите как вы это реализуете.
3. У вас есть комментарии, которые хранятся в БД MySQL или PostgreSQL (любая на выбор). Требуется сделать их древовидными (дать возможность отвечать на комментарий). Также требуется иметь возможность удалить любой комментарий и вывести комментарии постранично. Как вы это организуете?
4. Пользователь совершает единовременную покупку золотых медиаторов (внутренней валюты сайта) через платежную систему Vindicia. Иногда Vindicia слишком долго отвечает, наш php-скрипт умирает, пользователь остается без золотых медиаторов и грустит. Как сделать, чтобы пользователь был доволен и всегда гарантировано получал медиаторы после покупки?
5. У вас есть 20 млн пользователей, которые составляют списки любимых котиков. Всего они составили 2 млн. списков, которые содержать суммарно 150 млн. записей о котиках. Каждую секунду они вставляют или удаляют 100 котиков в списки. Также к этим данным бывают 3 вида запросов на чтение (200 запросов в секунду суммарно):
- получить неотсортированный список всех любимых котиков определенного пользователя
- получить список последних добавленных котиков за последние 15 минут.
- подсчитать сколько пользователей добавили в списки конкретного котика.
У вас есть один сервер с 16Gb RAM, CPU 8 ядер 2,4 GHz. Как наиболее оптимально организовать сервис по коллекционированию котиков?


