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

meduza 12 января в 15:23 10k

Конференция 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 лучших по каждому направлению:



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

Проголосовать:
+33
Сохранить: