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. Как наиболее оптимально организовать сервис по коллекционированию котиков?