Сертификации

На пути к знаниям. И сертификатам

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-ой джавы. Дальше — будет видно.


  1. Type promotion ↩︎

  2. Use generics, including wildcards ↩︎

  3. Prepared statements ↩︎

  4. Advanced Report Generation ↩︎

  5. Non equijoins ↩︎

  6. Cartesian Products ↩︎

  7. Set Operators - Операторы, комбинирующие результаты двух компонентов запроса в один результат: UNION, UNION ALL, INTERSECT, MINUS. ↩︎

  8. Views ↩︎

  9. Multidisciplinary - Items wherein concepts across multiple objectives will be tested in each item. Затрудняюсь дать адекватный перевод без понимания контекста. ↩︎