+7(499)-938-42-58 Москва
+7(800)-333-37-98 Горячая линия

Задачи на собеседовании c с ответами

Логические задачи на собеседовании с ответами, которые от вас ждут работодатели

Задачи на собеседовании c с ответами

Поиск нового места работы легкой задачей не назовешь. Грамотно составить резюме, успешно пройти первичное собеседование и получить приглашение на личную аудиенцию к работодателю – это только треть успеха.

Самым сложным этапом является собеседование. Оно может стать настоящим испытанием. Чтобы вакантная должность досталась именно вам, важно не только произвести приятное впечатление, но и заинтересовать работодателя.

Современные руководители все чаще обращаются к нестандартным инструментам проверки способностей соискателей.

Помимо вопросов, направленных на выявление профессиональных знаний и опыта, все чаще от них можно услышать каверзные вопросы или задачи на логику.

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

Если человек раньше не сталкивался с этим, он вполне может растеряться на собеседовании. Что же делать в таких случаях? Реально ли, не зная правильный ответ на вопрос, все же получить желаемую должность? Можно ли «прокачать» свой интеллект? Какие самые распространённые логические задачи? Давайте разбираться.

Самое главное – не впадать в ступор, когда на собеседовании вам предложат одну или несколько логических головоломок. Зачастую важен не сам ответ, а ход ваших мыслей, умение рассуждать.

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

Это очень ценное качество, особенно для вакансий, связанных с аналитической работой или творчеством.

А еще для получения новой, но малознакомой работы, не связанной со старой, от которой вы может устали, а может она надоела, просто необходима хорошая память. Это главное!

Если вы сможете все, что от вас требуют, быстро запомнить и скорейшим образом войти в курс дела, то вы”на коне”! Для вас не останется не подходящей работы. Вы быстро освоитесь на любом месте!

Не думайте, что это нереально, если в школе вы не могли запомнить с 5-го раза стихотворение. Вас просто никогда не учили запоминать. Требовали запомнить- Да.

Но не учили этому. Сейчас можно быстро приподнять свои способности, если есть необходимость, с помощью специальных упражнений. Например здесь.

Посмотрите на депутатов. Они что, обладают сверхзнаниями? Конечно нет. Просто они имеют хорошую память, которая дает им возможность красиво и доходчиво говорить.  А это, в совокупности с актерским мастерством, дает безграничные возможности.

Не даром президентами часто становятся обыкновенные актеры, а не знатоки экономики и политики: Рональд Рейган, Владимир Зеленский.

Практические вопросы на собеседовании при приеме на работу

Теперь от теории перейдем к практике.

Вот несколько самых распространённых логических задач и ответы на них.

Как поделить торт

Условия задачи: один торт надо разделить на 8 кусочков. Выполнить это можно только тремя разрезами. Как это сделать?

Ответ: сначала режем торт на четыре куска крест-накрест. А после этого разрезаем его пополам по горизонтали. Также после выполнения крест-накрест можно уложить кусочки горкой и разрезать третьим разрезом пополам — это второй способ. Пусть неаппетитно, зато задача решена!

Лампочки

Условия задачи: в закрытой комнате установлено три лампочки, за дверью – три выключателя. Как за одно открывание двери узнать, какой выключатель относится к той или иной лампочке?

Ответ: включаем 2 выключателя и через 10 минут выключаем первый. Заходим в комнату. Мы видим, что одна лампочка горит. Значит это второй выключатель. Теперь потрогаем две лампочки, которые не горят. Тёплой будет соответствовать первый выключатель, значит холодной – третий. Все просто!

Ведра с водой

Условия задачи: есть два ведра — большое 5-литровое и маленькое — 3-литровое. Как с их помощью отмерить 4 л воды?

Ответ: наливаем воду в 5-литровое ведро и наполняем из него 3-литровое — в 5-литровом осталось 2 л воды. Воду из 3-литрового выливаем, в него наливаем оставшиеся 2 литра из большого ведра. В 5-литровое снова набираем воду и доливаем из него недостающий литр в маленькое ведро. В большом ведре осталось ровно 4 л воды.

Фальшивая монетка

Условия задачи: есть 8 монет, одна из них фальшивая и весит меньше, чем настоящая. Как за два взвешивания узнать, какая монета ненастоящая?

Ответ: на каждую чашу весов кладём по три монеты. Если чаши весов остались в равновесии, фальшивая монета — одна из двух оставшихся. Её можно определить при втором взвешивании.

Если одна из чаш перевесила, значит фальшивка среди монет, которые находятся в более легкой чаше. Для второго взвешивания берём из неё две любые монеты из трёх. Если одна из чаш весов отклоняется, значит уже можно определить более лёгкую монету.

Если чаши остались уравновешенны, значит фальшивка — оставшаяся монетка.

Таблетки

Условия задачи: доктор дал вам четыре таблетки двух разных препаратов, по две таблетки каждого. Все четыре — абсолютно одинаковые по внешнему виду. Таблетки нужно принять два раза — утром и вечером, по одной таблетке каждого препарата. Случайно таблетки перепутались. Что делать?

Ответ: нужно каждую таблетку разделить пополам и выпить по одной части каждой утром и вечером.

О крышке люка

Почему крышки люков на улицах всегда круглые?

Ответ: Крышка такой формы никогда не провалится внутрь люка.

Задача о Доме 2

Немного шутливая, но очень правильная 🙂

Какой из героев Дом 2 вам наиболее всего импонирует?

Правильный ответ: Что такое Дом 2?

Очень часто логические задачи не требуют от кандидата каких-либо специальных знаний. Интеллект и логика абсолютно не связаны с профессиональными знаниями и отражают лишь гибкость ума, а также объемы накопленной информации и навыков. Конечно же интеллект можно развивать, а регулярное решение логических задач будет этому способствовать.

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

Поэтому отвечая на вопрос, не бойтесь рассуждать вслух, делать предположения, объяснять тот или иной выбранный вариант, формировать свои выводы.

Такое поведение не останется без внимания работодателя — даже если вы не сможете дать правильный ответ, вряд ли это станет поводом отказать вам.

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

Фишка в том, что вы можете не знать, чего от вас хочет получить работодатель. То ли ему нужен человек, способный самостоятельно решать задачи и принимать решения, то ли сотрудник, способный работать в коллективе и совместно решать сложные задачи.

Замечательно, если вы об этом сможете узнать еще до начала собеседования, изучая возможную будущую работу в компании. Найдите себе такую работу, какая вам понравиться. например эту:

Самая хорошая работа в мире

Вот что говорил Генри Форд:

Фотографу все нравиться:

Оценить отели 5 звезд досталось австралийке Сорель Амор (конкурс был 17000 человек на 1 место!):

Высокооплачиваемый фрилансер не такая уж и большая редкость:

И безусловно лидер рейтинга лучших работ в мире- депутаты государственной думы России:

И если вам ваша работа кажется ужасной, то все познается в сравнении! Посмотрите на этих рабочих и может быть вам станет легче:)

Самая плохая работа в мире в картинках

Хочешь быть настоящим строителем- живи в Китае:

Попробуй урони:

В Китайском офисе. Простите, как пройти в туалет?

Только бы дождь не пошел:

Креативщики в рекламном агентстве. Зря мы придумали эту идею:

Давай уже, кидай и пора обедать:

А вы тоже хотели быть парфюмерами и изобретать дезодоранты?

Ну и где золото-бриллианты?

Дрессировщик крокодилов:

Перед дрессировкой их надо хорошо покормить:

Эх слоненок, когда же ты сам будешь на горшок ходить?

Ракеш- чистильщик канализации в Калькутте

Так что не отчаивайтесь!

Вас ждут новые горизонты!

Вопросы-головоломки на собеседованиях с ответами. Часть 1

Задачи на собеседовании c с ответами

Соискателям, столкнувшимся с головоломками в процессе собеседования, не стоит паниковать и теряться.

Как правило, в большинстве случаев достаточно показать ход ваших мыслей и пути решения поставленной задачи. Вполне может быть, что у задачи и нет правильного решения или однозначного ответа.

Ни в коем случае нельзя говорить «я не знаю» или «затрудняюсь ответить», просто размышляйте вслух.

Чтобы вы знали к чему быть готовыми и не растерялись, Work.ua собрал самые популярные вопросы-головоломки и подготовил ответы и рекомендации к ним. Кто знает, может вам попадутся именно эти задачи.

Все эти головоломки могут вам задать при собеседовании на вакансию программиста php.

Канализационные люки

Это, пожалуй, самый распространенный вопрос среди всех головоломок.

Вопрос: Почему канализационные люки круглые?

Ответ: Есть несколько вариантов. Так как диаметр круга одинаков, как его не крути, то круглый люк не может провалиться в колодец. У квадрата же, например, диагональ больше его сторон, поэтому крышка могла бы упасть. Также можно ответить, что круглые люки проще транспортировать и передвигать.

Торт

Вопрос: Как разделить торт на 8 равных частей тремя разрезами?

Ответ: Сперва нужно сделать 2 разреза крест на крест, поделив торт на 4 равных части. А затем разрезать торт горизонтально пополам. Ну и что, что куски стали невысокие, зато у вас 8 равных частей. Еще можно после первых двух разрезов сложить кусочки друг на друга и переполовинить одним разрезом.

Мертвый человек и спичка

Вопрос: Среди поля найден мертвый человек со спичкой в руках, следов нет. От чего он умер и при каких обстоятельствах?

Ответ: Человек умер от падения с самолета, который начал терять высоту, и авария была неизбежна. На всех пассажиров не хватило одного парашюта и они тянули жребий. Ему досталась короткая спичка, и он был вынужден прыгать без парашюта.

Автобус и мячи

Вопрос: Сколько теннисных мячей поместится в автобус?

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

Посчитайте объем автобуса и мяча — так вы узнаете сколько мячей поместится в пустой автобус. Уменьшите примерно это значение с учетом сидений и других деталей автобуса, сделайте поправку на то, что мячи не квадратные и дайте ответ. В этом случае процесс поиска ответа важнее самого ответа.

Варианты вопроса могут быть разные: мячи — футбольные, вместо автобуса — комната и т.п.

В заключение

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

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

Но даже в этой ситуации уверенное поведение и стремление прийти к ответу покажут вас с лучшей стороны и увеличат шансы получить должность.

Вопросы программисту C/C++ на собеседовании с ответами

Задачи на собеседовании c с ответами

Заметил, что на собеседовании часто задают одни и те же вопросы по программированию. Если бы брали на работу водителя, то некоторые вопросы звучат примерно так:

  • В какую сторону надо крутить руль, чтоб повернуть направо?
  • За что отвечает педаль сцепления/тормоза/газа?

Такое конечно случается далеко не всегда, но первые пару вопросов обычно такого рода («А какую надо давить педаль, чтоб автомобиль остановился?»). Публикую свои ответы на некоторые вопросы для программистов. Вдруг кому пригодится.. Возможно, здесь много ошибок и помарок — при составлении этого списка я не пользовался интернетом. Старался выдать, что знаю сам.

Как можно оптимизировать данный цикл?

void func(int *array, int len){ for (int i = 0; i open(“some stream”)) { delete stream; return false; }  if (0 != stream->load()) { delete stream; return false; }  // Выполняем полезную работу // Закончили полезную работу delete stream; return true;}

bool func(){ Stream *stream = new Stream; if (0 != stream->open(“some stream”)) { delete stream; return false; } if (0 != stream->load()) { delete stream; return false; } // Выполняем полезную работу // Закончили полезную работу delete stream; return true;}

После появление std::auto_ptr стало возможным переписать функцию таким образом:

bool func(){ std::auto_ptr stream(new Stream);  if (0 != stream->open(“some stream”)) { // Здесь “delete stream” вызывается автоматически return false; }  if (0 != stream->load()) { // Здесь “delete stream” вызывается автоматически return false; }  // Выполняем полезную работу // Закончили полезную работу  // Здесь “delete stream” вызывается автоматически return true;}

bool func(){ std::auto_ptr stream(new Stream); if (0 != stream->open(“some stream”)) { // Здесь “delete stream” вызывается автоматически return false; } if (0 != stream->load()) { // Здесь “delete stream” вызывается автоматически return false; } // Выполняем полезную работу // Закончили полезную работу // Здесь “delete stream” вызывается автоматически return true;}

И еще очень важный момент: std::auto_ptr владеет объектом единолично. Вы не сможете шарить объект между двумя std::auto_ptr (используйте в таких случаях std::shared_ptr):

void func() { Object *object = new Object;  std::auto_ptr ptr1(object); // object теперь живет внутри ptr1 std::auto_ptr ptr2(ptr1); // ptr1 опустел, object внутри ptr2  // здесь деструктор ptr2 удалит object // а здесь вызовется деструктор ptr1 впустую}

void func() { Object *object = new Object; std::auto_ptr ptr1(object); // object теперь живет внутри ptr1 std::auto_ptr ptr2(ptr1); // ptr1 опустел, object внутри ptr2 // здесь деструктор ptr2 удалит object // а здесь вызовется деструктор ptr1 впустую}

И помните: std::auto_ptr не подходит для массивов выделенных с помощью new[]. Для этих целей используйте std::tr1::scoped_array или boost::scoped_array.

Что такое RAII?

Это переводится как «Получение ресурса есть инициализация». Идея вкратце такая: в конструкторе открываем/блокируем ресурс, в деструкторе закрываем/освобождаем ресурс. Вот пример:

class FILEWrap{public: FILEWrap( const char *fileName ) : f_(fopen(fileName, “rb”)) { }  ~FILEWrap() { if (f_) { fclose(f_); } } private: FILE *f_;};

class FILEWrap{public: FILEWrap( const char *fileName ) : f_(fopen(fileName, “rb”)) { } ~FILEWrap() { if (f_) { fclose(f_); } } private: FILE *f_;};

Или более каноничный пример (блокирование мьютекса или критической секции):

class MutexLock{public: MutexLock(Mutex &mutex) : mutex_(mutex) { mutex.lock(); }  ~MutexLock() { mutex.unlock(); } private: Mutex &mutex_;};

class MutexLock{public: MutexLock(Mutex &mutex) : mutex_(mutex) { mutex.lock(); } ~MutexLock() { mutex.unlock(); } private: Mutex &mutex_;};

Зачем нужен виртуальный деструктор?

Попробуем обойтись без него:

#include  class A{public: A() { printf(“construct A”); }  ~A() { printf(“destruct A”); }};  class B : public A{public: B() { printf(“construct B”); }  ~B() { printf(“destruct B”); }};  int main(){ B *b = new B; A *a = b; delete a;}

#include class A{public: A() { printf(“construct A”); } ~A() { printf(“destruct A”); }}; class B : public A{public: B() { printf(“construct B”); } ~B() { printf(“destruct B”); }}; int main(){ B *b = new B; A *a = b; delete a;}

Вывод:

construct Aconstruct Bdestruct A

construct Aconstruct Bdestruct A

Как можно заметить деструктор B не вызвался. Сделаем деструктор класса A виртуальным и посмотрим что получится:

#include  class A{public: A() { printf(“construct A”); }  virtual ~A() { printf(“destruct A”); }};  class B : public A{public: B() { printf(“construct B”); }  ~B() { printf(“destruct B”); }};  int main(){ B *b = new B; A *a = b; delete a;}

#include class A{public: A() { printf(“construct A”); } virtual ~A() { printf(“destruct A”); }}; class B : public A{public: B() { printf(“construct B”); } ~B() { printf(“destruct B”); }}; int main(){ B *b = new B; A *a = b; delete a;}

Теперь все отлично:

construct Aconstruct Bdestruct Bdestruct A

construct Aconstruct Bdestruct Bdestruct A

В каком порядке инициализируются члены класса?

Члены класса создаются в порядке их объявления в классе. Уничтожаются они в обратном порядке. Давайте проверим:

#include  class Printer{public: Printer( const char *n ) : n_(n) { printf(“+%s “, n_); }  ~Printer() { printf(“-%s “, n_); } private: const char *n_;};  class A : public Printer{ public: A() : Printer(“A”) { }};  class B : public Printer{public: B() : Printer(“B”) { }};  class C : public Printer{public: C() : Printer(“C”) { }};  class Test{private: A A_; B B_; C C_;};  int main(){ Test test;}

#include class Printer{public: Printer( const char *n ) : n_(n) { printf(“+%s “, n_); } ~Printer() { printf(“-%s “, n_); } private: const char *n_;}; class A : public Printer{ public: A() : Printer(“A”) { }}; class B : public Printer{public: B() : Printer(“B”) { }}; class C : public Printer{public: C() : Printer(“C”) { }}; class Test{private: A A_; B B_; C C_;}; int main(){ Test test;}

Запустим:

+A +B +C -C -B -A

Все правильно.

Порядок объявления очень важен, если один член класса во время инициализации использует данные другого члена. Кстати, компилятор gcc выдает warning (с флагом -Wall), если вы описали инициализацию членов класса в другом порядке. И это еще одна причина в пользу использования настройки компилятора «считать предупреждения ошибками» (в gcc это флаг -Werror).

Задачи на собеседованиях от Acronis и решения задач от Custis

Задачи на собеседовании c с ответами

«За что бьют сисопа? За отсутствие бэкапа!» Корни этой мудрости потерялись в веках, а само слово «сисоп» уже подзабылось, но за отсутствие бэкапа по-прежнему кого-то бьют.

Слабые тела админов и простых пользователей защищает не так уж много производителей ПО, и из них, пожалуй, лидирующим можно назвать Acronis — трудно найти в нашей стране пользователя, данные которого ни разу не были бы спасены программами Acronis от грандиозного факапа. Про админов и говорить нечего — решения этой компании всегда занимали достойное место на загрузочных дисках для оказания первой помощи. А как быть программистам, которые хотели бы в нее трудоустроиться? Когда-то я сам шарил по сайтам с вакансиями и, как сейчас помню, был вдохновлен зарплатой, которую в Acronis обещали программистам на приплюснутом си.

Сегодня мы поговорим с Евгением Панищевым, руководителем QA Cloud направления международной компании Acronis. Его отдел занимается тестированием всех облачных решений Acronis: от Acronis Backup Cloud до Acronis Disaster Recovery. Задача лично Евгения — следить за тем, чтобы специалисты отдела выполняли свою работу еще лучше и эффективнее.

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

Свой выбор задач Евгений объясняет так: «Первый тип задач позволяет проверить логические и аналитические способности кандидата, второй — понять, как именно он мыслит.

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

Такие тесты позволяют за довольно короткое время понять, что за человек перед вами. Чем нестандартнее задачи, тем лучше понимание».

Любимое задание Евгения — тестирование калькулятора: кандидату выдают обыкновенный настольный калькулятор и предлагают проверить его работу. Эта задача не имеет точного решения, зато позволяет выявить уровень человека как тестировщика.

По тому, какие тест-кейсы он озвучивает, какие уточняющие вопросы задает, как выбирает ключевые параметры тестирования при наличии ограниченного числа тест-кейсов, можно понять, насколько человек разбирается в теме, готов ли учиться и воспринимать подсказки, умеет ли идти на компромисс и отстаивать свою точку зрения.

Если это задание кажется тебе слишком простым, попробуй ответить на вопрос: как именно должен вести себя калькулятор, если произвести на нем действие, результат которого выйдет за пределы разрешенного для экрана количества цифр? Почему ты считаешь, что он должен вести себя именно так?

«Для любого айтишника важно знание алгоритмов, оценка их сложности и умение с ними работать, — говорит Евгений. — Без приличного математического аппарата невозможно стать высококлассным специалистом: чем выше вы подниметесь в иерархии программистов, тем с более высоким уровнем абстракции вам придется иметь дело. Это практически не зависит от того направления, которое вы выберете: математика нужна везде».

Чтобы проверить, как кандидат ориентируется в высоких алгебраических сферах, Евгений использует, например, такую задачу: «Дан массив S из n действительных чисел, а также число x. Как за время O(nlogn) определить, можно ли представить х в виде суммы двух элементов из S?»

В целом, по мнению Евгения, теория алгоритмов — это область, которой часто пренебрегают в ходе обучения программированию. «Обычно ограничиваются некоторыми общими словами и примерами.

Знание сортировки „пузырьком“ или быстрой сортировки само по себе недостаточно для понимания темы. Кроме теории алгоритмов, необходима логика, а также умение ее применять — желательно всегда и везде».

Чтобы понять, умеет ли кандидат делать правильные умозаключения независимо от внешней формулировки, в Acronis используют следующую забавную задачу:

«Если лягушонок зеленый, то он веселый. Если лягушонок не веселый, то он сидит на берегу. Все лягушата либо зеленые, либо пестренькие. Если лягушонок пестренький, то он плавает в воде.

Из этого следует (нужно выбрать правильный ответ или ответы):

  • (A) все лягушата — пестренькие;
  • (B) все лягушата плавают в воде;
  • (C) все лягушата — веселые;
  • (D) все лягушата — не веселые;
  • (E) все веселые лягушата — зеленые».

«Задача выглядит детской и несерьезной, что зачастую сбивает многих кандидатов с толку: они не могут абстрагироваться от формулировки и работать с утверждениями так, будто это обычные логические последовательности.

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

Но об этом я кандидатам не говорю; особенно тем, кто не смог ее решить» (задачка очень популярная, и, кстати, она была в одном из выпусков нашей рубрики. — Прим. ред.).

Развитое логическое мышление иногда ценится даже выше, чем умение писать код. «На мой взгляд, логика нужна любому человеку, а IT-специалисту — тем более.

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

Программист, который ею не владеет, — это потенциальная угроза будущему продукту».

Еще одна классическая задача на логику от Acronis:

Предположим, что фраза «Завтра будет лучше, чем вчера» верна каждый день. Какое из утверждений может тогда быть неверным?

  • (A) Послезавтра будет лучше, чем сегодня.
  • (B) Сегодня будет лучше, чем позавчера.
  • (C) Послезавтра будет лучше, чем позавчера.
  • (D) Завтра будет лучше, чем позавчера.
  • (E) В 2006 году 1 апреля будет лучше, чем позавчера.

Ну и конечно, для IT-специалиста важно умение писать код и разбираться в том, что написали другие. По мнению Евгения, то и другое одинаково необходимо. «Если человек умеет писать код, но совершенно не способен понять код коллеги, то он бесполезен, — точно так же, как тот, кто прекрасно читает чужой код, но не может написать ни строчки своего».

Чтобы понять, насколько свободно человек владеет кодом, в Acronis используют задачи наподобие этих:

Объясните, что делает этот код:

((n & (n – 1) ) == 0)

Найдите ошибку в следующем коде:

unsigned int i; for (i = 100; i >= 0; –i) printf(“%d”, i);

Дан текстовый файл размером 32 Гбайт. На тестовой машине установлены Windows и питон. Нужно найти последнее вхождение слова ERROR и вывести десять строчек до и десять после. Как изменится решение, если исходный файл разбит на куски размером 2 Гбайт?

Наконец, есть еще один неочевидный параметр, по которому обычно оценивают кандидата. «Его называют по-разному, но мне больше нравится термин „толковость“. Это некая смесь „соображалки“, умения находить нестандартный подход и вообще работать с новыми и необычными задачами.

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

Решения может не быть: это в данном случае не главное».

В Москве есть служба промышленных альпинистов, которые приводят в порядок внешнюю часть зданий и моют окна с наружной стороны. Оцените, сколько таких альпинистов работает в Москве.

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

Но разумеется, есть и задачи с конкретным решением. Две из них Евгений предлагает вниманию читателей «Хакера».

Те, кто первыми пришлют правильные ответы (обязательно с обоснованием), получат в качестве приза от компании Acronis ключи от кварти… нет, стоп, не то письмо.

Победитель получит ключ для Acronis True Image 2015 — уникального ПО для резервного копирования в безлимитное облако на один год.

Куда слать правильные ответы?

Правильные ответы принимает Диана Круглова, Diana.Kruglova@acronis.com.Спеши выиграть ключ Acronis True Image 2015 – уникальный софт для резервного копирования своего PC или Mac в безлимитное облако на один год!

Представьте, что у вас есть обыкновенные часы. Они идут точно, без сбоев. В этих часах меняют местами минутную и часовую стрелки. Сколько раз в сутки такие часы будут показывать правильное время?

Нужно написать на листе бумаги число 10 000 и обвести его в круг, не отрывая ручку от этого листа бумаги; при этом цифры не должны соединяться друг с другом.

Разработчик баз данных в свой первый рабочий день в компании Custis обнаружил, что в его проекте используется всего одна табличка с данными по отгруженным товарам (Т).

В ней собираются данные по дате отгрузки (d), идентификационному номеру клиента (c) и количеству отгруженного товара (s).

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

Почувствовав облегчение от того, что не придется возиться со страшными запросами, разработчик пошел на кухню выпить кофе и перекусить фруктами.

После возвращения он с легким сердцем схватил первый же инцидент со Scrum-доски и прочитал следующее: «Нужен отчет по ежедневным отгрузкам товара по выбранному клиенту».

Посоветовавшись с товарищами, он выяснил, что отчеты принято оформлять в виде view (представления), то есть для решения проблемы нужно сделать такой view, чтобы запрос

select * from V where c = ?

возвращал отчет по указанному клиенту, причем в результате будут отражены все дни текущего года. Аналитик проекта сказал, что пользователи не любят пустых граф в отчетах, так что все отсутствующие отгрузки придется формировать как нулевые.

Как вы думаете, какой view в результате получился у нашего разработчика?

create view V as select p.d, T.c, nvl(sum(T.s),0) s from ( select trunc(sysdate, 'Y')+level-1 d from dual connect by trunc(sysdate, 'Y')+level-1 new { Product = p, Rests = atlasClient.GetRests(p.Id) }); var fewProducts = allProducts.Where(i => i.Rests > 0 && i.Rests < 10).Select(i => i.Product); var someProducts = allProducts.Where(i => i.Rests >= 10 && i.Rests < 100).Select(i => i.Product); var manyProducts = allProducts.Where(i => i.Rests >= 100).Select(i => i.Product); PrintFewProducts(fewProducts); PrintSomeProducts(someProducts); PrintManyProducts(manyProducts);метод atlasClient.GetRests занимает около 98% общего времени построения отчета.

Предложите вариант оптимизации построения отчета. Почему ваш вариант работает быстрее? Сколько времени занимает построение отчета после вашей оптимизации?

  • Используя ToArray() или аналоги, вычислить последовательность allProducts до ее использования при получении fewProducts, someProducts, manyProducts.
  • AllProducts является отложенным Linq-запросом, и его использование в трех выражениях приводит к многократному вычислению элементов последовательности. Вычислив последовательность один раз, мы сэкономим два «дорогих» вызова atlasClient.GetRests на каждый элемент последовательности, но нам потребуется дополнительный объем памяти для хранения результата. Из-за этого при больших объемах данных такое решение «в лоб» не всегда может быть применимо.
  • Такой вариант построения отчета будет занимать около двадцати минут.

Разработчик C# решил попробовать себя на поприще Java и перешел в Java-проект. Одно из первых заданий, которое он получил, — сделать таблицу с информацией о проданных товарах.

В постановке задачи было написано, что нужны следующие столбцы: имя клиента, код клиента, название товара и стоимость товара.

Посмотрев на реализацию такого рода таблиц в проекте, он понял, что при настройке таблицы придется написать что-то вроде

table.add( “customer.name” ); table.add( “customer.code” ); table.add( “subject.name” ); table.add( “summ” );

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

table.add( customer.name );

Или хотя бы

table.add( {} -> customer.name );

А тут такое… Код получается небезопасный, IDE никак не подсказывает, что писать, и вообще… Решив не сдаваться и привнести свет истины в захолустное царство Java, он объяснил проблемы такой настройки таблиц другим Java-разработчикам.

Ему отвечали, что проект ведется на Java 7, лямбд нет, а с анонимными классами для каждого поля настройка будет выглядеть жутко, поэтому «пишем, как можем».

Однако, найдя единомышленников в стане Java, он смог реализовать движок, который позволял настраивать столбцы вот так:
Payment root = root( Payment.class ); table.add($( root.getCustomer().getName() )); …

Причем интерфейс настройки таблиц менять не пришлось, то есть на вход table.add приходит все та же строка customer.name. Не пришлось менять и модельные сущности («покупатель», «товар», «покупка» и другие), и даже не понадобилось никаких автогенерированных классов. Этот инструмент начали использовать везде, где нужно было сослаться на цепочку свойств.

Как бы вы реализовали такой фреймворк? Важен только принцип, код писать не нужно.

  • root — статический метод, на лету создающий особый прокси-объект вокруг модельной сущности. Все get-методы в этом объекте записывают свои вызовы в глобальную переменную (например, ThreadLocal);
  • $ — статический метод, который из данной глобальной переменной получает полный путь к полю в виде строки.

IT-компании, шлите нам свои задачки!

Миссия этой мини-рубрики — образовательная, поэтому мы бесплатно публикуем качественные задачки, которые различные компании предлагают соискателям. Вы шлете задачки на lozovsky@glc.ru — мы их публикуем.

Никаких актов, договоров, экспертиз и отчетностей.

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

10 задач с собеседований в крупные компании

Задачи на собеседовании c с ответами

Известные корпорации — Google, Intel или Apple — славятся тем, что на собеседовании задают соискателям каверзные задачки. Сайт AIN.UA собрал 10 интересных примеров таких задач. Некоторые из них предложили сами компании, а некоторые выложили пользователи, уже проходившие собеседования. Для их решения требуются знание математики на школьном уровне или просто смекалка.

AdMe.ru предлагает проверить, как бы вы справились с таким собеседованием.

Что спрашивают в Apple

© itechify  

Задача на логику. Шелдон Купер (тот самый гениальный физик из популярного сериала) дошел в игровом квесте в погоне за сокровищами до последнего рубежа. Перед ним — две двери, одна ведет к сокровищу, вторая — к смертельно опасному лабиринту.

У каждой двери стоит стражник, каждый из них знает, какая дверь ведет к сокровищу. Один из стражников никогда не врет, другой — врет всегда. Шелдон не знает, кто из них врун, а кто нет.

Прежде чем выбрать дверь, задать можно только один вопрос и только одному стражнику.

Вопрос: Что спросить Шелдону у стражника, чтобы попасть к сокровищу?

Можно спросить любого, при этом задать вопрос так: «Какая дверь, по мнению другого стражника, правильная?». Если он спросит у правдивого, то получит данные о том, какая дверь ведет к лабиринту, ведь врущий стражник всегда врет. Если же он спросит у врущего стражника, опять же, узнает, какая дверь ведет к лабиринту, ведь тот соврет о двери, на которую укажет правдивый стражник.

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

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

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

Вопрос: Что нужно отвечать, чтобы выжило как можно больше людей?

Первый отвечающий считает количество зеленых шляп перед собой: если это нечетное число, он называет «зеленый», если четное — «розовый».

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

Таким образом гарантированно выживают 9 из 10, а у первого отвечавшего шанс 1 к 1.

Что спрашивают в Adobe

© adobe  

У вас 50 мотоциклов с заполненным топливом баком, которого хватает на 100 км езды.

Вопрос: Используя эти 50 мотоциклов, как далеко вы сможете заехать (учитывая, что изначально они находятся в условно одной точке пространства)?

Самый простой ответ: завести их все одновременно и проехать 100 км. Но есть и другое решение. Сначала переместите все мотоциклы на 50 км. Затем перелейте топливо из половины мотоциклов в другую половину.

У вас таким образом — 25 мотоциклов с полным баком. Проедьте еще 50 км и повторите процедуру.

Так можно забраться на 350 км (не учитывая того топлива, которое останется от «лишнего» мотоцикла при разделе 25 надвое).

Что спрашивают в Microsoft

© naked-science  

У вас бесконечный запас воды и два ведра — на 5 литров и 3 литра.

Вопрос: Как вы отмерите 4 литра?

Наполните водой пятилитровое ведро и вылейте часть воды в трехлитровое. У вас сейчас 3 литра в маленьком ведре и 2 — в большом. Опустошите маленькое ведро и перелейте туда оставшиеся 2 литра из большого. Снова наполните большое ведро и перелейте из него воду в малое. Там уже есть 2 литра воды, так что долить придется литр, а в большом останется 4 литра.

У вас два отрезка веревки. Каждый таков, что если поджечь его с одного конца, он будет гореть ровно 60 минут.

Вопрос: Имея только коробку спичек, как отмерить с помощью двух отрезков такой веревки 45 минут (рвать веревки нельзя)?

Один из отрезков поджигается с двух концов, одновременно с этим поджигается второй отрезок, но с одного конца. Когда первый отрезок догорит полностью, пройдет 30 минут, от первого также останется 30-минутный отрезок. Поджигая его с двух концов, получим 15 минут.

Что спрашивают в Google

© terra  

У вас имеется 8 шариков одинакового вида и размера.

Вопрос: Как найти более тяжелый шарик, используя весы и всего два взвешивания?

Отберите 6 шариков, разделите их на группы по 3 шарика и положите на весы. Группа с более тяжелым шариком перетянет чашу. Выберите любые 2 шарика из этой тройки и взвесьте. Если тяжелый шарик среди них, вы это узнаете; если они весят одинаково — тяжелый тот, что остался. Если же более тяжелого шарика в группах по 3 шарика не оказалось, он — среди 2 оставшихся.

Что спрашивают в Qualcomm

© miui  

Эту задачку описал пользователь, которого собеседовали на позицию senior systems engineer. Он отметил в описании задачи, что у него был свой ответ, по поводу которого он долго спорил с человеком, проводившим собеседование.

Предположим, у нас происходит 10 пакетных передач данных по беспроводной сети. Канал не очень качественный, так что есть вероятность 1/10, что пакет данных не будет передан. Трансмиттер всегда знает, удачно или неудачно был передан пакет данных. Когда передача неудачная, трансмиттер будет передавать пакет до тех пор, пока не преуспеет.

Вопрос: Какую пропускную способность канала получаем?

По версии пользователя, ответ должен был быть: 9 пакетов в секунду. Но человек, проводивший интервью, с ним не согласился, правда, ответа не назвал, но повторял, что «из-за ретрансмиссии пропускная способность должна быть уменьшена больше, чем на 1/10».

Что спрашивают в «Яндексе»

© naked-science  

Эту задачу предлагали решить для вступления в Школу анализа данных в феврале 2014 года.

Игра состоит из одинаковых и независимых конов, в каждом из которых выигрыш происходит с вероятностью p. Когда игрок выигрывает, он получает 1 доллар, а когда проигрывает — платит 1 доллар. Как только его капитал достигает величины N долларов, он объявляется победителем и удаляется из казино.

Вопрос: Найдите вероятность того, что игрок рано или поздно проиграет все деньги, в зависимости от его стартового капитала K.

Эту задачу предлагали решить разработчикам на собеседовании, и она больше связана непосредственно с программированием, чем предыдущие примеры.

Имеется морфологический словарь объемом примерно 100000 входов, в котором глаголы совершенного и несовершенного вида помещены в отдельные статьи (то есть «делать» и «сделать» считаются разными словарными входами). Вам требуется найти в словаре такие видовые пары и «склеить» статьи в одну.

Вопрос: Опишите общий сценарий решения такой задачи и примерный алгоритм поиска видовых пар.

Ответов на задачи «Яндекса» у нас, к сожалению, нет.

И бонус

Эту задачу приписывают Альберту Эйнштейну — якобы с ее помощью он подбирал себе ассистентов. Другая почти легендарная история приписывает авторство Льюису Кэрроллу. Отметим, что она очень просто решается на бумаге, но, если хотите хардкора — попробуйте решить в уме.

На улице стоят пять домов.Англичанин живет в красном доме.У испанца есть собака.В зеленом доме пьют кофе.Украинец пьет чай.Зеленый дом стоит сразу справа от белого дома.Тот, кто курит Old Gold, разводит улиток.В желтом доме курят Kool.В центральном доме пьют молоко.Норвежец живет в первом доме.Сосед того, кто курит Chesterfield, держит лису.

https://www.youtube.com/watch?v=NU5FJQLSPF4

В доме по соседству с тем, в котором держат лошадь, курят Kool.Тот, кто курит Lucky Strike, пьет апельсиновый сок.Японец курит Parliament.Норвежец живет рядом с синим домом.

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

Вопрос: Кто пьет воду? Кто держит зебру?

Японец держит зебру, норвежец пьет воду.

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.