Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Java книги

973 поста сначала свежее
7
crazyzubr
11 месяцев назад
Лига программистов
Серия История с Java...script

Продолжение истории с java...script⁠⁠

Может кому-то покажется неочевидным, но я в течение всего периода работы в вышеупомянутой компании (да и сейчас, кстати, тоже) пытался понять: почему все-таки была сделана пауза после произнесенного "Javа"? И почему все же добавлено "...script" после паузы, если проекты были именно на Java? А проект был не один. Новый сайт провайдера тоже был начат на Java, а именно по технологии JSP (Java Server Pages); его мне тоже передали.

В один из дней "босс" (так называли того самого главного директора в компании) пришел ко мне и говорит: "Добавь новый сертификат на тестовый сайт". Я думаю это была одна из проверок того насколько я разобрался с этим проектом. Сертификат, то есть по сути картинка в pdf, в блок на сайте я добавил, это ведь было простое копирование элемента в шаблоне и дополнительно загрузка файла по scp на сервер. Основная сложность была только в том, что я еще не деплоил ни разу сайт, но в этом мне по скайпу помог прежний программист. Отсюда я делал вывод, что раз он проверяет мою способность менять что-либо на тестовом сайте, значит до сих пор думает что я умею в Java. Вот только позднее выяснилось (и "босс" об этом, конечно не сказал), что новый сайт теперь делает другой программист на аутсорсе. Должно быть делал его на удаленке, в офис он по крайней мере никогда не приходил. Забавно, что новая версия была сделана на PHP (а если быть точнее CRM битрикс).

Второй Java-проект (тот который я переписал на PHP) был призван выводить операторам номера должников. Основная его фича заключалась в том, чтобы показывать каждому оператору свой набор абонентов. Соответственно будет ошибкой показывать двум операторам одного клиента. Ну, и тех клиентов, с которыми состоялся разговор тоже не следует отображать. Оператор видел список, звонил по порядку и проставлял статусы. С этим и происходила беда, иногда операторам выпадали номера, по которым уже звонили недавно. Причем могли выпасть другому оператору в тот же день. Эта проблему, как я понял на тот момент, заключалась как раз в сервере tomcat6, а именно был какой-то баг с потоками.

Код проекта архивировался, этот архив скармливался томкету, он его компилировал и запускал. То что он делал внутри себя с запросами я выяснить был не в состоянии. Поэтому сначала была попытка обновить tomcat до седьмой версии.

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

Как-то в очередной раз пришла старшая оператор и прямо-таки психнула. По сути она опять ничего мне толком не сказала, но когда я сказал что быстро починить не удастся, то пообещала, что так мне это с рук не сойдет. До нее был другой менеджер, который тоже приходил с проблемами, но так как от меня толку не было, то через неделю он уволился. По крайней мере вижу свою вину в этом, потому что кого-кого, а менеджеров "босс" прессовал за любую мелочь. То есть раз я не мог помочь ему, он не мог решить проблему, и под давлением "босса" пришлось уволиться.

После того как проект был переписан произошла какая-то дичь. Проблемы с потоками и выводом повторных абонентов по идее не должно быть. И все же меня вызвали "на ковер" к "боссу", и там уже была эта "мадам". Она указала перстом на меня и говорит "его спрашивайте". А "босс" такой - "так это ты во всем виноват?". Максимально непонятно что у них там происходило до того как я вошел, и какая проблема случилась, но естественно я подумал что где-то допустил ошибку.

Загвоздка в том, что впоследствии я ее не нашел. Для выяснения ходил в офис к девочкам-операторам, смотрел как у них всех отображается, как все работает, перепроверял код и не нашел ошибок. Неделю я все это выяснял, и за это время не изменил ни строчки кода в этом проекте. Как назло все работало и никаких багов не было. Параллельно я уже начал искать новую работу, и получается эта неделя была последней. Всего в этой компании мне довелось проработать четыре месяца.

После ухода из той компании провайдера я заходил периодически на страницу проекта, чтобы проверить не поменялось ли чего. Через три месяца обнаружил, что код обратно вернулся на Java-версию. Это было очевидно, потому что изначально сайт был по SPA-технологии, то есть после выполнения запроса обновление страницы было без перезагрузки этой самой страницы. Я же переписал на PHP по технологии SSR, только в некоторых местах был добавлен AJAX. Страница входа точно была с перезагрузкой, даже если просто выводилась ошибка входа. Кроме того, закрыли доступ или удалили аккаунт и я больше не мог входить внутрь ЛК оператора.

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

Показать полностью
[моё] Программирование IT IT юмор Карьера Java Javascript Личный опыт Программист Текст
4
18
quazr
11 месяцев назад

Начинать нужно с малого⁠⁠

Начинать нужно с малого IT юмор, Программирование, Мемы, IT, Telegram (ссылка), Java

айтификация

IT юмор Программирование Мемы IT Telegram (ссылка) Java
3
1764
crazyzubr
11 месяцев назад
Лига программистов
Серия История с Java...script

История с Java...script⁠⁠

Устраивался как-то на одну из первых работ. Откликнулся на вакансию программиста в компанию местного провайдера. В описании ничего необычного, требуются знания HTML, JavaScript и чего-то еще, уже не вспомню.

Пришел на собеседование, меня без лишних слов отправили за компьютер сделать какую-то простую страничку. По сути это была верстка, даже не программирование. Что ж, задание есть задание. Сделал за 15 минут. Задание давал, как выяснилось исполнительный директор. После того, как я ему показал результат и его он устроил, был отправлен к другому директору, выше которого в компании уже никаких директоров нет.

Уселись с ним на диван, и он начал беседу: "Насколько хорошо ты знаешь Java". И делает паузу. Я напрягся. После двухсекундной паузы он все же произносит: "...script". Я с облегчением выдохнул: "Нет предела совершенству." Далее шел еще какой-то диалог, но не суть важно.

На первый рабочий день пришел другой программист и сразу выяснилось, что я нужен ему на замену, а он увольняется (или скорее его увольняют); поэтому он передает мне все дела, документацию и прочее. Когда он открыл проект, над которым работал в данный момент, то я покрылся холодным потом. Это был самый настоящий 100% натуральный код на Java. Он поинтересовался – с какого пункта надо объяснять. Я признался, что с нуля. Пути отхода я уже не видел. В голове промелькнули мысли про голодные дни, когда я снова ищу работу, и надо проходить собеседования. Поэтому я остался внимать суть по новому для меня направлению, тем более день собеседования уже был позади.

Дальше я неделю приходил на работу, где мне не давали никаких задач, я просто изучал проект и заодно азы Java. Познавал до набухания мозга что такое есть сервлет, зачем нужен TomCat и прочие явошные дела. Что-то у меня даже получалось, но это было копирование имеющегося кода с незначительными изменениями.

Наконец, менеджеры, которые работали с этим веб-приложением начали приходить с текущими проблемами. Видимо, решили что уже пора. Я их проблемы решить не мог, потому что там происходила непонятная магия с потоками. Предыдущий программист, с которым переписывались по скайпу, в этом деле не мог ничего подсказать, по всей видимости тоже не знал.

В итоге когда мозг совсем набух от влитых знаний, я принял самостоятельное волевое решение переписать проект на PHP, о котором никому не сообщил и принялся за переделку. На мой взгляд этот личный кабинет был очень простой и делать его на Java было неправильным решением. Я так понял, что тот, кто этим занимался, просто знал Java и ему было так удобно сделать. А то, что найти специалистов на замену будет сложновато как-то никто не думал. При этом я прибегнул к небольшой хитрости. Дело в том, что с этим проектом можно было работать только с ноутбука в офисе, во внутренней сети. Но я нашел лазейку, и отключил функцию засыпания ноутбука, когда крышка была закрыта. Уходя с работы, я просто закрывал крышку с незалоченным Windows, а из дома подключался к нему через удаленный рабочий стол и работал. Так я не был зависим только от рабочего времени и писал код вечером и ночью. Я только беспокоился на тему того, что кто-то надумает посмотреть что в ноуте в этом время, но вроде ничего такого не было.

За две недели все было готово. Новое веб-приложение на PHP я выкатил ночью в выходные. В понедельник ко мне прибежали менеджеры с разными проблемами. Вполне логично, что не все было сделано хорошо и некоторую бизнес-логику я упустил. Зато теперь я мог все это чинить, потому что код был полностью мой и я понимал все что он делает, поэтому за неделю все горячие проблемы разрешились.

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

Показать полностью
[моё] Личный опыт Программирование IT PHP Собеседование Java Javascript Программист IT юмор Карьера Текст
347
4
Agmioli
Agmioli
11 месяцев назад
Android

Как создать Андроид-приложение, которое будет запускать сайт из интернета?⁠⁠

Как создать Андроид-приложение, которое будет запускать сайт из интернета? Приложение, Интернет, Android, Android разработка, Веб-разработка, Приложение на Android, Программирование, Java, Приложение на java, Kotlin, Android studio

Как создать Андроид-приложение, которое будет запускать сайт из интернета?

Это дополнение к статье:
Создание Андроид приложений без навыков программирования. Конвертируем html страницу в apk-файл: Создание Андроид приложений без навыков программирования. Конвертируем html страницу в apk-файл

Чтобы вместо файловой (офлайн)версии html-сайта, при запуске приложения запускался настоящий онлайн-сайт из интернета, нужно выполнить следующее:

Вместо шага (который занимается запуском файловой html-версии сайта) из статьи:
7. В каталоге app найдите папку assets.


Выполняем следующие шаги:

1. Открываем файл-вкладку MainActivity.java

2. Находим в нем строку:
myWeb.loadUrl("file:///android_asset/index.html");

3. Вместо "file:///android_asset/index.html"
Прописываем онлайн-путь(веб-адрес) на ваш интернет-сайт, который должен запуститься при открытии вашего андроид-приложения.

4. Запускаем приложение, и проверяем.

Показать полностью
[моё] Приложение Интернет Android Android разработка Веб-разработка Приложение на Android Программирование Java Приложение на java Kotlin Android studio
2
2
TrueRuslan
TrueRuslan
11 месяцев назад

Обзор популярных ORM для Java Spring приложений⁠⁠

Object-Relational Mapping (ORM) - это технология, которая позволяет разработчикам работать с базами данных, используя объектно-ориентированный подход. В экосистеме Java Spring существует несколько популярных ORM-фреймворков, которые упрощают взаимодействие с реляционными базами данных. В этой статье мы рассмотрим три таких фреймворка: Hibernate, JOOQ и MyBatis.

Hibernate

Hibernate - это самый популярный и широко используемый ORM-фреймворк для Java. Он предоставляет мощный и гибкий механизм для преобразования данных между объектами Java и реляционными базами данных.

Преимущества:
1. Автоматическое управление жизненным циклом объектов: Hibernate управляет состояниями объектов (transient, persistent, detached), что упрощает работу с ними.
2. HQL (Hibernate Query Language): позволяет писать запросы, используя объектно-ориентированный синтаксис, что делает код более читаемым.
3. Кэширование: поддержка первого и второго уровней кэширования для повышения производительности.

Недостатки:
1. Сложность: для больших проектов с множеством взаимосвязанных сущностей может быть сложным в настройке и использовании.
2. Производительность: в некоторых случаях, автоматическое управление объектами и кэширование могут вести к избыточным операциям, что снижает производительность.

JOOQ

JOOQ (Java Object Oriented Querying) - это фреймворк для построения SQL-запросов с использованием объектно-ориентированного подхода. В отличие от Hibernate, JOOQ фокусируется на SQL-first подходе, предоставляя мощный инструмент для генерации типобезопасных SQL-запросов.

Преимущества:
1. Типобезопасность: JOOQ генерирует классы для каждой таблицы в базе данных, что позволяет создавать типобезопасные запросы.
2. Мощь SQL: разработчики могут использовать все возможности SQL, включая сложные запросы и функции, без потерь производительности.
3. Гибкость: поддержка различных баз данных и их специфичных возможностей.

Недостатки:
1. Меньшая абстракция: в сравнении с Hibernate, разработчики должны больше знать о структуре базы данных и писать больше кода для управления данными.
2. Усложнение кода: при использовании сложных SQL-запросов код может стать менее читаемым и более сложным в поддержке.

MyBatis

MyBatis - это ORM-фреймворк, который предоставляет полуконфигурационный подход к работе с базами данных. Он упрощает взаимодействие с базой данных, позволяя писать SQL-запросы и маппить результаты на Java-объекты.

Преимущества:
1. Гибкость: разработчики имеют полный контроль над написанием SQL-запросов.
2. Легкость интеграции: простой и интуитивно понятный процесс настройки и интеграции с существующими проектами.
3. Поддержка сложных маппингов: возможность реализации сложных маппингов между результатами SQL-запросов и объектами Java.

Недостатки:
1. Ручное написание SQL: необходимость вручную писать SQL-запросы может увеличивать количество кода и сложность.
2. Отсутствие автоматического управления жизненным циклом объектов: разработчики должны самостоятельно управлять состояниями объектов и их синхронизацией с базой данных.

Сравнение

Фреймворк: Hibernate | JOOQ | MyBatis
Автоматизация (ORM): Высокая | Низкая | Средняя
Поддержка сложных запросов: Средняя | Высокая | Высокая
Типобезопасность: Средняя | Высокая | Низкая
Легкость использования: Средняя | Низкая | Высокая

Выбор ORM-фреймворка зависит от конкретных требований проекта и предпочтений команды. Hibernate подойдет для проектов, где важна автоматизация и управление жизненным циклом объектов. JOOQ будет отличным выбором для тех, кто хочет использовать мощь SQL и типобезопасность. MyBatis идеально подойдет для проектов, где важна гибкость и контроль над SQL-запросами.
На моем опыте при работе с большим объемом данных предпочитают использовать JOOQ.

Немыкин.Продакшн
#Java #ORM

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Java Orm Текст Telegram (ссылка) Длиннопост
0
2
lifeofjuniordev
lifeofjuniordev
11 месяцев назад

ИЗБАВЛЯЕМСЯ ОТ ХАРДКОДА В JAVA С @FieldNameConstants⁠⁠

Если вы работали с JPA Criteria API, то вам точно приходилось хардкодить название полей:
public Specification<Car> where(@Nullable CarFilterDto carFilter) {
return (root, query, cb) -> cb.equal(root.get("type"), carFilter.getType());
}
Или возможно вам нужно было замапить поля дто, по которым можно сортировать, с полями entity:
private final Map<String, String> sortingMap = Map.of(
"user.age", "user_age",
"creationDate", "creationDate"
);

В таких случаях, чтобы избавиться от хардкода, нужно написать константы с именами полей.
Вручную это делать долго, но оказывается, это умеет ломбок!
Вот так выглядит код с ломбоком:
@FieldNameConstants
public class FieldNameConstantsExample {
private final String iAmAField;
private final int andSoAmI;
@FieldNameConstants.Exclude private final int asAmI;
}
и вот во что он превратится:
public class FieldNameConstantsExample {
private final String iAmAField;
private final int andSoAmI;
private final int asAmI;

public static final class Fields {
public static final String iAmAField = "iAmAField";
public static final String andSoAmI = "andSoAmI";
}
}
Также, можно:
- генерировать енам вместо констант
- поменять название статического класса
- поменять уровень доступа полей
- генерировать только для явно включенных полей
@FieldNameConstants(asEnum = true,
innerTypeName = "StaticClassName",
level = lombok.AccessLevel.PRIVATE,
onlyExplicitlyIncluded = true)

👨‍💻Джуниор

Показать полностью
[моё] Telegram (ссылка) Программирование IT Java Текст
1
49
megavatt
megavatt
11 месяцев назад

Когда осознал, куда пришел⁠⁠

Когда осознал, куда пришел Юмор, IT, IT юмор, Java, Reddit, Срач, Перевел сам, Telegram (ссылка), Скриншот

itmemhub

Показать полностью 1
Юмор IT IT юмор Java Reddit Срач Перевел сам Telegram (ссылка) Скриншот
10
0
Аноним
Аноним
11 месяцев назад

Вопрос джавистам!⁠⁠

class ThreadBug implements Runnable {

Object reference = null;

public void run() {

while(true) {

if (reference == null) {

continue;

}

System.out.println(reference);

return;

}

}

public static void main(String[]args) throws InterruptedException {

ThreadBug tb = new ThreadBug();

Thread tr = new Thread(tb);

tr.start();

Thread.sleep(1000);

tb.reference = "It\'s good!";

tr.join();

}

}

Простейшая прога. Но она зависнет при запуске и так и ничего не выведет на консоль. Вопрос. Где в доках может быть описана эта проблема и методы ее решения?

[моё] Программирование Java Текст
11
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии