Наверное, той же комиссией, к-рая подтвердила неполноценность Довлатова
Какие вопросы задавать на интервью
-
- Уже с Приветом
- Posts: 7935
- Joined: 08 Oct 2008 01:02
- Location: usa
-
- Уже с Приветом
- Posts: 2264
- Joined: 17 Jun 2003 04:41
- Location: Just like US
Re: Какие вопросы задавать на интервью
Главная задача интервью - определить с какими социальными меньшинствами претендент себя идентифицирует. Наймете случайно мужика, да еще окажется неполиткорректным белым супрематистом - на форум потом жаловаться не бегайте, так вам и надо!
А то C++ какой-то, детский сад, понимаешь...
А то C++ какой-то, детский сад, понимаешь...
...а мы такой компанией, возьмем, да и припремся к Элис!
-
- Уже с Приветом
- Posts: 1558
- Joined: 13 Dec 2011 11:24
Re: Какие вопросы задавать на интервью
Ну понятно, судите по себе и считаете, что все должны мыслить/делать как вы. Makes sense.OtherSide wrote: ↑05 Oct 2017 07:53Именно, не могу же я оценивать людей на основе чужого жизненного опыта? Я в студенчестве со своими увлеченными друзьями провел немало споров, как можно было бы улучшить язык. Почти все они были бестолковыми, но это показывает отношение - мы были фанатами программирования. Так что если начинает быковать - а нахрена мне над эти было задумываться, есть стандарт, по нему и идем - не по пути мне с ним.rtogan wrote: ↑05 Oct 2017 05:12А что, C# программист обязательно должен знать джаву? Кроме того, не задумывались ли вы о том, что разные люди по-разному определяют критерии оценки отношения программиста (и не только) работе?OtherSide wrote: ↑04 Oct 2017 21:33Почему в плюсы не добавили интерфейсы, как в шарпе? Зачем в шарпе есть ключевое слово virtual, если джава без него прекрасно обходится.shadow7256 wrote: ↑04 Oct 2017 20:58 Ну нам нужен чисто "шарповщик" Честно говоря нам самим неинтересно почему в шарпе так а в С++ так а вот для интереса приведите пример что Вы спрашиваете в этой области и зачем?
Тут важен не ответ, а вообще отношение к работе, задумывался ли человек над такими вещами, любит ли свою работу или нет?
Если работает на отвали - ответом будет "а нахрена это надо", если нет - воспримет вопрос с интересом и скорее всего ответит, т.к. вопросы простые
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Какие вопросы задавать на интервью
Речь не о шарпе вообще, а о том что в плюсах интерфейс имеется и является частным случаем абстрактного класса в котором все функции чисто виртуальные. В силу этого изначальный вопрос "Почему в плюсы не добавили интерфейсы" выглядит бессмысленным и единственное что можно ответить - их не добавляли потому что они там итак уже имеются.OtherSide wrote: ↑05 Oct 2017 07:49Абсолютно нет. Абстрактные классы есть и в шарпе. Что бы привести к нему, надо быть от него наследованным, а для приведения к интерфейсу - нет.Мальчик-Одуванчик wrote: ↑04 Oct 2017 22:10Он там (в плюсах) и так есть как частный случай абстрактного класса, так что вопрос выглядит не совсем корректным.
Правильный ответ тут в том, что причина в том, что в шарпе есть boxing/unboxing и поэтому к интерфейсу можно приводить value types, а в плюсах нет этого. А нет потому что нет сборщика мусора
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
Ключевое слово interface есть или что?Мальчик-Одуванчик wrote: ↑06 Oct 2017 18:39 Речь не о шарпе вообще, а о том что в плюсах интерфейс имеется и является частным случаем абстрактного класса в котором все функции чисто виртуальные. В силу этого изначальный вопрос "Почему в плюсы не добавили интерфейсы" выглядит бессмысленным и единственное что можно ответить - их не добавляли потому что они там итак уже имеются.
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Какие вопросы задавать на интервью
В лексике С++ именно этого слова не имеется, но имеется другое - virtual, из которого выводится и понятие интерфейса.OtherSide wrote: ↑06 Oct 2017 19:03Ключевое слово interface есть или что?Мальчик-Одуванчик wrote: ↑06 Oct 2017 18:39 Речь не о шарпе вообще, а о том что в плюсах интерфейс имеется и является частным случаем абстрактного класса в котором все функции чисто виртуальные. В силу этого изначальный вопрос "Почему в плюсы не добавили интерфейсы" выглядит бессмысленным и единственное что можно ответить - их не добавляли потому что они там итак уже имеются.
Хотя изначально Ваш вопрос относился к семантике - странно что Вы перевели его на синтаксис.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Какие вопросы задавать на интервью
Ну в-принципе, не смотря на вашу иронию, такой подход действительно makes sense. Им же вместе работать. Нужен culture fit, как тут говорят.
В моей последней компании в Москве подобная hiring policy озвучиавлась примерно так - "Мы всех берём. Мудаков только не берём".
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
через virtual можно создать абстрактный класс, интерфейс - это совсем другое. Для того, что бы имплементировать интерфейс не надо от него наследовать, надо лишь иметь реализованные сигнатуры методов объявленные в интерфейсе, и один класс или структура может имплементировать несколько интерфейсов. В плюсах по сути нет аналога.Мальчик-Одуванчик wrote: ↑06 Oct 2017 22:13В лексике С++ именно этого слова не имеется, но имеется другое - virtual, из которого выводится и понятие интерфейса.OtherSide wrote: ↑06 Oct 2017 19:03Ключевое слово interface есть или что?Мальчик-Одуванчик wrote: ↑06 Oct 2017 18:39 Речь не о шарпе вообще, а о том что в плюсах интерфейс имеется и является частным случаем абстрактного класса в котором все функции чисто виртуальные. В силу этого изначальный вопрос "Почему в плюсы не добавили интерфейсы" выглядит бессмысленным и единственное что можно ответить - их не добавляли потому что они там итак уже имеются.
Хотя изначально Ваш вопрос относился к семантике - странно что Вы перевели его на синтаксис.
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Какие вопросы задавать на интервью
Абсолютный аналог - это абстрактный класс, состоящих из одних чисто виртуальных функций.OtherSide wrote: ↑07 Oct 2017 18:54 через virtual можно создать абстрактный класс, интерфейс - это совсем другое. Для того, что бы имплементировать интерфейс не надо от него наследовать, надо лишь иметь реализованные сигнатуры методов объявленные в интерфейсе, и один класс или структура может имплементировать несколько интерфейсов. В плюсах по сути нет аналога.
Поскольку плюсы, в отличие от шарпа, поддерживают множественное наследование, то городить отдельную сущность и обзывать её интерфейсом не требуется.
Более того, это не единственный способ задания интерфейса в плюсах: CRTP так же дает возможность явного задания интерфейса путем определения его в базовом классе.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
Абстрактный класс плюсов - это абсолютный аналог абстрактного класса шарпа. И что если я не хочу использовать виртуальные функции, что бы не тратить время на разадресацию и не тягать лишние байты на указатель на VMT? А во множественном наследовании еще и несколько таких указателей.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Какие вопросы задавать на интервью
Очень сильно подозреваю (давно очень с C# не работал), что в C# - точнее, в CLR runtime - эти методы, имплементирующие интерфейс, всё равно виртуальные, даже если на уровне C# вы их таковыми и не помечаете.OtherSide wrote: ↑09 Oct 2017 21:24 Абстрактный класс плюсов - это абсолютный аналог абстрактного класса шарпа. И что если я не хочу использовать виртуальные функции, что бы не тратить время на разадресацию и не тягать лишние байты на указатель на VMT? А во множественном наследовании еще и несколько таких указателей.
Так что абсолютно то же самое.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
С чего бы?! Не вижу причин, почему это было бы необходимо. Адреса методов вполне можно разрулить на уровне компиляции.M. Ridcully wrote: ↑09 Oct 2017 21:47Очень сильно подозреваю (давно очень с C# не работал), что в C# - точнее, в CLR runtime - эти методы, имплементирующие интерфейс, всё равно виртуальные, даже если на уровне C# вы их таковыми и не помечаете.OtherSide wrote: ↑09 Oct 2017 21:24 Абстрактный класс плюсов - это абсолютный аналог абстрактного класса шарпа. И что если я не хочу использовать виртуальные функции, что бы не тратить время на разадресацию и не тягать лишние байты на указатель на VMT? А во множественном наследовании еще и несколько таких указателей.
Так что абсолютно то же самое.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Какие вопросы задавать на интервью
Нельзя в общем случае, конечно же.OtherSide wrote: ↑09 Oct 2017 21:57С чего бы?! Не вижу причин, почему это было бы необходимо. Адреса методов вполне можно разрулить на уровне компиляции.M. Ridcully wrote: ↑09 Oct 2017 21:47Очень сильно подозреваю (давно очень с C# не работал), что в C# - точнее, в CLR runtime - эти методы, имплементирующие интерфейс, всё равно виртуальные, даже если на уровне C# вы их таковыми и не помечаете.OtherSide wrote: ↑09 Oct 2017 21:24 Абстрактный класс плюсов - это абсолютный аналог абстрактного класса шарпа. И что если я не хочу использовать виртуальные функции, что бы не тратить время на разадресацию и не тягать лишние байты на указатель на VMT? А во множественном наследовании еще и несколько таких указателей.
Так что абсолютно то же самое.
Простейший пример - полиморфная коллекция.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
Если она по условию полиморфная, понятно что там методы уже виртуальные. Если бы для реализации интерфейса требовалась VMT, скорее всего просили бы описать виртуальные методы явно.M. Ridcully wrote: ↑09 Oct 2017 21:59 Нельзя в общем случае, конечно же.
Простейший пример - полиморфная коллекция.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Какие вопросы задавать на интервью
Либо я вас не понял, либо вы какую-то фигню написали.OtherSide wrote: ↑09 Oct 2017 22:05Если она по условию полиморфная, понятно что там методы уже виртуальные. Если бы для реализации интерфейса требовалась VMT, скорее всего просили бы описать виртуальные методы явно.M. Ridcully wrote: ↑09 Oct 2017 21:59 Нельзя в общем случае, конечно же.
Простейший пример - полиморфная коллекция.
А вообще, не гадайте, поищите, как интерфейсы реализованы на уровне CLR runtime.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Какие вопросы задавать на интервью
А абстрактный класс плюсов, состоящий из одних только чисто виртуальных функций - абсолютный по смыслу аналог интерфейса.OtherSide wrote: ↑09 Oct 2017 21:24 Абстрактный класс плюсов - это абсолютный аналог абстрактного класса шарпа. И что если я не хочу использовать виртуальные функции, что бы не тратить время на разадресацию и не тягать лишние байты на указатель на VMT? А во множественном наследовании еще и несколько таких указателей.
Если нет желания использовать динамический полиморфизм - задайте интерфейс статически через CRTP - тогда не будете тягать лишние байты.
Резюмируя: Вопрос об отсутствии в плюсах интерфейса некорректный. Он там имеется и средства самого языка достаточно выразительны чтобы обойтись без дополнительной лексемы.
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: Какие вопросы задавать на интервью
По ходу дискуссии у меня возникла мысль что на интервью следует выявить подмножество языка которым активно пользуется соискатель.
Ведь не секрет: чем сеньеристее перец, тем с большей вероятностью он пользуется наиболее ограниченной частью языка и возможно даже не знает или не применяет активно большинство нововведений, возникщих в процессе эволюции языка и сопутствующих ему библиотек и других средств разработки. Часто предыдущее место работы явно тормозит подобное развитие политикой использования фиксированных версий, причем уже давно устаревших.
Ведь не секрет: чем сеньеристее перец, тем с большей вероятностью он пользуется наиболее ограниченной частью языка и возможно даже не знает или не применяет активно большинство нововведений, возникщих в процессе эволюции языка и сопутствующих ему библиотек и других средств разработки. Часто предыдущее место работы явно тормозит подобное развитие политикой использования фиксированных версий, причем уже давно устаревших.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
Вот написал тестирующий код. На моем компьютере результат:
interface function:6814992 ticks virtual function:20340724 ticks, virtual slower than interface: 2.984703 times
В 3 раза медленней. Если бы интерфейс автоматически помечал наследуемые методы как виртуальные, результат был бы одинаковый.
interface function:6814992 ticks virtual function:20340724 ticks, virtual slower than interface: 2.984703 times
В 3 раза медленней. Если бы интерфейс автоматически помечал наследуемые методы как виртуальные, результат был бы одинаковый.
using System;
namespace ConsoleApp1
{
interface ISlower
{
void func1();
}
class justClass: ISlower
{
int a;
int b;
public void func1()
{
a = 0;
}
virtual public void func2()
{
a = 0;
}
}
class Program
{
static void Main(string[] args)
{
var j = new justClass();
long d1;
d1 = DateTime.Now.Ticks;
for (int i =0; i < 1000000000;i++)
j.func1();
long d2 = DateTime.Now.Ticks - d1;
d1 = DateTime.Now.Ticks;
for (int i = 0; i < 1000000000; i++)
j.func2();
long d3 = DateTime.Now.Ticks - d1;
Console.WriteLine("interface function:{0} ticks virtual function:{1} ticks, virtual slower than interface: {2} times ", d2,d3, 1.0f*d3/d2);
while (true) ;
}
}
}
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
Скорее всего внутри языка реализация интерфейса следующая: при приведении типов хранит в себе указатель на объект и собственную VMT, которую заполняет из наследника.
В отличии от наследника абстрактного класса, где указатели на методы хранятся в VMT всегда
В отличии от наследника абстрактного класса, где указатели на методы хранятся в VMT всегда
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Какие вопросы задавать на интервью
Мне лень глубоко копать, как там в .NET что реализовано, но вот нарыл статью (достаточно старую) - https://github.com/dotnet/coreclr/blob/ ... ispatch.md - и в ней вот такую фразу:
А по поводу вашего кода - не знаю насчёт C#, но С++ компилятор бы вообще тривиально оптимизировал бы и сделал эти функции - по крайней мере, func2(), а скорее всего и func1() - невиртуальными.
Что как бы предполагает, что на момент написания статьи методы интерфейса подразумевались виртуальными.This may be useful if ever the runtime wants to support the implementation of interfaces with non-virtual methods.
А по поводу вашего кода - не знаю насчёт C#, но С++ компилятор бы вообще тривиально оптимизировал бы и сделал эти функции - по крайней мере, func2(), а скорее всего и func1() - невиртуальными.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
Вы сами себе противоречите. С одной стороны пишите, что они виртуальные, с другой соптимизирова и сделал невиртуальным. Это как вообщt?M. Ridcully wrote: ↑11 Oct 2017 19:37 Мне лень глубоко копать, как там в .NET что реализовано, но вот нарыл статью (достаточно старую) - https://github.com/dotnet/coreclr/blob/ ... ispatch.md - и в ней вот такую фразу:Что как бы предполагает, что на момент написания статьи методы интерфейса подразумевались виртуальными.This may be useful if ever the runtime wants to support the implementation of interfaces with non-virtual methods.
А по поводу вашего кода - не знаю насчёт C#, но С++ компилятор бы вообще тривиально оптимизировал бы и сделал эти функции - по крайней мере, func2(), а скорее всего и func1() - невиртуальными.
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Какие вопросы задавать на интервью
В C++, даже если объявить функцию виртуальной, в некоторых случаях компилятор может соптимизировать вызвать как невиртуальную. Ваш сценарий - как раз такой случай. Это в C++.
Это я к тому, что ваш пример ровным счётом ничего не показывает.
Далее, я привел статью, в которой написано, что интерфейсы реализованы через виртуальный функции.
Ну и возвращаясь в первоначальному вопросу - в C++ структура с чисто виртуальными функциями в практическом смысле реализует то же, что и интерфейс в C#.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
Там наверное предполагалось, что если наследника привести к интерфейсу, то будет создана виртуальная таблица, а так методы не виртуальные.M. Ridcully wrote: ↑12 Oct 2017 20:05В C++, даже если объявить функцию виртуальной, в некоторых случаях компилятор может соптимизировать вызвать как невиртуальную. Ваш сценарий - как раз такой случай. Это в C++.
Это я к тому, что ваш пример ровным счётом ничего не показывает.
Далее, я привел статью, в которой написано, что интерфейсы реализованы через виртуальный функции.
Ну и возвращаясь в первоначальному вопросу - в C++ структура с чисто виртуальными функциями в практическом смысле реализует то же, что и интерфейс в C#.
Да если подумать, а как тогда структуры шарповские от интерфейсов наследовать, там то точно не может быть виртуальных функций, так как даже наследования нет. структура не может нести в себе ничего, кроме данных
-
- Уже с Приветом
- Posts: 12017
- Joined: 08 Sep 2006 20:07
- Location: Силиконка
Re: Какие вопросы задавать на интервью
OtherSide, я устал.
Постарайтесь перечитать то, что я написал выше. Мне добавить нечего.
Постарайтесь перечитать то, что я написал выше. Мне добавить нечего.
Мир Украине. Свободу России.
-
- Уже с Приветом
- Posts: 15770
- Joined: 01 Mar 2008 15:14
Re: Какие вопросы задавать на интервью
Конечно. Просто вы просрали спор. Действительно, у интерфейса и абстрактного класса совершенно разные механизы реализации, а иначе в шарпе не было 2х разных языковых конструкций для этого. Множественное наследование - это вообще третий механизм, к интерфейсам отношения не имеющий.M. Ridcully wrote: ↑12 Oct 2017 20:52 OtherSide, я устал.
Постарайтесь перечитать то, что я написал выше. Мне добавить нечего.