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

User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

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

Post by АццкоМото »

Alexandr wrote:дойдет то, что у вас язык развит сильнее мозга?
вы это уже не раз продемонстировали :)
неспособность понять азы легко заменяется хамством, ничего нового
Мат на форуме запрещен, блдж!
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

Вы:
АццкоМото wrote:
Flash-04 wrote:просто замечу что формально Medium-rare прав: стандарт языка ничего не говорит про то как
Кстати, подумалось. Стандарт языка вообще не говорит про то, как и когда код может или должен упасть
вот это:

Code: Select all

for (int *i=0;;i++) *i=0;
по стандарту языка вовсе не обязано падать. но мы же не будем впадать в демагогию
на что я вам указал, что то, что вы написали не является по стандарту корректной С++ программой (даже цитату из стандарта привел)
на что вы ответили,
Купите себе словарик и переведите undefined behavior. Возможно, когда-нибудь дойдет
вам не кажется, что это грубовато-хамавато?
дальше больше
неспособность понять азы легко заменяется хамством, ничего нового
бревно в собственном глазу не давит? не?

так объясните мне глупому, азы, гуру, а также приведите цитаты из которых следуют ваши хамоватые обвинения, если конечно кроме как молотить языком вы на что-то способны
Last edited by Alexandr on 25 Mar 2012 13:14, edited 1 time in total.
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

кстати, прежде, чем я услышу очередное "му-у-у-у-у-у" ввиду "объяснения азов" от вас, потрудитесь разобраться в разнице между "undefined behavior" и "implementation defined behavior"
OtherSide
Уже с Приветом
Posts: 15916
Joined: 01 Mar 2008 15:14
Been thanked: 2 times

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

Post by OtherSide »

Alexandr wrote:кста, вот неплохой мануал по каверзным моментам
http://www.parashift.com/c++-faq-lite/
Спасибо, вроде уже подобные вопросы практически все изучил. Сейчас проблемы со всяческими ребусами, задачки на быструю соображалку уже не тяну как 10 лет назад :(
Есть что-то вспомнить-потренироваться?
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

OtherSide wrote:
Alexandr wrote:кста, вот неплохой мануал по каверзным моментам
http://www.parashift.com/c++-faq-lite/
Спасибо, вроде уже подобные вопросы практически все изучил. Сейчас проблемы со всяческими ребусами, задачки на быструю соображалку уже не тяну как 10 лет назад :(
Есть что-то вспомнить-потренироваться?
я думаю можно взять какую-нть книжку с олимпиадными задачками + полазить по software interview questions сайтам, там помимо вопросов по языку еще и обычные задачки встречаются
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

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

Post by АццкоМото »

Alexandr wrote: на что я вам указал, что то, что вы написали не является по стандарту корректной С++ программой (даже цитату из стандарта привел)
на что вы ответили,
значеццо так, я последний раз пишу вежливо.
во-первых, все эти потуги подтянуть громко звучащие слова - смешны. "корректная", "well-formed". if you can't really define those terms, just do not use them.
для начала, это не программа, а statement. вполне корректный с точки зрения С/С++, причем поведение его не определено, о чем и повествует ваша "сцылка на стандарт". именно в этом и был смысл приведения этого примера - всем очевидно, что грохнется, но нет никаких формальных причин считать именно так. более того, это может быть вполне корректным кодом в некоторых оооочень специфичных случаях, а если поставить условие по верхней границе i, так и вовсе не очень экзотичным.
далее. было бы неплохо изучить, что такое объекты в С++, а что такое атомарные типы. *i, где i - типа int*, не есть объект.
и, наконец, implementation-defined behavior - это то, как решили разруливать конкретную ситуацию в данной реализации _компилятора_
undefined behavior - это когда решили вообще положить с прибором. как получится, так и будет, нам пофиг и мы предупреждали
так вот в обычной реализации разыменования никот не проверяет указатель на ноль, потому что стандарт не заставляет, а идеология С/С++ не велит делать лишние телодвижения без спроса. и (*(int *)0)=0) может прекрасно сработать, согласно стандарту. по нулевому адресу вполне может быть что-то, что может быть интерпретировано, как int
именно поэтому в данном конкретном контексте мой пример иллюстрирует именно то, что он должен иллюстрировать: даже самые очевидные источники крэшей не являются таковыми по стандарту, а лишь по эмпирическому знанию о том, "как обычно происходит"
еще раз: это - последний вежливый раз. после этого недообразованные будут посланы грубо, не тут, так в личке
Мат на форуме запрещен, блдж!
OtherSide
Уже с Приветом
Posts: 15916
Joined: 01 Mar 2008 15:14
Been thanked: 2 times

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

Post by OtherSide »

Указатель обычно проверяют на валидность, сравнивая с нулем. Так что сомневаюсь, что может существовать имплементация, в которой по нулю что-то есть. Может и не упать, конечно, но это сильно на удачу.
User avatar
Medium-rare
Уже с Приветом
Posts: 9195
Joined: 04 Mar 2011 03:04
Location: SFBA

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

Post by Medium-rare »

OtherSide wrote:Так что сомневаюсь, что может существовать имплементация, в которой по нулю что-то есть.
С другой стороны, системная имплементация никак не обязана зависеть от какого-то языка. Вот эту фразу ни с чем не ассоциируешь?
The interrupt vector table starts at memory location 0000:0000h and ends at 0000:03FCh.
... and even then it's rare that you'll be going there...
OtherSide
Уже с Приветом
Posts: 15916
Joined: 01 Mar 2008 15:14
Been thanked: 2 times

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

Post by OtherSide »

Medium-rare wrote:
OtherSide wrote:Так что сомневаюсь, что может существовать имплементация, в которой по нулю что-то есть.
С другой стороны, системная имплементация никак не обязана зависеть от какого-то языка. Вот эту фразу ни с чем не ассоциируешь?
The interrupt vector table starts at memory location 0000:0000h and ends at 0000:03FCh.
Мне не очень понятно, к чему вообще эти обсуждения? Я помню, очень любил их лет в 16-17, для того, что бы показать свою хацкерскую крутизну одноклассникам.
Но для людей с 10-20 годами программирования зачем это нужно? Если я увижу подобный код, я сразу распознаю его как ошибку и занесу в базу дефектов, даже если он не падает,
и так и задумано, ибо нефиг. И уж точно не буду задумываться - а вдруг будут портировать на экзотическую архитектуру и захотят написать обработчик прерывания деления на ноль, что тогда?
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

АццкоМото wrote: значеццо так, я последний раз пишу вежливо.
вы начали с хамства. так что если вы им и продолжите я не удивлюсь, раз уж вы любите сухую формальность и это совпадает с моим желанием найти таки истину в споре, то достаточно глянуть в стандарт:
для начала, это не программа, а statement. вполне корректный с точки зрения С/С++
да, таки well-formed включает undefined behavior
1.3.25 [defns.unspecified]
unspecified behavior
behavior, for a well-formed program construct and correct data, that depends on the implementation
[ Note: The implementation is not required to document which behavior occurs. The range of possible
behaviors is usually delineated by this International Standard. —end note ]
всем очевидно, что грохнется, но нет никаких формальных причин считать именно так
оно очевидно, только для всем привычной windows\linux на x86\64, для которых оно грохается потому что в page table directory процесса нет валидной pte (page table entry) для 0 страницы виртуальной памяти
если процессор находится в реальном режиме, то читать мы оттуда можем, ибо оно в первом мегабайте, который доступен даже без hma)
но все это никак не относится к языку, ибо по стандарту - это undefined behavior = (нет документации как должно быть у компилятора)
более того, это может быть вполне корректным кодом в некоторых оооочень специфичных случаях
только, если мы выходим за рамки языка и подключаем другие знания, в границах языка - это все также undefined bevaior
далее. было бы неплохо изучить, что такое объекты в С++, а что такое атомарные типы. *i, где i - типа int*, не есть объект.
в контексте цитаты, которую я приводил, под объектами понимается так же любой встроенный тип (коим int и int* тоже является)
можете глянуть в официальном стандарте C++11 (цитата оттуда)

дальше у вас каша:
а что такое атомарный? тот, который можно атомарно прочитать? так им является только std::sig_atomic_t и скорее всего char
все остальное зависит то платформы (в частности, разрядности шины)

Code: Select all

undefined behavior - это когда решили вообще положить с прибором. как получится, так и будет, нам пофиг и мы предупреждали
нет, это когда нет документации по поводу тому, как должна себя вести система и соответственно мы не можем полагаться на конкретную реализацию, которая редко когда "как получится так получится"
(*(int *)0)=0) может прекрасно сработать, согласно стандарту
см выше
еще раз: это - последний вежливый раз. после этого недообразованные будут посланы грубо, не тут, так в личке
реально грозно звучит :lol: :lol: :lol:
просто стесняюсь спросить, вы себя будете посылать на форуме или в личке сам себя тролить?
Last edited by Alexandr on 26 Mar 2012 09:08, edited 1 time in total.
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

OtherSide wrote:Указатель обычно проверяют на валидность, сравнивая с нулем. Так что сомневаюсь, что может существовать имплементация, в которой по нулю что-то есть. Может и не упать, конечно, но это сильно на удачу.
в реальном режиме процессора не упадет по умолчанию, либо в защищенном, после трансляции (если page unit включен) ссылается на валидный сегмент и права читать есть

но опять же, от уже очень далеко от языка
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

The interrupt vector table starts at memory location 0000:0000h and ends at 0000:03FCh.
фигня, даже в реальном режиме таблица векторов прерываний находится там куда ссылается idtr - просто раньше этим мало кто заморачивался, а после reset он указывает на 0, поэтому и принято считать что в 0 начинается
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

Мне не очень понятно, к чему вообще эти обсуждения? Я помню, очень любил их лет в 16-17, для того, что бы показать свою хацкерскую крутизну одноклассникам.
Но для людей с 10-20 годами программирования зачем это нужно? Если я увижу подобный код, я сразу распознаю его как ошибку и занесу в базу дефектов, даже если он не падает,
и так и задумано, ибо нефиг. И уж точно не буду задумываться - а вдруг будут портировать на экзотическую архитектуру и захотят написать обработчик прерывания деления на ноль, что тогда?
зависит от специлизации, в жестком сервер-сайде это нужно знать не потому, что придется собственный драйвер писать, а чтобы уметь считать сколько стоит то или иное телодвижение

простой пример, если знать как работает paging unit в процессоре (в частности зачем TLB нужен), то сразу есть понимание, что обращаться к странице памяти, к которой до этого не обращался - стоит не так дешево (а еще tlb - это кеш, и соответственно обращаться с ним нужно как с кешем)

это совершенно не значит, что это должен знать каждый и тем более, это не есть какой-либо показатель крутизны

на мой взгляд - показатель крутизны - это широта знаний помноженная на глубину, а уже сфера деятельности - дело десятое
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

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

ввиду того, что вы много с чем уже поработали, выбирать вам явно есть из чего
OtherSide
Уже с Приветом
Posts: 15916
Joined: 01 Mar 2008 15:14
Been thanked: 2 times

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

Post by OtherSide »

Alexandr wrote:
Мне не очень понятно, к чему вообще эти обсуждения? Я помню, очень любил их лет в 16-17, для того, что бы показать свою хацкерскую крутизну одноклассникам.
Но для людей с 10-20 годами программирования зачем это нужно? Если я увижу подобный код, я сразу распознаю его как ошибку и занесу в базу дефектов, даже если он не падает,
и так и задумано, ибо нефиг. И уж точно не буду задумываться - а вдруг будут портировать на экзотическую архитектуру и захотят написать обработчик прерывания деления на ноль, что тогда?
зависит от специлизации, в жестком сервер-сайде это нужно знать не потому, что придется собственный драйвер писать, а чтобы уметь считать сколько стоит то или иное телодвижение

простой пример, если знать как работает paging unit в процессоре (в частности зачем TLB нужен), то сразу есть понимание, что обращаться к странице памяти, к которой до этого не обращался - стоит не так дешево (а еще tlb - это кеш, и соответственно обращаться с ним нужно как с кешем)

это совершенно не значит, что это должен знать каждый и тем более, это не есть какой-либо показатель крутизны

на мой взгляд - показатель крутизны - это широта знаний помноженная на глубину, а уже сфера деятельности - дело десятое
Я много занимался компьютерной графикой - а это та сфера, когда всегда не хватает процессора и памяти. На этапе проектирования очень сложно угадать, сколько потребует та или иная операция, нужно смотреть просто по факту. Конечно, многие вещи понятны и из общих соображений - например сдвиг дешевле умножения или деления, а ИЛИ дешевле суммы, но замеры показывают, что на современных компьютерах это не всегда заметно.
Глубину можно развить, конечно, но стратегически это тоже не всегда оправдано. Например, я эксперт в графических форматах. И кому это нужно? Я уже поработал в лидере рынка этой области. Эти знания уже можно выкинуть. Точно так же, вам видимо очень много пришлось работать с задачами по оптимизации памяти. Думаю, что много работали с собственными аллокаторами, локерами, оптимизировали разименования и сокращали обращение. Но если потеряете работу - кому это нужно? В 99% проектов на такие вещи можно забить или обойтись малой кровью.

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