декабря 21, 2025
14 мин. чтения

Вопросы для собеседования на должность старшего системного администратора: Полное руководство

interview
career-advice
job-search
Вопросы для собеседования на должность старшего системного администратора: Полное руководство
MB

Milad Bonakdar

Автор

Освойте продвинутые концепции системного администрирования с помощью исчерпывающих вопросов для собеседования, охватывающих виртуализацию, автоматизацию, аварийное восстановление, безопасность и корпоративную ИТ-инфраструктуру для старших системных администраторов.


Введение

Старшие системные администраторы проектируют, внедряют и управляют сложной ИТ-инфраструктурой, руководят командами и обеспечивают надежность и безопасность на уровне предприятия. Эта роль требует глубоких технических знаний, навыков автоматизации и стратегического мышления.

В этом руководстве рассматриваются важные вопросы для собеседования старшего системного администратора, с упором на продвинутые концепции и корпоративные решения.


Виртуализация и облако

1. Объясните разницу между гипервизорами типа 1 и типа 2.

Ответ:

Тип 1 (Bare Metal):

  • Работает непосредственно на аппаратном обеспечении
  • Лучшая производительность
  • Примеры: VMware ESXi, Hyper-V, KVM

Тип 2 (Hosted):

  • Работает на хост-ОС
  • Легче настроить
  • Примеры: VMware Workstation, VirtualBox
Loading diagram...

Управление KVM:

# Список ВМ
virsh list --all

# Запуск ВМ
virsh start vm-name

# Создание ВМ из XML
virsh define vm-config.xml

# Клонирование ВМ
virt-clone --original vm1 --name vm2 --auto-clone

# Выделение ресурсов ВМ
virsh setmem vm-name 4G
virsh setvcpus vm-name 4

Распространенность: Часто
Сложность: Средняя


2. Как вы проектируете кластеры высокой доступности?

Ответ: Высокая доступность (HA) обеспечивает доступность сервисов, несмотря на сбои.

Типы кластеров:

Loading diagram...

Кластер Active-Passive:

  • Один узел активен, остальные в режиме ожидания
  • Автоматический переход на резервный узел в случае сбоя
  • Более низкое использование ресурсов

Кластер Active-Active:

  • Все узлы обслуживают трафик
  • Лучшее использование ресурсов
  • Более сложная конфигурация

Настройка Pacemaker + Corosync:

# Установка кластерного ПО
sudo apt install pacemaker corosync pcs

# Настройка аутентификации кластера
sudo passwd hacluster
sudo pcs cluster auth node1 node2 -u hacluster

# Создание кластера
sudo pcs cluster setup --name mycluster node1 node2

# Запуск кластера
sudo pcs cluster start --all
sudo pcs cluster enable --all

# Отключение STONITH для тестирования (включить в продакшене)
sudo pcs property set stonith-enabled=false

# Создание ресурса виртуального IP
sudo pcs resource create virtual_ip ocf:heartbeat:IPaddr2 \
    ip=192.168.1.100 cidr_netmask=24 \
    op monitor interval=30s

# Создание ресурса веб-сервиса
sudo pcs resource create webserver ocf:heartbeat:apache \
    configfile=/etc/apache2/apache2.conf \
    statusurl="http://localhost/server-status" \
    op monitor interval=1min

# Группировка ресурсов
sudo pcs resource group add webgroup virtual_ip webserver

# Установка ограничений ресурсов
sudo pcs constraint colocation add webserver with virtual_ip INFINITY
sudo pcs constraint order virtual_ip then webserver

# Проверка статуса кластера
sudo pcs status
sudo crm_mon -1

Keepalived (простой HA):

# Установка keepalived
sudo apt install keepalived

# Настройка на Master
sudo vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    
    authentication {
        auth_type PASS
        auth_pass secret123
    }
    
    virtual_ipaddress {
        192.168.1.100/24
    }
    
    track_script {
        chk_nginx
    }
}

vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx"
    interval 2
    weight 2
}

Репликация базы данных (MySQL):

# Конфигурация Master
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = production

# Создание пользователя для репликации
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

# Получение статуса master
SHOW MASTER STATUS;

# Конфигурация Slave
[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin
log_bin = /var/log/mysql/mysql-bin.log
read_only = 1

# Настройка slave
CHANGE MASTER TO
    MASTER_HOST='master-ip',
    MASTER_USER='repl',
    MASTER_PASSWORD='password',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=107;

START SLAVE;
SHOW SLAVE STATUS\G

Проверки работоспособности:

#!/bin/bash
# Скрипт проверки работоспособности сервиса

check_service() {
    if systemctl is-active --quiet $1; then
        return 0
    else
        return 1
    fi
}

if ! check_service nginx; then
    echo "Nginx не работает, попытка перезапуска"
    systemctl restart nginx
    sleep 5
    if ! check_service nginx; then
        echo "Не удалось перезапустить Nginx, инициируется переключение на резервный узел"
        # Инициировать переключение на резервный узел
        pcs resource move webgroup node2
    fi
fi

Тестирование переключения на резервный узел:

# Имитация сбоя узла
sudo pcs cluster stop node1

# Проверка переключения
sudo pcs status
ping 192.168.1.100

# Восстановление узла
sudo pcs cluster start node1

Распространенность: Часто
Сложность: Сложная


Автоматизация и скрипты

3. Как вы автоматизируете задачи системного администрирования?

Ответ: Автоматизация уменьшает ручной труд и повышает согласованность:

Bash Scripting:

#!/bin/bash
# Автоматическая проверка работоспособности сервера

HOSTNAME=$(hostname)
DATE=$(date '+%Y-%m-%d %H:%M:%S')
REPORT="/var/log/health-check.log"

echo "=== Проверка работоспособности: $DATE ===" >> $REPORT

# Загрузка CPU
LOAD=$(uptime | awk -F'load average:' '{print $2}')
echo "Средняя загрузка: $LOAD" >> $REPORT

# Использование памяти
MEM=$(free -h | grep Mem | awk '{print "Использовано: "$3" / "$2}')
echo "Память: $MEM" >> $REPORT

# Использование диска
echo "Использование диска:" >> $REPORT
df -h | grep -vE '^Filesystem|tmpfs|cdrom' >> $REPORT

# Сбойные сервисы
FAILED=$(systemctl --failed --no-pager)
if [ -n "$FAILED" ]; then
    echo "Сбойные сервисы:" >> $REPORT
    echo "$FAILED" >> $REPORT
fi

# Отправка оповещения в случае критической ситуации
DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 90 ]; then
    echo "КРИТИЧНО: Использование диска выше 90%" | mail -s "Предупреждение: $HOSTNAME" [email protected]
fi

Ansible Playbook:

---
- name: Настройка веб-серверов
  hosts: webservers
  become: yes
  tasks:
    - name: Установка пакетов
      apt:
        name:
          - nginx
          - python3
          - git
        state: present
        update_cache: yes
    
    - name: Копирование конфигурации nginx
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: перезапуск nginx
    
    - name: Обеспечение работы nginx
      service:
        name: nginx
        state: started
        enabled: yes
  
  handlers:
    - name: перезапуск nginx
      service:
        name: nginx
        state: restarted

Распространенность: Очень часто
Сложность: Средне-сложная


4. Как вы управляете конфигурацией на сотнях серверов?

Ответ: Управление конфигурацией в масштабе требует автоматизации и согласованности.

Сравнение инструментов:

ИнструментТипЯзыкАгентСложность
AnsiblePushYAMLБез агентаНизкая
PuppetPullRuby DSLАгентВысокая
ChefPullRubyАгентВысокая
SaltStackPush/PullYAMLАгент/Без агентаСредняя

Ansible в масштабе:

# inventory/production
[webservers]
web[01:20].company.com

[databases]
db[01:05].company.com

[loadbalancers]
lb[01:02].company.com

[webservers: vars]
ansible_user=deploy
ansible_become=yes
# playbooks/site.yml
---
- name: Настройка всех серверов
  hosts: all
  roles:
    - common
    - security
    - monitoring

- name: Настройка веб-серверов
  hosts: webservers
  roles:
    - nginx
    - php
    - application
  
- name: Настройка баз данных
  hosts: databases
  roles:
    - mysql
    - backup
# roles/common/tasks/main.yml
---
- name: Обновление всех пакетов
  apt:
    upgrade: dist
    update_cache: yes
    cache_valid_time: 3600

- name: Установка общих пакетов
  apt:
    name:
      - vim
      - htop
      - curl
      - git
    state: present

- name: Настройка NTP
  template:
    src: ntp.conf.j2
    dest: /etc/ntp.conf
  notify: перезапуск ntp

- name: Обеспечение работы сервисов
  service:
    name: "{{ item }}"
    state: started
    enabled: yes
  loop:
    - ntp
    - rsyslog

Динамический inventory:

#!/usr/bin/env python3
# dynamic_inventory.py - AWS EC2 dynamic inventory

import json
import boto3

def get_inventory():
    ec2 = boto3.client('ec2')
    response = ec2.describe_instances()
    
    inventory = {
        '_meta': {'hostvars': {}},
        'all': {'hosts': []}
    }
    
    for reservation in response['Reservations']:
        for instance in reservation['Instances']:
            if instance['State']['Name'] != 'running':
                continue
            
            hostname = instance['PrivateIpAddress']
            inventory['all']['hosts'].append(hostname)
            
            # Group by tags
            for tag in instance.get('Tags', []):
                if tag['Key'] == 'Role':
                    role = tag['Value']
                    if role not in inventory:
                        inventory[role] = {'hosts': []}
                    inventory[role]['hosts'].append(hostname)
    
    return inventory

if __name__ == '__main__':
    print(json.dumps(get_inventory(), indent=2))

Лучшие практики Infrastructure as Code:

1. Контроль версий:

# Git workflow
git checkout -b feature/update-nginx-config
# Внесение изменений
git add .
git commit -m "Обновление конфигурации SSL nginx"
git push origin feature/update-nginx-config
# Создание pull request для проверки

2. Тестирование:

# Проверка синтаксиса playbook
ansible-playbook --syntax-check site.yml

# Dry run
ansible-playbook site.yml --check

# Запуск сначала на staging
ansible-playbook -i inventory/staging site.yml

# Развертывание в production
ansible-playbook -i inventory/production site.yml

3. Управление секретами:

# Ansible Vault
ansible-vault create secrets.yml
ansible-vault encrypt vars/passwords.yml
ansible-playbook site.yml --ask-vault-pass

# Или использование файла паролей
ansible-playbook site.yml --vault-password-file ~/.vault_pass

4. Идемпотентность:

# Плохо - не идемпотентно
- name: Добавление строки в файл
  shell: echo "config=value" >> /etc/app.conf

# Хорошо - идемпотентно
- name: Обеспечение существования строки конфигурации
  lineinfile:
    path: /etc/app.conf
    line: "config=value"
    state: present

Параллельное выполнение:

# Запуск на 10 хостах одновременно
ansible-playbook -i inventory site.yml --forks 10

# Ограничение конкретными хостами
ansible-playbook site.yml --limit webservers

# Запуск конкретных тегов
ansible-playbook site.yml --tags "configuration,deploy"

Распространенность: Часто
Сложность: Средне-сложная


Аварийное восстановление

5. Как вы проектируете план аварийного восстановления?

Ответ: Комплексная стратегия DR:

Ключевые метрики:

  • RTO (Recovery Time Objective): Максимально допустимое время простоя
  • RPO (Recovery Point Objective): Максимально допустимая потеря данных

Стратегия DR:

1. Стратегия резервного копирования:

#!/bin/bash
# Автоматическое резервное копирование с хранением

BACKUP_SOURCE="/var/www /etc /home"
BACKUP_DEST="/mnt/backup"
REMOTE_SERVER="backup.company.com"
RETENTION_DAYS=30

# Создание резервной копии
DATE=$(date +%Y%m%d)
tar -czf $BACKUP_DEST/backup-$DATE.tar.gz $BACKUP_SOURCE

# Синхронизация на удаленный сервер
rsync -avz --delete $BACKUP_DEST/ $REMOTE_SERVER:/backups/

# Очистка старых резервных копий
find $BACKUP_DEST -name "backup-*.tar.gz" -mtime +$RETENTION_DAYS -delete

# Проверка резервной копии
tar -tzf $BACKUP_DEST/backup-$DATE.tar.gz > /dev/null
if [ $? -eq 0 ]; then
    echo "Резервная копия успешно проверена"
else
    echo "Сбой проверки резервной копии!" | mail -s "Предупреждение о резервном копировании" [email protected]
fi

2. Репликация базы данных:

# Настройка MySQL Master-Slave
# На Master:
CHANGE MASTER TO
  MASTER_HOST='master-server',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=107;

START SLAVE;
SHOW SLAVE STATUS\G

3. Документация:

  • Процедуры восстановления
  • Списки контактов
  • Системные диаграммы
  • Резервные копии конфигурации

Распространенность: Очень часто
Сложность: Сложная


Усиление безопасности

6. Как вы усиливаете безопасность Linux-сервера?

Ответ: Многоуровневый подход к безопасности:

1. Обновления системы:

# Автоматические обновления безопасности (Ubuntu)
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

2. Усиление SSH:

# /etc/ssh/sshd_config
Port 2222  # Изменение порта по умолчанию
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers admin devops
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

3. Настройка брандмауэра:

# Правила iptables
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Разрешение установленных соединений
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешение SSH (пользовательский порт)
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# Разрешение HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Сохранение правил
iptables-save > /etc/iptables/rules.v4

4. Обнаружение вторжений:

# Установка AIDE
sudo apt install aide
sudo aideinit

# Проверка изменений
sudo aide --check

5. Аудит логов:

# Включение auditd
sudo systemctl enable auditd
sudo systemctl start auditd

# Мониторинг доступа к файлам
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes

Распространенность: Очень часто
Сложность: Сложная


Оптимизация производительности

7. Как вы оптимизируете производительность сервера?

Ответ: Систематическая настройка производительности:

1. Определение узких мест:

# CPU
mpstat 1 10

# Память
vmstat 1 10

# Disk I/O
iostat -x 1 10

# Сеть
iftop
nethogs

2. Оптимизация сервисов:

# Настройка Nginx
worker_processes auto;
worker_connections 4096;
keepalive_timeout 65;
gzip on;
gzip_types text/plain text/css application/json;

# Настройка MySQL
innodb_buffer_pool_size = 4G
max_connections = 200
query_cache_size = 64M

3. Настройка ядра:

# /etc/sysctl.conf
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_fin_timeout = 30
vm.swappiness = 10
fs.file-max = 100000

4. Мониторинг и оповещения:

# Prometheus + Grafana
# Node Exporter для системных метрик
# Пользовательские оповещения для пороговых значений

Распространенность: Часто
Сложность: Средне-сложная


8. Как вы проектируете комплексное решение для мониторинга и оповещений?

Ответ: Эффективный мониторинг предотвращает сбои и обеспечивает быстрое реагирование на инциденты.

Архитектура стека мониторинга:

Loading diagram...

Настройка Prometheus:

# prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets:
        - 'server1:9100'
        - 'server2:9100'
        - 'server3:9100'
  
  - job_name: 'mysql'
    static_configs:
      - targets: ['db1:9104']
  
  - job_name: 'nginx'
    static_configs:
      - targets: ['web1:9113']

alerting:
  alertmanagers:
    - static_configs:
      - targets: ['localhost:9093']

rule_files:
  - 'alerts/*.yml'

Правила оповещений:

# alerts/system.yml
groups:
  - name: system_alerts
    interval: 30s
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Высокая загрузка CPU на {{ $labels.instance }}"
          description: "Загрузка CPU составляет {{ $value }}%"
      
      - alert: HighMemoryUsage
        expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Высокое использование памяти на {{ $labels.instance }}"
          description: "Использование памяти составляет {{ $value }}%"
      
      - alert: DiskSpaceLow
        expr: (node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100 < 10
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Низкое дисковое пространство на {{ $labels.instance }}"
          description: "Осталось только {{ $value }}% дискового пространства"
      
      - alert: ServiceDown
        expr: up == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "Сервис {{ $labels.job }} не работает"
          description: "{{ $labels.instance }} не работает более 2 минут"

Конфигурация Alertmanager:

# alertmanager.yml
global:
  resolve_timeout: 5m
  slack_api_url: 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'

route:
  group_by: ['alertname', 'cluster']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 12h
  receiver: 'default'
  routes:
    - match:
        severity: critical
      receiver: 'pagerduty'
      continue: true
    - match:
        severity: warning
      receiver: 'slack'

receivers:
  - name: 'default'
    email_configs:
      - to: '[email protected]'
        from: '[email protected]'
        smarthost: 'smtp.company.com:587'
  
  - name: 'slack'
    slack_configs:
      - channel: '#alerts'
        title: '{{ .GroupLabels.alertname }}'
        text: '{{ range .Alerts }}{{ .Annotations.description }}{{ end }}'
  
  - name: 'pagerduty'
    pagerduty_configs:
      - service_key: 'YOUR_PAGERDUTY_KEY'

inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

Grafana Dashboard:

{
  "dashboard": {
    "title": "Обзор системы",
    "panels": [
      {
        "title": "Использование CPU",
        "targets": [
          {
            "expr": "100 - (avg by(instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)"
          }
        ]
      },
      {
        "title": "Использование памяти",
        "targets": [
          {
            "expr": "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100"
          }
        ]
      }
    ]
  }
}

Концепции SLO/SLA/SLI:

SLI (Service Level Indicator):

  • Количественная мера уровня обслуживания
  • Примеры: % Uptime, задержка, частота ошибок

SLO (Service Level Objective):

  • Целевое значение для SLI
  • Пример: 99,9% uptime, p95 задержка < 200ms

SLA (Service Level Agreement):

  • Контракт с последствиями
  • Пример: 99,9% uptime или клиент получает возмещение
# Пример SLO
- alert: SLOViolation
  expr: |
    (
      sum(rate(http_requests_total{status=~"2.."}[30d]))
      /
      sum(rate(http_requests_total[30d]))
    ) < 0.999
  labels:
    severity: critical
  annotations:
    summary: "Нарушение SLO: Уровень успеха ниже 99,9%"

Предотвращение усталости от оповещений:

  1. Осмысленные оповещения:

    • Оповещение о симптомах, а не о причинах
    • Каждое оповещение должно быть действенным
    • Удаление шумных оповещений
  2. Группировка оповещений:

    • Группировка связанных оповещений
    • Использование правил ингибирования
    • Установка соответствующих пороговых значений
  3. Эскалация:

    • Предупреждение → Чат команды
    • Критический → PagerDuty
    • Использование графиков дежурств

Распространенность: Часто
Сложность: Сложная


Корпоративная инфраструктура

9. Как вы управляете крупномасштабной средой Windows?

Ответ: Стратегии централизованного управления:

Управление групповыми политиками:

# Создание GPO
New-GPO -Name "Политика безопасности" -Comment "Корпоративные настройки безопасности"

# Связывание с OU
New-GPLink -Name "Политика безопасности" -Target "OU=Servers,DC=company,DC=com"

# Настройка политики паролей
Set-ADDefaultDomainPasswordPolicy -Identity company.com `
    -MinPasswordLength 12 `
    -PasswordHistoryCount 24 `
    -MaxPasswordAge 90.00:00:00

# Развертывание ПО через GPO
# Конфигурация компьютера > Политики > Настройки программного обеспечения > Установка программ

WSUS (Windows Update):

# Настройка WSUS
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate" `
    -Name "WUServer" -Value "http://wsus.company.com:8530"

# Принудительная проверка обновлений
wuauclt /detectnow /updatenow

PowerShell Remoting:

# Включение удаленного управления
Enable-PSRemoting -Force

# Выполнение на нескольких серверах
Invoke-Command -ComputerName server1,server2,server3 -ScriptBlock {
    Get-Service | Where-Object {$_.Status -eq "Stopped"}
}

# Параллельное выполнение
$servers = Get-Content servers.txt
$servers | ForEach-Object -Parallel {
    Test-Connection -ComputerName $_ -Count 1
} -ThrottleLimit 10

Распространенность: Часто
Сложность: Сложная


Заключение

Собеседования старшего системного администратора требуют глубоких технических знаний и опыта руководства. Сосредоточьтесь на:

  1. Виртуализация: Гипервизоры, управление ресурсами, миграция
  2. Высокая доступность: Кластеризация, переключение на резервный узел, репликация
  3. Автоматизация: Скрипты, управление конфигурацией, оркестрация
  4. Управление конфигурацией: Ansible, Puppet, IaC в масштабе
  5. Аварийное восстановление: Стратегии резервного копирования, репликация, тестирование
  6. Безопасность: Усиление, соответствие требованиям, мониторинг
  7. Производительность: Оптимизация, планирование емкости, устранение неполадок
  8. Мониторинг: Prometheus, Grafana, оповещения, SLO/SLA
  9. Корпоративное управление: AD, GPO, централизованное администрирование

Продемонстрируйте реальный опыт работы со сложной инфраструктурой и принятие стратегических решений. Удачи!

Newsletter subscription

Еженедельные советы по карьере, которые действительно работают

Получайте последние идеи прямо на вашу почту

Похожие посты

Decorative doodle

Перестаньте откликаться. Начните получать предложения.

Превратите своё резюме в магнит для собеседований с оптимизацией на базе ИИ, которой доверяют соискатели по всему миру.

Начать бесплатно

Поделиться этим постом

Сократите Время Написания Резюме на 90%

Средний соискатель тратит более 3 часов на форматирование резюме. Наш ИИ делает это менее чем за 15 минут, ускоряя переход к этапу подачи заявки в 12 раз.