Как пройти собеседование?

OtherSide
Уже с Приветом
Posts: 15868
Joined: 01 Mar 2008 15:14
Been thanked: 1 time

Re: Как пройти собеседование?

Post by OtherSide »

Alexandr wrote:в случае с разыменованием
оператор ++ совершается над указателем, obj увеличивается на 1, но временный объект равен прошлому значению obj, которое разыменовывается
усё
При вызове метода упадет?
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Как пройти собеседование?

Post by Alexandr »

OtherSide wrote:
Alexandr wrote:в случае с разыменованием
оператор ++ совершается над указателем, obj увеличивается на 1, но временный объект равен прошлому значению obj, которое разыменовывается
усё
При вызове метода упадет?
с херали?
просто в этом методе this будет равен мусору из указателя
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Как пройти собеседование?

Post by Alexandr »

это при условии, что нету строчки obj = new A()
если есть, то this вообще валидный будет
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Как пройти собеседование?

Post by Alexandr »

точно также можно вызывать методы по NULL указателю, при условии, что в методе нету обращения (разыменования) this
если в методе есть операции с this, которые не являются разыменованием (например взятие адреса) - тоже будет работать
OtherSide
Уже с Приветом
Posts: 15868
Joined: 01 Mar 2008 15:14
Been thanked: 1 time

Re: Как пройти собеседование?

Post by OtherSide »

Это хорошо, что вы ответили. Хотя решение я несколько страниц назад уже приводил :)
Но, как я писал, с вашей стороны это не совсем честно - т.к. вы регулярно проводите собеседования, и следовательно на такие вопросы вам отвечать легко по причине постоянной практики. Я не думаю, что умение отвечать на каверзные вопросы говорит о большем, чем о возможности отвечать на каверзные вопросы.
Думаю, лучший способ - дать компьютер с доступом в Интернет и предложить решить задачу, наиболее близкую к реальной.
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Как пройти собеседование?

Post by Alexandr »

Это хорошо, что вы ответили. Хотя решение я несколько страниц назад уже приводил
Но, как я писал, с вашей стороны это не совсем честно - т.к. вы регулярно проводите собеседования, и следовательно на такие вопросы вам отвечать легко по причине постоянной практики. Я не думаю, что умение отвечать на каверзные вопросы говорит о большем, чем о возможности отвечать на каверзные вопросы.
ну да, я ж писал, что сам собеседую, а так же писал, что стандарт читал, это далеко не самые каверзные вопросы
Я не думаю, что умение отвечать на каверзные вопросы говорит о большем, чем о возможности отвечать на каверзные вопросы.
именно такие каверзные вопросы - в целом они полезны для того, чтобы человек понимал, что реально происходит
например, в списке вопросов в GS видел вопрос что-то типа, можно либо в параметре-ссылке передать NULL
например
void f(int&);
можно ли NULL туда впендюрить (ответ - можно) - *((int*)0) (работает, так как ссылка - это тоже всего лишь адрес)


но есть большой класс "каверзных" вопросов, которые играют большую роль в том, понимает человек язык на котором пытается писать или нет, например
-перегрузки, сокрытия имен, разница между visibility и accessibility методов
-как реализовано внутри: виртуальные функции, виртуальное наследование, множественное наследование, единичное наследование
-правильна поиска функции для вызова (класс, в нем килограмм функций включая шаблонные и со специализацией) - знать правила выбора метода
-как шаблоны работают - и все что с ними связано
-конструкторы, операторы и прочая лабуда

в общем, я согласен с вами, что нельзя судить о человеке по одному вопросу приведенному вами, ответ на него может иметь много значений, но как я уже сказал, что при моем стиле собеседования (цепляюсь за все, чтобы оценить границы знания, до момента пока сильно не поплывет) - знать просто ответ на такие вопросы - просто не поможет
uncle_Pasha
Уже с Приветом
Posts: 19935
Joined: 30 Aug 2000 09:01
Location: WA

Re: Как пройти собеседование?

Post by uncle_Pasha »

Ljolja wrote:
X37WAL!^ wrote:
uncle_Pasha wrote:
Ljolja wrote:Если бы Вы сказали, что еше не получили предложения от которого не смогли бы отказаться, еше можно было бы понять. A так получается борьба с неуверенностью в себе за чужей счет :no:
На самом деле работодатели в случае отказа кандидата ведут себя "по свински" гораздо чаще, чем сами кандидаты. Хотя козалось бы, последние на работодателей потратили времени куда больше...
Расскажите про возможные варианты свинства?
+1 что же такое свинское потенциальный работодатель может сделать отказавшему кандидату? :upset:
Помещение в "черный список" - это может оказаться достаточно неприятно. При чем это может оказаться списком третьей компании, обслуживающей процесс найма у более чем одного клиента.

Удачи!
OtherSide
Уже с Приветом
Posts: 15868
Joined: 01 Mar 2008 15:14
Been thanked: 1 time

Re: Как пройти собеседование?

Post by OtherSide »

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

Я бы спросил вот что:

Чем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Как пройти собеседование?

Post by Alexandr »

Не думаю, что ваши вопросы раскрывают знания языка, тем более это вопросы самые стандартные. Легко догадаться, еще легче просто запомнить. Экземпляры классов с виртуальной функций очевидно содержат указатель на таблицу виртуальных функций, наследование идет простым добавлением полей в класс, виртуальное наследование скорее всего содержит не сами данные, а указатель на них.
Куда важнее "чувствовать" язык, понимать его "вкус".
там много о чем есть поговорить на тему виртуальных функций :)
сможете ответить на вопрос: когда запись в виртуальной таблице ссылается не на сам метод? :)
Чем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"
это все опять болтология :)))
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Как пройти собеседование?

Post by Alexandr »

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

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

будете смеяться, но чем круче чел, тем более безобидно выглядит вопрос :)
например:
int*p = указатель

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

:)
OtherSide
Уже с Приветом
Posts: 15868
Joined: 01 Mar 2008 15:14
Been thanked: 1 time

Re: Как пройти собеседование?

Post by OtherSide »

Alexandr wrote:
Чем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"
это все опять болтология :)))
То, что вы не способны ответить на эти вопросы, к сожалению не говорит о вас, как об инженере, скорее вам ближе машинальное кодирование, соответвенно таких кандидатов и ищите.
При вызове виртуальной функции нужно взять ее адрес из таблицы (указатель на таблицу будет в памяти над this). Не так уж много накладных операций - пару разименований, один инкремент. Сильно будет замедлять, только если внутри функций очень простая арифметика, но такие задачи решаются через шаблоны.
Разименование происходит уже на уровне ассемблера. Это дешевая операция. Будет что то вроде
Mov bx, p
mov x,[bx]
nightmare2
Уже с Приветом
Posts: 7187
Joined: 31 Jan 2005 15:06
Location: GA

Re: Как пройти собеседование?

Post by nightmare2 »

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!
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Как пройти собеседование?

Post by Alexandr »

OtherSide wrote:
Alexandr wrote:
Чем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"
это все опять болтология :)))
То, что вы не способны ответить на эти вопросы, к сожалению не говорит о вас, как об инженере, скорее вам ближе машинальное кодирование, соответвенно таких кандидатов и ищите.
При вызове виртуальной функции нужно взять ее адрес из таблицы (указатель на таблицу будет в памяти над this). Не так уж много накладных операций - пару разименований, один инкремент. Сильно будет замедлять, только если внутри функций очень простая арифметика, но такие задачи решаются через шаблоны.
Разименование происходит уже на уровне ассемблера. Это дешевая операция. Будет что то вроде
Mov bx, p
mov x,[bx]
для тех, кто претендует на серьезный уровень server-side, этот вопрос является затравкой для тем:
-pipeline процессора и bottleneckи в нем
-трансляция виртуальных адресов в физические, paging unit процессора и боттелнеки в нем
-как устроен и работает кеш процессора
-атомарность и видимость этой операции
-как работает физическая память DRAM и боттлнеки в ней
-что меняется, если префикс lock добавить
-что меняется, если включен hyperthreading
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

Re: Как пройти собеседование?

Post by Alexandr »

nightmare2 wrote:
OtherSide wrote:
Alexandr wrote:
Чем вам не нравится С++, что бы вы в нем поменяли?
Каковы преимущества и недостатки перед другими языками (например С)?
Зачем нужны ссылки, если прекрасно можно обойтись указателями, ведь код с указателями более читаем?
Зачем нужна перегрузка функций, неужели без нее нельзя было бы обойтись? Ведь написать "add" не сложнее, чем "+"
это все опять болтология :)))
То, что вы не способны ответить на эти вопросы, к сожалению не говорит о вас, как об инженере, скорее вам ближе машинальное кодирование, соответвенно таких кандидатов и ищите.
При вызове виртуальной функции нужно взять ее адрес из таблицы (указатель на таблицу будет в памяти над this). Не так уж много накладных операций - пару разименований, один инкремент. Сильно будет замедлять, только если внутри функций очень простая арифметика, но такие задачи решаются через шаблоны.
Разименование происходит уже на уровне ассемблера. Это дешевая операция. Будет что то вроде
Mov bx, p
mov x,[bx]
Языки высокого уровня были созданы для того чтобы разработчик мог абстрагироваться от машинной логики и мыслить категориями решаемой задачи.
Господа супер кодировщики упорно тянут нас назад к ассемблеру.
Какая разница как реализовано наследование, через таблицу или еще как?
Как вам это поможет проэктировать классы?
Главное понимать принципы ООР.
Конечно С/С++ язык достаточно старый, с кучей анахронизмов и даже не совсем это язык высокого уровня.
Но надо стараться быть ближе к задаче и людям, а не к машине.
И уж тем более не заниматься извращениями на интервью.
есть большой класс задач, где нужно понимать как устроено внутрях, есть много-много задач, где это не важно, но полезно
OtherSide
Уже с Приветом
Posts: 15868
Joined: 01 Mar 2008 15:14
Been thanked: 1 time

Re: Как пройти собеседование?

Post by OtherSide »

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

Return to “Работа и Карьера в IT”