Pull to refresh

Comments 50

Если бы мне на собеседовании задавали бы такие вопросы, это бы были самые короткие собеседования в моей жизни

Если в этой организации задачи ставят так же, как задают вопросы на собеседовании...

"Если бы вам нужно было объяснить принципы ООП коту, как бы вы это сделали?"

С почасовой оплатой (как можно дольше) и без свидетелей. Задача с гарантированно бесполезным и неприменимым результатом, где важен только процесс и невозможно проверить результат.

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

Задача - представить? Легко бы справился, у меня хорошее воображение.

"Представьте, что вам нужно спроектировать систему для управления парковкой инопланетных кораблей. Какие бы классы и методы вы использовали?"

Тут главное - классы и методы? Остальное уже все понятно и заложено в ТЗ?

"Как бы вы реализовали бесконечный цикл без использования ключевого слова while?"

При помощи go to конечно. 😏

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

Касаемо кода с минутами, то за такое обильное количество if else if, на собесе точно не похвалят.)

через for и в каждую итерацию сбрасывать индекс на 0

Что бы вы сделали, если бы обнаружили, что ваш код работает быстрее, чем ожидалось?

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

Если бы вам нужно было создать класс, представляющий бесконечность, как бы он выглядел?

В котлине есть Any и Nothing. От первого наследуются все, второй сам наследуется от всего. Если есть желание, можно сюда приплести бесконечность

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

Геворкян Г.Х., Семенов В.Н - Бейсик - это просто (1989, Радио и связь)

"Как бы вы реализовали бесконечный цикл без использования ключевого слова while?"

switch(1)
{
  case 1:
    Console.WriteLine("бесполезная статья");
	goto case 1;
}

кто задает такие вопросы goto забракуют, слишком уже "в лоб" решение. Уже так тогда:

 for (int i=0; i<3; i=0) {
        Console.WriteLine (i) ;
    }

а я твоё забракую, потому что можно короче =)

for (;;)
  Console.WriteLine(0);

public static void Main()
{
  System.Console.WriteLine("гы гы гы");
  var path = System.Reflection.Assembly.GetExecutingAssembly().Location;
  System.Diagnostics.Process.Start(path);
}

Вас спросили как бы вы реализовали, а НЕ как стоит реализовывать. Из упоротого можно еще: бесконечный итератор и рекурсивный вызов.

Я думаю не стоит реализовывать внутри свитч в на готов метках).

А с рекурсей бред, т. к. Глубина стека не бесконечная

Современные компиляторы реализуют хвостовую рекурсию посредством цикла.

Только хвостовая рекурсия это частный случай рекурсии

Не могу себе представить цикл, который нельзя привести к виду хвостовой рекурсии.

Возможно такие и существуют, просто я так сходу не могу придумать.

Не существуют.

В Scheme цикл - это и есть макрос над хвостовой рекурсией.

Какой свич еще? Бесконечный итератор это когда movenext будет тру отдавать всегда.

И мы как бы бредовые идеи и рассматриваем.

Можно просто сохранить итератор листа в свойство анонимного класса и итерироваться по этому свойству.

int i = 0;

            for (; ; )

            {

                i++;

                Console.WriteLine(i);

            }

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

Выглядит как какая-то компиляция , но вроде не чатгпт. Тем не менее пару примеров прокоменнтирую:

Как бы вы реализовали функцию, которая принимает на вход строку и возвращает ее зеркальное отображение, не используя встроенные функции?

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

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

Исходная постановка конечно чушь. Но если на проекте приняты правила именования переменных по типу венгерской нотации, то им нужно следовать (если что линтер объяснит). Как тут можно «не справиться» - не понятно.

В прочем начало переменных с гласной - нет ничего проще: aList, aMap, anIterator

Для «1С»: этоСписок, этоДата и т.д.

>Как бы вы реализовали функцию, которая принимает на вход строку и возвращает ее зеркальное отображение, не используя встроенные функции?

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

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

А как вы собираетесь переворачивать символы в знакогенераторе? ))

Статья выглядит как несколько ответов ChatGPT, без обработки

  1. На вопросе про кота я бы пожелал им удачи в наборе сотрудников и распрощался.

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

  3. Вопрос для первокласника. По нему снова просвечивает что собеседователь новичек.

  4. Вопрос не сформулирован нормально, к нему нужны уточнения чтобы понять чего вообще тут имелось ввиду.

  5. Первый хоть насколько то адекватный вопрос.

  6. Очередной неадекватный вопрос про решение несуществующих проблемм.

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

  8. Второй адекватный вопрос.

  9. Задача не сформулирована даже на 5% от необходимого. Потому что методы возникают от того, как заказчику нужно использовать то, что вы делаете, а не просто так выдумываются.

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


    Итого: Будучи собеседуемым я бы ушел на первой минуте. Будучи начальником автора вопросов я бы уволил и его и того, кто его взял на работу.

По поводу второго пункта, не соглашусь.

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

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

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

Менеджер проекта, наверное, был абхазом? Когда-то я был в Абхазии и обратил внимание на то, что к словам иностранного происхождения они добавляют букву "а": "амагазин", "аклуб" и так далее.

А в 2008 году я работал на проекте, в котором заказчик потребовал, чтобы в названии каждой таблицы в базе данных присутствовало название его компании.

"Если бы вам нужно было объяснить принципы ООП коту, как бы вы это сделали?"

Никак, в силу того, что коты не в состоянии понять сложную человеческую речь. Только отдельные слова, и то на обучение уйдут годы.

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

Просто добавил в начало названия каждой переменной артикль. Дальше обычное название, раскрывающее суть. a_result, a_sum, an_apple. По условию здесь не требуется использовать все гласные.

"Как бы вы реализовали функцию, которая принимает на вход строку и возвращает ее зеркальное отображение, не используя встроенные функции?"

˙qɯɐɔиu ıqƍ qɔоvmиdu ˙иʞоdɯɔ ǝинǝжɐdƍоɯо ǝонqvɐʞdǝε ɯoıɐmɐdʚεоʚ ǝıqdоɯоʞ 'ņиǹʞнʎф хıqннǝоdɯɔʚ ɯǝн #ɔ ʚ 'oıɐнε ʁ оʞqvоʞɔɐн

"Если бы вам нужно было объяснить, что такое делегат, ребенку, как бы вы это сделали?"

Уточнил бы сперва возраст ребенка. Объяснять это 4-летнему и 10-летнему следует разными способами.

Коту про ООП можно было бы выразительно сказать "Фу, брось каку!".

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

Уж как нибудь справился бы. Я писал на фортране. Там по умолчанию первая буква имени переменной задаёт тип переменной :)
i,j,k,l,m,n - тип INTEGER
Поэтому переменные цикла обычно i и j

У вас в классе который "имитирует время которое течет назад" ошибка. Если вычесть больше 60 секунд то нормализация не справится.

Но вообще это не "время которое течет назад" а простой класс представляющий собой временной отрезок (TimeSpan) позволяющий очень ограниченные базовые манипуляции со временем.

Случай отрицательных часов не покрыт, часов больше 25 не покрыт.

Я уже молчу про временные зоны, leap seconds, day light saving time и прочее и прочее.

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

Тогда реализация будет тривиальна.

Что бы вы сделали, если бы обнаружили, что ваш код работает быстрее, чем ожидалось?

Проверил бы на ошибки, потому что если код работает намного быстрее ожидаемого, он скорее всего работает некорректно. А вот что такое "чрезмерная оптимизация" в контексте "написал код и он оказался быстрым" я не знаю. Бывает преждевременная оптимизация, оптимизация в ущерб другим характеристикам, и оптимизация на которую потрачено слишком много времени.

Но воообще все вопросы к С# отношения не имеют.

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

Примерно как в игре Elite Dangerous. Там что бы "припарковать" корабль (в трех измерениях) мне приходилось одновременно использовать клавиатуру, мышь и еще джойстик от приставки подключить пришлось. И все равно встать точно на нужное место никогда не получалось. Всегда или криво становился или стукался о стенки или еще что. Поэтому ориентироваться в трех измерениях это та еще история.

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

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

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

  1. "Что бы вы сделали, если бы обнаружили, что ваш код работает быстрее, чем ожидалось?"

    • Цель: Проверить понимание оптимизации и потенциальных проблем, связанных с чрезмерной оптимизацией.

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

А что мешает использовать стандартный DateTime? В нём есть полный спектр методов AddSeconds, AddHours и прочие, которые нормально принимают отрицательные значения.

Цель: нанять такого же идиота как и наниматель.

Сегодня ведь сентябрь, а не 1 апреля?

Вы ведь не хотите сказать что это все серьезно?

"Если бы вам нужно было объяснить коту принципы ООП, как бы вы это сделали?"

Ну тут всё просто. Достаточно делегировать эту задачу другому коту, которой уже знает принцыпы ООП.

P.S. После такого ответа можно даже попробовать претендовать на позицию менеджера!

"Что бы вы сделали, если бы обнаружили, что ваш код работает быстрее, чем ожидалось?"

В зависимости от требований бизнеса, относительно того, должен ли код работать медленно либо быстро, добавил бы несколько строк Thread.Sleep(1000); либо же удалил ещё несколько аналогичных заранее добавленных строк.

Если же после удаления всех заранее добавленных Thread.Sleep(1000); код всё ещё работает недостаточно быстро, стоит открыть issue в оффициальном репозитории dotnet/runtime на GitHub с просьбой разработчков Microsoft также удалить несколько заранее добавленных в runtimeThread.Sleep(1000);.

"Как бы вы реализовали бесконечный цикл без использования ключевого слова while?"

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

Теперь необходимо подсчитать количество необходимых итераций цикла. В зависимости от "железа", в секунду может выполнятся разное количество итераций. На хорошем "железе" это число может достигать триллиона раз, если мы говорим про пустой цикл. Допустим мы ожидаем что приложение будет работать, возьмём с запасом, на протяжении 40 лет. Используя простую математику получаем 1трлн * 40 * 365 * 24 * 60 * 60 =1261440000трлн итераций цикла. Таким образом реализация цикла будет следующей:

var iterationsCount = BigInteger.Parse("1261440000000000000000");

for (var i = BigInteger.Zero; i < iterationsCount; i++)
{
    Console.WriteLine("Эта строка выведется достаточное количество раз.");
}

"Если бы вам нужно было создать класс, представляющий бесконечность, как бы он выглядел?"

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

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

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

Однако скорее всего в этом и была настоящая суть вопроса — посмотреть как кандидат будет вести себя в близкой к реальной ситуации, когда поставленный вопрос (либо задача) не имеет всех необходимых данных. Проявление настойчивости, в виде вежливой просьбы о дополнительной информации это лучшее решение в подобного рода ситуации.

"Если бы вам нужно было создать класс, представляющий время, которое может течь назад, как бы он выглядел?"

class MyTime
{
  private TimeOnly _timeOnly;

  public Hours => _timeOnly.Hours;
  public Minutes => _timeOnly.Minutes;
  public Seconds => _timeOnly.Seconds;

  public MyTime(int hours, int minutes, int seconds)
  {
    _timeOnly = new(hours, minutes, seconds);
  }

  public void AddHours(int hours) => _timeOnly.AddHours(hours);

  public void AddMinutes(int seconds) => _timeOnly.AddMinutes(minutes);

  public void AddSeconds(int seconds) => _timeOnly.AddSeconds(seconds);
}

А потом такие разрабы удивляются, что их заменил chatgpt

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

Если цель задолбать кандидата, то норм:)

Не увидел вопроса: какой цвет трусов подходит для реализации интерфейсов.

Sign up to leave a comment.

Articles