Экзамен sql тинькофф

Введение

Недавно нам прилетело большое тестовое задание от Тиньков-Банка на должность аналитика данных. Там очень много задач, но сегодня мы разберем несколько — остановимся на мелочах и обратим внимание на тонкие моменты.

Да, продуктовые метрики мы тоже будем сегодня считать :)

Да, продуктовые метрики мы тоже будем сегодня считать :)

Материал создан командой Симулятора «SQL для анализа данных».

Описание базы данных

Итак, нам дана такая структура таблиц:

Структура таблиц в базе данных

Структура таблиц в базе данных

В какой СУБД мы будем работать — не сказано. По косвенным признакам мы предполагаем, что это PostgreSQL.

Хотя, по сути, это не особо важно — отличаться будут только некоторые функции. Все базовые операторы будут одинаковыми.

Кстати, интересный вопрос: представьте, что вы можете попросить интервьюера дать вам пример любого запроса.

Какой запрос вы попросите написать, чтобы понять, с какой СУБД вы имеете дело?

Ответ на этот вопрос предлагаем обсудить в комментариях, а мы переходим к задачам! 🙃

Задача 1

Условие

Необходимо получить список сотрудников в формате: «Иванова — Наталья – Юрьевна». ФИО должно быть прописано в одном столбике, разделение .

Вывести: новое поле, назовем его fio, birth_dt

Решение

Эта задача достаточно простая — здесь даже нет необходимости джойнить другие таблицы, достаточно поработать с таблицей Employees

Основная проблема — вывести ФИО через заданный разделитель. Многие решают эту задачу с помощью простой конкатенации:

select
	first_nm || '—' || middle_nm || '—' || last_nm as fio, 
	birth_dt
from employees

Но мы работаем в PostgreSQL, поэтому воспользуемся плюшкой — функцией CONCAT_WS. Она тоже делает конкатенацию строк, но первым аргументом принимает разделитель:

select 
	concat_ws('—', first_nm, middle_nm, last_nm) as fio, 
	birth_dt
from employees

Выглядит посимпатичней. Заодно и перед интервьюером блеснули знаниями 😅

Задача 2

Условие

Вывести %% дозвона для каждого дня. Период с 01.10.2020 по текущий день.

%% дозвона – это доля принятых звонков (dozv_flg=1) от всех поступивших звонков (dozv_flg = 1 or dozv_flg = 0).

Вывести: date, sla (%% дозвона)

Решение

Здесь задача уже поинтересней — мы все еще работаем с одной таблицей, но многие соискатели на таких задачах начинают городить многоэтажные подзапросы. 

А на самом деле, все просто — достаточно просто знать, что условный оператор CASE можно использовать внутри агрегатных функций — например, COUNT

Итак, чтобы посчитать SLA, нам нужно:

  • посчитать кол-во звонков с dozv_flg = 1

  • посчитать общее количество звонков

  • разделить одно на другое

Давайте сделаем это в одном запросе, без подзапросов и CTE. 

select
	start_dttm::date as "date", 
	count(case when dozv_flg=1 then 1 end) /
  	count(case when dozv_flg in (1, 0) then 1 end) as sla
from calls
where start_dttm::date between '2020-10-01' and now()::date
group by start_dttm::date

Вот, собственно, и все. Но проговорим несколько важных моментов:

Почему мы написали не count(*), а count(case when dozv_flg in (1, 0) then 1 end)?

Мы просто перестраховались — вдруг там еще какие-то значения могут быть. Например, 2. Лишним не будет, в любом случае.

Зачем мы делаем преобразование с помощью ::date?

А потому что оператор between потеряет все записи за сегодня, если не преобразовать эти поля в дату (это особенность сравнения даты-времени в PostgreSQL). Опять же — мы просто перестраховались.

Задача 3

Условие

Дана таблица clinets:

  • id клиента

  • calendar_at — дата входа в мобильное приложение

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

Решение

Если что, MAUmonthly active users: количество уникальных клиентов, проявляющих активность в приложении в течение месяца. 

Многие по ошибке выводят MAU в виде таблицы со столбцами Месяц — Кол-во активных клиентов. Это неправильно — MAU всегда должно быть одним числом

Соответственно, решение задачи сводится к следующим пунктам:

  • посчитать количество уникальных клиентов за каждый месяц

  • усреднить данные по всем месяцам

Для решения задачи мы будем использовать CTE и оператор DISTINCT внутри COUNT:

with a as (
	select 
		to_char(calendar_dt, 'MM') as mon, 
		count(distinct id) as cnt
	from clients 
	group by mon
)
select avg(cnt) as mau
from a

Сразу отметим — MAU можно считать и по-другому. Например:

  • сразу брать цифры на примере одного месяца

  • находить медиану

  • как-то еще

Мы просто показали один из вариантов 😇

Эпилог

На сегодня остановимся на этих 3 задачах. У нас в запасе еще много интересного — так что если вам зашло, мы скоро вернемся с новым разбором!

В целом, задачи не очень сложные. Но мы постарались «подсветить» некоторые тонкие моменты, без которых решение этих задач может стать проблемой.


Хотите глубже разобраться в том, как писать крутые SQL-запросы, делать эдхоки и считать продуктовые метрики? Пройдите обучение в Симуляторе по SQL от ребят из Simulative — там много крутых штук 👍

Еще больше интересных материалов — в нашем телеграм канале.

Материал создан командой Симулятора «SQL для анализа данных».

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Как вам уровень задачек?

Проголосовали 178 пользователей.

Воздержались 34 пользователя.

Недавно нам прилетело большое тестовое задание от Тиньков-Банка на должность аналитика данных. Там очень много задач, но сегодня мы разберем несколько — остановимся на мелочах и обратим внимание на тонкие моменты.

Материал создан командой Симулятора «SQL для анализа данных».

Описание базы данных

Итак, нам дана такая структура таблиц:

В какой СУБД мы будем работать — не сказано. По косвенным признакам мы предполагаем, что это PostgreSQL.

Хотя, по сути, это не особо важно — отличаться будут только некоторые функции. Все базовые операторы будут одинаковыми.

Кстати, интересный вопрос: представьте, что вы можете попросить интервьюера дать вам пример любого запроса.

Какой запрос вы попросите написать, чтобы понять, с какой СУБД вы имеете дело?

Ответ на этот вопрос предлагаем обсудить в комментариях, а мы переходим к задачам! 🙃

Задача 1

Условие

Необходимо получить список сотрудников в формате: «Иванова — Наталья – Юрьевна». ФИО должно быть прописано в одном столбике, разделение —.

Вывести: новое поле, назовем его fio, birth_dt.

Решение

Эта задача достаточно простая — здесь даже нет необходимости джойнить другие таблицы, достаточно поработать с таблицей Employees.

Основная проблема — вывести ФИО через заданный разделитель. Многие решают эту задачу с помощью простой конкатенации:

select
first_nm || ‘—’ || middle_nm || ‘—’ || last_nm as fio,
birth_dt
from employees

Но мы работаем в PostgreSQL, поэтому воспользуемся плюшкой — функцией CONCAT_WS. Она тоже делает конкатенацию строк, но первым аргументом принимает разделитель:

select
concat_ws(‘—’, first_nm, middle_nm, last_nm) as fio,
birth_dt
from employees

Выглядит посимпатичней. Заодно и перед интервьюером блеснули знаниями 😅

Задача 2

Условие

Вывести %% дозвона для каждого дня. Период с 01.10.2020 по текущий день.

%% дозвона – это доля принятых звонков (dozv_flg=1) от всех поступивших звонков (dozv_flg = 1 or dozv_flg = 0).

Вывести: date, sla (%% дозвона)

Решение

Здесь задача уже поинтересней — мы все еще работаем с одной таблицей, но многие соискатели на таких задачах начинают городить многоэтажные подзапросы.

А на самом деле, все просто — достаточно просто знать, что условный оператор CASE можно использовать внутри агрегатных функций — например, COUNT.

Итак, чтобы посчитать SLA, нам нужно:

  • посчитать кол-во звонков с dozv_flg = 1
  • посчитать общее количество звонков
  • разделить одно на другое

Давайте сделаем это в одном запросе, без подзапросов и CTE.

select
start_dttm::date as «date»,
count(case when dozv_flg=1 then 1 end) /
count(case when dozv_flg in (1, 0) then 1 end) as sla
from calls
where start_dttm::date between ‘2020-10-01’ and now()::date
group by start_dttm::date

Вот, собственно, и все. Но проговорим несколько важных моментов:

Почему мы написали не count(*), а count(case when dozv_flg in (1, 0) then 1 end)?

Любопытный читатель

Мы просто перестраховались — вдруг там еще какие-то значения могут быть. Например, 2. Лишним не будет, в любом случае.

Зачем мы делаем преобразование с помощью ::date?

Другой любопытный читатель

А потому что оператор between потеряет все записи за сегодня, если не преобразовать эти поля в дату (это особенность сравнения даты-времени в PostgreSQL). Опять же — мы просто перестраховались.

Задача 3

Условие

Дана таблица clinets:

  • id клиента
  • calendar_at — дата входа в мобильное приложение

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

Решение

Если что, MAU — monthly active users: количество уникальных клиентов, проявляющих активность в приложении в течение месяца.

Многие по ошибке выводят MAU в виде таблицы со столбцами Месяц — Кол-во активных клиентов. Это неправильно — MAU всегда должно быть одним числом.

Соответственно, решение задачи сводится к следующим пунктам:

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

Для решения задачи мы будем использовать CTE и оператор DISTINCT внутри COUNT:

with a as (
select
to_char(calendar_dt, ‘MM’) as mon,
count(distinct id) as cnt
from clients
group by mon
)
select avg(cnt) as mau
from a

Сразу отметим — MAU можно считать и по-другому. Например:

  • сразу брать цифры на примере одного месяца
  • находить медиану
  • как-то еще

Мы просто показали один из вариантов 😇

Эпилог

На сегодня остановимся на этих 3 задачах. У нас в запасе еще много интересного — так что если вам зашло, мы скоро вернемся с новым разбором!

В целом, задачи не очень сложные. Но мы постарались «подсветить» некоторые тонкие моменты, без которых решение этих задач может стать проблемой.

Команда Симулятора по SQL

Хотите глубже разобраться в том, как писать крутые SQL-запросы, делать эдхоки и считать продуктовые метрики? Пройдите обучение в Симуляторе по SQL от ребят из Simulative — там много крутых штук 👍

  • Симулятор «SQL для анализа данных» — поможет глубоко изучить SQL на бизнесовых кейсах. Вас ждет работа с реальными данными с интересной сюжетной линией.
  • Хотите оценить свои навыки? Попробуйте решить задачи с собеседования в Альфа-Банк.
  • Еще больше интересных материалов — в нашем телеграм канале.


an anonymous user
·

May 18, 2022


SQL

# Задача 1. Напишите запрос, который выведет пилотов, которые в качестве второго пилота в
# августе этого года трижды ездили в аэропорт Шереметьево. 
SELECT name
FROM ((pilots
INNER JOIN flights ON pilots.pilot_id  = flights.second_pilot_id )
INNER JOIN planes  ON flights.plane_id = planes.plane_id         )
WHERE destination = "Шереметьево" AND flight_dt LIKE "2022-08-%"
GROUP BY pilot_id;

# Выведите пилотов старше 45 лет, совершали полеты на самолетах с количеством
# пассажиров больше 30.
SELECT name
FROM ((pilots
INNER JOIN flights ON pilots.pilot_id = flights.first_pilot_id OR pilots.pilot_id = flights.second_pilot_id)
INNER JOIN planes ON flights.plane_id = planes.plane_id)
WHERE age > 45 AND cargo_flg = 1
GROUP BY pilot_id
HAVING COUNT(cargo_flg) > 30;

# Выведите ТОП 10 пилотов-капитанов (first_pilot_id), которые совершили наибольшее
# число грузовых перелетов в этом году.
SELECT name
FROM ((pilots
INNER JOIN flights ON pilots.pilot_id = flights.first_pilot_id)
INNER JOIN planes ON flights.plane_id = planes.plane_id)
WHERE cargo_flg = 0 AND flight_dt LIKE "2022-%-%"
GROUP BY pilot_id
ORDER BY SUM(capacity) DESC
LIMIT 10;

Output

(Run the program to view its output)

Профиль в личном кабинете

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

Дедлайны и длительность экзаменов

Все экзамены идут непрерывно после открытия — взять паузу не получится.

  • Экзамен по математике длится 5 часов
  • Экзамен по программированию — 3 часа
  • Тест по SQL — без внутреннего дедлайна до конца отборов
  • Анкета, бизнес-кейсы и творческие задания доступны в любое время до общего дедлайна

Если вы откроете экзамен в 23:30 в день дедлайна, то на решение у вас останется 29 минут, после чего экзамены завершатся. Мы оставляем за собой право не рассматривать вашу кандидатуру без заполненной анкеты.

Направления и экзамены

Аналитик: анкета + экзамен по математике, а также тест по SQL (не является обязательным на этих направлениях, но может стать преимуществом) и бизнес-кейсы (обязательны для решения, если вы выбираете бизнес-аналитику (технолог) или системную аналитику)

Python-разработчик, Java-разработчик, Разработчик C#, Frontend-разработчик. Scala-разработчик, DevOps, SRE, Инженер по качеству: анкета + контест по программированию.

Android-разработчик/iOS-разработчик: тестирование iOS/Android.

Маркетинг: тестирование на знание в области интернет-маркетинга

Управление образовательными проектами, Младший менеджер по нативной рекламе и Младший менеджер по работе с блогерами: анкета + решение кейсов для выбранного направления. Экзамены по программированию и математике решать не требуется.

Анкета имеет большое значение на всех направлениях, советуем заполнять ее максимально развернуто. После завершения экзаменов анкета не принимается.

Решение контестов

В качестве ответа к задаче по программированию нужно прислать файл с кодом программы. Чтение и запись данных происходит через стандартный поток (Пример)

Проверка на первом тесте

При выполнении контеста по программированию на момент выполнения проверка идет на первом посте. Тестирование на всех тестах идет после завершения экзамена.

Дисквалификация

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

Использование сторонних библиотек

Для решения задач нельзя использовать сторонние библиотеки (например, numpy для Python). Для решений на Java и Scala используйте класс, именованный Main.

Вопросы по условиям задач

Вопросы по условиям вступительных испытаний следует адресовать боту в Telegram @clar_tbot:

  • Выберите образовательную программу в отборе на которую вы принимаете участие (Финтех, Старт, Поколение и т.д.)
  • Выберите экзамен, который вы сейчас решаете (контест по программированию, экзамен по математике или другое)
  • Задайте вопрос. Ответ придёт так же от бота, которому вы адресовали вопрос.

Если у вас нет возможности воспользоваться ботом, то можно выбрать один из следующих способов связи:

— почта best-talents@tinkoff.rubest-talents@tinkoff.ru

— в сообщения группы

Список доступных языков и их версии

C++17 (GNU C++ 7.5.0)

Perl 5.26.1 (Perl 5.26.1)

Java 8 (Java JDK 1.8.0_265)

Mono C# 4.6.2.0 (Mono C# 4.6.2.0)

Python3 3.5 (Python3 3.6.9)

GNU go 8.4.0 (GNU go 8.4.0)

Scala 2.11.12 (Scala 2.11.12)

Kotlin (Kotlin 1.4.10-release-411)

NodeJS 8.10.0 (NodeJS 8.10.0)

Значения ошибок Статус Расшифровка Пояснение

OK — OK

AC — Accepted for Testing — Принято на проверку

CE — Compilation Error — Ошибка компиляции

RT — Run-Time Error — Ошибка при работе программы

TL — Time-Limit Exceeded — Ошибка превышения лимита времени

PE — Presentation Error — Ошибка неправильного формата результата

WA — Wrong Answer — Неправильный ответ

CF — Check Failed — Внутренняя ошибка проверки

PT — Partial Solution — Частичное решение

IG — Ignored — Решение проигнорировано

DQ — Disqualified — Решение дисквалифицировано

PD — Pending — Ожидает проверки

ML — Memory Limit Exceeded — Ошибка превышения лимита памяти

SE — Security Violation — Ошибка нарушения ограничений безопасности

SV — Style Violation — Ошибка нарушения стиля оформления исходного кода

WT — Wall Time Limit Exceeded — Ошибка превышения лимита реального времени

PR — Pending Review — Ожидает подтверждения

RJ — Rejected — Отклонено

SK — Skipped — Пропущено

SY — Synchronization error — Ошибка синхронизации

SM — Summoned for defence — Вызван на защиту

Стажировка — хороший способ начать карьеру и попробовать свои силы в реальных задачах бизнеса.

Мы поговорили с аналитиками и разработчиками Тинькофф, которые попали в команду после стажировки. Они рассказали, какой опыт получили и как ранний карьерный старт помог им вырасти в профессии.

ИСТОРИЯ № 1

«Говорите, если вас что-то не устраивает»

Отбор на стажировку. В 2020 году я окончила университет «Иннополис», училась на специальности «информатика и вычислительная техника». Каждый год в вузе проходили ярмарки вакансий, где студенты искали стажировки или работу. Сама я задумалась о карьере в 2019 году, после третьего курса. Отправилась на ярмарку, увидела стенд Тинькофф и подошла узнать про стажировки.

Там я познакомилась с директором татарстанских центров разработки банка. Он рассказал о программе оплачиваемых стажировок «Тинькофф Старт» и предложил оставить заявку. В Старте несколько направлений, например маркетинг и QA, но я выбрала iOS-разработку.

Ярмарка вакансий в университете «Иннополис». Я стою справа и представляю компанию уже как сотрудник

Три года назад отбор состоял из трех этапов, все проходило в онлайне. Сначала проводили шестичасовой конкурс по программированию из алгоритмических задач, их можно было решать на любом популярном языке. Следом предстояло выполнить тест по iOS и языку Swift — он проверял общие знания и длился около часа. В конце нужно было написать ленту новостей на основе полученного API со случайными постами, на это задание отводилось несколько дней.

Отбор был не слишком сложным, но занял много времени. Мне кажется, за счет этого проверялась и мотивация кандидата. Я со всем справилась, и меня позвали на очное собеседование в казанский ИТ-парк.

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

Я попала в Тинькофф Бизнес — подразделение банка для предпринимателей. В 2019 году еще не было выстроенного онбординга, поэтому я сразу погрузилась в боевые задачи: по ходу мне объяснили архитектуру проекта, рассказали, как писать тесты, и посвятили в командные процессы. На стажировке я в основном дорабатывала существующие фичи — депозиты и овернайты, писала автотесты. Курировал меня разработчик одной команд Бизнеса — он же проводил собеседование.

Я мощно прокачала хард-скиллы: разобралась с процессами и архитектурой крупного проекта, узнала много новых технологий и библиотек. Если говорить о софт-скиллах, я научилась работать в крупной команде, быть коммуникабельной, а также получать и давать обратную связь. Стажировка проходила летом, по 40 часов в неделю, совмещать с другими занятиями было несложно.

Я получила оффер через месяц после окончания стажировки — училась тогда на четвертом курсе. Меня взяли джуном в команду Тинькофф Бизнеса. Здесь я уже выполняла задачи, связанные с разработкой новой функциональности, написанием тестов и аналитикой.

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

Кроме того, в банке есть институт держателей профессии — разработчиков, которые проявили инициативу и взяли на себя развитие определенных направлений в сообществе. С начала 2022 года я курирую направления наставничества и DevRel.

Атмосфера в компании позитивная и доброжелательная

Еще я люблю представлять компанию на ярмарках вакансий. Часто на них приходится выезжать в другие города: я живу в Иннополисе, а на мероприятия ездила в Саратов, Нижний Новгород, Москву и Казань. Еще одно приятное занятие — менторство стажеров и джунов. Сейчас в Тинькофф Бизнесе сложился онбординг, все новые сотрудники — стажеры, джуны, мидлы, сениоры — пользуются чек-листами, знакомятся с видео и документацией по проекту и компании, а затем выполняют онбординг-задание. Как правило, это разработка одной фичи, чтобы познакомиться с проектом и процессами. Новым стажерам можно позавидовать: за счет онбординга им легко влиться в работу компании.

После онбординга новичок начинает выполнять реальные задачи в одной из команд: пишет фичи и автотесты, исправляет баги. За каждым стажером закреплен ментор, готовый прийти на помощь.

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

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

Совет новичкам. Во-первых, не бойтесь. Поначалу большой проект и команда могут пугать, но со временем приятные эмоции от погружения в задачи и разработку перевесят страх. Во-вторых, говорите, если вас что-то не устраивает, — с куратором, ментором или тимлидом. Однажды мне достался слабый компьютер, какое-то время я работала на нем, но было некомфортно. Когда попросила его заменить, вопрос решили очень оперативно, и я выполняла работу быстрее. Всегда лучше сразу сказать о проблемах, чем потом разбираться с последствиями.

ИСТОРИЯ № 2

«Я рад, что по-прежнему могу уделять много времени учебе и развитию»

Отбор на стажировки. Я работаю в команде продуктовой аналитики Тинькофф Страхования, параллельно перехожу на шестой курс мехмата МГУ и подрабатываю в математическом институте имени В. А. Стеклова РАН.

В 2018 году, на втором курсе, мне хотелось получить более прикладные знания, чем те, что давал мехмат. Как ни странно, выбор остановился на курсе Тинькофф Образования по QA.

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

Я не хотел работать QA-инженером, но умение обращаться с git и мотивация писать чистый код еще не раз мне пригодились и на работе, и для учебных задач.

Фото с окончания QA-курсов. Здесь я получил сертификат о прохождении программы

Затем я решил пойти на первую стажировку в Тинькофф. Подал заявку на несколько направлений, приоритетным указал ML. На отборе нужно было решить задачи по математике и программированию. Собеседование в команду машинного обучения состояло из нескольких частей: проверяли знание Python, математики и самого ML.

На части по математике спрашивали про случайные величины, просили посчитать дисперсию непрерывного равномерного распределения. На этапе с Python и машинным обучением разбирали мой ML-проект по обучению робота игре в крестики-нолики. После собеседования я получил письмо о том, что у меня мало опыта в ML и мне может понравиться направление аналитики.

Я попал в донабор стажеров-аналитиков, поэтому технических вопросов практически не было. Собеседующие интересовались, почему я стремлюсь в Тинькофф и какие задачи хотел бы решать во время стажировки.

Меня определили в отдел рекламных технологий, где я набрался опыта в реальных задачах. Помог команде понять тонкости использования библиотеки линейной регрессии Vowpal Wabbit, из-за которых та не могла обучиться простой линейной зависимости. Настроил несколько моделей для предсказания вероятности клика по контекстной рекламе и для классификации картинок с веб-ресурсов.

Стажировка длилась три месяца и предполагала занятость от 20 часов в неделю. График согласовывал с руководителем — в будни можно было распределять часы, как мне было удобно.

20 часов стажировки в будни, много-много времени на дорогу в офис, очные пары и домашки делали жизнь трудной, сонной и веселой.

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

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

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

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

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

Работа в Тинькофф. Сейчас я управляю небольшой командой аналитики нескольких страховых продуктов, занимаюсь построением отчетности, налаживанием мониторинговых процессов, проведением тестов и исследованием продуктовых гипотез с помощью ML-моделей. Глобально мне хочется закончить построение аналитики с нуля — от простейших отчетов в SAP и полного бардака в DWH до классных отчетов в Tableau и регулярного R&D. Жена говорит, что я человек-оркестр.

Мой спектр задач широк: я выполняю функции технолога, разработчика и аналитика данных.

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

Недавно я проводил собеседования на стипендию Тинькофф — это программа финансовой поддержки талантливых студентов технических специальностей. Победители получают 25 000 Р в месяц в течение года.

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

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

Но главные условия для самореализации — неполный рабочий день, свободный график и гибридный режим работы. Я учусь на кафедре математической статистики и случайных процессов, с третьего курса пишу статьи, участвую в грантах и хожу на конференции. Поэтому, кроме рабочих задач, которые слабо связаны с наукой, для меня важно изучать профильную литературу и заниматься научной деятельностью. Будучи мидл-аналитиком, я рад, что по-прежнему могу уделять много времени учебе и развитию.

ИСТОРИЯ № 3

«Мне нравится то, что я делаю, это совпадает с моими ценностями»

Отбор на стажировку. Я учился в Физтехе на факультете радиотехники и кибернетики, окончил его в 2021 году. На первом курсе работал дизайнером в университетской организации, которая проводила олимпиады и конференции для школьников. Это было хобби, позволявшее отдыхать от напряженной учебы. Еще удалось немного поработать в лаборатории, где ставили эксперименты с лазерами. Первый опыт анализа данных у меня появился как раз там.

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

Так выглядела наша экспериментальная лазерная установка

В конце третьего курса я узнал о Финтех Школе Тинькофф в сообществе компании во «Вконтакте» — тогда еще не было разделения на Финтех и Финтех Мидл. Решил поучаствовать — и прошел отбор. Основным направлением обучения был фронтенд, параллельно нам читали курс «Финтех-тренды» о том, как большие компании создают сервисы и приложения.

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

На каникулах после третьего курса появилось больше времени для работы. Этот период отлично подходил, чтобы начать карьеру со стажировки. К тому моменту у меня было два приглашения: кроме Тинькофф, я прошел отбор в «Марс». Общение со знакомыми, которые стажировались в компаниях, помогло сделать окончательный выбор.

Отбор в Тинькофф состоял из нескольких этапов. Вначале кандидаты решали школьные олимпиадные задачи в соответствии с направлением. Еще было несколько кейсов про запуск новых продуктов, которые показались мне интересными.

Тех, кто справился с первым этапом, звали на финальное собеседование. Там кандидаты по очереди общались с представителями команд, готовых взять стажеров. Нам давали несложные задачки на логику, рассказывали о себе и планах на стажировку. Пройти собеседование мне, вероятно, помог опыт участия в студенческих проектах, знание Python и навыки анализа данных.

Всем стажерам и новым сотрудникам проводят онбординг: знакомят с компанией, проектами и продуктами группы. Потом он продолжается внутри команды: новичок узнает коллег и детали предстоящих задач. Атмосфера была доброжелательной.

Все коллеги довольно молоды, поэтому мне казалось, что я просто поступил в еще один университет, где решают прикладные задачи.

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

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

Получаю диплом об успешном окончании стажировки

Работа в Тинькофф. С 2018 года из технолога я дорос до руководителя команды: мы организуем бизнес-процессы и отвечаем за реализацию идей. В частности, моя группа занимается антифродом — защитой клиентов от действий мошенников. Мне нравится то, что я делаю, это совпадает с моими ценностями.

В планах — продолжить профессиональное развитие и передавать опыт. Сейчас я прохожу внутренний курс по менеджменту, также учился на программах Тинькофф по алгоритмам и базам данных. Начинающим аналитикам и не только посоветую бесплатные курсы от Data Learn.

Я часто выступаю в роли наставника на стажировках. Периодически в работе появляются новые проекты, на которых новички могут хорошо себя проявить. Тогда ищу себе стажера через программу стажировки, на которой учился и я. Роль ментора мне нравится, стажеры приходят со свежими идеями. Нередко вспоминаю общение со своим ментором, чтобы воссоздать похожий формат взаимодействия со стажерами.

Совет новичкам. Успешному интервью способствует грамотно составленное резюме, ведь именно по нему эйчар-специалист встречает кандидата. Перед откликом на стажировку или вакансию стоит потратить немного времени, чтобы вспомнить релевантный опыт, указать свои сильные стороны. Не скромничайте, иначе ваши достижения так и останутся тайной. Содержание резюме может помочь начать разговор на собеседовании: завязать беседу со знакомых тем всегда проще.

ИСТОРИЯ № 4

«К стажерам относятся как к полноценным сотрудникам, нет предвзятости»

Отбор на курсы и стажировку. Перед началом девятого класса я участвовал в летней школе по компьютерным наукам от ВШЭ. Там семинарист моей группы рассказал про Тинькофф Поколение и порекомендовал эту программу по алгоритмам и структурам данных.

У меня уже был небольшой опыт в сфере компьютерных наук. В седьмом-восьмом классе я писал простые программы на Java, чтобы улучшить игровой сервер в Minecraft. С конца восьмого класса занимался спортивным программированием в центре поддержки одаренных детей «Стратегия» в Липецке.

Отбор в Поколение проходил удаленно. Нужно было продемонстрировать текущий уровень знаний в спортивном программировании. Я прошел отбор и выбрал направление «алгоритмы и структуры данных». На нем готовят к олимпиадам по программированию, за призерство в которых можно получить преимущества при зачислении в вуз. Тогда результаты ЕГЭ не важны и требуется лишь набрать минимальный балл.

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

Навыки, приобретенные на курсе, помогли мне: я получил два диплома призера олимпиад из перечня РСОШ, стал призером в «Турнире Ломоносова» по информатике и в олимпиаде ИТМО по информатике.

Учеба в Тинькофф Поколении держала меня в тонусе, непрерывно давала новые знания, формировала круг общения.

Для поступления рассматривал программную инженерию в ИТМО и НИУ ВШЭ. Программа ВШЭ привлекала отсутствием проблемных для меня физики и истории. Тинькофф Поколение, участие в профильных выездных школах и образовательных сменах среди года помогли мне поступить туда.

Во время учебы в университете мне пригодились все полученные навыки: вузовские курсы по алгоритмам и структурам данных, программированию практически дублировали Тинькофф Поколение. Я не ходил на лекции по этим предметам, на практике часть задач копировал с курса, а часть решал с нуля, используя имеющиеся знания.

В середине первого курса я решил постажироваться в Тинькофф: компания была мне близка, я пользовался ее продуктами. У меня был план поступить на программу «Тинькофф Старт».

Для отбора требовалось решить задачи, используя знания в области алгоритмов и структур данных, а также заполнить анкету с указанием профессионального опыта. Работать можно было от 20 до 40 часов в неделю — я выбрал 20, чтобы совмещать с учебой.

У кандидатов было собеседование в один этап. У меня спросили об опыте в SQL, Docker и Python, предложили рассказать о проектах, которые я указал в анкете, и решить несколько задач на логику и код.

Тогда у меня было несколько проектов. Основным и самым крупным был чат-бот для перевода голосовых сообщений во «Вконтакте» в текст — до того, как соцсеть сама ввела такую функциональность. На развитие бота мне даже донатили разработчики «Вконтакте». Еще один проект я делал для своего лицея — ПО для большой сенсорной информационной панели. Эта программа позволяла размещать картинки на сенсорной доске. Можно было нажимать на них и открывать их большие версии.

Один из моих проектов — ПО для сенсорных панелей

На отборе запомнилось, как я сравнивал типы данных и их эффективность. В этом здорово помог опыт участия в Тинькофф Поколении. Он дал мне конкурентное преимущество, поскольку компания понимает: скорее всего, я лояльнее многих других кандидатов, ранее уже прошел отбор на курс для школьников и завершил его.

К стажерам в Тинькофф относятся как к полноценным сотрудникам, здесь нет предвзятости. Стажировка — это своего рода испытательный срок, при этом вначале в компании не ждут, что ты будешь самостоятельным сотрудником, и готовы всячески помогать стажеру, учить новому.

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

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

Я с одной из футболок Тинькофф

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

Я учился не только на стажировках, но и проходил дополнительные курсы по специальности. К примеру, я освоил «Введение в программирование на C++» на «Степике». Это курс для тех, кто начинает свой путь в олимпиадном программировании. Еще один пройденный курс на «Степике» — «Программирование на Python» от Института биоинформатики.

Плюс продолжаю получать знания на работе. У сотрудников банка есть доступ к различным образовательным материалам — например, записям Тинькофф Финтеха, внутренних митапов, а также к видеокурсам специально для внутреннего использования. Я посмотрел несколько лекций Финтеха по Python — это хороший курс, дает глубокое понимание ряда тем. Кроме этого, готовлюсь к аттестациям, которые в компании проводятся два раза в год и позволяют получить повышение после ревью или пересмотреть зарплату.

Есть что вспомнить про учебу в университете? Расскажите и станьте героем следующего материала

Понравилась статья? Поделить с друзьями:
  • Экзамен sql microsoft
  • Экзамен spi что это
  • Экзамен oracle sql 1z0 071 что это
  • Экзамен oracle dba
  • Экзамен nsk по китайскому языку