Full Stack (вакансия Softo ltd.)
Теория
Если считаете, что на вопрос нет конкретного ответа, напишите просто свои мысли об архитектуре.
1. Вы работаете над проектом https://clideo.com/resize-video. Frontend находится на servA, а обработка видео происходит на servB. В процессе обработки видео на servB непрерывно пишется лог-файл, из которого можно получить конкретный % прогресса обработки видео. Как передать этот процент в браузер пользователя с минимальными задержками и нагрузкой на серверы? *
2. Вы работаете над проектом https://clideo.com/crop-video. Видео-файлы пользователей загружаются на сервер и там обрабатываются, но у многих пользователей низкий upload bandwidth, что вызывает большие задержки при загрузке файлов. “Бизнес” попросил ускорить процесс загрузки или сделать обработку видео, не загружая его на сервер. Ваши действия? Ваши предложения? Возможно ли это вообще? *
3. Два разработчика работают над одним файлом, но имеют разные понятия о красоте и стилистике кода, из-за этого один разработчик своим коммитом поправляет стиль кода “под себя”, а второй, сделав коммит поверх - поправляет стиль написания кода “под себя”. Чтобы вы предприняли, чтоб разорвать этот замкнутый круг? *
4. Вы пишете приложение на Vue.js, в котором есть два компонента, не являющиеся друг для друга родителем и потомком. Компонентам нужно обмениваться друг с другом информацией. Каждому компоненту нужно знать о состоянии и о происходящих событиях во втором компоненте. Как вы это реализуете?
5. Используете ли вы какие-то модели ветвления Git? Если да, то какие именно?
6. Объясните на пальцах: чем оперирует Git и что такое коммит в вашем понимании?
7. Разработчик сделал ветку `feature-new`, реализовал там новый функционал, влил эту ветку в `master`, удалил ветку `feature-new` и сделал `git push origin master`. После код-ревью ему поставили задачу исправить код в этой ветке и заново влить в `master`. Может ли они это сделать? Если нет, то почему? Если да, то как?
8. Для лендинг-страницы понадобилось добавить большие видео-файлы. Разработчик добавил их в git и “пушнул” в origin. Другие разработчики начали жаловаться на то, что с репозиторием стало сложно работать и папка .git стала большой. Почему? Как исправить ситуацию?
9. Какое место в MVC занимает Eloquent?
10. В каком месте MVC располагается бизнес-логика приложения?
11. Как получить доступ к DOM в Node.js? (Опционально, Бонус)
12. Взаимозаменяемы ли типы и интерфейсы в TS? (Опционально, Бонус)
13. Нужно сделать так, чтоб после сборки проекта на Laravel + Vue.js, пользователям сайта сразу отдавалась новая версия JS-файла. Как вы будете это делать?
14. Перед вами поставили задачу реализовать SSR (или частичный пререндер) на существующем проекте. Стек проекта: Laravel + Vue.js. Каким образом это можно организовать? Если бы у вас была возможность поменять стек, то выбрали бы вы что-то взамен или оставили бы всё как есть? (Опционально, Бонус)
15. У вас очень ограниченный по ресурсам (HDD, CPU) сервер и большой проект на Laravel + Vue.js. Проект не использует БД или тяжелые вычисления, но время открытия страниц большое. Вы обнаруживаете, что сервер сильно загружен по I/O. Как бы вы искали причину и исправляли ситуацию? Какие вообще оптимизации Laravel-проектов или PHP-приложений в целом вы используете на практике?
16. Как вы думаете, нужен ли разработчику Docker?
Практика
В ответах к этим вопросам вы можете дать ссылку на рабочий fiddle или написать идеи решения / сниппеты кода прямо в поле ответа.
1. К вам подошел коллега и спросил, почему в этом коде не отрабатывает watch: https://jsfiddle.net/guruphp/q5rnp1hb/. Почему? Поправьте код, чтоб watch отрабатывал. (Бонус: попробуйте сделать это не трогая код компонента)
2. Юному разработчику дали задачу написать vue-компонент, отображающий списком файлы из vuex, отсортированные по популярности (популярность задана через prop этого компонента). Он написал такой код: https://jsfiddle.net/guruphp/3o4eLb70/ . В этом коде очень много ошибок архитектурных, синтаксических и самое плохое - код не запускается вообще и props заданные по-умолчанию не работают. Исправьте код компонента, чтоб он заработал. *
3. https://jsfiddle.net/guruphp/xo8Lqwfm/ . В этом коде при нажатии на кнопку “Start Loading” на некоторое время должна появиться надпись “Loading Image…” после чего уже появится изображение. Но надписи “Loading Image” нет. Почему? Можно ли это исправить? Если да - исправьте. (Убирать Dummy load нежелательно. Представьте, что мы там очень интенсивно обрабатываем для пользователя видео :-) )
4. Необходимо сформировать SQL запрос к таблице files (schema: https://pastebin.com/j4hyDwhh), который выводит количество файлов по успешности конвертирования и наличию хорошей оценки у зарегистрированных/незарегистрированных пользователей. Формат вывода: `user_type` ('Visitor', если id_user = NULL; 'User' в противном случае), `flag_converted`, `is_best_rating` ('1' - если rating = 5; '0' в противном случае), `count` (количество записей). Результаты нужно отсортировать по `count` и `is_best_rating` в обратном порядке. И выводить только группы, где `count` больше 1.
5. Вы хотите создать новый репозиторий и добавить в него папку bootstrap. Вы выполнили следующую команду: mkdir ~/test && cd ~/test && git init && mkdir bootstrap && git add -A && git commit -m 'initial commit', но получили ошибку: “nothing to commit”. Странно, ведь мы создали в проекте папку bootstrap и проект не пустой. Почему так произошло? Можно ли исправить ситуацию?
6. https://jsfiddle.net/guruphp/pgezaLh3/ . Опишите типы `GetConfigPropertyKeyType` и `GetConfigPropertyReturnType`, и допишите функцию `getConfigProperty` так, чтобы как аргумент функция принимала один из ключей объекта `config` (и ничего больше), а на выходе выводился тип значения, соответствующего ключу в объекте `config`. (Опционально, Бонус)
Общее
1. Имя *
2. Возраст *
3. Образование *
4. Опишите кратко свой карьерный путь в IT, сделав акцент на последнем месте работы
5. Ссылки на примеры вашего кода в открытом доступе (GitHub, Bitbucket, etc.)
6. Email *
Submit
Never submit passwords through Google Forms.
This form was created inside of Softo. Report Abuse