Вопрос об Интервью Потенциала C# … Слишком трудно? [закрытый]

Я не хочу, чтобы мой родительский класс был слишком длинным, поэтому я отделил некоторые методы от него

Хорошо.

Итак, я создаю дочерний класс, однако я не хочу использовать дочерний класс в качестве экземпляра.

Нет, подклассы - неправильный подход. Особенно, если вы не хотите создавать экземпляр подкласса, это даже не решение вашей проблемы.

Чтобы разделить блоки кода, разделите их на отдельные функции. Они не должны быть связаны с вызывающей стороной посредством наследования и вообще не должны быть методами класса. Просто напишите

class MyClass {
  myMethod() {
    foo();
  }
}

function foo() {
  console.log('foo!');
}

const instance = new MyClass();
instance.myMethod();

или составьте свой объект из нескольких более мелких помощников:

class Outer {
  constructor() {
    this.helper = new Inner();
  }
  myMethod() {
    this.helper.foo();
  }
}

class Inner {
  foo() {
    console.log('foo!');
  }
}

const instance = new Outer();
instance.myMethod();
18
задан 11 revs, 4 users 61% 1 October 2008 в 02:28
поделиться

13 ответов

Слишком трудно? Нет, но какова Ваша цель в вопросе? Что Вы ожидаете получать от своего интервьюируемого? То, что они знают эту конкретную синтаксическую причуду? То, что любое средство, что они изучили спецификацию/язык хорошо (хороший для них) или что они столкнулись с этой проблемой (надо надеяться, не от того, что они записали, но если они сделали - yikes). Никакой случай действительно не указывает, что у Вас есть солидный программист/инженер/архитектор на Вашей руке. Я полагаю, что то, что важно, не является вопросом, но обсуждением, окружающим вопрос.

, Когда я беру интервью у кандидатов, я обычно спрашиваю тот обманчиво простой вопрос, который основан на языке семантическая причуда - но я не забочусь, знает ли мой интервьюируемый это, потому что та семантическая причуда позволяет мне открывать много проспектов, которые позволяют мне узнавать, является ли мой кандидат методическим, их коммуникационный стиль, если они готовы сказать, "Что я не знаю", действительно ли они способны к размышлению на ногах, они понимают дизайн языка и архитектуру машины, они понимают платформу и проблемы мобильности - короче говоря, я ищу много компонентов, которые все составляют в целом, "они получают его?". Этот процесс занимает час или больше.

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

26
ответ дан 30 November 2019 в 05:37
поделиться

Я действительно не использовал бы это в качестве вопроса об интервью. Я знаю ответ и обоснование позади него, но что-то вроде этого должно подходить так редко, что это не должна быть проблема. Знание ответа действительно не показывает много о способности кандидата кодировать.

Примечание, что Вы получите то же поведение, даже если A.Foo будет виртуальным и B переопределяет его.

, Если Вам нравятся загадки C# и причуды, , у меня есть некоторые также (включая этого) .

56
ответ дан 30 November 2019 в 05:37
поделиться

Это на самом деле - вопрос о приеме.

ответ неоднозначен относительно того, что "должно" произойти. Несомненно, компилятор C# вынимает его из области неоднозначности к бетону; однако, так как эти методы перегружают друг друга и не являются ни переопределением, ни затенением, разумно предположить, что "лучшее соответствие аргумента" должно применяться здесь и поэтому прийти к заключению, что это - A:: Нечто (интервал n), который нужно назвать при обеспечении целого числа как аргумента.

, Чтобы доказать, что то, что "должно" произойти, неясно, тот же самый код, когда выполнено в VB.NET имеет противоположный результат:

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                              Handles Button1.Click
        Dim b As New B
        b.Foo(5)   ' A::Foo
        b.Foo(5.0) ' B::Foo
    End Sub
End Class

Class A
    Sub Foo(ByVal n As Integer)
        MessageBox.Show("A::Foo")
    End Sub
End Class

Class B
    Inherits A

    Overloads Sub Foo(ByVal n As Double)
        MessageBox.Show("B::Foo")
    End Sub
End Class

я понимаю, что открываю возможность для программистов C# "колотить" VB.NET за то, что он не выполнил C#. Но я думаю, что можно было привести очень веский довод, что это - VB.NET, который делает правильную интерпретацию здесь.

Далее, IntelliSense в IDE C# предполагает, что существует две перегрузки для класса B (потому что существует или по крайней мере должно быть!), но B.Foo (интервал n) версию на самом деле нельзя назвать (не без первого явно кастинг к классу A). Результат состоит в том, что IDE C# не находится на самом деле в синхронизации с компилятором C#.

Другой способ посмотреть это - то, что компилятор C# берет намеченные перегрузки и превращает его в затененный метод. (Это, кажется, не правильный выбор мне, но это - очевидно, просто мнение.)

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

5
ответ дан 30 November 2019 в 05:37
поделиться

Едва ли ярмарка как вопрос об интервью, поскольку это - определенный вопрос о приеме. Хороший ответ, который я хотел бы от интервьюируемого, будет больше вроде , "Которому нужен рефакторинг" .

, Если Вы не надеетесь нанимать кого-то для работы над компиляторами, я не уверен, что необходимо пойти так очень подробно в CLR.

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

5
ответ дан 30 November 2019 в 05:37
поделиться

Консоль. WriteLine ("B:: Нечто");

, поскольку это будет бросать automatictly и использовать первое, не идя далее в наследовании.

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

7
ответ дан 30 November 2019 в 05:37
поделиться

Другое голосование против использования его, но по другой причине.

При помещении на месте как это много действительно хороших программистов придумает неправильный ответ, но не потому что они не знают понятий или не могли понять это. То, что происходит, - то, что они будут видеть что-то вроде этого и думать, "Ага, обманите вопрос!", и затем продолжите двигаться к - думают самостоятельно в ответе. Это особенно верно в установке интервью, где они не обладают преимуществом IDE или Google, или любой другой из другого помогает программисту, считает само собой разумеющимся в свое время ко дню, программируя.

10
ответ дан 30 November 2019 в 05:37
поделиться

Не мог согласиться больше с Joel там. Я имею 20 + дизайн опыта лет и кодирование и первая вещь, о которой я думал, когда я видел, что это было: Это даже не скомпилирует.

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

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

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

12
ответ дан 30 November 2019 в 05:37
поделиться

Я думаю, что это - ужасный вопрос. Я думаю, что любым вопросом является ужасный вопрос, когда реальный ответ "Выполняется он, и посмотрите!"

, Если бы я должен был знать это в реальной жизни, это точно, что я сделал бы: Создайте тестовый проект, включите его в и узнайте. Затем я не должен волноваться об обосновании краткого обзора или тонкостях в спецификации C#.

Как раз сегодня я столкнулся с таким вопросом: Если я заполняюсь, то же ввело DataTable дважды с той же строкой, что произойдет? Одна копия строки, или два? И это перезапишет первую строку, даже если я изменил его? Я думал о выяснении у кого-то, но я понял, что мог легко разжечь тестовый проект, который я уже имел, который использовал DataSets, запишите маленький метод и проверьте его.

Ответ:

... ах, но если я говорю Вам, Вы упустите суть.:) Точка, в программировании Вас не должны оставлять эти вещи как hypotheticals, и Вы не были должны , если они могут быть обоснованно протестированы.

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

3
ответ дан 30 November 2019 в 05:37
поделиться

используйте его в качестве вопроса только, пока Вы ожидаете, что кандидат скажет Вам свои мыслительные процессы, поскольку он описывает то, что он думает, должен происходить. Кто заботится о праве и неправильности фактического рассматриваемого кода - в реальном мире, кандидат нашел бы код как это, найти это не работой и отладить его с комбинацией отладчика и вызовов writeline, таким образом, это - бесполезный вопрос, если Вы хотите кандидатов, которые знают (или предположение) правильный ответ.

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

2
ответ дан 30 November 2019 в 05:37
поделиться

Это имеет привкус вопроса о приеме мне. При использовании языка довольно долго Вы, вероятно, столкнулись с проблемой и знаете ответ; но сколько времени достаточно длинно?

Это - также вопрос, где Ваше образование могло бы работать против Вас. Я знаю в C++, определение в B скрыло бы определение в A, но я понятия не имею, работает ли это то же в C#. В реальной жизни я знал бы, что это была сомнительная область, и попытайтесь искать его. В интервью я мог бы попытаться предположить, будучи помещенным на месте. И я, вероятно, понял бы его превратно.

2
ответ дан 30 November 2019 в 05:37
поделиться

Попробуйте подобный образец, данный ниже:

class Program
{
    class P
    {}
    class Q : P
    {}

    class A 
    { 
        public void Fee(Q q)
        {
            Console.WriteLine("A::Fee");
        }
    }

    class B : A 
    {   
        public void Fee(P p)
        {
            Console.WriteLine("B::Fee");
        }
    }

    static void Main(string[] args) 
    { 
        B b = new B();   
        /* which Fee is chosen? */  

        b.Fee(new Q());
        Console.ReadKey();
    }
}

компилятор, кажется, предпочитает связываться "b. Сбор ()" звонит в доступный метод типа, а не унаследованного метода (метод базового типа), если параметр может быть неявно брошен для соответствия какому-либо такому методу. Т.е. неявный кастинг параметра имеет приоритет по соединению метода базового класса.

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

0
ответ дан 30 November 2019 в 05:37
поделиться

Это - смешной вопрос спросить - я мог ответить на это в < 60 секунд с Компилятором Отрывка, и если я когда-нибудь работал в кодовой базе, которая зависела от функциональности - она будет быстро пересмотрена из существования.

лучший ответ, "это - глупый дизайн, не делайте этого, и Вы не должны будете анализировать спецификацию языка для знания то, что это собирается сделать".

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

  • Примечание, что в неофициальной ситуации, мелочи фаната как это могут быть забавой и интересный. Но интервьюируемому интервью является совсем не забавой или неофициальный - почему далее волнуют его с тривиальными вопросами, которые не знает интервьюируемый, относитесь ли Вы серьезно или нет?
3
ответ дан 30 November 2019 в 05:37
поделиться

Код, указанный в вопросе, напечатает B :: Foo .

0
ответ дан 30 November 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: