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

    Приветствую всех. Сегодня расскажу вам как я проходил собеседования в Москве на позицию .Net Developer. Усиленно готовился к собеседованиям месяц, целыми днями сидел и смотрел вопросы и пытался отвечать на них, а также читал книжки по С#. В статье привожу интересные задачки и вопросы, которые мне задавали в разных компаниях в Москве. Заранее скажу, что я попал в ту компанию, в которой хотел. Я прошел 4 собеседования в этой компании и меня наконец то взяли! Много статей было прочитано в частности здесь и надеюсь, что эту статью тоже будут читать начинающие Net разработчики и спрашивать все в комментариях.

    Кому интересна тема прохождения собеседований, прошу под кат!

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

    Практически во всех компаниях есть несколько этапов собеседований. На первом обычно собеседует 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. Делаем электронный справочник по книгам. Ищем:
      А) В каком магазине купить данную книгу.
      Б) В каких магазинах купить книги этого автора (авторов).
      В) Кто автор книги.
      Г) Какие книги написал автор.
      Нарисовать БД. Написать запрос Б. (Не забыть учесть, что у одной книжки — может быть несколько авторов)
    5. Что такое агрегирующие функции? Операторы Group By, Having? Приведите примеры их использования.
    6. Table «PC» (id, cpu(MHz), memory(Mb), hdd(Gb))
      1) Тактовые частоты CPU тех компьютеров, у которых объем памяти 3000 Мб. Вывод: id, cpu, memory.
      2) Минимальный объём жесткого диска, установленного в компьютере на складе. Вывод: hdd.
      3) Количество компьютеров с минимальным объемом жесткого диска, доступного на складе. Вывод: count, hdd.
    7. Дана следующая структура базы данных в MS SQL: Departments (Id, Name), Employees(Id, DepartmentId, Name, Salary).

      Необходимо:

      • Написать запрос получения имени одного сотрудника, имеющего максимальную зарплату в компании, и название его отдела.
      • Получить список отделов, средняя зарплата в которых больше 1000$.
    8. Ado Net – что за технология? и как и когда она используется?
    9. Что такое Entity Framework? Какие подходы проектирования БД знаете? Расскажите про Code First.

    Конечно вопросы про ООП.

    1. Назовите и объясните основные парадигмы ООП.
    2. Назовите преимущества объектно-ориентированного подхода к программированию перед структурным программированием.
    3. Перечислите недостатки ООП парадигмы.
    4. Что такое раннее и позднее связывание?
    5. Перечислите модификаторы доступа и когда они используются?

    Вопросы про паттерны проектирования.

    1. Расскажите про SOLID и примеры его использования.
    2. В чем отличие паттерна «Стратегия» от паттерна «Шаблонный метод»?
    3. Паттерн Адаптер и его применение.
    4. Расскажите про паттерн «Фасад».

    Ну и конечно, огромное количество вопросов по С#.

    1. using (SomeClass sc = new SomeClass()){}
      Что делает данная конструкция?
    2. int i = 1;
      Console.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.

    1. Здесь собран большой материал по C#, А также есть специальный раздел «Вопросы к собеседованию». Рекомендую пока пройти теоретический материал, а потом попробовать тесты. Тесты находятся здесь (https://metanit.com/sharp/interview/).
    2. Сайт направлен именно на собеседования по разным направлениям разработки, где вы также сможете найти и C#. Там есть очень много «острых» и хитрых вопросов.
    3. CLR via C#. Программирование на платформе Microsoft.NET Framework 4.5 на языке C#. Джефри Рихтер. Эта классическая книга по освоению .Net. Там очень хорошо написано про CLR, про сборки и манифесты. Книга написано на довольно простом языке.
    4. Здесь
      довольно хорошо и просто описывается язык запросов SQL.
    5. Здесь также можете пройти туториал по SQL. В конце будет тест, который очень легко сдать(опять- таки, это лично субъективное мнение).
    6. Здесь собраны наиболее интересные логические задачи с ответами.
    7. Здесь собраны задачи по C#, которые часто бывают на собеседованиях
    8. Здесь собраны задачи по C#, которые часто бывают на собеседованиях
    9. Здесь собраны задачи по C#, которые часто бывают на собеседованиях
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 157
    • +26
      Какой то оверпауэр для джуниора, Имхо. Как задача с монетами решается?
      • +8
        Положить в оба носка по 50 монет, а затем один носок положить во второй
        • +15
          Спасибо, действительно оригинально. Но, Имхо, слабо отражает реальность. Это скорее ребус, а не задача. Вот про кольцо вагонов мне понравилась.
          • +32
            Классно.
            Можно передавать в Парижскую палату мер и весов как эталон задачи, которая не подойдет для собеседования.
            • +9
              Зато тут можно проверить не способность к решению ребусов, а поведение человека при общении с заказчиком.

              Вот говоришь ты такой: «Нам для БД нужно два сервера, master и hot standby».
              А тебе в ответ: «У нас будет только один сервер».
              А ты: «Ok, давайте развернем standby в виртуалке на том же сервере. Так еще и количество ядер удвоится».

              Все довольны. Занавес =)
              • –1
                А толку если физически машина умрёт..)
                • +5
                  Наверное, мне стоило добавить тег sarcasm :)
                  • 0
                    Основной толк — заказчик доволен :)
                    • 0
                      … Из той же серии: Контроллер домена на физической машине, которая с функцией Hyper-V, и пара дополнительных контоллеров домена на гостевых машинах, один из которых основной.
              • +1
                Это же всё не с одного собеседования: в каждой компании по одному-два вопроса по SQL вот, наверное, и накопилось. Скорее всего это не решающие вопросы, а проверка кругозора, насколько известны-понятны кандидату смежные темы/технологии.
              • 0
                Если вы ответили на все перечисленные вами вопросы, я удивлен, что не 100% компаний сделали вам оффер.
                Интересно что когда в 2007 я собеседовался на позицию начинающего разработчика вопросы были теже (за вычетом новых фич типа LINQ и EF).
                • +15
                  Я конечно не шибко в теме знаний конкретно .Net девелопера, но проведя аналогию, меня такими вопросами заваливали на тех. лида/директора.
                  Как то страшно и радостно, что уровень джуниоров так вырос (или это частный случай?)
                  • +8
                    Смотрят не сколько ты сделаешь/знаешь, а где сломаешься.
                    • +3
                      И в чем смысл (для работодателя)? Он кого ищет? Того кого можно сломать или человека, который выполнит задачу?
                      • 0
                        «Сломать» не следует понимать буквально, а следует понимать в контексте возможностей претендента.
                        Людей обычно «ломают» не вопросами, рабочей обстановкой.
                        • +4
                          Тут правильнее сказать «нащупать горизонт эрудиции и опыта». Просто посмотреть, насколько этот Junior разбирается в теме и как работают мозги. Других вариантов я не вижу, разве что опять понатырили вопросов из топ.собеседований гугла.
                        • +7

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


                          И если человек ответил на все вопросы, то тут два варианта:


                          • У него есть 10 лет опыта в разноплановых проектах на C#.
                          • Он заучил справочник перед собеседованием.

                          И в случае собеседования на джуна / мидла ответ очевиден :)

                          • +4
                            Я ответил на многие вопросы, но с C# слабо знаком.
                            • 0
                              Ну вообще там были вопросы про LINQ, что чисто C#-фича. Абстрактные классы и интерфейсы на уровне синтаксиса — тоже фича C# и Java, а в том же C++ нету интерфейсов и это уже вопрос, что называть платоновским человеком — вроде две ноги, нет перьев, а [ощипанная] курица.
                              MVVM — это тоже MVC--костыль к WPF и Силверлайт (или WPF это костыль к MVVM — это дискуссионный вопрос).
                              Event и delegate — опять таки чисто .NET мозгокрутка. В Жабе делгатов нет, а в С/C++ вместо этого дотнетовского зоопарка хватает обычного теплого и лампового указателя. Да и вообще вопрос холиварный ИМХО
                              • 0
                                Собственно, поэтому и было обозначено, что не все, а многие.
                              • 0
                                В том-то и дело, что шкала оценки нелинейна. 80% ответов без подготовки лучше, чем 100% с подготовкой.
                                • 0
                                  Осталось убедить в этом работудавателей.
                          • 0
                            Ну может спрашивают то же самое, но ожидания ниже.
                            • +4
                              Я на половину вопросов про паттерны и ООП вообще в интернет лазил, потому что раньше помнил, но забыл за ненадобностью. Лично для меня вызывает удивление, почему такие очевидные вещи, как использование интерфейсов и абстрактных классов теперь называется паттернами проектирования, и требуется их знание на уровне определений.
                              • +5
                                Паттерны настолько холиварная тема, что спрашивать ее в прямую на собеседовании на уровне испытания ядерной бомбы )))
                                • +3
                                  Я обычно спрашивал в ответ. А вы уверены, что вам надо, чтобы я это знал?

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

                                  Хотя сеньоров больше по практике гоняют. Что сделал, что не сделал. А вот такой проблемы у вас не было. Была? И как решали? Что правда так? А мы-то почти без извращений обошлись…
                                  • +2
                                    Паттерны вводились в разработческий обиход для упрощения общения. А сотрудники которые «всё понимают, а сказать не могут» явно востребованы меньше.
                                    • +5
                                      Скорее они уж вводились для того, чтобы если где-то что-то можно абстрагировать, то люди не выдумывали велосипеды. Есть много направлений кодинга, где нельзя просто взять и использовать паттерны как есть и рассчитывать на успех. И не знание их названий, для таких программистов, вовсе не значит, что они востребованы меньше.

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

                                      Всему свое место.
                                      • +1
                                        > Паттерны вводились в разработческий обиход для упрощения общения

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

                                        > А сотрудники которые «всё понимают, а сказать не могут» явно востребованы меньше.

                                        То есть сотрудник, которые использует термины «прокладка»/«прокси», «враппер» вместо «фасад», «адаптер» востребован меньше? А термин «шаблонный класс» для программиста на С++ вообще означает совсем другое, а не паттерн.
                                        • –1
                                          > А термин «шаблонный класс» для программиста на С++ вообще означает совсем другое, а не паттерн.
                                          Вы путаете с «шаблонным методом». Паттерна «шаблонный класс» не сущестует.
                                          • +1
                                            > Вы путаете с «шаблонным методом». Паттерна «шаблонный класс» не сущестует.

                                            От этого суть моего комментария не меняется. Вот шаблонный метод:

                                            template <class T>
                                            void DoSomething(const std::vector<T> &data);


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

                                            • 0
                                              > А называть паттерн «шаблонным методом», а не классом, у меня язык не поворачивается, потому что он представляет собой класс
                                              Сама суть паттернов в том, чтобы иметь общепринятые названия. А общепринятое название — шаблонный метод.

                                              > потому что он представляет собой класс, а не отдельный метод
                                              Больше половины паттернов представляют собой класс, но от этого они не называются «класс». Потому что их название отражает не их реализацию в коде, а их суть. И суть паттерна «шаблонный метод» в том, чтобы иметь шаблон метода, где под шаблоном понимается заготовленная реализация с переопределяемыми шагами.
                                  • +2

                                    Может смысл в том что на junior-а и изучить насколько хорошая память и знает теорию?
                                    К примеру в вопросах по sql попался кластеризированный индекс, это же не про sql как таковой а про mssql(в oracle это будет ibdex organazed table), причём же тут .net платформа?
                                    И в принципе проработав много лет с .net можно с половиной тем не встретится :)

                                    • 0
                                      причём же тут .net платформа?
                                      Юольшинство вакансий на .NET это Asp.NET, по крайней мере, субъективно выглядит так. Автор, похоже, тоже на эти выкансии пробовался. Ну а там где asp.net там почти всегда mssql. Вот и вся история.
                                      • 0
                                        Видимо, таки да. По опыту работы спрашивать большого смысле нет. Если что и сделал, то вряд ли этим стоит гордится (по себе студенту сужу).

                                        Если на теорию отвечает — значит читал, разбирался, помнит. По хорошему можно ещё допвопросы задавать на предмет догадается ли как это применить. Но доп вопросы ещё придумать надо ))))
                                    • 0
                                      Среди джуниоров конкуренция за рабочие места выше, чем среди миддлов/сеньоров, к сожалению, не так давно сам с этим столкнулся. Поэтому компании могут себе позволить фильтровать кандидатов, как им вздумается. Ну и пресловутый совет, который везде можно услышать — «лучше хоть как-то подтянуть знания, хоть где-то набраться практики и пробоваться сразу на вакансию мидла».
                                      • 0
                                        а где же набираться практики как не на позиции джуна?
                                      • 0
                                        Компания ищет себе молодых специалистов и для их привлечения указывает в вакансии зарплату в N денег, которая выше среднерыночной и будет привлекать к себе много внимания. Но компания не хочет действительно платить джуну N денег. Он приходит на собеседование, где ему дают такие задачки. Задачки ему с трудом даются. И потом ему говорят: «Знаете, Вы нам подходите, но всё-таки у вас есть недостаток знаний-сами видите, поэтому мы готовы взять вас за N-40%».
                                      • +1

                                        Трижды проходил собеседования на позицию Sr.Firmware Engineer в компаниях Tesla, Apple и в каком-то стартапе. Нигде не было задач на логику типа вагонов и монет с носками. В стартапе только были задания на знание школьной математики и физики. Их задают, когда нормальных вопросов для интервью придумать не могут?

                                        • +3
                                          Если не секрет, какого рода вопросы были на собеседованиях в Tesla и Apple?
                                          • 0

                                            Не проходил собеседования в Tesla / Apple, но проходил в других больших компаниях, и советую книжку "Cracking the Coding Interview by Gayle Laakmann McDowell". Автор работала в Google, Microsoft, и Apple, и вопросы в больших компаниях в основном очень похожи.

                                            • +2
                                              У меня походу одна из коллег (девушка, как и автор) походу тайно фанатеет от этой книги. Где-то к 10-ой минуте собеседования с ней мне стало грустно и уныло, захотелось пойти домой и попить кофе с зефирками.
                                              Если что, то собеседовали человека ко мне и под мою задачу, а она за компанию пошла…

                                              С другой стороны может и правильный подход
                                              • 0

                                                Неправильный. Крупные компании, в основном, задают такие вопросы на этапе phone screen / skype interview, потому что они не могут позволить себе возить к себе в офис всех за свой счет, и им нужно отсеять 90%. Они отсеивают тех ребят, которые умеют быстро за ограниченное время решать сложные логические задачи.


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

                                                • +2
                                                  Лучший способ отсеять удаленно — попросить написать програмку или попросить дать ссылку на свой код (и то и то хорошо, но не все могут выложить свой код).
                                                  Это вот как раз может отсеять 90% кандидатов, если требования на позицию высокие (если нет, то можно брать всех подряд).

                                                  Конкретно в моем случае, еще 90% отсеивалось после моего увлекательного рассказа что здесь надо делать и через какой мир боли придется пройти. Но тут правда действительно задача для супер-героев.

                                                  Но это все если позиция действительно сложная. Если что-то простое, то можно всех подряд брать, а про boxing и unboxing человек может потом и в MSDN прочитать для общего образования. Потом все равно по какой-то магической причине у человека который рассказывал на собеседовании про boxing/unboxing но все равно пишет:
                                                    Point pt = new Point();
                                                    Console.WriteLine(pt);  
                                                  

                                                  Что в принципе нифига не смертельно.
                                                  Или
                                                  int i = 10;
                                                  ArrayList arrlst = new ArrayList();
                                                  arrlst.Add(i);  
                                                  int j = (int)arrlst[0]; 
                                                  

                                                  Хотя ArrayList наверное никто не использует уже… на самом деле .NET в этом плане несколько более дружелюбный. Это вот в Жабе можно испытать батхерт от Long и long например.
                                                  • 0
                                                    > Потом все равно по какой-то магической причине у человека который рассказывал на собеседовании про boxing/unboxing но все равно пишет:

                                                    А что не так с первым кодом? Да, там есть боксинг, но накладные расходы на него пренебрежимо малы по сравнению со стоимостью вызова `Console.WriteLine`, а усложнять читаемость кода явным вызовом `pt.ToString()` не хочется.
                                                    • 0
                                                      `Console.WriteLine` сам вызывает метод ToString() передаваемого в него параметра (MSDN). Так что не совсем даже понимаю где здесь boxing/unboxing
                                                      • 0

                                                        Console.WriteLine принимает на вход object. Собственно, при преобразовании структуры Point в object и происходит boxing.

                                                        • 0
                                                          Ох, прощу прощения, не сталкивался с Point, думал это просто какой-то произвольный класс, а это структура из System.Drawing. Спасибо за разъяснение.
                                              • 0
                                                Спасибо. Про книгу слышал, но хочется узнать именно про личный опыт.
                                              • 0
                                                Во всех местах просили реализовать какой-нибудь вариант очереди либо стэка. Часто спрашивают про static, const, volatile в С. Почему-то популярный вопрос, как определить, что число — степерь двойки. Разные задачки на простые манипуляции с битами, проверяют знания, как работают сдвиги и логические операции. Простые имплементации связанных списков. Спрашивают как работает RTOS, как происходит переключение контекста, семафоры, мьютексы, зачем это все нужно и чем одно отличается от другого. По алгоритмам самыми сложными были вопросы реализовать binary heap и определить, что связанный список имеет кольцо и разорвать его. Никогда не спрашивали ничего про деревья и графы.
                                                Много вопросов по железу т.к. позиция Firmware Engineer то проверяют есть ли хоть базовые понятия о том, как работает электроника.
                                                • 0
                                                  > Почему-то популярный вопрос, как определить, что число — степерь двойки

                                                  Вызвать инструкцию POPCNT через интринсик компилятора. Такой ответ принимается?
                                                  • 0

                                                    Ответ то примется, но сразу возникнет уточняющий вопрос, как это будет работать на ARM, MIPS, Power, C2000 и т.д. Обычно хотят видеть вот это:
                                                    v && !(v & (v — 1));

                                                    • +2

                                                      В смыле v & (v - 1) == 0 ?

                                                      • 0

                                                        Ну так это тоже что и я написал. Только, в начале, принято аргумент проверить не равен ли он нулю.

                                                        • +1

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


                                                          Тогда я бы написал v != 0 && (v & (v - 1)) == 0.
                                                          Это выражение будет работать одинаково и в С, и в С++, и в Java, и в C#, и в Javascript.

                                                  • 0
                                                    Интересные вопросы. Спасибо за подробный ответ.
                                              • +15
                                                Потратили бы десяток минут за чашечкой чая, поправили бы пунктуацию и прочее, ничего бы страшного не случилось, невозможно же читать.

                                                А ведь это даже не песочница, — приветствую тебя, Хабрахабр образца 2017 года! O tempora, o mores!
                                                • +1
                                                  JosefDzeranov, спасибо. Вы и сами, наверное, cогласитесь с тем, что стало гораздо лучше.
                                                • +3
                                                  sql-ex.ru — для начинающих самое оно
                                                  • +6
                                                    Удивлен, что вам, автор, не предложили middle позицию.
                                                    • 0
                                                      Middle всё же подразумевает опыт и навык в первую очередь, а не пару хорошо проштудированных справочников.
                                                      • +1

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

                                                        • 0
                                                          Разработка, это не просто набор символов в редакторе. Умение адаптироваться и предвидеть, быстро решать то, чего не ожидал это опыт и джуниор его получит не после полугода на проекте, а после 2-3 выпущенных проектов.
                                                          • 0
                                                            От новичка зависит. Про адаптироваться, предвидеть, решать то, что не ожидал — не знаю, кто-то бы назвал это senior, а middle — только решение типовых задач, но полностью самостоятельно, а для предвидения использовать опыт старших товарищей вплоть до VP of engineering, который видит общую картину.
                                                      • 0
                                                        На middle нужен опыт работы.

                                                        Недавно искал работу на должность Middle JS разроботчка. Разместил резюме на сайте поиска работы и мне, однажды, позвонили из одной американской компании (украинский отдел). Дали ссылку на вакансию, там было написано, что требуемый опыт работы 3 года, в то время как у меня всего 2. Думаю ладно, может число с неба взяли. Выполнил задание, прошел тех. собеседование. Через пару дней ответили, что я понравился украинскому отделу, но конечное решение принимает американский, и там думают, что 2 года это мало, поэтому отказ.
                                                        Сам я по этому поводу не сильно расстроился, т.к. уже был оффер, плюс в тестовом задании ножно было использовать, для меня, стэк, что хорошо для развития.

                                                        Но вообще, лучше переспрашивать в подобных случаях.
                                                      • +2

                                                        Про 80% не удивительно, удивительно, что не 100. Такие вопросы и джуниорская зп.

                                                        • 0

                                                          Зарплата вовсе не способностями определяется, а скорее стажем. Часто видел откровенно посредственных сеньоров и даже принципалов как и выдающихся джуниоров.

                                                          • 0
                                                            это говорит только о бездарности руководства и неспособности отличить квалифицированного специалиста, подходящего на должность, от посредственности
                                                            • +1

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

                                                              • 0

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

                                                          • +5
                                                            Я не понимаю зачем джуну задавать столько таких вопросов. Если ты с этим всем работаешь несколько лет, то ты все это хочешь-не хочешь, а запомнил. Но тогда речь пойдет не о джуне. А джун это может только выучить как стишок. Компаниям нужен человек, который хорошо учит стихи и прозу? По-моему лучше послушать как человек рассуждает и понять нормально ли он впишется. А остальное приложится.

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

                                                            Может быть кто-то знает ответы на эти вопросы. Зачем это все?
                                                            • +2
                                                              А что у него еще спрашивать? Джун на то и джун, что у него еще нет опыта, но должно быть максимум зазубренной теории, которую он через практику, превратит в опыт, и тогда он не будет уже джуном. Смысл слушать как он рассуждает? Опыта нет, рассуждать будет по книгам, которые написали люди, которые хорошо пишут книги, не более. Конечно, пообщаться с ним на предмет его адекватности необходимо, ну а дальше только логические задачки и пр.
                                                              • 0
                                                                Ага) меня вот так в институте обучали, вместо практики теория или теория без практики. В итоге я работаю совершенно в другой области. Особенно весело было на первой практике на 4 курсе, когда ты понимаешь, что совершенно не понимаешь куда эту теорию прикладывать и как.
                                                                • +5
                                                                  А зачем этот зазубренный максимум? Лично вам как работодателю или коллеге? У вас это «все-все-все» применяется? Вот сильно сомневаюсь. К тому-же по моему опыту обычно так: есть те, кто может запомнить только если понял до мелочей и те, кто может выучить как стишок. Первые могут рассказать куда меньше, чем вторые, но при этом с практической точки зрения первые безмерно полезнее, чем вторые. Вы все еще думаете, что вам нужен максимум? ;)

                                                                  По поводу логических задачек. Они славятся тем, что нужно «догадаться». Если ты не догадался, то однозначно не решил. К тому-же такие задачки как с носками и монетками вообще неоднозначны. Скажем решил человек задачку положив половину монеток в каждый из носков, а потом запихнул носок в носок. Решил? Да. Но если мы говорим о программисте, то лучше будет если он ее не решит. Потому, что на практике массив и массив с вложенным массивом не одно и то же. Вот и думай теперь хорошо, что он решил или нет.

                                                                  Хотите задачку? Дайте математическую. Для примера. Найти наименьшее натуральное число сумма цифр которого равна 40. Вроде бы ничего сложного. Правда? Но при этом вы проверите как хорошо соискатель знает основы математики, исчисления, как хорошо ориентируется за что отвечает каждый разряд. Начнет-ли он хаотично метаться или пойдет равномерно. Будет использовать прямой перебор или будет, к примеру, использовать максимальное число в каждой разрядности. Решил? Молодец! А 42? И тут могут быть несколько сценариев от мгновенного ответа до повторения части вычислений. Хотите устроить стресс-тест? Не вопрос. Предложите решить эту же задачу с помощью программы. На любом другом языке. Сейчас мало кто требует только один язык. Наверняка в резюме будет Python, а может быть что-то из модного типа Lisp или Haskell. Предложите ему ноут с Linux. Логинитесь в консоль и отдаете. Безусловно нужного языка быть не должно. Мало того, что вы мгновенно узнаете правду ли он написал по поводу администрирования, так еще и узнаете как он себя поведет в экстренной ситуации. Даже если соискатель действительно не первый раз видит Linux он как минимум должен попросить пароль. И даже если первый- не беда. Пусть признается, что нужна помощь и ее стоит оказать и посмотреть как себя поведет дальше и как он решит задачу. Как минимум можно использовать традиционный путь или функциональный подход. Не знаю как вам, а лично мне так нравится куда больше. Во всяком случае намертво заклинить не должно. А потерять перспективного кандидата только потому, что он не умеет монетки по носкам раскладывать — глупо.
                                                                  • +2
                                                                    Найти наименьшее натуральное число сумма цифр которого равна 40

                                                                    Так как система счисления не указана, ответ 4041. ("40" это одна цифра)

                                                                    • 0
                                                                      Если приведет запись суммы цифр числа 40 в 41-ричной системе так что бы в результате получилось 40 — великолепно. А если потом еще и программу напишет, то вообще великолепно ;)
                                                                      • 0

                                                                        Кстати, если не подойдёт 41-ричная, всегда есть палочная. В ней сумма цифр натурального числа всегда равна самому числу. ;)

                                                                        • 0
                                                                          Я ж не против того, что бы от собеседования или теста получали удовольствие все. У меня как-то был случай когда меня отправили по работе на курсы Linux. А так как уровень был продвинутый, то прислали анкету что бы убедится, что не совсем нулевые приедут. А вопросы как всегда какая команда используется для просмотра файлов в директории? И три варианта на выбор. И так мне скучно стало, что я решил, что отнесусь к заданию серьезно. И на каждый вопрос я отвечал, что все команды подходят с примером использования. И так на все вопросы. С курсов позвонили на работу и сказали, что я могу на курсы не ехать и сертификат мне дадут просто так. И что это была самая ржачная анкета за все время проведения всех курсов.
                                                                        • 0
                                                                          А что не так с 41-ричной? знак для числа означающего 40 придумать? ну пусть будет
                                                                          • 0
                                                                            о как, парсер все порезал, оказывается… :(
                                                                • +7
                                                                  Где такие джуниоры ходят? Когда собеседовал людей для интегратора средней руки, мне в основном попадались кандидаты, которые не могли рассказать, что такое односвязный список, притом от слова «совсем».
                                                                  • –7

                                                                    Возможно потому, что знание теории computer science и типов данных (вроде всяких односвязных-двусвязных списков, двоичных деревьев итд) не имеет отношения к прикладному программированию, только если вы не разрабатываете свой ЯП или свою базу данных.
                                                                    И человек может это знать, только если у него в университете был CS101 (чего в российских реалиях ожидать глупо), либо если он готовился к собеседованиям по книгам.


                                                                    А вот что такое Boxing/Unboxing при разработке на C# знать надо, но джуниорам не знать это простительно.

                                                                    • +5
                                                                      Разве структуры данных и алгоритмы не являются типовым предметом на Ит-факультетах? У меня был такой предмет, хотя назвать свой ВУЗ хоть как-то выдающимся я явно не могу.
                                                                      • +2
                                                                        Ну вы со списками и деревьями тут перегнули конечно. Это основы, без понимания которых, даже к написанию к первому «hello world» приступать нельзя. Я тут тоже перегнул, но это так, для баланса
                                                                        • 0
                                                                          Для баланса нужно было перегибать куда меньше, чем сделали вы. Когда вы в последний раз в боевом проекте реализовывали хоть что-то из основных алгоритмов? Уверен, что в подавляющем большинстве проектов прожект если увидит такой код просто скажет заменить вызовом из библиотеки и попросит больше так никогда не делать. И ведь будет более чем прав. Во-первых вы можете налажать. От этого вообще никто не застрахован. А во вторых вы потратили время на то, что уже сделано и отлично работает. Я уже не говорю про то, что сопровождать ваш код будет сложнее.

                                                                          Я не считаю, что не нужно знать основных алгоритмов. Хотя-бы иметь о них представление — очень хорошо. Но что бы прям жить без них было нельзя- большое преувеличение.
                                                                          • 0
                                                                            А никто и не говорит, что нужно каждый день релизовывать односвязные списки. Их нужно знать и понимать, чтобы сделать правильный «вызов из библиотеки». Нужно понимать, когда использовать массив, когда словарь, а когда списки. Понимать в каких частях системы это критично, а в каких нет. Вот зачем всё это надо хорошему программисту, которым хочет стать джуниор.

                                                                            Если джун не знает списков, это, конечно, не приговор, но как минимум это заставляет задуматься, а чем же он занимался в техникуме/колледже/институте и даёт повод задать дополнительные вопросы.
                                                                            • 0
                                                                              Допустим я не знаю как устроен связанный список. Я только знаю его «свойства». Скажем просто узнал что на каком случае лучше работает. Не могли бы вы привести пример как я мог бы его «неправильно» вызвать? Где там вообще можно ошибиться?
                                                                              • –1
                                                                                Допустим я не знаю как устроен связанный список. Я только знаю его «свойства».

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

                                                                                • –1
                                                                                  В каждой нормальной книжке по любому из языков программирования есть раздел об этом. Не нужно ничего анализировать. Все уже разжевано.
                                                                                  • 0
                                                                                    Вы меня троллите чтоли? В книжке описаны свойства односвязного списка, но не описано, что он вообще из себя представляет? Можете пример привести?
                                                                        • +6
                                                                          Я никак не могу взять в толк, толи у меня ВУЗ действительно такой офигенный, толи болшая часть хабровчан учили программирование в пирожковых техникумах (Я как-то был на олимпиаде ссузов и ИТшных техникумов там было представлено 3, ещё пяток технических, остальные какие угодно).

                                                                          Связанные списки мы проходили на первом курсе колледжа. Это обязательная программа на специальность программиста. В госстандарте это первый год обучения специальности, неважно среднетехническое это образование или высшее. Если их в программе нет, то и госдиплом вряд ли в таком учебном заведении можно получить. Разве что «оператор ЭВМ».
                                                                          • 0
                                                                            Жесть, в моем ССУЗе такого и близко не было. Правда и ССУЗ не в РФ. Еще раз убеждаюсь, что даже средне-специальное образование в РФ лучше, чем в Казахстане.
                                                                            • –1
                                                                              Такое не в каждом российском ВУЗе есть.
                                                                              • +1
                                                                                Давайте так, в каком вузе и на какой специальности этого нет?
                                                                                • 0
                                                                                  В моем вузе этот предмет есть, правда начался он на 3 курсе. Вуз КНИТУ-КХТИ, заочное отделение.
                                                                                • 0
                                                                                  вот ФГОС по фундаментальной информатике например, см. учебный цикл «Б.3». это обязательная часть, без нее невозможно получить диплом.
                                                                          • 0

                                                                            Ну так и интегратор средней руки это не работа мечты для крутого студента.

                                                                            • 0
                                                                              Естественно. Зато довольно прагматичный (а в регионах и вовсе единственный) выбор — идешь прокачиваться туда, вырастаешь из своей команды, движешься дальше в сторону мечты :) Вряд ли мы с Вами сможем это достоверно проверить, но так мб даже быстрее получится.
                                                                          • +5
                                                                            Вы точно проходили собеседование на .NET Junior?
                                                                            Когда меня заставляли собеседовать народ, то на джуниора я обычно спрашивал в какие игры играет, какой сорт виски предпочитает, ну можно было спросить опционально про какие-нибудь общие понятие ООП, чтоб совсем несерьезно не выглядеть.
                                                                            А вот решение тестовых задачи и/или ссылки на свой какой-нибудь код — по-моему единственная эффективная по которой можно хоть как-то оценить человека.

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

                                                                            Угу и задают вопросы:
                                                                            Вы находитесь в пустом поезде...

                                                                            Внезапно это как раз олимпиадная задачка…

                                                                            Чойт меня не покидает ощущение, что люди совсем не знают кого хотят набрать, может я постарел и засиделся?
                                                                            • 0
                                                                              Подскажите, а как с поездом правильно решать? Пока одна идея метаться туда обратно. В первом вагоне включаем свет и идем до след освещенного вагона, выключаем там свет и идем обратно в первый вагон, если горит, повторяем
                                                                              • 0
                                                                                Ну да: придется ходить туда-сюда зажигая/отключая свет, увеличивая дальность.
                                                                                Но это вообще олимпиадная задачка: олимпиадники обычно знают решение, прочие — как повезет, но сходу догадается не каждый, тем более за ограниченное время собеседования, можно еще и яркой лампой в лицо в упор светить и проводить собеседование в комнате без окон для создания более дружелюбной атмосферы…

                                                                                Но с другой стороны эта задачка не из воздуха — есть такая штука как «кольцевой(циклический) список» — вот и ходи по нему бесконечно, т.к. хрен его знает где начало, а где конец :-)

                                                                                С монетками — делим по полам, и один носок вставляем в другой…
                                                                                • +1

                                                                                  Присваиваем n=0. Включаем свет, идем вперед на 2^n шагов, выключаем везде свет по пути, идем 2^n шагов назад, если свет в вагоне выключен, значит 2^n больше или равен числу вагонов (и значит, что больше нет вагонов со светом), включаем, считаем, пока не упремся в вагон со светом, возвращаем посчитанное, иначе увеличиваем n и goto 2. Решение честно вычитано где-то в параллельном потоке трепа.

                                                                                  • +1
                                                                                    тоже задумался… пока родил такое:
                                                                                    нужно создать упорядоченную последовательность «включенных» и «выключенных» вагонов при этом откатываться назад и проверять не достигли ли мы конца стека вагонов. И желательно поменьше бегать.

                                                                                    1) включаем свет в первом. ****1****
                                                                                    2) двигаем направо выключая свет в двух справа. Затем заходим в следующий и включаем там.*****100*****
                                                                                    3) возвращаемся по изученным вагонам следим чтоб не произошло изменений 2 темных 1 светлый ***000100***
                                                                                    4) идем налево и оставляем 3 вагона темными и в следующем за ним включаем свет *111110001001111**
                                                                                    5) в итоге мы с каждой итерацией увеличиваем последовательность упорядоченных светлых или темных вагонов и при этом проверяем на ошибки прежние «записи» и при обнаружении ошибки понимаем что кольцо замкнулось. Там уже проще вычислить через сумму чисел до числа равного количеству итераций до ошибки плюс число вагонов в «участке с ошибкой».
                                                                                    • –1

                                                                                      С поездом же совсем просто, проходишь по кругу, всё включаешь потом выключаешь и считаешь. Или я чего-то не понимаю? Единственная видимая засада — надо знать, что вагоны ограничены определённым количеством, теоретически их же м.б. миллиард/триллион, без ограничения сверху задача не имеет решения.

                                                                                      • –1
                                                                                        Ну это естественно)
                                                                                        • 0
                                                                                          А как определить, что ты уже все включил? Вот идешь ты по вагонам, включаешь свет. А потом 500 вагонов подряд свет включен. И какой вывод из этого делать? Во всех вагонах свет включен? Или же в 501 выключен? Пройти еще 500? А если и там включен, а в 1001 выключен? Когда остановиться и начать выключать?
                                                                                          • 0

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

                                                                                        • 0
                                                                                          А это задачка на знание алгоритмов или на хитрость? Например, приходит в голову такой вариант — включаем свет в своем вагоне, ждем, например, полчаса, потом выключаем свет и быстро идем считать вагоны, трогая лампочки. Вагон, в котором выключенная лампочка будет теплой — тот вагон, откуда мы вышли. И всего прошли круг один раз.
                                                                                          • 0
                                                                                            Это вы решили использовать решение с другой задачи про выключатели и лампочки!
                                                                                            • 0
                                                                                              Выкручиваем лампочку в нашем вагоне, кладём себе в карман(чтобы диверсант обратно не вкрутил), и идём вперёд, до тех пор, пока не найдём вагон с выкрученой лампочкой…
                                                                                              • 0

                                                                                                … и тут выясняется, что в вагоне была камера, и через три вагона вас уже ждали.

                                                                                          • +4
                                                                                            Вот без интернирования строк джун ну никак не проживет. Живо себе представляю, как младший разработчик начинает заниматься оптимизацией memory traffic и первым делом приступает к написанию unsafe-кода. Тут ему как раз и помогают эти знания.
                                                                                            • +2
                                                                                              Будто только для написания unsafe-кода нужно это знание. Это отличный вопрос для входа в тему работы строк в c#. Все же есть много новичков пишущих s1+s2+s3+s4+s5 в цикле. Есть и много людей требующих любую конкатенацию из двух строк заменять стрингбилдером или string.Format.
                                                                                              • 0
                                                                                                Все же есть много новичков пишущих s1+s2+s3+s4+s5 в цикле. Есть и много людей требующих любую конкатенацию из двух строк заменять стрингбилдером или string.Format.
                                                                                                Без сомнения. Я имел в виду, что лучше задать вопрос «строки — это ref или value type». Чаще всего говорят ref. Потом спрашиваешь, «а почему же они не изменяемые»? И кто такой StringBuilder? Если уже в этом контексте кандидат упомянет интернирование — честь ему и хвала, но на практике моих собеседований такого не происходило :) Может не те джниоры приходят? А «те» только в Москве?
                                                                                            • –2
                                                                                              Мне одному показалось, что автор кокетничает, говоря о своем удивлении, что его взяли в 80% случаев и о своей низкой самооценке? Мне показалось что он наоборот несколько самоуверен.
                                                                                              • –4
                                                                                                Пройдя 5 собеседований, я выяснил такую вещь: чем позитивнее и свободнее ведешь себя на собеседовании, тем легче и быстрее онао проходит.


                                                                                                — Привет, чувак. Ты что-ли тут самый крутой техдиректор-всех-эректор?
                                                                                                — Спасибо. До свидания.

                                                                                                14 секунд. Весело. Быстро. Рекорд.

                                                                                                PS. А по фразе действительно так. Ищут/ищем же людей, которые не будут меньжеваться на работе. А если товарищ уже на собеседовании зажат и вопроса про промис стремается… Нужен такой, даже если потея ответит правильно? )
                                                                                                • +2
                                                                                                  Хорошо, что я не стал шарпистом. Си шарп джуниоры на собседованиях поднимают системы на паттернах проектирования, пишут нереальные зубодробительные ассинхронные методы и покрывают код юнит тестами, а после этого сидят над суровыми задачами на матан и логику.

                                                                                                  Реально, хреново видимо джниорам, кто шарп выбрал. Если там такие джуниоры, то миддлы там наверно вообще какие-то полумифические нереальные типы, чьё прикосновение может исцелять безнадёжных больных.
                                                                                                  • 0
                                                                                                    Честно говоря, удивляют комментарии здесь типа «куда это вы собеседовались, что столько всего спрашивали?». У меня жена два года назад в Петербурге искала работу на C# Junior позицию — все было примерно так же как и написано.
                                                                                                    Разве что джуниора никто не просит на интерью реализовать систему используя десяток паттернов, которая будет построена целиком на асинхронных вызовах и прямо сразу стопроцентно покрыть все тестами — обычно оценивают базовое понимание и спрашивают пару простых вопросов по каждой теме.
                                                                                                    Ну и я бы не сказал что это какая-то C#-специфика. В Java-мире все обстоит примерно так же, да и даже в C++-мире при подборе джуниоров (вспоминаю свой опыт много лет назад) «глубина допроса» примерно аналогична, только с учетом специфики языка и более высокой цены ошибок.
                                                                                                  • 0
                                                                                                    Вполне себе адекватный список вопросов на джуна на самом деле, если отбросить логические задачи. Во-первых какая-никакая но гарантия что вы будете разговаривать на одном языке во время работы, во-вторых ну а что еще спрашивать у него? К тому же вряд ли автора успевали опросить об этом всем за одно собеседование это компиляция вопросов с 5 разных компаний.
                                                                                                    • 0
                                                                                                      благодарю за интересный материал!
                                                                                                    • 0
                                                                                                      Количество задач — сильно много, на позицию junior — однозначно overhead. Как правило дают 1-3 задачи, иногда, как Вы заметили, задачи дают из трекера компании. Честно говоря, мало тут профильных задач на .Net, скорее они все применимы практически к эдакому универсальному пулу программистов языка/платформы X.
                                                                                                      • 0
                                                                                                        Уважаемый, не прибедняйтесь. Самооценка у Вас в порядке, если Вы написали статью, уж поверьте
                                                                                                        • 0
                                                                                                          Вопросы про SOLID — это точно не джуниоровский уровень. Конечно, их можно просто зазубрить, но толку от этого…
                                                                                                          • 0

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

                                                                                                            • 0
                                                                                                              Решение было выше в комментариях, а в вашем случае, как вы определите, что уже во всех отключили? Ведь количество вагонов не известно, может там просто много подряд отключенных уже до ваших манипуляций было…
                                                                                                              Ссылка на комментарий
                                                                                                            • 0
                                                                                                              Бывает, что работодатель спрашивает — есть ли к нему какие-нибудь вопросы. У вас такое было? Поделитесь тем о чём спрашивали?
                                                                                                              Хм… интересно, есть топ вопросов работодателю на собеседовании? )

                                                                                                              Да, и действительно, а почему бы не проверить уровень работодателя встречными задачами? )) А то может придётся работать на тугодума)
                                                                                                              • 0
                                                                                                                Когда вы ответили на вопрос работодателя, можете спросить его как бы он решал такую задачу. Вполне компетентно!
                                                                                                              • 0

                                                                                                                Мне скоро тоже предстоят собеседования на позицию junior .net developer. Прочитал статью, и выпал в осадок, осознав, что ещё не готов, особенно касаемо паттернов и sql. Потом почитал комменты и как то отлягло)))

                                                                                                                • 0
                                                                                                                  SQL точно обязательно, паттерны еще можно не знать.
                                                                                                                  • 0
                                                                                                                    на позицию ASP.NET разраба, ну или .NET Core бекендера. Давайте не уподобляться плохим HR и уточнять область работы.
                                                                                                                    • 0

                                                                                                                      Вы правы, asp.net developer. Просто мыслью комментария было не это.

                                                                                                                      • 0
                                                                                                                        Вы так говорите, будто базы данных — привилегия веб-проектов. Давайте не будем уподобляться ситхам.

                                                                                                                        ЗЫ Звучит, будто желание узнать область работы — это признак плохого HR'а (=
                                                                                                                        • 0
                                                                                                                          Объективно, в современных реалиях проектов, которые работают на клиенте с локальной бд так, чтоб джойны приходилось писать (особенно на регулярной основе) можно по пальцам пересчитать.
                                                                                                                          Чаще же всего, что на десктопах, что на мобилках в базу просто кешируется ответ от сервера.

                                                                                                                          ЗЫ. либо вы там лишнюю частицу «не» увидели, либо я не знаю. «не уподобляться» и «уточнять» — однородные сказуемые.
                                                                                                                          «Давайте не уподобляться и уточнять» == «Давайте уточнять, а не уподобляться»
                                                                                                                          • 0
                                                                                                                            Бывает, конечно, всякое, но типичное десктопное приложение на .NET будет работать в энтерпрайзном окружении с выделеным БД-сервером и часть бизнес-логики на хранимках и жирные джойны на больших объемах данных — это то, с чем реально можно столкнуться.
                                                                                                                            • 0
                                                                                                                              И конечно же в этом ынтырпрайзном окружении клиент напрямую с базой на сервере работает?
                                                                                                                              • 0
                                                                                                                                Вы так говорите, будто это что-то плохое) Суть дела не изменится, даже если нагородить прослоек.

                                                                                                                                Слыхал, что в некоторых компаниях бывают специальные БД-разработчики, абстрагирующие всю работу с DAL через хранимки, но на практике такого не встречал.
                                                                                                                                • 0
                                                                                                                                  Я слыхал, в других компаниях бекенд пишут, а клиент с API работает. Иногда даже с Rest.
                                                                                                                                  • 0
                                                                                                                                    Суть дела не изменится, даже если нагородить прослоек.
                                                                                                                                    • 0
                                                                                                                                      Действительно. Клиенту как не надо было знать SQL так и не надо. О чем я и писал.
                                                                                                                                      • +1
                                                                                                                                        Я же вам уже оппонировал примером, что полно проектов, где пишут разного плана морды на C# в фулл-стек и SQL — маст ноу (= Сказать, что SQL совсем не нужен джуниору — это сильно сузить круг возможных вакансий для него.
                                                                                                                                        • 0
                                                                                                                                          Вот еще раз, нахрена «жирные джойны» на клиентах? Все жирные джойны должны быть на серверной стороне. Не важно, на хранимках это будет делаться, на вьюхах, или будет полноценный клиент с Rest-api.
                                                                                                                                          Гнать SQL по сети, а уж тем более делать «жирный джойн» на клиенте идея очень плохая.

                                                                                                                                          Вот и остается, что SQL нужен бекендерам и ASP.Net-чикам.