Проблемы многопоточности: Starvation
Или голодание. В таком случае потоки не заблокированы, но при этом не выполняют работу. Им просто не хватает ресурсов.
Поэтому пока одни потоки на себя берут всё время выполнения, другие не могут выполниться. Есть очень хороший пример.
#java #lesson #multithreading
Или голодание. В таком случае потоки не заблокированы, но при этом не выполняют работу. Им просто не хватает ресурсов.
Поэтому пока одни потоки на себя берут всё время выполнения, другие не могут выполниться. Есть очень хороший пример.
#java #lesson #multithreading
Перегрузка функций
Если у вас есть несколько функций с одним и тем же именем, но они принимают разные типы, то будет вызван тот что больше всего подходит.
Перегрузка позволяет нам менять поведение функции в зависимости от типа или кол-ва параметров, которые мы получили.
Самой простой пример —
#java #lesson #overloading
Если у вас есть несколько функций с одним и тем же именем, но они принимают разные типы, то будет вызван тот что больше всего подходит.
Перегрузка позволяет нам менять поведение функции в зависимости от типа или кол-ва параметров, которые мы получили.
Самой простой пример —
System.out.println()
. Если вы посмотрите определение метода, то увидите что он принимает и String, и char, и int.#java #lesson #overloading
Интерфейсы
Интерфейсы определяют некоторый функционал, который предстоит сделать. Как с целями на новый год, они как бы есть, но их ещё надо реализовать.
В одном классе может использоваться несколько интерфейсов. Внутри интерфейсов может быть только определение! Никаких переменных, никаких реализаций!
Интерфейсы используются, когда нам нужен какой-то функционал, но мы не знаем, как он будет работать. Например, получить данные. По HTTP? Считать с файла? Задать вопрос пользователю?
#java #lesson #oop
Интерфейсы определяют некоторый функционал, который предстоит сделать. Как с целями на новый год, они как бы есть, но их ещё надо реализовать.
В одном классе может использоваться несколько интерфейсов. Внутри интерфейсов может быть только определение! Никаких переменных, никаких реализаций!
Интерфейсы используются, когда нам нужен какой-то функционал, но мы не знаем, как он будет работать. Например, получить данные. По HTTP? Считать с файла? Задать вопрос пользователю?
#java #lesson #oop
.stream()
С Java 8 мы можем обрабатывать коллекции (списки, множества): фильтровать (
Также ничто нам не мешает пройтись по списку (
📌 Документация
#java #lesson #collections
С Java 8 мы можем обрабатывать коллекции (списки, множества): фильтровать (
.filter()
), сортировать (.sorted()
), преобразовывать (.map()
).Также ничто нам не мешает пройтись по списку (
.forEach()
), сохранить в виде другого типа (.collect()
) или посчитать значений (.reduce()
).📌 Документация
#java #lesson #collections
Awesome Java.
A curated list of awesome Java frameworks, libraries and software.
https://github.com/akullpp/awesome-java
#collections
A curated list of awesome Java frameworks, libraries and software.
https://github.com/akullpp/awesome-java
#collections
GitHub
GitHub - akullpp/awesome-java: A curated list of awesome frameworks, libraries and software for the Java programming language.
A curated list of awesome frameworks, libraries and software for the Java programming language. - akullpp/awesome-java
Spring
Этот фреймворк позволяет нам создавать свои веб сайты, REST API, микросервисы, при этом не сильно нагружая программиста.
У него много преимуществ, но я выделю главные: безопасность, скорость популярность (новичкам в разы проще найти новую информацию).
#java #lesson #web
Этот фреймворк позволяет нам создавать свои веб сайты, REST API, микросервисы, при этом не сильно нагружая программиста.
У него много преимуществ, но я выделю главные: безопасность, скорость популярность (новичкам в разы проще найти новую информацию).
#java #lesson #web
Лучшие проекты на Java на Github
RxJava (46к звёзд) — дополнение для Java, которое используется для создания асинхронных и событийных программ.
Elasticsearch (61к звёзд) — RESTfull поисковой движок на Java. На данный момент — самый популярный.
Spring Boot (63к звёзд) — в разы упрощает разработку приложений на spring.
#java #lesson #github
RxJava (46к звёзд) — дополнение для Java, которое используется для создания асинхронных и событийных программ.
Elasticsearch (61к звёзд) — RESTfull поисковой движок на Java. На данный момент — самый популярный.
Spring Boot (63к звёзд) — в разы упрощает разработку приложений на spring.
#java #lesson #github
Spring
Этот фреймворк позволяет нам создавать свои веб сайты, REST API, микросервисы, при этом не сильно нагружая программиста.
У него много преимуществ, но я выделю главные: безопасность, скорость популярность (новичкам в разы проще найти новую информацию).
#java #lesson #web
Этот фреймворк позволяет нам создавать свои веб сайты, REST API, микросервисы, при этом не сильно нагружая программиста.
У него много преимуществ, но я выделю главные: безопасность, скорость популярность (новичкам в разы проще найти новую информацию).
#java #lesson #web
Пишем свой сайт
Если вам вдруг захотелось написать свой сайт, так ещё и на Java, без всяких велосипедов и кучи библиотек, то вам поможет grails.
Этот фреймворк основан на Spring Boot, использует упрощённый язык Groovy и даже позволяет запускать React и Angular.
📌 Документация
#java #lesson #web
Если вам вдруг захотелось написать свой сайт, так ещё и на Java, без всяких велосипедов и кучи библиотек, то вам поможет grails.
Этот фреймворк основан на Spring Boot, использует упрощённый язык Groovy и даже позволяет запускать React и Angular.
📌 Документация
#java #lesson #web
☕️ Тестируем Java
Протестированный код лучше, чем код с кучей багов. Чтобы ручками не проверять его работоспособность, пишут автоматические тесты.
JUnit — одна из самых популярных библиотек для проверки кода на Java. Она позволит вам за пару минут проверить функционал.
📖 Документация
#java #lesson #testing
Протестированный код лучше, чем код с кучей багов. Чтобы ручками не проверять его работоспособность, пишут автоматические тесты.
JUnit — одна из самых популярных библиотек для проверки кода на Java. Она позволит вам за пару минут проверить функционал.
📖 Документация
#java #lesson #testing
Log4j 2
Каким бы ни было ваше приложение, всё равно стоит вести логи, иначе вы не поймёте, кто или что сломало ваш проект на продакшене.
Библиотек очень много (Log4j, Log5j, Log4j 2, Logback, SLF4J), но лучшей библиотекой для логирования сейчас является Log4j 2.
📖 Документация
#java #lesson #logging
Каким бы ни было ваше приложение, всё равно стоит вести логи, иначе вы не поймёте, кто или что сломало ваш проект на продакшене.
Библиотек очень много (Log4j, Log5j, Log4j 2, Logback, SLF4J), но лучшей библиотекой для логирования сейчас является Log4j 2.
📖 Документация
#java #lesson #logging
Регулярные выражения
java.util.regex позволяет с помощью специальных выражений находить нужные значения внутри текста.
Нам понадобятся только классы Matcher (для сохранения результатов сравнения) и Pattern (для создания выражения).
Если у вас есть какие-то ошибки в синтаксисе, то метод
#java #lesson #regex
java.util.regex позволяет с помощью специальных выражений находить нужные значения внутри текста.
Нам понадобятся только классы Matcher (для сохранения результатов сравнения) и Pattern (для создания выражения).
Если у вас есть какие-то ошибки в синтаксисе, то метод
compile()
выдаст PatternSyntaxException.#java #lesson #regex
public vs protected vs private
Это параметры доступа, они определяют, в каких условиях можно получить доступ к определённым функциям/переменным.
public — любой класс может получить доступ к этому методу, считать его и изменить.
protected — доступ к переменной могут получить только дети этого класса.
private — изменять и считывать значения можно только внутри класса, где она создана.
По умолчанию ко всем объектам применяется модификатор private.
#java #lesson #basics
Это параметры доступа, они определяют, в каких условиях можно получить доступ к определённым функциям/переменным.
public — любой класс может получить доступ к этому методу, считать его и изменить.
protected — доступ к переменной могут получить только дети этого класса.
private — изменять и считывать значения можно только внутри класса, где она создана.
По умолчанию ко всем объектам применяется модификатор private.
#java #lesson #basics
Паттерн Singleton
Класс существует только в едином экземпляре и к нему есть глобальный доступ (то есть, отовсюду).
Обратите внимание, что Singleton стоит использовать, если вам нужен только один экземпляр, а не когда вам нужен глобальный доступ к экземпляру.
Многие новички допускают ошибку, которую я описал выше, что превращает их код в кучу Singleton'ов. Решение: Dependency Injection.
#java #lesson #patterns
Класс существует только в едином экземпляре и к нему есть глобальный доступ (то есть, отовсюду).
Обратите внимание, что Singleton стоит использовать, если вам нужен только один экземпляр, а не когда вам нужен глобальный доступ к экземпляру.
Многие новички допускают ошибку, которую я описал выше, что превращает их код в кучу Singleton'ов. Решение: Dependency Injection.
#java #lesson #patterns
Dependency Injection
Особо актуально, если у вас больше 30 разных классов и вам нужно как-то одни передавать в другие. Перейдём к теории:
Концепция Dependency Injection состоит в том, чтобы перенести ответственность за создание экземпляра объекта из тела метода за пределы класса и передать уже созданный экземпляр объекта обратно.
То есть приложение само отвечает за «внедрение» экземпляров внутрь классов. Это делает код чище и упрощает работу.
📕 Google Guice tutorial
#java #lesson #di
Особо актуально, если у вас больше 30 разных классов и вам нужно как-то одни передавать в другие. Перейдём к теории:
Концепция Dependency Injection состоит в том, чтобы перенести ответственность за создание экземпляра объекта из тела метода за пределы класса и передать уже созданный экземпляр объекта обратно.
То есть приложение само отвечает за «внедрение» экземпляров внутрь классов. Это делает код чище и упрощает работу.
📕 Google Guice tutorial
#java #lesson #di
Тернарная операция
Если условие верно, задать "123", иначе — "321". Это пример условия, которое можно записать в одну строку.
Если
#java #lesson #theory
Если условие верно, задать "123", иначе — "321". Это пример условия, которое можно записать в одну строку.
var x = condition ? expression1 : expression2
— общий вид тернарного оператора.Если
condition
== true
, то задать x
значение expression1
, иначе — expression2
.#java #lesson #theory