Инновации и инсайты в мире Java из первых уст. Новая конференция Java Fest — 21 марта >>
×Закрыть

Что должен знать Middle PHP Developer?

Собственно сабж. Хотелось бы узнать Ваше мнение.

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

Спасибо!

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Если интересно, есть статистика с сайта hh.ru, какие сейчас требуются знания от PHP разработчика: atoumus.github.io/PHP/2016-php-trends.html

ну для начала выучить php. Потому что подавлящее большинство Senioir-ов его не знает

если по вашему его даже Senior-ы не знают, то зачем тогда это для Middle?

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

В «правильных» с моей точки зрения конторах задают два основных вопроса:
— есть такая задача, опиши как бы ты ее решал, и почему — по ходу дела идет обмен мнениями;
— есть такой кусок кода, опиши что в нем не так, почему, и как это исправить — это обычно идет в привязке к фреймворку, который требуется для позиции;

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

есть прикольное короткое виде на тему что должен знать
www.youtube.com/watch?v=x1TsOHyJPpw

Зачетный ролик ... Во многом отражает страх работодателя взять немножко не того человека :) Вдруг SQL не той версии знает :)

Все как у всех, SOLID, менеджер пакетов, популярные фреймверки, популярные библиотеки для решения стандартных задач, базы данных, linux. Пхп в этом вопросе ничем практически не отличается от тех же ruby или java. Ну только если вы не хотите стать wordpressmanом, там знаний надо минимум.

Детали зависят уже от конкретного работодателя. А уровень необходимости знаний от сложности их проектов. Понятия Junior/Middle/Senior довольно абстрактны, госта или rfc на них нет.

Знать должен тоже что и senior, а в каких-то вопросах может не обладать опытом.

Что означает аббревиатура PHP :D

не совсем корректный вопрос, вы ща получите набор пересекающихся списков, в зависимости от личного опыта, текущего проекта и собственных представлений об обязанностях «middle developer».

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

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

в одном месте — надо сразу колупать Redis и самописный фреймворк(потому опыт работы с «именитимы» поможет, но не будет решающим), в другом — происходит миграция с MySQL на PostgreSQL и очень ждут опыта именно с Постгресом, где-то Yii + Doctrine и отсутствие строгих требований по производительности.

Можно выбрать какой-то из известных/распространненых MVC-фреймворков, одну реляционную и одну нереляционную БД и, как мне кажется, покрыть ожидания по большинству вакансий.

Зависит от опыта работы и требований к вакансии. Я раньше делал экспресс-интервью по 6 темам, по 2-3 вопроса, в зависимости от требований:
— language ecosystem
— database storages & middleware (MQ, search engines, ha.resources)
— tests & code quality
— API (REST & 3-rd parties)
— engineering practices (version control, CI, P-programming)
— environment (provision & deployment)
В вашем случае, если симфони фреймворк в профиле актуален, были бы вопросы из списка:
— events, какие есть, на какой лучше подписаться для разных ситуаций
— service container, что такое public / lazy / synchronized, что лучше — setter injection или constructor injection
— callbacks, варианты применения
— SPL
— разобрать фреймворк и ORM на паттерны
Если из 6 тем по 3 провал — это сразу нет. Вопросы для мидлов и синьоров +/- одинаковы, просто от синьоров я жду более развернутых и глубоких ответов. Хорошие мидлы как правило знакомы с темами, но могут не знать нюансы.

— language ecosystem
Не зовсім зрозуміло що очікується почути по цьому пункту. Кандидат на вакансію повинен знати що потрібно, щоб певна мова працювала? Типу PHP може працювати як CLI або як модуль веб-сервера... а JavaScript може працювати в браузері, на nodejs... Так?

Я ниже раскрыл примеры вопросов. Это все, что касается языка, например, composer, PSR, асинхронность (libevent в случае php, например), а не просто синтаксис и магические методы.

асинхронность (libevent в случае php, например)

Очень специфичная тема как по мне. Ни разу не спрашивали об этом на собеседованиях, топик не включен в список тем для ZCE и сдается мне, что на реальных проектах мало используется.

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

Могут спросить что угодно, все зависит от человека который проводит собеседование и требование по вакансии.
Основное: ООП, Абстрактные классы, интерфейсы и для чего они нужны. Как работает http, могут попросить написать несколько SQL запросов, какие есть виды join’ов в mysql. Какие способы кеширование веб приложения знаешь? Паттерны, Service Locator, DI, и т.д. Если вакансия чисто на backend, готовся отвечать на углубленные вопросы по mysql/postgres/nosql etc(Aka Как работают индексы, какие виды транзакций бывают, отличие движков MYSQL и т.п.) Что такое REST? Как выбрать 10 радномных записей из таблицы mysql в которой 100/200/100000 млн записей без ORDER BY RAND() И так далее...

отличие движков MYSQL
это очень бессмысленный вопрос в современном мире
Как выбрать 10 радномных записей из таблицы mysql в которой 100/200/100000 млн записей без ORDER BY RAND()
всегда было интересно, что показывает этот вопрос?
Какие способы кеширование веб приложения знаешь
Допустим, соискатель знаком с Varnish, а вы кладете html в мемкеш и о варнише не слышали даже близко. Что произойдет дальше?
это очень бессмысленный вопрос в современном мире
Аргументируйте, пожалуйста.

Если я правильно понял, это классический вопрос «чем отличается MyISAM от InnoDB», и прочие хитрые вопросы, типа где быстрее запись, а где вставка, и ожидаемый ответ про триггеры, ивенты, хранимки, которые если даже и активно используются на проекте, то сыграют отличную антирекламу. В реальности про MyISAM все уже забыли, и вспоминать лишний раз не стоит.
Если же этот вопрос про особенности XtraDB или про NDBCLUSTER или даже Aria (из форков mysql), то мидл скорее всего побелеет и попросит воды.
А остальные mysql движки типа archive, csv, blackhole или heap используются очень редко, и осваиваются за день.

Согласен в целом. А вот про

MyISAM все уже забыли
 — забыл кто? Может в eCommerce и забыли, т.к. там без транзакций никуда, а вот для остальных проектов-то MyISAM довольно быстр и надежен (по-крайней мере видел MyISAM базы на довольно нагруженных проектах, которые ощущали себя довольно сухо и комфортно годами).

Надежен? Просто он еще не упал. MyISAM рано или поздно отдаст концы навечно, можете в гугле найти сотни примеров.
А насчет нагруженных проектов — даже не смешно. MyISAM не работает в кластере, там нет внешних ключей, а блокировки — просто вкусняшка.
Откровенно говоря, лучше бы все про весь MySQL забыли. Это такое же УГ, как и php4.

Даже если упал — легко репейрится. Кроме того бекапы никто не отменял. MyISAM могут выбирать для скорости при ограниченных ресурсах.

Как на меня — большинство просто повторяет устаревшую догму о том, что мол MyISAM ненадежен, а сами прикасались к нему серьезно лет 5 назад, поэтому и впечатления остались на том же уровне.

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

Что вы предлагаете взамен MySQL? PosgtreSQL?

Как на меня — большинство просто повторяет устаревшую догму о том, что мол MyISAM ненадежен, а сами прикасались к нему серьезно лет 5 назад, поэтому и впечатления остались на том же уровне.
Аналогичные стереотипы и о том, что InnoDB — медленное говно. Да там даже Full text search индекс добавили, и минусов в сравнении с myisam не осталось вообще.
К слову — нагруженные проекты могут существовать и на одном дедике, без кластера. Проекты разные бывают. Зависит от много чего.
Конечно же, но вопрос блокировки встает хотя бы при сотне одновременных подключений.
PosgtreSQL?
Он самый. Чудесная СУБД.

innoDB использовать и все
за использование MyISAM нужно отрывать тестикулы не смотря на любые оговорки
эта штука ГАРАНТИРОВАНО рано или позно создает пробелмы

Что вы предлагаете взамен MySQL? PosgtreSQL?
насколько я знаю — сейчас PostgreSQL считается наиболее прогрессивной (продвинутой) релятивной СУБД, хотя для большинства проектов думаю MySQL будет достаточно.
Поэтому думаю, что хорошему мидлу очень желательно знать постгресс, а не только мускул)
Поэтому думаю, что хорошему мидлу очень желательно знать постгресс, а не только мускул)
Это бесспорно.
Надежен? Просто он еще не упал. MyISAM
юзался для обработки нескольких петабайт, норм, нагрузка была большая — все работало, не падало

Я почти засмеялся

смейтесь на здоровье. а факт есть фактом

Факт — это лимит размера файла в операционной системе. Для ext3 он составляет 4TB, а в MyISAM 1 таблица — 1 файл. Даже если проигнорировать максимальный размер файловой системы (32 TB, вроде как), лимит по количеству строк на таблицу и тот факт, что MyISAM не кластеризируется, то вот слова

норм, нагрузка была большая — все работало, не падало
это такой же факт, как и новостная речь Киселева. MyISAM буксует на размерах, значительно меньших чем 1 ТБ на таблицу, на самых несчастных селектах. Ссылку на ваш проект даже просить не буду, так как ее нет.

где я говорил что 1 таблица? более того, с чего вы взяли что был один сервер?

откуда мысли что:

а в MyISAM 1 таблица — 1 файл
почитайте dev.mysql.com/...artitioning-overview.html

Вы кинули какую-то херню.
dev.mysql.com/...yisam-storage-engine.html
Читаем

«Each MyISAM table is stored on disk in three files. The files have names that begin with the table name and have an extension to indicate the file type. An .frm file stores the table format. The data file has an .MYD (MYData) extension. The index file has an .MYI (MYIndex) extension.»
Если отбросить файлы со структурой и индексами, то получим 1 файл на таблицу.
Далее, как база была кластеризирована между этими серверами, даже если в ваших фантазиях их было несколько?
Предположим, «несколько петабайт» — это 4PB — ваш MyISAM не умирал при таком количестве таблиц и данных (это предположительно 1024 таблицы, если данные лежат равномерно по 4TB)?
Хватит тут позориться.

омг... я понял.

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

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

в-третьих, судя по всему я изначально не точно выразил свою мысль

в-четвертых, в виду первых 2 пунктов не вижу смысла с вами обсуждать

П.С. таблиц было более 300 000 суммарно на всех узлах
П.П.С. таки проблемы кое-какие были — кол-во открытых файлов, точнее ограничение ОС на них

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

вы мне напомнили одну истории. чувак на собеседовании. в резюме написано биг дата.

ему задают вопрос, какую БД он выбрал, или чем бы он руководствовался при выборе БД если надо обрабатывать БД размером 50 ТБ нагрузка предполагается в основном на чтение.

ответ: такую БД не возможно найти, т.к. такой объем данных не поместится на жестком диске.

а блокировки — просто вкусняшка.
Блокировка всей таблицы вместо одной строки это вкусняшка???
Или это был сарказм?

Здесь нечего аргументировать.

Есть конкретная версия с которой идет разработка, вот интервьюер должен и сказать что-то типа:
«Мы работаем с такой версией мускуля, такой формат файлов БД. У тебя есть опыт работы именно с таким? А есть, гуд вот вопрос по теме.»

Откровенно не понимаю зачем помнить кучу шлака о старых версиях...

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

А вы не спрашиваете собеседника, зачем эти вопросы все?

Как выбрать 10 радномных записей из таблицы mysql в которой 100/200/100000 млн записей без ORDER BY RAND()

всегда было интересно, что показывает этот вопрос?

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

А виды join’ов в mysql отличаются от других?

в «sql», вам стало от этого легче?

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

www.phptherightway.com
Якщо бачиш слово, знання про яке обмежується «ну, це штука для того, шоб...», береш і читаєш, щоб було про що поговорити на цю тему.

Також рекомендую бложик про highload для чайників і не тільки:
ruhighload.com

Подписаться на комментарии