#internship - стажировки и вакансии
#hack - хакатоны и соревнования
#resources - полезные ресурсы
#skills - навыки
#news - новости
#error - частые ошибки
#hack - хакатоны и соревнования
#resources - полезные ресурсы
#skills - навыки
#news - новости
#error - частые ошибки
🐳2 1
#skills
Новое исследование Яндекса - карта навыков Frontend-разработчиков.
Hard-скиллы собирали по запросам, на которые поисковик выдавал ссылки на Stack Overflow. По итогу, из карты можно узнать:
🔸какие навыки фронтендеры чаще используют в работе
🔸какие скиллы самые популярные (это можно определить по размеру тега в облаке)
🔸какие навыки связаны друг с другом (если навыки рядом, значит, их искали вместе)
🔸какие фреймворки и инструменты стали популярнее по сравнению с прошлым годом.
🔗Посмотреть исследование
Новое исследование Яндекса - карта навыков Frontend-разработчиков.
Hard-скиллы собирали по запросам, на которые поисковик выдавал ссылки на Stack Overflow. По итогу, из карты можно узнать:
🔸какие навыки фронтендеры чаще используют в работе
🔸какие скиллы самые популярные (это можно определить по размеру тега в облаке)
🔸какие навыки связаны друг с другом (если навыки рядом, значит, их искали вместе)
🔸какие фреймворки и инструменты стали популярнее по сравнению с прошлым годом.
🔗Посмотреть исследование
🐳5
#skills
Микросервисная архитектура: что, зачем и как.
🤨 Что это?
Микросервисы - независимые компоненты ПО, отвечающие за свои конкретные задачи.
🤷♂️ Кому это нужно?
Подходит, если нужны гибкость, масштабируемость и независимость в разработке.
💡 Разберемся на примере.
Представим онлайн магазин с микросервисной архитектурой. Вот как он устроен:
1. Каталог товаров.
🚀 Хранит данные о товарах, ценах.
🛠️ Работает на NodeJs, использует бд PostgreSQL для хранения данных.
2. Управление корзиной.
🚀 Управляет товарами в корзине.
🛠️ Использует Redis для хранения корзин.
3. Оформление заказа.
🚀 Обрабатывает платежи
🛠️ Подключается к API внешних платежных систем.
4. Инвентаризация товаров.
🚀 Отслеживает товары на складе.
5. Рекомендации.
🚀 Использует машинное обучения для рекомендаций товаров.
🛠️ Работает на Python.
Инфраструктура:
✅ Каждый из этих микросервисов обернут в свой Docker контейнер.
✅ Используется Kubernetes для управления контейнерами.
✅ RabbitMQ для обмена сообщениями между сервисами.
Микросервисная архитектура: что, зачем и как.
🤨 Что это?
Микросервисы - независимые компоненты ПО, отвечающие за свои конкретные задачи.
🤷♂️ Кому это нужно?
Подходит, если нужны гибкость, масштабируемость и независимость в разработке.
💡 Разберемся на примере.
Представим онлайн магазин с микросервисной архитектурой. Вот как он устроен:
1. Каталог товаров.
🚀 Хранит данные о товарах, ценах.
🛠️ Работает на NodeJs, использует бд PostgreSQL для хранения данных.
2. Управление корзиной.
🚀 Управляет товарами в корзине.
🛠️ Использует Redis для хранения корзин.
3. Оформление заказа.
🚀 Обрабатывает платежи
🛠️ Подключается к API внешних платежных систем.
4. Инвентаризация товаров.
🚀 Отслеживает товары на складе.
5. Рекомендации.
🚀 Использует машинное обучения для рекомендаций товаров.
🛠️ Работает на Python.
Инфраструктура:
✅ Каждый из этих микросервисов обернут в свой Docker контейнер.
✅ Используется Kubernetes для управления контейнерами.
✅ RabbitMQ для обмена сообщениями между сервисами.
👍7
#skills
🤖 Алгоритмы и структуры данных — ключевые навыки для создания эффективных и надежных программ.
🔍 Зачем они нужны?
— Оптимизация времени выполнения: Хорошо спроектированные алгоритмы существенно ускоряют программы.
— Эффективное использование ресурсов: А это значит, что и платить за VDS нужно будет меньше.
— Решение сложных задач: Многие задачи в IT вообще не решить без знаний об алгоритмах и структурах данных.
— Востребованность на рынке: Без них вас не возьмут ни в одну настоящую IT компанию.
🤷♂️ Кому они нужны?
1) Всем.
👶: "Но я же фронтендер, мне не нужны алгоритмы"
Дело не в том, что алгоритмы полезны в работе. Это навык, который показывает, что ты способен проявлять хоть какую-то умственную активность.
Не умеешь решать алгосы - ничего страшного, в новых постах расскажу про основные алгоритмы.
🤖 Алгоритмы и структуры данных — ключевые навыки для создания эффективных и надежных программ.
🔍 Зачем они нужны?
— Оптимизация времени выполнения: Хорошо спроектированные алгоритмы существенно ускоряют программы.
— Эффективное использование ресурсов: А это значит, что и платить за VDS нужно будет меньше.
— Решение сложных задач: Многие задачи в IT вообще не решить без знаний об алгоритмах и структурах данных.
— Востребованность на рынке: Без них вас не возьмут ни в одну настоящую IT компанию.
🤷♂️ Кому они нужны?
1) Всем.
👶: "Но я же фронтендер, мне не нужны алгоритмы"
Дело не в том, что алгоритмы полезны в работе. Это навык, который показывает, что ты способен проявлять хоть какую-то умственную активность.
Не умеешь решать алгосы - ничего страшного, в новых постах расскажу про основные алгоритмы.
👍6
#skills
📊 Краткая справка по основным сортировкам.
📌 Сортировки - это алгоритмы, которые упорядочивают элементы списка. Они играют важную роль в обработке данных.
1. Сортировка пузырьком (Bubble Sort)
📝 Проходит по списку, сравнивает соседние элементы и меняет их местами, если нужно.
🕒 O(n^2) - худший случай.
2. Сортировка выбором (Selection Sort)
📝 Ищет минимальный элемент и помещает его в начало списка, затем повторяет для остальных.
🕒 O(n^2).
3. Сортировка вставками (Insertion Sort)
📝 Вставляет каждый элемент в правильное место в уже отсортированной части списка.
🕒 O(n^2).
4. Сортировка слиянием (Merge Sort)
📝 Разделяет список на две половины, сортирует их, а затем сливает обратно в один отсортированный список.
🕒 O(n log n).
5. Быстрая сортировка (Quick Sort)
📝 Выбирает опорный элемент, разбивает список на элементы меньше и больше опорного, затем рекурсивно сортирует обе части.
🕒 O(n log n) в среднем.
📊 Краткая справка по основным сортировкам.
📌 Сортировки - это алгоритмы, которые упорядочивают элементы списка. Они играют важную роль в обработке данных.
1. Сортировка пузырьком (Bubble Sort)
📝 Проходит по списку, сравнивает соседние элементы и меняет их местами, если нужно.
🕒 O(n^2) - худший случай.
2. Сортировка выбором (Selection Sort)
📝 Ищет минимальный элемент и помещает его в начало списка, затем повторяет для остальных.
🕒 O(n^2).
3. Сортировка вставками (Insertion Sort)
📝 Вставляет каждый элемент в правильное место в уже отсортированной части списка.
🕒 O(n^2).
4. Сортировка слиянием (Merge Sort)
📝 Разделяет список на две половины, сортирует их, а затем сливает обратно в один отсортированный список.
🕒 O(n log n).
5. Быстрая сортировка (Quick Sort)
📝 Выбирает опорный элемент, разбивает список на элементы меньше и больше опорного, затем рекурсивно сортирует обе части.
🕒 O(n log n) в среднем.
👍6
#skills
Тренировки по алгоритмам, ML и DevOps от Яндекса.
💡 Можно сколько угодно учить теорию, но если хочешь стать программистом — нужно уметь решать настоящие задачи. Потренироваться их решать можно на тренировках от Яндекса.
Когда: 30 октября - 1 декабря
🔗 Регистрация
Тренировки по алгоритмам, ML и DevOps от Яндекса.
💡 Можно сколько угодно учить теорию, но если хочешь стать программистом — нужно уметь решать настоящие задачи. Потренироваться их решать можно на тренировках от Яндекса.
Когда: 30 октября - 1 декабря
🔗 Регистрация
👍4
#skills
📊 Справка по основным алгоритмам. Часть 1.
1. Binary Search (Бинарный поиск)
📝 Поиск элемента в упорядоченном списке. Сравниваем искомый элемент с серединой списка. Если искомый элемент меньше, поиск продолжается в левой половине, иначе - в правой
🕒 O(log n)
2. BFS (Поиск в ширину)
📝 Алгоритм обхода графа. Начинаем с корневого узла и расширяем поиск на все соседние узлы на текущем уровне. Используем очередь для отслеживания порядка обработки узлов.
🕒 O(V + E)
3. DFS (Поиск в глубину)
📝 Начинаем с корневого узла и идем вглубь по одной ветви до достижения конца, затем возвращаемся назад и исследуем следующую ветвь. Используем рекурсию или стек.
🕒 O(V + E)
4. Dijkstra's Algorithm (Алгоритм Дейкстры)
📝 Поиск кратчайшего пути в графе. Выбираем стартовую вершину и поддерживаем список кратчайших путей и их длину. Затем выбираем ближайшую непосещенную вершину и обновляем кратчайшие пути.
🕒 O(V^2)
📊 Справка по основным алгоритмам. Часть 1.
1. Binary Search (Бинарный поиск)
📝 Поиск элемента в упорядоченном списке. Сравниваем искомый элемент с серединой списка. Если искомый элемент меньше, поиск продолжается в левой половине, иначе - в правой
🕒 O(log n)
2. BFS (Поиск в ширину)
📝 Алгоритм обхода графа. Начинаем с корневого узла и расширяем поиск на все соседние узлы на текущем уровне. Используем очередь для отслеживания порядка обработки узлов.
🕒 O(V + E)
3. DFS (Поиск в глубину)
📝 Начинаем с корневого узла и идем вглубь по одной ветви до достижения конца, затем возвращаемся назад и исследуем следующую ветвь. Используем рекурсию или стек.
🕒 O(V + E)
4. Dijkstra's Algorithm (Алгоритм Дейкстры)
📝 Поиск кратчайшего пути в графе. Выбираем стартовую вершину и поддерживаем список кратчайших путей и их длину. Затем выбираем ближайшую непосещенную вершину и обновляем кратчайшие пути.
🕒 O(V^2)
👍6
#skills
📊 Справка по основным алгоритмам. Часть 2.
1. Алгоритм Кнута-Морриса-Пратта (KMP)
— Поиск подстроки в строке.
— Строим префикс-функцию, которая помогает определить, с какого символа начинать следующее сравнение при несовпадении символов.
— Это позволяет избежать повторных сравнений.
— O(m + n), m - длина строки, n - длина подстроки
2. Динамическое программирование
— Решение сложных задач путем разбиения их на более простые подзадачи.
— Результаты подзадач сохраняются и используются для решения более крупных задач.
3. Жадные алгоритмы
— Алгоритмы, которые выбирают лучший вариант на каждом шаге, надеясь, что это приведет к оптимальному решению.
— Жадные алгоритмы просты в реализации и быстро работают, но не всегда дают оптимальный результат.
📊 Справка по основным алгоритмам. Часть 2.
1. Алгоритм Кнута-Морриса-Пратта (KMP)
— Поиск подстроки в строке.
— Строим префикс-функцию, которая помогает определить, с какого символа начинать следующее сравнение при несовпадении символов.
— Это позволяет избежать повторных сравнений.
— O(m + n), m - длина строки, n - длина подстроки
2. Динамическое программирование
— Решение сложных задач путем разбиения их на более простые подзадачи.
— Результаты подзадач сохраняются и используются для решения более крупных задач.
3. Жадные алгоритмы
— Алгоритмы, которые выбирают лучший вариант на каждом шаге, надеясь, что это приведет к оптимальному решению.
— Жадные алгоритмы просты в реализации и быстро работают, но не всегда дают оптимальный результат.
👍4
#skills
Паттерны проектирования. Часть 1.
🤨 Что это?
Архитектурные практики в разработке ПО. Это не конкретные алгоритмы или код, а скорее общие принципы и рекомендации, которые можно применять в различных контекстах.
🤷♂️ Зачем они нужны?
Помогают организовать код таким образом, чтобы он был более понятным, расширяемым и облегчал совместную работу разработчиков.
Паттерны можно разделить на несколько категроий:
🔸 Порождающие
Описывают, как создавать объекты. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов.
🔸 Структурные
Описывают, как создавать объекты и классы более крупных структур. Они помогают определить, как компоненты могут быть объединены в более крупные структуры.
🔸 Поведенческие
Управляют алгоритмами, обменом ответственностью и коммуникацией между объектами.
В следующих постах расскажу об основных паттернах и их применении.
Паттерны проектирования. Часть 1.
🤨 Что это?
Архитектурные практики в разработке ПО. Это не конкретные алгоритмы или код, а скорее общие принципы и рекомендации, которые можно применять в различных контекстах.
🤷♂️ Зачем они нужны?
Помогают организовать код таким образом, чтобы он был более понятным, расширяемым и облегчал совместную работу разработчиков.
Паттерны можно разделить на несколько категроий:
🔸 Порождающие
Описывают, как создавать объекты. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов.
🔸 Структурные
Описывают, как создавать объекты и классы более крупных структур. Они помогают определить, как компоненты могут быть объединены в более крупные структуры.
🔸 Поведенческие
Управляют алгоритмами, обменом ответственностью и коммуникацией между объектами.
В следующих постах расскажу об основных паттернах и их применении.
👍7
#skills
Паттерны проектирования. Часть 2.
Сегодня рассмотрим 3 популярных паттерна.
🔸 Singleton:
Гарантирует, что у класса есть только один экземпляр.
Зачем?
Применяется, когда нужен общий ресурс для всей системы. Например для логирования, управления соединениями с БД или конфигурацией.
🔸 Factory method:
Определяет интерфейс для создания объекта, но позволяет наследникам выбирать класс создаваемого объекта.
Зачем?
Чтобы создавать объекты без указания их конкретных классов.
Пример:
Абстрактный класс "Фигура", с фабричным методом "создатьФигуру()", который будет переопределен в каждом подклассе (Круг, Квадрат, Треугольник) для создания конкретных фигур.
🔸 Observer:
Определяет зависимость один-ко-многим между объектами так, что при изменении состояния объекта, все зависящие от него объекты уведомляются и обновлятся.
Зачем?
Когда один объект должен информировать другие об изменении своего состояния, например, в GUI, системах уведомлений, логировании и мониторинге.
Паттерны проектирования. Часть 2.
Сегодня рассмотрим 3 популярных паттерна.
🔸 Singleton:
Гарантирует, что у класса есть только один экземпляр.
Зачем?
Применяется, когда нужен общий ресурс для всей системы. Например для логирования, управления соединениями с БД или конфигурацией.
🔸 Factory method:
Определяет интерфейс для создания объекта, но позволяет наследникам выбирать класс создаваемого объекта.
Зачем?
Чтобы создавать объекты без указания их конкретных классов.
Пример:
Абстрактный класс "Фигура", с фабричным методом "создатьФигуру()", который будет переопределен в каждом подклассе (Круг, Квадрат, Треугольник) для создания конкретных фигур.
🔸 Observer:
Определяет зависимость один-ко-многим между объектами так, что при изменении состояния объекта, все зависящие от него объекты уведомляются и обновлятся.
Зачем?
Когда один объект должен информировать другие об изменении своего состояния, например, в GUI, системах уведомлений, логировании и мониторинге.
👍3❤🔥1
#skills
Программа UniCredit IT Academy
👨🏻🎓 Академия для начинающих Data-специалистов
Направления:
🔸 Аналитик хранилища данных
🔸 Разработчик хранилища данных
✅ Оффер после окончания программы:
Через восемь месяцев лучших участников программы пригласят в штат команды Data Office.
💰 Зарплата с первого дня программы:
Во время обучения (3 месяца) составляет 50 000 рублей, по итогам Вашей успеваемости индексируется — то есть чем лучше успеваемость, тем выше Ваш оклад.
✔️ Условия:
Москва и Московская область. Готовность посвящать программе от 35 часов в неделю. Студент 4-го курса и старше.
⏳ Дедлайн подачи заявок: 25 марта;
🔗 Подать заявку
Программа UniCredit IT Academy
👨🏻🎓 Академия для начинающих Data-специалистов
Направления:
🔸 Аналитик хранилища данных
🔸 Разработчик хранилища данных
✅ Оффер после окончания программы:
Через восемь месяцев лучших участников программы пригласят в штат команды Data Office.
💰 Зарплата с первого дня программы:
Во время обучения (3 месяца) составляет 50 000 рублей, по итогам Вашей успеваемости индексируется — то есть чем лучше успеваемость, тем выше Ваш оклад.
✔️ Условия:
Москва и Московская область. Готовность посвящать программе от 35 часов в неделю. Студент 4-го курса и старше.
⏳ Дедлайн подачи заявок: 25 марта;
🔗 Подать заявку
❤🔥1 1
#skills
База по Docker👍
📎 Что такое Docker?
Docker - платформа для контейнеризации приложений. Контейнер позволяет упаковывать приложения и все необходимые для их работы компоненты (библиотеки, зависимости и настройки) в единый блок.
🔖 Как начать работу?
1. Установка Docker:
Скачайте и установите Docker Desktop c официального сайта.
2. Запуск контейнера из образа:
Эта команда создаст и запустит контейнер Ubuntu, предоставляя интерактивный терминал (-it).
3. Работа с контейнером:
Внутри контейнера можно выполнять команды, устанавливать программы, изменять файлы.
4. Создание собственного Docker образа:
Опишите нужное окружение и зависимости в Dockerfile
Соберите образ:
5. Взаимодействие контейнеров:
Контейнеры могут взаимодействовать друг с другом и с внешним миром через сетевые мосты или пользовательские сети.
6. Docker Hub:
Docker Hub - это регистр образов Docker (Как GitHub для ваших репозиториев). Здесь можно найти готовые образы и опубликовать свои.
❗️ Зачем это нужно?
Позволяет создавать изолированные и переносимые окружения, что упрощает разработку, тестирование и развертывание приложений.
Ставьте реакции, если хотите больше такого контента👍
База по Docker
Устал каждый раз тратить 500 часов на то, чтобы настроить окружение для работы с проектом? Тут на помощь и приходит Docker!
Docker - платформа для контейнеризации приложений. Контейнер позволяет упаковывать приложения и все необходимые для их работы компоненты (библиотеки, зависимости и настройки) в единый блок.
1. Установка Docker:
Скачайте и установите Docker Desktop c официального сайта.
2. Запуск контейнера из образа:
docker run -it ubuntu
Эта команда создаст и запустит контейнер Ubuntu, предоставляя интерактивный терминал (-it).
3. Работа с контейнером:
Внутри контейнера можно выполнять команды, устанавливать программы, изменять файлы.
apt update
apt install nodejs
4. Создание собственного Docker образа:
Опишите нужное окружение и зависимости в Dockerfile
Соберите образ:
docker build -t myimage .
5. Взаимодействие контейнеров:
Контейнеры могут взаимодействовать друг с другом и с внешним миром через сетевые мосты или пользовательские сети.
6. Docker Hub:
Docker Hub - это регистр образов Docker (Как GitHub для ваших репозиториев). Здесь можно найти готовые образы и опубликовать свои.
Позволяет создавать изолированные и переносимые окружения, что упрощает разработку, тестирование и развертывание приложений.
Ставьте реакции, если хотите больше такого контента
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7 5👍1
#internship #skills
Открыт набор в Летние Школы в Яндекс!📱
🔖 В этом году компания запускает 5 школ:
— Школа разработки интерфейсов
— Школа бэкенд-разработки
— Школа мобильной разработки
— Школа аналитиков-разработчиков
— Школа менеджеров
❗️ Условия:
Обучение бесплатное, занятия можно совмещать с работой или учёбой.
Возрастных ограничений для поступления нет.
Лекции пройдут онлайн, практика — в офисах Яндекса в Москве, Санкт‑Петербурге и Екатеринбурге.
Компания оплатит билеты и проживание.
📎 Подать заявку
Открыт набор в Летние Школы в Яндекс!
Летние школы — это ежегодная образовательная программа Яндекса, больше половины выпускников которой становятся стажёрами и сотрудниками компании.
— Школа разработки интерфейсов
— Школа бэкенд-разработки
— Школа мобильной разработки
— Школа аналитиков-разработчиков
— Школа менеджеров
Обучение бесплатное, занятия можно совмещать с работой или учёбой.
Возрастных ограничений для поступления нет.
Лекции пройдут онлайн, практика — в офисах Яндекса в Москве, Санкт‑Петербурге и Екатеринбурге.
Компания оплатит билеты и проживание.
Please open Telegram to view this post
VIEW IN TELEGRAM
#skills
Короткая справка по Git!💻
Когда работаешь с большим проектом или в команде разработчиков, становится очень сложно уследить за всеми изменениями - поэтому программисты используют Git!
Как начать работу с Git?💻
1. Установите Git с официального сайта
2. Настройка Git:
3. Инициализируйте репозиторий:
4. Добавьте файлы (Так Git начнет отслеживать эти файлы):
5. Создайте коммит (Зафиксируйте текущее состояние проекта):
6. Git позволяет создавать (И затем объединять) ветки для независимой разаботки:
7. Сохранение изменений в удаленном репозитории:
8. Получение обновлений
Ставьте реакции, будет больше такого контента✔️
Короткая справка по Git!
Когда работаешь с большим проектом или в команде разработчиков, становится очень сложно уследить за всеми изменениями - поэтому программисты используют Git!
Git - это система контроля версий, которая помогает отслеживать изменения в коде, объединять изменения внесенные разными разработчиками, и в случае чего откатиться к одной из прошлых версий кода!
Как начать работу с Git?
1. Установите Git с официального сайта
2. Настройка Git:
git config --global user.name "name"
git config --global user.email "email@mail.ru"
3. Инициализируйте репозиторий:
cd path/to/your/project
git init
4. Добавьте файлы (Так Git начнет отслеживать эти файлы):
git add .
5. Создайте коммит (Зафиксируйте текущее состояние проекта):
git commit -m "Initial commit"
6. Git позволяет создавать (И затем объединять) ветки для независимой разаботки:
git branch new-feature
git checkout new-feature
git checkout master
git merge new-feature
7. Сохранение изменений в удаленном репозитории:
git remote add origin https://github.com/usr/repo.git
git push -u origin master
8. Получение обновлений
git pull origin master
Ставьте реакции, будет больше такого контента
Please open Telegram to view this post
VIEW IN TELEGRAM
#skills
Приёмы Рефакторинга. Часть 1.🔖
В этой серии постов мы рассмотрим различные ключевые приёмы рефакторинга, которые помогут Вам в этом.
1. Извлечение метода (Extract Method)
✔️ Решение
Выделите участок кода в новый метод (или функцию) и вызовите этот метод вместо старого кода.
2. Введение внешнего метода (Introduce Foreign Method)
✔️ Решение
Добавьте метод в клиентский класс и передавайте в него объект служебного класса в качестве аргумента.
Ставьте реакции если хотите 2 часть👍
Приёмы Рефакторинга. Часть 1.
Рефакторинг — это, в первую очередь, превращение грязного кода в чистый. Чистый и эффективный код не только облегчает поддержку и развитие проекта, но и уменьшает количество ошибок.
В этой серии постов мы рассмотрим различные ключевые приёмы рефакторинга, которые помогут Вам в этом.
1. Извлечение метода (Extract Method)
Проблема
У вас есть фрагмент кода, который можно сгруппировать.
def printOwing(self):
self.printBanner()
# print details
print("name:", self.name)
print("amount:", self.getOutstanding())
Выделите участок кода в новый метод (или функцию) и вызовите этот метод вместо старого кода.
def printOwing(self):
self.printBanner()
self.printDetails(self.getOutstanding())
def printDetails(self, outstanding):
print("name:", self.name)
print("amount:", outstanding)
2. Введение внешнего метода (Introduce Foreign Method)
Проблема
Служебный класс не содержит метода, который вам нужен, при этом у вас нет возможности добавить метод в этот класс.
class Report:
# ...
def sendReport(self):
nextDay = Date(self.previousEnd.getYear(),
self.previousEnd.getMonth(), self.previousEnd.getDate() + 1)
# ...
Добавьте метод в клиентский класс и передавайте в него объект служебного класса в качестве аргумента.
class Report:
# ...
def sendReport(self):
newStart = self._nextDay(self.previousEnd)
# ...
def _nextDay(self, arg):
return Date(arg.getYear(), arg.getMonth(), arg.getDate() + 1)
Ставьте реакции если хотите 2 часть
Please open Telegram to view this post
VIEW IN TELEGRAM
#skills
Приёмы Рефакторинга. Часть 2.🔖
В этой серии постов мы рассматриваем ключевые приёмы рефакторинга, которые помогут Вам поддерживать чистый и эффективный код.
1. Самоинкапсуляция поля (Self Encapsulate Field)
✔️ Решение
Создайте геттер и сеттер для поля, и пользуйтесь для доступа к полю только ими.
2. Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)
✔️ Решение
Создайте подклассы, которым соответствуют ветки условного оператора. В них создайте общий метод и переместите в него код из соответствующей ветки условного оператора. В последствии замените условный оператор на вызов этого метода. Таким образом, нужная реализация будет выбираться через полиморфизм в зависимости от класса объекта.
Надеемся это Вам поможет👍
Приёмы Рефакторинга. Часть 2.
В этой серии постов мы рассматриваем ключевые приёмы рефакторинга, которые помогут Вам поддерживать чистый и эффективный код.
1. Самоинкапсуляция поля (Self Encapsulate Field)
Проблема
Вы используете прямой доступ к приватным полями внутри класса.
class Range {
private int low, high;
boolean includes(int arg) {
return arg >= low && arg <= high;
}
}
Создайте геттер и сеттер для поля, и пользуйтесь для доступа к полю только ими.
class Range {
private int low, high;
boolean includes(int arg) {
return arg >= getLow() && arg <= getHigh();
}
int getLow() {
return low;
}
int getHigh() {
return high;
}
}
2. Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)
Проблема
У вас есть условный оператор, который, в зависимости от типа или свойств объекта, выполняет различные действия.
class Bird {
// ...
double getSpeed() {
switch (type) {
case EUROPEAN:
return getBaseSpeed();
case AFRICAN:
return getBaseSpeed() - getLoadFactor() * numberOfCoconuts;
case NORWEGIAN_BLUE:
return (isNailed) ? 0 : getBaseSpeed(voltage);
}
throw new RuntimeException("Should be unreachable");
}
}
Создайте подклассы, которым соответствуют ветки условного оператора. В них создайте общий метод и переместите в него код из соответствующей ветки условного оператора. В последствии замените условный оператор на вызов этого метода. Таким образом, нужная реализация будет выбираться через полиморфизм в зависимости от класса объекта.
abstract class Bird {
// ...
abstract double getSpeed();
}
class European extends Bird {
double getSpeed() {
return getBaseSpeed();
}
}
class African extends Bird {
double getSpeed() {
return getBaseSpeed() - getLoadFactor() * numberOfCoconuts;
}
}
class NorwegianBlue extends Bird {
double getSpeed() {
return (isNailed) ? 0 : getBaseSpeed(voltage);
}
}
// Somewhere in client code
speed = bird.getSpeed();
Надеемся это Вам поможет
Please open Telegram to view this post
VIEW IN TELEGRAM
#skills
Приёмы Рефакторинга. Часть 3.👍
В этой серии постов мы рассматриваем ключевые приёмы рефакторинга, которые помогут Вам поддерживать чистый и эффективный код.
1. Замена магического числа символьной константой
Решение✔️
Замените это число константой с человеко-читаемым названием, объясняющим смысл этого числа.
2. Введение Null-объекта
Решение✔️
Вместо null возвращайте Null-объект, который предоставляет поведение по умолчанию.
Ставьте реакции, если хотите больше таких постов!👍
Приёмы Рефакторинга. Часть 3.
В этой серии постов мы рассматриваем ключевые приёмы рефакторинга, которые помогут Вам поддерживать чистый и эффективный код.
1. Замена магического числа символьной константой
Проблема
В коде используется число, которое несёт какой-то определённый смысл.
double potentialEnergy(double mass, double height) {
return mass * height * 9.81;
}
Решение
Замените это число константой с человеко-читаемым названием, объясняющим смысл этого числа.
static final double GRAVITATIONAL_CONSTANT = 9.81;
double potentialEnergy(double mass, double height) {
return mass * height * GRAVITATIONAL_CONSTANT;
}
2. Введение Null-объекта
Проблема
Из-за того, что некоторые методы возвращают null вместо реальных объектов, у вас в коде присутствует множество проверок на null.
if (customer == null) {
plan = BillingPlan.basic();
}
else {
plan = customer.getPlan();
}
Решение
Вместо null возвращайте Null-объект, который предоставляет поведение по умолчанию.
class NullCustomer extends Customer {
boolean isNull() {
return true;
}
Plan getPlan() {
return new NullPlan();
}
// Some other NULL functionality.
}
// Replace null values with Null-object.
customer = (order.customer != null) ?
order.customer : new NullCustomer();
// Use Null-object as if it's normal subclass.
plan = customer.getPlan();
Ставьте реакции, если хотите больше таких постов!
Please open Telegram to view this post
VIEW IN TELEGRAM
#skills
Второй Сезон CodeRun!📱
Чтобы облегчить твой путь в IT Яндекс создал онлайн-тренажёр CodeRun
В нём можно: учиться, готовиться к техническим собесам, соревноваться и получать призы.
Направления:
Аналитика данных
Бэкенд
ML
Мобильная разработка
Фронтенд
📎 Зарегистрироваться
Второй Сезон CodeRun!
Чтобы облегчить твой путь в IT Яндекс создал онлайн-тренажёр CodeRun
В нём можно: учиться, готовиться к техническим собесам, соревноваться и получать призы.
Направления:
Аналитика данных
Бэкенд
ML
Мобильная разработка
Фронтенд
Please open Telegram to view this post
VIEW IN TELEGRAM
#skills
📦 Делимся огненной новостью: открылся новый набор на бесплатные IT-курсы от OZON - Route 256!
Вас ждут 5 потоков:
Middle — Go, C#, QA (Python)
Junior — Go, C#
А ещё🤩 :
— Два месяца онлайн-занятий в вечернее время
— Менторство от экспертов и тьюторов
— Опыт разработчиков Ozon
— Офферы/стажировки в команду для лучших выпускников.
✔️ Чтобы попасть на курс, нужно:
1. Подать заявку на сайте до 8 августа
2. Пройти отборочный контест до 11 августа.
Вас ждут 5 потоков:
Middle — Go, C#, QA (Python)
Junior — Go, C#
А ещё
— Два месяца онлайн-занятий в вечернее время
— Менторство от экспертов и тьюторов
— Опыт разработчиков Ozon
— Офферы/стажировки в команду для лучших выпускников.
1. Подать заявку на сайте до 8 августа
2. Пройти отборочный контест до 11 августа.
Please open Telegram to view this post
VIEW IN TELEGRAM
#skills
🔥 Полезные команды Bash, которые знает не каждый!
1️⃣ Генерация дерева проекта
📌 Эта команда создаст удобное представление структуры файлов и папок:
2️⃣ Замена текста во всех файлах в текущей директории
📌 Заменит old_text на new_text во всех .txt файлах:
3️⃣ Поиск процессов по имени
📌 Найдет все процессы, содержащие name:
4️⃣ Поиск и уничтожение процессов по порту
📌 Если знаешь, что какой-то сервис завис на порту (например, 8080), и нужно его прибить:
Это сразу найдёт и убьёт процесс, занимающий порт 8080. Больше не надо вручную искать PID! 🚀
5️⃣ Запуск последней выполненной команды с привилегиями sudo
📌 Если забыли написать sudo, просто выполните:
Это повторит последнюю введённую команду, но уже с sudo.
Хотите вторую часть? Ставьте 🔥 в комментариях!
🔥 Полезные команды Bash, которые знает не каждый!
Bash — мощный инструмент для автоматизации задач и работы с файлами.
1️⃣ Генерация дерева проекта
📌 Эта команда создаст удобное представление структуры файлов и папок:
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
2️⃣ Замена текста во всех файлах в текущей директории
📌 Заменит old_text на new_text во всех .txt файлах:
sed -i 's/old_text/new_text/g' *.txt
3️⃣ Поиск процессов по имени
📌 Найдет все процессы, содержащие name:
ps aux | grep name
4️⃣ Поиск и уничтожение процессов по порту
📌 Если знаешь, что какой-то сервис завис на порту (например, 8080), и нужно его прибить:
kill -9 $(lsof -t -i:8080)
Это сразу найдёт и убьёт процесс, занимающий порт 8080. Больше не надо вручную искать PID! 🚀
5️⃣ Запуск последней выполненной команды с привилегиями sudo
📌 Если забыли написать sudo, просто выполните:
sudo !!
Это повторит последнюю введённую команду, но уже с sudo.
Хотите вторую часть? Ставьте 🔥 в комментариях!