Русский
Русский
English
Статистика
Реклама

Ozon.ru

Как Ozon, Тинькофф, Яндекс.Практикум, Школа 21 и GeekBrains учат разработчиков

23.07.2020 10:06:27 | Автор: admin
Мы собрали руководителей образовательных проектов Тинькофф, Яндекс.Практикума, Школы 21 и GeekBrains, позвали нашего CTO Антона Степаненко и хедхантера Алену Владимирскую и поговорили о том, чему и как учат компании, и кого готовы нанять. В этом тексте собрали тезисы докладов и ответы на вопросы, конечно.

Ozon: образовательный хаб для ИТ в e-commerce


У Ozon сразу несколько образовательных проектов для взрослых (есть еще и детские, но о них отдельно): курсы Ozon New Skills, магистерская программа в области Data Science и Business Intelligence Ozon Masters, а также школа Ozon Go. Основная цель запуска собственных образовательных проектов найм специалистов. Так, на языке Go написано порядка 60% сервисов компании, и выпускники школы после ее успешного окончания получат предложения о работе в Ozon. Собственные образовательные программы позволяют научить специалистов нужному стеку технологий и дать навык работы с реальными бизнес-кейсами, а значит, специалисты после их окончания начнут приносить пользу бизнесу быстрее.
Сейчас в IT-лаборатории Ozon открыто порядка 140 вакансий в самых разных направлениях, при этом стать частью команды могут как опытные специалисты, так и начинающие например, в Ozon работают выпускники Школы 21 и Яндекс.Практикума.

image

Яндекс.Практикум: не обязательно в Яндекс


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

image

В результате около 70% выпускников трудоустраивается за 35 месяцев после окончания обучения, а некоторые находят работу даже в процессе. И даже после выхода на работу выпускники Яндекс.Практикума получают поддержку во время испытательного срока в новой компании.

Тинькофф: финтех на практике


Екатерина Шестимерова, руководитель образовательных программ Тинькофф Банка, рассказала о программах компании:
  • Тинькофф Финтех курсы для студентов и выпускников вузов, посвященные разработке и аналитике.
  • Тинькофф Старт практика по разработке и аналитике для студентов и выпускников вузов.
  • Тинькофф Академия партнерские программы с вузами (МФТИ, МГУ, УрФУ, СПбГУ).
  • Тинькофф Поколение курсы для школьников, где учат работе с алгоритмами и структурами данных, олимпиадной математике, машинному обучению.

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

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

У каждого из типов есть свои плюсы и минусы, которые отражают и особенности образовательных программ университетов и бизнеса

image

При создании курсов Тинькофф ориентируется на задачи бизнеса вакансии, потребности подразделений. А поскольку курсы составляют в том числе сотрудники компании, обучение заточено под реальные задачи, и примерно 15% студентов попадают в штат компании после окончания курсов.

Школа 21: обучение peer-2-peer


Светлана Нохрина, директор по работе с партнерами проекта, рассказала, об одном из крупнейших образовательных проектов в IT Школе 21, созданной Сбербанком по методике Ecole 42 французского проекта, ориентированного на практические задачи. В школе занимается около 2 тысяч студентов самого разного возраста, пола и с разным бэкграундом.

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

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

Чтобы помочь выпускникам найти работу, Школа приглашает экспертов разных компаний рассказать о о том, на чем сделать акцент в развитии и как пройти собеседование. Около 200 студентов школы сейчас проходят стажировку, а 98%, как показывает практика, получают оффер после завершения стажировки.

В карьерной гонке преуспевают активные люди, которые твердо решили, чего хотят, изучили рынок и постоянно развиваются. А при трудоустройстве наибольшую роль для работодателя играет GitHub кандидата и его soft skills, а не резюме или сертификаты с курсов.

GeekBrains: учеба с гарантиями


Александр Скударнов, EdProduct направления Программирование образовательного портала GeekBrains, начал с того, что отметил: гарантирю трудоустройство никто не даст.
Обучение это двусторонний процесс, трудоустройство по результатам которого во многом зависит от ученика и его усилий, курсы создают для этого благоприятную среду.

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

Также Александр дал большой чек-лист для тех, кто ищет себе образовательные курсы с помощью в поиске работы:
image
image
image

Вопросы-ответы


Каковы шансы человека старше 35-40 лет войти в новую профессию с помощью курсов?
Ровно такие же, как у специалистов других возрастов.

Есть ли курсы, ориентированные на международный рынок?

Российские компании используют в работе и обучают передовому стеку технологий, а значит, полученные на курсах знания, будут востребованы и в других странах. У Яндекс.Практикума даже можно пройти обучение на английском и записаться на американскую версию курса. А участники Школы 21, которая является частью Ecole 42, могут сменить кампус и работать в любой стране, где также работает программа.

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

Как вы преподаете системотехнические навыки? Складывается ощущение, что вы делаете акцент на языках программирования.

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

Сколько человек проходят ваши курсы до конца?

GeekBrains 2530%. Обучение длится год или полтора.
Яндекс.Практикум 70%. Длительность обучения зависит от программы, от 6 до 9 месяцев.
В Ozon Masters на второй год прошли 70%. Программа Ozon Go только началась. Если судить по результатам стажировки, сотрудниками становятся примерно половина студентов.
Тинькофф Финтех 50%, обучение идет 3 месяца. Магистерские программы 95% (2 года). Стажировки 95%. Тинькофф Поколение 85-90% (1 год).

Как вы работаете с уровнем преподавателей и их контролем? Ориентируетесь ли на западные методики?

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

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

У Школы 21 также нет преподавателей, однако методологию курсов развивают постоянно, а обучение идет в ногу с потребностями рынка.

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

А для тех, кто все же предпочитает видео, мы оставим его здесь:

Остались вопросы? Пишите в комментариях, и участники митапа на них обязательно ответят!
Подробнее..

Как мы провели первый набор в школу Ozon Go этапы, задачи, их решения и запись демо-дня

23.06.2020 20:12:31 | Автор: admin

В мае стартовал первый набор школы Ozon Go, за три недели мы получили почти 5 тысяч заявок, ответили на несколько тысяч вопросов, провели 118 собеседований, один онлайн-митап и отловили один баг в задании. Подробности под катом.


Как проходил отбор


Несмотря на то, что порог входа для Go невысок, чтобы освоить его на уровне middle за два месяца (а именно столько длится обучение), нужно уметь писать код на любом другом языке поэтому на первом этапе мы попросили рассказать о себе, прислав резюме и ссылки на Github. На этом этапе мы никого не отсеивали, попробовать свои силы мог любой желающий даже несмотря на требования от года опыта промышленного программирования.


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


Поскольку заявок и решений было много, критерии отбора пришлось сделать строгими. Мы приглашали на собеседование, оценив резюме, решения и присланный код. Кроме того, мы обращали внимание на количество языков, которые использовались для решения задач. Опыт работы важен, две компании и работа в e-commerce это плюс. Поскольку для нас важно, чтобы после окончания обучения специалист остался в команде Ozon, важным фактором была готовность переехать, если разработчик живет не в Москве и области а рассматривали мы заявки со всей России, и в итоге пригласили ребят из 9 городов.Поскольку успешным выпускникам мы предложим присоединиться к команде Ozon и хотелось бы, чтобы таких было 100%, на третьем этапе мы проводили традиционное HR-собеседование.


И уже тех, кто успешно справился с задачами, прошел собеседование, подтвердил готовность учиться, прислал все необходимые документы, мы пригласили стать студентами школы Ozon Go.


И немного цифр


4730 заявок
2220 разработчиков выполнили тестовые задания
930 выполнили 4 и более задач
118 мы пригласили на собеседование
41 разработчик стал студентом Ozon Go
Наши студенты живут в 9 городах: Москве, Санкт-Петербурге, Перми, Краснодаре, Пензе, Челябинске, Екатеринбурге, Уфе, Брянске.


Задачи и их решения


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


Задача А


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


Решения


Хешмап с встречаемостью значений


Построить хешмапу с ключом, в которой в качестве ключа будет полученное число и значение количеством раз сколько оно встретилось. Это потребует проход по массиву сложность O(N), затраты памяти O(N).


Далее пройти по мапе и найти то число, которое встретилось 1 раз.


Использовать четность встречаемости


Можно обратить внимание, что каждое значение, кроме единственного, встречается 2 раза. Как можно использовать этот факт? Предположим, что у нас есть некоторая операция, которая будучи примененная 2 раза с одним и тем же операндом отменяет сама себя. Аналогично операции NOT для булевых значений. Возьмем изначально значение true, применим к нему операцию NOT получим false. Применив ту же операцию еще раз мы вернем изначальное значение true.


Существует ли аналогичная операция, которая может принимать 2 операнда целых числа? Например, NOT (инверсия) по маске второму операнду. Тогда применив ее с одной и той же маской дважды мы должны получить исходное значение.


Это потребует проход по массиву сложность O(N), затраты памяти O(1).


Пример кода (импорты опущены):


func main() {    scanner := bufio.NewScanner(os.Stdin)    var x int    for scanner.Scan() {        txt := scanner.Text()        n, err := strconv.Atoi(txt)        if err != nil {            fmt.Fprintf(os.Stderr, "Error parsing number: '%v', err: %v\n", txt, err)            continue        }        x ^= n    }    if err := scanner.Err(); err != nil {        fmt.Fprintf(os.Stderr, "Error: %v:", err)    }    res := int(0 ^ x)    fmt.Printf("%v\n", res)}

Задача B


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


Решение


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


SELECT g.* FROM goods g LEFT JOIN goods_tags  gt ON g.id=gt.goods_id GROUP BY gt.goods_id HAVING count(gt.tag_id) = (SELECT count(id) FROM tags);

Задача F


Ограничение времени 1.5 секунд (ранее была 1 секунда)
Ограничение памяти 64Mb
Дано целое положительное число "target". Также дана последовательность из целых положительных чисел. Необходимо записать в выходной файл "1", если в последовательности есть два числа сумма, которых равна значению "target" или "0" если таких нет.


Ввод input.txt
Вывод output.txt
Формат ввода
5
1 7 3 4 7 9


Формат вывода 1


Примечания: Все числа, используемые в задаче, находятся в диапазоне 0 < N < 999999999
Название входной файл: input.txt
Название выходной файл: output.txt


1 секунда оказалась жёстким ограничением, поэтому участникам советовали решать на C# или C++, хотя можно было выбрать любой другой язык программирования. Судя по комментариям участников сложнее всего решалось на PHP и Python.


Решение


Тесты к задаче были разбиты на 3 уровня сложности. Первые несколько тестов можно было пройти прямым перебором (сложность O(n2)), главное было не запутаться в решении. Так же были несколько тестов на граничные кейсы.


Следующий набор тестов проверял знание более оптимального решения. Одним из правильных решений было отсортировать массив входных данных и затем начать поиск любым известным алгоритмом (варианты можно посмотреть тут https://web.stanford.edu/class/cs9/sample_probs/TwoSum.pdf).


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


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


Задача D


Даны два неотрицательных числа A и B (числа могут содержать до 1000 цифр). Вам нужно вычислить их сумму. Тут проверяется умение работать с стандартной библиотекой вывода.


Формат ввода
Первая строка ввода содержит числа A и B, разделенные пробелом
Формат вывода
Результат сложения двух чисел нужно вывести на отдельной строке.


Подход к решению


Решение можно разбить на 3 этапа:


  1. Прочитать входные данные


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


  2. Произвести сложение


    Тут есть 2 возможных варианта решения:


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


    2.2. Реализовать сложение самому(как в школе в столбик). Этот вариант тоже приемлемый, как минимум потому что не в каждом ЯП есть встроенная поддержка работы с большими числами. Так же тут проверяется что человек умеет работать с краевыми случаями (например числа с разным количеством цифр)


  3. Вывести результат



Задача E


Необходимо написать функцию func Merge2Channels(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) в package main.


Описание ее работы:
n раз сделать следующее
прочитать по одному числу из каждого из двух каналов in1 и in2, назовем их x1 и x2.
вычислить f(x1) + f(x2)
записать полученное значение в out
Функция Merge2Channels должна быть неблокирующей, сразу возвращая управление.
Функция f может работать долгое время, ожидая чего-либо или производя вычисления.


Подход к решению


Возможное решение
В цикле:


a1 := <-in1b1 := f(a1)a2 := <-in2b2 := f(a)c := b1 + b2out <- c

Недостаток


Последовательно ожидаются:


  • чтение из канала 1
  • вычисление функции
  • чтение из канала 2
  • вычисление функции

Функция которую мы вызываем может работать долго, равно как возможны и задержки при чтении из каналов. В условии сказано что функцию можно вызывать параллельно.
Давайте этим воспользуемся!


Правильное решение


Будем на каждое чтение создавать по 2 горутины, каждая из которых:


  • читает из своего канала
  • вычисляет значение функции
  • пишет его в канал

После чего будем их параллельно запускать:


go func() {  value1 := <-in1  convertedValue1 := f(value1)  done1 <- convertedValue1}()go func() {  value2 := <-in2  convertedValue2 := f(value2)  done2 <- convertedValue2}()convertedValue1 := <-done1convertedValue2 := <-done2out <- convertedValue1 + convertedValue2i++

Язык Go обладает достаточно простым синтаксисом, многие возможности имеющиеся в других языках программирования (обобщенные типы, исключения, наследование) отсутствуют. Однако, в сам язык встроены очень удобные и простые средства параллелизма (горутины, каналы). Задача предполагала начальное владение этими средствами, чтобы ускорить вычисление функции. Мотивировка: функция запрос на удаленный сервер, долгая работа сетевые задержки.


Примеры решения участников


Номер раз


package mainfunc Merge2Channels(f func (int) int, in1 <-chan int, in2 <-chan int, out chan<- int, n int) {    f1 := make(chan int)    f2 := make(chan int)    calcF := func(in <-chan int, fo chan<- int) {        for i := 0; i < n; i++ {            fo <- f(<- in)        }    }    go calcF(in1, f1)    go calcF(in2, f2)    go func() {        for i := 0; i < n; i++ {            out <- (<- f1) + (<- f2)        }    }()}

Номер два


package mainfunc Merge2Channels(f func(int) int, in1 <-chan int, in2 <-chan int, out chan<- int, n int) {    line := make(chan int, n)    out2 := make(chan int, n)    go func() {        for i := 0; i < n; i++ {            var count = i            var x1 = <-in1            var x2 = <-in2            go func() {                var result = f(x1) + f(x2)                out2 <- result                line <- count            }()        }    }()    go func() {        answer := make(map[int]int)        for i := 0; i < n; i++ {            var xL = <-line            var xO = <-out2            answer[xL] = xO        }        for i := 0; i < n; i++ {            out <- answer[i]        }    }()}

Что пошло не так


Мы допустили в задании Е сразу несколько ошибок. Go был не заложен в платформу Яндекс.Контест по нашей просьбе туда добавили специальный компилятор Make. В задание был заложен один чекер-алгоритм проверки решения, для идеального сценария проверки решений нужно несколько чекеров и дополнительных настроек.


Условия были недостаточно подробными, поэтому мы отправили сообщением всем участникам отбора с уточнениями по формату вывода:


package mainfunc Merge2Channels(...) {...}

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


package mainimport (  "os")func Merge2Channels(f func(int) int, in1 <-chan int, in2 <-chan int, out chan<- int, n int) {    go func() {        for ; n > 0; n-- {            x1 := <-in1            x2 := <-in2            out <- f(x1) + f(x2)        }    }()    cheat()}func cheat() {    file, _ := os.OpenFile("см формат вывода", os.O_RDWR, 0666)    file.WriteString("true")    file.Close()}

Задание получилось спорным. Для перехода на следующий этап его решение сделали необязательным мы засчитывали решение 4 из 5 задач и более как успешное.


Демо-день Ozon Go


Чтобы ответить на вопросы, которые неизбежно возникают при отборе, а заодно рассказать о школе и разработке в Ozon, мы провели онлайн демо-день.


Что было в программе


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


Владимир Сердюков, ведущий разработчик команды Личный кабинет о сервисах Ozon, написанных на Go.


Организаторы школы Оля Зверева и Сергей Федосенко, руководитель отдела разработки Маршрутизация магистральных перевозок о программе, этапах отбора собеседованиях и всем, что касается учебного процесса.



Lets Go!


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

Подробнее..

Мы все записали доклады Ozon на GopherCon Online 2020

21.08.2020 10:13:31 | Автор: admin
Привет, Хабр! В этом году для GopherCon команда Ozon Tech подготовила пару часов докладов на самые разные темы: от классических о микросервисной архитектуре, до по-настоящему гошных.
image

Итак для всех, кто пропустил онлайн, в нашем плейлисте доклады от разработчиков одной из самых больших Golang-команд России.


Михаил Кабищев, руководитель группы разработки платформы: Continuous profiling для Go приложений

Рано или поздно каждый Go разработчик сталкивается с необходимостью профилирования Go-приложений, и на помощь к нему приходит замечательный инструмент под названием pprof. Но иногда возникают ситуации, когда профили нужно одновременно снять со всех копий одного приложения, или же вы хотите узнать, что именно творилось в сервисе в 3 часа ночи во время стресс-тестов? Или самое банальное у вас нет доступа в production-сеть, а разбираться нужно.

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

Евгений Лисицкий, руководитель группы разработки Тарификатор, Алексей Клементьев, руководитель группы разработки Маршрутизатор: Эволюция маршрутизации курьеров в Ozon

Каждый день курьеры Ozon доставляют более 200 тысяч заказов. Рассказываем, как создаются маршруты для курьеров и как можно решать задачи маршрутизации с минимальными затратами.

Владислав Сидоров, руководитель группы разработки Поисковая оптимизация / Инструменты: Микросервисная архитектура: опыт Ozon

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

Владимир Сердюков, ведущий разработчик группы Личный кабинет: Как перестать думать об обязательных полях и начать писать контракты

Backend-Driven UI предполагает работу с большим количеством разных контрактов. Требования (как и новые элементы интерфейса) меняются с молниеносной скоростью, особенно в продуктовой разработке. Этот доклад о том как готовить контракты используя protobuff, в чем подвох при работе с required полями и как проверить правильность их формирования. И, конечно, что нас ждет в API v2.

Смотреть видео:


Есть вопросы по докладам? Го в комментарии!
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru