Интересности      Книги      Утилиты    

16 декабря 2009 г.

C#: вопросы с собеседования. Часть 1

 

What is difference between overloading and overriding?

overloading — механизм вызова одноимённых методов с различными типами параметрами, при котором конкретный метод выбирается на этапе компиляции.
overriding — переопределение виртуальных функций

Class inherits from two interfaces containing methods with the same signature. Is it possible to provide different implementations for these methods?

Да, придется явно(explicit) имплементировать интерфес для этих методов

What can be a root reference?

Cтатическое поле класса и параметр или переменная в кадре стека

What is special about the declaration of relational operators?

Что такое relational operators можно посмотреть здесь(http://www.blackwasp.co.uk/CSharpRelationalOperators.aspx). Так вот, они дожны быть парными

How 'public internal' access modifier affects visibility?

internal ничего не меняет для public

Can a local variable get garbage collected before it becomes out-of-scope?

Нет, только если локальная переменная ссылается на объект который собирает сборщик. Локальная переменная не может быть удалена коллектором, потому что мы еще не вышли из scope при выполнении программы. Но локальной переменной могли передать ссылку на объект. Тогда казалось бы объект может быть подчищен. Но. На объект есть ссылки значит чистить его тоже нельзя

What implementations of serialization are built in FCL? Where are they used?

XML сериализация и бинарная сериализация

Does the size of an array need to be defined at compile time?

нет

Can a destructor have access modifiers?

Сам деструктор в шарпе нет. Но тут есть свои подводные камни. И вопрос в том как трактовать. В шарпе есть деструкторы и файналайзеры. Берем дальше есть CLR - а это не только шарп это и VB.NET и куча других функциональных и скриптовых языков. Есть там деструкторы? В своем роде - да, хотя это и не их синтаксис. Файналайзер и деструктор по сути одно и то же. Вот например поэтому то что можно написать вот так:

   ~MyClass()

   {

      // do work here

   }

идентично следующему

   MyClass.Finalize()

   {

      // do work here

      base.Finalize();

   }

а файналайзер у System.Object обявлен как protected.

What is smallest integer type to represent number not greater than 40 000?

Некорректный вопрос, не указана нижняя граница -2^61 тоже 'not greater than 40 000' при такой постановке вопроса такого типа не существует (вернее, это будет BigInt).

перевожу

Назовите наименьший целый тип которым можно представить число меньшее(не больше) 40000.

Так давайте разберемся.

sbyte (-128 до 127) т.е. 127 < 40000

byte (0 до 255) т.е. 255 < 40000

short (-32,768 до 32,767) т.е. 32 767 < 40 000

ushort (0 до 65,535) т.е. 0 < 40000

int (-2,147,483,648 до 2,147,483,647) т.е. -2,147,483,648 < 40000

uint (0 до 4,294,967,295) т.е. 0 < 40000

long (-9,223,372,036,854,775,808 до 9,223,372,036,854,775,807) < 40000

ulong (0 до 18,446,744,073,709,551,615) т.е. 0 < 40000.

Т.е. любой из типов подходит под вопрос. И что значит наименьшый? По размеру типа или по значениям которые он представляет.

What is array rank?

число измерений массива

What does keyword 'stackalloc'?

stackalloc — оператор создания объекта на стеке, возвращает укзатель на созданный объект

What encoding uses 'System.String' class?

на практике UCS-2, везеде пишут просто unicode

What is boxing and unboxing?

boxing — создание объекта в куче для объекта на стеке (приведение переменной значимого типа к переменной ссылочного), unboxing — обратный процесс

1 комментарий:

  1. Спасибо за вопросы, поспособствовали изучению темных моментов. Есть несколько уточнений:

    What is smallest integer type to represent number not greater than 40 000?
    Вопрос некорректен, однако несколько по другой причине. Есть только 3-и типа для представления чисел меньше 40 000 sbyte, byte и short, как Вы и показали. Это должен быть наименьший тип, так что остается 2-а типа: sbyte и byte, а нужно назвать один.

    Can a destructor have access modifiers?
    Здесь однозначный ответ: нет, нельзя. В C# есть деструктор (~MyClass), модификаторов он иметь не может. Finalize нельзя переопределять (или вызывать) самостоятельно, это и есть метод, который компилятор создаст автоматически из деструктора.

    ОтветитьУдалить