Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/393: Рейтинг темы: голосов - 393, средняя оценка - 4.62
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675

Практические задания из собеседований

31.05.2011, 10:02. Показов 74627. Ответов 44
Метки нет (Все метки)

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

1. Написать функцию, определяющую является ли заданное число степенью двойки.
2. Написать функцию, определяющую содержит ли односвязный список циклы (например, последний ссылается на второй).

Просьба решения выкладывать под CUT'ом.
15
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.05.2011, 10:02
Ответы с готовыми решениями:

Где можно найти практические задания по с++
где можно найти практические задания по си и с++?

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

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

44
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.07.2012, 15:51
Студворк — интернет-сервис помощи студентам
MikeSoft, Итого для добавления нового типа нам нужно.
1) Добавить значение в перечисление.
2) Сделать реализацию четырех функций Add(type), Add(type*), Insert(int, type), Insert(int, type*).
3) Поправить свитч.

Не слишком много?) Не, я не говорю ничего против, как локальное решение свитч по типам годится, но только как локальное и практически не расширяемое.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
07.07.2012, 16:59
Цитата Сообщение от ForEveR Посмотреть сообщение
Не слишком много?)
В принципе не сложно заменить свитч на мэп и вместо перечисления использовать RTTI ключ в мэпе. Функции добавления сделать шаблонными. Тогда вообще ничего не нужно будет добавлять. Но реализация может выглядеть чуть сложнее и, что более важно, крайне сложно будет сделать кроссплатформенную/кросскомпиляторную сериализацию для такого решения.
Но с точки зрения ООП вариант с переключением типов не самый лучший, разумеется. Но по заданию требуется поддержка всего трёх типов и делать сложнее чем требуется, тоже не желательно.)
3
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
08.07.2012, 17:59
Цитата Сообщение от Deviaphan Посмотреть сообщение
В принципе не сложно заменить свитч на мэп и вместо перечисления использовать RTTI ключ в мэпе. Функции добавления сделать шаблонными.
Шаблоны изначально запрещены.

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

Специально открыл исходник своего варианта и нашёл функцию Insert:
C++
1
2
3
4
5
6
bool TVarList::Insert(unsigned int Index, int Data)
{
  int *Stored = new int();
  *Stored = Data;
  return InsertData(Index, Stored, itInteger);
}
Функции AddData, InsertData исправлять не придётся, т.к. их работа от типа не зависит: void *Data, функция Add - вызов того же Insert'a с "крайним" индексом.
По-моему, если бы на собеседовании заставили добавить новый тип данных - ушла бы минута времени.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.07.2012, 18:28
Цитата Сообщение от MikeSoft Посмотреть сообщение
Шаблоны изначально запрещены.
Тогда плохое задание на собеседовании это было.) Лишать С++ шаблонов это то же самое, что кастрировать программиста. Не хорошо.)
Скорее всего такие ограничения ставят те, кто хорошо знает Си и не смог разобраться в шаблонах.)))
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
08.07.2012, 18:45
Цитата Сообщение от Deviaphan Посмотреть сообщение
Скорее всего такие ограничения ставят те, кто хорошо знает Си и не смог разобраться в шаблонах.)))
Нет. Такие задания ставят те, кто хочет убедится, что программист, которого они берут, сможет сделать всё с нуля, а не воспользоваться готовым (сотрудникам концерна Microsoft запрещено смотреть в чей либо код... почему? только потому, что потом возможны претензии к тому, что этот код был украден или нарушил лицензионное соглашение и им приходится всё писать с нуля).

Можно также обратить внимание на задание с собеседования в Samsung, которое прислал niXman. Казалось бы, зачем переписывать то, что уже реализовано?
Но ведь нужно как-то проверять понимание алгоритмов...
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
08.07.2012, 20:22
Я к тому, что при помощи шаблонов многое реализовать проще и ещё проще поддерживать. Глупо связывать себе руки только из-за того, что считаешь программистов неумехами, которые только и умеют, что копипастить... Но корпорациям виднее, конечно.
Всё таки одно дело, когда запрещено использование библиотек (кроме STL) и совсем другое, когда запрещено использовать часть СТАНДАРТНЫХ и ОСНОВНЫХ преимуществ языка. Потмоу Windows Мастдаем и кличат.
2
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
08.07.2012, 22:21  [ТС]
Согласен с Deviaphan, задание действительно не очень, не удивлюсь если в этой конторе еще и исключения запрещены .

Добавлено через 1 час 41 минуту
Кстати, относительно задачи о потокобезопасной одиночке. Все, кого я собеседовал, приводили решение с использованием паттерна Double-checked locking в таком духе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Singleton : noncopyable {
private:
  static Singleton* instance_;
 
  Singleton()
  { /* ... */ }
 
public:
  static Singleton* instance() {
    if (!instance) {
      lock();
      if (!instance_)
        instance_ = new Singleton();
    }
    return instance_;
  }
};
Эта реализация небезопасна в многопоточной среде. Почему и как это исправить?
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.07.2012, 01:17
CyBOSSeR,
Предположение
Полагаю либо сделать переменную instance volatile, либо сделать как всегда - локнуть и затем сделать проверку на !instance. Небезопасна потому что один поток может начать инициализацию, а второй в это время проверить, instance окажется не 0, итого вернется не полностью сконструированный объект.
http://ru.wikipedia.org/wiki/D... ed_locking
0
Эксперт С++
 Аватар для MikeSoft
3956 / 1811 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
09.07.2012, 01:25
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Согласен с Deviaphan, задание действительно не очень, не удивлюсь если в этой конторе еще и исключения запрещены .
К конторе, кстати, я тоже отнёсся с подозрением. Офис свой они даже "постеснялись представить". К тому же, я не по их части. Им нужен был человек для работы с Cocoa. Кстати, это было моё первое собеседование (часто посещают мысли сменить текущее место работы) - и оно оставило не очень хорошие впечатления.

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Потому Windows Мастдаем и кличат.
Называют исключительно завистники. Политику MS я понимаю. Кто бы из нас не хотел заработать денег на разработке, которая не была украдена? Почему-то та же компания Apple использует ядро Darwin (львиная доля которого составляет и без того стабильные моменты ОС FreeBSD + NeXTSTEP) и продаёт чью-то идею за хорошие деньги. Но их ворами не называют почему-то... Ладно, пожалуй дальше я разводить оффтоп не буду.



Цитата Сообщение от Deviaphan Посмотреть сообщение
Глупо связывать себе руки только из-за того, что считаешь программистов неумехами, которые только и умеют, что копипастить... Но корпорациям виднее, конечно.
Тут тоже можно разливаться по древу... Когда я начал знакомство с программированием - подвернулась IDE C++ Builder. И примеры из книг были в ней написаны, и в университете на ней работали. Собственно говоря, когда я захотел перейти к изучению оконных приложений, я не знал о WinAPI, слышал только краем уха. Начал пытаться освоится в VCL. Позже мне стало понятно, что если ты не знаешь как устроена схема сообщений в ОС, то такое программирование превращается в бездумное формошлёпство. К чему я это веду... представьте, что человеку, которому кажется, что окна создаются командой TForm *pFrm = new TForm(this); , попросят создать окно на чистом WinAPI...
Почти тоже самое и здесь: можно было использовать стандартные приблуды STL, Boost и им подобные... а нужно было просто продемонстрировать умение применять на практике ООП или RTTI.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
09.07.2012, 02:51  [ТС]
ForEveR,
неа
если мы сделаем только указатель volatile, то тем самым лишь защитимся от переупорадовачивания операций компилятором с указателем, но кроме операций с самим указателем у нас есть операции инициализации в констукторе.

ForEveR, для упрощения, будем считать, что в конструкторе просто инициализируется некое поле типа int:
C++
1
2
3
Singleton()
  : field(0)
{}
1
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
09.07.2012, 02:57  [ТС]
ForEveR,
неа
не спасет. У нас две операции: присваивание указателю _instance адреса выделенной памяти и присваивание полю field значения 0. Тут важно то, что квалификатор volatile вступает в силу только после полной инициализации объекта, поэтому field не может быть volatile в конструкторе по определению, поэтому операции присваивания instance_ и field могут быть переупорядочены компилятором.
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.07.2012, 16:18
CyBOSSeR,
#2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Singleton : noncopyable {
private:
  static volatile Singleton* volatile instance_;
 
  Singleton()
  { /* ... */ }
 
public:
  static volatile Singleton* volatile instance() {
    if (!instance_) {
      lock();
      if (!instance_) {
        volatile Singleton* volatile tmp = new volatile Singleton();
        instance_ = tmp;
      }
    }
    return instance_;
  }
};
Было интересно почитать http://www.aristeia.com/Papers... evised.pdf
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 16:30
Цитата Сообщение от ForEveR Посмотреть сообщение
CyBOSSeR, #2
А что мешает, вместо указателя, завести флажок и устанавливать его при помощи атомарных операций? Будет та же блокировка с двойной проверкой, но без побочных эффектов.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.07.2012, 16:38
Deviaphan, Насколько я понимаю, тут не говорилось об использовании С++11, буста или же конкретных либах, позволяющих использовать потоки, а так по идее ничего не мешает
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 16:42
Цитата Сообщение от ForEveR Посмотреть сообщение
тут не говорилось об использовании С++11, буста или же конкретных либах,
Это WinAPI функция вроде.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
09.07.2012, 17:25
Deviaphan, Ну тут ведь не только о винде полагаю)
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
09.07.2012, 23:34  [ТС]
ForEveR, все таки хотелось бы увидеть код инициализации поля, о котором я говорил.
Цитата Сообщение от Deviaphan Посмотреть сообщение
А что мешает, вместо указателя, завести флажок и устанавливать его при помощи атомарных операций?
Хотелось бы увидеть код, для Windows или нет, не важно, можно использовать все что угодно.

Добавлено через 28 минут
И еще один вопрос: как бы вы реализовали потокобезопасный singleton в рамках C++11?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.07.2012, 00:16
cut
Судя по тому что я прочитал, есть только 1 вариант инициализации пожалуй.

C++
1
2
3
4
5
6
7
8
class Singleton
{
   Singleton()
   {
      static_cast<volatile int&>(field) = 0;
   }
   int field;
};


А на тему потокобезопасного синглтона, никсман уже вроде давал ответ на этот вопрос в сообщении №13
Ну и еще вариант в рамках С++11 http://stackoverflow.com/quest... ton-in-c11
2
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
10.07.2012, 01:32  [ТС]
ForEveR,
ок.
про необходимость защиты от переупорядовачивании в железе, думаю, говорить не стоит, т.к. это упомянуто в документе по ссылке, которую ты выложил


Цитата Сообщение от ForEveR Посмотреть сообщение
А на тему потокобезопасного синглтона, никсман уже вроде давал ответ на этот вопрос в сообщении №13
Да, это отличноее решение, работающее и в C++03, но C++11 дает нам гарантии, которые позволяют решить задачу
проще.

C++
1
2
3
4
5
6
7
8
9
10
11
class Singleton : noncopyable {
private:
  Singleton() {
    / * ... */
  }
public:
  static Singleton& instance() {
    static Singleton instance_;
    return instance_;
  }
};
Да, это старый добрый Meyers singleton .
2
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
10.07.2012, 13:02
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Хотелось бы увидеть код
Так, я потерял нить дискуссии.
Почему этот код будет работать не правильно?
C++
1
2
3
if (!instance_) {
      lock();
      if (!instance_) {
Или речь про то, что адрес в кэше будет висеть и для второго потока не обновится?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.07.2012, 13:02
Помогаю со студенческими работами здесь

Практические задания по C#
Здравствуйте. Полный новичок. Начал изучать C# неделю назад , решил начать с книги Г.Шилдт &quot;C# 4.0 полное руководство&quot;. Много...

Практические задания C#
Изучаю C# по &quot;Герберт Шилдт &quot;C# 3.0, 4.0. Полное руководство&quot;&quot;, но там нету практических заданий. Может кто посоветовать книжку с...

Изучение C# и практические задания
Здравствуйте, изучаю С# по книге &quot;Герберт Шилдт - C# 4.0&quot;. Еще параллельно начал проходить курс C# Базовий от CyberBionic. Из...

Практические задания, нейросети
Привет. Выбрала для себя две книги: Рассела С. &quot;ИИ: современный подход&quot; и Люгера Дж. Ф. По каким сайтам/книгам можно перейти к практике?...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru