Тесты на знание Python, PHP, Golang и DevOps: разбор викторины AvitoQuiz на Highload

    Конференция Highload++ 2017 отгремела, и это было круто — как всегда. Мы пересматриваем доклады, вовсю пользуемся опытом, которым с нами поделились коллеги, и с удовольствием вспоминаем разные активности, которые проводились вне зоны докладов.


    На нашем стенде, например, можно было пройти тест на знание одного из языков программирования (Python, Go, PHP) или тест для DevOps и получить красочную тематическую футболку. Сегодня хотим предложить вам ещё раз окунуться в атмосферу конференции и разобрать ответы на самые Highload-задачи из нашего теста. А может, вы сможете решить их, не заглядывая под спойлер?


    Enjoy!



    Топ-3 вопросов по тематикам


    Python


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


    cls.get_bases()

    cls.__mro__ 

    cls.__bro__

    Это невозможно

    Верный ответ
    cls.__mro__ 


    2. Как импортировать объект obj из модуля my_module, если он не указан в my_module.__all__ последовательности?


    Это невозможно

    from my_module import *

    import my_module; obj = my_module.obj

    from my_module import obj

    Верный ответ
    from my_module import obj


    3. Python 2, что вернёт z[x == y]?


    x = x[0] = [0]
    y = y[0] = [1]
    z = {(2-1, ): 'equal', (1-1, ): 'not equal'}

    equal

    not equal

    RuntimeError

    KeyError

    Верный ответ
    RuntimeError


    Golang


    1. Выберите верное утверждение для программы, запущенной с GOMAXPROCS=5:


    1. Программа не может создать более пяти потоков ОС.
    2. Количество горутин на поток не может превышать пяти.
    3. Программа не может одновременно выполняться более чем в пяти потоках ОС.
    4. Программа резервирует пять потоков ОС для эксклюзивного выполнения.

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

    2. Как в Go получить прямой доступ к ячейке памяти?


    1. Указатели в Go всегда разыменовываются при использовании, прямой доступ к памяти невозможен.
    2. Воспользоваться пакетом unsafe.
    3. Использовать встроенную функцию readMemory().
    4. Доступ возможен только в специальной системной горутине.

    Верный ответ
    Воспользоваться пакетом unsafe.

    3. Какая команда пригодится для поиска узких мест в программе?


    go tool pprof

    go vet

    go tool objdump

    go profile

    Верный ответ
    go tool pprof



    PHP


    1. Какой алгоритм используется в PHP для сборки мусора?


    1. Алгоритм Бейкера.
    2. Naive mark-and-sweep.
    3. Balanced binary trees.
    4. Reference counting, tri-color marking.

    Верный ответ
    Reference counting, tri-color marking.

    2. Что исчезло из PHP в седьмой версии?


    1. Внутренние указатели массива.
    2. Поддержка переменных в переменных внутри global.
    3. Исключения класса ParseError.
    4. Функция list().

    Верный ответ
    Поддержка переменных в переменных внутри global.

    3. Кто спасёт, если нужно записать HTTP-заголовок после первого вызова echo в коде?


    1. Output Buffering.
    2. ACL.
    3. SPL.
    4. Opcode Cache.

    Верный ответ
    Output Buffering.

    DevOps


    1. У директории права доступа rwxrwS--t, владелец alice, группа users. ACL не используются. Выберите верное утверждение.


    1. Если пользователь root создаст в этой директории файл, то у этого файла владелец и группа будет root.
    2. Пользователь bob, не входящий в группу users, не может просмотреть содержимое файлов в этой директории, но может просмотреть содержимое самой директории.
    3. Пользователь alice может удалить из этой директории файл, принадлежащий пользователю root.
    4. Пользователь charlie, входящий в группу users, может создать в этой директории новый файл, но не может удалить из неё файл, созданный пользователем alice.

    Верный вариант
    Пользователь alice может удалить из этой директории файл, принадлежащий пользователю root.

    2. Для чего используются физические адреса в протоколе Ethernet?


    1. Для того, чтобы обмениваться данными с устройствами в других сетях.
    2. Для того, чтобы различать кадры (2 сетевой уровень) и пакеты (3 сетевой уровень).
    3. Для определения порядка передачи данных в домене коллизий.
    4. Для того, чтобы устройства в одной сети могли обмениваться данными.

    Верный ответ
    Для того, чтобы устройства в одной сети могли обмениваться данными.

    3. Что нужно сделать для того, чтобы nginx повторно резолвил имя backend-сервера в IP с помощью DNS?


    1. Указать DNS-сервера в директиве resolvers, вынести имя backend-сервера в переменную.
    2. Указать DNS-сервера в директиве resolvers, вынести имя backend-сервера в upstream.
    3. Вынести имя backend-сервера в upstream, добавить в upstream директиву resolve_dynamic.
    4. Указать DNS-сервера в директиве resolvers, после этого nginx автоматически будет повторно резолвить имена backend-серверов.

    Верный вариант
    Указать DNS-сервера в директиве resolvers, вынести имя backend-сервера в переменную.

    Топ участников


    Итоги были такие. Тест начали проходить 273 человека. Некоторые не закончили его (нельзя сказать, что им не дало закончить — интересный доклад, сомнение в своих силах или слабая связь). Максимальное количество баллов, которые можно было набрать по всем четырём направлениям — 60.



    Ну а вот топ-5 реальных героев. Ребята, знайте — вы круче всех.


    1. Святослав Думченко — 39 баллов
    2. Вячеслав Злодеев — 37 баллов
    3. Владимир Протасов — 24 балла
    4. Светлана Шагалина — 24 балла
    5. Илья Лебедев — 22 балла

    Вот футболки, которые получили 50 лучших по каждому направлению:



    А вам удалось решить задачи, не глядя под спойлер? Пишите в комментариях.
    И, конечно, до следующих встреч!

    Avito 205,08
    Avito — сайт объявлений №1 в России
    Поделиться публикацией
    Похожие публикации
    Комментарии 13
    • +1

      Golang, первый вопрос… Делаем cgo вызов или osThreadLock и удивляемся тому, что потоков может быть больше заданного.

      • +1
        Угадал 8 из 12. Как-то нелогично. Знал из этого дай Бог один (про Ethernet), подозревал ещё один (про заголовки после echo). Остальное просто по логике и рандомом.
        • +1
          Черт, решил, что вопросы будут довольно сложными, решил не тратить время и пробежал мимо. Теперь жалею о недополученной футболке
          • 0
            Я тоже сначала думал, что вопросы будут сложноваты. А в 3 ночи не мог уснуть и решил хотя бы в одной категории пройти тестик.
            Хотя для меня большинство вопросов в итоге решались логикой, а не знаниями.
          • +2
            Ну всё верно — питон ещё учить и учить, php откуда то с подкорки или интуитивно, уж не знаю :) голанг пропустил, а вот девопс 2 из 3… ну с правами в линуксе у меня сложности, не запоминаю, ибо редко пользуюсь
            А футболки топовые! Хотел бы верхние 2 :)
            • 0
              интересно узнать полный список вопросов, по Go в частности =)
              • +1
                Присоединяюсь, но хотелось бы по PHP, т.к. по крайней мере в его «Top» попали какие-то уж совсем элементарные, а я не считаю себя гуру этого языка.
              • 0
                Сделайте авторизацию через госуслуги, пожалуйста
                • 0
                  Python, 3-й вопрос.
                  x = x[0] = [0]

                  Как это работает? Если x уже определена как список, x = x[0] зациклит его, это-то понятно. Но здесь x ещё не существует, и при этом успешно используется в правой части!
                  • +2
                    Интересный пример) модуль dis показывает что сначала ссылка на список (DUP_TOP) присваивается переменной x (STORE_FAST), а только потом уже идет зацикливание (STORE_SUBSCR):

                    In [1]: def f():
                    ...: x = x[0] = [0]
                    ...:

                    In [2]: f.__code__.co_consts
                    Out[2]: (None, 0)

                    In [3]: f.__code__.co_varnames
                    Out[3]: ('x',)

                    In [4]: from dis import dis

                    In [5]: dis(f)
                    2 0 LOAD_CONST 1 (0)
                    2 BUILD_LIST 1
                    4 DUP_TOP
                    6 STORE_FAST 0 (x)
                    8 LOAD_FAST 0 (x)
                    10 LOAD_CONST 1 (0)
                    12 STORE_SUBSCR
                    14 LOAD_CONST 0 (None)
                    16 RETURN_VALUE

                    Работает только с мутабельными объектами)
                  • +1
                    В разделе DevOps вопросы для обычного системного администратора, имхо
                    • +1

                      Ошибся в 1 вопросе — про nginx DNS, и, можно сказать, случайно угадал про Python 2 z[x == y] (уж сильно мутная конструкция :))

                      • 0
                        Интересно было бы послушать не сами вопросы, а именно как они применяются на практике.
                        Вопрос: Чему равно x = 2 в случае если x объявлен как str().
                        x = str()
                        x = 2
                        Назначение вопроса: В этом вопросе мы хотели узнать такие то такие то вещи, для того что бы понять это, то.
                        Применяется: Для того то, для того то.

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

                        Заранее спасибо.

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

                        Самое читаемое