Сертификации
На пути к знаниям. И сертификатам
IT - это та сфера, где учиться нужно постоянно. У меня уже, вроде как, есть какой-никакой опыт, но мне постоянно кажется что нужно знать и уметь больше. Последнее время — это выливается уже в совсем какое-то нездоровое состояние, когда я пытаюсь одновременно делать - и учить, всё подряд, и не успеваю при этом ничего. Что бы успокоиться и упорядочить свои мысли — хочу попробовать посмотреть, какие навыки вообще сейчас котируются, и смогу ли я получить хоть какой-то сертификат.
Главное здесь, конечно же, помнить, что цель — знания, а не бумажка.
Итак, поехали.
Java
Если нам нужны сертификаты по Джаве, то путь лишь один — на сайт Оракла. Сам сайт найти можно тут.
Первый уровень: Associate, 1Z0-808. Java 8, 2.5 часа, 70 вопросов, для прохождения нужно ответить на 65%.
Программа:
Тема | Содержание |
---|---|
Основы | Область видимости переменных; структура класса; как написать “Хелло ворлд” и запустить через консоль; импорты; знать основные фичи самой Джавы. |
Типы данных | Объявлять и инициализировать переменные; разница между переменными, ссылающимися на объект и примитивными типами данных; знать что делают Boolean, Double, Integer; чтение и запись в поля объекта; жизненный цикл объекта (от создания до сборщика мусора). |
Операторы | Порядок использования операторов; умение сравнивать объекты (знать про == и equals); ветвления, тройные конструкции (’ (a) ? b : c ‘); switch. |
Циклы | Обычные циклы; for во всех его проявлениях; ‘do {} while()’; сравнение циклов; break; continue. |
Массивы | Работа с массивами — одно и два измерения. |
Методы и инкапсуляция | Методы с аргументами, возврат значения; статические поля и методы; конструкторы; модификаторы доступа; принципы инкапсуляции в классе; понять что произойдёт с объектом после вызова метода. |
Основные классы | Знать StringBuilder; работать со строками (String); знать LocalDateTime, LocalDate, LocalTime, DateTimeFormatter, Period; использовать списки; уметь написать простую лямбду. |
Наследование | Описать плюсы наследования; написать код с полиморфизмом, переопределениями метода; разница между типом ссылки и типом объекта; понять где нужно странслировать объект; использовать super; абстрактные классы и интерфейсы. |
Обработка исключений | Различия в checked/unchecked исключениях и ошибках (Errors); как ошибки меняют контроль воспроизведения в try-catch блоках; плюсы обработки исключений; написать и вызвать метод, бросающий исключения; знать распространённые исключения, как NullPointerException, ClassCastException, ArithmeticException, ArrayIndexOutOfBoundsException |
Тут, я думаю всё просто и понятно — стандартный набор вопросов на любом собеседовании. Что-то надо заучить — например, я уже и не помню когда я видел “распространённые исключения” в своём коде, кроме, разве что, NPE. Так же могу заметить, что постоянно забываю как конвертировать туда-сюда даты, так что сертификат мог бы послужить дополнительным мотиватором что бы сесть и разобраться в логике языка.
Раньше где-то читал, что без Associate сертификата нельзя получить уровень Professional, однако в описании 1Z0-819 никаких требований нет. Там уже Java 11, 90 минут и 50 вопросов, 68% которых надо ответить правильно.
Программа:
Тема | Содержание |
---|---|
Типы данных | Работа с примитивами и классами-оболочками, включая операторы, скобки, продвижения типов 1 и кастинг; работа с текстом через String и StringBuilder; использование локальное распознавание типов, например, в лямбдах. |
ООП | Объявлять и создавать объекты — включая вложенные; объяснить жизненный цикл объекта; объявлять и использовать поля и методы с учётом наследований; инициализация объектов с помощью конструкторов и статических методов; область видимости переменных; инкапсуляция; иммутабельные объекты; работа с наследованием, абстрактные классы; использование полиморфизма, кастов; различать между типом ссылки и типом объекта; создавать интерфейсы и различать функциональные интерфейсы, использовать приватные, статичные и дефолтные методы; использовать перечисляемые типы. |
Массивы и коллекции | Использование генериков и подстановки2; использовать массивы, List, Set, Map, Deque, включая их основные методы; сортировать коллекции используя Comparator и Comparable. |
Модульная система | Разворачивать и выполнять модульные приложения, включая автоматические модули; объявлять, использовать и экспортировать модули; использовать сервисы. |
I/O API | Читать и писать в консоль и файлы используя потоки ввода-вывода; написать сериализацию и десериализацию объектов; использовать системные объекты с помощью API из java.nio.file. |
JDBC | Подсоединяться к БД, выполнять SQL запросы, обработать результаты. |
Аннотации | Создать, применить и обработать аннотации. |
Выполнение программы | Использовать циклы, ветвления и свитчи. |
Обработка исключений | Обработка исключений с try-catch-finally, try с ресурсами, множественные catch блоки; создание и использование своих исключений. |
Потоки и лямбды | Имплементироввать функциональные интерфейсы с лямбдами, включая интерфейсы из пакета java.util.function; использование потоков для фильтрации, трансформации и обработки данных; декомпозиция, редукция, и группировки и разбиение на последовательных и параллельных потоках. |
Параллелизм | Создать рабочие треды используя Runnable и Callable, управлять многопоточностью с ExecutorService и API из java.util.concurrent. |
Безопасные Java SE приложения | Писать код, устойчивый к угрозам безопасности вроде DoS, инъекции кода, проверяющий входные данные и гарантирующий сохранность данных; обезопасить доступ к системным ресурсам, управлять политиками (безопасности, а не как иллюминаты), и выполнять привилегированный код. |
Локализация | Использовать локализацию с использованием Locale, ресурсных бандлов; использовать стандартные методы для парсинга и форматирования сообщений, дат и чисел. |
Тут список уже гораздо больше. Раньше это было два экзамена - “новичок” 11 Джавы и профессионал, но сейчас оба экзамена слили в один. Может, оно и к лучшему, потому что пусть экзамен и более интенсивный, но зато должен меньше нервов вытянуть.
На мой взгляд, “просто работая разработчиком” охватить все темы невозможно. Например, мне по долгу службы приходится довольно много работать с “голым” JDBC, в результате обработчики запросов я могу писать с закрытыми глазами; а вот кто-то, кто много работает с Hibernate или Spring Data - скорее всего запнётся (тем более, не имея под рукой привычной IDE!) Зато когда надо работать с потоками (которые Stream), я постоянно забываю какие там методы для конвертации массива в поток, или для сбора данных в результат — постоянно приходится лезть в гугл, а это отнимает время и сбивает концентрацию.
В общем, мне кажется что этот экзамен — действительно хороший уровень для проверки своих знаний, и подготовка к нему ценна сама по себе, даже без бумажки.
Более подробно и по пунктам планирую расписать части экзамена, когда наконец-то найду время подготовиться к нему. Тем временем, разобравшись с джавой время двигаться к следующему компоненту, без которого разработчик — не разработчик.
Базы данных
MySQL
Экзамен от Оракл, которому, оказывается, успел купить себе и эту БД (видимо, так MariaDB и появилась, не следил). 1Z0-909, 90 минут, 65 вопросов, 62%. Поскольку мне надоело рисовать таблицы, то вам список.
- Соединители
- Выбрать подключения, подходящих для приложения;
- Продемонстрировать использование, управление и конфигурацию соединителей;
- Достать данные из БД с помощью соединителя;
- Обработать особые (специальные?) значения;
- Защитить пароли и соединители.
- Объекты и данные схемы в MySQL
- Спроектировать, создать и изменить виды;
- Хранение и обработка строк;
- Хранение и обработка числовых данных;
- Хранение и обработка временных данных;
- Хранение и обработка пространственных данных.
- Оптимизация запросов
- Использование индексов для оптимизации;
- Анализировать запрос для оптимизации;
- Переписать запрос для оптимизации.
- JSON и хранение документов
- Создание и сохранение JSON документов;
- Обработка данных в документах JSON;
- Объяснить создание приложений с использованием NoSQL и XDevAPI;
- Создать и получить доступ к хранилищу документов;
- Использование MySQL консоли для получения доступа к хранилищу документов.
- Data-driven приложения
- Использование подготовленных запросов3;
- Менять режимы SQL что бы изменить поведение SQL;
- Отлов и обработка ошибок и предупреждений;
- Показ результатов запроса;
- Агрегация и обработка данных;
- Генерация продвинутых отчётов (продвинутая генерация отчётов?)4.
- Транзакции
- Контроль транзакций в SQL;
- Контроль транзакций в приложениях;
- Устранение проблем консистенции с использованием уровней изоляции;
- Понимание механизмов блокировки в MySQL.
- Хранимки в MySQL
- Создание и выполнение хранимок;
- Объяснить конструкций программирования использованных в хранимых процедурах;
- Создание и выполнение триггеров;
- Шедулинг операций БД.
Не знаю как вам читать, а мне вот гораздо проще писать и редактировать в маркдауне списки, а не таблицы, так что с этого момента я начинаю везде использовать списки.
Oracle DB
Если вы сильны духом, вам хочется жести, и вы не боитесь работать в банках, то вам может помочь сертификат “Oracle Database PL/SQL Developer Certified Professional”.
К сожалению, просто так сдать вам его не дадут, сперва нужно получить один из трёх сертификатов на выбор, например, “Oracle Database SQL” 1Z0-071.
Программа первого экзамена, включающего в себя 78 вопросов, ответить на которые надо за 120 минут, следующая:
- Основные концепты
- Объяснить теоретические и физические аспекты реляционной БД;
- Уметь читать ER-диаграмму и соотносить с SQL запросом;
- Уметь объяснить как SQL-запрос соотносится с базой данных.
- Ограничение и сортировка данных
- Применение правил приоритета для операторов в выражении;
- Использование команд DEFINE и VERIFY;
- Использование подстановочных переменных;
- Ограничение количества рядов, возвращаемых запросом;
- Сортировка данных.
- Применение функций конверсии и выражений с условиями
- Применение NVL, NULLIF и COALESCE функций к данным;
- Использование функций TO_CHAR, TO_NUMBER и TO_DATE;
- Понимание явных и неявных преобразований типов данных.
- Работа с данными из нескольких таблиц
- Использование разных типов join’ов, включая: self-join, OUTER join и другие;
- Использование неравенств5 в джоинах;
- Понимать и использовать (а лучше - не использовать!) произведения таблиц6.
- Использование SET операторов7
- Сопоставление селектов;
- Использование ORDER BY;
- Использование UNION, UNION ALL, INTERSECT, MINUS.
Работа с индексами, последовательностями и синонимами
Работа с представлениями (видами) 8
Работа с объектами, и представлениями словарей данных (? Data Dictionary Views)
- Извлечение данных с помощью SELECT
- Использование алиасов для колонок;
- Использование конкатенации, символьных строк, альтернативных кавычек, DISTINCT;
- Использование арифметических выражений и NULL значений в SELECT-ах.
- Использование однострочных функций для кастомизации вывода
- Манипуляция строками в запросах;
- Арифметические операции с календарными датами, работа с функциями дат;
- ROUND, TRUNC, MOD.
- Агрегированные отчёты с функциями группирования
- Использование функций группирования;
- Создание групп данных;
- Ограничение результатов в группе.
- Вложенные запросы
- Одно и многострочные вложенные запросы;
- Обновление и удаление рядов с использованием вложенных запросов.
- Управление таблицами с использованием DML-выражений
- Управление транзакциями;
- Контроль транзакций;
- Выполнение вставок, обновлений и удалений;
- Выполнение вставок в несколько таблиц;
- Выполнение merge выражений.
- Использование DDL для управления таблицами и их связями
- Описание и работа с таблицами;
- Описание и работа с колонками и типами данных;
- Создание таблиц;
- Удаление колонок и использование UNUSED;
- Транкейт таблиц;
- Создание и использование временных таблиц;
- Создание и использование внешних (external) таблиц;
- Работа с ограничениями (constraints).
- Контроль пользовательского доступа
- Разница между системными и объектными привилегиями;
- Управление привилегиями на таблицах;
- Разница между привилегиями и ролями.
- Работа с данными из разных временных зон
- Работа с CURRENT_DATE, CURRENT_TIMESTAMP, LOCALTIMESTAMP;
- Работа с INTERVAL типами данных.
Фууууух. Это всё — один экзамен, и только переводя заголовки я уже узнал много нового о SQL. В общем, экзамен сильный, при том, что большая часть разработчиков знает SQL на уровне “там есть джоины” - может быть полезным, даже если вы и не собираетесь работать с Ораклом.
Так, теперь, давайте, просто по приколу всё-таки посмотрим, что же на основном экзамене: “Oracle Database: Advanced PL/SQL” 1Z0-148
- Дизайн PL/SQL кода
- Знать гайдлайны для курсоров, использовать курсоры;
- Уметь использовать DBMS_SQL;
- Создание подтипов их основных типов.
- Работа с коллекциями
- Манипулирование коллекциями;
- Различать разные типы коллекций;
- Использование вложенных коллекций;
- Использовать коллекции объектов;
- Вложенные таблицы;
- varrays;
- Ассоциативные массивы / PL/SQL таблицы.
- Продвинутые методы интерфейсов
- Выполнять внешний код на С из под PL/SQL;
- Выполнять код Джавы из под PL/SQL.
- Улучшение производительности с кешами
- Знать когда использовать кеш, знать как использовать из под PL/SQL;
- Работать с зависимостями сессии в функции результата кеша (?);
- Объяснить инвалидацию кеша;
- Использовать библиотеку DBMS_RESULT_CACHE.
Профилирование и трейсинг PL/SQL кода
- Защита от SQL инъекций
- Что такое инъекции;
- Уменьшение площадей для атак;
- DBMS_ASSERT.
Multidisciplinary9
- Работа с Большими Объектами
- Создание и поддержание типов Больших Объектов;
- Различия между внутренними и внешними Большими Объектами;
- Использование DBMS_LOB;
- Использование временных LOBов;
- Описать и использовать SecureFile LOB.
- Работа над производительностью
- Оптимизация PL/SQL кода;
- Использование intraunit inlining;
- Использование нативных и интерпретируемых компилируемых методов;
- Использовать пакет DBMS_PARALLEL_EXECUTE.
- Анализ PL/SQL кода
- Использование предоставленных пакетов и словарных представлений для поиска программной информации;
- Определить типы идентификаторов и использований с PL/SCope;
- Использование DBMS_METADATA, предупреждений компилятора, условных компиляций.
Детальный контроль доступа для VPD
Edition-Based Redefinition
Тут я даже часть терминов не могу перевести. Не знаю, кому такой сложный экзамен нужен, лично мне — не нужен. Но, пока приходится работать с OracleDB, наверное, полезно помнить, что “есть и такое”.
PostgreSQL
Другая популярная БД, к тому же - с открытым кодом. По поиску “PostgreSQL certification” гугл выдаёт две ссылки - первая, какие-то “enterprisedb”, которые обещают сертификаты по этой БД. Вторая — тред 2003 года в котором сами разработчики обсуждали, нужна ли им официальная сертификация, и решили ничего не делать. Забавно, что один из участников даже пожаловался на “компании, которые ничего не вложили в развитие, а вместо этого лишь зарабатывают на нашем труде”.
Поскольку сертификатов нет, давайте попробуем хотя бы посмотреть на документацию, и выписать основные темы.
- Введение
- История PostgreSQL
- Язык SQL
- Синтаксис;
- Работа с данными, запросы;
- Типы данных, конверсии типов;
- Функции и операторы;
- Индексы;
- Поиск по тексту;
- Контроль многопоточности, советы с параллельностью;
- Советы к производительности.
- Администрирование
- Установка из исходников;
- Конфигурация работы сервера;
- Аутентификация, роли в БД;
- Работа с БД;
- Локализация;
- Рутинные операции, бекап и восстановление, мониторинги;
- Доступность, балансировка нагрузки, репликация;
- Надёжность и Write-Ahead лог;
- Логическая репликация;
- JIT;
- Регрессии.
- Клиентские интерфесы
- Большие Объекты;
- Информационная схема.
- Серверное программирование
- Расширение SQL;
- Триггеры;
- Система правил;
- Процедуральные ЯП;
- PL/pgSQL;
- PL/Python;
- Интерфейс для серверного программирования;
- Фоновые процессы воркеров;
- Логическое декодирование;
- Отслеживание прогресса репликации.
- Внутренности
- B-Tree;
- (+ Дополнительные 20 тем, которые нужны скорее разработчикам)
Пока читал документацию, аж интересно стало попробовать покопаться во внутренностях БД. До сих пор работать с ней мне доводилось лишь по схеме “запустить из докера для какого-нибудь пробного сервиса”, напрямую — нет. Жаль, что времени разбираться ближайшее время и не будет, но потом — как знать?
Фронтенд
Не нужен.
Linux. Red Hat Linux.
Список сертификатов от RedHat можно найти тут, вот только он неудобный — сложно понять что за чем идёт и от чего зависит. Гораздо проще и логичнее выглядит вот эта (уже, правда, устаревшая) таблица на Википедии.
Интересным вариантом выглядит Red Hat Certified Enterprise Microservices Developer. Что бы его получить, нужно сдать два экзамена: EX183 и EX283. В первом нужно продемонстрировать умение создавать энтерпрайзные CRUD-ы на JavaEE (Jakarta EE сейчас), во втором — писать микросервисы для работы в облаке: включая конфигурацию, MicroProfile, и прочие Health Check-и.
Всё это, конечно, очень хорошо, но не надо отвлекаться от того, ради чего мы пришли на сайт RedHat-а: получить знания по работе с линуксом. И вот тут есть проблема.
Первый уровень - RHCSA (Red Hat Certified System Administrator).
- Требования включают в себя:
- Понимать и уметь работать с файлами, папками и документацией из консоли;
- Писать простые скрипты;
- Работать с процессами, запускать и убивать виртуалки, работать с сервисами;
- Работать с партициями и логическими разделами;
- Настраивать файловую систему, включая безопасность, шифрование, списки контроля доступа и сетевые диски;
- Настраивать и поддерживать систему, включая установку, обновления и ключевые сервисы;
- Работа с пользователями и группами;
- Работа с безопасностью, включая firewall и SELinux;
- Базовая работа с контейнерами.
В общем, напугать таким экзаменом человека, поставившего себе ArchLinux на единственный ноутбук в чужой стране посреди учебного года невозможно. Сам экзамен выглядит как лабораторная работа, и даже интересно как это выглядит на практике. Сдав этот экзамен можно сдать ещё один - и стать сертифицированным инженером, а если набрать ещё пять — то и архитектором.
К сожалению, как я и писал уже выше, есть проблема - и это цена. В то время как у Оракла каждый экзамен стоит по 220 евро и действителен всю жизнь (а имеет смысл пока технология не устареет), то с Линуксом от красношапочников ситуация иная — каждый экзамен стоит по 425 евро и действителен лишь три года. Хочешь стать архитектором — пожалуйста, но тебе надо за 3 года сдать 7 экзаменов и титул ты будешь держать, пока хотя бы один из них не истечёт. Потом - “плоти” (и трать силы на подготовку) опять.
Так что получать эти экзамены имеет смысл только в том случае, если планируете извлекать из этого какую-то выгоду — консультировать, выбивать повышения на работе, или ещё что. Опять-таки, не каждый работодатель согласится оплачивать этот праздник жизни, а получать такую кучу экзаменов за свой счёт — роскошь, доступная не всем.
Вместо эпилога
Как-то так. Вроде материала мало, а написание статьи затянулось. Что главное - я для себя (потому что всё-равно этот блог нахрен никому не нужен) проглядел список сертификаций и смог хотя бы приблизительно оценить свои навыки. Думаю, что попробую в следующем году получить уровень профессионала 11-ой джавы. Дальше — будет видно.
-
Type promotion ↩︎
-
Use generics, including wildcards ↩︎
-
Prepared statements ↩︎
-
Advanced Report Generation ↩︎
-
Cartesian Products ↩︎
-
Set Operators - Операторы, комбинирующие результаты двух компонентов запроса в один результат: UNION, UNION ALL, INTERSECT, MINUS. ↩︎
-
Views ↩︎
-
Multidisciplinary - Items wherein concepts across multiple objectives will be tested in each item. Затрудняюсь дать адекватный перевод без понимания контекста. ↩︎