В Какой точке необходимо понять Ссылки?

Я задал вопрос как это в интервью относительно программиста начального уровня:

var instance1 = new MyObject{Value = "hello"}
var instance2 = instance1;

instance1.Value = "bye";

Console.WriteLine(instance1.Value);
Console.WriteLine(instance2.Value);

Заявитель ответил "привет", "до свидания" как вывод.

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

Действительно ли они правы?

Править: Мнение было высказано, тот MyObject, возможно, был структурой. Это - Положительная сторона. Однако я не отправил полный вопрос, который я дал интервьюируемому. Полный вопрос имел класс, который был ясно классом (не структура). Это может быть найдено здесь.

14
задан 4 revs 7 May 2010 в 14:49
поделиться

13 ответов

Некоторые из моих коллег сказали, что "указатели" уже не так важны

Понимание разницы между семантикой ссылок и семантикой значений крайне важно. Оно имеет фундаментальное значение для проектирования языка и системы типов. Понимание того, что ссылки могут быть реализованы с помощью указателей, не особенно важно для программистов начального уровня на C#; понимание разницы между копированием по ссылке и копированием по значению очень важно.

или что этот вопрос не является реальной оценкой способностей.

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

Если способность определять, когда информации недостаточно для решения проблемы, и задавать правильные вопросы, чтобы получить эту информацию, актуальна, тогда да, это тест на релевантные способности. (Хороший кандидат попросил бы посмотреть реализацию типа myObject и члена Value, а не предполагать, что myObject - это класс, а Value - это изменяемое свойство типа string).

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

16
ответ дан 1 December 2019 в 05:55
поделиться

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

10
ответ дан 1 December 2019 в 05:55
поделиться

Вы должны понимать указатели и ссылки задолго до того, как закончите колледж.

Я написал выше, прежде чем заметил, что этот вопрос был помечен как C #.

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

Кроме того, как говорили другие, этот вопрос действительно касается ссылок. Вы ДЕЙСТВИТЕЛЬНО должны понимать ссылки, чтобы быть программистом на C #.

5
ответ дан 1 December 2019 в 05:55
поделиться

Если кандидат не может ответить на этот вопрос, это свидетельствует о большом недостатке его фундаментальных знаний C #. Покажи им дверь и попрощайся!

2
ответ дан 1 December 2019 в 05:55
поделиться

Я считаю важным знать, как ссылки на объекты работают в C #. (Конечно, можно прожить долгий путь, ничего не зная .. ... но редко приходится платить за объектно-ориентированный код)

С другой стороны, указатели не так уж и много.

3
ответ дан 1 December 2019 в 05:55
поделиться

Даже если вы не используете указатели и небезопасный код, вы определенно должны понимать концепцию и знать, как ее использовать. { {1}} Если вы собираетесь работать на C #, я могу простить незнание арифметики указателей, потому что вы, скорее всего, не будете ее использовать и, скорее всего, не должны ее использовать. Но указатели существуют повсюду вокруг нас даже в мире управляемого C #.

string s = "abc"  
int a = 3;

Одна из этих двух переменных на самом деле является указателем (Ссылка. Как бы то ни было. То же самое). Который из? Честно говоря, человек, который не знает, что ему нужно на год устроиться на работу с помощью C, после этого он обязательно это поймет.

Представьте, что этому парню нужно написать функцию, которая принимает строку ссылки. Это:

  1. Неизменяемый.
  2. Ссылка на неизменяемый объект.
  3. Ссылка на неизменяемый объект. (Неизменяемость не имеет ничего общего с указателями. Будет только еще больше запутать, если она неизменна ^^)

Человек сойдет с ума, пытаясь понять это, если он не потеряет девственность указателя в C заранее.Или, что еще хуже, представьте, что какая-то критическая часть вашего кода использует словарь, содержащий некоторую ценную информацию в классе, и этот парень меняет одно из его значений, которое изменяет GetHashValue объекта и заставляет вас «потерять» экземпляр.

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

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

Также ваш вопрос - насколько вы знаете, ваш собеседник решил, что myObject - это структура. Скорее всего, он этого не сделал, но все же.
Изменить: Да, ссылки не фиксируются, в отличие от указателей. Но концептуально разницы нет.

2
ответ дан 1 December 2019 в 05:55
поделиться

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

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

1
ответ дан 1 December 2019 в 05:55
поделиться

Честно говоря, я окончил полный комплект курсов Microsoft около 2 месяцев назад. По общему признанию, я занимаюсь программированием какое-то время дольше, но я бы сказал, что на C # я занимаюсь около 2 лет.

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

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

Кстати, во время второго собеседования на моей нынешней работе был небольшой тест. Они заставили меня написать приложение для тестирования простых чисел, факториалов, написания моего собственного LastIndexOf и еще одного, которое я не могу припомнить.

Я считаю, что в программировании важнее всего логика. И это больше, чем знание языка C #, это скорее вопрос логики.

1
ответ дан 1 December 2019 в 05:55
поделиться

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

0
ответ дан 1 December 2019 в 05:55
поделиться

Они абсолютно неправы. Кроме того, это вопрос о ссылках, а не указателях. Если вы не получите его, вы не заслуживаете оплачиваемой работы по написанию C#.

18
ответ дан 1 December 2019 в 05:55
поделиться

Это плохой знак для тех, у кого есть опыт работы с C #.

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

Как минимум такая зияющая дыра в знаниях говорила бы мне, что потребуется много коучинга.

1
ответ дан 1 December 2019 в 05:55
поделиться

Вы должны понимать ссылки, прежде чем начинать давать интервью по C #.

4
ответ дан 1 December 2019 в 05:55
поделиться

Я думаю, что это справедливый вопрос.

Убедитесь, однако, что вы не просто оцениваете этот вопрос на простой основе PASS / FAIL. Затем задавайте такие вопросы, как «Почему?» и «Что именно делает строка «экземпляр1». Значение = "до прощай"; ' или строка 'var instance2 = instance1;' на самом деле делает?" Начните диалог о том, что происходит под капотом. Вы узнаете много нового о кандидате по тому, насколько глубоко он может провести конверсию, а также по тому, сможет ли он следовать вашим объяснениям.

2
ответ дан 1 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

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