Skip to main content

Программирование — обучение и тренировка

Предыстория

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

Мне в этом плане очень повезло, в нашем лицее было достаточно машин для проведения уроков информатики даже в младших классах. В то время было невозможно сразу обучать детей реальному языку программирования (даже простому, типа BASIC). Сейчас это звучит странно, но в 96 году около 5-10% учащихся имели дома компьютер. Для развития наших алгоритмических навыков нам предложили особенную игру – Исполнитель Муравей. Это был простейший интерпретатор с элементарными задачами для детей. Работал он из под DOS.

Выглядело это примерно так:
Исполнитель Муравей

Читать дальше

Наши вопросы по программированию на C/C++

Вопросы C/C++

Следующий блок вопросов это самые важные вопросы для кандидата на позицию C/C++ программиста. Вопросы поделены на две категории. Надеюсь в современном мире все в курсе, что такое C++14. Но на всякий случай, оставлю тут ссылку на wiki. Знание совсем новых плюсов не обязательно, но крайне рекомендуется. На мой взгляд если человек работает в какой-то области и не интересуется, что в ней происходит последние лет 5, то ничего хорошего в этом нет.

В целом мы стараемся не мучать людей именно по C++. Считаем, что если у человека есть техническое мышление и он знает базовые вещи, то тонкостям мы его научим. Так же большим плюсом является понимаение принципов ООП. Именно понимание, а не заучивание их наизусть.

Читать дальше

Наши вопросы по сетям

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

Вопросы по сетям

  1. Модель OSI с примерами протоколов, устройств и программ, работающих на каждом уровне (если есть)?
  2. Маршрутизация внутри сети. Как работает ARP? Зачем нужен MAC и IP?
  3. Маршрутизация между сетями. Автономные системы, OSPF и RIP, BGP?
  4. Разница между TCP и UDP? Что такое соединение и как оно создается?
  5. Как работает DHCP? Зачем он нужен?
  6. Как работает DNS? Зачем он нужен?
  7. Что такое NAT? Как он работает? NAT traversal?
  8. Зачем придумали IPv6? Какие проблемы и как именно он решает?
  9. Что такое VPN и как он работает? IPSec, PPTP, PPPoE и L2TP?
  10. Что такое SSL(TLS)?

Системные вещи. Ответы Часть 3.

Виртуальная память

Что такое виртуальная память?

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

Применение механизма виртуальной памяти позволяет:

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

Читать дальше

Системные вещи. Ответы Часть 2.

Режим ядра и режим пользователя

Продолжаю публиковать ответы на вопросы на наших собеседованиях. Вопрос про режимы ядра и многие последующие вопросы привязаны к той ОС, в которой вы работаете. В нашей компании активно разрабатываются проекты в Windows и Linux. Однако, так как большинство кандидатов лучше знают Windows, то и ответы будут публиковаться для Windows, если это не оговорено дополнительно. Кстати, по всем системным вещам Windows стоит обращаться к замечательной книге М. Руссинович, Д. Соломон — Внутреннее устройство Microsoft Windows. В ней даны подробные ответы на все системные вопросы нашего собеседования. Если же вам больше интересно как все работает внутри Linux, то я рекомендую обратиться к книге Таненбаум Э. — Современные операционные системы.

Что такое режим ядра и режим пользователя?

Для предотвращения доступа приложений к критически важным данным операционной системы и устранения риска их модификации Windows использует два режима доступа к процессору: пользовательский (user mode) и ядра (kernel mode). Код приложений работает в пользовательском режиме, тогда как код операционной системы (например, системные сервисы и драйверы устройств) — в режиме ядра. B режиме ядра предоставляется доступ ко всей системной памяти и разрешается выполнять любые машинные команды процессора. Предоставляя операционной системе более высокий уровень привилегий, чем прикладным программам, процессор позволяет разработчикам операционных систем реализовать такие архитектуры, которые не дают возможности сбойным приложениям нарушать стабильность работы всей системы.

Читать дальше

Системные вещи. Ответы Часть 1.

Системные вещи

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

Стоит отметить, что у нас никто не ждет от кандидатов заученные наизусть статьи и мануалы. Мы хотим узнать, понимает ли человек вопрос и может ли пояснить, что это такое. С первых же вопросов отмечается поведение кандидата. Если человек не знает точного ответа, но пытается думать и рассуждать логически, то это идет ему в плюс. Так же в плюс идет искренний интерес к правильному ответу на вопрос, если кандидат не уверен в своих знаниях или никогда не сталкивался с каким-то понятием или технологией.

Я напишу некоторый минимум, который мы хотели бы услышать от кандидата по каждому вопросу.

Читать дальше