Что должен знать middle c
Перейти к содержимому

Что должен знать middle c

  • автор:

Что должен знать junior, middle, senior разработчик: отличия уровней и как расти

Кем ты видишь себя через 5 лет? Рекрутеры и HR-менеджеры не устают задавать это вопрос, а кандидаты продолжают скромно отвечать: middle, senior, team lead.

Но каким путем достичь этих профессиональных уровней? Что нужно сделать, чтобы выбраться из позиции junior и с гордостью написать в LinkedIn middle? И как выглядит дальнейшее карьерное развитие? Чем middle принципиально отличается от senior? Отвечаем на эти вопросы в статье и разбираем ключевые навыки разработчика на каждом этапе.

Как стать junior разработчиком?

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

  1. Стажер (trainee) — Это человек, который находится на шаге до того, чтобы стать junior-разработчиком. Trainee уже знают основы языка программирования, однако применять его для решения реальных задач еще не умеют. Каждая задача должна быть разписана пошагово от А до Я. В основном, это стажировка. То есть trainee работает на опыте, но о фиксированной зарплате пока не идет речь.
  2. Junior-новичок. Это стадия, на которой junior получает первый оффер на фултайм, а вместе с тем свои первые реальные задачи. Такой разработчик имеет достаточно знаний, чтобы выполнять простые задачи без детального описания. Новичок умеет работать с документацией и находить в ней нужную информацию. Главные задачи на этом этапе — «набивать собственные шишки», учиться у опытных коллег и задавать много вопросов..
  3. Middle junior developer. На этом этапе уже можно покупать футболки с IT-шными приколами. Испытательный срок за плечами, а все процессы командной разработки уже понятны. Теперь этому специалисту можно давать задачу и не контролировать ее выполнение в течение дня. Самостоятельно декомпозировать задачи такой junior еще не умеет, но уже ставит более глубокие и конкретные вопросы.
  4. Strong junior. Это категория, на которой специалист по техническим навыкам уже middle или очень близкий к нему. Последнее, чего не хватает, — это существенный опыт в решении бизнес-задач.

Как стать middle developer?

Middle — это программист, который, в отличие от junior-специалиста, уже умеет решать свои проблемы самостоятельно. Но старшие коллеги могут помочь, если возникли трудности, с которыми middle не может до конца разобраться без помощи.

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

Hard skills

  • Понимание технологий, используемых в работе. Middle-специалист должен хорошо разбираться в программе, которую он пишет. Важно понимать, как работают определенные конструкции языка и уметь объяснить это другому человеку простыми словами.
  • Проведение code-review. Умение разбираться в чужом коде — прекрасный способ поделиться своим опытом. Кроме того, это позволяет понять общую структуру программы и увидеть места, которые можно улучшить.
  • Умение декомпозировать задачи. Обычно программист среднего уровня пишет код дольше, чем junior. Это связано с тем, что опытный специалист сначала должен разбить свою задачу на несколько последовательных этапов и ответить на вопросы, почему план выглядит именно так. В дальнейшем это поможет аргументировать свои решения. Также это тренирует умение разбираться в чужом коде.
  • Насмотренность и любопытство. Для того, чтобы принимать правильные решения, необходимо увидеть множество плохих и хороших решений других разработчиков. Специалист среднего уровня (вообще, как и специалист любого уровня) должен быть в контексте всего, что происходит в индустрии: технологии, практики, успехи и неудачи.
  • Понимание алгоритмов и того, где их можно применять. Мир программирования меняется очень быстро, но алгоритмы остаются стабильными. Важно понимать причинно-следственные связи работы определенных вещей, а также применять алгоритмы на практике, вместо того, чтобы мучить себя сухим заучиванием.
  • Умение писать понятный код. Опытный разработчик всегда пишет простой код, который будет понятен коллегам.

Soft skills

  • Самостоятельность
  • Умение видеть требования бизнеса
  • Понимание конечной цели проекта
  • Классные коммуникативные навыки
  • Уровень английского Upper-Intermediate и выше
  • Умение ясно доносить свои мысли
  • Стремление к дальнейшему карьерному росту

Как стать senior разработчиком?

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

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

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

Так что же нужно иметь/знать/уметь перед тем, как подаваться на performance review на этот профессиональный уровень?

  • Опыт. Главный показатель опытности — успешно запущенные IT-продукты, которые работают и решают определенную задачу бизнеса.
  • Технические навыки. Senior создает и продумывает архитектуру проекта, пишет инструменты для решения задач в разработке и фреймворки, которыми пользуются джуниоры и мидл-специалисты. От senior разработчика требуют не только найти решение, но и убедить в его правильности заказчика и команду.
  • Понимание всей картины проекта. Для одной задачи существует множество решений, но именно senior разработчик способен определить, какое является оптимальным в конкретном случае.
  • Коммуникативные навыки. Senior программист часто ведет проекты самостоятельно, поэтому очень важно уметь обрабатывать ТЗ (техническое задание) заказчика, задавать правильные вопросы, устанавливать сроки выполнения и строить план работ. Кроме того, работа в команде все еще остается очень важной составляющей. Senior умеет организовать рабочий процесс и не боится таких терминов, как Agile, Scrum и Kanban.
  • Навыкиментора и интервьюера. Подбор персонала и обучение новичков часто лежит на плечах senior-разработчика. Опыт позволяет выбрать, какие вопросы ставить, чтобы определить сильные и слабые стороны кандидата, а также как организовать рабочий процесс для тех, кто уже прошел собеседование.

А что дальше? Куди расти senior?

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

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

Куда может развиваться senior-разработчик?

Техлид (Tech Lead)

Также CTO (Chief Technical/Technology Officer) или CIO (Chief Information Officer). Это специалист, который строит архитектуру для всей команды и является самым сильным разработчиком в команде. Именно техлид выбирает техническое решение задачи: предлагает использовать определенные фреймворки, технологии и библиотеки. В обязанности также входит проверка кода и решение самых сложных или ответственных технических задач.

Тимлид (Team Lead)

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

Проект-менеджер (Project Manager)

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

IT-архитектор

Разработчик с большим опытом реализации коммерческих проектов, который умеет закладывать архитектуру (каркас) сложной IT-системы. Главная задача IT-архитектора — найти оптимальное решение между потребностями заказчика и возможностями команды.

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

Если тебе нравится IT сфера и ты только думаешь о карьере в айти, пройди наш профориентационный тест. Узнай, какая специальность подходит именно тебе. Или выбирай один из наших it курсов и успешно расти от Junior до Senior и выше ��

Что должен уметь мидл в разных компаниях

Хотите работать в продуктовой компании, но не знаете, как туда попасть? Мы всё выяснили за вас. Мы связались с разработчиками из Тинькофф, «Вконтакте», «Проксиматики», PetShop и EPAM и узнали, кого они видят в качестве мидл-фронтендера у себя в компании.

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

Общие навыки

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

Ещё обязательно знать ванильный JavaScript, TypeScript и минимум один фреймворк. Самый популярный — React, его используют во всех компаниях. В Тинькофф некоторые команды программируют ещё и на Angular, а во «Вконтакте» — на Vue. В EPAM выбор ещё шире: здесь мидлы должны владеть React, Angular или Vue.

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

Petshop

Petshop — крупнейший интернет-магазин товаров для животных в России. Чтобы устроиться сюда разработчиком, нужно хорошо владеть React и Redux: не только знать правила и ограничения библиотек, но и понимать, с чем они связаны. Здесь важно разбираться в SSR — он не играет ключевую роль на собеседовании, но для работы понадобится. Ещё разработчики должны уметь читать чужой код, а при написании своего нужно следовать принципам SOLID и KISS.

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

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

Владимир Турецкий, фронтенд-разработчик Petshop

Что нужно знать: HTML, CSS, JS, React, TypeScript, SSR, Redux.

Проксиматика

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

Разработка здесь ведётся на React, поэтому фронтендер должен разбираться в функциональных компонентах. А вот в классовых — необязательно, их стараются не использовать. Ещё нужно знать маршрутизацию, управление состоянием, SSR и организацию взаимодействия с бэкендом.

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

Волков Максим, генеральный директор «Проксиматики»

Что нужно знать: HTML, CSS, JS, React, TypeScript, GraphQL, Rest API, SSR.

Тинькофф

В Тинькофф своя система грейдов: здесь есть джун-, джун и джун+, мидл-, мидл и мидл+, а ещё сеньоры. Уровень разработчика проверяется по двум матрицам компетенций: для софт-скиллов и хард-скиллов.

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

Хард-скиллы. Хардовая матрица у каждой команды своя. В Тинькофф нет должности фронтенд-разработчика — вместо него JavaScript-разработчик, и это направление делится на React, Angular и Node. js. Соответственно от того, в какой команде фронтендер, зависит то, такие технологии он должен знать. Но есть и общие навыки для всех команд. Например, мидлы должны понимать браузерный рендеринг и API, работать со сборщиками webpack и Babel.

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

Мидлы должны разбираться в производительности и оптимизации приложений. Знать хотя бы на базовом уровне про безопасность: XSS-атаки и CORS, отличать авторизацию от аутентификации. Нужно понимать веб-архитектуру и хотя бы немного разбираться в том, как работает мониторинг: читать логи, искать ошибки и исправлять баги.

Если ты претендуешь на уровень «мидл+», то дополнительно проходишь собеседование на веб-архитектуру. Здесь нужно понимать архитектурные особенности, что такое микрофронтенды, зачем они нужны, как с ними работать, как работать с CDN и нужен ли он. Но если ты мидл и участвовал в запуске нового проекта, ты хотя бы на минимальном уровне всё это знаешь

Николай Тихонов, фронтенд-разработчик Тинькофф

Что нужно знать: HTML, CSS, JS, React, Angular или Node. js, TypeScript, Redux, юнит-тесты, JS Core, Rest API.

EPAM Systems

EPAM — крупная международная IT-компания. Здесь производят ПО для финансовых, торговых, медицинских, медиа- и других организаций.

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

  • понимать, что такое хойстинг и какая разница в хойстинге переменных, объявленных при помощи разных ключевых слов;
  • хорошо знать синтаксис создания функций: понимать разницу между функциональным выражением и объявлением функции;
  • уметь решать задачи на всплытие переменных и функций, понимать замыкания и области видимости;
  • разбираться, как парсится JS и как работает токенизация;
  • понимать, как назначается и теряется контекст выполнения функции;
  • как работают методы call() , apply() и bind() ;
  • писать кастомный bind;
  • понимать асинхронность и промисы;
  • решать задачи с then() , catch() и finally() ;
  • подключать скрипты c атрибутами async и defer , при этом понимая разницу между ними.

Ещё у них должно быть общее понимание работы приложения и взаимодействия с бэкендом, представления о сборке проекта.

Если вы подумали, что все эти навыки могут быть и у джуна — то вы отчасти правы. Разница в степени погружения: мидлы должны глубже разбираться в конструкциях JS и применять их без ошибок.

И это ещё не все. Чтобы устроиться в EPAM, нужен английский уровня A2 или B1. Без него никак, потому что часть собеседования проходит на иностранном языке. А при повышении грейда проводится комиссия уже полностью на английском — здесь нужен уровень владения языком B1 или B1+.

Что нужно знать: английский язык, HTML, CSS, JS, JS Core, OSI, протоколы, React, Angular или Vue.

«Вконтакте»

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

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

Чтобы устроиться сюда, нужно знать Redux, webpack, Immer, уметь проводить тестирование и работать со Storybook. Разные команды используют разные инструменты, причём младшие и старшие разработчики обычно находятся в одном стеке разработки.

Что нужно знать: HTML, CSS, JS, TypeScript, webpack, React, Immer, Storybook, юнит-тесты, React Redux, Vue. js (Vuex).

Заключение

У каждой компании свой набор требований и своя сетка грейдов. Но есть технологии, которые требуются почти на любой работе: HTML, CSS, JavaScript, TypeScript и реактивные фреймворки. Советуем хорошо изучить их, чтобы подходить максимальному числу работодателей. А если хочется попасть в конкретную компанию, заранее узнайте, какой там стек, и прицельно изучайте эти технологии.

150+ вопросов по .NET для Junior, Middle и Senior

150+ вопросов по .NET для Junior, Middle и Senior

11.11.2020

176866

Рейтинг: 5 . Проголосовало: 23
Вы проголосовали:
Для голосования нужно авторизироваться

advertisement advertisement

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 10 ноября 2020 года. Оригинальная версия на украинском языке доступна по ссылке.

На DOU размещено более 450 вакансий для .NET-разработчиков, что свидетельствует о популярности этой технологии. Редакция DOU собрала вопросы, которые .NET-разработчики задают своим коллегам на технических собеседованиях. Готовьтесь на здоровье 🙂

Вопросы для Junior

Общее

1. Назовите основные принципы ООП.

2. Что такое наследование, инкапсуляция, абстракция, полиморфизм: приведите примеры (желательно из собственного опыта). От какого класса неявно наследуются все классы в .NET? Разрешено ли множественное наследование в C#?

3. Что такое рекурсия?

4. Что такое лямбда-выражение?

5. Что такое параллельное программирование (многопоточность) и его назначение? Какие классы используются?

6. Что такое JSON?

7. Как вы понимаете REST?

8. Расскажите о SPA concept.

9. Какие GoF-паттерны использовали?

10. Какая разница между GET и POST HTTP методами?

11. Какую проблему решает Docker? Каковы его плюсы и минусы?

12. Чем принципиально отличаются unit-тесты от интеграционных тестов?

Обработка исключений

13. Что такое Exception?

14. Для чего служат try, catch, finally? В каком случае может не выполниться блок finally?

15. Что такое call stack? Какие ключевые слова вы знаете?

Платформа .NET

16. Что такое ASP.NET?

17. Какие существуют типы Action filters?

18. Что такое Web Service?

19. Что такое CLR?

20. Что такое сборщик мусора (Garbage Collector) на базовом уровне?

21. Что такое делегат?

22. Отличается ли Delegate от Action?

advertisement advertisement

23. Что такое LINQ и для чего используется? Приведите несколько примеров применения LINQ.

24. Что такое пространство имен (namespace) и зачем это нужно?

Типы данных, коллекции и структуры данных

25. Какие типы данных вы знаете?

26. Какие примитивные типы знаете?

27. Что такое Nullable-тип?

28. Что такое тип значения, а что такое тип ссылки? Что из этого class, а что struct? В каком участке памяти они хранятся?

29. Чем отличаются value от reference type? String — это reference или value?

30.В чем отличие между string builder и string?

31. Что такое дженерики? Какие проблемы они решают?

32. Что такое boxing / unboxing?

33. Что такое Array, List, HashSet, Dictionary? Приведите примеры использования этих структур данных. Какая сложность операций с ними (поиск, вставка, удаление)?

34. Какие знаете коллекции?

35. Что делает оператор yield?

Классы, структуры и интерфейсы

36. Что такое класс?

37. Чем отличается класс от абстрактного класса?

38. Чем отличается абстрактный класс от интерфейса? Для чего нужны интерфейсы и какие задачи они выполняют?

39. Какие вы знаете модификаторы доступа?

40. В чем разница между обычным классом и статическим?

41. В чем разница переопределения метода между ключевыми словами new и override?

42. Какое различие между const и read only?

43. Разница между структурой и классом. Приведите примеры структур.

44. Может ли экземпляр структуры храниться в куче (heap)? Как это сделать?

Асинхронность

45. Что такое асинхронность и чем она отличается от многопоточности?

46. Какие есть ключевые слова для использования асинхронности в коде?

47. Что означают ключевые слова async / await?

Базы данных

48. Разница между реляционными и нереляционными базами, плюсы и минусы использования обоих вариантов.

49. Что такое индексы в RDBMS?

50. Какие типы JOIN существуют в SQL?

Тестирование

51. Для чего нужны unit-тесты?

52. Какие преимущества и недостатки использования unit-тестов?

53. Из каких трех логических блоков состоит unit-тест?

Вопросы для Middle

Общее

54. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время на HTTP-уровне?

55. Как работает HTTPS?

56. Как вы понимаете SOLID?

57. Какие протоколы сериализации вы знаете и где они применяются?

58. Что такое в вашем понимании чистая функция? Какие у нее преимущества?

Тема связана со специальностями:

59. Что такое dependency injection и зачем оно нужно?

60. Что такое cohesion и coupling (связанность и связность)?

61. Что такое IaaS, PaaS, SaaS и каковы различия между ними?

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

63. Какие знаете паттерны? Объясните суть перечисленных.

64. В чем суть паттерна Singleton? Почему его еще называют антипаттерном?

65. Для чего нужен паттерн Strategy?

66. Какие ключевые различия между распределенными системами и монолитными?

67. Какие паттерны проектирования распределенных систем вы знаете?

68. Какие есть принципы работы Message bus? Почему могут возникать дубликаты в очередях?

69. Какие принципы построения идемпотентных сервисов знаете?

70. Расскажите, как работают асинхронные методы? Чем асинхронность отличается от параллелизма?

Платформа .NET

71. Какие исключения нельзя остановить в блоке catch?

72. Какая разница между .NET Standard Class Library и .NET Core Class Library?

73. Объясните разницу между отложенным и немедленным исполнением в LINQ. Приведите примеры.

74. Для чего нужен метод ConfigureServices в Startup.cs?

75. Какая разница между services.AddTransient и services.AddScope в ASP.NET Core?

76. Что такое Kestrel?

77. Опишите ASP.NET MVC request pipeline.

78. Как в ASP.NET WebAPI настроить кэширование ответов на HTTP-запросы?

Управление памятью

79. Что такое куча и стек? Различия, принцип работы.

80. Как работает сборщик мусора?

81. Зачем нам зарезервированное слово using в C#, если в .NET есть автоматическое управление памятью? Как с этим связан disposable-паттерн и зачем такой сложный паттерн для managed и unmanaged ресурсов?

82. Какие особенности работы с Large Object Heap?

Типы данных, коллекции и структуры данных

83. Когда генерируется дженерик-класс конкретного типа — при выполнении программы или во время компиляции?

84. Что такое рефлексия?

85. Расскажите о коллекции LinkedList . Чем она отличается от других коллекций?

86. Что такое индексатор?

87. Что такое immutable object? Какие преимущества дает использование immutable object? Предложите способ реализации его в .NET.

88. Когда использовать StringBuilder, а когда string? Как работает StringBuilder?

89. Что такое балансирование деревьев?

90. Что такое Key-value структуры?

100. Что такое хэш-функция и зачем нужны хэш-таблицы?

101. Какими свойствами должна обладать идеальная хеш-функция?

102. Что такое коллизии и как с ними бороться?

103. В чем заключается сложность CRUD-операций в Dictionary в .NET?

104. Где хранятся массивы? Массивы примитивных типов?

105. В чем отличие между массивом (T [ ]) и списком (List )?

106. В чем разница между IList и IEnumerable ?

107. Зачем нужны Enumerable, Observable, AsyncEnumerable и какие модели получения данных они реализуют?

108. В чем разница между IEnumerable и IQueryable?

109. Что такое enum flags?

Базы данных

110. Расскажите о нормальных формах в СУБД.

111. Что такое индекс в БД?

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

113. Какие типы индексов существуют? Чем они отличаются?

114. Что такое ACID?

115. Какие вы знаете уровни изоляции транзакций?

116. Что такое план выполнения запроса (execution plan) в MS SQL?

117. Проблема: запрос долго выполняется. Какие есть методы ее диагностики и решения?

118. Как ORM (Entity Framework или Entity Framework Core) транслируют C# код в язык запросов базы данных? Что для этого используется?

Параллелизм

119. Для чего использовать Task.ConfigureAwait?

120. Например, есть веб-сервер, который по HTTP-запросу делает выборку из базы данных. Всего на сервере 16 тредов (threads). Каждый HTTP-request выполняет запрос в базу и ожидает результатов, в этом случае тред блокируется. Можно ли оптимизировать эту работу средствами .NET?

121. Зачем нужен ThreadPool? Опишите механику работы: как поток выделяется и возвращается обратно в ThreadPool.

Вопросы для Senior

Общее

122. Какие ещё практики, кроме ООП, использовали (AOP, FP и т. д.)?

123. Назовите три самые сложные проблемы, которые вам приходилось решать. Как вы это сделали, как пришли к этому решению?

124. Что такое слабосвязанный код? Чем он лучше сильносвязанного кода? Как бы вы достигали более слабой связности кода?

125. Использование статических классов повышает или понижает связность кода?

126. Как можно измерить performance кода? Влияет ли факт замеров на производительность?

127. Для чего используются и как работают multi-stage билды в Docker?

128. Как понять, что какая-то часть кода утилизирует много памяти или долго выполняется? Что может быть ботлнеком в разных случаях? Какие есть способы уменьшения памяти и трафика памяти?

129. Как бы вы реализовали cross-cutting concern (например, логирование, валидация, транзакции)?

130. Расскажите о Rest Maturity Model.

Видео курсы по схожей тематике:

Основы ASP.NET MVC

Основы ASP.NET MVC

Visual Studio 2013 Tips & Tricks

Visual Studio 2013 Tips & Tricks

C# Starter (EN)

Abdul Rashid Hamid

131. Что такое CPU и IO-bound задачи?

132. Что такое маршалинг?

133. Как работает async / await (подробно)? Почему нельзя использовать async void методы?

Платформа .NET

134. Как работает lock? Можно ли использовать структуры внутри выражения lock?

135. Что такое Expression Tree?

136. Как работает сборщик мусора (подробно)? Почему в GC три поколения, а не, скажем, пять, десять или два?

137. Как бы вы организовали трассировки Web API сервисов?

138. Как в .NET Core можно настроить хранение секретов на компьютерах разработчиков и на рабочих средах?

139. Как бы вы организовали процесс CI/CD .NET Core сервисов для их деплоймента в облачную инфраструктуру?

140. Как включить CORS в AspNetCore?

Типы данных, коллекции и структуры данных

141. Как реализованы дженерики?

142. Как создать собственный immutable-тип?

143. Как работает IEnumerable (подробно)?

144. Какой алгоритм использует коллекция STACK?

145. Какие структуры данных вы реализовывали сами для платформы .NET? Расскажите, чем они отличались от стандартных реализаций.

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

147. Почему в структуре нет конструктора по умолчанию?

Базы данных

148. Как БД сохраняет данные?

149. Какие типы БД вы знаете?

150. Как и когда БД лучше использовать?

151. Что такое денормализации?

152. Когда и какие уровни изоляции транзакций можно использовать?

153. Как в популярных СУБД реализованы принципы ACID (SQL Server, PostgreSQL и т. д.)?

154. Приходилось ли вам оптимизировать запрос в БД? Если да, то как?

155. Опишите, какие вы знаете потенциальные проблемы, связанные с параллельными запросами к БД.

156. Какую базу данных вы бы использовали для реализации distributed lock механизма? Расскажите детали реализации.

Микросервисы

157. Какую проблему решают микросервисы?

158. Какие есть способы коммуникации микросервисов?

159. Расскажите варианты реализации распределенных транзакций в микросервисах.

160. Что такое circuit breaker?

161. Каким образом вы будете налаживать систему, состоящую из множества микросервисов, если нужно отследить полный путь обработки запроса?

162. Что такое брокеры сообщений? Что такое at-least-once, at-most-once семантика? Есть ли какие-то брокеры, которые гарантируют exactly-once семантику?

163. Как должен работать код клиента брокера в зависимости от выбранной семантики?

164. Какие инструменты для работы с очередями вам известны (как в .NET, так и отдельные продукты), какой инструмент/продукт вы бы выбрали и почему?

MS Azure

165. Какие виды сервисов бывают в Service Fabric?

166. Какие особенности и ограничения Azure Table Storage?

167. Как бороться с проблемой холодного старта в Azure Functions?

168. В чем отличие очередей и топиков в Azure Service Bus?

Практические задания

Junior only

  1. Опишите, как бы вы реализовали калькулятор. Если понадобится добавить поддержку для римской системы счисления, что будете делать?
  2. Напишите программу, чтобы проверить, является ли число простым или нет.
  3. Найдите наименьший элемент в массиве.
  4. Упорядочите структуры папок в файловой системе.
  5. Напишите программу, которая симулирует fizz-buzz.
  6. Расскажите, что делает этот код, и предложите, как его улучшить.

public bool IsArrayEmpty(string[] array)
if (array.Length > 0)
return false;
else
return true;
>

protected string GetClass(object url)
string result = string.Empty;
if (SiteMap.CurrentNode != null && SiteMap.CurrentNode.Url == url.ToString())
result = «class=\»active\»»;
return result;
>

Middle

  1. Напишите программу для тиражирования последовательности Фибоначчи для заданного числа.
  2. Спроектируйте базу данных врачей и пациентов в SQL. Создайте stored procedure или запрос в SQL, который вернет врачей, имеющих больше, чем N пациентов.
  3. Проверьте коллекцию на наличие дубликатов.
  4. Спроектируйте thread-safe класс Singleton в C#.
  5. Надо записать некую сущность в базу данных и отправить событие в брокер сообщений. Как это сделать с минимальным риском потери данных?
  6. Имеются три сервиса. Выполняется HTTP-запрос на первый. Первый должен записать данные во второй, а второй — в третий. Как гарантировать, что данные при такой сложной коммуникации не потеряются? Как предотвратить записи дубликатов данных?
  7. Будет ли работать этот код и почему?

SomeClass myClass = null;
myClass.SomeMethod();

var table = GetTable();
table.Draw();

private SomeClass GetTable()
using(var table = new SomeClass())
table.ID = «www»;
table.Width = «95%»;
table.Controls.Add(tr);
return table;
>
>

  1. Расскажите, что делает этот код, и предложите, как его улучшить:

Shape shape = GetNextShape();
if(shape is Circle)
Console.WriteLine(((Circle)shape).Radius);

public int Quantity
get
try
return int.Parse(TxtQuantity.Text);
>
catch (Exception)
return 0;
>
>
>

  1. Что не так с кодом?

try
SomeMethod();
>
catch(Exception e)
Log(e.Message);
throw e;
>

Senior

  1. Как бы вы спроектировали FTP-сервер? Web-сервер? Хостинг картинок с разделением прав доступа? Систему, состоящую из front- и back-офисов? Создайте клон любой популярной социальной сети (Instagram, Facebook и т.д.)
  2. Допустим, есть сущность сделки (Bid). И в сделке есть список партнеров, с которыми эта сделка заключается. Сами сделки хранятся в сервисе сделок (bidding service), а партнеры — в своем сервисе (partners service). И когда показывается список сделок, на начальном скрине нужно отразить количество партнеров. Как бы вы спроектировали хранение и изображение этого счетчика?
  3. Задача на знание LINQ: с исходной коллекции данных необходимо получить новую коллекцию по определенным требованиям (например, отсортированную, без дубликатов и т. д.).
  4. Напишите программу, которая проверяет, является ли поле судоку 9×9 правильно заполненным.
  5. Реализуйте свой Select, Where, SelectMany со всеми характеристиками LINQ (отложенное исполнение, одномоментная (eager) проверка входных данных).
  6. С помощью LINQ напишите метод, который вернет такие элементы коллекции, которые делятся на N без остатка, отсортированные от наибольшего значения к наименьшему. Сигнатура метода: List Filter (IEnumerable collection, int n) ;.
  7. Напишите функцию, которая вернет сумму всех четных элементов массива, который передается в функцию (JavaScript).

Бесплатные вебинары по схожей тематике:

10 ключевых ошибок во время собеседования

10 ключевых ошибок во время собеседования

Практика C#. Создание блога с Blogifier.Core.

Практика C#. Создание блога с Blogifier.Core.

Финал Шахматной IT Арены для программистов

Финал Шахматной IT Арены для программистов

Выражаем благодарность за подготовку статьи Алексею Краевому, Максиму Шнуренку, Андрею Ткаченку, Владу Медведовскому, Сергею Селецкому, Андрею Губскому, Сергею Мащуренку, Александру Скриннику, Андрею Соболю, Богдану Нановскому, Святославу Аксёнчикову, Ивану Корнелюку, Михаилу Пивоварову, Алексею Дерке, Евгению Гуреву, Михаилу Меркулову, Юрию Воронину.

16 вопросов мидлу: что должен знать Middle-разработчик

Аватарка пользователя Марина Александровна

Разобрались, что должен знать Middle-разработчик, какими hard и soft skills он обладает и не завышены ли требования сегодня.

Как считаете, завышены ли сегодня требования к Middle-разработчикам?
В пределах нормы
Они даже занижены

Что должен знать Middle-разработчик? Этот вопрос актуален как для тех, кто претендует на вакансию мидла, так и для тех, кто посматривает в сторону продвижения.

Стоит отметить, что несмотря на то что в IT выработана шкала для оценки программистов (trainee, junior, middle, senior, lead), с которой более или менее все согласны, с точным определением каждого уровня общего мнения среди компаний пока нет. Поэтому каждая компания устанавливает внутренние требования к навыкам каждого уровня.

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

Позиция Middle-разработчика предполагает не только уверенное знание языка программирования, но и широчайшие познания в смежных технологиях. Позиция Middle накладывает на специалиста ответственность не только программировать «всё что угодно», но и обучать, оптимизировать код, разбирать и поддерживать чужой код, как будто родной. Фактически сейчас для вакансий Middle-разработчика предъявляются требования, как несколько лет назад для Senior.

Мы выяснили, что должен знать Middle-программист в 2020 году, и собрали общие вопросы с собеседований, по ответам на которые работодатели определяют, «дорос» кандидат до мидла или нет.

Hard skills

Каков ваш уровень владения языком программирования и сопутствующими инструментами?

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

В каких проектах вы участвовали? Сколько из них вели сами?

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

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

Каков ваш навык работы с базами данных?

Работаете с бэкендом? В таком случае вы должны свободно обращаться к базам данных, иметь навыки работы с одной или несколькими СУБД.

Знать и уметь строить оптимальную архитектуру БД. БД зачастую является самым узким местом производительности проекта. Менять архитектуру БД на живом проекте очень проблематично и дорого.

Это основное из того, что должен знать Middle-разработчик. Не стоит забывать и о нормализации, денормализации и характеристиках каждой нормальной формы.

Расскажите о своём уровне владения выбранной IDE

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

Другие технические навыки

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

Что касается технических навыков Middle-разработчика по frontend JavaScript, то специалист такого уровня должен:знать один из популярных JS-фреймворков (Vue, Angular), а также популярную библиотеку (React);знать SASS/SCSS/Less/PostCSS;уметь самостоятельно настроить систему сборки проекта Grunt/Gulp/Webpack, работать с голым JS (ES5, ES6, ES7);знать и понимать RESTful интерфейсы;уметь пользоваться средствами совместного использования кода (Git + GitFlow).
Также есть дополнительные навыки, которые дают преимущества. Большим плюсом в работе будут:опыт разработки серверного кода под Node.js, TypeScript;понимание SOLID, Dependency Injection, знание Linux (Debian-like);опыт работы с TDD/BDD, тест-фреймворки (Mocha, Should, Chai, Jest);знание Docker (большим плюсом будет Kubernetes/Docker Swarm);опыт в PostgreSQL/MySQL etc.

Самое важное для мидла, это знать, как изнутри работает используемая тобой технология, твой фреймворк. Не то, как он производит рендер (с помощью VDOM и т. п.), а как код написан, как происходит магия. Открой GitHub, посмотри исходники React, как, например, this.setState заставляет компонент делать рендер.

Какие методологии разработки вы знаете? По каким из них работали?

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

Что ещё должен знать Middle-разработчик

Знать и уметь писать оптимальные запросы по выборке данных (DML-запросы).Немного знать про ACID, понимать, что это такое и зачем нужно.Знать три столпа ООП (наследование, полиморфизм и инкапсуляция).Знать, что такое шаблоны проектирования и зачем они нужны. Понимать различия между ними.Понимать, что такое SOLID и когда он уместен.Знать и понимать, что такое тестирование кода и как оно реализуется.Желателен опыт в написании тестов. Это заставляет мозг разработчика генерировать совершенно другой код. Я специально поставил этот пункт ниже SOLID и шаблонов проектирования: сначала SOLID и шаблоны, а только потом тесты. Тогда будет получаться код, который будет легче покрываться тестами.

Soft skills

Насколько вы коммуникабельны?

Если в случае с Junior-программистом коммуникативные навыки просто важны, то для Middle-разработчика они обязательны.

Думаю, что Middle-программист не должен принимать решения по архитектуре проекта, согласовывать требования с заказчиком и решать вопросы по блокерам, так как это входит в компетенции аналитика, PM и сеньора.

Несмотря на это, во многих компаниях перед мидлом часто ставится задача самостоятельно разобраться, чего хочет заказчик, как решить его проблему и какую архитектуру построить. На базе этих сведений формируется полноценное ТЗ, которое затем передаётся команде разработчиков.

Канадская компания выпустила AR-очки для пловцов

Ваши навыки работы в команде

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

Умеете ли вы разрешать конфликты?

Этот навык также является частью коммуникации. Разногласия могут возникнуть и с заказчиком, и внутри команды. Если вам поручили роль наставника над младшими специалистами в проекте — в обязанности войдёт и урегулирование конфликтов.

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

Каков ваш уровень английского языка?

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

Способны ли вы доступно доносить свои идеи, убеждать в их правильности?

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

Можно ли вас охарактеризовать, как внимательного человека?

Очень хорошее качество, которое надо развивать разработчику, — это внимательность. Она позволит вовремя заметить, что с «канарейкой» что-то не то. Грамотный Middle-разработчик должен непрерывно отслеживать «жизненные показатели» проекта, чтобы вовремя понять, что «чирикает» после недавнего коммита он уже не так бодро.

Если возникла проблема, как вы будете её решать?

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

На первом месте здесь стоит умение искать информацию. Перед собеседованием вспомните основные источники информации, к которым вы обращаетесь в первую очередь (после документации, разумеется).

Можете ли вы оценить время выполнения задачи?

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

Мидл уже имеет достаточный опыт работы, что позволяет ему декомпозировать задачи более-менее правильно. Мидл умеет декомпозировать, а значит он может точнее оценивать задачи. Он должен уметь соблюдать сроки. Это умение нельзя переоценить.

Планируете ли вы развиваться до сеньора или тимлида?

Плох тот солдат, что не мечтает стать генералом. Перефразируем: плох тот мидл, что не мечтает стать сеньором/архитектором/тимлидом. Мидл должен всегда хотеть развиваться. Жажда саморазвития будет вытаскивать мидла из его рутины (а у него будет рутина) и отправлять развиваться дальше.

От новичка до тимлида: гайд по продвижению

Выводы

Так завышены ли сегодня требования к мидлам? На этот счёт мнения расходятся, но почти все специалисты сходятся во мнении, что каждая компания диктует свои правила, и то, что должен знать Middle-разработчик, будет напрямую зависеть в том числе от должности, на которую он претендует.

Не завышены ли требования к мидлам? Возможно, кто-то из IT-специалистов сталкивался с тем, что, уже несколько лет будучи мидлом, на собеседовании в какой-либо компании его оценивают как джуниора. Связано это, как правило, с двумя факторами: первое — разные требования в разных компаниях. Второе — часто в уровень квалификации, кроме перечисленных выше hard и soft skills, ещё включают погружённость сотрудника в предметную область, знание специфики бизнеса. Эти знания делают сотрудника ценным для текущей организации, но могут значить меньше в новой для него организации.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *