8 заданий по C#, которые могут попасться на собеседовании

1
37128
Добавить в избранное

Изучаете C#? Проверьте, готовы ли к трудоустройству.

«C#»

1. Напишите программу для сложения всех чётных чисел в массиве

Как надо:

Вариантов много, вот 2 самых простых:

или

Есть несколько ключевых моментов:

1) Используете ли вы конструкции, позволяющие написать код в одну строку?

2) Рассматриваете ли вы ситуацию с переполнением. Например, реализация intArray.Where (i => i% 2 == 0) .Sum () может быть легко написана в одну строку, но тогда высока вероятность переполнения Способы решения задачи выше не исключает такой проблемы, но вероятность её возникновения не высока. Будет хорошо, если вы уточните ожидаемый размер массива.

2. Каков будет результат короткой программы ниже?

Ответ:

На выходе будет:

Обе переменные неинициализированы, но String со ссылочным типом, а DateTime — с типом значения. В качестве типа значения для DateTime устанавливается значение по умолчанию в полночь 1/1/1, а не null.

3. Является ли сравнение time и null в выражении if валидным? Почему?

Ответ:

Можно подумать, что компилятор будет жаловаться, когда переменная DateTime сравнивается с нулем. Однако компилятор действительно допускает это, что может потенциально привести к ошибкам headfake и pull-out-your-hair.

В частности, оператор == будет передавать свои операнды в разные допустимые типы, чтобы получить общий тип, который он может затем сравнить.

Однако это может привести к неожиданному поведению, как это происходит при сравнении DateTime и null. В этом случае, как DateTime, так и null могут перейти к Nullable <DateTime>. Поэтому можно сравнивать два значения, но результат всегда будет ложным.

4. Напишите код на C# для вычисления окружности, без изменения класса circle

Один из верных ответов:

Поскольку у нас нет доступа radius поля объекта, объект сам должен посчитать окружность, с помощью inline.

Менее красивое решение (извлекаем из объекта значение радиуса и затем выполняем вычисление с результатом):

В любом случае, основная цель задания, посмотреть, как вы работаете с calculate.

5. Каков результат работы программы ниже? Поясните свой ответ

Что изменится, если поменять await Task.Delay(5); и Thread.Sleep(5)?

Ответ на первый вопрос: программа просто выведет пустую строку (а не «Hello world!»). Это связано с тем, что result будет неинициализирован при вызове Console.WriteLine.

Большинство программистов ожидают, что функция будет выполняться от начала до конца или до return. Это не относится к функциям async. Они выполняются только до первого await, а затем возвращаются к вызывающему объекту. Функция, вызванная await (в данном случае Task.Delay), выполняется асинхронно, а строка после оператора ожидания не сигнализируется для выполнения, пока Task.Delay не завершится (через 5 миллисекунд).

Вызов await Task.Delay (5) позволяет текущему потоку продолжать работу, и если всё в порядке, возвращать его в пул. Это основное преимущество механизма async / await. Это позволяет CLR обслуживать больше запросов с меньшим количеством потоков в пуле.

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

Что касается второго вопроса, если await Task.Delay (5); был заменен Thread.Sleep (5), программа выдаст Hello world !. async без хотя бы одного await в нем работает точно так же, как синхронный метод; то есть он будет выполняться от начала до конца или до return. Вызов Thread.Sleep () просто блокирует поток, добавляя 5 миллисекунд к времени выполнения метода SaySomething ().

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

Ответ:

Эта программа выведет число «10» десять раз.

И вот почему: delegate добавляется циклически, однако параметр i передаётся по ссылке. Поэтому, по окончании цикла i равно 10, и при каждом запуске delegate будет выводиться работать с этим значением

7. Сравните структуры и классы в C#. Что они имеют общего? Как они отличаются?

Ответ:

Классы и структуры в C# имеют несколько общих черт, а именно:

  • Являются составными типами данных
  • Могут содержать методы и события
  • Могут поддерживать интерфейсы

Но есть ряд различий. Вот сравнение:

Классы:

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

Структуры:

  • Не поддерживают наследование
  • Типы значений
  • Передаются по значению (например, целые числа)
  • Не могут иметь нулевую ссылку (если не используется Nullable)
  • Нет места в памяти для instance

8. Напишите программу на C#, которая преобразует получаемые данные о расстоянии в километрах в метры и выводит результат

Решение:

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

Источник: Toptal.com

Готовитесь к собеседованию?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




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