Re[8]: собеседование
От: LordMAD Россия  
Дата: 15.01.10 12:33
Оценка:
Здравствуйте, StandAlone, Вы писали:

LMA>>И сколько времени проходили такие собеседования?


SA>У меня заняло три дня. День на брейнбенч — Основы ООП, С++ и SQL. День на задачки, ну и на третий день — беседа с сеньорами.


Офигеть. И что — целый день говорил с сеньорами? Тогда видимо классно у них сеньоры работают — если по целому дню на кандидата.
Re[9]: собеседование
От: LordMAD Россия  
Дата: 15.01.10 12:35
Оценка:
Здравствуйте, UA, Вы писали:

C>>>Самое смешное, что данный вариант не во всех случаях корректно отработает .


LMA>>Это в каких?


UA>переполнение типа int при сложении чисел близких к INT_MAX?


И где в коде, который я привел сложение чисел, близких к INT_MAX?
Re[6]: собеседование
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.01.10 12:38
Оценка:
Здравствуйте, LordMAD, Вы писали:

LMA>Вариант решения:

LMA>int sign(int a) { return (a < 0) ? -1 : 1; }
LMA>int avg(int x, int y) { return (sign(x) == sign(y)) ? x+(y-x)/2 : (x+y)/2; }

Первый вариант, который пришел мне в голову до твоего ответа был вот такой

int avg(int x, int y) { return x/2 + y/2; }

Правда он будет давать немого более другие средние значения.
Re[7]: собеседование
От: LordMAD Россия  
Дата: 15.01.10 12:44
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Первый вариант, который пришел мне в голову до твоего ответа был вот такой


I>int avg(int x, int y) { return x/2 + y/2; }


I>Правда он будет давать немого более другие средние значения.


Ну да, то, что в этом случае avg(3, 5) == 3 или avg(7, 7) == 6, не здорово.
Re[8]: собеседование
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.01.10 12:56
Оценка: :)
Здравствуйте, LordMAD, Вы писали:

I>>int avg(int x, int y) { return x/2 + y/2; }


I>>Правда он будет давать немого более другие средние значения.


LMA>Ну да, то, что в этом случае avg(3, 5) == 3 или avg(7, 7) == 6, не здорово.


Да, отстой какой то вышел
Re[9]: собеседование
От: StandAlone  
Дата: 15.01.10 13:07
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>... И сделать нужно так, чтобы через неделю не оказалось, что что-то не продумано, или что-то надо переделать так, что у клиентов код использующий наш веб-сервис перестанет работать. Или чтобы не пришлось писать через неделю всем клиентам письма, сообщая "вы знаете, мы тут кое что добавили/переделали в нашем веб-сервисе" или "доводим до вашего сведения, что теперь этот метод может выбрасывать такое-то исключение". Но при этом алгоритм быстрой сортировки я не помню. У меня просто другие задачи.


Ну вот. А кому-то в свое время численные методы забили в голову настолько глубоко, что они там застряли навечно. И главным, по их мнению, для программиста оказывается умение считать биты, среднее арифметическое или там сумму ряда. А потом пишут веб-сервисы на C++\CGI за несколько человеко-лет
Re[12]: собеседование
От: hrensgory Россия  
Дата: 15.01.10 13:21
Оценка:
LordMAD пишет:

> Примеры из тем "Программирование на языке C" и "Программирование на

> языке С++" я привел выше — можете посмотреть, чтобы составить
> впечатление о вопросах.

О вопросах по С/С++ вопросов нет. Смысл примера с целыми ясен, а что
такое "класс, реализующий идиому pimpl" и "эффективная специализация
функции swap для него" я просто не знаю.

Вопросы о том, что именно при условии правильного ответа на них вы
рассчитываете услышать по следующим темам:

2. Архитектура и проектирование
4. Объектно-ориентированное программирование
7. Базы данных
10. Автоматизированное тестирование
12. Составление спецификаций и анализ требований


--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[11]: собеседование
От: elmal  
Дата: 15.01.10 13:41
Оценка: 3 (1) +1 -1
Здравствуйте, Ytz, Вы писали:

Ytz>Не в обиду, но вы написали два варианта решения элементарной задачи и не один из них не работает, не понятно о чем вообще после этого говорить.

-1 запросто можно и забыть написать, вообще-то. Особенно если привык итераторами пользоваться, а всякие len и for уже давно забыл, как потенциально приводящие вот к таким бякам, я эти -1 уже вообще забыл когда писал. Если на практике потребуется, буду отладчиком внимательно смотреть, а не ошибся ли я — это самый минимум, а желательно еще настроить тестирование таким образом, чтобы такие ошибки всплыли. А если у вас вот такие явная работа с указателями норма, причем вся надежда на внимательность разработчика, и такие ошибки у вас автоматом не всплывут — ваши проблемы. Это задание проверяет исключительно внимательность, и все. Причем нет гарантии, что успешно проверяет, очень реально внимательный человек может просто оказаться уставший, а крайне невнимательный может в данный момент оказаться более сконцентрирован.
Как раз после этого нужно говорить о том, как бороться с такими ошибками, как сделать так, чтобы их не было. А не браковать тех, кто ошибается. Код пишет человек. А человек всегда ненадежен, причем любой. Не ошибается только тот, кто код не пишет. Потому надо не браковать иногда ошибающихся, а делать так, чтобы ошибки быстро находились. Если у человека недостаток внимательности, очень вероятно, что этот недостаток на практике будет компенсироваться осторожностью, тестированием и т.д. И в результате товарищь будет гораздо надежный код писать, чем тот, кто на собеседованиях не ошибается.
Re[4]: собеседование
От: denisko http://sdeniskos.blogspot.com/
Дата: 15.01.10 13:49
Оценка:
Здравствуйте, ProgrammerG, Вы писали:

PG>Здравствуйте, Handie, Вы писали:


H>>Здравствуйте, placement_new, Вы писали:


_>>>Здравствуйте, errest, Вы писали:


E>>>>Какие тестовые задания могут дать на C/C++?

E>>>>Нужны простенькие — типа сортировки массива и найти ошибки
_>>>Ну например, написать реверс строки или перевод из одной системы счисления в другую, подсчитать число единичек в байте.

H>>Реверс строки я уже писал на трех-четырех собеседованиях и делаю это исключительно по памяти — своп двух указателей идущих навстречу друг другу. Это старый баян, его знают почти все, тест на "лоха".


H>>То же самое и с подсчетом единичек. Оптимальное решение — lookup table c 8 или 16 битными "чанками". Ну и тест на "лоха" с << и | в цикле.


H>>Все это тесты начинающих кодеров


PG>Так оно и есть. Я эту задачу (реверс строки) всегда задаю первой в технической части интервью. И в зависимости от того решает или нет и как решает строится дальнейший разговор.

Хорошо, что ты эту задачу только сишникам, а не плюсовикам задаешь
<Подпись удалена модератором>
Re[5]: собеседование
От: ProgrammerG  
Дата: 15.01.10 14:19
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>Здравствуйте, ProgrammerG, Вы писали:



PG>>Так оно и есть. Я эту задачу (реверс строки) всегда задаю первой в технической части интервью. И в зависимости от того решает или нет и как решает строится дальнейший разговор.

SA>...без выделения дополнительной памяти?
Да именно так. Причём ниже как раз подтвердили почему такие задачи до сих пор актуальны.

PG>>И я всегда поражаюсь сколько людей не могут решить эту задачу с первого раза (без подсказок). Причём это не всегда студенты, а люди и с 2-3 летним "опытом" на С.

SA>А какой сакральный смысл в подсчете единичек и замене lookup table на битовый сдвиг(или деление по модулю 2) и наложение маски?
Ну во-первых надо с чего то начать разговор. Спрашивать сухую теорию типа 4-х постулатов ОО не лучшая замена. Убрать вообще техническую составляющую из собеседования то же не правильно.
Во вторых, убеждён что человек который занимается системным программирванием (а я ищу именно таких, а не формочки рисовать) должен знать как устроено то чем он пользуется. Даже если в реальной жизни он будет пользоваться только библиотеками. Более того написание любого кода на собеседовании считаю правильным.
В третьих, это показывает как человек пишет код — стилистика, сразу бросается или сначала думает, проверяет ли его перед тем как показать мне и т.д.
Чем проще задача — тем лучше. Не давать же написать реальный кусок проекта.

SA>Как они помогут в реальном проекте, когда надо будет оптимизировать какой-нибудь алгоритм Левенштайна, или спектрально-корреляционное преобразование(чисто навскидку крайние задачи, для которых пришлось использовать unmanaged. Подставьте сюда свои реальные задачи, тысячи их...)

SA>?
SA>Человеку со склонностью к математике проще решить через деление и маску. Человеку со склонностью к архитектуре и дизайну такие задачи вообще за разумное время решить сложно, паттерны здесь не применишь.
SA>Итого, кто остается? На поиск кого они заточены — "начинающих кодеров", которые будут пахать за миску доширака от забора и до обеда?

Ну причём тут миска. Да речь идёт о начинающих или с опытом до 3-х лет. Конечно человеку с 10-ти летним опытом будут задаваться другие вопросы.
Re[7]: собеседование
От: alzt  
Дата: 15.01.10 15:24
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, LordMAD, Вы писали:


LMA>>Вариант решения:

LMA>>int sign(int a) { return (a < 0) ? -1 : 1; }
LMA>>int avg(int x, int y) { return (sign(x) == sign(y)) ? x+(y-x)/2 : (x+y)/2; }

I>Первый вариант, который пришел мне в голову до твоего ответа был вот такой


I>int avg(int x, int y) { return x/2 + y/2; }


А мне вот этот вариант:

int is_odd(int x) {
    return x & 1;
}

int avg_my(int x, int y) { 
    return x/2 + y/2 + is_odd(x & y); 
}
Re[6]: собеседование
От: Handie  
Дата: 15.01.10 16:51
Оценка: 1 (1) +7
LMA>Вариант решения:
LMA>int sign(int a) { return (a < 0) ? -1 : 1; }
LMA>int avg(int x, int y) { return (sign(x) == sign(y)) ? x+(y-x)/2 : (x+y)/2; }

Это тот случай, когда служение стандарту С++ важнее продуктивной работы. Вам надо работу делать или стандарту следовать? На элементарнейшей задаче два вызова функции, усложненный код.

Простые вещи должны быть простыми. Я никогда не видел чтобы в реальном боевом коде каждое вычисление выражения проверялось на переполнение. Оперируете миллиардами — использование long long решает все проблемы

int avg(int x, int y) { return (int)(((long long)x + y)/2); }

Выглядит проще. Хотя проблема в самой функции, которая удивительно бесполезна в текущем варианте. Вот другой варант

template <class InputIterator, class T>
T average(InputIterator first, InputIterator last);

Реализуется в терминах алгоритмов STL парой строк, работает с любыми типами — int, double, float, long long, c любым количеством чисел хранящихся в любых контейнерах — vector, set, my_super_container.

При этом создатели STL не страдали идиотизмом проверки на переполнения, справедливо считая что это вопрос к программисту который использует инструмент и выбирает адекватные типы данных.
Re[9]: собеседование
От: Handie  
Дата: 15.01.10 17:06
Оценка:
LMA>Офигеть. И что — целый день говорил с сеньорами? Тогда видимо классно у них сеньоры работают — если по целому дню на кандидата.

У меня в Google было шесть собеседований, явно не с джуниорами. Каждый из них потратил 30-45 минут, я потратил два дня. У некоторых интервьюеров были бумажки со списком вопросов и задачек — видимо они для себя шпаргалок наделали или в конторе есть корпоративный "хелп".
Re[12]: собеседование
От: Ytz https://github.com/mtrempoltsev
Дата: 15.01.10 17:07
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>Без обид, но ни, и "непонятно". Так вот, непонятно, вам шашечки или ехать?


Все нормально Без обид, но возможно вам стоит попробовать себя как корректора, раз уж с программированием не очень Шутка.

SA>Алгоритм проверить или навыки работы с адресной арифметикой псевдокода, набранного в браузере?


Я затрудняюсь это алгоритмом назвать, это должно быть интуитивно понятно, как зубы почистить.

SA>В первом примере обнуление последнего байта строки я опустил намеренно, а во втором — да, каюсь, позабыл в спешке -1 после strlen() дописать. Слава богу, три года с указателями не работаю Ну и, о чем это говорит? Может, о вас, раз с вами помимо указателей говорить не о чем?


С какой целью опустили? Вообще есть мнение, например у Спольски, которое я разделяю, что у хорошего программиста ответ как написать < или <=, отнять единицу или нет, приходит сам, без дополнительных усилий. Ну если на велосипеде научился ездить, то не будешь задумываться как крутить педали и когда жать на тормоз. Потому и странно.
Re[12]: собеседование
От: Ytz https://github.com/mtrempoltsev
Дата: 15.01.10 17:20
Оценка: +1
Здравствуйте, elmal, Вы писали:

E>-1 запросто можно и забыть написать, вообще-то. Особенно если привык итераторами пользоваться, а всякие len и for уже давно забыл, как потенциально приводящие вот к таким бякам, я эти -1 уже вообще забыл когда писал. Если на практике потребуется, буду отладчиком внимательно смотреть, а не ошибся ли я — это самый минимум, а желательно еще настроить тестирование таким образом, чтобы такие ошибки всплыли.


Поймите правильно — я не пытаюсь кого либо принизить, а себе цену набить, но это все равно, что фигурист будет говорить, что он может крутиться как волчок на коньках, а как просто вперед ехать уже забыл.
Re[13]: собеседование
От: StandAlone  
Дата: 15.01.10 17:48
Оценка: +1
Здравствуйте, Ytz, Вы писали:

Ytz>Все нормально Без обид, но возможно вам стоит попробовать себя как корректора, раз уж с программированием не очень Шутка.


Спасибо, но у меня и с должностью синьор программера пока неплохо получается справляться — править косяки за студентами и решать задачи, для них в принципе,из-за отсутствия опыта, неразрешимые.

Ytz>Я затрудняюсь это алгоритмом назвать, это должно быть интуитивно понятно, как зубы почистить.


Ну, алгоритмы-то и посложнее бывают. Я тоже затрудняюсь сказать, с какой целью ЭТО спрашивают на собеседованиях, и какой с этого выхлоп практический.
Спрашивал выше по ветке -никто не признается.

Ytz>С какой целью опустили?

С целью побеседовать с интервьюером о чем-нибудь интереснее следующей задачи на биты. Например, насчет безопасности программирования в целом и гарантий Абрамса(для вызывающего кода) в частности.

Ytz>Вообще есть мнение, например у Спольски, которое я разделяю, что у хорошего программиста ответ как написать < или <=, отнять единицу или нет, приходит сам, без дополнительных усилий. Ну если на велосипеде научился ездить, то не будешь задумываться как крутить педали и когда жать на тормоз. Потому и странно.


Ага. Когда-то, в туманной дали, когда я вовсю педалил на С++ Builder-е, обращение с указателями для меня было, как завязка шнурков.
Был ли я тогда хорошим программистом? Глядя на тогдашний код — увы. С указателями там все было в порядке. Зато на уровень абстракции выше — полный швах.
С тех пор утекло много воды, я как-то начал думать больше о дизайне и меньше об указателях. Перешел на обувь без шнурков, условно говоря-ногу забил и пошел.
Потому что те же паттерны невозможно освоить чисто теоретически. Нужно потратить несколько лет и сделать несколько больших, сложных проектов, набить шишки и увидеть грамотную архитектуру, реально поработать- только после этого придет понимание грамотных подходов проектирования, разработки, тестирования, внедрения.
Никакие олимпиады и курсачи\лабы этого не дадут.
Но адресная арифметика может, увы, подзабыться. Даже у Шерлока Холмса объем чердака был ограничен. Sad but true.
Так что там у Спольски с переворотом строки?
Re[13]: собеседование
От: LordMAD Россия  
Дата: 15.01.10 18:19
Оценка: :))) :))) :))
Здравствуйте, hrensgory, Вы писали:

H>Вопросы о том, что именно при условии правильного ответа на них вы

H>рассчитываете услышать по следующим темам:

H>2. Архитектура и проектирование

H>4. Объектно-ориентированное программирование
H>7. Базы данных
H>10. Автоматизированное тестирование
H>12. Составление спецификаций и анализ требований

Я думаю будет понятно, если я просто приведу пример вопроса, например, по теме Объектно-ориентированное программирование:

К каким требованиям на предусловия (preconditions) и постусловия (postconditions) приводит Принцип замещения Лисков (Liskov Substitution Principle — LSP)?
Re[8]: собеседование
От: LordMAD Россия  
Дата: 15.01.10 18:23
Оценка:
Здравствуйте, alzt, Вы писали:

A>А мне вот этот вариант:


A>
A>int is_odd(int x) {
A>    return x & 1;
A>}

A>int avg_my(int x, int y) { 
A>    return x/2 + y/2 + is_odd(x & y); 
A>}
A>


Похожая проблема: avg_my(-3, -3) == -1
Re[7]: собеседование
От: LordMAD Россия  
Дата: 15.01.10 18:41
Оценка:
Здравствуйте, Handie, Вы писали:

H>int avg(int x, int y) { return (int)(((long long)x + y)/2); }


Уже лучше. Если бы в начале был еще assert (лучше статический), проверяющий, что размер long long больше, чем размер int, так вообще было бы хорошо. Соответственно — хороший повод на собеседовании обсудить цену преобразования int в long long и операций над ним на разных платформах, особенно если речь именно об C, а не C++, потому что C99 требует для long long не менее 64 бит. Ну и т.д.

H>Вот другой варант


H>template <class InputIterator, class T>

H>T average(InputIterator first, InputIterator last);

H>Реализуется в терминах алгоритмов STL парой строк, работает с любыми типами — int, double, float, long long, c любым количеством чисел хранящихся в любых контейнерах — vector, set, my_super_container.


Ну, это вариант, только будучи реализованным кандидатом на собеседовании. Опять-таки — хороший повод обсудить дешевые варианты перехода от двух int'овых аргументов к итераторам и т.д.

H>При этом создатели STL не страдали идиотизмом проверки на переполнения, справедливо считая что это вопрос к программисту который использует инструмент и выбирает адекватные типы данных.


Именно. Это как раз одна из причин, почему в задании приводится объявление функции avg — чтобы было видно, что адекватный результат функции — int.
Re[10]: собеседование
От: LordMAD Россия  
Дата: 15.01.10 19:05
Оценка:
Здравствуйте, Handie, Вы писали:

LMA>>Офигеть. И что — целый день говорил с сеньорами? Тогда видимо классно у них сеньоры работают — если по целому дню на кандидата.


H>У меня в Google было шесть собеседований, явно не с джуниорами. Каждый из них потратил 30-45 минут, я потратил два дня. У некоторых интервьюеров были бумажки со списком вопросов и задачек — видимо они для себя шпаргалок наделали или в конторе есть корпоративный "хелп".


Ну вот это уже адекватное расходование времени. Всего чистого времени 3-5 часов получается, так?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.