Задачи на интервью

ZmeyeeD
Уже с Приветом
Posts: 3394
Joined: 02 Jul 2006 02:59

Re: Задачи на интервью

Post by ZmeyeeD »

Medium-rare wrote:
ZmeyeeD wrote: я бы прекращал интервью немедленно (если это только не кусок какого-нибудь супер-пупер embedded firmware чего-то-там, где памяти 128К а места на диске 2 МВ
Да по любому, ничем не оправдано. При чём тут embedded? И там можно писать и эффективно, и красиво и ясно.
Иногда нет выхода - элементарно не хватает памяти (или места не диске) и приходится считать каждый байт. Тут уже не до темпейтов и классов. Кстати, приведенный здесь код типа *++a - ничем не уступает ассемблеру в производительности в том смысле, что он уже оптимизирован по самое немогу, но все это абсолютно нечитабельно.
StrangerR
Уже с Приветом
Posts: 37986
Joined: 14 Dec 2006 20:13
Location: USA

Re: Задачи на интервью

Post by StrangerR »

ZmeyeeD wrote:StrangerR, темплейты тоже разными бывают.

String <char> очень сильно облегчает жизнь во многих случаях, если его использовать вместо char *, хотя есть определенная потеря производительности. Но ведь ты согласен, что на C писать удобнее, чем на ассемблере. Почему же ты тогда не согласен использовать возможности C++/Java - это oблегчает жизнь по сравнению с C?
Ну во первых, оный String <char> весьма кривой класс и половина народа пишет не на нем а на чем нибудь еще вроде QT. Я уж не помню почему мы в свое время от него отказались, но пришлось отказаться.

Во вторых, я не против использования темплейтов там где они по уму используются. Но во первых, их еще и должны бы понимать отладчики и анализаторы кода, а они не особо понимают обычно. Главная же проблема в том, что дай дураку только волю - креативное использование темплейтов дураками приводит к таким кодам, что хоть стой хоть падай...
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: Задачи на интервью

Post by Мальчик-Одуванчик »

Дураки как раз интуитивно стараются избегать применения расширенных возможностей С++, в том числе и шаблонов, низводя все до программирования в стиле "С с классами".
ZmeyeeD
Уже с Приветом
Posts: 3394
Joined: 02 Jul 2006 02:59

Re: Задачи на интервью

Post by ZmeyeeD »

Мальчик-Одуванчик wrote:Дураки как раз интуитивно стараются избегать применения расширенных возможностей С++, в том числе и шаблонов, низводя все до программирования в стиле "С с классами".
Слишком резкое и некорректное высказывание. Люди, программирующие на С много лет, действительно имеют проблемы с переходом на C++/Java и поэтому избегают многих расширенных возможностей языков. Но все зависит от поставленной задачи. Я ни за что в жизни не буду вычислять факториал через темплейты на стадии компиляции, но использовать семи-встроенные типы (string<T>, vector<T> etc.) - с удовольствием. Все зависит от поставленной задачи, но, в любом случае, код должен быть читаемым. Если код нечитаем, то фтопку такой код (за редкими исключениями).
User avatar
Flash-04
Уже с Приветом
Posts: 63377
Joined: 03 Nov 2004 05:31
Location: RU -> Toronto, ON

Re: Задачи на интервью

Post by Flash-04 »

Мальчик-Одуванчик wrote:Дураки как раз интуитивно стараются избегать применения расширенных возможностей С++, в том числе и шаблонов, низводя все до программирования в стиле "С с классами".
шаблоны - мощная и полезная фича, но не зря из выкинули из Java/C#.
Not everyone believes what I believe but my beliefs do not require them to.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15475
Joined: 27 Sep 2007 22:53

Re: Задачи на интервью

Post by Мальчик-Одуванчик »

Flash-04 wrote:
Мальчик-Одуванчик wrote:Дураки как раз интуитивно стараются избегать применения расширенных возможностей С++, в том числе и шаблонов, низводя все до программирования в стиле "С с классами".
шаблоны - мощная и полезная фича, но не зря из выкинули из Java/C#.
Тут как раз все просто
Языки Java и C# расчитаны прежде всего на среднего индуса, у которых с шаблонами когнитивный диссонанс.
agrippina
Уже с Приветом
Posts: 366
Joined: 06 Jan 2006 23:21

Re: Задачи на интервью

Post by agrippina »

ZmeyeeD wrote:Кстати, кто помнит порядок операций в

Code: Select all

*++s2
?

Я не помню и помнить не хочу.
А я помню, хотя пишу на Цэ[++] крайне редко. Если у вас в конторе C[++] это основной язык программирования, то как можно работать с людьми, которые не знают его базовых конструкций? Вывод: ваша контора нам не подходит.
User avatar
valchkou
Уже с Приветом
Posts: 4185
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Задачи на интервью

Post by valchkou »

agrippina wrote:
ZmeyeeD wrote:Кстати, кто помнит порядок операций в

Code: Select all

*++s2
?

Я не помню и помнить не хочу.
А я помню, хотя пишу на Цэ[++] крайне редко. Если у вас в конторе C[++] это основной язык программирования, то как можно работать с людьми, которые не знают его базовых конструкций? Вывод: ваша контора нам не подходит.
А если они вам предложат в 2 раза больше, чем у вас есть сейчас ?
klaim_1
Уже с Приветом
Posts: 727
Joined: 06 Oct 2010 11:34

Re: Задачи на интервью

Post by klaim_1 »

Мальчик-Одуванчик wrote:
Flash-04 wrote:
Мальчик-Одуванчик wrote:Дураки как раз интуитивно стараются избегать применения расширенных возможностей С++, в том числе и шаблонов, низводя все до программирования в стиле "С с классами".
шаблоны - мощная и полезная фича, но не зря из выкинули из Java/C#.
Тут как раз все просто
Языки Java и C# расчитаны прежде всего на среднего индуса, у которых с шаблонами когнитивный диссонанс.
Т.е. с лямбдами,линком, генериками, expressions, функциями-расширениями и прочим у среднего индуса все в порядке...
А вот с шаблонами когнитивный диссонанс.
IvanF
Уже с Приветом
Posts: 719
Joined: 07 Jan 2011 20:58
Location: New York

Re: Задачи на интервью

Post by IvanF »

Flash-04 wrote:шаблоны - мощная и полезная фича, но не зря из выкинули из Java/C#.
По моему, в Java/C# просто невозможно реализовать шаблоны потому что там нет headers. Шаблон компилируется только в месте его использования, а Java/C# не могут этого по определению. В Java/C# все что описанно в данном файле тут же и должно откомпилироваться. Именно поэтому в C# появился примитивный аналог шаблонов - generics, но он компилируется на месте описания и должен поддерживатся на уровне виртуальной машины.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Задачи на интервью

Post by crypto5 »

IvanF wrote:
Flash-04 wrote:шаблоны - мощная и полезная фича, но не зря из выкинули из Java/C#.
По моему, в Java/C# просто невозможно реализовать шаблоны потому что там нет headers. Шаблон компилируется только в месте его использования, а Java/C# не могут этого по определению. В Java/C# все что описанно в данном файле тут же и должно откомпилироваться. Именно поэтому в C# появился примитивный аналог шаблонов - generics, но он компилируется на месте описания и должен поддерживатся на уровне виртуальной машины.
Непонятно при чем тут хедеры, вполне можно компилить по факту использования, типа нашел компиллер конструкцию вида ArrayList<Integer>, взял и сгенерил и скомпилировал новый класс ArrayList_Integer если такого еще нету.
Не знаю как там в С# а для джавы наверное просто не осилили(из-за проблем у сана и всяких перепокупок она медленно развивается последние лет 5) или не посчитали нужным что бы не усложнять язык.
In vino Veritas!
IvanF
Уже с Приветом
Posts: 719
Joined: 07 Jan 2011 20:58
Location: New York

Re: Задачи на интервью

Post by IvanF »

crypto5 wrote:Непонятно при чем тут хедеры, вполне можно компилить по факту использования
Вы вообще java видели??? каким образом компилятор java найдет описание темплейта если он находится в другом файле??? перед тем как компилировать текущий java файл, все импорты должны быть уже откомпилированны в class файл и компилятор использует только их.
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Задачи на интервью

Post by crypto5 »

IvanF wrote:
crypto5 wrote:Непонятно при чем тут хедеры, вполне можно компилить по факту использования
Вы вообще java видели??? каким образом компилятор java найдет описание темплейта если он находится в другом файле??? перед тем как компилировать текущий java файл, все импорты должны быть уже откомпилированны в class файл и компилятор использует только их.
Во первых у джавы насколько я знаю двухпроходной компиллер, во вторых в чем проблема использовать class файл для генерации нового класса? Они ж легко интроспектируются, это ж не бинарный оптимизированный код? А в третьих ваша теория того как работает джавовский компиллер не обьясняет как он разруливает циклические ссылки.
In vino Veritas!
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Re: Задачи на интервью

Post by Flying Hen »

avitya wrote:
Flying Hen wrote:Дополнительные вопросы:
Как сделать линейное время?
Как уменьшить размер table?
Куда уж линейнее?
А вот к стилю кодирования я бы мог придираться бесконечно :)
Там же происходит сдвиг строки на каждом шаге. Значит время квадратичное. Или я не прав?
Насчет пуговиц можно спорить бесконечно ;)
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Задачи на интервью

Post by crypto5 »

Flying Hen wrote:
avitya wrote:
Flying Hen wrote:Дополнительные вопросы:
Как сделать линейное время?
Как уменьшить размер table?
Куда уж линейнее?
А вот к стилю кодирования я бы мог придираться бесконечно :)
Там же происходит сдвиг строки на каждом шаге. Значит время квадратичное. Или я не прав?
Насчет пуговиц можно спорить бесконечно ;)
Не, линейное, там может быть максимум n копирований символа за все время.
In vino Veritas!
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Re: Задачи на интервью

Post by Flying Hen »

crypto5 wrote: Не, линейное, там может быть максимум n копирований символа за все время.
Да, верно, количество сдвигов ограничено.
Просто можно сделать выходной буфер и обойтись без сдвигов.
User avatar
AndreyT
Уже с Приветом
Posts: 2997
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: Задачи на интервью

Post by AndreyT »

ZmeyeeD wrote:Кстати, кто помнит порядок операций в

Code: Select all

*++s2
?
Во-первых, "помнить порядок операций" в `*++s2` соврешенно не нужно. Поорядок операций в `*++s2` очевидным образом вытекает из самой записи и не допускает никаких неоднозначностей. Это в каком-нибудь `*s2++` действительно нужно "помнить порядок операций", т.к. наличествует неоднозначность `(*s2)++` vs. `*(s2++)` (и запомнить правильный вариант совсем не сложно: постфиксные операторы всегда выше приоритетом, чем префиксные). А в `*++s2` никакой свободы толкования нет и помнить тут совершенно нечего.

Во-вторых, за "порядок операций" тут сразу "no hire". Никакого "порядка операций" тут нет. Есть, если угодно, приоритет операторов, который лишь определяет группировку между операторами и операндами. Но приоритет не определяет никакого "порядка операций". В языках С/С++ понятие "порядка операций" возможно только на более высоком уровне, когда в коде расставлены точки следования. В таких простых выражениях, как `*++s2` и `*s2++` никаких точек следования нет, посему никакого конкрентного "порядка операций" там нет и быть не может.
Last edited by AndreyT on 28 Sep 2011 02:56, edited 1 time in total.
Best regards,
Андрей
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Re: Задачи на интервью

Post by Flying Hen »

ZmeyeeD wrote: Если на C++ or Java, то воспользуйтесь чем-нибудь вроде Set/LinkedHashSet etc.
Каждую букву - в отдельный объект. Современное программирование :%)
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Задачи на интервью

Post by crypto5 »

Flying Hen wrote:
crypto5 wrote: Не, линейное, там может быть максимум n копирований символа за все время.
Да, верно, количество сдвигов ограничено.
Просто можно сделать выходной буфер и обойтись без сдвигов.
Да нет там никаких сдвигов, там единичные копирования символов которые еще не встречались, буфером выступает сам массив.
In vino Veritas!
User avatar
crypto5
Уже с Приветом
Posts: 4637
Joined: 24 Oct 2009 01:38
Location: Chicago ;-) -> SFBA!

Re: Задачи на интервью

Post by crypto5 »

Flying Hen wrote:
ZmeyeeD wrote: Если на C++ or Java, то воспользуйтесь чем-нибудь вроде Set/LinkedHashSet etc.
Каждую букву - в отдельный объект. Современное программирование :%)
В ц++ понятно можно сделать контейнер для примитивов, а в джаве такие есть например в jakarta commons.
In vino Veritas!
User avatar
AndreyT
Уже с Приветом
Posts: 2997
Joined: 14 Apr 2004 01:11
Location: SFBA (было: Минск, Беларусь)

Re: Задачи на интервью

Post by AndreyT »

sergant wrote: how to remove duplicate characters in a string?
abcabc -> abc
abcabcdabcdefg -> abcdefg
Ну так а в случае множественного вхождения некоторого символа оставить требуется какое именно? Первое? Последнее? Произвольное? Или вообще надо построить отсортированный список входящих в строку уникальных символов? Из приведенной постановки задачи этого совершенно не видно.

Я бы сказал, что ценность такой задачи как раз таки и сводится в первую очередь к проверке того, задаст ли интервьюируемый вышеприведенные уточняющие вопросы. Если у него даже и не возникло подобных вопросов - сразу ясно, что толку тут не будет...
Best regards,
Андрей
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Re: Задачи на интервью

Post by Flying Hen »

crypto5 wrote: Да нет там никаких сдвигов, там единичные копирования символов которые еще не встречались, буфером выступает сам массив.
Упс, невнимательно посмотрел. Все верно.
ZmeyeeD
Уже с Приветом
Posts: 3394
Joined: 02 Jul 2006 02:59

Re: Задачи на интервью

Post by ZmeyeeD »

AndreyT wrote:
ZmeyeeD wrote:Кстати, кто помнит порядок операций в

Code: Select all

*++s2
?
Во-первых, "помнить порядок операций" в `*++s2` соврешенно не нужно. Поорядок операций в `*++s2` очевидным образом вытекает из самой записи и не допускает никаких неоднозначностей. Это в каком-нибудь `*s2++` действительно нужно "помнить порядок операций", т.к. наличествует неоднозначность `(*s2)++` vs. `*(s2++)` (и запомнить правильный вариант совсем не сложно: постфиксные операторы всегда выше приоритетом, чем префиксные). А в `*++s2` никакой свободы толкования нет и помнить тут совершенно нечего.

Во-вторых, за "порядок операций" тут сразу "no hire". Никакого "порядка операций" тут нет. Есть, если угодно, приоритет операторов, который лишь определяет группировку между операторами и операндами. Но приоритет не определяет никакого "порядка операций". В языках С/С++ понятие "порядка операций" возможно только на более высоком уровне, когда в коде расставлены точки следования. В таких простых выражениях, как `*++s2` и `*s2++` никаких точек следования нет, посему никакого конкрентного "порядка операций" там нет и быть не может.
Aга, именно такие специалисты по порядку операций задают на интервью вопросы типа
int a = 5;
int b = 6;
int c = a+++b--;

Чему равно с?
И если бы только на интервью! Неделю назад переписывал код, написанный таким "специалистом" по порядку операций - ошибочка вошла в одном из ++-- и система падала случайным образом. Когда я спросил, "WTF, кто написал это", мне ответили, что этот "специалист" уже не работает в конторе.

Код должен быть понятным с первого взгляда, по возможности. Первоначальный код топикстартера с первого взгляда не понятен (и не ясно, что он делает, если нет комментариев). Приносить читаемость кода в жертву производительности там, где производительность модуля не критична (а это в большинстве случаев происходит) - нельзя.
ZmeyeeD
Уже с Приветом
Posts: 3394
Joined: 02 Jul 2006 02:59

Re: Задачи на интервью

Post by ZmeyeeD »

Flying Hen wrote:
ZmeyeeD wrote: Если на C++ or Java, то воспользуйтесь чем-нибудь вроде Set/LinkedHashSet etc.
Каждую букву - в отдельный объект. Современное программирование :%)
А буква и так - объект, если считать за букву юникодовский символ.
User avatar
Flying Hen
Уже с Приветом
Posts: 1377
Joined: 14 May 2003 20:37
Location: NY, USA

Re: Задачи на интервью

Post by Flying Hen »

ZmeyeeD wrote: А буква и так - объект, если считать за букву юникодовский символ.
Как это? В Джаве буква это 16 bit unsigned int, примитив то есть.

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