Forwarded from EPAM Campus UA
🎯 Easy, Medium, Hard: три сайти для підготовки до DevSecOps Fast Track
Вже цієї неділі, 15 серпня, закривається реєстрація на набір DevSecOps – напрям на стику кібербезпеки, системного адміністрування та хмарних середовищ ☁️
🔐 Щоб трохи попрактикуватися перед стартом програми або просто познайомитися з професією та зрозуміти, чи підходить вона вам, радимо потренуватися на одному з трьох сайтів різних рівней складності – Easy, Medium та Hard – які рекомендує Андрій Костромицький, керівник напрямів DevOps, BA та Python в EPAM University.
🐥 Easy: TryHackMe. Інтерактивний формат навчання, невеликі уроки, система винагород та beginner-friendly програма роблять цей сайт кращим другом початківця у кібербезпеці. Кажуть, що два тижні активного проходження уроків на цьому сайті замінюють два роки вивчення сухої теорії. Що ж, це точно варто перевірити самому!
🤯 Medium: Root Me. Більш як 400 різноманітних челенджів та близько 4400+ існуючих рішень, які запропонували юзери – тут є, де попрактикувати свій скіл як джуніору, так і досвідченому DevSecOps інженеру. На сайті можна обирати задачі 5 рівнів складності, обговорювати особливо складні кейси з ком'юніті, ну і, звісно, прокачувати свої знання з мереж, безпеки та будови вебсторінок.
😈 Hard: Offensive Security. "Бажання страждати є необхідним критерієм для закінчення цієї програми", – кажуть експерти з кібербезпеки та пентестінгу з досвідом 7+ років. Це – точно не сайт для початківців, але окрім челенджів від девелоперів Kali Linux, на сайті також можна знайти онлайн-курси, які вважаються чи не кращими з існуючих (але, звісно, не такими класними, як в EPAM University 😇). Відкривати тільки на свій страх та ризик!
🌟 Якщо ж після перегляду сайтів ви тільки впевнилися у своєму бажанні стати DevSecOps інженером, щоб незабаром будувати неприступні системи разом з командою EPAM, тоді DevSecOps Fast Track хоче бачити саме вас на програмі – приєднуйтесь!
Вже цієї неділі, 15 серпня, закривається реєстрація на набір DevSecOps – напрям на стику кібербезпеки, системного адміністрування та хмарних середовищ ☁️
🔐 Щоб трохи попрактикуватися перед стартом програми або просто познайомитися з професією та зрозуміти, чи підходить вона вам, радимо потренуватися на одному з трьох сайтів різних рівней складності – Easy, Medium та Hard – які рекомендує Андрій Костромицький, керівник напрямів DevOps, BA та Python в EPAM University.
🐥 Easy: TryHackMe. Інтерактивний формат навчання, невеликі уроки, система винагород та beginner-friendly програма роблять цей сайт кращим другом початківця у кібербезпеці. Кажуть, що два тижні активного проходження уроків на цьому сайті замінюють два роки вивчення сухої теорії. Що ж, це точно варто перевірити самому!
🤯 Medium: Root Me. Більш як 400 різноманітних челенджів та близько 4400+ існуючих рішень, які запропонували юзери – тут є, де попрактикувати свій скіл як джуніору, так і досвідченому DevSecOps інженеру. На сайті можна обирати задачі 5 рівнів складності, обговорювати особливо складні кейси з ком'юніті, ну і, звісно, прокачувати свої знання з мереж, безпеки та будови вебсторінок.
😈 Hard: Offensive Security. "Бажання страждати є необхідним критерієм для закінчення цієї програми", – кажуть експерти з кібербезпеки та пентестінгу з досвідом 7+ років. Це – точно не сайт для початківців, але окрім челенджів від девелоперів Kali Linux, на сайті також можна знайти онлайн-курси, які вважаються чи не кращими з існуючих (але, звісно, не такими класними, як в EPAM University 😇). Відкривати тільки на свій страх та ризик!
🌟 Якщо ж після перегляду сайтів ви тільки впевнилися у своєму бажанні стати DevSecOps інженером, щоб незабаром будувати неприступні системи разом з командою EPAM, тоді DevSecOps Fast Track хоче бачити саме вас на програмі – приєднуйтесь!
Forwarded from Java библиотека
Spring Boot with React and AWS: Learn to Deploy a Full Stack Spring Boot React Application to AWS (2021) PDF
Create and deploy full-stack Spring Boot applications with React and AWS. This practical and authoritative guide teaches you the fundamentals of Amazon Web Services with no prior experience.
You will start by learning the fundamentals of AWS, including EC2, S3, IAM, and load balancer. Next, you will learn to deploy a Spring Boot REST API to AWS with Elastic Beanstalk, which will give you the ability to build and deploy a Spring Boot application. You will explore the RDS relational database and create an instance of a MySQL database in AWS with RDS.
You will then deploy a Spring Boot application to MySQL in AWS and deploy a full-stack Spring Boot React application to AWS using Elastic Beanstalk and S3. Lastly, you will be introduced to ELB, CloudWatch, and Route 53. By the end of this book you will understand full-stack Spring Boot React applications and their deployment.
Create and deploy full-stack Spring Boot applications with React and AWS. This practical and authoritative guide teaches you the fundamentals of Amazon Web Services with no prior experience.
You will start by learning the fundamentals of AWS, including EC2, S3, IAM, and load balancer. Next, you will learn to deploy a Spring Boot REST API to AWS with Elastic Beanstalk, which will give you the ability to build and deploy a Spring Boot application. You will explore the RDS relational database and create an instance of a MySQL database in AWS with RDS.
You will then deploy a Spring Boot application to MySQL in AWS and deploy a full-stack Spring Boot React application to AWS using Elastic Beanstalk and S3. Lastly, you will be introduced to ELB, CloudWatch, and Route 53. By the end of this book you will understand full-stack Spring Boot React applications and their deployment.
#security #guide
Справочник по разработке безопасных веб-приложений: лучшие практики, анализ и исправление уязвимостей.
https://proglib.io/w/3e42e3da
Справочник по разработке безопасных веб-приложений: лучшие практики, анализ и исправление уязвимостей.
https://proglib.io/w/3e42e3da
vladtoie.gitbook.io
Secure Coding Handbook | Secure Coding Handbook
Forwarded from Тарас Кушмирук
Java_Оптимизация_программ_Практические.pdf
59.4 MB
Forwarded from Java: fill the gaps
Чем отличаются Dependency injection, Dependency invertion и Inversion of Control
Прошлый пост про Liskov, как говорится, "взорвал мой директ", поэтому на этой неделе расскажу про ещё два популярных принципа.
Сегодня про букву D из SOLID — Dependency Inversion. Что это, и чем отличается от Dependency injection и Inversion of Control. Понимание пригодится на собеседованиях, при чтении статей по дизайну и архитектуре.
Будем разбираться на простом примере: класс
1️⃣ Dependency injection
— компоненты создаются не внутри класса, а где-то в другом месте.
Как реализовать: перенести инициализацию логгера в конструктор или сеттер:
✅ Можно вынести всю конфигурацию в одно место. Или спихнуть часть забот фреймворку, например, Spring
⚔️Историческая справка
Когда Spring ещё не был популярен, в проектах использовался паттерн Service Locator.
Суть: компоненты создаются в классе ServiceLocator, а другие классы получают к ним доступ через статические методы:
▫️Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций
▫️Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракции
Как реализовать: использовать интерфейс логгера, а не конкретный класс
✅ Реализацию легко заменить
✅ Оба класса проще тестировать
Термин "абстракция" используется, потому что SOLID не привязан только к джаве. Группу методов можно выделить в интерфейс, в абстрактный класс и даже в обычный класс. Но интерфейс — наилучший вариант
3️⃣ IoC - Inversion of Control
В маленьких программах жизнь начинается в методе
Inversion of Control — это когда ход выполнения программы задаёт фреймворк. Например, Spring создаёт объекты, принимает запросы и не даёт программе завершиться.
Как реализовать: использовать аннотации фреймворка
✅ Низкая связность — код легко читать, менять и тестировать
Резюме:
🔸Dependency injection — класс не создаёт компоненты напрямую, они передаются через конструктор или сеттер
🔸Dependency invertion — класс работает с другими компонентами через интерфейс
🔸Inversion of Control — ход программы задаёт фреймворк
❗️Ответ на вопрос перед постом:
Это словоблудие относится к Dependency injection
Прошлый пост про Liskov, как говорится, "взорвал мой директ", поэтому на этой неделе расскажу про ещё два популярных принципа.
Сегодня про букву D из SOLID — Dependency Inversion. Что это, и чем отличается от Dependency injection и Inversion of Control. Понимание пригодится на собеседованиях, при чтении статей по дизайну и архитектуре.
Будем разбираться на простом примере: класс
Service записывает логи в файл через класс FileLogger:class FileLogger {…}
class Service {
FileLogger logger=new FileLogger();
}
Сделаем код чуть лучше с помощью разных принципов:1️⃣ Dependency injection
— компоненты создаются не внутри класса, а где-то в другом месте.
Как реализовать: перенести инициализацию логгера в конструктор или сеттер:
class Service {
FileLogger logger;
Service (FileLogger logger) {
this.logger=logger;
}
}
✅ Класс занимается только своей бизнес-логикой✅ Можно вынести всю конфигурацию в одно место. Или спихнуть часть забот фреймворку, например, Spring
⚔️Историческая справка
Когда Spring ещё не был популярен, в проектах использовался паттерн Service Locator.
Суть: компоненты создаются в классе ServiceLocator, а другие классы получают к ним доступ через статические методы:
class ServiceLocator {
static Logger logger = …
static Logger getLogger() {
return logger;
}
}
class Service {
Logger logger=ServiceLocator.getLogger();
}
2️⃣ Dependency invertion (D из SOLID)▫️Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций
▫️Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракции
Как реализовать: использовать интерфейс логгера, а не конкретный класс
interface Logger {…}
class FileLogger implements Logger {…}
class Service {
Logger logger=new FileLogger();
}
✅ Интерфейс проще использовать, так как методов меньше✅ Реализацию легко заменить
✅ Оба класса проще тестировать
Термин "абстракция" используется, потому что SOLID не привязан только к джаве. Группу методов можно выделить в интерфейс, в абстрактный класс и даже в обычный класс. Но интерфейс — наилучший вариант
3️⃣ IoC - Inversion of Control
В маленьких программах жизнь начинается в методе
main. Программист создаёт объекты и вызывает их методы, все шаги явно прописаны.Inversion of Control — это когда ход выполнения программы задаёт фреймворк. Например, Spring создаёт объекты, принимает запросы и не даёт программе завершиться.
Как реализовать: использовать аннотации фреймворка
@Component class FileLogger {…}
@Component class Service {
@Autowired
FileLogger logger;
}
✅ Меньше скучного кода✅ Низкая связность — код легко читать, менять и тестировать
Резюме:
🔸Dependency injection — класс не создаёт компоненты напрямую, они передаются через конструктор или сеттер
🔸Dependency invertion — класс работает с другими компонентами через интерфейс
🔸Inversion of Control — ход программы задаёт фреймворк
❗️Ответ на вопрос перед постом:
Это словоблудие относится к Dependency injection
Forwarded from Java книги по программированию
Forwarded from Java библиотека
В чем разница между COUNT(*) и COUNT({column})?
COUNT (*) подсчитывает количество записей в таблице, не игнорируя значение NULL, поскольку эта функция оперирует записями, а не столбцами.COUNT ({column}) подсчитывает количество значений в {column}. При подсчете количества значений столбца эта форма функции COUNT не принимает во внимание значение NULL.Forwarded from Java библиотека
Что такое «модульное тестирование»?
Модульное/компонентное тестирование (
Модульные тесты можно условно поделить на две группы:
• тесты состояния (
• тесты взаимодействия (
Модульное/компонентное тестирование (
unit testing) - процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.Модульные тесты можно условно поделить на две группы:
• тесты состояния (
state based), проверяющие что вызываемый метод объекта отработал корректно, проверяя состояние тестируемого объекта после вызова метода.• тесты взаимодействия (
interaction tests), в которых тестируемый объект производит манипуляции с другими объектами. Применяются, когда требуется удостовериться, что тестируемый объект корректно взаимодействует с другими объектами.Forwarded from Java библиотека
Чем stub отличается от mock?
stub используется как заглушка сервисов, методов, классов и т.д. с заранее запрограммированным ответом на вызовы.mock использует подмену результатов вызова, проверяет сам факт взаимодействия, протоколирует и контролирует его.Forwarded from EPAM Campus UA
👨💻👩💻ТОП-15 корисних посилань для самопідготовки в ІТ
Скоро ми переможемо і на Україну чекає хвиля змін, інноваційний прорив та економічне зростання. Нашій країні знадобиться ще більше кваліфікованих ІТ-фахівців, які зможуть підкорити цю хвилю своєю майстерністю та технічними рішеннями. Саме тому наша рекомендація дуже проста: якщо ви та близькі в безпеці та маєте можливість подумати про майбутнє – починайте готуватись до нього вже зараз!
Ми підготували перелік корисних посилань для ІТ-початківців, які тільки починають свій професійний шлях або тих, хто планує змінити свою теперішню кар’єру.
1) ENGLISH🔥 English Self-Study Materials | Безліч корисних матеріалів за всіма рівнями, що підійдуть для кожного.
2) BASICS🔥 Harvard course CS50 - курс CS50 Гарвардського університету вважається найкращим з основ програмування в світі. Він розрахований як на повних новачків, так і на більш досвідчених в програмуванні. Програма включає лекції та практичні завдання.
3) FRONTEND🔥 Codecademy HTML & CSS - зрозуміти, як працює HTML и CSS – першочергова задача всіх, хто хоче почати вивчення будь-якої професії в ІТ. А в CodeAcademy є досить багато онлайн курсів за усіма напрямками в ІТ.
+ W3SCHOOLS – англомовний ресурс для самостійного вивчення FrontEnd, тут завжди найновіша та найбільш актуальна інформація.
4) JAVA🔥 The Java™ Tutorials – оригінальна документація компанії Oracle з мови Java. Основа основ та першоджерело усіх знань з Java.
+ Корисна стаття на нашому порталі: «З чого почати?» Які знання необхідні розробнику-початківцю.
5) .NET🔥 Офіційна документація Microsoft з мови C# - тут є багато ресурсів для вивчення мови C#. Залежно від вашого досвіду програмування чи роботи з мовою C# та платформою .NET, вам будуть цікаві різні розділи цього посібника.
+підбірка Bookshelf початківця в .NET-розробці.
6) SOFTWARE TESTING🔥 Книга International Software Test Institute – ця книга охоплює всі аспекти тестування програмного забезпечення, розповідаючи про всі процеси, метрики та ризики в тестуванні.
+стаття Що читати та дивитися тестувальнику-початківцю.
7) DEVOPS🔥Матеріали для самопідготовки та безліч корисних матеріалів від EPAM University.
8 ) BUSINESS ANALYSIS🔥 Для чого потрібен бізнес-аналіз і хто такі бізнес-аналітики?
+стаття Що роблять бізнес-аналітики в ІТ, необхідні знання та вміння
9) BUSINESS INTELLIGENCE🔥 SQL Tutorial - для початківців та не тільки. Знадобиться в роботі ВІ не одну сотню разів.
10) 🔗А також, дуже рекомендуємо зберегти собі розділ з матеріалами на нашому EPAM Training Portal, де ми зібрали безліч корисних статей та додаткових важливих посилань.
💙💛Все буде Україна!
Скоро ми переможемо і на Україну чекає хвиля змін, інноваційний прорив та економічне зростання. Нашій країні знадобиться ще більше кваліфікованих ІТ-фахівців, які зможуть підкорити цю хвилю своєю майстерністю та технічними рішеннями. Саме тому наша рекомендація дуже проста: якщо ви та близькі в безпеці та маєте можливість подумати про майбутнє – починайте готуватись до нього вже зараз!
Ми підготували перелік корисних посилань для ІТ-початківців, які тільки починають свій професійний шлях або тих, хто планує змінити свою теперішню кар’єру.
1) ENGLISH🔥 English Self-Study Materials | Безліч корисних матеріалів за всіма рівнями, що підійдуть для кожного.
2) BASICS🔥 Harvard course CS50 - курс CS50 Гарвардського університету вважається найкращим з основ програмування в світі. Він розрахований як на повних новачків, так і на більш досвідчених в програмуванні. Програма включає лекції та практичні завдання.
3) FRONTEND🔥 Codecademy HTML & CSS - зрозуміти, як працює HTML и CSS – першочергова задача всіх, хто хоче почати вивчення будь-якої професії в ІТ. А в CodeAcademy є досить багато онлайн курсів за усіма напрямками в ІТ.
+ W3SCHOOLS – англомовний ресурс для самостійного вивчення FrontEnd, тут завжди найновіша та найбільш актуальна інформація.
4) JAVA🔥 The Java™ Tutorials – оригінальна документація компанії Oracle з мови Java. Основа основ та першоджерело усіх знань з Java.
+ Корисна стаття на нашому порталі: «З чого почати?» Які знання необхідні розробнику-початківцю.
5) .NET🔥 Офіційна документація Microsoft з мови C# - тут є багато ресурсів для вивчення мови C#. Залежно від вашого досвіду програмування чи роботи з мовою C# та платформою .NET, вам будуть цікаві різні розділи цього посібника.
+підбірка Bookshelf початківця в .NET-розробці.
6) SOFTWARE TESTING🔥 Книга International Software Test Institute – ця книга охоплює всі аспекти тестування програмного забезпечення, розповідаючи про всі процеси, метрики та ризики в тестуванні.
+стаття Що читати та дивитися тестувальнику-початківцю.
7) DEVOPS🔥Матеріали для самопідготовки та безліч корисних матеріалів від EPAM University.
8 ) BUSINESS ANALYSIS🔥 Для чого потрібен бізнес-аналіз і хто такі бізнес-аналітики?
+стаття Що роблять бізнес-аналітики в ІТ, необхідні знання та вміння
9) BUSINESS INTELLIGENCE🔥 SQL Tutorial - для початківців та не тільки. Знадобиться в роботі ВІ не одну сотню разів.
10) 🔗А також, дуже рекомендуємо зберегти собі розділ з матеріалами на нашому EPAM Training Portal, де ми зібрали безліч корисних статей та додаткових важливих посилань.
💙💛Все буде Україна!
Forwarded from Библиотека программиста
Разбор 4х задач по SQL, которые могут встретиться на собеседовании.
Напомним, что недавно мы публиковали серию руководств по SQL для начинающих. Можно подтянуть знания 💪:
🔗 Часть 1
🔗 Часть 2
🔗 Часть 3
Напомним, что недавно мы публиковали серию руководств по SQL для начинающих. Можно подтянуть знания 💪:
🔗 Часть 1
🔗 Часть 2
🔗 Часть 3
NOP::Nuances of programming
Руководство по подготовке к собеседованию по SQL
Готовитесь к собеседованию по SQL? Разбираем задачи, которые может предложить потенциальный работодатель.
Forwarded from Java: fill the gaps
Идемпотентность
Идемпотентная операция — операция, которая при многократном вызове оставляет систему в одном и том же состоянии. Это значит, что:
🔸 Возвращаемый результат один и тот же
🔸 Сайд эффекты не накапливаются
Неважно сколько раз вызван метод — эффект будет одинаковый. Что может быть сайд-эффектом: запись в БД, обновление статистики, запись в файл, изменение общих переменных.
Примеры идемпотентных операций:
✅ Удалить элемент с id=50
(10 вызовов → 1 удаление)
❌ Удалить элемент максимального размера
(10 вызовов → 10 удалённых элементов)
✅ Прочитать число из БД, умножить результат на 2 и вернуть пользователю
❌ Прочитать число из БД и обновить статистику запросов
В чём смысл?
Идемпотентные операции повышают устойчивость системы.
Допустим, мы отправили запрос на сервер, и соединение пропало. Спустя 3 секунды восстановилось. Возникает дилемма:
🤔 Отправить запрос ещё раз? Но вдруг он уже был обработан…
🤔 Может не отправлять? А если предыдущий пропал…
Запрос либо дублируется, либо теряется. Для идемпотентного запроса такой проблемы нет, можно спокойно отправить его ещё раз.
На собеседованиях вопрос идемпотентности обычно обсуждают со стороны HTTP вызовов. Нужно сказать, что
Но жизнь чуть сложнее.
🔹 Во-первых, идемпотентность зависит от бизнес-логики, а не от выбранного метода
Здесь самое сложное — держать под контролем сайд эффекты. Возьмём как пример увеличение счётчика в БД:
Добавить в таблицу (и сущность) поле version. Клиент передаёт номер текущей версии при обновлении. Запрос получается такой:
Клиент генерирует ID и добавляет его в хэдер HTTP запроса:
Процесс фильтрации дубликатов называется дедупликацией.
❓ Выглядит как лишняя сложность, нужна ли вообще идемпотентность?
Исходная проблема — что делать с только что отправленными запросами при потере связи. Идемпотентность и повторная отправка — рабочий способ, но не единственный. О другом расскажу в следующем посте.
Идемпотентная операция — операция, которая при многократном вызове оставляет систему в одном и том же состоянии. Это значит, что:
🔸 Возвращаемый результат один и тот же
🔸 Сайд эффекты не накапливаются
Неважно сколько раз вызван метод — эффект будет одинаковый. Что может быть сайд-эффектом: запись в БД, обновление статистики, запись в файл, изменение общих переменных.
Примеры идемпотентных операций:
✅ Удалить элемент с id=50
(10 вызовов → 1 удаление)
❌ Удалить элемент максимального размера
(10 вызовов → 10 удалённых элементов)
✅ Прочитать число из БД, умножить результат на 2 и вернуть пользователю
❌ Прочитать число из БД и обновить статистику запросов
В чём смысл?
Идемпотентные операции повышают устойчивость системы.
Допустим, мы отправили запрос на сервер, и соединение пропало. Спустя 3 секунды восстановилось. Возникает дилемма:
🤔 Отправить запрос ещё раз? Но вдруг он уже был обработан…
🤔 Может не отправлять? А если предыдущий пропал…
Запрос либо дублируется, либо теряется. Для идемпотентного запроса такой проблемы нет, можно спокойно отправить его ещё раз.
На собеседованиях вопрос идемпотентности обычно обсуждают со стороны HTTP вызовов. Нужно сказать, что
GET, PUT and DELETE идемпотентные, а POST — нет.Но жизнь чуть сложнее.
🔹 Во-первых, идемпотентность зависит от бизнес-логики, а не от выбранного метода
Здесь самое сложное — держать под контролем сайд эффекты. Возьмём как пример увеличение счётчика в БД:
UPDATE t SET value=value+1Как сделать его идемпотентным?
Добавить в таблицу (и сущность) поле version. Клиент передаёт номер текущей версии при обновлении. Запрос получается такой:
UPDATE t SET value=value+1, version=version+1 WHERE version=88🔹 Во-вторых, POST запросы можно сделать идемпотентными. Например так:
Клиент генерирует ID и добавляет его в хэдер HTTP запроса:
Idempotency-Key: 4872934Сервис хранит у себя список ID недавних запросов. Если операции с таким ID ещё не было, сервис начнет выполнение.
Процесс фильтрации дубликатов называется дедупликацией.
❓ Выглядит как лишняя сложность, нужна ли вообще идемпотентность?
Исходная проблема — что делать с только что отправленными запросами при потере связи. Идемпотентность и повторная отправка — рабочий способ, но не единственный. О другом расскажу в следующем посте.