Форум программистов, компьютерный форум CyberForum.ru

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 432, средняя оценка - 4.73
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
#1

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

31.05.2011, 10:02. Просмотров 52922. Ответов 42
Метки нет (Все метки)

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

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

Просьба решения выкладывать под CUT'ом.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.05.2011, 10:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Практические задания из собеседований (C++):

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

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

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

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

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

Html Практические задания - HTML, CSS
Нужна помощь с практическими заданиями, я не успеваю( Нужен код:

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
09.07.2012, 02:57  [ТС] #31
ForEveR,
неа
не спасет. У нас две операции: присваивание указателю _instance адреса выделенной памяти и присваивание полю field значения 0. Тут важно то, что квалификатор volatile вступает в силу только после полной инициализации объекта, поэтому field не может быть volatile в конструкторе по определению, поэтому операции присваивания instance_ и field могут быть переупорядочены компилятором.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.07.2012, 16:18 #32
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/DDJ_J...04_revised.pdf
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 16:30 #33
Цитата Сообщение от ForEveR Посмотреть сообщение
CyBOSSeR, #2
А что мешает, вместо указателя, завести флажок и устанавливать его при помощи атомарных операций? Будет та же блокировка с двойной проверкой, но без побочных эффектов.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.07.2012, 16:38 #34
Deviaphan, Насколько я понимаю, тут не говорилось об использовании С++11, буста или же конкретных либах, позволяющих использовать потоки, а так по идее ничего не мешает
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.07.2012, 16:42 #35
Цитата Сообщение от ForEveR Посмотреть сообщение
тут не говорилось об использовании С++11, буста или же конкретных либах,
Это WinAPI функция вроде.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.07.2012, 17:25 #36
Deviaphan, Ну тут ведь не только о винде полагаю)
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
09.07.2012, 23:34  [ТС] #37
ForEveR, все таки хотелось бы увидеть код инициализации поля, о котором я говорил.
Цитата Сообщение от Deviaphan Посмотреть сообщение
А что мешает, вместо указателя, завести флажок и устанавливать его при помощи атомарных операций?
Хотелось бы увидеть код, для Windows или нет, не важно, можно использовать все что угодно.

Добавлено через 28 минут
И еще один вопрос: как бы вы реализовали потокобезопасный singleton в рамках C++11?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.07.2012, 00:16 #38
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/questions/6...ngleton-in-c11
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
10.07.2012, 01:32  [ТС] #39
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 .
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
10.07.2012, 13:02 #40
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Хотелось бы увидеть код
Так, я потерял нить дискуссии.
Почему этот код будет работать не правильно?
C++
1
2
3
if (!instance_) {
      lock();
      if (!instance_) {
Или речь про то, что адрес в кэше будет висеть и для второго потока не обновится?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
10.07.2012, 15:05 #41
Deviaphan, Почитай доку, которую я давал под катом в посте №32, там описываются все проблемы, которые возникают при такой реализации, дока написана Мейерсом и Александреску.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
10.07.2012, 15:26 #42
Цитата Сообщение от ForEveR Посмотреть сообщение
в посте №32
Спасибки, как-то пропустил ссылку ту.)
Тогда, раз проблема связанна с оптимизацией, можно для файла с синглтоном запретить оптимизации. Через прагмы или в свойства проекта прописать. Но не переносимо получится, разумеется.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
10.07.2012, 20:45  [ТС] #43
Deviaphan, тут дело не только в компиляторе, дело в том, что операции могут переупорядовачиватся процессором, что тоже может привести к потоконебезопасности. В доке по ссылке это есть, но вскользь. Лучше почитать об этом в другом месте, например, здесь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2012, 20:45
Привет! Вот еще темы с ответами:

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

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

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

Практические задания по классам, интерфейсам, делегатам - C#
Здравствуйте! Изучил что такое классы/интерфейсы и делегаты. Вызубрил теорию) Теперь хотелось бы закрепить теоретические знания практикой. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.07.2012, 20:45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru