TalkSharp - режим "ситуация"
- добавили режим ситуация. Выберите в меню пункт "Режим ситуация". Бот сгенерирует ситуацию и задаст вопросы в контексте этой ситуации. Ваша задача ответить.
Попробуйте и дайте обратную связь @talksharp_bot
- добавили режим ситуация. Выберите в меню пункт "Режим ситуация". Бот сгенерирует ситуацию и задаст вопросы в контексте этой ситуации. Ваша задача ответить.
Попробуйте и дайте обратную связь @talksharp_bot
🔥5❤1
Еще один транскриптор языков?! 🤔
В большей степени этого бота я создаю для себя. У меня английский начался, как и у большинства, в школе 📚, потом продолжился в институте 🎓, а сейчас используется на работе 💼. В пассивном варианте язык находится на хорошем уровне, а вот в активном совсем слабо.
Бот закрыл первую потребность. Теперь есть с кем потренироваться в разговоре 💬. Да, я понимаю, что есть вагон и маленькая тележка таких приложений 🚂, не говоря уже о GPT Voice 🎙. Мне ими пользоваться неудобно. Для GPT нужен VPN 🌍, Busuu работает тормознуто 🐢, Memorize имеет ограниченное количество диалогов 🧠. Хотелось просто открыть Telegram и начать тренироваться, а не искать подходящее приложение 📲.
Далее я добавил анализ словарного запаса 📊. Дело в том, что в повседневной речи мы используем крайне ограниченный набор слов. Чтобы расти в языке, нужно использовать разнообразную лексику 🌱. Эта проблема сразу отобразилась в статистике 📈. На уровне A1 мой прогресс замедлился. Проблема в том, что мне нужно было придумывать, о чем поговорить 🤷♂️. Тут появилась вторая важная функция — режим ситуации 🏙.
Чтобы не ломать голову, о чем поговорить, я добавил режим ситуации. Пользователь выбирает место, а ИИ придумывает ситуацию и задаёт вопросы в контексте этой ситуации 📍. Как вы заметили, последнюю неделю я активно добавляю функции в этот проект и прошу вас попробовать им пользоваться ✨. Однако по статистике использования вижу, что отправляют одно сообщение и дальше ничего не происходит 🚫.
Дайте обратную связь! 🙌
У меня есть несколько предположений:
1. Нет интереса к иностранным языкам. Пользователь не входит в фокус-группу 🎯. Тут я ничего поделать не могу.
2. Хотел бы поговорить, но не знаю о чём. Как раз тут поможет режим ситуации 💡. Опять же, добавил его в первую очередь из своей потребности.
3. Ваши поделки мне не нужны. Я использую и то, и то 🔄. Тут, конечно, хотелось бы услышать, кто чем пользуется, чтобы тренировать разговорный навык 💬. Я уже писал пост про сервисы DeepL и Quizlet, но они больше для расширения словарного запаса 📚.
4. И последняя группа — уровень языка не позволяет участвовать в диалоге 🗣. Мой уровень немецкого языка A1, но даже с ним я могу спросить или рассказать о себе на немецком 🇩🇪. Это, конечно, тяжело, но всё же.
Пробник тут @talksharp_bot. Жду ваших комментарии... 💬
В большей степени этого бота я создаю для себя. У меня английский начался, как и у большинства, в школе 📚, потом продолжился в институте 🎓, а сейчас используется на работе 💼. В пассивном варианте язык находится на хорошем уровне, а вот в активном совсем слабо.
Бот закрыл первую потребность. Теперь есть с кем потренироваться в разговоре 💬. Да, я понимаю, что есть вагон и маленькая тележка таких приложений 🚂, не говоря уже о GPT Voice 🎙. Мне ими пользоваться неудобно. Для GPT нужен VPN 🌍, Busuu работает тормознуто 🐢, Memorize имеет ограниченное количество диалогов 🧠. Хотелось просто открыть Telegram и начать тренироваться, а не искать подходящее приложение 📲.
Далее я добавил анализ словарного запаса 📊. Дело в том, что в повседневной речи мы используем крайне ограниченный набор слов. Чтобы расти в языке, нужно использовать разнообразную лексику 🌱. Эта проблема сразу отобразилась в статистике 📈. На уровне A1 мой прогресс замедлился. Проблема в том, что мне нужно было придумывать, о чем поговорить 🤷♂️. Тут появилась вторая важная функция — режим ситуации 🏙.
Чтобы не ломать голову, о чем поговорить, я добавил режим ситуации. Пользователь выбирает место, а ИИ придумывает ситуацию и задаёт вопросы в контексте этой ситуации 📍. Как вы заметили, последнюю неделю я активно добавляю функции в этот проект и прошу вас попробовать им пользоваться ✨. Однако по статистике использования вижу, что отправляют одно сообщение и дальше ничего не происходит 🚫.
Дайте обратную связь! 🙌
У меня есть несколько предположений:
1. Нет интереса к иностранным языкам. Пользователь не входит в фокус-группу 🎯. Тут я ничего поделать не могу.
2. Хотел бы поговорить, но не знаю о чём. Как раз тут поможет режим ситуации 💡. Опять же, добавил его в первую очередь из своей потребности.
3. Ваши поделки мне не нужны. Я использую и то, и то 🔄. Тут, конечно, хотелось бы услышать, кто чем пользуется, чтобы тренировать разговорный навык 💬. Я уже писал пост про сервисы DeepL и Quizlet, но они больше для расширения словарного запаса 📚.
4. И последняя группа — уровень языка не позволяет участвовать в диалоге 🗣. Мой уровень немецкого языка A1, но даже с ним я могу спросить или рассказать о себе на немецком 🇩🇪. Это, конечно, тяжело, но всё же.
Пробник тут @talksharp_bot. Жду ваших комментарии... 💬
🔥2
TalkSharp | Поболтать ни о чем
Сегодня добавил функцию "Поболтать". Бот задает короткий вопрос.
Так же. Поправил запрос к ИИ. Теперь бот стал отвечать интересней.
Поправил вывод статистики. Добавил иконки языков.
Поболтаем? @talksharp_bot 💭
Сегодня добавил функцию "Поболтать". Бот задает короткий вопрос.
Так же. Поправил запрос к ИИ. Теперь бот стал отвечать интересней.
Поправил вывод статистики. Добавил иконки языков.
Поболтаем? @talksharp_bot 💭
🔥10
TalkSharp | Рейтинги
Продолжаю работать над проектом лингво-тренер.
В целом тестирую в основном на себе )).
1. Добавил баллы за количество слов.
2. Добавил информированию об использовании новых слов. Позволяет отслеживать активный словарный запас.
3. Убрал перевод. Вынес его в кнопку. Ранее он занимал много места.
Статистика по своей тренировке: я наговорил 1 час. Словарный запас 1000 слов.
На самом деле это крайне мало в расчете на неделю получается меньше 10 минут в день. Крайне мало. Зато теперь есть статистика.
Пробуйте @talksharp_bot
Продолжаю работать над проектом лингво-тренер.
В целом тестирую в основном на себе )).
1. Добавил баллы за количество слов.
2. Добавил информированию об использовании новых слов. Позволяет отслеживать активный словарный запас.
3. Убрал перевод. Вынес его в кнопку. Ранее он занимал много места.
Статистика по своей тренировке: я наговорил 1 час. Словарный запас 1000 слов.
На самом деле это крайне мало в расчете на неделю получается меньше 10 минут в день. Крайне мало. Зато теперь есть статистика.
Пробуйте @talksharp_bot
🔥1
Словарный запас
В этой статье я продолжу тему изучения иностранных языков и хотел бы затронуть тему словарного запаса.
Какую основную проблему должен решать проект лингво-тренер? Он должен решать проблему тренировки разговорной речи. По моему мнению, любой язык нужно улучшать через общение, а не через текст или письмо. То есть основные навыки — это восприятие звуков и подражание этим звукам. Дети так и учат родной язык.
Эту задачу удачно решает этот бот. Записывай голосовые сообщения, затем переслушай свою речь. Осознай, что ты далек от оригинала. Сравни, как бот произносит твою речь. Проверь грамматику и получи ответ от бота, продолжая общение.
Теперь встает другая проблема. В своей повседневной речи мы используем крайне ограниченный словарный запас — бытовые слова. Чтобы помочь решить эту задачу, я добавил функцию "Подсказка".
Как это работает? Бот предлагает ответить на короткий открытый вопрос. В бота встроено более 2000 вопросов по более чем 15 темам. Под вопросом появляется кнопка "Подсказать". Бот предлагает варианты ответа и дополнительные слова, которые можно использовать при ответе на этот вопрос. Таким образом, вы можете изучить новые слова или активировать старые.
Другой проблемой является то, что повторить слово один раз недостаточно, чтобы оно стало активным в вашем словарном запасе. Чтобы решить эту задачу, я добавил режим "История". Каждый раз, когда вы общаетесь с ботом, он собирает ваш индивидуальный словарный запас. Бот отслеживает, сколько раз вы использовали то или иное слово. Затем он выбирает 4 редких слова из вашего словаря. Редкими считаются те слова, которые вы использовали наименьшее количество раз. Из этих слов бот составляет короткую историю, которую вам нужно пересказать. Моя идея заключается в том, что, во-первых, вы прослушиваете те слова, которые использовали всего один раз, а во-вторых, можете их повторно использовать в пересказе. Такой механизм позволяет запоминать слова естественным способом, без заучивания, флешкарт и другой ерунды.
Попробуйте @talksharp_bot.
В этой статье я продолжу тему изучения иностранных языков и хотел бы затронуть тему словарного запаса.
Какую основную проблему должен решать проект лингво-тренер? Он должен решать проблему тренировки разговорной речи. По моему мнению, любой язык нужно улучшать через общение, а не через текст или письмо. То есть основные навыки — это восприятие звуков и подражание этим звукам. Дети так и учат родной язык.
Эту задачу удачно решает этот бот. Записывай голосовые сообщения, затем переслушай свою речь. Осознай, что ты далек от оригинала. Сравни, как бот произносит твою речь. Проверь грамматику и получи ответ от бота, продолжая общение.
Теперь встает другая проблема. В своей повседневной речи мы используем крайне ограниченный словарный запас — бытовые слова. Чтобы помочь решить эту задачу, я добавил функцию "Подсказка".
Как это работает? Бот предлагает ответить на короткий открытый вопрос. В бота встроено более 2000 вопросов по более чем 15 темам. Под вопросом появляется кнопка "Подсказать". Бот предлагает варианты ответа и дополнительные слова, которые можно использовать при ответе на этот вопрос. Таким образом, вы можете изучить новые слова или активировать старые.
Другой проблемой является то, что повторить слово один раз недостаточно, чтобы оно стало активным в вашем словарном запасе. Чтобы решить эту задачу, я добавил режим "История". Каждый раз, когда вы общаетесь с ботом, он собирает ваш индивидуальный словарный запас. Бот отслеживает, сколько раз вы использовали то или иное слово. Затем он выбирает 4 редких слова из вашего словаря. Редкими считаются те слова, которые вы использовали наименьшее количество раз. Из этих слов бот составляет короткую историю, которую вам нужно пересказать. Моя идея заключается в том, что, во-первых, вы прослушиваете те слова, которые использовали всего один раз, а во-вторых, можете их повторно использовать в пересказе. Такой механизм позволяет запоминать слова естественным способом, без заучивания, флешкарт и другой ерунды.
Попробуйте @talksharp_bot.
🔥8
Задание
1. Сначала опишу проблему. Как я уже писал выше, точкой входа в Telegram API является абстрактный класс LongPoll. Его менять нельзя в этом задании. Опишем его как:
2. Есть сервисы, которые описывают бизнес-логику. Проблема в том, что в первой версии сервисы возвращают список сообщений для отправки. Процесс формирования списка сообщений занимает значительное время.
Сервис для проверки:
3. Как поправить класс VoiceHandle, чтобы сообщения отправлялись сразу, а не ждали завершения.
4. На проверку пришлите только класс VoiceHandle в тексте сообщения, а не через GitHub.
—-
Для тех кто хочет качнуть знания по Spring Core и написать своего телеграм-бота может пройти наш блок Spring Core | AOP
https://job4j.ru/profile/courses/34
В нем все это рассматривается.
1. Сначала опишу проблему. Как я уже писал выше, точкой входа в Telegram API является абстрактный класс LongPoll. Его менять нельзя в этом задании. Опишем его как:
package ru.job4j.tg;
public abstract class LongPoll {
abstract void receive(String message);
public final void sent(String message) {
System.out.println(message);
}
}
2. Есть сервисы, которые описывают бизнес-логику. Проблема в том, что в первой версии сервисы возвращают список сообщений для отправки. Процесс формирования списка сообщений занимает значительное время.
package ru.job4j.tg;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
public class VoiceHandle {
public List<String> process(String message) {
var result = new ArrayList<String>();
IntStream.range(0, 5).forEach(it -> {
try {
Thread.sleep(1000);
result.add(String.format("Message: %s", it));
} catch (Exception e) {
e.printStackTrace();
}
});
return result;
}
}
Сервис для проверки:
package ru.job4j.tg;
public class TgService extends LongPoll {
private final VoiceHandle voiceHandle;
public TgService(VoiceHandle voiceHandle) {
this.voiceHandle = voiceHandle;
}
@Override
void receive(String message) {
voiceHandle.process(message)
.forEach(this::sent);
}
public static void main(String[] args) {
new TgService(new VoiceHandle()).receive("Hello");
}
}
3. Как поправить класс VoiceHandle, чтобы сообщения отправлялись сразу, а не ждали завершения.
4. На проверку пришлите только класс VoiceHandle в тексте сообщения, а не через GitHub.
—-
Для тех кто хочет качнуть знания по Spring Core и написать своего телеграм-бота может пройти наш блок Spring Core | AOP
https://job4j.ru/profile/courses/34
В нем все это рассматривается.
👍3🔥3👎1
Топ 5 советов, как прокачать ООП
VK https://vkvideo.ru/video298358674_456239273
Rutube https://rutube.ru/video/2e4a6a4794cfeea55c91f1aa3a331600/
Youtube https://youtu.be/wLnHhweBjY0?si=KeriyLFVsBFgz1Iy
VK https://vkvideo.ru/video298358674_456239273
Rutube https://rutube.ru/video/2e4a6a4794cfeea55c91f1aa3a331600/
Youtube https://youtu.be/wLnHhweBjY0?si=KeriyLFVsBFgz1Iy
VK Видео
Размер имеет значение | Топ 5 совет, как прокачать ООП
В этом видео я даю советы. как улучшить навык в области ООП, дизайна и архитектуры. Бот Лингво-тренер https://t.me/talksharp_bot Курс по Spring Core | AOP https://job4j.ru/profile/courses/34
Обсудим решения, которые вы прислали.
1. Использовать Stream.parallel.
Параллельные потоки (`.parallel()`): Использование параллельных потоков, как в данном примере, может быть подходящим, но важно понимать, что параллельные потоки не всегда являются оптимальными. В случае с блокирующими операциями, такими как
2. Использовать
В целом решение такое же, как и первый вариант, но гибче.
---
Теперь моё решение.
Эту задачу стоит разделить на два этапа:
1. Обеспечить мгновенную отправку сообщений после их создания.
2. Реализовать асинхронную природу отправки.
Мгновенная отправка.
По сути, решение сводится к получению доступа к объекту TgService. Но если мы напрямую установим связь
то у нас получится циклическая зависимость, что создаёт сложности с поддержкой и расширением.
Чтобы её решить, можно использовать механизм callback.
В блоке ООП есть отдельный урок про это решение. У нас есть класс StartUI, который содержит обработку меню ExitAction. Он, в свою очередь, должен изменить состояние объекта StartUI. Чтобы не создавать циклическую зависимость, мы создали интерфейс UserAction, который реализует объект StartUI. Но такие связи несколько запутывают.
В решении задачи выше я использую функциональный интерфейс:
Поправим вызов:
Асинхронная природа.
Метод
Чтобы решить проблему асинхронности, я использую
---
Хотите узнать больше? Блоки:
ООП — https://job4j.ru/profile/courses/2
Thread — https://job4j.ru/profile/courses/10
1. Использовать Stream.parallel.
Параллельные потоки (`.parallel()`): Использование параллельных потоков, как в данном примере, может быть подходящим, но важно понимать, что параллельные потоки не всегда являются оптимальными. В случае с блокирующими операциями, такими как
Thread.sleep(), параллельное выполнение может создать дополнительные накладные расходы, в результате чего достигается даже меньшая производительность, чем при последовательной обработке. Параллельные потоки более эффективны, когда работа с потоками не блокирует выполнение (например, при вычислениях без задержек).2. Использовать
CompletableFuture В целом решение такое же, как и первый вариант, но гибче.
---
Теперь моё решение.
Эту задачу стоит разделить на два этапа:
1. Обеспечить мгновенную отправку сообщений после их создания.
2. Реализовать асинхронную природу отправки.
Мгновенная отправка.
По сути, решение сводится к получению доступа к объекту TgService. Но если мы напрямую установим связь
class VoiceHandler(var tgService: TgService)
то у нас получится циклическая зависимость, что создаёт сложности с поддержкой и расширением.
Чтобы её решить, можно использовать механизм callback.
В блоке ООП есть отдельный урок про это решение. У нас есть класс StartUI, который содержит обработку меню ExitAction. Он, в свою очередь, должен изменить состояние объекта StartUI. Чтобы не создавать циклическую зависимость, мы создали интерфейс UserAction, который реализует объект StartUI. Но такие связи несколько запутывают.
В решении задачи выше я использую функциональный интерфейс:
Consumer<String> receivepublic List<String> process(String message, Consumer<String> receive) {
var result = new ArrayList<String>();
IntStream.range(0, 5).forEach(it -> {
try {
Thread.sleep(1000);
var resp = String.format("Message: %s", it);
receive.accept(resp);
result.add(resp);
} catch (Exception e) {
e.printStackTrace();
}
});
return result;
}Поправим вызов:
@Override
void receive(String message) {
var messages = voiceHandle.process(message, this::sent);
}
Асинхронная природа.
Метод
sent имеет синхронную природу. Он ждёт ответа. Я специально отметил его как final, чтобы его нельзя было переопределить.Чтобы решить проблему асинхронности, я использую
CompletableFuture:@Override
void receive(String message) {
var messages = voiceHandle.process(message, this::asyncSent);
}
public void asyncSent(String message) {
CompletableFuture.runAsync(() -> sent(message));
}
---
Хотите узнать больше? Блоки:
ООП — https://job4j.ru/profile/courses/2
Thread — https://job4j.ru/profile/courses/10
🔥5🤯3
IT-Тренер
У нас в курсе есть раздел вопросы с собеседований.
https://job4j.ru/profile/interview
Раздел сделан, чтобы подготовиться к теоретическим вопросам на собеседовании.
Однако, я изначально понимал, что есть некоторое не соответствие. На собеседовании вас просят ответить голосом, а через нашу платформу это сделать нельзя.
А теперь можно )).
Сегодня за несколько часов сделал бота
@ITTalkBot
Он работает по аналогии с Лингво-тренером. Я бы даже сказал он использует одну и ту же кодовую базу )).
Смысл такой же. Заходим, выбирает тему, выбираем вопрос и отвечаем - ГОЛОСОМ. Бот анализирует речь, отправляет ее ИИ и просить проверить ответ.
Как вам идея? ) Попробуйте, отставьте отзывы.
Да версия крайне сырая. 🙈
У нас в курсе есть раздел вопросы с собеседований.
https://job4j.ru/profile/interview
Раздел сделан, чтобы подготовиться к теоретическим вопросам на собеседовании.
Однако, я изначально понимал, что есть некоторое не соответствие. На собеседовании вас просят ответить голосом, а через нашу платформу это сделать нельзя.
А теперь можно )).
Сегодня за несколько часов сделал бота
@ITTalkBot
Он работает по аналогии с Лингво-тренером. Я бы даже сказал он использует одну и ту же кодовую базу )).
Смысл такой же. Заходим, выбирает тему, выбираем вопрос и отвечаем - ГОЛОСОМ. Бот анализирует речь, отправляет ее ИИ и просить проверить ответ.
Как вам идея? ) Попробуйте, отставьте отзывы.
Да версия крайне сырая. 🙈
🔥22❤4
Лингво-тренер | Обновления
Добавил настройки:
- цель на день. По сути это реализация принципа Помидоро. засекаешь короткий промежуток времени: 5, 10, 15 минут и сосредоточенно работаешь в этом периоде. Время отмечается в прогресс баре.
- Скорость речи. Можно увеличить или замедлить речь. Удобно в зависимости от уровня владения языка.
- Напоминание. Присылает уведомление, что нужно потренироваться.
Пробуйте @talksharp_bot 🇺🇸
Добавил настройки:
- цель на день. По сути это реализация принципа Помидоро. засекаешь короткий промежуток времени: 5, 10, 15 минут и сосредоточенно работаешь в этом периоде. Время отмечается в прогресс баре.
- Скорость речи. Можно увеличить или замедлить речь. Удобно в зависимости от уровня владения языка.
- Напоминание. Присылает уведомление, что нужно потренироваться.
Пробуйте @talksharp_bot 🇺🇸
🔥4
Альфа-банк | Скрининг вопросы | Позиция помидор
1. Какие варианты инжекта бинов в Spring существуют?
- Ответ: В Spring инжектирование бинов можно производить через конструктор, сеттеры или напрямую через поля. Наиболее предпочтительным считается инжектирование через конструктор, так как оно гарантирует, что все зависимости будут инициализированы, а объект нельзя создать без необходимых зависимостей.
2. Какие фреймворки используете чаще всего?
- Ответ: Я чаще всего использую Spring, так как это стандарт индустрии, особенно для Java. Для микросервисной архитектуры это наиболее удобное решение, поскольку оно позволяет легко находить разработчиков и масштабировать проект. Если же нужен более легковесный фреймворк, можно рассмотреть такие как Quarkus, но для большинства проектов я предпочитаю Spring.
3. Какие решения принимали по замене стека технологий?
- Ответ: В команде, где я работал, мы могли адаптировать стек технологий под конкретные задачи. Работая с микросервисами, я мог самостоятельно принимать решения о замене технологий, и большинство разработчиков, включая джунов и медлов, могли работать с тем же стеком без проблем.
4. Почему вы выбрали Spring как основной фреймворк?
- Ответ: Spring — это стандарт индустрии, особенно для Java. Он предоставляет широкий набор инструментов, которые упрощают разработку. Также на нем легко обучать новых разработчиков, так как это распространенный фреймворк.
5. Какие преимущества и недостатки есть у Quarkus по сравнению со Spring?
- Ответ: Quarkus быстрее стартует, занимает меньше памяти и работает быстрее. Однако, если проект не требует таких оптимизаций, Spring будет более удобным, так как у него больше документации и сообщества. Quarkus — это отличный выбор для высоконагруженных систем, но для обычных проектов его использование может быть избыточным.
6. Зачем нужен Java Memory Model (JMM)?
- Ответ: JMM описывает, как потоки взаимодействуют через общую память. Его основная цель — это предсказуемость и консистентность работы программы, а также предотвращение гонок данных. Он гарантирует видимость изменений между потоками и синхронизацию данных.
7. Что такое volatile в Java и для чего он нужен?
- Ответ: Ключевое слово
8. Зачем используются атомарные операции и почему они лучше, чем использование обычных переменных?
- Ответ: Атомарные операции нужны для обеспечения предсказуемости изменений в многопоточной среде. Например, инкремент значения с использованием атомарных операций гарантирует, что изменения будут выполнены корректно, даже если несколько потоков одновременно изменяют одну и ту же переменную.
9. Что такое аспектно-ориентированное программирование (АОП) и как оно используется в Spring?
- Ответ: АОП позволяет разделить кросс-функциональные задачи (например, логирование или обработку ошибок) от основной логики программы. В Spring можно использовать АОП для выполнения таких задач без необходимости вмешиваться в код каждого метода вручную, что позволяет улучшить архитектуру и сделать код более чистым.
10. Когда стоит использовать микросервисную архитектуру, а когда лучше оставить монолит?
- Ответ: Микросервисную архитектуру следует использовать, когда система сильно масштабируется, и требуется деление на независимые сервисы для разных команд. Для маленьких проектов или стартапов с небольшой командой лучше использовать монолит, так как это проще и дешевле на старте.
11. Что такое Service Discovery в контексте микросервисов?
- Ответ: Service Discovery позволяет автоматически находить доступные сервисы в микросервисной архитектуре. Это помогает избежать жесткого кодирования URL-адресов сервисов и позволяет динамически определять их местоположение в сети.
1. Какие варианты инжекта бинов в Spring существуют?
- Ответ: В Spring инжектирование бинов можно производить через конструктор, сеттеры или напрямую через поля. Наиболее предпочтительным считается инжектирование через конструктор, так как оно гарантирует, что все зависимости будут инициализированы, а объект нельзя создать без необходимых зависимостей.
2. Какие фреймворки используете чаще всего?
- Ответ: Я чаще всего использую Spring, так как это стандарт индустрии, особенно для Java. Для микросервисной архитектуры это наиболее удобное решение, поскольку оно позволяет легко находить разработчиков и масштабировать проект. Если же нужен более легковесный фреймворк, можно рассмотреть такие как Quarkus, но для большинства проектов я предпочитаю Spring.
3. Какие решения принимали по замене стека технологий?
- Ответ: В команде, где я работал, мы могли адаптировать стек технологий под конкретные задачи. Работая с микросервисами, я мог самостоятельно принимать решения о замене технологий, и большинство разработчиков, включая джунов и медлов, могли работать с тем же стеком без проблем.
4. Почему вы выбрали Spring как основной фреймворк?
- Ответ: Spring — это стандарт индустрии, особенно для Java. Он предоставляет широкий набор инструментов, которые упрощают разработку. Также на нем легко обучать новых разработчиков, так как это распространенный фреймворк.
5. Какие преимущества и недостатки есть у Quarkus по сравнению со Spring?
- Ответ: Quarkus быстрее стартует, занимает меньше памяти и работает быстрее. Однако, если проект не требует таких оптимизаций, Spring будет более удобным, так как у него больше документации и сообщества. Quarkus — это отличный выбор для высоконагруженных систем, но для обычных проектов его использование может быть избыточным.
6. Зачем нужен Java Memory Model (JMM)?
- Ответ: JMM описывает, как потоки взаимодействуют через общую память. Его основная цель — это предсказуемость и консистентность работы программы, а также предотвращение гонок данных. Он гарантирует видимость изменений между потоками и синхронизацию данных.
7. Что такое volatile в Java и для чего он нужен?
- Ответ: Ключевое слово
volatile используется для того, чтобы гарантировать, что изменения переменной будут немедленно видны всем потокам. Это нужно, когда переменная используется в многопоточной среде и требуется избежать кеширования значений в локальной памяти потока.8. Зачем используются атомарные операции и почему они лучше, чем использование обычных переменных?
- Ответ: Атомарные операции нужны для обеспечения предсказуемости изменений в многопоточной среде. Например, инкремент значения с использованием атомарных операций гарантирует, что изменения будут выполнены корректно, даже если несколько потоков одновременно изменяют одну и ту же переменную.
9. Что такое аспектно-ориентированное программирование (АОП) и как оно используется в Spring?
- Ответ: АОП позволяет разделить кросс-функциональные задачи (например, логирование или обработку ошибок) от основной логики программы. В Spring можно использовать АОП для выполнения таких задач без необходимости вмешиваться в код каждого метода вручную, что позволяет улучшить архитектуру и сделать код более чистым.
10. Когда стоит использовать микросервисную архитектуру, а когда лучше оставить монолит?
- Ответ: Микросервисную архитектуру следует использовать, когда система сильно масштабируется, и требуется деление на независимые сервисы для разных команд. Для маленьких проектов или стартапов с небольшой командой лучше использовать монолит, так как это проще и дешевле на старте.
11. Что такое Service Discovery в контексте микросервисов?
- Ответ: Service Discovery позволяет автоматически находить доступные сервисы в микросервисной архитектуре. Это помогает избежать жесткого кодирования URL-адресов сервисов и позволяет динамически определять их местоположение в сети.
👍10
12. В чем разница между оркестрацией и хореографией в распределенных системах?
- Ответ: Оркестрация — это централизованный подход, когда один компонент (дирижер) управляет взаимодействием между сервисами. Хореография же представляет собой децентрализованный подход, где каждый сервис сам решает, когда и как взаимодействовать с другими сервисами.
13. Какие виды JOIN существуют в SQL и когда каждый из них используется?
- Ответ: В SQL есть несколько видов JOIN:
14. Какие команды Linux вы используете наиболее часто?
- Ответ: Я часто использую команды для работы с процессами, такие как
15. Как вы решаете задачи по зарплатным вилкам и устройству на работу?
- Ответ: Вилки зарплат зависят от того, как сотрудник устраивается — через ИП или по трудовому договору. Обычно я ориентируюсь на рыночные ставки и всегда стараюсь договориться по максимуму. На собеседовании важно понимать, какие возможности предоставляет компания и какие условия для роста.
——
О жизни в IT | Java | Kotlin | Карьера @java_kotlin_hub
- Ответ: Оркестрация — это централизованный подход, когда один компонент (дирижер) управляет взаимодействием между сервисами. Хореография же представляет собой децентрализованный подход, где каждый сервис сам решает, когда и как взаимодействовать с другими сервисами.
13. Какие виды JOIN существуют в SQL и когда каждый из них используется?
- Ответ: В SQL есть несколько видов JOIN:
INNER JOIN, LEFT JOIN, RIGHT JOIN, и CROSS JOIN. INNER JOIN используется для выбора строк, которые есть в обеих таблицах, LEFT JOIN — для выбора всех строк из левой таблицы и соответствующих строк из правой. RIGHT JOIN аналогичен, но выбирает все строки из правой таблицы. CROSS JOIN возвращает декартово произведение строк из обеих таблиц.14. Какие команды Linux вы используете наиболее часто?
- Ответ: Я часто использую команды для работы с процессами, такие как
ps, top, systemctl, а также для чтения логов — cat, tail, nano. Для мониторинга состояния системы использую df, du, а также grep для поиска по тексту.15. Как вы решаете задачи по зарплатным вилкам и устройству на работу?
- Ответ: Вилки зарплат зависят от того, как сотрудник устраивается — через ИП или по трудовому договору. Обычно я ориентируюсь на рыночные ставки и всегда стараюсь договориться по максимуму. На собеседовании важно понимать, какие возможности предоставляет компания и какие условия для роста.
——
О жизни в IT | Java | Kotlin | Карьера @java_kotlin_hub
👍12
Объекты K8s | Service [#505381]
Добавил урок в курс 4.8. DevOps
Объекты K8s | Service [#505381]
https://job4j.ru/profile/courses/35
Пока еще со скидкой 7990 рублей. С этими хобби-проектами совсем забыл, что повис этот курс. Простите 🙏
А так же всех защитников с праздником!!! 🫡
Добавил урок в курс 4.8. DevOps
Объекты K8s | Service [#505381]
https://job4j.ru/profile/courses/35
Пока еще со скидкой 7990 рублей. С этими хобби-проектами совсем забыл, что повис этот курс. Простите 🙏
А так же всех защитников с праздником!!! 🫡
🎉10👍4
Настройка окружения для контейнера Docker [#505382]
ДОбавил урок в курс 4.8. DevOps
Настройка окружения для контейнера Docker [#505382]
ДОбавил урок в курс 4.8. DevOps
Настройка окружения для контейнера Docker [#505382]
👍7🔥1
🌟 ВАКАНСИЯ: Java Senior (Part-time) 🌟
💻 Стек:
- Java
- Spring Boot
- REST API
- Kafka (интеграция в планах)
🎯 Что делаем?
Разрабатываем бэкенд для системы, похожей на "Теремок" — простые бизнес-процессы с понятной логикой: валидация данных, создание сущностей, работа с картотеками и вызовами. Но! В предметной области много нюансов, которые нужно вытягивать из спецификаций и реализовывать.
⚡️ Задачи:
- Реализация бизнес-логики (уровень middle)
- Решение сложных технических задач (редко, но бывает)
- Поддержка инфраструктуры кластера (конфигурации, отладка)
⚠️ Особенность:
Мы ценим самостоятельность! Большинство решений принимаете именно вы. Если вам комфортно работать без постоянного контроля и вы любите брать ответственность за архитектурные и технические решения — это ваш проект!
💰 Зарплата:
- От 1500 ₽ до 3000 ₽ за час
- Оплата зависит от вашего опыта и сложности задач.
⏰ Условия:
- Part-time (2–3 часа в день)
- Удалённо
👨💻 Кому подойдёт?
Senior-разработчику с опытом в Java/Spring, который готов самостоятельно принимать решения и работать над интересными задачами без полного погружения в проект.
📝 Плюс:
Если вы любите разбираться в тонкостях архитектуры, принимать важные решения и решать нестандартные проблемы — эта вакансия для вас!
🔥 Если заинтересовало, пришлите резюме в личные сообщения @parsentev.
#Java #Spring #Remote #PartTime #SelfManaged #HighPay
💻 Стек:
- Java
- Spring Boot
- REST API
- Kafka (интеграция в планах)
🎯 Что делаем?
Разрабатываем бэкенд для системы, похожей на "Теремок" — простые бизнес-процессы с понятной логикой: валидация данных, создание сущностей, работа с картотеками и вызовами. Но! В предметной области много нюансов, которые нужно вытягивать из спецификаций и реализовывать.
⚡️ Задачи:
- Реализация бизнес-логики (уровень middle)
- Решение сложных технических задач (редко, но бывает)
- Поддержка инфраструктуры кластера (конфигурации, отладка)
⚠️ Особенность:
Мы ценим самостоятельность! Большинство решений принимаете именно вы. Если вам комфортно работать без постоянного контроля и вы любите брать ответственность за архитектурные и технические решения — это ваш проект!
💰 Зарплата:
- От 1500 ₽ до 3000 ₽ за час
- Оплата зависит от вашего опыта и сложности задач.
⏰ Условия:
- Part-time (2–3 часа в день)
- Удалённо
👨💻 Кому подойдёт?
Senior-разработчику с опытом в Java/Spring, который готов самостоятельно принимать решения и работать над интересными задачами без полного погружения в проект.
📝 Плюс:
Если вы любите разбираться в тонкостях архитектуры, принимать важные решения и решать нестандартные проблемы — эта вакансия для вас!
🔥 Если заинтересовало, пришлите резюме в личные сообщения @parsentev.
#Java #Spring #Remote #PartTime #SelfManaged #HighPay
🔥1
Класс с одним методом на 267 строк | ООП
Сегодня еще хотел бы показать вам один пример код из проекта IT-Тренер
В проекте есть класс, который отрабатывает события нажатия кнопок. Каждая кнопка имеет объект data. В зависимости от data происходит необходимо поведение.
Код сформирован в if-else-if блоки.
Вопрос, как переписать этот класс? Стек java + Spring Core.
Сегодня еще хотел бы показать вам один пример код из проекта IT-Тренер
В проекте есть класс, который отрабатывает события нажатия кнопок. Каждая кнопка имеет объект data. В зависимости от data происходит необходимо поведение.
Код сформирован в if-else-if блоки.
@Service
@AllArgsConstructor
public class CallbackHandle {
private final UserService userService;
private final GigaChatService gigaChatService;
private final VoiceRepository voiceRepository;
private final SituationService situationService;
private final TgButtons tgButtons;
private final LevelLangPrompt levelLangPrompt;
private final SmallTalkService smallTalkService;
public void process(Path userDir, Update update, ContentSender receive) {
var data = update.getCallbackQuery().getData();
var user = userService.findByClientId(update.getCallbackQuery().getFrom().getId()).get();
var lang = userService.findUserConfigByKey(user.getId(), UserConfigKey.TARGET_LANG)
.orElse(new UserConfig(-1L, user, UserConfigKey.TARGET_LANG.key, "en"))
.getValue();
var level = userService.findUserConfigByKey(user.getId(), UserConfigKey.TARGET_LANG)
.orElse(new UserConfig(-1L, user, UserConfigKey.LEVEL_LANG.key, "A1"))
.getValue();
if ("recommendation".startsWith(data)) {
var message = (Message) update.getCallbackQuery().getMessage();
var buttons = message.getReplyMarkup().getKeyboard().iterator().next();
var updatedBtns = buttons.stream()
.filter(btn -> !btn.getCallbackData().equals("recommendation"))
.toList();
receive.sent(
Content.of().chatId(user.getChatId())
.deleteKeyboardMarkUpMessageId(message.getMessageId())
.build());
var voice = voiceRepository.findByMessageId(message.getMessageId()).get();
var req = new StringBuilder();
req.append("Укажи на грамматические ошибки в английском тексте.\n\n");
req.append(voice.getText());
var resp = gigaChatService.callWithoutSystem(req.toString(), -1L);
receive.sent(
Content.of().chatId(user.getChatId())
.buttons(List.of(updatedBtns))
.text(String.format("*Рекомендации:*\n%s", resp))
.build());
} else if ("hint".startsWith(data)) {
var message = (Message) update.getCallbackQuery().getMessage();
var buttons = message.getReplyMarkup().getKeyboard().iterator().next();
var updatedBtns = buttons.stream()
// more then 267 lines
Вопрос, как переписать этот класс? Стек java + Spring Core.
👍3
Лингво-тренер | Режим фразы
Я планирую в мае поехать на море с семьей. В этот раз решили полететь в Дубай.
Как я уже писал выше, иностранный язык дает массу положительных эмоций.
Одна из них появляется, когда вы можете сказать пару фраз на местном языке.
Для этого я решил добавить в лингво-тренер раздел "Фразы". Там собраны полезные фразы для начала изучения языка.
Попробуйте @talksharp_bot.
Я планирую в мае поехать на море с семьей. В этот раз решили полететь в Дубай.
Как я уже писал выше, иностранный язык дает массу положительных эмоций.
Одна из них появляется, когда вы можете сказать пару фраз на местном языке.
Для этого я решил добавить в лингво-тренер раздел "Фразы". Там собраны полезные фразы для начала изучения языка.
Попробуйте @talksharp_bot.
👍2
ITTalkBot | Обновления
1. Поправил интерфейс. Добавить кнопку изучить.
2. Поправил запросы на проверку. Теперь проверять корректно.
3. Выяснил интересную особенность, чтобы gTTS распознал английские термены их нужно произносить четко, а то будет каша.
Планирую поправить навигацию, сейчас крайне неудобно искать вопросы.
Пробуйте @ITTalkBot
1. Поправил интерфейс. Добавить кнопку изучить.
2. Поправил запросы на проверку. Теперь проверять корректно.
3. Выяснил интересную особенность, чтобы gTTS распознал английские термены их нужно произносить четко, а то будет каша.
Планирую поправить навигацию, сейчас крайне неудобно искать вопросы.
Пробуйте @ITTalkBot
❤5👍2
ITTalkBot | Навигация
Добавил удобную навигацию. Теперь можно сразу загрузить следующий вопрос.
Пробуйте @ITTalkBot
Добавил удобную навигацию. Теперь можно сразу загрузить следующий вопрос.
Пробуйте @ITTalkBot
❤4🔥2