Что должен знать Junior PHP Developer
Время идет вперед, технологии появляются, меняются и умирают. Также меняется и отношение к тому, что должен знать и уметь младший php-разработчик. В этой статье я приведу требования к тому, что будет ожидаться от кандидата на роль Junior PHP Developer на конец 2020 года в России.
Литературная база для младшего php-разработчика
У многих рекрутеров и тим-лидов есть острая неприязнь к «вайтишникам», которые прошли какие-то ускоренные курсы по PHP, посмотрели какие-то вводные уроки по CMS или фреймворкам и пошли искать работу. Ибо есть четкое понимание, что такой кандидат начнет валиться на простых теоретических вопросах, и ничего не сможет показать на практике.
Поэтому обязательно возьмите книгу по PHP на 1000 страниц (например, «PHP 7 в подлиннике») и прочтите её полностью. В этой книге вы поймете, почему был придуман PHP, как развивался PHP, как работает PHP под капотом и многое другое. Это очень хорошая база, которая сразу выделит вас среди других кандидатов.
Особенно круто, когда на какой-то вопрос вы говорите, «Я практически этого не делал, но согласно книге «PHP 7 в подлиннике», оно будет работать так».
Тоже самое касается и HTML/CSS/JS/MySQL, которые вам также нужно будет подучить.
Теоретическая база для рhp-разработчика – основные требования
Знать принцип работы php, как компилируемого языка программирования
Знать представление о базовых типах данных, структурах управления потока выполнения, приоритете операций.
Понимание концепции области видимости и пространства имен.
Уверенная работа с массивами и их методами.
Уверенная работа с обработкой исключений.
Понимание, что такое MVC/ORM.
Понимание, что такое Depedency Injection в базовом виде
Понимание, что такое Сomposer
Большую часть требуемой информации вы узнаете из книги по PHP. Все остальное достаточно быстро добирается из бесплатных роликов на YouTube.
Также нужно понимать, что иногда попадаются люди, кто начинают задавать какие-то заковыристые вопросы, которые при работе не нужны, но «опустить» кандидата на собеседовании могут. Поэтому просто гуглим «Вопросы к собеседованию по PHP» и заучиваем их.
Практическая база для младшего php-разработчика
Когда мы собеседуем кандидата на роль младшего PHP-разработчика, мы ожидаем, что кандидат будет уметь:
Устанавливать, обновлять PHP и его экстеншены на рабочую станцию.
Устанавливать и работать в PhpStorm (главная среда разработки для php-разработчиков).
Устанавливать и работать с MySQL на рабочей станции.
Умение устанавливать пакеты Composer на рабочую станцию.
Понимание, что такое GIT на теоретическом уровне.
Иметь практический опыт с выбранным фреймворком или CMS (локальная разработка, настройка базовых конфигураций, развертывание на реальный хостинг).
Возможность ориентироваться в документации PHP и выбранного фреймворка или CMS.
И всего этого можно добиться лишь единственным способом – сделать пет-проект (пробный, домашний сайт) и установить его на реальный хостинг с настоящим доменом.
На это потребуется порядка 3-5 месяцев, но зато вы реально поймете, как выглядит реальная работа разработчика (хоть и в урезанном виде), вы станете ориентироваться в инструментах, вы будете знать, куда идти за документацией.
Также при собеседовании вы сможете показать этот сайт, и работодатель поймет, что вы реально можете что-то делать.
А это не слишком для младшего PHP-разработчика
Вы уже могли обратить внимание, что я главным образом делаю акцент на полноту теоретической базы, знание конкретных инструментов разработки и практический опыт. И к сожалению, это не мое желание нанять «мидла» по цене джуниора, а реальная ситуация на рынке.
Сейчас уже мало кого волнует, может ли человек назвать все типы данных PHP или провести сортировку пузырьком. Априори считается, что кандидат это должен знать. Сейчас отбор идет уже среди тех, кто знает полностью теорию и уже может что-то делать руками (т.е. иметь практический опыт). Требования постепенно растут.
Уверенность и готовность учиться
Вы должны придерживаться позиции, что если вы чего-то не знаете, то вы оперативно поднимете документацию и разберетесь в том, как это работает. Поэтому вас не пугает, что на проекте у работодателя используется какая-то другая база данных, какой-то другой фреймворк или какие-то дополнительные инструменты, которые вы еще не изучали. Поэтому показываем работодателю готовность учиться и уверенность, что вы с этим справитесь.
Ну и не забываем про общую опрятность и доброжелательность. С большой вероятностью первоначально вас будет опрашивать девушка, поэтому нужно выглядеть более менее адекватно, и стараться общаться позитивно. Угрюмых, к сожалению, часто отсеивают до того, как успеют оценить их реальные знания.
Тестовое задание
На начальных позициях в большинстве мест вам придется выполнять тестовые задания, так как работодатель хочет получить перспективного джуна, а не джуна, который будет поднимать лапки и плакать. Поэтому относиться к ним нужно адекватно.
Однако я все же рекомендую брать тестовые задания после первого собеседования, когда вы оценили компанию и поняли, что вы хотите тут работать. Ибо порой вы пишете отклик на вакансию, вам робот присылает тестовое задание, вы его делаете, а потом его никто не смотрит, ибо уже не нужно, а робота просто забыли выключить.
Рано или поздно вас возьмут
Обычно вам требуется порядка 6 собеседований, чтобы вас взяли на работу. Поэтому не нужно переживать из-за отказов. Просто смотрим вопросы, на которых упали, ищем на них ответ и пробуем дальше.
Если вы выучили теоретическую базу, сделали пет-проект и подучили каверзные вопросы для собеседований, то это уже вопрос времени, когда вас возьмут на работу. Поэтому не опускаем руки и пробуем.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Что требуют от джуниоров работодатели: анализ вакансий для младших программистов
В этом обзоре систематизируем требования работодателей к Junior-программистам, а также обобщаем условия, которые предлагают компании младшим разработчикам. Для этого анализируем реальные вакансии, опубликованные на hh.ru.
Кого ищут работодатели: критерии анализа
Чтобы проанализировать требования работодателей к младшим программистам, я выбрал вакансии на сайте hh.ru по Москве, Санкт-Петербургу и Казани. Смотрел вакансии для JavaScript-программистов (фронт- и бэкенд), PHP-, Python- и Java-программистов. Проанализировал как минимум 10 вакансий по каждому стеку.
В вакансиях анализировал следующие параметры:
Параметры анализировал без разделения по стекам. Исключение — требования к хард-скилам. Этот параметр проанализировал для каждого стека отдельно.
Какой опыт работы нужен Junior-программисту
В идеальном мире на позицию джуниора могут претендовать соискатели без опыта работы. В реальном мире всё не так просто.
В подавляющем большинстве вакансий для Junior-программистов опыт работы не требуется. Но иногда работодатели хотят видеть стажёра или джуна с опытом работы. Например, «Яндекс» ищет стажёра-разработчика с опытом работы от 1 года.
«Яндекс» ищет стажёра с опытом работы
Какое образование нужно джуниору
Нужно ли высшее образование программисту? На этот вопрос сложно ответить только с помощью анализа вакансий. HR-менеджеры могут не указывать требования к образованию в вакансиях. Но они наверняка обращают внимание на этот пункт в резюме, когда рассматривают заявку соискателя. Тем не менее даю слово реальному рынку труда.
В большинстве вакансий для Junior-разработчиков нет требований к образованию. Но часть работодателей хочет видеть соискателей с высшим техническим образованием или студентов старших курсов.
Важный момент: требования к образованию я встретил только в вакансиях для Java- и Python-программистов.
От Java- и Python-программистов чаще требуют высшее техническое образование
Промежуточный итог: в большинстве вакансий работодатели не указывают требования к образованию. Но иногда в объявлениях встречаются пожелания: компании хотят видеть у новичка диплом технического вуза или в крайнем случае студенческий билет. Такие требования я встретил только в вакансиях для Java- и Python-программистов.
Требования к возрасту джуниров
Этот вопрос чаще всего волнует специалистов, которые меняют сферу деятельности в возрасте 30+. Давайте посмотрим, есть ли ограничения по возрасту в опубликованных вакансиях.
Я просмотрел около 50 вакансий в разных стеках, но ни в одной не нашёл явных требований к возрасту. Иногда работодатели указывают, что набирают студентов последних курсов. Такие условия есть в объявлениях о стажировке, а не в вакансиях для джуниор-программистов.
На стажировку приглашают студентов
Это не значит, что работодатели не обращают внимание на возраст кандидатов. Эйчары видят резюме и могут уточнить год рождения соискателя, если эта информация не указана. А о среднем возрасте junior-программистов рассказывает HR-менеджер Вероника Ильина в комментарии ниже.
Промежуточный итог: работодатели обычно не указывают формальные требования к возрасту, но учитывают возраст соискателей при отборе.
Какие софт-скилы нужны джуниору
Софт-скилы или гибкие навыки — неспециализированные навыки, которые влияют на профессиональную деятельность специалиста. Примеры софт-скилов: дисциплинированность, проактивность, умение общаться, стрессоусточивость, способность к обучению.
Читайте также:
В большинстве вакансий работодатели не указывают требования к гибким навыкам. В нескольких объявлениях есть пожелания к софт-скилам, например:
Мне показалось, что в некоторых вакансиях работодатели пишут о гибких навыках формально. Например, сложно представить, что кто-то из кандидатов скажет на собеседовании, что ему не хватает любопытства или адекватности.
В некоторых вакансиях софт-скилам уделяется повышенное внимание. Например, одна из компаний ищет Python-разработчика для работы в медицинском стартапе. Работодатель хочет, чтобы у соискателя был интерес к предметной области, то есть к медицине. Это объясняется тем, что разработчику придётся общаться с врачами, которые участвуют в разработке медицинских приложений.
В объявлениях часто встречается требование знать английский язык. В частности, указывается уровень intermediate.
Промежуточный итог: работодатели иногда указывают желаемые гибкие навыки. Любой кандидат может на собеседовании сказать, что он коммуникабельный, любопытный и адекватный. Реально оценить софт-скилы соискателя работодатель сможет во время испытательного срока.
Адекватные стрессоустойчивые соискатели интересуются вакансией
Какие хард-скилы нужны Junior-программистам
Хард-скилы или профессиональные навыки уместно рассматривать в разрезе стеков.
Требования к JavaScript-разработчикам (фронтенд)
Работодатели требуют от соискателей на позицию фронтенд-разработчиков такие знания и умения:
В одной вакансии встретил пожелание — соискатель на позицию фронтендера должен знать PHP хотя бы на базовом уровне. Также в единичных вакансиях работодатель искал кандидатов со знанием TypeScript, умением работать с препроцессорами (SCSS или Less), знание Angular.
Требования к Node.js-разработчикам (бэкенд)
Работодатели ждут от Node.js-разработчиков таких знаний и умений:
В вакансиях для Node.js-разработчиков часто встречаются жёсткие требования к знанию английского языка. В нескольких вакансиях увидел пожелание к знанию ещё одного серверного языка, например, PHP или Python.
Требования к PHP-программистам
От младших программистов на PHP компании ожидают таких знаний и умений:
В нескольких вакансиях работодатели хотят, чтобы соискатель имел базовые знания JavaScript.
Требования к Python-программистам
Один из работодателей принимает стажёров, которые знают основы Python и SQL. Стажировка оплачиваемая. К младшим программистам предъявляются более серьёзные требования:
В вакансиях для Python-программистов практически не встречаются требования знать ещё один язык программирования. Также мне не попались требования знать HTML и CSS и уметь верстать. Тем не менее это актуальные для веб-разработчиков умения.
Требования к Java-программистам
Выше сказано, что от джавистов работодатели чаще всего требуют высшее техническое образование. Также компании хотят видеть такие знания и умения:
В вакансиях для Java-программистов несколько раз встретил требование уметь писать юнит-тесты. В объявлениях о поиске джуниоров в других стеках такого требования не увидел.
В одной из вакансий нашёл пожелание к знанию второго языка программирования, например, Python. В вакансии для веб-разработчика на Java увидел требование понимать принцип MVC.
Промежуточный итог: от младших программистов во всех стеках работодатели ожидают базового знания выбранного языка программирования. Часто встречается пожелание знать хотя бы ещё один язык. В большинстве вакансий есть требование знать HTML и CSS.
Работодатели ожидают, что Junior-программисты умеют работать с базами данных, знают сетевые технологии, владеют популярными фреймворками и библиотеками.
Изучайте операционные системы, повысьте свой уровень
У нас есть курс по операционным системам. Зарегистрированные пользователи могут пройти его бесплатно. Другие бесплатные курсы можно найти по ссылке.
Что работодатели предлагают Junior-программистам
В части вакансий эйчары не указывают заработную плату, которую предлагают сотрудникам. Тем не менее объявления позволяют оценить уровень зарплат, на которые могут претендовать джуниоры. Также в вакансиях обычно есть информация о других «плюшках».
Младшие программисты могут рассчитывать на такую зарплату:
В объявлениях есть предложения удалённой работы и работы в офисе. Большая часть работодателей ищет фултаймеров как на удалёнку, так и в офис. Офисным сотрудникам предлагаются комфортабельные условия труда и рабочие компьютеры. Этот пункт часто описывается подробно.
Работодатели предлагают будущим сотрудникам такие плюшки:
Промежуточный итог: Junior-программист может рассчитывать на заработную плату от 15 000 рублей в месяц и выше. Работодатели готовы дополнительно мотивировать джуниоров и обеспечивать им комфортабельные условия труда.
Что требуют и что дают джунам: комментарий HR-эксперта Вероники Ильиной
Я анализировал требования работодателей к джуниорам по опубликованным вакансиям. Чтобы получить полную картину, обратился к HR-эксперту Веронике Ильиной и попросил её рассказать, что требуют работодатели от Junior-программиста. Слово Веронике.
«Обычно в вакансиях джунов пишут в требованиях или пожеланиях техническое образование. На это есть несколько причин: от традиций до убеждения, что универ учит системному мышлению. Но все знают, что действительно учатся даже в топовых вузах десятки, если не единицы людей на каждом потоке. То есть настоящих сильных выпускников никогда не хватит, чтобы закрыть потребность рынка в джунах. Так что многие работодатели на самом деле закрывают глаза на образование. Особенно после того, как встречают тимлида с опытом CTO и 9 классами школы или берут в джуны бывшего бариста, потому что мехмат МГУ не смог в сортировку. А бариста смог.
Опыт обычно не требуется, то есть учебного достаточно. Но и в целом джун джуну рознь: кто-то год параллельно с учебой стажируется в известной компании, но ничего не умеет. Кто-то даже учит школьников программировать, но у самого знаний все же не хватает даже в основах. А кто-то — тот самый бывший бариста, который выучил Java дома, и нормально работает 🙂
Идеальный джун — это, конечно, вчерашний студент. Опыта нет, впитывает всё, что дают, легко подстраивается под рабочие процессы и увлечённо старается. Но студентов не напасёшься: их просто меньше, чем нужно. А тем более не хватает студентов с хорошо думающей головой. Поэтому компании медленно, но верно начинают смотреть кандидатов около 30 и старше. Да, они уже не такие «на всё согласные», но они знают, чего хотят. Конечно, негласный возрастной ценз и неверие в то, что человек в 30 может куда-то эффективно переучиться, никуда не исчезают. Но когда на рынке мало хороших студентов, кого еще рассматривать и брать?
Самое главное для джуна — уметь гуглить и не бояться спрашивать непонятное, просить помощи у живых людей. Такие джуны быстро растут. Молчуны растут намного медленнее, это логично: как расти, если ты знаешь меньше правильных решений и собственных ошибок, чем твой коллега-активист?
По хард-скилам: джун джуну рознь. «Яндекс» будет требовать от вас алгоритмов, маленькая студия — умения делать хоть что-то, маленькая и гордая студия — уметь делать простое, но очень хорошо. Нужно смотреть на конкретные требования и пробовать. Нет универсальной формулы технических навыков, с которыми вас возьмут. Но есть то, что помогает на любом уровне — кругозор в Computer Science.
Что предложат джуну: в Москве и Санкт-Петербурге джун любого направления в разработке может иметь 30-100 тысяч рублей на руки. Просто за 100 у него будет минимальный опыт работы и например невероятная алгоритмическая подготовка. А за 30 легкая стажировка или парттайм работа. Скорость роста дальше зависит от самого джуна и компании, не все умеют вовремя поднимать деньги джунам. А джуны не всегда приходят с запросом про деньги. «Плюшки» у всех примерно стандартные: пресловутые «печеньки», ДМС, фрукты какие-нибудь с фитнесом, компенсация обучения. Бывает больше и лучше, бывает меньше».
Вместо заключения: что нужно, чтобы получить должность младшего программиста
О требованиях работодателей к джунам мы узнали благодаря анализу вакансий и комментарию HR-эксперта Вероники Ильиной. Чтобы соответствовать этим требованиям, достаточно единственного фактора. Вам нужно развиваться: изучать программирование и смежные дисциплины, нарабатывать гибкие навыки. И не забывайте рассылать резюме и ходить на собеседования, без этого найти работу не получится.
Никогда не останавливайтесь:
В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях
Как правильно подготовиться до уровня Junior PHP?
P.S Не хочу разводить холивар на тему что php не нужно а нужно что то типа ruby/python учить.
Пролистал заданные ранее вопросы с чего учить и заметил вот что:
1) наткнулся что много книг уже старых + много кто посылает на документацию(типа вон на читай и будет всё кул)
2) что в книгах какой бы там год не был, выложена теория без практики(практики миниму + она тоже более к теории а не к реальным боевым задачам).
Также сел изучать рынок что же хотят на должность Junior PHP developerа:
1)Знания php, JavaScript, MySQL
2)Понимание принципов ООП
3) знание фреймворка (они разные зависит от фирмы)
Вот что хочу спросить:
Нужно зубрить книги или же можно поступить как вот я хочу-
P.S подскажите что можно сделать с инет магазином
) + я хочу себе сделать портфолио тоже на php там с добавлением работ и тд.
Собственно информацию что и как делать буду черпать с гугла, документации и других источников.
Как написали выше, без фреймворка далеко не уедете. Для общего будет достаточно написать блоги на Yii2 и Symfony 2(Ларавел написан на ядре от симфони, есть нечто схожее). Пользуйтесь при разработке ООП(это нужно не только работодателю, но и вам. Поскольку придет ваш клиент через два года и попросит фичу, а у вас костыль на костыле и чудище никак не расширяемо). И конечно, читайте документацию того, на чем вы работаете, на английском и чем свежее тем лучше. В частности, колонки Best Practice очень помогут на первых этапах. Книги бесполезны, то что было два года назад, уже никому не нужно.
Реализация своего проекта, тогда и тестируйте его по полной. На собеседованиях будете рассказывать как и что делали, и почему. Можно попросится помощником кому-то на фрилансе, или поработать бесплатно. Это даст ощутимый буст в знаниях, не только как программиста, но и члена команды. Научитесь использовать миграции, системы баг трекинга, системы версионного контроля, что при командной разработке не мало важно. А в качестве джуна вы будете обязательно работать в команде и под присмотром. Важно работать с разной информацией и уметь предложить несколько вариантов разработки и решений. Как-то так.
Если вы располагаете временем. Попробуйте сделать что-то сложнее чем интернет магазин. Например, сайт авиакомпании с рейсами и заказом билетов, мониторинг и пр. Банковские системы, работа с API гугла, фейсбука, вк, или онлайн касс. Разные виды парсинга данных и их отображения.
Собеседование на PHP разработчика. Более 100 вопросов для Junior, Middle и Senior
Собрал список вопросов, по которым можно подготовиться к собеседованию или которые можно спросить у дипломированного PHP-разработчика. Конечно, список, не является исчерпывающим. Больше вопросов с кодом в нашем телеграм-канале @phpquiz. Погнали по вопросам!
Junior
Основы
Какие основные операции с использованием ссылок?
Назовите простые типы данных, поддерживаемые в РНР?
Что такое инкремент и декремент, в чем разница между префиксным и постфиксная инкрементом и декрементом?
Что такое рекурсия?
В чем разница между =, == и ===?
Какие знаете принципы ООП?
Какая система типов используется в PHP? Опишите плюсы и минусы.
Чем отличаются ключевые слова: include и require, mysql_connect и mysql_pconnect?
Что такое абстрактный класс и чем он отличается от интерфейса?
Может ли абстрактный класс содержать частный метод?
Какие модификаторы видимости есть в РНР?
Какие магические методы вы знаете и как их применяют?
Что такое генераторы и как их использовать?
Что делает оператор yield?
Что такое traits? Альтернативное решение? Приведите пример.
Опишите поведение при использовании traits с одинаковыми именами полей и / или методов?
будут доступны частные методы trait в классе?
можно компоновать traits в trait?
Расскажите об обработке ошибок и исключения (try catch, finaly и throw).
Что такое type hinting, как работает, зачем нужен?
Что такое namespace и зачем они?
Сравнение значений переменных в РНР и подводные камни? Приведение типов. Что изменилось в PHP 8 в этом контексте?
Как работает session в РНР, где хранится, как инициализируется?
Cуперглобальные массивы. Какие знаете? Как использовали?
Сравните include vs required, include_once vs required_once.
Что означает сложность алгоритма?
Что такое замыкание в PHP? Приведите пример.
Какая разница между замыканием в PHP и JavaScript?
Что такое позднее связывание? Расскажите о поведении и применения static.
Расскажите о SPL-библиотеку (Reflection, autoload, структуры данных).
Расскажите о принципах SOLID.
Расскажите о шаблонах GRASP.
Расскажите о Dependency Injection: что такое DI-контейнеры? Какие есть варианты реализаций?
Что вам известно о MVC?
Что вам известно о шаблонах GoF?
Что вам известно о шаблонах, которые применяются в ORM?
Напишите / расскажите на PHP пример реализации паттерна Singleton.
Что такое Docker? Каков принцип его работы?
Что такое LAMP / NAMP?
Расскажите о regexp.
Расскажите о SSH-протокол.
Что нового появилось в PHP 8?
Какие версии PHP до сих пор поддерживаются?
В чем разница между GET и POST?
Какие еще HTTP-методы знаете?
Чем отличаются операторы BREAK и CONTINUE?
Есть ли разница между одинарными и двойными кавычками?
Что такое cookie и зачем они используются?
Что нельзя хранить в cookie и почему?
Какую среду разработки предпочитаете и почему?
Какой командой добавить изменения?
Какой командой зафиксировать изменения?
Какой командой отправить изменения в удаленный репозиторий?
Базы данных
Что такое транзакция?
Что такое нормализация?
Что такое денормализации? Для чего она нужна?
Какие типы связей в базе данных?
Что означает утверждение о том, что СУБД поддерживает контроль ссылочной целостности связей?
Если используемая вами СУБД не поддерживает каскадные удаления для поддержки ссылочной целостности связей, что можно сделать для достижения аналогичного результата?
Что такое первичный и внешний ключи?
Какие различия между первичным и уникальным ключами?
Какие типы JOIN и в чем различия?
Что такое курсоры в базах данных?
Что такое агрегатные функции SQL? Приведите несколько примеров.
Что такое миграции?
Расскажите о связи друг к другу, один ко многим, многие ко многим.
Зачем используют оператор группировки GROUP BY?
В чем разница между WHERE и HAVING? Приведите примеры.
В чем разница между операторами DISTINCT и GROUP BY?
Для чего нужны операторы UNION, INTERSECT, EXCEPT?
Опишите разницу типов данных DATETIME и TIMESTAMP.
Какие вы знаете двигатели таблиц и чем они отличаются?
Какие способы оптимизации производительности баз данных знаете?
Что такое партицирование, репликация и шардинг?
Чем отличаются SQL от NoSQL базы данных?
Какие бывают NoSQL базы данных?
Какие типы данных есть в MySQL?
Разница между LEFT JOIN, RIGHT JOIN, INNER JOIN?
Разница между JOIN и UNION?
Что такое индексы? Как они влияют на время выполнения SELECT, INSERT?
Что такое хранимые процедуры, функции и триггеры в MySQL? Для чего они? Приведите примеры использования.
Как организовать сохранность вложенных категорий в MySQL?
Практические задания
Спроектируйте базу данных для хранения информации о книгах и их авторов. Напишите запрос для выборки всех авторов и количества написанных ими книг.
Есть матрица 3 × 3. Посчитайте диагонали, только парные / нечетные числа в диагоналях.
Ваш приложение выдает 500 ошибку. Опишите последовательность поиска проблемы.
Напишите функцию, которая определяет, слово является палиндромом.
Какой результат выдаст такой код и почему: If (-1) print «True» else print «False»
Какой результат выдаст такой код и почему: var_dump (array_merge ([2 => ‘a’], [3 => ‘b’]));
Есть массив товаров в случайном порядке с указанием производителей. Напишите метод для его сортировки, чтобы максимальное количество первых товаров соответствовала такому критерию: каждый следующий товар должен производителя, отличного от предыдущего.
Есть массив Integer, напишите возможные способы, как увеличить каждый элемент на единицу (1).
Order
User
Напишите запрос для увеличения значения column1 на 1 для id = 2
Напишите цикл for так, чтобы аргумент цикла менялся в геометрической прогрессии.
Что выведут выражения:
print (!! «false»)
print (!! true)
print ((int) ‘125g7’)
print ((int) ‘x52’)
Результат выполнения функции? Как исправить результат?
in_array (1, [0, ‘0’, true])
Напишите класс с реализацией всех возможных способов строгой типизации данных с учетом возможностей PHP 8.
Middle
Основы
Как передаются переменные (по значению или по ссылке)?
Какие процессы происходят, когда пользователь вводит в браузере URL?
Что такое вариативная функция или spread-оператор?
Какие типы уязвимостей знаете? Как от них защищаться?
Что такое идемпотентность метода? Какие HTTP-методы являются идемпотентными для REST?
Что такое stateless?
SOAP vs REST. В чем разница?
Какие методы авторизации используют для построения API?
Что может содержать интерфейс?
Класс содержит свойство, которое, в свою очередь, является объектом. Что будет содержать это свойство в клонированный объект: ссылка на тот же дочерний объект или копию дочернего объекта? Что нужно сделать, чтобы это изменить?
Что такое Mock? Где используют и зачем?
Опишите реализацию одного из шаблонов проектирования.
Как хранятся данные в redis / memcached?
Расскажите о целесообразности применения redis / memcached для кэширования. Какие плюсы и минусы?
Назовите различия между nginx и apache.
Что такое opcash? Как он работает?
Что такое JIT? Как он работает?
Зачем нужно ключевое слово final?
Что нового в РНР 7/8?
Что такое SOLID, DRY, KISS, YAGNI?
Назовите паттерны проектирования, с которыми приходилось работать.
Что такое простая фабрика?
Что такое Service Layer и где его следует применять?
Как устроен Singleton и почему его считают антипатерном?
Что такое идемпотентность?
Опишите жизненный цикл HTTP-запроса?
Что такое куча и стек?
Что такое рефлексия?
Что такое хэш-функция и где она используется?
Как применяются очереди в РНР?
Как в общих чертах работает opcache?
Чем отличаются модульные тесты от интеграционных?
Что такое трейты? Как применять на практике?
Как разрешить конфликты при использовании trait?
Как работает автозагрузки классов?
В чем разница между стеком и очередью?
Расскажите о Unit Tests (required), Functional Tests (optional). Моки и стаб в PHP.
Представим ситуацию, в которой нам нужно вызвать частный метод, как это сделать?
Опишите разницу между PHP-FPM и PHP на сокете.
Как бы вы реализовали загрузки больших отчетов с большим количеством данных (файлы от 1 гигабайта до N гигабайт).
Как бы вы импортировали 50-гигабайтный файл xml в базу данных?
Почему после PHP 5 идет сразу 7, куда делась 6?
Есть ли разница между self и this в PHP?
У нас есть важный PHP-файл, его надо запускать каждые 20 секунд, как бы вы это сделали?
Как расшифровать 644 в правах на файл в Linux?
В чем разница между merge и rebase?
Какой командой можно сделать ресет изменений, не потеряв их?
Что такое stash и зачем он нужен?
Базы данных
Какая разница между MyISAM i InnoDB? В каких случаях и лучше применять?
Как найти и оптимизировать «тяжелые» запросы?
Какие типы индексов?
Как хранить координаты точки на карте в БД?
Какие типы индексов бывают в RDBMS?
Какое свойство полей БД нужно учитывать при выборе типа индекса?
Когда следует использовать индексы, преимущества и недостатки?
Что такое план выполнения запроса и как его узнать?
В чем разница между типами данных CHAR и VARCHAR в SQL?
Каково назначение транзакций? Расскажите о принципе работы.
Назовите 3-4 нормальные формы реляционных БД.
Каково назначение репликации? Какие типы связей и в чем разница между ними?
Что такое индексация? Какие типы индексов? Какой смысл их использовать?
Что такое полнотекстовый поиск в MySQL? Как он реализуется?
Что такое cursor в MySQL-процедурах?
Расскажите о RabbitMQ или Gearman.
Что знаете о Solr / ElasticSearch?
Что такое deadlock MySQL?
Влияет ли порядок JOIN на план выполнения MySQL-запроса?
Практические задания
Вам нужно спарсить продукты и их цены с интернет-магазина. С помощью чего будете это делать и какие основные нюансы нужно учесть?
Для сайта пользователей необходимо сделать механизм добавления и отображения аватарок. Как бы вы его реализовали?
Какой результат выдаст такой код:
Какие модификаторы доступа допустимые в реализации метода getName
Реализуйте очередь сообщений, используя MySQL для хранения данных. Как избежать ситуации, когда несколько воркеров получат в обработку одинаковое сообщение?
Есть мануал на API с курсом валют. Нужно найти минимумы-максимумы за 5 лет, а потом то же, но с разбивкой по месяцам.
Напишите архитектуру, которая основывается на базовой абстракции. Дочерние классы расширяются с помощью интерфейсов. Реализацию одинаковых методов выполните, используя трейты (реализовывать в абстракции).









