107 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как я проходил собеседования на позицию Junior .Net Developer

Как я проходил собеседования на позицию Junior .Net Developer

Приветствую всех. Сегодня расскажу вам как я проходил собеседования в Москве на позицию .Net Developer. Усиленно готовился к собеседованиям месяц, целыми днями сидел и смотрел вопросы и пытался отвечать на них, а также читал книжки по С#.

При поиске работы я пользовался Head Hunter. Там очень много вакансий с подробным изложением того, что хотят фирмы от кандидата. Решил откликнутся практически на все вакансии «C# разработчик», потому что для меня главное было пройти как можно больше собеседований, набраться опыта, а также во время таких собеседованиях найти интересную работу в интересной компании (забегая вперед скажу, что я нашел очень интересную работу). Некоторые компании (всего 2), для того, чтобы откликнуться на предложенную ими вакансию, хотели, чтобы кандидат решил предложенные ими задачи (напоминаю это при отклике). На мой взгляд это даже правильно, ведь это показывает, что компания очень ценит свое время и хочет, чтобы кандидат на собеседовании умел решать простые задачи. Обычно на таких собеседованиях спрашивают более «узкие» вопросы. Итак, я хочу поделиться с вами предложенными задачами, которые были до собеседования:

We draw N discs on a plane. The discs are numbered from 0 to N − 1. A zero-indexed array A of N non-negative integers, specifying the radiuses of the discs, is given. The J-th disc is drawn with its center at (J, 0) and radius A[J].

We say that the J-th disc and K-th disc intersect if J ≠ K and the J-th and K-th discs have at least one common point (assuming that the discs contain their borders).

The figure below shows discs drawn for N = 6 and A as follows:

A[0] = 1 A[1] = 5 A[2] = 2 A[3] = 1 A[4] = 4 A[5] = 0

There are eleven (unordered) pairs of discs that intersect, namely:

  • discs 1 and 4 intersect, and both intersect with all the other discs;
  • disc 2 also intersects with discs 0 and 3.

Write a function:

int solution(int A[], int N);

that, given an array A describing N discs as explained above, returns the number of (unordered) pairs of intersecting discs. The function should return −1 if the number of intersecting pairs exceeds 10,000,000.

Given array A shown above, the function should return 11, as explained above.

  • N is an integer within the range [0..100,000];
  • each element of array A is an integer within the range [0..2,147,483,647].
  • expected worst-case time complexity is O(N*log(N));
  • expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).

Elements of input arrays can be modified.

Или вот задание со второй компании:

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

В среднем, тест занимает один час.

  1. Вопрос 1
    Напишите тесты на код, который вычисляет площадь прямоугольного треугольника, принимая на вход длину всех трех его сторон. Код будет поставляться внешним клиентам в составе библиотеки.
  2. Вопрос 2
    В БД есть таблица с регистрацией клиентов вида CustomerId, RegistrationDateTime, Name и таблица с покупками клиентов вида CustomerId, PurchaiseDatetime, ProductName. Напишите SQL запрос, который выберет имена клиентов, которые когда-либо покупали молоко, но не покупали сметану за последний месяц.

Много компаний согласились пригласить меня на очное собеседование. Практически во всех компаниях есть несколько этапов собеседований. На первом обычно собеседует hr, на второй — старший разработчик, на третьем — технический директор. Бывали компании, в которых на первом же приходили и старший разработчик, и Team Lead и технический директор, что конечно чуть заставляет нервничать. Пройдя 5 собеседований, я выяснил такую вещь: чем позитивнее и свободнее ведешь себя на собеседовании, тем легче и быстрее она проходит.

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

  • Я не ожидал так много вопросов по базам данных, мне пришлось быстро осваивать (точнее вспоминать) sql язык. Вот какие вопросы и задания мне задавали
    1. Что такое кластеризованный и некластеризованный индекс? Когда какое надо использовать?
    2. Что такое Join? Чем он отличается от Left Join, Right Join? Inner Join? Outer Join?
    3. Есть три таблицы: CUSTOMERS (ID, NAME, MANAGER_ID); MANAGERS (ID, NAME); ORDERS (ID, DATE, AMOUNT, CUSTOMER_ID). Написать запрос, который выведет имена Customers и их SalesManagers, которые сделали покупок на общую сумму больше 10000 с 01.01.2013.
    4. Делаем электронный справочник по книгам. Ищем:

А) В каком магазине купить данную книгу.

Б) В каких магазинах купить книги этого автора (авторов)

В) Кто автор книги

Г) Какие книги написал автор

Нарисовать БД. Написать запрос Б. (Не забыть учесть, что у одной книжки — может быть несколько авторов)

  1. Что такое агрегирующие функции? Операторы Group By, Having? Приведите примеры их использования
  2. Table «PC» (id, cpu(MHz), memory(Mb), hdd(Gb))
    1) Тактовые частоты CPU тех компьютеров, у которых объем памяти 3000 Мб. Вывод: id, cpu, memory
    2) Минимальный объём жесткого диска, установленного в компьютере на складе. Вывод: hdd
    3) Количество компьютеров с минимальным объемом жесткого диска, доступного на складе. Вывод: count, hdd
  3. Дана следующая структура базы данных в MS SQL: Departments (Id, Name), Employees(Id, DepartmentId, Name, Salary)
  • Написать запрос получения имени одного сотрудника, имеющего максимальную зарплату в компании, и название его отдела
  • Получить список отделов, средняя зарплата в которых больше 1000$
  1. Ado Net – что за технология? и как и когда она используется?
  2. Что такое Entity Framework? Какие подходы проектирования БД знаете?
    Расскажите про Code First.
  • Конечно вопросы про ООП
    1. Назовите и объясните основные парадигмы ООП.
    2. Назовите преимущества объектно-ориентированного подхода к программированию перед структурным программированием
    3. Перечислите недостатки ООП парадигмы.
    4. Что такое раннее и позднее связывание?
    5. Перечислите модификаторы доступа и когда они используются?
  • Вопросы про паттерны проектирования
    1. Расскажите про SOLID и примеры его использования
    2. В чем отличие паттерна «Стратегия» от паттерна «Шаблонный метод»?
    3. Паттерн Адаптер и его применение
    4. Расскажите про паттерн «Фасад»
  • Ну и конечно огромное количество вопросов по С#
  1. using (SomeClass sc = new SomeClass())<>
    Что делает данная конструкция?
  2. int i = 1;
    WriteLine(«i = <0>», ++i);
    Что выведет данный код?
  3. Различие класса и структуры? И что будет если их передать в метод в виде параметров?
  4. Задача: есть нули и единицы в массиве. Надо для каждого нуля посчитать сколько единиц правее него и вывести сумму таких чисел. Сделать за один проход.
  5. Различие абстрактного класса и интерфейса? Можно ли отказаться от интерфейсов и использовать только абстрактный класс, ведь мы можем в абстрактном классе просто указать сигнатуры методов?
  6. Что такое интернирование строк ?
  7. Расскажите про интерфейс IEnumerable? Зачем он используется?
  8. Когда мы можем пройтись по собственной коллекции foreach- ом? Что для этого надо сделать и почему? (Рассказать про утиную типизацию)
  9. Различие между IEnumerable and IQueryable ?
  10. Как устроен Dictionary внутри? Как борются с коллизиями?
  11. Есть обычный пользовательский класс. Нужно его использовать как ключ в Dictionary. Что для этого надо поменять (добавить) в классе ?
  12. Какова алгоритмическая сложность для операций чтения и записи для коллекции Dictionary?
  13. В чем различие между ключевыми словами «ref» и «out»?
  14. Расскажите как работает try, catch, finally? Когда вызывается каждый
  15. Чем отличаются друг от друга классы String и StringBuilder? Зачем нужно такое разделение?
  16. Какие отличие между значимыми и ссылочными типами? Зачем придумали такое разделение? Нельзя было придумать только либо значимые либо ссылочные?
  17. В чем отличие использования Finalize и Dispose?
  18. Что такое управляемый код и CLR? Основные требования к управляемому коду?
  19. Что такое assembly manifest (манифест сборки)?
  20. Что такое Boxing и Unboxing?
  21. В чем суть полиморфизма?
  22. Чем отличается event от delegate?
  23. Может ли класс реализовать два интерфейса, у которых объявлены одинаковые методы? Если да, то каким образом?
  24. Что такое абстрактный класс? В каком случае вы обязаны объявить класс абстрактным?
  25. В чем разница инкапсуляции и сокрытия?
  26. Что такое частные и общие сборки?
  27. Что такое .Net Framework?
  28. LINQ lazy loading, eager loading в чем разница?
  29. Можно ли запретить наследование от своего собственного класса?
  30. Определение паттерна синглтон
  31. Что такое интеграционные тесты и unit-тесты?
  32. Что такое MVC, MVVM, WEB API?
  33. Каким образом можно присвоить значения полям, которые помечены ключевым словом readonly?
  34. Когда вызывается статический конструктор класса?
  35. Чем отличаются константы и поля, доступные только для чтения?
  36. Чем отличаются константы и поля, доступные только для чтения?
  37. Разница между асинхронностью и параллельностью?
  38. У вас есть сайт, вы заметили что он долго отвечает, как вы будете искать причину?
  • Ну и как же без логических задач
    1. Вы находитесь в пустом поезде. Это даже не поезд, а просто вагоны, они сцеплены друг с другом. Все вагоны внутри одинаковы, двери на выход из вагона закрыты, через окна ничего не видно. Вы можете включать и выключать свет в вагоне, в котором находитесь, можете сходить в соседний вагон, там тоже можно включать или выключать свет. Вам известно, что вагоны стоят на кольце и сами сцеплены в кольцо, первый вагон сцеплен с последним, ходить по кругу можно сколько угодно. В момент начала решения задачи в каких-то вагонах свет уже горит, в каких-то — не горит.
      Ваша задача при помощи управления светом в вагонах и перемещения по ним узнать сколько в этом кольце вагонов.
    2. У вас есть 100 монет по одному рублю. Они все лежат на столе. У вас также есть два носка. Вам нужно распределить все монеты по 2 носкам, так чтобы в одной из них было в два раза больше монет, чем во второй, при этом
      • не разрешается ломать их (они должны остаться целыми)
      • надо использовать все 100 монет (прятать нельзя)
      • они все одинаковые (по весу, по виду)

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

В одной компании, попросили спроектировать базу данных для приложения вроде «Инстаграмм». Потом попросили написать сигнатуру метода «Upload», который отправляет фото на сервер. Прозвучал также вопрос что, если бы руководство изменило вот «это», то как бы вы «переспроектировали» эту базу. Ну так как у меня нет опыта в проектировании, мне пришлось на ходу думать и генерировать идеи, как оказалось, я прошел это собеседование).

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

Реализовать программу анализа текста. Входной текст произвольный и может быть большим по объему. Количество и содержание метрик определяется самостоятельно. Требования к алгоритму: Программа должна быть расширяема к изменению списку метрик. Масштабируемость.

На что обращаем внимание и что анализируем:

  1. Какие метрики предложены кандидатом и их смысл — аналитическое мышление
  2. SOLID анализ предложенного решения — навыки проектирования
  3. Какие шаблоны применены для масштабируемости и расширяемости — архитектурные скилы кандидата. повод при общении затронуть более глубоко вопрос проектирования
  4. Какие синтаксические конструкции языка применены и какая технология используется — использование сахара и средств упрощения кода
  5. Написаны ли unit тесты — что и как тестирует, какие фреймворки и стили тестов использует
  6. Сравнение с когнитивными сервисами — знание трендов применения технологий в реальных проектах
  7. Время, сложность решения, активность дополнительных вопросов выполнения — заинтересованность к решаемым задача/получению оффера

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

Также положительным фактом оказалось преподавание информатики в ВЦНМО. Расспрашивали каково преподавать и трудно ли объяснять сложные вещи на пальцах.

Для меня было неожиданностью, что меня пригласили работать практически все компании (80%), в которых я проходил собеседование. Может это чувство из-за моей низкой самооценки?! После прохождения собеседований, с уверенностью могу сказать, что это несложно, а даже легко и интересно. Так что друзья, не бойтесь собеседований и крупных компаний, будьте самоуверенными, верьте в свои силы и все будет на 5!

Для тех, кто будет готовится или уже готовится к собеседованиям, ниже перечислю ссылки, которые помогут вам (по моему мнению) подготовится к собеседованию на должность Junior C# Developer, .Net Developer.

Что нужно знать о Laravel Junior developer?

Что должен знать junior laravel developer? Это очень тонкий вопрос, однозначного ответа на который нету. В основном, требования на эту должность зависит от компании. Однако, можно выделить базу, которой программист должен обладать, и обязательно способен реализовать самостоятельно. В этой статье я опишу подход, благодаря которому можно оценить знания программиста, и его готовность к работе на должности Laravel Junior Developer.

Как бы я проводил собеседование?

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

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

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

Вот, по моему мнению, именно этими знаниями должен обладать laravel junior программист.

Задача

Задача программиста – создать проект, мини CRM, по управлению компаниями и её сотрудниками:

  • Должна быть реализована базовая авторизация
  • Применение сидеров (seeds) для создания первого пользователя с данными для входа (email – admin@local.in и паролем password)
  • Создать миграции для компаний: name, email, phone, website, logo (минимум 100х100 пикселей)
  • Создать миграции для сотрудников компании: first name, last name, company (используя внешний ключ для связи (foreign)), email, phone
  • Создать CRUD (Create, Read, Update, Delete) панели для Компаний и Сотрудников
  • Сохранять логотипы компаний в папке storage/app/public/companies, и сделать её доступной из папки public
  • Для создания CRUD-ов нужно применить Laravel resource маршруты
  • Для валидации использовать Request классы
  • Использовать встроенную пагинацию, с выводом 15 последних созданных элементов на страницу

А на что смотреть то?

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

  • MVC – Model View Controller
  • Аутентификация
  • CRUD и resource контроллеры
  • Eloquent и связи по внешнему ключу
  • Миграции и сидеры
  • Валидация запросов
  • Управление файлами
  • Пагинация

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

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

Программирование – это креативная занятие. Люди пишут код по разному, некоторые пишут везде маршруты Route::get , Route::post , вместо того, чтобы использовать resource. Некоторые не валидируют запросы, не пользуется инструментами фреймворка, и костылит сам, некоторые не используют миграции, и т.д.
И вот именно такой вариант собеседования позволит на раннем этапе определить нужного вам человека по его коду. Дьявол кроется в деталях, потому, соблюдение всех стандартов, даже в таком простом проекте – многое говорит о профессиональных качествах программиста.

Дополнительная задача для продвинутого laravel junior программиста

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

  • Применить в проекте библиотеку Datatables.net – с, или без SSR (рендеринг на стороне сервера)
  • Использовать AdminLTE тему в качестве фронденда
  • Сделать email оповещения при добавлении нового сотрудника в компанию (используя Mailgun или Mailtrap)
  • Сделать мультиязычное приложение
  • Применить Unit-тесты (в базовом варианте)

Резюме

В этой статье я описал методику, по которой можно протестировать программиста на должность junior laravel developer. Это особенно будет полезно тем, кто изучает Laravel, и пока не понимает, достаточно ли знаний для трудоустройства в компанию. Если вы задавались вопросом что должен знать laravel php программист, то, эта статья должна быть вам полезна.
Если вы не почувствовали сложности этих задач, то, что вы здесь делаете? Вы готовы, удачи!

Subscribe to Блог php программиста: статьи по PHP, JavaScript, MySql

Get the latest posts delivered right to your inbox

Проходим собеседование #1: собеседование на junior frontend developer

Показать панель управления

  • Опубликовано: 15 июн 2020
  • Открытое собеседование junior frontend разработчика.
    Следующий выпуск: ru-clip.net/video/ssigrf5zHUg/видео.html
    Предыдущий выпуск: ru-clip.net/video/JhpgZTa2Egc/видео.html
    Вопросы и предложения пишем сюда mockinterview@yandex.ru
    Кто хочет прокачать свои знания – оставляем заявку на обучение в GeekBrains: rebrand.ly/mockinterview
    00:00 Вступление
    03:19 Знакомство с Ростиславом
    05:15 Разница div и span
    05:59 Теги link и script места подключения
    09:18 Чем нравится программирование
    10:10 Чем отличается null и undefined
    17:34 Что такое NaN
    20:03 Разница между == и ===
    21:53 Что выведется в консоль
    24:12 Проблема 0.30000000000000004
    28:45 Задача 1
    56:25 Вопрос на внимательность
    1:00:10 Задача 2
    1:16:55 Задача 3

Комментарии • 15

подождите, то есть люди идут на собеседование, не зная, почему скрипты пишуться в body? да вы спятили

Лайк за терпение

Спасибо, помогло! Пока решал вторую задачу, узнал, что forEach нельзя прервать с помощью return, полезно было посмотреть)

Что-то вопросы настолько лайтовые. а собственно где frontend?

С радостью задам адекватные вопросы в следующих выпусках, если есть идеи, пиши в телеграмм @S_HappY

а я раньше писал i и i1

Здравствуйте! Можно ли попасть на такое собеседование?

В telegram отпишитесь пожалуйста @S_HappY

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

@Leather man на листочке никто никогда не просит помнить все методы наизусть, но если человек не может вспомнить, как называются самые используемые, это настораживает.

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

@Илья Дьячун а в чем сложность написать что-то на листочке?)

@Илья Дьячун Я никогда на такое не напарывался, пару раз только было что писали на доске или бумажке что-то и просили меня ответить какой будет результат 🙂
На самом деле работа-то может и хорошая будет, просто интервьюер такой попался. Я бы все равно попробовал ответить, раз уж пришел на собес 🙂

@Павел Тарасов В таком случае можно смело подниматься, благодарить за потраченное время, и уходить.
На реальном проекте тоже будете писать на листочках? Если такое допускается на собеседовании, значит в такой компании делать нечего, ничего не потеряете

голоса
Рейтинг статьи
Читать еще:  Программа не отвечает как исправить не закрывая?
Ссылка на основную публикацию
Статьи c упоминанием слов: