php junior php middle

Upgrade до Middle PHP-разработчика за 3 месяца

В очередной раз на меня свалилась задача найти хорошего PHP-программиста.
По результатам прозвона потенциальных кандидатов, 90% тех, кто мнит себя Middle, на самом деле Junior и годы опыта не спасают, потому что клепают однотипный код в пределах заданий, посланных свыше.
Прописал минимальный план желающим сделать рывок и перейти на следующий уровень без отрыва от производства.

Месяц 1

Прочитать книжки (по неделе на книжку, читая вечерами и на выходных):

Можно заменить на аналогичные, почти всё можно скачать без смс.

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

Месяц 2

Прочитать по 3-5 статей и на практике поработать с (1 вечер — статьи, 1 вечер — практика):

Месяц 3

Сделать свой проект на GitHub, используя всё вышеперечисленное (1 месяц вечерами и на выходных).
Цель: закрепить знания, пройдя самому весь путь от ТЗ до готового проекта, на который можно зайти в Интернете и давать ссылку в резюме.

Источник

Что должен знать «PHP Junior Developer без опыта работы»?

Время несётся стремительным домкратом. Эта статья в значительной степени устарела, хоть конструктивные моменты типа «изучайте смежные области» едва ли когда утратят актуальность. Кадровый голод ощущается всё более явно и вносит больше конструктива в процесс найма начинающих разработчиков. Баланс смещается в сторону хороших знаний языка и инструментов от готовности к написанию кода «как-нибудь» но с первого дня.

Не забывайте, что всё это оценочные суждения какого-то анонимуса. У вас нет никаких гарантий, что я разработчик и понимаю, о чём говорю. Собственно, вы даже не можете гарантировать, что этот текст не набран каким-то ежом в уплату за съеденую котлету.

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

HTML, CSS, JavaScript

Вам может показаться, что знать эти вещи идеально PHP-програмисту не требуется, однако это не так. Валидная вёрстка, кроссбраузерность и прочие слова, которые пишут в вакансиях верстальщиков применяйте также и к себе. В общем-то это вполне логично, поскольку даже самый идеальный код на PHP не нужен никому, если он при этом генерирует неадекватный HTML.
В некоторых организация мне сразу говорили, что вакансия подразумевает именно разработчика PHP, есть отдельные верстальщики/скриптовики. Однако таких организаций было мало.
Самый показательный пример — одно из выполненых мной тестовых заданий. В нём соотношение строк PHP:JavaScript:HTML было примерно 20:50:30.

Фреймворки

Ваши знания PHP как такового интересуют весьма незначительную часть работодателей. Большинство компаний используют в разработке различные фреймворки, и хотят от кандидата того же. Если в пожеланиях к кандидату вы увидели «-знакомство с фреймворком х», то скорее всего это не пожелание, а требование.
В Новосибирске наиболее популярны (исходя из вакансий джуниоров) Yii, Symfony и Zend. Изредка мелькает CakePHP.
Лично мне освоить Yii на базовом уровне удалось за неделю спокойной работы. Что, впрочем, не значит, что вы не сможете разобраться в нём быстрее.

PHP — тоже програмирование

Со всеми вытекающими отсюда последствиями. А именно — без знания теории ваша квалификация крайне низка.
Порог вхождения в PHP невысок. Как следствие, все прочие програмисты смотрят на PHP-шников с презрением и неодобрением. Да и в общем-то есть за что.
Незнание основ теории может приводить к таким ужасным вещам, как генерация в коде миллиона объектов с последующим применением к ним пузырьковой сортировки. Это, конечно, гипербола, но суть её вы, наверное, уловили.
В общем настоятельно рекомендую вам прочитать пару-тройку книг по теории програмирования. Вряд ли вас спросят о подсчёте сложности алгоритма, но общие вопросы, некий начальный уровень програмиста, на собеседовании стараются выяснить.

Разработка включает в себя многое

Лично мне никогда не приходила в голову мысль, что стоит думать не только каком языке ты пишешь, но и чем ты пишешь. Очень желательно знать основные IDE, точнее их главные функции.
Для нормальной работе в команде необходим контроль версий.
Кроме того, в проектах принято проводить тестирование и как-то собщать об ошибках.
А ошибки бывают такие, что неплохо бы знать содержимое php.ini.
И конфиги nginx/apache.
И можно очень долго продолжать.

Готовьтесь к резкому расширению кругозора

При выполнении каждого второго тестового задания вам придётся с нуля осваивать что-то новое. NoSQL, AJAX, чьи-то API, JS библиотеки и прочие вещи, о которых вы в лучшем случае слышали пару раз в жизни, вам придётся экстренно изучать.
То что вам не знакомо вовсе не обязательно является чем-то сложным. Это ведь действительно задания для начинающего разработчика без опыта работы. А значит, несмотря на кажущуюся сложность, решение задачи вы быстро найдёте, уделив полчаса документации.
Не отказывайтесь от задания, если оно показалось вам слишком сложным. Просто почитайте статьи или учебники по этой теме, вы поймёте, что бояться нечего.

Тестовые задания могут быть неточны

Как правило тестовые задания коротки и ясны. И всё же неточны. Я понятия не имею, чем это вызвано. Возможно составляют и проверяют задания разные люди.
В одном задании мне явно указали применить ООП, затем на собеседовании спросили, зачем я это сделал. В другом с точностью наоборот. В третьем попросили приложить описание на английском и затем спросили зачем я его приложил.
В общем некоторая часть ваших работ будет проверяться без оглядки на задание.

HR`ы нередко адекватны и профессиональны

Нередко — это 6 из 10. Будьте готовы к тому, что на остальные письма вам не ответят, тестовые задания не проверят, мы вам перезвоним.
Я уж не знаю, чем руководствуются эти люди. Серьёзно, HR, почему вы не можете потратить пять минут на человека, который потратил на вас день?
Если вы столкнётесь с такой проблемой, не ждите ответа. Звоните и пишите, спрашивайте почему про вас забыли.

Собеседование это огромный плюс

Общение с опытным разработчиком и просмотр вашего кода сильно продвигает вас в развитии. Даже если вам отказали в вакансии, вы всё равно получили ценный опыт.
После каждого собеседования обязательно пройдитесь дома по вопросам и уточните неясные вам моменты. Как правило эти вопросы относятся к базовым знаниям, без которых ваша работа будет как минимум некачественно. Что-то не знаете — обязательно разберитесь. Хотя бы потому, что подобный вопрос с большой вероятностью повторится.

Источник

/dev/energy

Сайт о том, как стать программистом и как с этим жить потом

Как развиваться Junior разработчику? Карьерный путь в IT

Меня не может не радовать то, как сильно вырос онлайн в разделе Как стать программистом, поэтому я решил написать свежую статью именно в этот раздел моего блога, чтобы закрепить успех. Поговорим о том, как происходит рост от Junior ввысь/вглубь мира IT.

Абсолютное большинство приходящих в сферу IT соискателей не стремятся оставаться на позиции младшего разработчика всю свою жизнь. Их цель — как минимум вырасти до стабильного, сильного разработчика уровня middle/senior. А кто-то пойдёт выше. И именно этот процесс хотелось бы обсудить в рамках статьи. Я постараюсь приводить примеры, основанные на своём опыте и опыте моих студентов.

Trainee

В современной индустрии IT с её перенасыщенным рынком понимание между Стажёром (Trainee) и Младшим программистом (Junior) смазалось. И многи часто путают эти два понятия, что неправильно.

Стажёром может стать любой человек практически с нулевыми знаниями (всё зависит от программы стажировки, в которой он участвует). Но чаще всего компаниям интересны кандидаты, которые уже примерно понимают, как устроен мир программирования и могут написать простые вещи типа циклов и ветвлений.

Чаще всего после курсов «с нуля» выпускники становятся именно стажёрами, так как у них по сути нет коммерческого опыта. В лучшем случае они могут стать Junior-ами (но об этом ниже).

Со стороны компании стажёр — это не рабочая единица, а материал для роста, возможность вырастить себе сотрудника. Для самого стажёра — весомый вклад в будущую карьеру, так как именно здесь он получает то, что ему нужно — опыт.

Чаще всего стажировки либо не оплачиваются вовсе (что, кстати, не совсем согласуется с ТК РФ), либо оплачиваются по минимальной границе. Но в текущей ситуации на рынке я бы рекомендовал обращать внимание на любые стажировки крупных компаний вне зависимости от финансовых условий — внимание стоит уделять условиям последующего найма и того, какие преференции даёт стажировка для кандидата.

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

Обязательно узнайте при поступлении на стажировку, как описываются и фиксируются условия успешного её завершения, а также какие знания и навыки Вы получите.

Для тех, кто хочет подробнее узнать о подходе компаний к найму стажёров, есть мой вебинар.

Junior

В условиях насыщенного рынка получение позиции Junior — это уже весомый успех. Он говорит о том, что в общей массе новичков Вы смогли выделиться. Эту картину надо не только сохранить, но и улучшить. В течение испытательного срока, который в нашей необъятной Родине длится обычно три месяца, Вам нужно будет сосредоточиться на следующих вещах (кстати, как и в позиции Trainee)

Моя практика показывает, что в позиции Junior специалист обычно растёт от полугода до года. Конечно, этот срок может меняться в разумных рамках, но если после года работы Вы всё ещё не чувствуете себя «в своей тарелке», стоит задуматься о качестве Вашего роста. За это время в процессе активной работы сотрудник не менее активно растёт, начинает изучать фундаментальные понятия в программировании, такие как алгоритмы, оценки сложности, обеспечение работы под высокими нагрузками, устройство выбранного языка программирования и прочее. К концу этого периода уже можно смотреть в сторону позиции Middle.

Если Вы решили изучать язык PHP, то можете взять за основу мой курс для самостоятельного изучения, который найдёте по ссылкам ниже. Он совершенно бесплатный и создан для того, чтобы помочь сделать первые шаги!

А ещё можно найти себе ментора для того, чтобы иметь возможность задавать вопросы и уточнять правильность своего пути. Сделать это можно, например, здесь.

Как понять, что я готов к позиции Middle?

Не ждите, что Ваш шеф радостно ворвётся в Ваш open-space с тортом и шампанским и поздравит с повышением. Конечно, многие серьёзные компании проводят one-2-one встречи, следят за ростом сотрудников, но зачастую многие грешат тем, что исходят из принципа достаточности: человек работает, вот и славно. Зачем платить больше?

Если Ваш руководитель не общается с Вами на тему роста, то нужно активно рефлексировать и анализировать свои навыки. Ответьте себе на вопросы:

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

Ещё одним неплохим инструментом являются сайты поиска работы. Нет, это не означает, что надо ездить по собеседованиям. Но на них Вы сможете увидеть, чего ожидают от разработчиков Middle-уровня в Вашем стеке и какие зарплаты платятся в этом сегменте. В принципе, и на собеседование сходить можно, но будьте готовы к тому, что текущий работодатель, мягко говоря, удивится.

В самом хорошем случае в компании есть практика one-2-one встреч. Это практика, при которой руководитель встречается с подчиненными один на один в закрытом формате и обсуждает все вопросы, связанные с рабочим процессом, без купюр. Оба могут говорить о том, что беспокоит, что радует, задавать вопросы. В таком случае рост обычно происходит гораздо проще и естественнее, так как на встрече всегда можно

Как видите, маркеров и способов роста множество. Главное — учиться и расти постоянно, без остановки.

Вот я Middle. Что дальше?

Как ни странно, дальше рост очень похож за тем лишь исключением, что качественно меняются набираемые знания. Нужно уделять больше времени смежным системам (таким как ELK-стек, Docker, Kubernetes, кластеризация и скалирование), пониманию построения архитектур. Стоит написать что-то своё прямо с нуля, без фреймворков. Вне работы, но это будет крайне полезно для понимания принципов работы выбранного стека.

В позиции Middle можно и нужно задерживаться дольше. Знаний для роста тут предостататочно, поэтому путь до Senior занимает около 2-3 лет. Конечно же, есть и более быстрые скачки, но это скорее исключение из правил.

Дальнейший рост довольно интересен. За позицией Senior открывается несколько путей развития:

Основная задача, которая будет стоять перед Вами здесь даже не про то, как расти. Она состоит в том, чтобы предельно честно ответить себе на вопрос: «А что дальше? Как я хочу расти? Зачем я буду развиваться в позиции N?». Изучайте истории разных известных представителей каждого из путей (благо, таких людей много, и они не очень-то прячутся). Это поможет Вам понять множество философских вещей относительно роста, которые точно находятся за рамками конкретно этой статьи.

Кстати, про рост в роли Team Leader-а есть отличное выступление с конференции, которое Вы можете посмотреть ниже

Резюме aka TL;DR

Надеюсь, что мои скромные рекомендации будут для Вас полезны!

Источник

Собеседование на 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 лет, а потом то же, но с разбивкой по месяцам.

Напишите архитектуру, которая основывается на базовой абстракции. Дочерние классы расширяются с помощью интерфейсов. Реализацию одинаковых методов выполните, используя трейты (реализовывать в абстракции).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *