При вызове метода упадет?Alexandr wrote:в случае с разыменованием
оператор ++ совершается над указателем, obj увеличивается на 1, но временный объект равен прошлому значению obj, которое разыменовывается
усё
Как пройти собеседование?
-
- Уже с Приветом
- Posts: 15868
- Joined: 01 Mar 2008 15:14
- Been thanked: 1 time
Re: Как пройти собеседование?
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Как пройти собеседование?
с херали?OtherSide wrote:При вызове метода упадет?Alexandr wrote:в случае с разыменованием
оператор ++ совершается над указателем, obj увеличивается на 1, но временный объект равен прошлому значению obj, которое разыменовывается
усё
просто в этом методе this будет равен мусору из указателя
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Как пройти собеседование?
это при условии, что нету строчки obj = new A()
если есть, то this вообще валидный будет
если есть, то this вообще валидный будет
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Как пройти собеседование?
точно также можно вызывать методы по NULL указателю, при условии, что в методе нету обращения (разыменования) this
если в методе есть операции с this, которые не являются разыменованием (например взятие адреса) - тоже будет работать
если в методе есть операции с this, которые не являются разыменованием (например взятие адреса) - тоже будет работать
-
- Уже с Приветом
- Posts: 15868
- Joined: 01 Mar 2008 15:14
- Been thanked: 1 time
Re: Как пройти собеседование?
Это хорошо, что вы ответили. Хотя решение я несколько страниц назад уже приводил 
Но, как я писал, с вашей стороны это не совсем честно - т.к. вы регулярно проводите собеседования, и следовательно на такие вопросы вам отвечать легко по причине постоянной практики. Я не думаю, что умение отвечать на каверзные вопросы говорит о большем, чем о возможности отвечать на каверзные вопросы.
Думаю, лучший способ - дать компьютер с доступом в Интернет и предложить решить задачу, наиболее близкую к реальной.

Но, как я писал, с вашей стороны это не совсем честно - т.к. вы регулярно проводите собеседования, и следовательно на такие вопросы вам отвечать легко по причине постоянной практики. Я не думаю, что умение отвечать на каверзные вопросы говорит о большем, чем о возможности отвечать на каверзные вопросы.
Думаю, лучший способ - дать компьютер с доступом в Интернет и предложить решить задачу, наиболее близкую к реальной.
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Как пройти собеседование?
ну да, я ж писал, что сам собеседую, а так же писал, что стандарт читал, это далеко не самые каверзные вопросыЭто хорошо, что вы ответили. Хотя решение я несколько страниц назад уже приводил
Но, как я писал, с вашей стороны это не совсем честно - т.к. вы регулярно проводите собеседования, и следовательно на такие вопросы вам отвечать легко по причине постоянной практики. Я не думаю, что умение отвечать на каверзные вопросы говорит о большем, чем о возможности отвечать на каверзные вопросы.
именно такие каверзные вопросы - в целом они полезны для того, чтобы человек понимал, что реально происходитЯ не думаю, что умение отвечать на каверзные вопросы говорит о большем, чем о возможности отвечать на каверзные вопросы.
например, в списке вопросов в GS видел вопрос что-то типа, можно либо в параметре-ссылке передать NULL
например
void f(int&);
можно ли NULL туда впендюрить (ответ - можно) - *((int*)0) (работает, так как ссылка - это тоже всего лишь адрес)
но есть большой класс "каверзных" вопросов, которые играют большую роль в том, понимает человек язык на котором пытается писать или нет, например
-перегрузки, сокрытия имен, разница между visibility и accessibility методов
-как реализовано внутри: виртуальные функции, виртуальное наследование, множественное наследование, единичное наследование
-правильна поиска функции для вызова (класс, в нем килограмм функций включая шаблонные и со специализацией) - знать правила выбора метода
-как шаблоны работают - и все что с ними связано
-конструкторы, операторы и прочая лабуда
в общем, я согласен с вами, что нельзя судить о человеке по одному вопросу приведенному вами, ответ на него может иметь много значений, но как я уже сказал, что при моем стиле собеседования (цепляюсь за все, чтобы оценить границы знания, до момента пока сильно не поплывет) - знать просто ответ на такие вопросы - просто не поможет
-
- Уже с Приветом
- Posts: 19935
- Joined: 30 Aug 2000 09:01
- Location: WA
Re: Как пройти собеседование?
Помещение в "черный список" - это может оказаться достаточно неприятно. При чем это может оказаться списком третьей компании, обслуживающей процесс найма у более чем одного клиента.Ljolja wrote:+1 что же такое свинское потенциальный работодатель может сделать отказавшему кандидату?X37WAL!^ wrote:Расскажите про возможные варианты свинства?uncle_Pasha wrote:На самом деле работодатели в случае отказа кандидата ведут себя "по свински" гораздо чаще, чем сами кандидаты. Хотя козалось бы, последние на работодателей потратили времени куда больше...Ljolja wrote:Если бы Вы сказали, что еше не получили предложения от которого не смогли бы отказаться, еше можно было бы понять. A так получается борьба с неуверенностью в себе за чужей счет
Удачи!
-
- Уже с Приветом
- Posts: 15868
- Joined: 01 Mar 2008 15:14
- Been thanked: 1 time
Re: Как пройти собеседование?
Не думаю, что ваши вопросы раскрывают знания языка, тем более это вопросы самые стандартные. Легко догадаться, еще легче просто запомнить. Экземпляры классов с виртуальной функций очевидно содержат указатель на таблицу виртуальных функций, наследование идет простым добавлением полей в класс, виртуальное наследование скорее всего содержит не сами данные, а указатель на них.
Куда важнее "чувствовать" язык, понимать его "вкус".
Я бы спросил вот что:
Чем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"
Куда важнее "чувствовать" язык, понимать его "вкус".
Я бы спросил вот что:
Чем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Как пройти собеседование?
там много о чем есть поговорить на тему виртуальных функцийНе думаю, что ваши вопросы раскрывают знания языка, тем более это вопросы самые стандартные. Легко догадаться, еще легче просто запомнить. Экземпляры классов с виртуальной функций очевидно содержат указатель на таблицу виртуальных функций, наследование идет простым добавлением полей в класс, виртуальное наследование скорее всего содержит не сами данные, а указатель на них.
Куда важнее "чувствовать" язык, понимать его "вкус".

сможете ответить на вопрос: когда запись в виртуальной таблице ссылается не на сам метод?

это все опять болтологияЧем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"

-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Как пройти собеседование?
вы зря там легкомысленно относитесь к простым вопросамЛегко догадаться, еще легче просто запомнить.


взять вопрос: какие накладные расходы при вызове виртуальной функции - уже можно много что сказать

будете смеяться, но чем круче чел, тем более безобидно выглядит вопрос

например:
int*p = указатель
максимально подробно рассказать что происходит при:
int x = *p;

-
- Уже с Приветом
- Posts: 15868
- Joined: 01 Mar 2008 15:14
- Been thanked: 1 time
Re: Как пройти собеседование?
То, что вы не способны ответить на эти вопросы, к сожалению не говорит о вас, как об инженере, скорее вам ближе машинальное кодирование, соответвенно таких кандидатов и ищите.Alexandr wrote:это все опять болтологияЧем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"))
При вызове виртуальной функции нужно взять ее адрес из таблицы (указатель на таблицу будет в памяти над this). Не так уж много накладных операций - пару разименований, один инкремент. Сильно будет замедлять, только если внутри функций очень простая арифметика, но такие задачи решаются через шаблоны.
Разименование происходит уже на уровне ассемблера. Это дешевая операция. Будет что то вроде
Mov bx, p
mov x,[bx]
-
- Уже с Приветом
- Posts: 7187
- Joined: 31 Jan 2005 15:06
- Location: GA
Re: Как пройти собеседование?
Языки высокого уровня были созданы для того чтобы разработчик мог абстрагироваться от машинной логики и мыслить категориями решаемой задачи.OtherSide wrote:То, что вы не способны ответить на эти вопросы, к сожалению не говорит о вас, как об инженере, скорее вам ближе машинальное кодирование, соответвенно таких кандидатов и ищите.Alexandr wrote:это все опять болтологияЧем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"))
При вызове виртуальной функции нужно взять ее адрес из таблицы (указатель на таблицу будет в памяти над this). Не так уж много накладных операций - пару разименований, один инкремент. Сильно будет замедлять, только если внутри функций очень простая арифметика, но такие задачи решаются через шаблоны.
Разименование происходит уже на уровне ассемблера. Это дешевая операция. Будет что то вроде
Mov bx, p
mov x,[bx]
Господа супер кодировщики упорно тянут нас назад к ассемблеру.
Какая разница как реализовано наследование, через таблицу или еще как?
Как вам это поможет проэктировать классы?
Главное понимать принципы ООР.
Конечно С/С++ язык достаточно старый, с кучей анахронизмов и даже не совсем это язык высокого уровня.
Но надо стараться быть ближе к задаче и людям, а не к машине.
И уж тем более не заниматься извращениями на интервью.
Vaiyo A-O, A Home Va Ya Ray, Vaiyo A-Rah, Jerhume Brunnen G!
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Как пройти собеседование?
для тех, кто претендует на серьезный уровень server-side, этот вопрос является затравкой для тем:OtherSide wrote:То, что вы не способны ответить на эти вопросы, к сожалению не говорит о вас, как об инженере, скорее вам ближе машинальное кодирование, соответвенно таких кандидатов и ищите.Alexandr wrote:это все опять болтологияЧем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"))
При вызове виртуальной функции нужно взять ее адрес из таблицы (указатель на таблицу будет в памяти над this). Не так уж много накладных операций - пару разименований, один инкремент. Сильно будет замедлять, только если внутри функций очень простая арифметика, но такие задачи решаются через шаблоны.
Разименование происходит уже на уровне ассемблера. Это дешевая операция. Будет что то вроде
Mov bx, p
mov x,[bx]
-pipeline процессора и bottleneckи в нем
-трансляция виртуальных адресов в физические, paging unit процессора и боттелнеки в нем
-как устроен и работает кеш процессора
-атомарность и видимость этой операции
-как работает физическая память DRAM и боттлнеки в ней
-что меняется, если префикс lock добавить
-что меняется, если включен hyperthreading
-
- Уже с Приветом
- Posts: 3647
- Joined: 23 May 2010 15:10
Re: Как пройти собеседование?
есть большой класс задач, где нужно понимать как устроено внутрях, есть много-много задач, где это не важно, но полезноnightmare2 wrote:Языки высокого уровня были созданы для того чтобы разработчик мог абстрагироваться от машинной логики и мыслить категориями решаемой задачи.OtherSide wrote:То, что вы не способны ответить на эти вопросы, к сожалению не говорит о вас, как об инженере, скорее вам ближе машинальное кодирование, соответвенно таких кандидатов и ищите.Alexandr wrote:это все опять болтологияЧем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"))
При вызове виртуальной функции нужно взять ее адрес из таблицы (указатель на таблицу будет в памяти над this). Не так уж много накладных операций - пару разименований, один инкремент. Сильно будет замедлять, только если внутри функций очень простая арифметика, но такие задачи решаются через шаблоны.
Разименование происходит уже на уровне ассемблера. Это дешевая операция. Будет что то вроде
Mov bx, p
mov x,[bx]
Господа супер кодировщики упорно тянут нас назад к ассемблеру.
Какая разница как реализовано наследование, через таблицу или еще как?
Как вам это поможет проэктировать классы?
Главное понимать принципы ООР.
Конечно С/С++ язык достаточно старый, с кучей анахронизмов и даже не совсем это язык высокого уровня.
Но надо стараться быть ближе к задаче и людям, а не к машине.
И уж тем более не заниматься извращениями на интервью.
-
- Уже с Приветом
- Posts: 15868
- Joined: 01 Mar 2008 15:14
- Been thanked: 1 time
Re: Как пройти собеседование?
C в отличии от С++ имеет очень ясную цель и философию. Компилятор структурного кода с максимальной производительностью и полным доступом к ресурсам. Настолько простой, что за каждой строчкой видишь ее ассемблерную реализацию.
В С++ же слишком много компромиссов. Пытались сохранить производительность и одновременно повысить абстракцию (сделав язык высокого уровня), в результате ясность и лаконичность Си исчезла.
За что я люблю С++ - как раз за его сложность и перегруженность - что бы писать на нем (а тем более проходить собеседования), нужно иметь изощренный мозг, и конкуренция при приеме на работу меньше.
В С++ же слишком много компромиссов. Пытались сохранить производительность и одновременно повысить абстракцию (сделав язык высокого уровня), в результате ясность и лаконичность Си исчезла.
За что я люблю С++ - как раз за его сложность и перегруженность - что бы писать на нем (а тем более проходить собеседования), нужно иметь изощренный мозг, и конкуренция при приеме на работу меньше.