Telegram Web Link
Бесплатный курс по Kotlin и Android

Курс длится 10 часов. Конечно, выучить всё‎ за такое короткое время невозможно, но вот познакомиться с основами — можно. На курсе вы изучите:

— основы Kotlin,
— жизненный цикл Android-приложений,
— эффективное использование Android Studio и Android SDK,
—Material design, анимации и многое другое.

Скачать курс можно по ссылке:

https://www.coursesbag.com/android-app-development-in-10-hours-bootcamp-android-13/

#android

@javatg
🖥 Что происходит с объектом при удалении ссылки на него?

Даны три строки кода:

String s = null;
s = "Hellow";
s = null;


Создали переменную s типа String, которая ни на что не ссылается (хранит пустую ссылку null).
Создаем объект-строку Hellow, переменная s хранит ссылку на объект.

Удаляем из переменной s ссылку на объект.

Вопрос: что происходит со строкой Hellow после удаления ссылки на неё? Остаётся ли она в памяти или удаляется вместе со ссылкой?

В данном сценарии строковый литерал "Hellow" определён в момент компиляции и соответственно будет размещён в пуле строк (string pool).

В старых версиях (Java 6 и раньше) пул строк являлся частью постоянной области памяти PermGen, которая не относилась к основной куче (Heap) и имела постоянный размер, который нельзя было увеличить.
Сборка мусора запускается только при условии, что существующая память исчерпана. Как правило, вероятность такого сценария для постоянной области памяти пренебрежимо мала -- нужно было бы или загружать множество классов или постоянно добавлять в пул новые строки при помощи String::intern. В худшем случае можно было бы добиться и OutOfMemoryError.

Начиная с Java 7 и выше пул строк размещается в куче (heap), для которой сборка мусора вызывается чаще (по сравнению с PermGen), при этом неиспользуемые строки удаляются из пула, освобождая память.
При необходимости размер кучи может увеличиваться, в том числе и превышая объём доступной физической памяти.

#junior #java

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Java Jobs
Java программист Senior/Lead

Формат: классный офис в Москве/гибрид/удаленно;
Доход: 300-400К руб.;
Форма оформления: по ТК/ИП.

О нас: Мы занимаемся разработкой data-платформы, в рамках которой развиваются различные data-продукты:
• рекомендательные системы;
• сервисы аналитики и визуализации данных;
• ML-модели;
• иные решения для решения бизнес-задач.
Наша команда это 25 инженеров с сильнейшими компетенциями в ML, аналитике и работе с данными, и сейчас мы ищем классных ребят для дальнейшего роста.
У нас нет долгих согласований и бюрократии. Мы стремимся к быстрому внедрению в production, с последующей работой над улучшениями.

Что нужно будет делать:
• Разработка высоконагруженных приложений в рамках Платформы данных;
• Участие в проектировании сервисов и компонентов Платофрмы данных;
• Обеспечение высокого качества кода и улучшение внутренних процессов инженерии ПО;
• Участие в оценке и декомпозиции задач вместе с Front-End, DevOps, Data и ML инженерами.

Будет классно, если у тебя:
• Опыт построения высоконагруженных бэкенд сервисов (на Java, от 3х лет) в крупных продуктовых компаниях;
• Опыт работы с реляционными базами данных (желательно, PostgreSQL);
• Понимание архитектурных стилей API для клиент-серверного и межсерверного взаимодействия (GraphQL, REST, gRPC)
• Хорошее знание Spring / Spring Boot (Core, Data, JPA и т.д.);
• Понимание базовых алгоритмов и структур данных;
• Знание гибких методологий разработки программного обеспечения.

Ты покоришь наши сердца и разум, если у тебя:
• Опыт контейнеризации Java-приложений (Docker, Kubernetes);
• Опыт работы с публичными облаками, особенно, с Яндекс.Облаком;
• Опыт работы с NoSQL базами данных;
• Понимание особенностей работы с аналитическими базами данных, например, с ClickHouse;
• Опыт интеграции моделей машинного обучения в Java-сервисы;
• Опыт работы с распределенными очередями и брокерами, например, Kafka или RabbitMQ.

Мы предлагаем:
• Работу в аккредитованной IT компании с сильнейшей командой в разных масштабных проектах;
• Гибридный график работы 5/2, с 10:00 - 19:00;
• ДМС со стоматологией;
• В современном офисе в стиле Лофт с капсулой медитации, спортзалом, большой современной библиотекой и кабинетом для записи подкастов и треков;
• Комфортную кухню с холодильником, кофемашиной, тостером, микроволновкой и Magic Bullet;
• Холодильник с напитками (соки, энергетики, вода и т.д.) и едой (сыры, колбасы, сырки и м.ч.);
• Каждую пятницу совместные обеды с разными кухнями мира за счет компании.

За подробностями пиши: tg @naikava

@Java_workit - вакансии для java разработчиков
🖥 Как с помощью лямбда выражения обработать определенную часть строки в коллекции?

ArrayList<String> list = new ArrayList<>();
Collections.addAll(list,
"Joseph Smith", "Thomas Doyle", "Ronald Pratt", "Thomas Spencer", "King Lee",
"Gregory Smith", "Leroy Zimmerman", "Lee Smith", "Michael Harrington",
"Lee Daniels","Eugene Williams", "Lee Terry", "Arnold Fowler", "Billy Harrison",
"Lee Bennett", "Lee Evans", "Ronald Diaz", "Leonard King", "Timothy Smith",
"George Lee", "King Mann", "Dean Wright"
);

list.stream()
.filter(s -> s.contains("K") || s.contains("S"))
.filter(s -> !s.startsWith("K")&&!s.startsWith("S"))
.sorted().distinct()
.collect(Collectors.toList());


Метод должен вернуть имена людей, чья фамилия начинается с K или S, в формате имя + первая буква фамилии, например "David Z.". Список должен быть отсортирован по алфавиту и состоять только из уникальных значений

Ответ

Для данных, представленных в формате "{firstName} {lastName}" можно отфильтровать слова при помощи String::matches и регулярного выражения типа "\\w+ [KS]\\w+". Соответственно, к отфильтрованным слов достаточно будет применить String::substring:

List<String> list = Arrays.asList(
"Joseph Smith", "Thomas Doyle", "Ronald Pratt", "Thomas Spencer", "King Lee",
"Gregory Smith", "Leroy Zimmerman", "Lee Smith", "Michael Harrington", "Lee Daniels","Eugene Williams",
"Lee Terry", "Arnold Fowler", "Billy Harrison", "Lee Bennett", "Lee Evans", "Ronald Diaz",
"Leonard King", "Timothy Smith", "George Lee", "King Mann", "Dean Wright"
);

List<String> fixed = list.stream()
.filter(s -> s.matches("\\w+ [KS]\\w+"))
.map(s -> s.substring(0, s.indexOf(" ") + 2) + ".")
.sorted()
.distinct()
.collect(Collectors.toList());

System.out.println(fixed);
// -> [Gregory S., Joseph S., Lee S., Leonard K., Thomas S., Timothy S.]


Если имена состоят из трех и больше частей, но фамилией является последняя часть, регулярное выражение ".+ [KS]\\w+" и поиск фамилии следует исправить (искать последний пробел при помощи String::lastIndexOf):

List<String> list = Arrays.asList(
"Joseph Smith", "Thomas Doyle", "Ronald Pratt Kimberly", "Thomas Spencer", "King Lee Roy Stapleton",
"Gregory Smith", "Leroy Zimmerman", "Lee Smith Jacob", "Michael Harrington", "Lee Daniels","Eugene Williams",
"Lee Terry", "Arnold Fowler", "Billy Harrison", "Lee Bennett", "Lee Evans", "Ronald Diaz",
"Leonard King", "Timothy Smith", "George Lee", "King Mann", "Dean Wright"
);

List<String> fixed = list.stream()
.filter(s -> s.matches(".+ [KS]\\w+"))
.map(s -> s.substring(0, s.lastIndexOf(" ") + 2) + ".")
.sorted()
.distinct()
.collect(Collectors.toList());

System.out.println(fixed);
// -> [Gregory S., Joseph S., King Lee Roy S., Leonard K., Ronald Pratt K., Thomas S., Timothy S.]


Ещё один вариант: вместо String.substring применить String::replaceAll для замены части фамилии на точку -- выглядит более "красиво":

List<String> fixed = list.stream()
.filter(s -> s.matches("(.+ [KS])(.*$)"))
.map(s -> s.replaceAll("(.+ [KS])(.*$)", "$1."))
.sorted()
.distinct()
.collect(Collectors.toList());


👉 Пишите ваше решение в комментариях👇

javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Книга рецептов на Java

Руководство по созданию простой системы управления рецептами на Java. В приложении Recipe Manager хранятся непосредственно данные о рецепте, которые пользователь можно легко изменить. UI очень простой, но для реализации проекта также понадобится подключить базу данных:

https://myprojectideas.com/recipe-management-system-in-java-java-project/

#java

@javatg
🔥 Top it channels

🖥 SQL базы данных

@sqllib - библиотека баз данных
@sqlhub - повышение эффективности кода с грамотным использованием бд.
@chat_sql - чат изучения бд.

⭐️ Нейронные сети
@data_analysis_ml - data science
@vistehno - chatgpt ведет блог, решает любые задачи и отвечает на любые ваши вопросы.
@aigen - сети для генерации картинок. видео, музыки и многого другого.
@neural – погружение в нейросети.

🖥 Machine learning
@ai_ml – погружение в нейросети, ai, Chatgpt, midjourney, машинное обучение.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседованию.
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте

@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
@Machinelearning_Jobs - чат работы мл

🖥 Python

@pythonl - главный канал самого популярного языка программирования.
@pro_python_code – учим python с ментором.
@python_job_interview – подготовка к Python собеседованию.
@python_testit - проверочные тесты на python
@pythonlbooks - современные книги Python
@python_djangojobs - работа для Python программистов
@python_django_work - чат обсуждения вакансий


🖥 Javascript / front

@react_tg - - 40,14% разработчиков сайтов использовали React в 2022 году - это самая популярная библиотека для создания сайтов.
@javascript -канал для JS и FrontEnd разработчиков. Лучшие практики и примеры кода. Туториалы и фишки JS
@Js Tests - каверзные тесты JS
@hashdev - погружение в web разработку.
@javascriptjobjs - отборные вакансии и работа FrontEnd.
@jsspeak - чат поиска FrontEnd работы.

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

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

🖥 Linux
@linux -топ фишки, гайды, уроки по работе  с Linux.
@linux chat - чат linux для обучения и помощи.
@linux_read - бесплатные книги linux

👷‍♂️ IT работа

@hr_itwork -кураторский список актуальных ит-ваканнсии

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

⚙️ Rust
@rust_code - Rust избавлен от болевых точек, которые есть во многих современных яп
@rust_chats - чат rust

#️⃣ c# c++
C# - объединяет лучшие идеи современных языков программирования
@csharp_cplus чат
С++ - Универсальность. Возможно, этот главный плюс C++.

📓 Книги

@programming_books_it - большая библиотека. программиста
@datascienceiot -ds книги
@pythonlbooks - python библиотека.
@golang_books - книги Golang
@frontendbooksit - front книги
@progersit - ит-шпаргалки
@linux_read - Linux books
@java_library - Java books

🖥 Github
@github_code - лучшие проекты с github
@bigdatai - инструменты по работе с данными

🖥 Devops
Devops - специалист общего профиля, которому нужны обширные знания в области разработки.

📢 English for coders

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

💡 ChatGpt bot

@Chatgpturbobot - бесплатный бот ChatGpt
Please open Telegram to view this post
VIEW IN TELEGRAM
Задачи на алгоритмы и их решения

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

1. Java
2. JavaScript
3. Python
4. Go

#алгоритмы
Snyk — платформа для поиска уязвимостей

Инструмент умеет работать со множеством экосистем: JavaScript, Ruby, Python, Scala и Java. При этом, по словам автором проекта, их база уязвимостей достигает каких-то гигантских размеров

При этом посмотреть на неё можно и самим — код проекта открыт и лежит на GitHub

Стоимость: #бесплатно (но есть платные функции)

@javatg
20 советов для java-разработчиков

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

📌 Читать

@javatg
Java-фреймворк Helidon или просто ласточка

Helidon — легкий фреймворк для разработки микросервисов. В Helidon есть две основные модели программирования: Helidion SE и Helidon MP.

Helidion SE — набор реактивных API на Netty, который использует реактивные потоки, асинхронное и функциональное программирование, а также Fluent API. Благодаря этому, инициализация и запуск веб-приложений происходит быстрее.

Helidon MP — используется для поддержки SE в рамках стандартов MicroProfile: CDI, JSON-P, MicroProfile JWT Authentication, MicroProfile OpenAPI и т.д.

Документация: https://helidon.io/

#java
Знакомимся с Kotlin на практике

Хотите быстро приступить к написанию кода на Kotlin? Упражнения Kotlin Koans от JetBrains помогут освоить синтаксис языка и его идиомы. Задания выглядят как непройденные unit-тесты, и вам предстоит их успешно завершить.

Единственное условие — нужно знать какой-либо язык программирования, например Java.

Поупражняться: https://play.kotlinlang.org/koans/overview

#kotlin #курсы

@javatg
🖥 41 инструмент для мониторинга JVM и производительности Java-приложений

1. Apache Netbeans - может использоваться не только как IDE, но и как отладчик. Работает во всех операционных системах, поддерживающих Java: Windows, Linux, Mac OSX и BSD.

2. Apache Skywalking - инструмент мониторинга производительности приложений для распределенных систем, специально разработанный для микросервисов, облачных и контейнерных (Docker, Kubernetes, Mesos) архитектур, включая Java.

3. AppDynamics - Когда дело доходит до бесплатных инструментов для мониторинга приложений Java, обычно выбирают JConsole и VisualVM. AppDynamics предоставляет третий вариант, который поможет вам в мониторинге производительности веб-приложений.

4. Cobertura - это скорее инструмент разработки, чем мониторинга, но я считаю, что весь код должен быть протестирован перед запуском в производство, а Cobertura — это бесплатный инструмент Java, который вычисляет процент кода, доступного для тестов. Его можно использовать для определения того, какие части вашей программы Java не покрыты тестами. Основан на jcoverage.

5. Flamegraph Datadog - анализирует каждый запрос Java для обнаружения и устранения проблем с производительностью приложений в распределенной системе.

6. Chatgpt бот - бесплатный бот в телеграме, который помогает писать модули тестирования на Java.

📌 Полный список

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Сообщество GitHub публикует awesome-списки ресурсов и инструментов, относящихся к определенной теме и значительно упрощающие работу в ней. Держите самые интересные из тех, что точно вам пригодятся:

Java: awesome-java
JavaScript: awesome-javascript
React: awesome-react
Vue: awesome-vue
Angular: awesome-angular
Node.js: awesome-nodejs
Typescript: awesome-typescript
Go: awesome-go
Ruby: awesome-ruby
PHP: awesome-php
Kotlin: awesome-kotlin
Rust: awesome-rust
Swift: awesome-swift
iOS-разработка: awesome-ios
Android-разработка: awesome-android
C: awesome-c
C++: awesome-cpp
C#: awesome-dotnet
Unreal Engine: awesome-unreal
Unity: awesome-unity3d
Python: awesome-python
Django: awesome-django
‍Data Science: awesome-datascience


@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Шпаргалка по командам Git на русском

echo "# название" >> README.md - создание файла README.md
git init - инициализация репозитория
git add README.md - добавления файла README.md в проект
git commit -m "first commit" - получает проиндексированный снимок состояния и выполняет его коммит в историю проекта
git remote add origin https://github.com/stanruss/название.git - команда, которой устанавливается подключение к удаленному серверу и git репозиторию, размещающемуся на нем.
git push -u origin master - кзменения отправляются на удаленный сервер

git log --oneline - посмотреть все коммиты.
git checkout . - восстановить все.
git checkout "код коммита" - вернуть до состояния этого коммита.
git checkout master - вернуться в ветку мастер.

Восстановить файлы на локальном компьютере:
```git fetch --all
git reset --hard origin/master или git reset --hard origin/<название_ветки>

```git add text.txt - Добавить файл в репозиторий
git rm text.txt - Удалить файл
git status - Текущее состояние репозитория (изменения, неразрешенные конфликты и тп)
git commit -a -m "Commit description" - Сделать коммит
git push origin - Замерджить все ветки локального репозитория на удаленный репозиторий
git push origin master - Аналогично предыдущему, но делается пуш только ветки master
git push origin HEAD - Запушить текущую ветку, не вводя целиком ее название
git pull origin - Замерджить все ветки с удаленного репозитория
git pull origin master - Аналогично предыдущему, но накатывается только ветка master
git pull origin HEAD - Накатить текущую ветку, не вводя ее длинное имя
git fetch origin - Скачать все ветки с origin, но не мерджить их в локальный репозиторий
git fetch origin master - Аналогично предыдущему, но только для одной заданной ветки
git checkout -b some_branch origin/some_branch - Начать работать с веткой some_branch (уже существующей)
git branch some_branch - Создать новый бранч (ответвится от текущего)
git checkout some_branch - Переключиться на другую ветку (из тех, с которыми уже работаем)
git branch # звездочкой отмечена текущая ветвь - Получаем список веток, с которыми работаем
git branch -a # | grep something - Просмотреть все существующие ветви
git merge some_branch - Замерджить some_branch в текущую ветку
git branch -d some_branch - Удалить бранч (после мерджа)
git branch -D some_branch - Просто удалить бранч (тупиковая ветвь)
git show d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4 - Изменения, сделанные в заданном коммите
git push origin :branch-name - Удалить бранч из репозитория на сервере
git reset --hard d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4 - Откатиться к конкретному коммиту и удалить последующие (хэш смотрим в «git log»)
git push -f - залить на сервер измененные коммиты
git clean -f - Удаление untracked files

#git #github #doc #cheatsheet

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin: Null-безопасность и 3 подводных камня

Если вы изучаете Kotlin, то наверняка слышали про Null-безопасность. Система типов в Kotlin направлена на искоренение опасности нулевых(null) значений. Но на все ли 100%?

В этой статье автор рассматривает 3 случая, которые могут вызвать ошибку, а компилятор даже не попытается вас защитить:

https://betterprogramming.pub/kotlin-isnt-null-safe-yet-here-are-3-gotchas-23258fada62

#kotlin

@javatg
🖥 Бесплатный Курс Java разработка 2023

1. Установка Java - https://www.youtube.com/watch?v=YjySSHYaKWA&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=1

2. Типы данных - https://www.youtube.com/watch?v=CXBpGQYSncM&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=2&t=8s

3. Переменные - https://www.youtube.com/watch?v=hE--HpL2ajQ&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=3&t=10s

4. ООП основные понятия - https://www.youtube.com/watch?v=jim4qd3wOs8&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=4&t=5s

5. Основы наследования - https://www.youtube.com/watch?v=8NcjXK1LFQQ&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=5

6. Наследование методово класса - https://www.youtube.com/watch?v=GwuR6Jzy6uU&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=6&t=37s

7. Порядок вызова конструкторов классов - https://www.youtube.com/watch?v=n9XXFKOdoEI&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=7&t=1s

8. Работа с пакетами - https://www.youtube.com/watch?v=aIn0EbyOSXg&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=8&t=4s

9. Создание интерфейсов - https://www.youtube.com/watch?v=RZ82tD1wDa8&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=9

10. Изучаем исключения - https://www.youtube.com/watch?v=FqLBzLRIrdw&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=10

11. Обобщения Generics - https://www.youtube.com/watch?v=SffahGhgyRw&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=12

12. Коллекции - https://www.youtube.com/watch?v=PSI83wyAxO8&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=13

13. Практика 1 учимся делать игры - https://www.youtube.com/watch?v=14zcOCAB4sI&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=13

14. Разработка игры часть 2 - https://www.youtube.com/watch?v=MuDYMCKbzm8&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=14

15. Создание и выполнение потоков - https://www.youtube.com/watch?v=DOY5LzMmSSM&list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h&index=15

https://www.youtube.com/playlist?list=PLysMDSbb9HcwWoCd-KQ-cl-nk6nuqRF1h

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Вложенные классы и лямбда-выражения в Java

Вложенные классы в Java — важная особенность этого языка. Они помогают сделать код более модульным, позволяя сгруппировать связанные классы вместе.

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

Читать

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Справочник Selenium Java

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

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

Читать

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Бесплатный курс от Стэнфордского университета по Java

В курсе 28 уроков, 9 заданий и даже 2 экзамена. Программа рассчитана на начинающих, кто только начинает знакомиться с програмированием. Из минусов — некоторые части без обновления, однако их можно подтянуть после изучения основ:

https://see.stanford.edu/Course/CS106A

@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
2024/10/03 04:38:12
Back to Top
HTML Embed Code: