Telegram-бот счётчик сообщений на Java и Spring Boot
В этой статье автор показывает, как написать Telegram-бот на Java с использованием Spring Boot, PostgreSQL и JPA. Также создаает исполняемый jar-файл. Сам же бот будет подсчитывать сообщения от пользователей и записывать эти данные в БД.
Смотреть статью
В этой статье автор показывает, как написать Telegram-бот на Java с использованием Spring Boot, PostgreSQL и JPA. Также создаает исполняемый jar-файл. Сам же бот будет подсчитывать сообщения от пользователей и записывать эти данные в БД.
Смотреть статью
Tproger
Telegram-бот счётчик сообщений на Java и Spring / Tproger
Пишем простой Телеграм-бот на Java, который будет подсчитывать сообщения от пользователей чата и записывать их в БД через PostgreSQL.
👍12❤3😱1
Что такое пул строк?
Это набор строк, хранящийся в Heap.
☕️ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
☕️ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
☕️ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
☕️ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
☕️ Пул строк является примером паттерна «Приспособленец» (Flyweight).
Это набор строк, хранящийся в Heap.
☕️ Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
☕️ Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
☕️ Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
☕️ При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
☕️ Пул строк является примером паттерна «Приспособленец» (Flyweight).
👍19❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Сортировка слиянием через рекурсию
В этой статье мы освежим в памяти суть сортировки слиянием.
Смотреть статью
В этой статье мы освежим в памяти суть сортировки слиянием.
Смотреть статью
👍18❤2🔥2
#Вопросы_с_собеседования
❓Для чего используется ключевое слово volatile, synchronized, transient, native?
volatile - этот модификатор вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все же данные, содержащиеся в объекте, синхронизированы не будут!
synchronized - это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.
Ключевые слова transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.
❓Для чего используется ключевое слово volatile, synchronized, transient, native?
volatile - этот модификатор вынуждает потоки отключить оптимизацию доступа и использовать единственный экземпляр переменной. Если переменная примитивного типа – этого будет достаточно для обеспечения потокобезопасности. Если же переменная является ссылкой на объект – синхронизировано будет исключительно значение этой ссылки. Все же данные, содержащиеся в объекте, синхронизированы не будут!
synchronized - это зарезервированное слово позволяет добиваться синхронизации в помеченных им методах или блоках кода.
Ключевые слова transient и native к многопоточности никакого отношения не имеют, первое используется для указания полей класса, которые не нужно сериализовать, а второе - сигнализирует о том, что метод реализован в платформо-зависимом коде.
👍17❤6
#Вопросы_с_собеседования
❓Напишите однопоточную программу, которая заставляет коллекцию выбросить ConcurrentModificationException.
Вопрос с подвохом: ConcurrentModificationException к многопоточности никакого отношения не имеет. Возникает эта штука тогда, когда мы пытаемся модифицировать коллекцию во время итерирования по ней.
❓Напишите однопоточную программу, которая заставляет коллекцию выбросить ConcurrentModificationException.
Вопрос с подвохом: ConcurrentModificationException к многопоточности никакого отношения не имеет. Возникает эта штука тогда, когда мы пытаемся модифицировать коллекцию во время итерирования по ней.
❤21👍14😱5
Каким будет Output?
Anonymous Quiz
36%
Therad end. и зависнет
38%
Therad end. Main end.
26%
Результат неизвестен
👍21🤔9
#Вопросы_с_собеседования
❓Что вы подразумеваете под анонимным классом?
Анонимный внутренний класс в Java не имеет имени и создает только один объект.
❓Что вы подразумеваете под анонимным классом?
👍22❤4
#вопросы_с_собеседований
Какие конечные методы работы со стримами вы знаете?
findFirst() возвращает первый элемент;
findAny() возвращает любой подходящий элемент;
collect() представление результатов в виде коллекций и других структур данных;
count() возвращает количество элементов;
anyMatch() возвращает true, если условие выполняется хотя бы для одного элемента;
noneMatch() возвращает true, если условие не выполняется ни для одного элемента;
allMatch() возвращает true, если условие выполняется для всех элементов;
min() возвращает минимальный элемент, используя в качестве условия Comparator;
max() возвращает максимальный элемент, используя в качестве условия Comparator;
forEach() применяет функцию к каждому объекту (порядок при параллельном выполнении не гарантируется);
forEachOrdered() применяет функцию к каждому объекту с сохранением порядка элементов;
toArray() возвращает массив значений;
reduce() позволяет выполнять агрегатные функции и возвращать один результат.
Для числовых стримов дополнительно доступны:
sum() возвращает сумму всех чисел;
average() возвращает среднее арифметическое всех чисел.
Какие конечные методы работы со стримами вы знаете?
findFirst() возвращает первый элемент;
findAny() возвращает любой подходящий элемент;
collect() представление результатов в виде коллекций и других структур данных;
count() возвращает количество элементов;
anyMatch() возвращает true, если условие выполняется хотя бы для одного элемента;
noneMatch() возвращает true, если условие не выполняется ни для одного элемента;
allMatch() возвращает true, если условие выполняется для всех элементов;
min() возвращает минимальный элемент, используя в качестве условия Comparator;
max() возвращает максимальный элемент, используя в качестве условия Comparator;
forEach() применяет функцию к каждому объекту (порядок при параллельном выполнении не гарантируется);
forEachOrdered() применяет функцию к каждому объекту с сохранением порядка элементов;
toArray() возвращает массив значений;
reduce() позволяет выполнять агрегатные функции и возвращать один результат.
Для числовых стримов дополнительно доступны:
sum() возвращает сумму всех чисел;
average() возвращает среднее арифметическое всех чисел.
👍24❤4
Подклассом класса RuntimeException является?
Anonymous Quiz
23%
IOException
11%
FileNotFoundException
36%
NullPointerException
24%
Exception
6%
Узнать ответ
👍16😱5❤2🤔1
#Вопросы_с_собеседования
Как написать immutable класс?
Чтоб написать immutable неизменяемый класс, нужно следовать простым пунктам:
• сделать класс финальным.
• сделать все поля приватными и создать только геттеры к ним. Сеттеры, разумеется, не нужно.
• Сделать все mutable поля final, чтобы установить значение можно было только один раз.
• инициализировать все поля через конструктор, выполняя глубокое копирование (то есть, копируя и сам объект, и его переменные, и переменные переменных, и так далее)
• клонировать объекты mutable переменных в геттерах, чтобы возвращать только копии значений, а не ссылки на актуальные объекты.
Как написать immutable класс?
Чтоб написать immutable неизменяемый класс, нужно следовать простым пунктам:
• сделать класс финальным.
• сделать все поля приватными и создать только геттеры к ним. Сеттеры, разумеется, не нужно.
• Сделать все mutable поля final, чтобы установить значение можно было только один раз.
• инициализировать все поля через конструктор, выполняя глубокое копирование (то есть, копируя и сам объект, и его переменные, и переменные переменных, и так далее)
• клонировать объекты mutable переменных в геттерах, чтобы возвращать только копии значений, а не ссылки на актуальные объекты.
👍27❤2🔥2
Java 20: огромные разреженные сегменты памяти
Знаете ли вы, что можно выделять сегменты памяти, которые больше, чем физический размер оперативной памяти вашего компьютера, и даже больше, чем размер всей вашей файловой системы?
Смотреть статью
Знаете ли вы, что можно выделять сегменты памяти, которые больше, чем физический размер оперативной памяти вашего компьютера, и даже больше, чем размер всей вашей файловой системы?
Смотреть статью
Хабр
Java 20: огромные разреженные сегменты памяти
Знаете ли вы, что можно выделять сегменты памяти, которые больше, чем физический размер оперативной памяти вашего компьютера, и даже больше, чем размер всей вашей файловой системы? Прочтите эту...
👍4
Загрузка изображения
Первое, что нужно сделать, когда вы хотите поработать с изображениями - это создать объект BufferedImage из изображения, сохраненного на нашем диске.
Подробную инструкцию по работе с изображениями можно найти здесь.
Первое, что нужно сделать, когда вы хотите поработать с изображениями - это создать объект BufferedImage из изображения, сохраненного на нашем диске.
Подробную инструкцию по работе с изображениями можно найти здесь.
❤13👍7
#Вопросы_с_собеседования
❓Почему необходимо переопределить только init() метод без аргументов?
Метод init() переопределяется, если необходимо инициализировать какие-то данные до того как сервлет начнет обрабатывать запросы.
При переопределении метода init(ServletConfig config), первым должен быть вызван метод super(config), который обеспечит вызов метода init(ServletConfig config) суперкласса. GenericServlet предоставляет другой метод init() без параметров, который будет вызываться в конце метода init(ServletConfig config).
Необходимо использовать переопределенный метод init() без параметров для инициализации данных во избежание каких-либо проблем, например ошибку, когда вызов super() не указан в переопределенном init(ServletConfig config).
❓Почему необходимо переопределить только init() метод без аргументов?
Метод init() переопределяется, если необходимо инициализировать какие-то данные до того как сервлет начнет обрабатывать запросы.
При переопределении метода init(ServletConfig config), первым должен быть вызван метод super(config), который обеспечит вызов метода init(ServletConfig config) суперкласса. GenericServlet предоставляет другой метод init() без параметров, который будет вызываться в конце метода init(ServletConfig config).
Необходимо использовать переопределенный метод init() без параметров для инициализации данных во избежание каких-либо проблем, например ошибку, когда вызов super() не указан в переопределенном init(ServletConfig config).
❤5👍4
#Вопросы_с_собеседования
❓Каков результат операции
0, так как XOR возвращает единицу тогда, когда один из аргументов равен нулю, а второй единице.
❓Каков результат операции
1 XOR 1?👍20🤔1😱1
#Вопросы_с_собеседования
❓Может ли объект получить доступ к члену класса, объявленному как private? Если да, то каким образом?
• Внутри класса доступ к приватной переменной открыт без ограничений;
• Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;
• Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса. Например: getX() и setX().
• Через механизм рефлексии (Reflection API) (см картинку).
❓Может ли объект получить доступ к члену класса, объявленному как private? Если да, то каким образом?
• Внутри класса доступ к приватной переменной открыт без ограничений;
• Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;
• Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса. Например: getX() и setX().
• Через механизм рефлексии (Reflection API) (см картинку).
👍22❤2
#Вопросы_с_собеседования
❓Опишите специальные коллекции для перечислений. Каковы преимущества их внедрения по сравнению с обычными коллекциями?
EnumSet и EnumMap — это специальные реализации интерфейсов Set и Map соответственно. Всегда стоит использовать эти реализации, когда имеете дело с перечислениями, потому что они очень эффективны.
EnumSet — это просто битовый вектор с «единицами» в позициях, соответствующих порядковым значениям перечислений, присутствующих в множестве. Чтобы проверить, находится ли значение перечисления в множестве, реализация просто должна проверить, является ли соответствующий бит в векторе «единицей», что является очень простой операцией. Точно так же EnumMap — это массив, доступ к которому осуществляется с помощью порядкового значения перечисления в качестве индекса. В случае с EnumMap нет необходимости вычислять хеш-коды или разрешать коллизии.
❓Опишите специальные коллекции для перечислений. Каковы преимущества их внедрения по сравнению с обычными коллекциями?
EnumSet и EnumMap — это специальные реализации интерфейсов Set и Map соответственно. Всегда стоит использовать эти реализации, когда имеете дело с перечислениями, потому что они очень эффективны.
EnumSet — это просто битовый вектор с «единицами» в позициях, соответствующих порядковым значениям перечислений, присутствующих в множестве. Чтобы проверить, находится ли значение перечисления в множестве, реализация просто должна проверить, является ли соответствующий бит в векторе «единицей», что является очень простой операцией. Точно так же EnumMap — это массив, доступ к которому осуществляется с помощью порядкового значения перечисления в качестве индекса. В случае с EnumMap нет необходимости вычислять хеш-коды или разрешать коллизии.
👍13❤2
Создание HTTP-сервера на Java
В создание HTTP-сервера на Java используются только средства из стандартной библиотеки(Java SE).
Смотреть видео
В создание HTTP-сервера на Java используются только средства из стандартной библиотеки(Java SE).
Смотреть видео
YouTube
Создание HTTP-сервера на Java
В данном видео я покажу, как создать HTTP-сервер на чистой Java и на сокетах. Итоговое приложение будет раздавать файлы из указанной при запуске директории. В создании http-сервера на Java я буду использовать только средства из стандартной библиотеки (Java…
👍12❤3🔥1