История IT-технологий сегодня — 26 октября
ℹ️ Кто родился в этот день
Брендан Дэмиен Маккей (родился 26 октября 1951 года) — австралийский учёный (компьютерные науки и комбинаторика), внес значимый вклад в вычислительную теорию графов и алгоритмическую комбинаторику; автор множества алгоритмов и программ для исчерпывающего поиска в графах.
🌐 Знаковые события
1861 — немецкий изобретатель Филипп Рейс во Франкфурте продемонстрировал своё изобретение, которое он назвал телефоном.
2012 — выпуск операционной системы Windows 8.
#Biography #Birth_Date #Events #26Октября
Брендан Дэмиен Маккей (родился 26 октября 1951 года) — австралийский учёный (компьютерные науки и комбинаторика), внес значимый вклад в вычислительную теорию графов и алгоритмическую комбинаторику; автор множества алгоритмов и программ для исчерпывающего поиска в графах.
1861 — немецкий изобретатель Филипп Рейс во Франкфурте продемонстрировал своё изобретение, которое он назвал телефоном.
2012 — выпуск операционной системы Windows 8.
#Biography #Birth_Date #Events #26Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Вот о чём думают каждый вкатун и джун в начале пути?
Наверно:
“Вот бы мне знать весь Spring, Quarkus и написать свой компилятор.”
“Удалёнка, спать до обеда и лавандовый раф на завтрак.”
Да ладно...
Вспомни себя, когда ты только думал о начале обучения 😏
Все как один думают о зарплате.
О том, как быстро смогут подрасти по грейду, по цифрам и по лайкам под постом о первом оффере.
Так уж устроено — мы живём в обществе, где сумма на счёте практически определяет, кто ты.
Купил айфон — молодец.
Ходишь пешком — лох.
А теперь добавь сюда программистов, где каждый второй гордо пишет “Middle 250k” в профиле и считает, что это уже характеристика личности.
Но вот вопрос: зарплата — это действительно твоя ценность, или просто временная рыночная оценка твоего труда?
Иногда некоторым просто везет.
Компания в моменте расширяется, стартап получил инвестиции, или программист угадал хайповый стек.
И вот неожиданно он — “молодец”. Хотя внутри всё тот же растерянный джун, просто с хорошим прайсом.
А бывает и наоборот: человек пашет, реально шарит, но получает меньше, потому что не умеет себя продавать, живёт не в столице или просто не хочет прыгать по вакансиям ради пары тысяч.
И кто из них лучше?
Тот, кто умнее?
Или тот, кто просто дороже стоит на hh?
“Он получает больше. Значит, он лучше.”
Вот так и начинается внутренний диссонанс, который выжигает уверенность, мотивацию и любовь к делу.
А потом приходят выгорание, обида и мысли вроде:
“Да пошло оно всё, если рынок не ценит”.
Но рынок никого не ценит.
Он просто платит столько, сколько сейчас может.
Он не меряет твою душу, потенциал и умение учиться. Только ту выгоду, которую ты можешь в итоге принести.
Пойми:
Деньги — не показатель личности, ума, знаний и опыта.
Развивайся, а не сравнивай.
Зарплата может упасть, проект может закрыться, а вот навыки и адекватность останутся при тебе.
Настоящий уровень — это не оффер, а то, что ты можешь, когда оффера нет.
Делай ставку на свое ежедневное развитие, а не на 3-х месячный оффер сеньора, откуда тебя с треском выпнут.
Время так или иначе все расставит по своим местам.
Не завидуй — анализируй.
Если кто-то получает больше — попробуй понять, почему.
У него может быть другой стек, опыт, знания языка, регион.
Это не повод злиться, это повод задуматься.
Понимаешь, что ты лучше — борись.
Ты видишь, что твой "коллега" получает в 2 раза больше чем ты, но не может пройти твоего ревью?
Значит пора что-то менять. Пора начинать толкаться плечами, ведь ты хочешь жить лучше?
Это не повод становиться врагом всем, кто хуже тебя.
Это повод стать вровень с теми, кто лучше — и не стесняться заявить об этом.
Так что да, твоя зарплата — не ты. И не уровень твоих компетенций.
Но то, как ты к ней относишься — говорит о тебе громче, чем цифры в оффере.
Кичиться в моменте что ты получаешь 400к, но не знаешь и не слышал, к примеру о Spring AI - глупо.
Завтра тебя перепрыгнет более опытный в нужном стеке мидл, а ты пойдешь на дно.
Поэтому развитие и связи — это приоритет, а офферы лишь заслуженное приложение.
А для этого надо общаться и учиться...
И быть подписанным на наш канал
Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7 1
Java for Beginner
This media is not supported in your browser
VIEW IN TELEGRAM
В тему поста
🗿3
История IT-технологий сегодня — 27 октября
ℹ️ Кто родился в этот день
Исаак Семёнович Брук (27 октября (9 ноября) 1902 года, Минск, Российская империя — 6 октября 1974, Москва, СССР) — советский учёный в электротехнике и вычислительной технике, один из организаторов и руководителей работ по созданию отечественных вычислительных машин (серия М-1…М-3), основатель научной школы в области ЭВМ в СССР. (в ряде русскоязычных источников дата рождения указывается как 27 октября 1902 (старый стиль) / 9 ноября — есть варианты формата дат в разных справочниках).
🌐 Знаковые события
Не нашел((
#Biography #Birth_Date #Events #27Октября
Исаак Семёнович Брук (27 октября (9 ноября) 1902 года, Минск, Российская империя — 6 октября 1974, Москва, СССР) — советский учёный в электротехнике и вычислительной технике, один из организаторов и руководителей работ по созданию отечественных вычислительных машин (серия М-1…М-3), основатель научной школы в области ЭВМ в СССР. (в ряде русскоязычных источников дата рождения указывается как 27 октября 1902 (старый стиль) / 9 ноября — есть варианты формата дат в разных справочниках).
Не нашел((
#Biography #Birth_Date #Events #27Октября
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Сколько Вы зарабатываете? (если не секрет)
Anonymous Poll
19%
до 30к в месяц
19%
30-50
0%
50-80
10%
80-100
14%
100-150
19%
150-300
0%
300+к в месяц
19%
300млн в нс
👍1
Раздел 6. Коллекции в Java
Глава 4. Queue и Deque
Практика:
В «Библиотеке» добавить очередь читателей (Queue<String>) для книги. Когда книга возвращается — выдать её первому из очереди
Откройте проект «Библиотека»
Запустите IntelliJ IDEA и откройте существующий проект LibraryProject. Убедитесь, что классы Book и Library существуют: Book с полями title, author, year (и геттерами), Library с массивом книг, счетчиком bookCount, методом addBook и Set для авторов.
Импортируйте необходимые пакеты:
В файлах, где будете использовать Queue, убедитесь, что импортированы java.util.Queue и java.util.LinkedList (или ArrayDeque — выберите реализацию для FIFO). IDE подскажет, когда вы начнете писать код — используйте Ctrl+Enter для автодобавления импорта.
Выберите реализацию Queue:
Для этого задания используйте LinkedList<String> как Queue — она проста для FIFO и позволяет операции на концах. Альтернатива — ArrayDeque для большей эффективности, если хотите поэкспериментировать.
Обновление класса Book для очереди читателей
Поскольку очередь читателей относится к конкретной книге (кто ждет эту книгу), добавим её в класс Book.
Добавьте поле для Queue<String>:
Откройте файл Book.java.
Объявите приватное поле readerQueue типа Queue<String>, инициализированное как new LinkedList<> (или new ArrayDeque<>).
Это множество будет хранить имена читателей в порядке очереди (FIFO: первый добавленный — первый получит книгу).
Добавьте методы для работы с очередью
Создайте публичный метод addToQueue(String readerName), который:
Добавляет имя читателя в конец очереди с помощью offer (readerQueue.offer(readerName)).
Можно вывести сообщение, например, "Читатель [readerName] добавлен в очередь за книгой [title]".
Создайте публичный метод returnBook(), который моделирует возврат книги:
Проверяет, пуста ли очередь (readerQueue.isEmpty()).
Если пуста — выводит сообщение "Книга свободна, очередь пуста".
Если не пуста — извлекает первого читателя с помощью poll (String nextReader = readerQueue.poll();).
Выводит сообщение "Книга выдана следующему читателю: [nextReader]".
(Опционально: Если книга была занята, здесь можно обновить статус, но для простоты пока опустим).
Обновите конструктор Book:
В конструкторе Book убедитесь, что readerQueue инициализируется (если не сделали при объявлении поля).
Интеграция с классом Library
Теперь обновим Library, чтобы при добавлении книги учитывать очередь, но поскольку очередь в Book, Library будет работать с объектами Book.
Обновите метод addBook(Book book):
В методе addBook оставьте добавление в массив книг, но добавьте проверку: Если очередь читателей в книге не пуста (book.getReaderQueue().isEmpty() == false), выведите сообщение "Книга добавлена, но имеет очередь читателей".
(Это опционально, но поможет связать с практикой).
Добавьте метод для возврата книги
Создайте публичный метод returnBookByTitle(String title), который:
Ищет книгу в массиве по title (перебор с equals).
Если найдена — вызывает returnBook() на объекте Book.
Если не найдена — выводит сообщение "Книга не найдена".
Обновление класса Main для тестирования
Теперь протестируем новую функциональность в Main.
Создайте объекты и добавьте книги:
В методе main создайте объект Library.
Создайте объект Book (например, с title "Война и мир", author "Толстой", year 1869).
Вызовите addBook на Library.
Добавьте читателей в очередь:
Через объект Book вызовите addToQueue несколько раз с разными именами читателей (например, "Иван", "Мария", "Петр").
Вызовите returnBook() на Book — первый читатель ("Иван") должен получить книгу, остальные остаются в очереди.
Протестируйте возврат:
Вызовите returnBook() еще раз — следующий читатель ("Мария") получит.
Продолжите, пока очередь не опустеет — последний вызов вернет null или сообщение о пустоте.
#Java #для_новичков #beginner #Collections #Deque #ArrayDeque #LinkedList
Глава 4. Queue и Deque
Практика:
В «Библиотеке» добавить очередь читателей (Queue<String>) для книги. Когда книга возвращается — выдать её первому из очереди
Откройте проект «Библиотека»
Запустите IntelliJ IDEA и откройте существующий проект LibraryProject. Убедитесь, что классы Book и Library существуют: Book с полями title, author, year (и геттерами), Library с массивом книг, счетчиком bookCount, методом addBook и Set для авторов.
Импортируйте необходимые пакеты:
В файлах, где будете использовать Queue, убедитесь, что импортированы java.util.Queue и java.util.LinkedList (или ArrayDeque — выберите реализацию для FIFO). IDE подскажет, когда вы начнете писать код — используйте Ctrl+Enter для автодобавления импорта.
Выберите реализацию Queue:
Для этого задания используйте LinkedList<String> как Queue — она проста для FIFO и позволяет операции на концах. Альтернатива — ArrayDeque для большей эффективности, если хотите поэкспериментировать.
Обновление класса Book для очереди читателей
Поскольку очередь читателей относится к конкретной книге (кто ждет эту книгу), добавим её в класс Book.
Добавьте поле для Queue<String>:
Откройте файл Book.java.
Объявите приватное поле readerQueue типа Queue<String>, инициализированное как new LinkedList<> (или new ArrayDeque<>).
Это множество будет хранить имена читателей в порядке очереди (FIFO: первый добавленный — первый получит книгу).
Добавьте методы для работы с очередью
Создайте публичный метод addToQueue(String readerName), который:
Добавляет имя читателя в конец очереди с помощью offer (readerQueue.offer(readerName)).
Можно вывести сообщение, например, "Читатель [readerName] добавлен в очередь за книгой [title]".
Создайте публичный метод returnBook(), который моделирует возврат книги:
Проверяет, пуста ли очередь (readerQueue.isEmpty()).
Если пуста — выводит сообщение "Книга свободна, очередь пуста".
Если не пуста — извлекает первого читателя с помощью poll (String nextReader = readerQueue.poll();).
Выводит сообщение "Книга выдана следующему читателю: [nextReader]".
(Опционально: Если книга была занята, здесь можно обновить статус, но для простоты пока опустим).
Обновите конструктор Book:
В конструкторе Book убедитесь, что readerQueue инициализируется (если не сделали при объявлении поля).
Интеграция с классом Library
Теперь обновим Library, чтобы при добавлении книги учитывать очередь, но поскольку очередь в Book, Library будет работать с объектами Book.
Обновите метод addBook(Book book):
В методе addBook оставьте добавление в массив книг, но добавьте проверку: Если очередь читателей в книге не пуста (book.getReaderQueue().isEmpty() == false), выведите сообщение "Книга добавлена, но имеет очередь читателей".
(Это опционально, но поможет связать с практикой).
Добавьте метод для возврата книги
Создайте публичный метод returnBookByTitle(String title), который:
Ищет книгу в массиве по title (перебор с equals).
Если найдена — вызывает returnBook() на объекте Book.
Если не найдена — выводит сообщение "Книга не найдена".
Обновление класса Main для тестирования
Теперь протестируем новую функциональность в Main.
Создайте объекты и добавьте книги:
В методе main создайте объект Library.
Создайте объект Book (например, с title "Война и мир", author "Толстой", year 1869).
Вызовите addBook на Library.
Добавьте читателей в очередь:
Через объект Book вызовите addToQueue несколько раз с разными именами читателей (например, "Иван", "Мария", "Петр").
Вызовите returnBook() на Book — первый читатель ("Иван") должен получить книгу, остальные остаются в очереди.
Протестируйте возврат:
Вызовите returnBook() еще раз — следующий читатель ("Мария") получит.
Продолжите, пока очередь не опустеет — последний вызов вернет null или сообщение о пустоте.
#Java #для_новичков #beginner #Collections #Deque #ArrayDeque #LinkedList
Тестирование и отладка
После реализации протестируйте, чтобы убедиться в правильной работе очереди.
Запустите проект:
Правой кнопкой на Main.java → Run 'Main.main()'.
В консоли увидите сообщения о добавлении читателей и выдаче книги по порядку (FIFO: первый добавленный — первый получает).
Проверьте FIFO:
Убедитесь, что читатели выдаются в порядке добавления (offer в конец, poll из начала).
Попробуйте добавить null как читателя — проверьте поведение (LinkedList позволит).
Отладка:
Установите breakpoint в методе returnBook перед poll и после — шагайте (F8) и смотрите размер очереди (readerQueue.size()).
Если ошибки: NullPointerException (если очередь не инициализирована или книга не найдена) — добавьте проверки if (readerQueue != null && !readerQueue.isEmpty()).
ArrayIndexOutOfBoundsException в массиве книг — расширьте массив или используйте динамический список (позже заменим на List).
Эксперименты:
Измените реализацию Queue на ArrayDeque — проверьте, работает ли аналогично (да, но эффективнее по памяти).
Добавьте метод isQueueEmpty() в Book для проверки пустоты — используйте в Library для статистики.
Полезные советы для новичков
Инициализация Queue: Всегда инициализируйте в конструкторе Book (readerQueue = new LinkedList<>();), чтобы избежать NullPointerException.
Проверка возвращаемого: Poll возвращает null при пустой — используйте if (nextReader != null) для сообщений.
Расширение: Подумайте о статусе книги (boolean isAvailable) — при возврате устанавливайте true, при выдаче — false.
Массив книг: Пока используем массив, но заметьте ограничения — в следующих уроках заменим на List<Book>.
Thread-safety: Если проект вырастет, подумайте о ConcurrentLinkedQueue для многопоточности.
#Java #для_новичков #beginner #Collections #Deque #ArrayDeque #LinkedList
После реализации протестируйте, чтобы убедиться в правильной работе очереди.
Запустите проект:
Правой кнопкой на Main.java → Run 'Main.main()'.
В консоли увидите сообщения о добавлении читателей и выдаче книги по порядку (FIFO: первый добавленный — первый получает).
Проверьте FIFO:
Убедитесь, что читатели выдаются в порядке добавления (offer в конец, poll из начала).
Попробуйте добавить null как читателя — проверьте поведение (LinkedList позволит).
Отладка:
Установите breakpoint в методе returnBook перед poll и после — шагайте (F8) и смотрите размер очереди (readerQueue.size()).
Если ошибки: NullPointerException (если очередь не инициализирована или книга не найдена) — добавьте проверки if (readerQueue != null && !readerQueue.isEmpty()).
ArrayIndexOutOfBoundsException в массиве книг — расширьте массив или используйте динамический список (позже заменим на List).
Эксперименты:
Измените реализацию Queue на ArrayDeque — проверьте, работает ли аналогично (да, но эффективнее по памяти).
Добавьте метод isQueueEmpty() в Book для проверки пустоты — используйте в Library для статистики.
Полезные советы для новичков
Инициализация Queue: Всегда инициализируйте в конструкторе Book (readerQueue = new LinkedList<>();), чтобы избежать NullPointerException.
Проверка возвращаемого: Poll возвращает null при пустой — используйте if (nextReader != null) для сообщений.
Расширение: Подумайте о статусе книги (boolean isAvailable) — при возврате устанавливайте true, при выдаче — false.
Массив книг: Пока используем массив, но заметьте ограничения — в следующих уроках заменим на List<Book>.
Thread-safety: Если проект вырастет, подумайте о ConcurrentLinkedQueue для многопоточности.
#Java #для_новичков #beginner #Collections #Deque #ArrayDeque #LinkedList
Что выведет код?
#Tasks
import java.util.TreeSet;
public class Task271025 {
public static void main(String[] args) {
TreeSet<Integer> set = new TreeSet<>();
set.add(5);
set.add(3);
set.add(8);
set.add(1);
System.out.print(set.lower(4) + " ");
System.out.print(set.higher(4) + " ");
System.out.print(set.floor(3) + " ");
System.out.print(set.ceiling(6));
}
}
#Tasks
Вопрос с собеседований
Что такое SPI (Service Provider Interface) в Java?🤓
Ответ:
SPI — это механизм для подключения модулей и расширений без изменения основного кода.
Реализуется через META-INF/services.
Используется во многих библиотеках (например, JDBC). Это паттерн «плагины» для Java-приложений.
#собеседование
Что такое SPI (Service Provider Interface) в Java?
Ответ:
SPI
Реализуется через META-INF/services.
Используется во многих библиотеках (например, JDBC). Это паттерн «плагины» для Java-приложений.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2