Telegram Web Link
Forwarded from Data Science. SQL hub
Как хранить сеть дорог в БД для построения маршрута?

И так, формулировка задачи следующая: есть база данных, в ней хранится информация о дорогах, включая координаты, нужно реализовать построение маршрутов из начальной точки к конечной.

Построение маршрутов - задача распространенная, и, как для каждой распространённой задачи, для неё давно существуют реализации. Мне нравится GraphHopper. Да так нравится, что моя первая статья на Хабре была про то, как создать для него собственные правила построения графа дорог.

➡️ Читать дальше

@sqlhub
Техника «10 тестов в день» – одна из самых эффективных в изучении Java.

Канал Java Guru выложил в открытый доступ тесты, которые дают на собеседованиях в топовые компании, вроде Яндекс и MailRu.

➤ Открываете задачку – выбираете вариант – видите правильный ответ и детальное объяснение к нему. Так вы усвоите на 50% больше знаний в сжатые сроки.

Подписывайтесь и качайте свои скиллы: @javatasks
Cookie в java

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

➡️ Читать дальше

@javatg
Какого размера должен быть пул потоков?

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

Оптимальный размер пула потоков зависит от количества доступных процессоров и природы задач в рабочей очереди. На N-процессорной системе для рабочей очереди, которая будет выполнять исключительно задачи с ограничением по скорости вычислений, можно достигнуть максимального использования CPU с пулом потоков, в котором содержится N или N+1 поток. Для задач, которые могут ждать осуществления I/O (ввода - вывода) - например, задачи, считывающей HTTP-запрос из сокета – может понадобиться увеличение размера пула свыше количества доступных процессоров, потому, что не все потоки будут работать все время. Используя профилирование, можно оценить отношение времени ожидания (WT) ко времени обработки (ST) для типичного запроса. Если назвать это соотношение WT/ST, то для N-процессорной системе понадобится примерно N*(1 + WT/ST) потоков для полной загруженности процессоров.

Использование процессора – не единственный фактор, важный при настройке размера пула потоков. По мере возрастания пула потоков, можно столкнуться с ограничениями планировщика, доступной памяти, или других системных ресурсов, таких, как количество сокетов, дескрипторы открытого файла, или каналы связи базы данных.

ThreadPoolExecutor имеет очень понятный javadoc, поэтому нет смысла его перефразировать. Вместо этого, давайте попробуем сделать наш собственный:

public class ThreadPool implements Executor {
private final Queue<Runnable> workQueue = new ConcurrentLinkedQueue<>();
private volatile boolean isRunning = true;

public ThreadPool(int nThreads) {
for (int i = 0; i < nThreads; i++) {
new Thread(new TaskWorker()).start();
}
}

@Override
public void execute(Runnable command) {
if (isRunning) {
workQueue.offer(command);
}
}

public void shutdown() {
isRunning = false;
}

private final class TaskWorker implements Runnable {

@Override
public void run() {
while (isRunning) {
Runnable nextTask = workQueue.poll();
if (nextTask != null) {
nextTask.run();
}
}
}
}
}


@javatg
English for Developers - канал для тех, кто хочет учить технический английский. От создатателей популярного ит-канала Data analysis.

1. техническая лексика
2. опросы на английском
3. шутки на английском

Подписывайтесь, проходите опросы, читайте полезные прогерские фразы на английском: english_forprogrammers.
💻 Apache Struts

Apache Struts — фреймворк с открытым исходным кодом для создания Java EE веб-приложений. Struts был создан для того, чтобы чётко разделить модель (бизнес-логику), представление (HTML-страницы) и контроллер (отвечающий за передачу данных от модели к представлению и обратно).

⚙️ Github
🗒 Java Docs

@javatg
Гайд для «джуна». Что нужно знать начинающему разработчику Java, чтобы получить работу

Рассказываем, что должен выучить Java-разработчик на junior-позиции. А ещё — где получить опыт и как проявить компетенции и скиллы.

https://tproger.ru/articles/gajd-dlja-dzhuna-chto-nuzhno-znat-nachinajushhemu-razrabotchiku-java-chtoby-poluchit-rabotu/
GitHub Actions и Vercel — быстрое развертывание проектов

Vercel — один из лучших хостингов благодаря своей простоте и адаптивности. Он позволяет максимально быстро размещать проекты и практически не требует настройки. Применение Vercel с GitHub для развертывания проектов делает разработку намного более увлекательной. Отправка нового обновления на GitHub позволяет автоматически развертывать код, оптимизируя процесс CI/CD.

Что такое GitHub Actions?
GitHub Actions — это платформа CI/CD для автоматизации рабочих процессов сборки, тестирования и развертывания. С помощью этих процессов вы можете создавать и тестировать пул-реквесты в личном репозитории или развертывать объединенные пул-реквесты в производственном репозитории.

GitHub Actions упрощает автоматизацию всех действий с ПО. В настоящее время эта платформа включает первоклассные технологии CI/CD, позволяющие настраивать ревью кода, управление ветками и сортировку issue.

Как GitHub Actions взаимодействует с Vercel
GitHub Actions автоматически развертывает проекты GitHub с помощью Vercel, предоставляя предварительные URL-адреса развертывания и автоматические обновления пользовательских доменов. Когда вы создаете новый проект Vercel на GitHub и обеспечиваете автоматическое развертывание в каждой ветке, Vercel отслеживает каждую отправку изменений в ветку и развертывает по умолчанию. Если Vercel уже работает с предыдущим коммитом, то текущий процесс отменяется для создания самого последнего коммита. Таким образом, всегда происходит развертывание самых актуальных изменений.

1 вариант для тестирования: модель Fork.
2 вариант для тестирования: tmate.

➡️ Читать дальше
⚙️ Vercel

@javatg
Java для IT-профессий

книга

@javatg
📁 Настраиваем Git для правильной работы с опенсорс-проектами

Как принять участие в разработке проекта с открытым исходным кодом и внести свой вклад, не наломав дров?

Краткое руководство, чтобы меньше разочаровываться и больше работать над улучшением рабочих процессов.

Форк-проект
После того как вы настроили свой профиль на GitHub, вам необходимо форкнуть проект, в который вы планируете внести свой вклад. Поскольку доступ на запись к проектам с открытым исходным кодом контролируется сопровождающим (сопровождающими), вы никогда не будете вносить прямые изменения в репозиторий проекта. Вместо этого, мы форкаем (или копируем) исходный код проекта в свой личный аккаунт, чтобы было куда вносить изменения, не затрагивая исходный репозиторий. Легче всего форкнуть проект через GitHub WebUI. Перейдя на страницу GitHub проекта, в который вы хотите внести свой вклад, найдите кнопку Fork в правом верхнем углу.

➡️ Читать дальше

@javatg
✔️ HashMap в Java— что за карта такая?

Сегодня мы поговорим о еще одной структуре данных — Map. Ее официальное русское название — “ассоциативный массив”, но его используют нечасто. Более распространены варианты “словарь”, “карта”, или (чаще всего) — сленговый англицизм “мапа” 🙂 Внутри Map данные хранятся в формате “ключ”-”значение”, то есть по парам. И в качестве ключей, и в качестве значений могут выступать любые объекты — числа, строки или объекты других классов.

➡️ Читать дальше

@javatg
MyBatis или Hibernate?

Рано или поздно Java-разработчик задаёт себе вопрос: Hibernate или MyBatis? От ответа зависит архитектура проекта, а ответ, в свою очередь, зависит от задачи. Давайте разберёмся, что они такое и когда какой лучше.

Итак, Hibernate это ORM framework. Его полное название Hibernate ORM. Он полностью поддерживает JPA и, фактически, является имплементацией JPA. Его основная задача – понять, как размечены ваши классы аннотациями ORM, построить по ним схему и собирать объекты по строкам из базы. Hibernate сам пишет за вас запросы к базе. Для вас работа с базой выглядит как работа с объектами. Сохранить объект, загрузить объект, обновить объект. Как, собственно, и должно быть. Это же Object Relational Mapping!

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

➡️ Читать дальше

@javatg
Thread’ом Java не испортишь: Callable, Future и друзья

Поток — это Thread, в нём что-то запускается run, поэтому воспользуемся tutorialspoint java online compiler‘ом и выполним следующий код:

public class HelloWorld {

public static void main(String []args){
Runnable task = () -> {
System.out.println("Hello World");
};
new Thread(task).start();
}
}


Единтсвенный ли это вариант запуска задачи в потоке?


➡️ Читать дальше

@javatg
➡️ Управление памятью Java


Это глубокое погружение в управление памятью Java позволит расширить ваши знания о том, как работает куча, ссылочные типы и сборка мусора.

Вероятно, вы могли подумать, что если вы программируете на Java, то вам незачем знать о том, как работает память. В Java есть автоматическое управление памятью, красивый и тихий сборщик мусора, который работает в фоновом режиме для очистки неиспользуемых объектов и освобождения некоторой памяти.

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

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

➡️ Читать дальше

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Что такое busy spin?

busy spin – это техника, которую программисты используют, чтобы заставить поток ожидать при определённом условии. В отличие от традиционных методов wait(), sleep() или yield(), которые подразумевают уступку процессорного времени, этот метод вместо уступки выполняет пустой цикл. Это необходимо, для того, чтобы сохранить кэш процессора, т.к. в многоядерных системах, существует вероятность, что приостановленный поток продолжит своё выполнение уже на другом ядре, а это повлечет за собой перестройку состояния процессорного кэша, которая является достаточно затратной процедурой.

➡️ Подробнее

@javatg
Оптимизация программ на Java

Производительность программ на Java в AIX моно улучшить разными способами.

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

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

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

- Объединяйте в группы внутренние операции для уменьшения числа вызовов интерфейса JNI Java.

- Для снижения числа процессов в JVM и операционной системе не применяйте синхронизированные методы, когда задачу можно решить другими способами.

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

- Используйте тип int вместо long всегда, когда это возможно, потому что 32-разрядные операции выполняются быстрее, чем 64-разрядные.

- Объявляйте методы с ключевым словом final всегда, когда это возможно. В JVM такие методы обрабатываются быстрее.

- Для снижения числа операций по инициализации переменных создавайте константы с ключевым словом static final.

- Постарайтесь сократить число ссылок "cast" и "instanceof", поскольку соответствующие ссылки в Java преобразуются во время выполнения.

- Старайтесь использовать массивы вместо векторов.

- Добавляйте и удаляйте элементы из конца вектора.

-Избегайте операций выделения памяти под объекты внутри циклов.

- Пользуйтесь буферизованным вводом-выводом и выберите оптимальный размер буфера.

- Пользуйтесь пулами соединений и предварительной подготовкой операторов при работе с базами данных.

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

- Применяйте максимальное возможное время жизни нити и минимизируйте количество операций по созданию и уничтожению нитей.

- Минимизируйте конкуренцию за общие ресурсы.

- Минимизируйте количество операций создания объектов, используемых в течение непродолжительного времени.

- Старайтесь как можно реже вызывать удаленные методы.

- Пользуйтесь функциями callback для того, чтобы избежать блокирования обращений к удаленным методам.

- Не создавайте объекты, которые будут применяться только для обращения к методам.

- По возможности не пользуйтесь синхронизированными методами внутри циклов.

- Храните строковые и символьные данные в базе данных в формате Unicode.

- Выберите оптимальный порядок библиотек в переменной CLASSPATH.

➡️ Еще советы

@javatg
Spring Boot: Up and Running

Автор:
Mark Heckler
Год издания: 2021

Рецензия на книгу:

Spring Boot - это самый популярный фреймворк Java. В этом практическом пособии показано, как использовать Spring Boot для написания приложений.

Плюсы: хороший авторский стиль, книга легко читается.

Минусы: не замечено.

#java #kotlin #spring #english

📒 Книга

@javatg
🔥 Полезнейшая Подборка каналов

🖥 Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит

🖥 Python

@pro_python_code – погружение в python
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python

🖥 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml

🖥 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка

👣 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go

🖥 Linux
@linux_kal - чат kali linux
@linuxkalii - linux kali
@linux_read - книги linux


👷‍♂️ IT работа

@hr_itwork - ит-ваканнсии

🖥 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат

🤡It memes
@memes_prog - ит-мемы

⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust

#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат

📓 Книги

@programming_books_it
@datascienceiot
@pythonlbooks
@golang_books
@frontendbooksit
@progersit
@linux_read
@java_library
@frontendbooksit

📢 English for coders

@english_forprogrammers - Английский для программистов

🖥 Github
@github_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Битва титанов: Java vs Kotlin

Java, по мнению Amazon, один из оптимальных по энергопотреблению и времени выполнения языков программирования. Он зарекомендовал себя для серверной разработки, на тех платформах, где может работать виртуальная машина. Не зря же его называют WORA (Write Once and Run Anywhere — «Напиши один раз, запускай где угодно»). Но кроме того, его применяют для разработки игр, облачных вычислений, больших данных, искусственного интеллекта и интернета вещей.

Кто же ему наступает на пятки и пробует выбить из основных сегментов? Изначальный клон Java под названием Kotlin. Авторы хотели улучшить типобезопасность по сравнению с прародителем и сделать язык более простым, чем Scala.

В мае 2017 года Google объявил, что язык программирования Kotlin теперь является предпочтительным языком для разработчиков приложений для Android. Это стало признанием отрасли.

Google оценивает, что 70% из 1 000 лучших приложений в Play Store написаны на Kotlin. Также на нём сделаны Maps, Play, Drive. Однако этот язык программирования используют и для бэкенд-разработки, например, он доступен в Spring Framework.

Рассмотрим эти два популярных языка с разных аспектов для новичков, опытных программистов и бизнеса. Я приведу релевантные, на мой взгляд, факты и умозаключения, а лучшего предлагаю выбрать читателю.

➡️ Читать дальше

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/10/03 21:27:25
Back to Top
HTML Embed Code: