/usr/bin/coding | Программирование
739 subscribers
122 photos
3 files
104 links
Подборки стажировок, вакансий, хакатонов и многое другое!
Download Telegram
#internship - стажировки и вакансии
#hack - хакатоны и соревнования
#resources - полезные ресурсы
#skills - навыки
#news - новости
#error - частые ошибки
🐳21
#skills
Новое исследование Яндекса - карта навыков Frontend-разработчиков.

Hard-скиллы собирали по запросам, на которые поисковик выдавал ссылки на Stack Overflow. По итогу, из карты можно узнать:

🔸какие навыки фронтендеры чаще используют в работе
🔸какие скиллы самые популярные (это можно определить по размеру тега в облаке)
🔸какие навыки связаны друг с другом (если навыки рядом, значит, их искали вместе)
🔸какие фреймворки и инструменты стали популярнее по сравнению с прошлым годом.

🔗Посмотреть исследование
🐳5
#skills
Микросервисная архитектура: что, зачем и как.

🤨 Что это?
Микросервисы - независимые компоненты ПО, отвечающие за свои конкретные задачи.

🤷‍♂️ Кому это нужно?
Подходит, если нужны гибкость, масштабируемость и независимость в разработке.

💡 Разберемся на примере.
Представим онлайн магазин с микросервисной архитектурой. Вот как он устроен:

1. Каталог товаров.
🚀 Хранит данные о товарах, ценах.
🛠️ Работает на NodeJs, использует бд PostgreSQL для хранения данных.

2. Управление корзиной.
🚀 Управляет товарами в корзине.
🛠️ Использует Redis для хранения корзин.

3. Оформление заказа.
🚀 Обрабатывает платежи
🛠️ Подключается к API внешних платежных систем.

4. Инвентаризация товаров.
🚀 Отслеживает товары на складе.

5. Рекомендации.
🚀 Использует машинное обучения для рекомендаций товаров.
🛠️ Работает на Python.

Инфраструктура:
Каждый из этих микросервисов обернут в свой Docker контейнер.
Используется Kubernetes для управления контейнерами.
RabbitMQ для обмена сообщениями между сервисами.
👍7
#skills
🤖 Алгоритмы и структуры данных — ключевые навыки для создания эффективных и надежных программ.

🔍 Зачем они нужны?
— Оптимизация времени выполнения: Хорошо спроектированные алгоритмы существенно ускоряют программы.

— Эффективное использование ресурсов: А это значит, что и платить за 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) в среднем.
👍6
#skills
Тренировки по алгоритмам, 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)
👍6
#skills
📊 Справка по основным алгоритмам. Часть 2.

1. Алгоритм Кнута-Морриса-Пратта (KMP)
— Поиск подстроки в строке.
— Строим префикс-функцию, которая помогает определить, с какого символа начинать следующее сравнение при несовпадении символов.
— Это позволяет избежать повторных сравнений.
O(m + n), m - длина строки, n - длина подстроки

2. Динамическое программирование
— Решение сложных задач путем разбиения их на более простые подзадачи.
— Результаты подзадач сохраняются и используются для решения более крупных задач.

3. Жадные алгоритмы
— Алгоритмы, которые выбирают лучший вариант на каждом шаге, надеясь, что это приведет к оптимальному решению.
— Жадные алгоритмы просты в реализации и быстро работают, но не всегда дают оптимальный результат.
👍4
#skills
Паттерны проектирования. Часть 1.

🤨 Что это?
Архитектурные практики в разработке ПО. Это не конкретные алгоритмы или код, а скорее общие принципы и рекомендации, которые можно применять в различных контекстах.

🤷‍♂️ Зачем они нужны?
Помогают организовать код таким образом, чтобы он был более понятным, расширяемым и облегчал совместную работу разработчиков.

Паттерны можно разделить на несколько категроий:
🔸 Порождающие
Описывают, как создавать объекты. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов.

🔸 Структурные
Описывают, как создавать объекты и классы более крупных структур. Они помогают определить, как компоненты могут быть объединены в более крупные структуры.

🔸 Поведенческие
Управляют алгоритмами, обменом ответственностью и коммуникацией между объектами.

В следующих постах расскажу об основных паттернах и их применении.
👍7
#skills
Паттерны проектирования. Часть 2.

Сегодня рассмотрим 3 популярных паттерна.

🔸 Singleton:
Гарантирует, что у класса есть только один экземпляр.

Зачем?
Применяется, когда нужен общий ресурс для всей системы. Например для логирования, управления соединениями с БД или конфигурацией.

🔸 Factory method:
Определяет интерфейс для создания объекта, но позволяет наследникам выбирать класс создаваемого объекта.

Зачем?
Чтобы создавать объекты без указания их конкретных классов.

Пример:
Абстрактный класс "Фигура", с фабричным методом "создатьФигуру()", который будет переопределен в каждом подклассе (Круг, Квадрат, Треугольник) для создания конкретных фигур.

🔸 Observer:
Определяет зависимость один-ко-многим между объектами так, что при изменении состояния объекта, все зависящие от него объекты уведомляются и обновлятся.

Зачем?
Когда один объект должен информировать другие об изменении своего состояния, например, в GUI, системах уведомлений, логировании и мониторинге.
👍3❤‍🔥1
#skills
Программа UniCredit IT Academy
👨🏻‍🎓 Академия для начинающих Data-специалистов

Направления:
🔸 Аналитик хранилища данных
🔸 Разработчик хранилища данных

Оффер после окончания программы:
Через восемь месяцев лучших участников программы пригласят в штат команды Data Office.

💰 Зарплата с первого дня программы:
Во время обучения (3 месяца) составляет 50 000 рублей, по итогам Вашей успеваемости индексируется — то есть чем лучше успеваемость, тем выше Ваш оклад.

✔️ Условия:
Москва и Московская область. Готовность посвящать программе от 35 часов в неделю. Студент 4-го курса и старше.

Дедлайн подачи заявок: 25 марта;

🔗 Подать заявку
❤‍🔥11
#skills
База по Docker 👍

Устал каждый раз тратить 500 часов на то, чтобы настроить окружение для работы с проектом? Тут на помощь и приходит Docker!


📎Что такое 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
❤‍🔥75👍1
#internship #skills
Открыт набор в Летние Школы в Яндекс! 📱

Летние школы — это ежегодная образовательная программа Яндекса, больше половины выпускников которой становятся стажёрами и сотрудниками компании.


🔖В этом году компания запускает 5 школ:

— Школа разработки интерфейсов
— Школа бэкенд-разработки
— Школа мобильной разработки
— Школа аналитиков-разработчиков
— Школа менеджеров

❗️Условия:
Обучение бесплатное, занятия можно совмещать с работой или учёбой.
Возрастных ограничений для поступления нет.

Лекции пройдут онлайн, практика — в офисах Яндекса в Москве, Санкт‑Петербурге и Екатеринбурге.

Компания оплатит билеты и проживание.

📎 Подать заявку
Please open Telegram to view this post
VIEW IN TELEGRAM
6
#skills
Короткая справка по 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
13👍4❤‍🔥3
#skills

Приёмы Рефакторинга. Часть 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
17
#skills

Приёмы Рефакторинга. Часть 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
6👎2👍1
#skills

Приёмы Рефакторинга. Часть 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
12
#skills
Второй Сезон CodeRun! 📱

Чтобы облегчить твой путь в IT Яндекс создал онлайн-тренажёр CodeRun
В нём можно: учиться, готовиться к техническим собесам, соревноваться и получать призы.

Направления:
Аналитика данных
Бэкенд
ML
Мобильная разработка
Фронтенд

📎Зарегистрироваться
Please open Telegram to view this post
VIEW IN TELEGRAM
4
#skills
📦 Делимся огненной новостью: открылся новый набор на бесплатные IT-курсы от OZON - Route 256!

Вас ждут 5 потоков:
Middle — Go, C#, QA (Python)
Junior — Go, C#

А ещё🤩:
— Два месяца онлайн-занятий в вечернее время
— Менторство от экспертов и тьюторов
— Опыт разработчиков Ozon
— Офферы/стажировки в команду для лучших выпускников.

✔️Чтобы попасть на курс, нужно:
1. Подать заявку на сайте до 8 августа
2. Пройти отборочный контест до 11 августа.
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#skills

🔥 Полезные команды 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.

Хотите вторую часть? Ставьте 🔥 в комментариях!
3❤‍🔥2👎1