voidlearn
 

2.1Самопрезентация и рассказ о проекте

Соберёшь короткий рассказ, который показывает текущую роль, личный вклад и следующий шаг. Научишься подкреплять достижения измеримым результатом и оставлять интервьюеру точные темы для вопросов.

Что на самом деле спрашивают словами «расскажите о себе»

Вопрос не про биографию. Он проверяет, умеешь ли ты упаковывать информацию, и заодно даёт интервьюеру крючки для следующих вопросов. Формально ты отвечаешь на «кто ты», фактически на три вопроса сразу:

  1. Что ты умеешь прямо сейчас? Роль, стек, домен, масштаб.
  2. Как ты к этому пришёл? Короткая траектория, из которой виден рост, а не список работодателей.
  3. Зачем ты здесь? Чего не хватает на текущем месте и почему именно их вакансия это закрывает.

Отсюда формула: настоящее → путь → чего хочу дальше. Именно в этом порядке, а не хронологически с института. Хронология проигрывает всему: самое важное (что ты умеешь сейчас) оказывается в конце, когда внимание уже уплыло.

Самопрезентация: две минуты, три блока, фиксированные пропорции 1. НАСТОЯЩЕЕ ~30 секунд 2. ПУТЬ И ДОСТИЖЕНИЯ ~60 секунд - ядро рассказа 3. КУДА ДАЛЬШЕ ~30 секунд 0:00 0:30 1:30 2:00 Имя, роль, сколько в Go Продукт: что за система, кому и зачем нужна Стек - одной строкой Проект целиком: архитектура в две фразы, твоя зона ответственности 2-3 достижения, каждое с цифрой: было X - стало Y, и как измерил Самое сложное решение и почему выбрал именно его, а не альтернативу Как работаешь с людьми: ревью, постановка, дежурства Чего не хватает на текущем месте Почему именно эта вакансия это закрывает Что сюда НЕ класть Биографию с института. Список всех мест работы по годам. Перечисление технологий без контекста («знаю Kafka, Redis, gRPC» - и что с ними делал?). Личное: семья, город, хобби. Это либо спросят, либо оно не нужно.
Пропорции важнее слов. Половина времени уходит на блок «что делал и с каким результатом», потому что оттуда интервьюер берёт следующие вопросы. Если этот блок короче рассказа про путь, разговор уедет в биографию.
Правило двух минут

Записать текст, прочитать вслух с секундомером, урезать до 2:00–2:30 и проговорить три раза. Заучивать не дословно, а опорные точки: пять-шесть фраз, между которыми ты импровизируешь. Зазубренный текст слышно, и звучит он хуже живого рассказа по каркасу. Тайминг проверяй честно: то, что «на глаз минута», обычно четыре.

Рассказ о проекте: четыре слоя

Дальше почти всегда идёт «расскажите подробнее про ваш проект». Здесь чаще всего ошибаются одинаково: начинают со стека, «у нас Go, Postgres, Kafka, k8s». Интервьюер так и не понял, что делает система, и вынужден догадываться. Рассказывать надо сверху вниз: бизнес-смысл, потом архитектура, потом твоя граница ответственности, потом самое сложное.

СлойЧто говоришьПример формулировки (CRM)
1. Бизнес-смысл Что система делает, для кого, чем зарабатывает или что экономит «CRM для отделов продаж: ведёт лиды и сделки, подтягивает звонки из телефонии, считает воронку. Пользователи - менеджеры продаж и руководители»
2. Архитектура Крупными мазками: сколько сервисов, чем общаются, где состояние «Go-бэкенд из нескольких сервисов, синхронно gRPC между собой и REST наружу, события в Kafka, состояние в Postgres, кэш и распределённые локи в Redis»
3. Твоя зона Что делал ты, а не команда: конкретные куски, конкретные задачи «Я вёл домен сделок и интеграции с телефонией, плюс наблюдаемость: метрики, дашборды, алерты»
4. Самое сложное Одно решение с альтернативами и обоснованием - это глубина «Самым сложным была идемпотентность обработки звонков: провайдер шлёт вебхуки с ретраями»
Карта, по которой идёшь, когда рассказываешь про проект Клиенты веб и мобилка API Gateway authn, rate limit CRM-бэкенд на Go - твоя зона HTTP / gRPC API хендлеры, валидация Воркеры очереди, ретраи Домен сделки, лиды, задачи Интеграции телефония, почта Наблюдаемость Prometheus + Grafana, алерты, канареечный деплой PostgreSQL миграции Redis кэш, локи Kafka события Три фразы, которые обязаны прозвучать 1) «Система делает вот это для вот таких пользователей» - смысл. 2) «Я отвечал вот за эти куски» - граница. 3) «Самое сложное было здесь, решили так, потому что...» - глубина. Без третьей фразы это просто список технологий.
Главное на схеме: зона ответственности. Интервьюер весь рассказ пытается понять, где заканчивается «наша команда» и начинается «я». Проведи эту границу словами сам, иначе он будет вытаскивать её вопросами, а это уже похоже на допрос.

Цифры: что готовить и что делать, если их нет

Цифра в рассказе работает как доказательство. «Ускорил ручку» не весит ничего. А вот «p99 списка сделок был 1,8 с, стал 210 мс, смотрел в Grafana по гистограмме http_request_duration_seconds» уже можно проверить, и по такой фразе сразу видно, что человек в метрики действительно смотрел.

Перцентиль спрашивают вместо среднего потому, что среднее прячет медленный хвост, а жалуются пользователи как раз на хвост.

Что готовитьЗачем спрашиваютГде взять
RPS: средний и в пикеПонять реальный масштаб и калибровать твои слова про «высокие нагрузки»sum(rate(http_requests_total[5m])) в Grafana даёт текущий RPS, для среднего за сутки окно [24h]; или посчитать от бизнес-объёма
Латентность: p50/p95/p99 ключевых ручекПроверить, знаешь ли ты разницу между средним и хвостомГистограмма запросов, histogram_quantile(0.99, ...)
Объём данных: размер БД, число строк в топ-3 таблицах, суточный приростОценить, сталкивался ли ты с реальными проблемами масштабаpg_database_size, pg_total_relation_size, оценка по reltuples
Размер команды и своя роль в нейПонять, сколько на тебе было автономии и коммуникацииПросто посчитать: разработчики, QA, аналитик, тимлид, продакт
Темп поставки: релизов в неделю, время от PR до продаОценить зрелость процессов, к которым ты привыкИстория прогонов CI и теги релизов
Надёжность: доступность, число инцидентов, есть ли SLOПонять, был ли у тебя прод в настоящем смысле словаАлерты, постмортемы, страница статуса
Цифры в рассказе: три уровня достоверности Выдумка «у нас миллионы запросов» Ломается одним вопросом: «а сколько это в пике?» - и ответа уже нет Честная оценка «порядка 300-500 RPS, точнее не скажу, давно не смотрел» Это нормально. Главное - назвать порядок и признать погрешность Измерено «~400 RPS в пике, p99 120 мс, база 180 ГБ, команда 6 человек» Цифра из Grafana или из БД. Уровень, на который целимся За час до собеса открыть дашборд и выписать 6-8 чисел на бумажку - это вся подготовка Если доступа к метрикам уже нет Считай от бизнеса: 12 000 сделок в день - это 0,14 сделки в секунду, а на каждую за её жизнь набегают сотни запросов: карточка, списки, звонки. Итого десятки RPS в среднем и сотни в рабочие часы, пик в 3–5 раз выше среднего. Так и говори: «оценочно».
Погрешность простят, выдумку нет. Фразу «порядка, точнее не скажу» воспринимают нормально. А круглая красивая цифра, которая рассыпается от одного уточнения, подрывает доверие ко всему остальному рассказу.
Как называть цифру, если точной нет
  • Порядок вместо точности: «сотни RPS», «десятки гигабайт», «единицы миллионов строк».
  • Явная оговорка. Хватает одного слова, «по памяти», «оценочно», «на глаз из дашборда», и цифра из вранья превращается в честную оценку.
  • Вывод из бизнес-объёма: «примерно 12 тысяч сделок в сутки, на каждую за её жизнь сотни запросов - отсюда и порядок».
  • Никогда не округляй вверх «чтобы солиднее». Опытный интервьюер спросит «а как эта нагрузка распределена по суткам?» или «а какой инстанс это держал?», и всё станет видно.
Подвох: «расскажите про самое сложное»

Сложное не значит объёмное. «Мы переписали монолит на микросервисы» говорит о масштабе, а не о сложности, и спросить оттуда лично у тебя почти нечего. Сложное начинается там, где было несколько разумных вариантов и пришлось выбирать. Идемпотентность вебхуков, порядок обработки событий, миграция без даунтайма, консистентность между сервисами: из такого получается глубокий разговор. Заранее выбери одну тему и подготовь альтернативы, которые ты отверг, и почему. Именно это отличает мидла от джуна, который «сделал как получилось».

Вопросы

4
Суть: три блока в фиксированном порядке - настоящее → путь и достижения → чего хочу дальше. Две минуты, половина времени на достижения с цифрами.

Каркас ответа

  1. Кто я сейчас (~30 с): имя, роль, сколько лет пишу на Go, что за продукт и для кого. Стек в одну строку, без перечисления всего, что видел.
  2. Проект и достижения (~60 с): что за система, за что отвечал я, два-три результата с цифрами в формате «было X - стало Y».
  3. Чего хочу дальше (~30 с): чего не хватает сейчас и почему именно эта вакансия это закрывает. Заодно здесь же снимается будущий вопрос «почему уходишь».
  4. Передача хода: «с чего вам удобнее начать - с архитектуры или с конкретных задач?» Это выглядит уверенно и экономит время обоим.

Образец под профиль «Go + CRM»

Так это звучит вслух

«Меня зовут Герман, я backend-разработчик, три года пишу на Go. Последние два года - в команде CRM: это система для отделов продаж, там ведутся лиды и сделки, подтягиваются звонки из телефонии и считается воронка. Бэкенд на Go: несколько сервисов, внутри gRPC, наружу REST, события через Kafka, данные в Postgres, кэш и локи в Redis, всё в Kubernetes.

Моя зона - домен сделок и интеграции с внешними системами, плюс наблюдаемость. Из того, чем доволен: во-первых, разобрался с дублями по звонкам - провайдер шлёт вебхуки с ретраями, и у нас в базе плодились дубликаты; сделал идемпотентную обработку по ключу события, дубли ушли в ноль. Во-вторых, список сделок отдавал p99 около 1,8 секунды - после разбора планов, составного индекса и убирания N+1 стало примерно 210 миллисекунд. В-третьих, завёл нормальные метрики и дашборды в Prometheus с Grafana и перевёл раскатку на канареечную: до этого релиз был событием, сейчас катим несколько раз в неделю.

Дальше хочу больше отвечать за архитектурные решения, а не только за свои сервисы, и поработать с нагрузкой на порядок выше - у вас, судя по вакансии, как раз это есть. С чего удобнее начать: с архитектуры проекта или с конкретных задач?»

Чего говорить нельзя

  • Хронологию с института. После «закончил вуз, потом полгода на PHP, потом...» самое ценное окажется в конце.
  • Список технологий без контекста. За «знаю Kafka, gRPC, Redis, k8s, Postgres» сразу следует «а что вы с Kafka делали?», и если ответа нет, доверие падает ко всему списку.
  • Личное. Семья, город, хобби, «люблю учиться новому». Либо спросят отдельно, либо это шум.
  • Негатив про текущую работу. Даже одна фраза «там всё плохо с процессами» разворачивает разговор не туда.
  • Восемь минут. Если тебя перебивают, рассказ был слишком длинным, и это уже минус.

Чем добить

Подстроить последний блок под конкретную вакансию: если в описании выделены высокие нагрузки, делай акцент на латентности и метриках; если интеграции, на идемпотентности и внешних API; если много легаси, на миграциях без даунтайма. Один и тот же рассказ с разными акцентами выглядит как «человек прочитал вакансию», а это редкость.

Суть: сверху вниз - бизнес-смысл, архитектура крупными мазками, граница «я / команда», и только потом детали. Стек называется последним, а не первым.

Каркас ответа

  1. Что делает система и для кого. Две фразы. Без этого всё дальнейшее висит в воздухе.
  2. Как устроена. Сколько сервисов, кто с кем как общается (синхронно / через события), где живёт состояние, как деплоится.
  3. Где здесь я. Прямым текстом: «я отвечал за такие-то сервисы и такие-то задачи». Если что-то делал не ты, так и скажи, это не минус.
  4. Как это работает в динамике. Проведи один запрос через всю систему: от кнопки в интерфейсе до записи в БД и события в Kafka. Так проще всего показать, что ты понимаешь систему целиком.
  5. Масштаб цифрами. RPS, объём данных, размер команды, темп релизов.
Так это звучит вслух

«CRM для отделов продаж: менеджеры ведут в ней лиды и сделки, руководители смотрят воронку и отчёты. Бэкенд разбит на несколько Go-сервисов: сервис сделок и лидов - это ядро, отдельно сервис интеграций с телефонией и почтой, отдельно сервис отчётов, который читает с реплики. Между собой синхронно ходим по gRPC, наружу отдаём REST через gateway, который закрывает аутентификацию и лимиты. Всё, что не должно блокировать пользователя, уезжает событием в Kafka: уведомления, пересчёт воронки, вебхуки во внешние системы. Состояние - Postgres, миграции через goose в отдельном шаге пайплайна; в Redis кэш справочников и распределённые локи. Крутится в Kubernetes, раскатка канареечная.

Моя зона - сервис сделок и сервис интеграций целиком: схема данных, API, воркеры, миграции. Плюс наблюдаемость на всей команде: метрики, дашборды и алерты в Prometheus с Grafana я поднимал сам. Отчётами занимался коллега, фронт - отдельная команда.

Если провести один запрос: менеджер меняет статус сделки → gateway проверяет токен → сервис сделок валидирует переход по машине состояний, пишет в Postgres в транзакции вместе с записью в служебную таблицу outbox → отдельный воркер вычитывает её и публикует событие в Kafka → подписчики шлют уведомление и пересчитывают воронку. Outbox взяли именно потому, что "записать в БД и отправить в Kafka" без него не атомарно.»

Чего говорить нельзя

  • Начинать со стека. «У нас Go, Postgres, Kafka» перечисляет зависимости, а не рассказывает о проекте.
  • Сплошное «мы». Если во всём ответе ни разу не прозвучало «я сделал», интервьюер не поймёт, что делал именно ты, и решит, что ничего.
  • Присваивать чужое. Достаточно одного уточняющего вопроса вглубь, чтобы это вскрылось. Гораздо сильнее звучит «это делал коллега, я знаю верхнеуровнево».
  • Раскрывать то, что нельзя. Внутренние формулы, персональные данные, коммерческие цифры компании. Говори про архитектуру и порядки величин, а не про конкретику под NDA, и скажи об этом прямо: это плюс, а не минус.
Приём, который выделяет

Нарисуй схему. Очно на доске, по видео попроси разрешения пошарить экран и набросать в любой рисовалке, или просто проговори «представьте три прямоугольника». Кандидат, который раскладывает рассказ по картинке, выглядит как человек, который так же будет объяснять и коллегам. Схему набросай заранее, один раз, и держи её в голове.

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

Каркас ответа

  1. Проблема в одной фразе, и почему она не решалась «просто».
  2. Варианты: два-три, каждый с плюсом и минусом. Это ядро ответа.
  3. Выбор и критерий: почему именно этот, по какому признаку сравнивал.
  4. Как проверил, что не ошибся: метрики, нагрузочный тест, канареечная раскатка.
  5. Что бы сделал иначе сейчас. Эта фраза почти всегда добавляет к оценке.
Так это звучит вслух

«Самым сложным была идемпотентность обработки звонков. Провайдер телефонии шлёт вебхук о завершённом звонке и ретраит его, если мы не ответили 200 за две секунды. А мы иногда отвечали медленно - и в CRM появлялись дубли звонков в карточке сделки, менеджеры на это жаловались.

Вариантов было три. Первый - дедупликация по содержимому: сравнивать номер, время и длительность. Отмёл: провайдер округлял длительность по-разному в ретраях, и это дало бы ложные срабатывания. Второй - очередь с exactly-once поверх Kafka. Отмёл как избыточное: exactly-once там всё равно означает "at-least-once плюс дедупликация на приёмнике", то есть ту же задачу, но с лишней инфраструктурой. Третий - то, на чём остановились: у провайдера в вебхуке есть call_uuid, я сделал его натуральным ключом с уникальным индексом и вставку через INSERT ... ON CONFLICT DO NOTHING в той же транзакции, что и запись в outbox. Обработчик стал идемпотентным, повторный вебхук просто ничего не меняет и возвращает 200.

Проверял так: сначала на стейдже прогнал повторную доставку руками, потом раскатил канареечно на 10% трафика и смотрел счётчик конфликтов вставки - он сразу стал ненулевым, то есть ретраи реально приходили и отсекались. Дубли в проде ушли в ноль.

Что бы сделал иначе: сразу завёл бы отдельную таблицу обработанных событий с TTL вместо уникального индекса прямо на бизнес-таблице. Сейчас этот индекс мешает, когда надо перезалить историю.»

Про «чем гордишься»

Это тот же вопрос, но с другого угла: тут ценится не героизм, а изменение, которое пережило тебя. Хорошие варианты: «после инцидента завёл алерты, которыми команда пользуется до сих пор», «перевёл раскатку на канареечную, и релиз перестал быть событием», «написал линтер-правило, которое ловит забытый context». Слабые варианты вроде «сидел ночью и починил» или «сделал за выходные» говорят про выгорание, а не про инженерию.

Чего говорить нельзя

  • «Самым сложным было переписать монолит на микросервисы». Если ты был одним из десяти, это про масштаб чужой работы.
  • Решение без альтернатив. «Взял Kafka», а почему не RabbitMQ, не outbox с поллингом, не обычная транзакция? Если альтернатив нет, значит, выбора не было и решение принимал не ты.
  • Гордиться количеством кода: «написал сервис на 20 тысяч строк». Никто не считает строки.
Суть: шесть чисел, выписанных на бумажку перед собесом. Если точных нет - называй порядок с явной оговоркой, никогда не выдумывай красивое.

Обязательный минимум

  • Нагрузка: RPS средний и в пике, во сколько раз пик выше среднего.
  • Латентность: p50/p95/p99 двух-трёх главных ручек. Только не среднее, оно на собесе выдаёт человека, который метрики не читал.
  • Данные: размер БД, число строк в самых крупных таблицах, суточный прирост, глубина хранения.
  • Команда: сколько разработчиков, есть ли QA, аналитик, тимлид; сколько человек в твоей зоне.
  • Темп: релизов в неделю, время от смерженного PR до прода, есть ли автотесты в пайплайне.
  • Надёжность: целевая доступность, есть ли SLO, сколько инцидентов было за квартал, есть ли дежурства.

Где брать, если не помнишь

# Prometheus: RPS сейчас, окно пять минут, и пик за сутки
sum(rate(http_requests_total[5m]))
max_over_time(sum(rate(http_requests_total[5m]))[24h:5m])

# p99 по ручке
histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket{route="/deals"}[5m])))

# доля успешных за месяц: фактический SLI доступности
sum(rate(http_requests_total{code!~"5.."}[30d])) / sum(rate(http_requests_total[30d]))
-- размер базы и топ таблиц по объёму
SELECT pg_size_pretty(pg_database_size(current_database()));

SELECT relname,
       pg_size_pretty(pg_total_relation_size(c.oid)) AS total,
       reltuples::bigint                             AS approx_rows
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'public' AND c.relkind = 'r'
ORDER BY pg_total_relation_size(c.oid) DESC
LIMIT 5;

Как называть цифру, если точной нет

Так это звучит вслух

«Точную цифру по памяти не назову, но порядок такой: в рабочие часы это сотни запросов в секунду на сервис сделок, ночью почти ноль - нагрузка сильно привязана к рабочему дню, пик раза в четыре выше суточного среднего. База была порядка двухсот гигабайт, самая крупная таблица - история изменений сделок, там единицы миллионов строк и рост порядка десятков тысяч записей в сутки. Если нужно точнее - могу посмотреть и написать после интервью.»

В этом ответе три приёма: назван порядок, объяснена форма нагрузки (привязка к рабочему дню показывает, что ты понимаешь систему, а не запомнил цифру) и предложено уточнить позже. Последним почти никогда не пользуются, но напряжение оно снимает.

Чего говорить нельзя

  • «Высоконагруженный проект» без числа. Это слово ничего не значит: для кого-то это 500 RPS, для кого-то 500 000.
  • Среднее время ответа вместо перцентилей. Сразу прилетит «а p99?», и если ответа нет, вопрос про метрики закрыт не в твою пользу.
  • Округление вверх «для солидности». Один вопрос «а на скольких подах это крутилось?», и арифметика не сойдётся.
  • Путать SLA, SLO и SLI. Это три ступени одной лестницы: измеряемая величина, внутренняя цель по ней и обещание клиенту в договоре, за нарушение которого платят. Мидл эту тройку различает.
Практика подготовки

Заведи одну заметку «цифры проекта» и держи её открытой на втором экране во время созвона. Это не читерство: интервьюер сам держит перед глазами свои заметки. Но выучи её настолько, чтобы не делать пауз: подглядывай, чтобы свериться, а не чтобы прочитать.

Что стоит запомнить

  • Структура рассказа: настоящее, путь с результатами, куда хочешь двигаться.
  • Проект описывается через продукт, архитектуру, свою зону ответственности и эффект.
  • Цифра полезна, когда ясно, что именно измеряли и за какой период.

Частые ошибки

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

Самопроверка

Сначала реши задачу самостоятельно, затем открой ответ и сравни ход рассуждений.

Применение

1. Собери вступление из фактов

Подготовь ответ на «расскажите о себе» длиной около 30-60 секунд. Факты: Go backend developer, 1.5 года; CRM для отдела продаж; отвечал за HTTP-интеграции с двумя внешними системами и метрики; сократил p95 одного отчёта с 1.8 с до 420 мс после разбора плана запроса; ищешь задачи с большей нагрузкой и ответственностью за сервис. Не добавляй неуказанные детали.

Ответ и разбор

«Я Go-разработчик, полтора года делаю backend CRM для отдела продаж. Отвечаю за HTTP-интеграции с двумя внешними системами и наблюдаемость. Недавно разобрал медленный отчёт: p95 снизился с 1.8 секунды до 420 миллисекунд. Сейчас ищу задачи с большей нагрузкой и ответственностью за production». Получится около 30 секунд вслух. Это завершённый короткий ответ; удлиняй его только деталями реального вклада, если интервьюер попросит.

Применение

2. Проверь доказательность метрики

Кандидат говорит: «ускорил сервис на 70%». Какие два уточнения нужны, чтобы фраза стала проверяемым результатом? Доступны данные: один отчёт, p95 до изменения 1.8 секунды, после - 420 миллисекунд.

Ответ и разбор

Сузь утверждение до конкретного сценария и метрики: «p95 отчёта снизился с 1.8 секунды до 420 миллисекунд». Уточни период и условия измерения, чтобы сравнение было сопоставимым. Это снижение примерно на 76.7% или ускорение примерно в 4.29 раза; «около 77%» передаёт результат точнее, чем округление до 70%.

Применение

3. Убери технологический список

Перепиши фразу для рассказа о проекте: «У нас Go, PostgreSQL, Redis, Kafka, Kubernetes, gRPC». Контекст: ты владелец обработки входящих заказов; при повторной доставке события нужно было не создать заказ дважды.

Ответ и разбор

Например: «Я отвечал за обработку входящих заказов. Для этого потока было важно, чтобы повторная доставка одного события не создавала заказ второй раз. В рассказе я сосредоточусь на этой задаче и на своём фактическом вкладе». В условии не указан способ решения, поэтому не приписывай себе конкретный механизм вроде idempotency key или хранения в PostgreSQL.

Применение

4. Выбери крючок для интервьюера

В описании опыта есть два пункта: «настраивал CI» и «разобрался, почему повторный deploy выпускал старый образ; после фикса pipeline проверял digest загруженного артефакта». Какой пункт оставить в двухминутном рассказе и какой следующий вопрос он подсказывает?

Ответ и разбор

Оставь второй: он называет проблему, личное расследование и конкретную проверку результата. Естественный следующий вопрос - как pipeline выбирал образ до фикса и где именно сравнивается digest. На него нужно отвечать только реальными деталями своего изменения; если их нет, безопаснее выбрать другой подтверждённый пример.