en
Feedback
Собеседования C#

Собеседования C#

Open in Telegram

Канал о собеседованиях в ИТ. В основном по C# но есть и общие вопросы. По всем вопросам к @al322se . Провожу консультации по подготовке к собеседованиям в том числе для мидлов и сеньоров

Show more
261
Subscribers
No data24 hours
+17 days
+830 days
Posts Archive
Как сделать резюме лучше Сейчас есть куча сервисов и менторов, которые занимаются улучшением резюме. (Насчет сервисов, может быть и ухудшением 😄) Есть очень простой бесплатный лайфхак, которым мы начали пользоваться с друзьями еще много лет назад. Выгрузить резюме в гугл док и отправить на ревью паре тройке друзей. Да лучше бы из ИТ и лучше бы вашей специализации, но необязательно. Очень просто, бесплатно, но никто не делает... Ну и да, обычно бывает где-то по три итерации комментариев и правок, это нормально =) #interview

Stop the world Ни одно собеседование от джуна до сеньора не обходилось без вопросов про Garbage Collector. Естественно ожидается разная глубина знаний, но знания некоторых понятий ожидают от всех. Расскажу про одно из понятий при сборке мусора - Stop the world. Когда GC осуществляет сборку ему нужно пройтись по всем ссылкам и проверить на какие объекты ссылки можно удалять. Для этого все потоки, кроме одного (потока сборщика мусора) останавливаются. Эта ситуация называется Stop the world Картинка ссылкой https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/media/gc-triggered.png #junior #middle

Логи метрики трейсы Несколько раз замечал особое отношение собеседующих к темам логов и около них. Есть ощущение, что таким образом неявно проверяется насколько человек работал с реальными крупными проектами и насколько он вовлечен в что-то около непосредственно языка. Есть даже ощущение , что эта тема бывает переходной в решении кандидат скорее слабый мидл/джун или наоборот сильный мидл сеньор. Кое что из новенького (относительно) по этой теме. Есть такой проект https://signoz.io/ . Главный его плюс - это то что он сразу включает в себя трассировку, логи и метрики. Если буду делать пет проект обязательно попробую его =) #middle #senior

Сопроводительные письма и отклики Вчера общался с HR-ом из IT индустрии в неформальной обстановке. Решил здесь отписать саммари: 1. Площадки по степени использования при поиске кандидатов HH>Linkedin->тематические чаты telegram. 2. Нужно откликаться на вакансии в HH. Первыми отсматривают именно их. 3. Сопроводительные письма повышают конверсию. Для сеньора за которым все гоняются позволительно не писать их, а если на эту вакансию условно 200 откликов и это junior/middle позиция - обязательно писать. Писать лучше всего следующее: сравнить свое резюме и вакансию и в письме написать, что знаешь или хотя бы хочешь узнать и читал про технологии с которыми не было опыта. Ну и да, нужно будет реально читать, перед собеседованием =) #junior #interview

Как перейти с первой работы Частая ситуация - устроился на первую работу хоть на какую-гибудь в ИТ. А там очень старые технологии WinForms,WPF, куча легаси. Может вообще какой-то около шарповый LowCode. И вроде проработал уже год, есть реальный опыт, но в вакансиях везде в требованиях ASP.NET, docker, новые технологии... 1. Попросить/предложить на текущем месте сделать что-то по новому. Не нужно боятся ответственности. Сначала шок, потом начинаешь делать - и вот уже рывок, ты реально разбираешься и еще сделанная задача и респект от руководителя. 2. Пет проекты наше все Наверно я бы даже начал с этого пункта. Тогда и на работе проще предлагать. Для начала можно сделать TodoMvc с docker,postgres, EF. Таких примеров полно на гитхаб. Можно попробовать сделать что-то реально интересное для себя на новых технологиях. Это точно поможет и как опыт при найме и чтобы на текущей работе смелее предлагать. 3. Найти ментора. Сейчас куча ресурсов где можно сделать это за денежку, собственно я этим тоже занимаюсь. Тут будет поструктурированней и точно будут заниматься, а можно поскрести по знакомым. Чтобы какой-то друг друга, работающий на highload проекте рассказал, а как оно там, может вообще порекомендовал😏 4. Не бойтесь собеседоваться. Собеседования это тоже скилл. Ничего страшного, что первые пару будут не очень. Зато узнаете где конкретно у вас просадка. А может повезет и сразу же найдете супер работу ))) #junior #interview

Что нового в... Один из частых вопросов на собеседовании это что нового в последних версиях языка или платформы. Это делается для того , чтобы понять держит ли кандидат руку на пульсе Вот кое что из (относительно) новенького: В .net 9 появился класс System.Threading.Lock. Его использование
using (myLock.EnterScope())
{
    ...
}
Он немного более быстрый, чем обычный lock с просто new object() , а еще поддерживает рекурсивный вход и выход(сколько раз поток вошел, столько же он должен и выйти из секции). Плюс постепенно когда разработчики перейдут на этот новый класс, то можно будет перестать оптимизировать условно все объекты под использование монитора. В c# 13 появилась автоматическая поддержка ключевого слова lock для нового типа который появился в .net 9. Т е только с 13 версии шарпа этот новый тип можно использовать по старинке

    private readonly Lock _lockObj = new();
    lock (_lockObj)
        {
           
        }
И это будет компилироваться в использование нового подхода, а до 13 версии это бы раскрылось в такой же код как если бы использовали просто любой new object()Monitor) #junior #middle #senior

О канале и обо мне Меня зовут Семен =) Я около 12 лет работаю разработчиком на c#. Был сеньором, лидом , архитектором, начальником отдела, поработал в Microsoft через аутсорсера, сейчас senior в крупной компании. Уже несколько лет я занимаюсь подготовкой к собеседованиям по C#. Началось с того, что я это делал "по работе" в аутсорс компании - там я готовил людей к собеседованиям с заказчиками и сам очень много собеседовал для приема к нам. Потом друзья.. Потом во время ковида, решил, что срочно нужно накопить подушку 😄 и попробовал делать это за деньги. Получалось, люди меняли работу на сильно более оплачиваемую. Сейчас решил привлечь больше людей, что-то , думаю, сконвертируется в консультации, а что-то просто будет полезно почитать😊 Про канал Он точно будет полезен людям которые хотят попасть войти и тем у кого небольшой опыт в разработке на C#. Основная тема - это собеседования. Здесь будет и технический контент непосредственно по языку. Разборы резюме, кейсы подготовки. Для тех кто уже относительно давно работает хочу рассказывать темы вроде "как просить денежку/расти на текущей работе", "конфликты интересов", как оценивать задачи и т. д PS Если скинете хотя бы одному знакомому шарписту буду рад🤝

Какую IDE лучше всего использовать ? По большому счету сейчас есть 3 варианта для написания кода на c# vs-code https://code.visualstudio.com/ он скорее удобен как универсальный редактор - открыть json отредактировать. Для того чтобы работать с c# его нужно настраивать и он все равно вряд ли даст такое же удобство как "большие IDE". На ее базе сделана AI ide https://www.cursor.com/ но это отдельная история =) Visual studio - вроде как вариант по умолчанию... Но я уже не помню сколько лет назад я ее открывал. Когда-то давно когда я еще в ней работал, то уже приходилось ставить Resharper - плагин от Jetbrains который сильно улучшал жизнь. Когда Jetbrains выпустили полностью IDE для работы Rider все радостно ушли на него Rider https://www.jetbrains.com/rider/ - сейчас насколько знаю есть community версия которую можно просто скачать. Все кого я знаю сейчас пишут на нем. Еще он сразу поставит .net runtime .net sdk и работает на MAC и Linux. Точно стоит использовать его и уже потом обдумывать если чем-то не устроит

Рефлексия Рефлексия в C# — это механизм, который позволяет анализировать и взаимодействовать с типами, методами, свойствами и другими элементами программы во время выполнения. Пример:
class Program
{
    static void Main()
    {
        // Получаем тип класса Example
        Type type = typeof(Example);

        // Создаем экземпляр класса
        object instance = Activator.CreateInstance(type);

        // Устанавливаем значение свойства
        PropertyInfo property = type.GetProperty("Number");
        property.SetValue(instance, 42);

        // Вызываем метод
        MethodInfo method = type.GetMethod("Print");
        method.Invoke(instance, null);
    }
}
Все где мы работаем с информацией о типах свойствах методах и так далее это рефлексия. С помощью нее можно делать очень гибкие штуки. А еще,например, аттрибуты нужны как раз когда мы планируем доставать их с помощью рефлекссии. При этом она медленная ( Один раз пройтись по типам во время старта приложения - это окей, а постоянно обращаться -будет тратить много ресурсов

В чем разница между Task и Thread? Thread Это низкоуровневый объект, представляющий отдельный поток выполнения. Прямое управление потоком: создание, запуск, остановка. Ресурсоемкий: каждый поток занимает память и процессорное время. Подходит для задач, где нужен полный контроль над потоком. Task Это высокоуровневая абстракция для асинхронных операций. Работает поверх пула потоков (ThreadPool), что эффективнее. Упрощает асинхронное программирование с помощью async/await. Подходит для I/O-операций (например, работа с файлами или сетью). Наверно самое главное Task только представляет собой задачу на выполнение, в зависимости от того как он создан, он может и не запуститься. Thread это реальный поток операционной системы после thread.Start(); он будет запущен

Самые популярные вопросы на собеседовании Их достаточно много. Мой личный топ для junior это пожалуй Что такое stack и куча? Что в них хранится? Как работает сборщик мусора? Что такое очередь для файнализации? Что такое using Что такое boxing unboxing Что такое дженерики? Что такое ref и out параметры? Что такое мьютекс семафор монитор autoreset event manualresetevent volatile атомарные операции Но вопросы часто меняются. Наверно если выделить то наверняка спросят ООП SOLID что -то про сборку мусора , синхронизация потоков и коллекции. А еще как вариант посмотреть вопросы тут https://easyoffer.ru/rating/c_sharp_developer Естественно там не все и спрашивают еще и по базам, но это полезно

Что такое .NET и чем он отличается от C#? .NET — это платформа для разработки и выполнения приложений. Она включает библиотеки, среду выполнения (CLR — Common Language Runtime) и поддерживает несколько языков, например, C#, F# и VB.NET. C# — это язык программирования, который работает на платформе .NET. Он используется для написания кода, который затем выполняется в .NET. CLR — это "движок" .NET, который управляет выполнением кода. Он включает: JIT-компилятор (Just-In-Time) — преобразует промежуточный код (IL) в машинный код во время выполнения программы. Управление памятью (сборка мусора). Обработку исключений и безопасность. Пример: вы пишете код на C#, он компилируется в промежуточный язык (IL), а CLR с помощью JIT преобразует его в машинный код и выполняет.

На какой технологии начать практиковаться в C# А какие вообще есть : Консоль - самое простое из интерфейса только терминал Windows Forms - приложения с интерфейсом для Windows выглядят примерно как из 2000 х WPF - приложения с красивым интерфейсом для Windows (и можно заморочится под linux/mac) ASP.NET Web API - то на чем пишут сервисы и в целом серверный код на c# ASP.NET Web MVC/Razor Pages - когда пишут и серверный код и фронтэнд на c#( На самом деле не совсем, там так же javascript HTML и CSS но часть действительно на c#). Это про то как почти вся страница собирается на сервере и только немного меняется в браузере ASP.NET Blazor - написание кода на c# который компилируется в javascript так же для фронт энда Для самого начала, чтобы посмотреть на язык стоит попробовать консоль. А если хочется что-то поинтереснее или увидеть UI лучше сразу пробовать что-то из ASP. Такие проекты больше заинтересуют работодателей. Самое лучшее если хочется UI попробовать MVC/Razor Pages. Это уже интересно как опыт, но не так сложно как Blazor

Как ответить про Git на собеседовании? Git — это система контроля версий, которая помогает отслеживать изменения в коде и раб
Как ответить про Git на собеседовании? Git — это система контроля версий, которая помогает отслеживать изменения в коде и работать в команде. Основные команды: git init — инициализация репозитория. git clone <url> — клонирование репозитория. git branch <name> — создание новой ветки. git checkout <branch> — переключение на ветку. git add <file> — добавление изменений в индекс. git commit -m "message" — фиксация изменений с комментарием. git push — отправка изменений на удаленный репозиторий. git pull — получение изменений с удаленного репозитория. git merge <branch> — слияние веток. git log --graph — просмотр истории коммитов с визуализацией веток. Пример вывода git log --graph:
*   commit abc123 (HEAD -> main)
|   Merge branch 'feature'
|  
| * commit def456 (feature)
|/  Add new feature
|  
* commit ghi789
  Initial commit
А еще, особенно когда только начинаешь очень удобно пользоваться программами для визуализации. Например https://www.sourcetreeapp.com

Как работает enum и зачем он нужен Enum в C# — это перечисление, которое позволяет задать набор именованных констант. Например, для дней недели или статусов заказа. Он улучшает читаемость кода, ограничивает допустимые значения и упрощает поддержку. По умолчанию каждому элементу присваивается целочисленное значение, начиная с 0, но можно явно задать свои значения. Enum часто используется в switch-case для удобства обработки различных состояний. Из интересного это так же value тип , а еще у него можно задать флаги чтобы работать побитово со значениями
[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

Boxing unboxing — Что это? Boxing — это упаковка экземпляра значимого типа (лежит в стэке) ссылочный (лежит в куче). Unboxing — обратный процесс, когда объект приводится обратно к значимому типу. — Как это работает? Когда int кладут в object, создается новый объект в куче — это boxing. Когда извлекают обратно в int, происходит unboxing. — Какие проблемы? Boxing и unboxing затратны по памяти и производительности. Например, если часто класть int в ArrayList (хранит object без дженериков), каждый раз будет создаваться новый объект в куче. В .NET используют List, чтобы избежать этого.

Как отвечать на вопрос про ООП Обычно ждут перечисления основных принципов: — Инкапсуляция: защищает данные от некорректного использования. В классе BankAccount поле balance закрыто, а доступ к нему возможен только через методы Deposit и Withdraw, которые проверяют корректность операций. — Наследование: позволяет создавать новый класс на основе существующего. Есть базовый класс Animal с методом MakeSound(), от него наследуются Dog и Cat, переопределяя этот метод для лая и мяуканья. — Полиморфизм: один интерфейс – разное поведение. Метод Draw() в классе Shape переопределяется в Circle и Rectangle, где реализуется своя логика отрисовки. — Абстракция: скрывает детали реализации. В абстрактном классе Vehicle есть метод Move(), но его реализация оставлена для наследников – Car и Bicycle, где движение осуществляется по-разному. А еще его часто задают, чтобы начать беседу и перейти к другим вопросам, например: — Чем отличается абстрактный класс от интерфейса? — Как используется new при наследовании?

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