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

Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

чтобы хорошо понимать суть, нужно немного:
-книжка
Image
-нужно понимать как он устроен внутри и почему так
-много ковырять в библиотеках на тему как они устроены: boost, ATL, stl, WTL
-иметь опыт проектирования библиотек самому

просто после всего этого у вас останется немного "мелочей", которые вы подзабыли, но можете глянуть в msdn
OtherSide
Уже с Приветом
Posts: 15878
Joined: 01 Mar 2008 15:14
Been thanked: 1 time

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

Post by OtherSide »

Alexandr wrote:
OtherSide wrote:
Alexandr wrote: очень странная мысль о том, что незнание мелочей ведет к глубокому пониманию сути,
наоборот еще странее: что знание мелочей говорит о непонимании бОльшей картины
Почему же странная? Я задал вам несколько простых вопросов, раскрывающие логику языка С++.
Например, зачем ввели в язык ссылки? Вы оказались неспособны ответить. Зато на уровне реализации понимаете.
я просто не хотел ввязываться в еще одну ветвь дискуссии о идиологии :) ну раз вы настаиваете:)
ссылки ввели просто для упрощения возможности изменения значений параметров внутри функции, а также упрощение синтаксиса, когда нужно избежать копирования
в любой книжке есть что-то типа: используйте ссылки вместо указателей, за исключением случаев когда нужно NULL позволять передавать (хотя выше я показывал, что NULL можно и по ссылке передать)
+ ввиду упрощения синтаксиса ссылок, гораздо труднее нарваться на проблемы с pointer aliasing, чем когда используются указатели
Я такого ответа и ожидал. Вы просто цитируете то, что написано в учебника для новичков. Дескать это упрощение синтаксиса.
Но если попытаться включить понимание, то ясно, что сделано это не для упрощения синтаксиса, т.к. любой язык программирования стремится к лаконичности, а дополнительные конструкции добавляют неопределенность, сложность читаемости кода и соотв. поддержки.
Так зачем это нужно?
В первую очередь для реализации новых по отношению к Си возможностей С++. Т.е. ссылки были введены для того, что бы можно было реализовать такие возможности, как перегрузка операторов, конструкторы копирования и пр.

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

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

Post by Alexandr »

OtherSide wrote:
Alexandr wrote:
OtherSide wrote:
Alexandr wrote: очень странная мысль о том, что незнание мелочей ведет к глубокому пониманию сути,
наоборот еще странее: что знание мелочей говорит о непонимании бОльшей картины
Почему же странная? Я задал вам несколько простых вопросов, раскрывающие логику языка С++.
Например, зачем ввели в язык ссылки? Вы оказались неспособны ответить. Зато на уровне реализации понимаете.
я просто не хотел ввязываться в еще одну ветвь дискуссии о идиологии :) ну раз вы настаиваете:)
ссылки ввели просто для упрощения возможности изменения значений параметров внутри функции, а также упрощение синтаксиса, когда нужно избежать копирования
в любой книжке есть что-то типа: используйте ссылки вместо указателей, за исключением случаев когда нужно NULL позволять передавать (хотя выше я показывал, что NULL можно и по ссылке передать)
+ ввиду упрощения синтаксиса ссылок, гораздо труднее нарваться на проблемы с pointer aliasing, чем когда используются указатели
Я такого ответа и ожидал. Вы просто цитируете то, что написано в учебника для новичков. Дескать это упрощение синтаксиса.
Но если попытаться включить понимание, то ясно, что сделано это не для упрощения синтаксиса, т.к. любой язык программирования стремится к лаконичности, а дополнительные конструкции добавляют неопределенность, сложность читаемости кода и соотв. поддержки.
Так зачем это нужно?
В первую очередь для реализации новых по отношению к Си возможностей С++. Т.е. ссылки были введены для того, что бы можно было реализовать такие возможности, как перегрузка операторов, конструкторы копирования и пр.
Знания нужно проверять по тем ответам, которые невозможно найти в Гугле, т.к. при реальной работе гугл будет доступен свободно.
все это добро можно было и через указатели реализовать (так как указатель типизирован), просто с ссылками синтаксис проще и понятней
OtherSide
Уже с Приветом
Posts: 15878
Joined: 01 Mar 2008 15:14
Been thanked: 1 time

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

Post by OtherSide »

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

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

Post by Alexandr »

OtherSide wrote:
Alexandr wrote: все это добро можно было и через указатели реализовать (так как указатель типизирован), просто с ссылками синтаксис проще и понятней
Нет, нельзя. Как вы оформите синтаксис перегрузки, к примеру "++"? Не понятно, что инкрементируется - само значение или указатель.
A* operator++()
A operator++(int)

A x;
++x;

A t = *++x

проблема в том, что синтаксис становится уродливым, точно также как он становится уродливым, когда вместо '+' используется функция Add

проблема в том, что дальше они бы просто застряли, так как реализация через указатели какой-нть move семантики была бы по настоящему уродливой
User avatar
Boriskin
Уже с Приветом
Posts: 18906
Joined: 30 Aug 2001 09:01
Location: 3rd planet

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

Post by Boriskin »

dmicher wrote:
Boriskin wrote:

Code: Select all

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}
Нормальный win32 console app. 8)
Этол не Win32 console app. Насколько я понимаю Win32 программа это та программа, которая использует хотя бы одну специфическую для Win функцию, а у вас ее нет.
Понимаете неправильно, тк это та рыба, которую VS создает как Win32 console app, а MS всяко виднее. ДА и вообще, _tmain, насколько мне известно, и есть та самая win specific ф-ия...
Тупизна как Энтропия. Неумолимо растет.
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

Boriskin wrote:
dmicher wrote:
Boriskin wrote:

Code: Select all

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}
Нормальный win32 console app. 8)
Этол не Win32 console app. Насколько я понимаю Win32 программа это та программа, которая использует хотя бы одну специфическую для Win функцию, а у вас ее нет.
Понимаете неправильно, тк это та рыба, которую VS создает как Win32 console app, а MS всяко виднее. ДА и вообще, _tmain, насколько мне известно, и есть та самая win specific ф-ия...
там выше правильно написали, консольное - это там где SUBSYSTEM=CONSOLE :)
dmicher
Уже с Приветом
Posts: 376
Joined: 14 May 2011 00:48

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

Post by dmicher »

dB13 wrote:
dmicher wrote:
Boriskin wrote:
OtherSide wrote: Дали ручку с бумагой (до этого были другие вопросы). Говорят ну напишите.. можно примерно.. код простейшего вин-апи приложения.
А что я могу даже примерно "набросать"?

Code: Select all

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}
Нормальный win32 console app. 8)
Этол не Win32 console app. Насколько я понимаю Win32 программа это та программа, которая использует хотя бы одну специфическую для Win функцию, а у вас ее нет.
:rtfm: Win32 программа - это Portable Executable (PE) файл с флагом подсистемы CONSOLE или WINDOWS,
а какие функции она вызывает -- дело десятое.
ну это все понятно, но задание было написать код win32 на листике, а не рассказать отличие win32. Требовалось написать кусок кода по которому можно сказать что это именно win32, а не например линух или мас, а это можно сделать используя только спецефические win32 функции, обьекты, переменые, константы и тд - по другому никак.
User avatar
Интеррапт
Уже с Приветом
Posts: 17281
Joined: 07 Sep 2011 10:05
Location: Seattle, WA

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

Post by Интеррапт »

dmicher wrote: ну это все понятно, но задание было написать код win32 на листике, а не рассказать отличие win32. Требовалось написать кусок кода по которому можно сказать что это именно win32, а не например линух или мас, а это можно сделать используя только спецефические win32 функции, обьекты, переменые, константы и тд - по другому никак.
Это конечно любопытные домыслы, особенно про то, что там именно "ребовалось написать кусок кода по которому можно сказать что это именно win32", но как мне видится, абсолютно неправильные. Но даже если предположить, что вы правы, то уже по одному TCHAR можно понять, что это Win32, т.к. TCHAR это:
A Win32 character string that can be used to describe ANSI, DBCS, or Unicode strings.
http://msdn.microsoft.com/en-us/library/cc842072.aspx

То, что его можно в своем файле затайпдефить и под Линуксом - к делу отношения не имеет. С таким же успехом и под Линуксом можно создать функцию CreateWindowEx.
dmicher
Уже с Приветом
Posts: 376
Joined: 14 May 2011 00:48

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

Post by dmicher »

Интеррапт wrote:
dmicher wrote: ну это все понятно, но задание было написать код win32 на листике, а не рассказать отличие win32. Требовалось написать кусок кода по которому можно сказать что это именно win32, а не например линух или мас, а это можно сделать используя только спецефические win32 функции, обьекты, переменые, константы и тд - по другому никак.
Это конечно любопытные домыслы, особенно про то, что там именно "ребовалось написать кусок кода по которому можно сказать что это именно win32", но как мне видится, абсолютно неправильные. Но даже если предположить, что вы правы, то уже по одному TCHAR можно понять, что это Win32, т.к. TCHAR это:
A Win32 character string that can be used to describe ANSI, DBCS, or Unicode strings.
http://msdn.microsoft.com/en-us/library/cc842072.aspx

То, что его можно в своем файле затайпдефить и под Линуксом - к делу отношения не имеет. С таким же успехом и под Линуксом можно создать функцию CreateWindowEx.
в принципе вы правы я тчар незаметил.
IvanF
Уже с Приветом
Posts: 719
Joined: 07 Jan 2011 20:58
Location: New York

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

Post by IvanF »

Alexandr wrote: когда WM_CLOSE приходит, достаточно PostQuitMessage запулить и цикл завершится (так как WM_QUIT придет)
скорее всего автора спрашивали, как кнопку создать на главном окне, просто создать окно с именем класса BUTTON и в родителе нотификацию BN_CLICK (так кажется) обрабатывать
Откуда вы взяли что по WM_QUIT цикл обработки сообщений завершится? Это же ваше pure winapi приложение. Небудет в цикле обработки проверки на это и ничего не прервется. WM_QUIT это тоже обычное сообщение по которому ОБЫЧНО завершается цикл обработки. Но бывают ситуации когда нужно еще что то сделать и не завершать цикл по WM_QUIT. Поэтому правльнее говорить о том что приложение завершается при завершении главной функции, а не о каких то WM_QUIT и WM_CLOSE.
Alexandr
Уже с Приветом
Posts: 3647
Joined: 23 May 2010 15:10

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

Post by Alexandr »

IvanF wrote:
Alexandr wrote: когда WM_CLOSE приходит, достаточно PostQuitMessage запулить и цикл завершится (так как WM_QUIT придет)
скорее всего автора спрашивали, как кнопку создать на главном окне, просто создать окно с именем класса BUTTON и в родителе нотификацию BN_CLICK (так кажется) обрабатывать
Откуда вы взяли что по WM_QUIT цикл обработки сообщений завершится? Это же ваше pure winapi приложение. Небудет в цикле обработки проверки на это и ничего не прервется. WM_QUIT это тоже обычное сообщение по которому ОБЫЧНО завершается цикл обработки. Но бывают ситуации когда нужно еще что то сделать и не завершать цикл по WM_QUIT. Поэтому правльнее говорить о том что приложение завершается при завершении главной функции, а не о каких то WM_QUIT и WM_CLOSE.
GetMessage возвращает 0, если WM_QUIT поймал, соответственно
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) выходит из цикла :)

:)
IvanF
Уже с Приветом
Posts: 719
Joined: 07 Jan 2011 20:58
Location: New York

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

Post by IvanF »

Alexandr wrote:
IvanF wrote:
Alexandr wrote: когда WM_CLOSE приходит, достаточно PostQuitMessage запулить и цикл завершится (так как WM_QUIT придет)
скорее всего автора спрашивали, как кнопку создать на главном окне, просто создать окно с именем класса BUTTON и в родителе нотификацию BN_CLICK (так кажется) обрабатывать
Откуда вы взяли что по WM_QUIT цикл обработки сообщений завершится? Это же ваше pure winapi приложение. Небудет в цикле обработки проверки на это и ничего не прервется. WM_QUIT это тоже обычное сообщение по которому ОБЫЧНО завершается цикл обработки. Но бывают ситуации когда нужно еще что то сделать и не завершать цикл по WM_QUIT. Поэтому правльнее говорить о том что приложение завершается при завершении главной функции, а не о каких то WM_QUIT и WM_CLOSE.
GetMessage возвращает 0, если WM_QUIT поймал, соответственно
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) выходит из цикла :)
Правда что ли? Вот об этом я и говорил что все время. Вы заучили "while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)" и даже не понимаете что вызов GetMessage можно написать по другому. Я могу привести вам сотню вариантов кода с GetMessage которые НЕ прерывают никакого цикла. Например в одном из проектов я писал свой цикл обработки сообщений для консольного приложения, потоиму что мне нужна была очередь сообщений, но окон небыло. И там у меня небыло выхода по WM_QUIT, потому что я сам должен был контролировать выход их приложения.
Кроме того я же написал что "Небудет в цикле обработки проверки на это и ничего не прервется". Т.е. если в вашем коде убрать проверку результата GetMessage и никто никуда не выйдет. Так что WM_QUIT не прерывает цикл обработки сообщений автоматически. И еще раз повторю - программа завершается не на WM_QUIT или WM_CLOSE, а только когда главная функция завершится.
Более того. Даже в стандартных приложения после WM_QUIT приложение может жить бесконечно долго. Например если вызвать MessageBox уже после выхода из цикла обработки сообщений.
Так что еще раз повторяю ..нормально завершение приложения - это выход из главной функции. Ни WM_CLOSE ни WM_QUIT не являются завршением приложения. Это просто стандартные сообщения которые индицируют чье то желание завершить, но сами по себе не могут гарантировать, что это желание будет осуществленно.
nightmare2
Уже с Приветом
Posts: 7187
Joined: 31 Jan 2005 15:06
Location: GA

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

Post by nightmare2 »

IvanF wrote:
Alexandr wrote:
IvanF wrote:
Alexandr wrote: когда WM_CLOSE приходит, достаточно PostQuitMessage запулить и цикл завершится (так как WM_QUIT придет)
скорее всего автора спрашивали, как кнопку создать на главном окне, просто создать окно с именем класса BUTTON и в родителе нотификацию BN_CLICK (так кажется) обрабатывать
Откуда вы взяли что по WM_QUIT цикл обработки сообщений завершится? Это же ваше pure winapi приложение. Небудет в цикле обработки проверки на это и ничего не прервется. WM_QUIT это тоже обычное сообщение по которому ОБЫЧНО завершается цикл обработки. Но бывают ситуации когда нужно еще что то сделать и не завершать цикл по WM_QUIT. Поэтому правльнее говорить о том что приложение завершается при завершении главной функции, а не о каких то WM_QUIT и WM_CLOSE.
GetMessage возвращает 0, если WM_QUIT поймал, соответственно
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0) выходит из цикла :)
Правда что ли? Вот об этом я и говорил что все время. Вы заучили "while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)" и даже не понимаете что вызов GetMessage можно написать по другому. Я могу привести вам сотню вариантов кода с GetMessage которые НЕ прерывают никакого цикла. Например в одном из проектов я писал свой цикл обработки сообщений для консольного приложения, потоиму что мне нужна была очередь сообщений, но окон небыло. И там у меня небыло выхода по WM_QUIT, потому что я сам должен был контролировать выход их приложения.
Кроме того я же написал что "Небудет в цикле обработки проверки на это и ничего не прервется". Т.е. если в вашем коде убрать проверку результата GetMessage и никто никуда не выйдет. Так что WM_QUIT не прерывает цикл обработки сообщений автоматически. И еще раз повторю - программа завершается не на WM_QUIT или WM_CLOSE, а только когда главная функция завершится.
Более того. Даже в стандартных приложения после WM_QUIT приложение может жить бесконечно долго. Например если вызвать MessageBox уже после выхода из цикла обработки сообщений.
Так что еще раз повторяю ..нормально завершение приложения - это выход из главной функции. Ни WM_CLOSE ни WM_QUIT не являются завршением приложения. Это просто стандартные сообщения которые индицируют чье то желание завершить, но сами по себе не могут гарантировать, что это желание будет осуществленно.
Естественно, можно вообще "вечный цикл" сделать и не реагировать ни на какие сообщения.
Vaiyo A-O, A Home Va Ya Ray, Vaiyo A-Rah, Jerhume Brunnen G!
IvanF
Уже с Приветом
Posts: 719
Joined: 07 Jan 2011 20:58
Location: New York

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

Post by IvanF »

nightmare2 wrote: Естественно, можно вообще "вечный цикл" сделать и не реагировать ни на какие сообщения.
Именно. И никакие WM_QUIT не смогут его закрыть.

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