TreeSet<E>
Реализация SortedSet<E>, основанная на красно-черном дереве. Автоматически сортирует элементы.
Особенности:
Уникальность: Да.
Порядок: Нет (игнорирует порядок вставки), но отсортирован по натуральному порядку или Comparator.
Сортировка: Да, всегда отсортирован.
Null: Не разрешен (NullPointerException при сравнении).
Big O: O(log n) для add/remove/contains (дерево балансировано).
Внутренняя работа: Элементы хранятся в узлах дерева, сравниваются через Comparable.compareTo() или Comparator.
Нюансы:
Элементы должны реализовывать Comparable<E> или предоставить Comparator при создании: new TreeSet<>(comparator).
Для custom классов: Реализуйте Comparable или Comparator, иначе ClassCastException.
Итерация: O(n), в отсортированном порядке.
Дополнительные методы: first(), last(), headSet(E to), tailSet(E from) — для подмножеств.
Thread-safety: Нет, используйте Collections.synchronizedSortedSet(new TreeSet<>()).
Память: Больше, чем HashSet, из-за структуры дерева.
Пример кода:
Применение множеств: Удаление дубликатов и проверка уникальности
Множества идеальны для задач, где нужна уникальность без дубликатов.
Удаление дубликатов:
Преобразуйте List или массив в Set — дубликаты автоматически удалятся.
Нюанс: Порядок может потеряться (используйте LinkedHashSet для сохранения).
Пример кода:
Проверка уникальности:
Используйте contains() для быстрой проверки наличия (O(1) в HashSet).
Или add() — если false, элемент уже есть.
Нюанс: Для больших данных Set эффективнее, чем перебор List (O(n)).
Пример кода:
Полезные советы для новичков
HashSet по умолчанию: Для большинства случаев уникальности.
Custom классы: Всегда реализуйте equals() и hashCode() (используйте IDE: Generate → equals() and hashCode()).
Comparator в TreeSet: Для custom сортировки: new TreeSet<>((a, b) -> a.compareTo(b)).
Удаление дубликатов: Удобно для списков из файлов или БД.
Память: TreeSet дороже по памяти, HashSet — оптимален.
Ошибки: ClassCastException в TreeSet без Comparable; ConcurrentModificationException при модификации во время итерации (используйте Iterator.remove()).
#Java #для_новичков #beginner #Collections #HashSet #LinkedHashSet #TreeSet
Реализация SortedSet<E>, основанная на красно-черном дереве. Автоматически сортирует элементы.
Особенности:
Уникальность: Да.
Порядок: Нет (игнорирует порядок вставки), но отсортирован по натуральному порядку или Comparator.
Сортировка: Да, всегда отсортирован.
Null: Не разрешен (NullPointerException при сравнении).
Big O: O(log n) для add/remove/contains (дерево балансировано).
Внутренняя работа: Элементы хранятся в узлах дерева, сравниваются через Comparable.compareTo() или Comparator.
Нюансы:
Элементы должны реализовывать Comparable<E> или предоставить Comparator при создании: new TreeSet<>(comparator).
Для custom классов: Реализуйте Comparable или Comparator, иначе ClassCastException.
Итерация: O(n), в отсортированном порядке.
Дополнительные методы: first(), last(), headSet(E to), tailSet(E from) — для подмножеств.
Thread-safety: Нет, используйте Collections.synchronizedSortedSet(new TreeSet<>()).
Память: Больше, чем HashSet, из-за структуры дерева.
Пример кода:
javaimport java.util.TreeSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Integer> numbers = new TreeSet<>();
numbers.add(5);
numbers.add(1);
numbers.add(3);
for (Integer num : numbers) {
System.out.println(num); //отсортировано
}
// С Comparator для обратного порядка
Set<Integer> reverseNumbers = new TreeSet<>((a, b) -> b - a);
reverseNumbers.add(5);
reverseNumbers.add(1);
reverseNumbers.add(3);
System.out.println(reverseNumbers); // [5, 3, 1]
}
}
Вывод: Элементы всегда отсортированы.
Применение множеств: Удаление дубликатов и проверка уникальности
Множества идеальны для задач, где нужна уникальность без дубликатов.
Удаление дубликатов:
Преобразуйте List или массив в Set — дубликаты автоматически удалятся.
Нюанс: Порядок может потеряться (используйте LinkedHashSet для сохранения).
Пример кода:
javaimport java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
List<String> duplicates = new ArrayList<>();
duplicates.add("Яблоко");
duplicates.add("Банан");
duplicates.add("Яблоко");
Set<String> unique = new HashSet<>(duplicates);
System.out.println(unique); // [Банан, Яблоко]
// С сохранением порядка
Set<String> orderedUnique = new LinkedHashSet<>(duplicates);
System.out.println(orderedUnique); // [Яблоко, Банан]
}
}
Вывод: Уникальные элементы, без дубликатов.
Проверка уникальности:
Используйте contains() для быстрой проверки наличия (O(1) в HashSet).
Или add() — если false, элемент уже есть.
Нюанс: Для больших данных Set эффективнее, чем перебор List (O(n)).
Пример кода:
javaimport java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<String> users = new HashSet<>();
users.add("user1");
if (users.contains("user2")) {
System.out.println("Пользователь существует");
} else {
users.add("user2");
System.out.println("Новый пользователь добавлен");
}
if (!users.add("user1")) {
System.out.println("Дубликат не добавлен"); // add возвращает false
}
}
}
Вывод: Проверка и добавление без дубликатов.
Полезные советы для новичков
HashSet по умолчанию: Для большинства случаев уникальности.
Custom классы: Всегда реализуйте equals() и hashCode() (используйте IDE: Generate → equals() and hashCode()).
Comparator в TreeSet: Для custom сортировки: new TreeSet<>((a, b) -> a.compareTo(b)).
Удаление дубликатов: Удобно для списков из файлов или БД.
Память: TreeSet дороже по памяти, HashSet — оптимален.
Ошибки: ClassCastException в TreeSet без Comparable; ConcurrentModificationException при модификации во время итерации (используйте Iterator.remove()).
#Java #для_новичков #beginner #Collections #HashSet #LinkedHashSet #TreeSet
👍3
Что выведет код?
#Tasks
import java.util.LinkedHashSet;
public class Task091025 {
public static void main(String[] args) {
LinkedHashSet<Integer> set = new LinkedHashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.remove(2);
set.add(2);
System.out.println(set);
}
}
#Tasks
👍1
👍2
Вопрос с собеседований
Что такое fail-fast и fail-safe итераторы?🤓
Ответ:
Fail-fast итераторы (например, у ArrayList, HashMap) выбрасывают ConcurrentModificationException, если коллекция изменилась во время обхода.
Fail-safe (например, у CopyOnWriteArrayList) работают с копией коллекции и не падают, но дороже по памяти.
#собеседование
Что такое fail-fast и fail-safe итераторы?
Ответ:
Fail-safe (например, у CopyOnWriteArrayList) работают с копией коллекции и не падают, но дороже по памяти.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Па́вел Вале́рьевич Ду́ров (род. 10 октября 1984, Ленинград, РСФСР, СССР) — российский предприниматель в сфере информационных технологий, основатель социальной сети «ВКонтакте» и кроссплатформенного мессенджера Telegram. В 2006 году вместе с братом Николаем Дуровым основал социальную сеть «ВКонтакте», которая быстро стала самой популярной соцсетью в России и многих странах СНГ. В 2014 году, после конфликта с новыми владельцами компании и давления со стороны российских властей, Дуров покинул пост генерального директора «ВКонтакте» и уехал из России.
Чжимин Лю ( кит .刘志明, родился 10 октября 1961 года в провинции Хэбэй , Китай) — китайско-британский информатик, известный своими работами по надёжному и трансформационному программированию (fault-tolerant programming by transformations).
Марк Снир (р. 10 октября 1948) — израильско-американский учёный, внёсший вклад в работу с параллельными системами и суперкомпьютерами, участвовал в разработке Blue Gene.
2006 — Начала работу социальная сеть «ВКонтакте».
#Biography #Birth_Date #Events #10Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Вот вы устроились IT-шником. Что нужно делать чтобы вас не сократили? 😉
Anonymous Poll
28%
Хорошо работать
45%
Иметь высокие экспертизы и стать незаменимым
3%
Пообещать засудить компанию
15%
Лизать зад тимлиду
10%
Подкармливать всех, в том числе и руководство, в офисе пончиками
👍2 1
Реактивное программирование
Обработка ошибок в реактивных стримах
Представьте ошибки как пороги в потоке событий: без обработки они останавливают течение, но с правильными операторами — поток продолжается, минимизируя простои. Это решает проблемы из первого поста: вместо жёстких сбоев в потоках или Future, где ошибка рушит всё, реактивный подход даёт контроль и устойчивость.
Обработка ошибок в Reactor строится на жизненном цикле: когда исключение возникает в потоке (в map, flatMap или источнике), срабатывает onError, прерывая onNext и onComplete. Но вместо того чтобы "падать", вы можете трансформировать ошибку в данные, повторить попытку или логировать.
Операторы — декларативные: добавляете в цепочку, и Reactor управляет асинхронностью, backpressure и распространением ошибок. Это делает код resilient (устойчивым): приложение не крашится, а адаптируется.
Базовая реакция: doOnError и onErrorMap
Сначала — простые операторы для наблюдения и модификации ошибок, без изменения потока.
- doOnError: дополнительная реакция на ошибку, как "хук" (зацепка). Полезен для логирования или метрик, не влияет на основной onError.
- onErrorMap: преобразует исключение в другое, для кастомизации (например, оборачивает в бизнес-ошибку).
Пример на Flux:
На Mono: аналогично, но для одиночного элемента.
Эти операторы решают проблему традиционных try-catch: вместо разбросанных блоков, всё в конвейере, читаемо и централизовано.
Восстановление: onErrorReturn и onErrorResume
Когда ошибка — не конец света, используйте fallback.
- onErrorReturn: возвращает фиксированное значение вместо ошибки. Простой запасной вариант.
- onErrorResume: более гибкий — заменяет ошибку новым Publisher (Mono/Flux). Можно генерировать динамически, в зависимости от исключения.
Пример с onErrorReturn:
С onErrorResume — условно:
onErrorResume позволяет ветвление: проверь тип ошибки и верни альтернативный поток. Это асинхронно: если fallback — Mono.delay, оно подождёт без блокировки.
Почему лучше CompletableFuture.handle?
Нет вложенных колбэков — цепочка линейна, ошибки интегрированы в конвейер.
#Java #middle #Reactor #doOnError #onErrorMap
Обработка ошибок в реактивных стримах
Представьте ошибки как пороги в потоке событий: без обработки они останавливают течение, но с правильными операторами — поток продолжается, минимизируя простои. Это решает проблемы из первого поста: вместо жёстких сбоев в потоках или Future, где ошибка рушит всё, реактивный подход даёт контроль и устойчивость.
Обработка ошибок в Reactor строится на жизненном цикле: когда исключение возникает в потоке (в map, flatMap или источнике), срабатывает onError, прерывая onNext и onComplete. Но вместо того чтобы "падать", вы можете трансформировать ошибку в данные, повторить попытку или логировать.
Операторы — декларативные: добавляете в цепочку, и Reactor управляет асинхронностью, backpressure и распространением ошибок. Это делает код resilient (устойчивым): приложение не крашится, а адаптируется.
Базовая реакция: doOnError и onErrorMap
Сначала — простые операторы для наблюдения и модификации ошибок, без изменения потока.
- doOnError: дополнительная реакция на ошибку, как "хук" (зацепка). Полезен для логирования или метрик, не влияет на основной onError.
- onErrorMap: преобразует исключение в другое, для кастомизации (например, оборачивает в бизнес-ошибку).
Пример на Flux:
import reactor.core.publisher.Flux;
import java.io.IOException;
Flux<String> riskyFlux = Flux.just("данные1", "данные2").map(data -> {
if (data.equals("данные2")) throw new IOException("Сбой ввода-вывода");
return data.toUpperCase();
});
riskyFlux
.doOnError(e -> System.err.println("Лог: " + e.getMessage())) // Логируем
.onErrorMap(e -> new RuntimeException("Обёрнутая ошибка: " + e)) // Преобразуем
.subscribe(
System.out::println,
error -> System.err.println("Финальная ошибка: " + error) // onError в подписке
);
// Вывод: "ДАННЫЕ1", потом лог "Сбой ввода-вывода", и финальная "Обёрнутая ошибка: ..."
Здесь doOnError срабатывает перед onErrorMap, а подписка ловит модифицированную ошибку. Это асинхронно: если ошибка в асинхронном подпотоке (flatMap), Reactor передаёт её downstream (дальше по цепи) без блокировок.
На Mono: аналогично, но для одиночного элемента.
Эти операторы решают проблему традиционных try-catch: вместо разбросанных блоков, всё в конвейере, читаемо и централизовано.
Восстановление: onErrorReturn и onErrorResume
Когда ошибка — не конец света, используйте fallback.
- onErrorReturn: возвращает фиксированное значение вместо ошибки. Простой запасной вариант.
- onErrorResume: более гибкий — заменяет ошибку новым Publisher (Mono/Flux). Можно генерировать динамически, в зависимости от исключения.
Пример с onErrorReturn:
Mono<String> httpMono = Mono.fromCallable(() -> {
// Симулируем HTTP-запрос
throw new RuntimeException("Сервер не отвечает");
}).onErrorReturn("Кэшированные данные");
httpMono.subscribe(System.out::println); // Вывод: "Кэшированные данные", потом onComplete
Здесь ошибка преобразуется в значение, поток завершается успешно.
С onErrorResume — условно:
Flux<Integer> calcFlux = Flux.range(1, 5).map(i -> {
if (i == 3) throw new ArithmeticException("Деление на ноль");
return 10 / (i - 3); // Симуляция
}).onErrorResume(e -> {
if (e instanceof ArithmeticException) {
return Flux.just(0, 0); // Fallback на нули
} else {
return Flux.error(e); // Пропустить другие ошибки
}
});
calcFlux.subscribe(System.out::println); // Вывод: элементы до ошибки, потом 0, 0, onComplete
onErrorResume позволяет ветвление: проверь тип ошибки и верни альтернативный поток. Это асинхронно: если fallback — Mono.delay, оно подождёт без блокировки.
Почему лучше CompletableFuture.handle?
Нет вложенных колбэков — цепочка линейна, ошибки интегрированы в конвейер.
#Java #middle #Reactor #doOnError #onErrorMap
👍2
Retry: повтор попыток при ошибке
Retry — для transient (временных) ошибок: сеть, временный сбой. Повторяет upstream (источник) заданное число раз.
- retry(long times): простая повторка.
- retryWhen(Retry strategy): с кастомной логикой (backoff — задержка, условия).
Пример базовый:
С retryWhen для экспоненциальной задержки (backoff):
Это предотвращает "молоток" (hammering) сервера: ждёт перед retry. Асинхронно: задержки не блокируют поток.
Retry решает боли блокировок: вместо цикла с sleep в традиционном коде, декларативно и эффективно.
Практические советы и подводные камни
- Комбинируйте: riskyFlux.doOnError(log).onErrorResume(fallback).retry(2) — лог + retry + fallback.
- Условия: в onErrorResume используйте instanceof для типов ошибок, чтобы не catch всё подряд.
- Глобально: используйте Hooks.onErrorDropped для непойманных ошибок (редко).
- Камень: retry на бесконечных потоках — вечный цикл; добавьте timeout() или maxAttempts.
- Тестирование: StepVerifier.create(flux).expectErrorMatches(e -> e instanceof IOException).verify();
В практике: в WebFlux — контроллер возвращает Mono с retry для внешних API, onErrorReturn для кэша.
плавному восстановлению, экономя ресурсы и упрощая код.
#Java #middle #Reactor #doOnError #onErrorMap
Retry — для transient (временных) ошибок: сеть, временный сбой. Повторяет upstream (источник) заданное число раз.
- retry(long times): простая повторка.
- retryWhen(Retry strategy): с кастомной логикой (backoff — задержка, условия).
Пример базовый:
Mono<String> flakyMono = Mono.defer(() -> {
if (Math.random() > 0.3) throw new RuntimeException("Временный сбой");
return Mono.just("Успех");
}).retry(3); // Повторить 3 раза
flakyMono.subscribe(System.out::println, Throwable::printStackTrace);
Здесь retry повторяет весь Mono при ошибке, до успеха или исчерпания попыток. Если все попытки fail — финальный onError.
С retryWhen для экспоненциальной задержки (backoff):
import reactor.util.retry.Retry;
flakyMono.retryWhen(Retry.backoff(3, Duration.ofSeconds(1))); // 3 попытки с задержкой 1с, 2с, 4с
Это предотвращает "молоток" (hammering) сервера: ждёт перед retry. Асинхронно: задержки не блокируют поток.
Retry решает боли блокировок: вместо цикла с sleep в традиционном коде, декларативно и эффективно.
Практические советы и подводные камни
- Комбинируйте: riskyFlux.doOnError(log).onErrorResume(fallback).retry(2) — лог + retry + fallback.
- Условия: в onErrorResume используйте instanceof для типов ошибок, чтобы не catch всё подряд.
- Глобально: используйте Hooks.onErrorDropped для непойманных ошибок (редко).
- Камень: retry на бесконечных потоках — вечный цикл; добавьте timeout() или maxAttempts.
- Тестирование: StepVerifier.create(flux).expectErrorMatches(e -> e instanceof IOException).verify();
В практике: в WebFlux — контроллер возвращает Mono с retry для внешних API, onErrorReturn для кэша.
плавному восстановлению, экономя ресурсы и упрощая код.
#Java #middle #Reactor #doOnError #onErrorMap
👍2
Что выведет код?
#Tasks
import reactor.core.publisher.Mono;
public class MonoExample {
public static void main(String[] args) {
Mono.just("Start")
.doOnNext(System.out::print)
.then(Mono.fromRunnable(() -> System.out.print("Middle")))
.thenReturn("End")
.subscribe(System.out::print);
}
}
#Tasks
👍1
Вопрос с собеседований
Чем отличается LinkedHashMap от HashMap?🤓
Ответ:
LinkedHashMap сохраняет порядок вставки элементов (или порядок доступа при включённом режиме accessOrder).
HashMap порядок не гарантирует.
LinkedHashMap удобен для кэшей, когда важен порядок добавления или использования.
#собеседование
Чем отличается LinkedHashMap от HashMap?
Ответ:
HashMap порядок не гарантирует.
LinkedHashMap удобен для кэшей, когда важен порядок добавления или использования.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Александр Андреевич Кузнецов (11 октября 1944 года — 6 января 2022 года, Москва, Россия) — советский и российский учёный-педагог, академик РАО (1999), вице-президент РАО. Более 30 лет проработал в Институте содержания и методов обучения РАО, где возглавлял лабораторию дидактики информатики, являлся академиком-секретарём Отделения общего среднего образования РАО, впоследствии был избран вице-президентом Российской академии образования.
1961 — на Семипалатинском полигоне осуществлён первый подземный ядерный взрыв.
1999 — Британский астроном Джон Мюррей (John Murray), исходя из своих расчётов, заявил, что вокруг Солнца по десятой орбите движется огромная планета, по размерам больше Юпитера.
#Biography #Birth_Date #Events #11Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
С 04.10 по 10.10
Предыдущий пост(с 27.09 по 03.10)
Воскресный мотивационный пост:
А сколько вы жмете от груди?
Выбранная голосованием тема:
Аспектно-ориентированное программирование в Java (AOP)
Запись встреч/видео:
Не проводилось
Обучающие статьи:
Реактивное программирование
Базовые операторы в Reactor: map, filter, flatMap
Комбинации потоков в Reactor: concat, merge и другие
Обработка ошибок в реактивных стримах
Java:
Коллекции в Java
Глава 3. Set — множества
Интерфейс Set. Особенности множеств
Реализации: HashSet, LinkedHashSet, TreeSet
Полезные статьи и видео:
Защита своего приложения с помощью JWT и Spring Security
Идемпотентность: больше, чем кажется
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
Предыдущий пост(с 27.09 по 03.10)
Воскресный мотивационный пост:
А сколько вы жмете от груди?
Выбранная голосованием тема:
Аспектно-ориентированное программирование в Java (AOP)
Запись встреч/видео:
Не проводилось
Обучающие статьи:
Реактивное программирование
Базовые операторы в Reactor: map, filter, flatMap
Комбинации потоков в Reactor: concat, merge и другие
Обработка ошибок в реактивных стримах
Java:
Коллекции в Java
Глава 3. Set — множества
Интерфейс Set. Особенности множеств
Реализации: HashSet, LinkedHashSet, TreeSet
Полезные статьи и видео:
Защита своего приложения с помощью JWT и Spring Security
Идемпотентность: больше, чем кажется
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Илья Алексеевич Житомирский (12 октября, 1989, Москва, СССР — 12 ноября, 2011, Сан-Франциско, США) — российско-американский разработчик программного обеспечения, сооснователь социальной сети Diaspora.
Оле-Йохан Даль (норв. Ole-Johan Dahl, 12 октября 1931 года, Мандал — 29 июня 2002 года, Осло) — норвежский учёный в области теории вычислительных систем, лауреат премии Тьюринга. Вместе с Кристеном Нюгором является одним из разработчиков основ объектно-ориентированного программирования, а также первого объектно-ориентированного языка программирования Симула.
Брэм Коэн (12 октября 1975 г. Нью-Йорк) — американский программист, автор протокола BitTorrent, оказавшего большое влияние на распределённую передачу файлов и P2P-системы.
1964 — с космодрома Байконур запущен трёхместный космический корабль «Восход-1». Впервые осуществлён полёт многоместного корабля, также впервые полёт осуществлялся без скафандров.
1994 — межпланетная станция НАСА «Магеллан», работавшая с 1989 года, сгорела в атмосфере Венеры
#Biography #Birth_Date #Events #12Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Чего ты тут забыл? 🧐
Мысли вслух, когда устаешь быть мотиватором.
И чего все лезут в IT?
И почему вдруг ты решил, что сможешь?
Если ты вдруг научился устанавливать Windows и твои близкие назвали тебя "Наш программист", это совсем не значит, что ты им стал.
Ты правда думаешь, что тебе тут рады?
Что в IT тебя ждут с открытыми объятиями, чашкой кофе и оффером на 300к?
Нет, дружище. Здесь и без тебя тесно.
Каждый день тысячи таких же "новоиспечённых айтишников" лезут в hh, как в последний вагон уходящего поезда.
Все с одинаковыми мечтами, одинаковыми курсами и одинаковыми "Hello, world" и TODO-шками написанными по гайдам 10-летней давности.
И все уверены, что именно они — будущие синьоры, тимлиды и архитекторы.
А вот нихерашеньки🖕
Реальность №1: ты никому не нужен
Компаний, которым нужны джуны без опыта, но с горящими глазами — меньше, чем вакансий на дирижёра без слуха.
А если вдруг ты туда попал — готовься к тоннам легаси, таскам уровня "почини сервер", и наставнику, который ненавидит тебя и свою жизнь.
Реальность №2: Пока ты учил, всё, что ты выучил — уже устарело
Ты только понял, как работает Spring Boot?
Поздравляю. Он уже обновился, и теперь не работает так, как ты думаешь.
Java? Kotlin поджимает. Kotlin? Уже шепчут про Rust и Go.
А пока ты разбираешься с зависимостями — твой мозг тихо плачет и просит пива.
Не хочешь каждый день учиться? Закинут на антресоль как раритет или выкинут на свалку.
И надо оно тебе?
Реальность №3: денег не будет
Сразу точно не будет. А сможешь ли ты дотерпеть?
Все эти истории про "начал с нуля и через год 250к" — для курсов и буткемпов.
Веришь? Значит ты доверчивый ослик🫏 .
В текущей реальности ты, скорее всего, будешь рад, если найдешь стажировку на 20–30 тысяч без накрутки опыта.
А потом ещё три года будешь доказывать, что не зря ешь офисные печеньки.😄
Реальность №4: ты не выдержишь, если пришёл “просто попробовать”
Если ты думаешь, что сегодня IT, все еще это лёгкий способ заработать — ты точно ошибся.
Говорят лет 5-7 назад брали только за то что ты умел идею запустить.
А сегодня если ты пришёл за “удалёнкой с видом на море” — тебя сожрёт реальность дедлайнов, ревью и Jira. Погребет под собой тонна знаний по кору, sql, спрингу, докеру, многопоточке, коллекциям, ci-cd, кафке, монго, куберу...
И ведь это только начало🥵
Ты еще уверен что оно тебе надо?
Так зачем ты сюда пришёл?
Если хочешь лёгкой работы — уходи. Тебя тут никто не ждет.
Если хочешь “самореализации” — купи мольберт.
Хочешь денег - иди в чиновники и воруй.
Но если ты хочешь понимать, как работает цифровой мир, и готов к боли — оставайся.
Потому что программирование — это не про успех.
Это про любопытство, упрямство и мазохизм в одной IDE☺️ 😉 🤣
Ты такой?
Ты считаешь что сможешь?
И не боишься возможно поломать свой мозг, комп и возможно жизнь об программирование?
Тогда ты тот для кого я веду этот канал.
Остальные, залетные, кто пришел сюда за "откровениями", "посмотреть" и завтра выйдет - не стоят моего труда.
А вот тем кто готов бороться (как и я сам) я посвящаю каждую строчку, каждого поста.
Остальным — удачи. А нам — кофе и терпения.
Я с вами☺️ 😉
Ваш Oleborn🎶
#мои_мысли
⚠️ AHTUNG⚠️
Демотивационная статья. Читать с осторожностью.
Написано открыто, потому что все равно статьи никто не читает😎
Мысли вслух, когда устаешь быть мотиватором.
И чего все лезут в IT?
И почему вдруг ты решил, что сможешь?
Если ты вдруг научился устанавливать Windows и твои близкие назвали тебя "Наш программист", это совсем не значит, что ты им стал.
Ты правда думаешь, что тебе тут рады?
Что в IT тебя ждут с открытыми объятиями, чашкой кофе и оффером на 300к?
Нет, дружище. Здесь и без тебя тесно.
Каждый день тысячи таких же "новоиспечённых айтишников" лезут в hh, как в последний вагон уходящего поезда.
Все с одинаковыми мечтами, одинаковыми курсами и одинаковыми "Hello, world" и TODO-шками написанными по гайдам 10-летней давности.
И все уверены, что именно они — будущие синьоры, тимлиды и архитекторы.
А вот нихерашеньки
Реальность №1: ты никому не нужен
Компаний, которым нужны джуны без опыта, но с горящими глазами — меньше, чем вакансий на дирижёра без слуха.
А если вдруг ты туда попал — готовься к тоннам легаси, таскам уровня "почини сервер", и наставнику, который ненавидит тебя и свою жизнь.
Реальность №2: Пока ты учил, всё, что ты выучил — уже устарело
Ты только понял, как работает Spring Boot?
Поздравляю. Он уже обновился, и теперь не работает так, как ты думаешь.
Java? Kotlin поджимает. Kotlin? Уже шепчут про Rust и Go.
А пока ты разбираешься с зависимостями — твой мозг тихо плачет и просит пива.
Не хочешь каждый день учиться? Закинут на антресоль как раритет или выкинут на свалку.
И надо оно тебе?
Реальность №3: денег не будет
Сразу точно не будет. А сможешь ли ты дотерпеть?
Все эти истории про "начал с нуля и через год 250к" — для курсов и буткемпов.
Веришь? Значит ты доверчивый ослик
В текущей реальности ты, скорее всего, будешь рад, если найдешь стажировку на 20–30 тысяч без накрутки опыта.
А потом ещё три года будешь доказывать, что не зря ешь офисные печеньки.
Реальность №4: ты не выдержишь, если пришёл “просто попробовать”
Если ты думаешь, что сегодня IT, все еще это лёгкий способ заработать — ты точно ошибся.
Говорят лет 5-7 назад брали только за то что ты умел идею запустить.
А сегодня если ты пришёл за “удалёнкой с видом на море” — тебя сожрёт реальность дедлайнов, ревью и Jira. Погребет под собой тонна знаний по кору, sql, спрингу, докеру, многопоточке, коллекциям, ci-cd, кафке, монго, куберу...
И ведь это только начало
Ты еще уверен что оно тебе надо?
Так зачем ты сюда пришёл?
Если хочешь лёгкой работы — уходи. Тебя тут никто не ждет.
Если хочешь “самореализации” — купи мольберт.
Хочешь денег - иди в чиновники и воруй.
Но если ты хочешь понимать, как работает цифровой мир, и готов к боли — оставайся.
Потому что программирование — это не про успех.
Это про любопытство, упрямство и мазохизм в одной IDE
Ты такой?
Ты считаешь что сможешь?
И не боишься возможно поломать свой мозг, комп и возможно жизнь об программирование?
Тогда ты тот для кого я веду этот канал.
Остальные, залетные, кто пришел сюда за "откровениями", "посмотреть" и завтра выйдет - не стоят моего труда.
А вот тем кто готов бороться (как и я сам) я посвящаю каждую строчку, каждого поста.
Остальным — удачи. А нам — кофе и терпения.
Я с вами
Ваш Oleborn
#мои_мысли
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9 1
@JFB_admin_bot
пишите боту, он даст ссылку на встречу))
Общение лучше начать с команды /start
Залетайте)
пишите боту, он даст ссылку на встречу))
Общение лучше начать с команды /start
Залетайте)
👍1
gRPC и .proto.
Разбор и демонстрационный код
В сегодняшнем видео мы рассмотрели что такое gRPC.
- Написали и запустили простой демонстрационный код.
- Разобрали в чем отличие от REST, как это работает.
- Написали файл .proto, разобрали какие типы данных в нем применяются.
Как всегда немного подебажили😜
Репозиторий на GitHub ждет Ваших звезд☺️
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!✌️
Разбор и демонстрационный код
В сегодняшнем видео мы рассмотрели что такое gRPC.
- Написали и запустили простой демонстрационный код.
- Разобрали в чем отличие от REST, как это работает.
- Написали файл .proto, разобрали какие типы данных в нем применяются.
Как всегда немного подебажили
Репозиторий на GitHub ждет Ваших звезд
Ссылка на Youtube
Ссылка на Рутьюб
Смотрите, ставьте лайки, подписывайтесь на каналы!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Сильвио Микали (итал. Silvio Micali; род. 13 октября 1954) — итальянско-американский криптограф, лауреат премии Тьюринга; основоположник современных подходов в криптографии и теории безопасных протоколов.
Скотт Мэрфи (родился 13 октября 1954 года) — американский разработчик игр, программист, сценарист. Является разработчиком нескольких приключенческих игр, в основном для фирмы Sierra On-Line. Больше всего он известен как создатель серии Space Quest.
1884 — Гринвич утверждён как место прохождения нулевого меридиана.
#Biography #Birth_Date #Events #13Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1