Почему String неизменяемый и финализированный класс?
Есть несколько преимуществ в неизменности строк:
• Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в
• Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.
• Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.
• Строки используются
• Поскольку строка неизменяемая, её
Есть несколько преимуществ в неизменности строк:
• Пул строк возможен только потому, что строка неизменяемая, таким образом виртуальная машина сохраняет больше свободного места в
Heap, поскольку разные строковые переменные указывают на одну и ту же переменную в пуле. Если бы строка была изменяемой, то интернирование строк не было бы возможным, потому что изменение значения одной переменной отразилось бы также и на остальных переменных, ссылающихся на эту строку.• Если строка будет изменяемой, тогда это станет серьезной угрозой безопасности приложения. Например, имя пользователя базы данных и пароль передаются строкой для получения соединения с базой данных и в программировании сокетов реквизиты хоста и порта передаются строкой. Так как строка неизменяемая, её значение не может быть изменено, в противном случае злоумышленник может изменить значение ссылки и вызвать проблемы в безопасности приложения.
• Неизменяемость позволяет избежать синхронизации: строки безопасны для многопоточности и один экземпляр строки может быть совместно использован различными потоками.
• Строки используются
classloader и неизменность обеспечивает правильность загрузки класса.• Поскольку строка неизменяемая, её
hashCode() кэшируется в момент создания и нет необходимости рассчитывать его снова. Это делает строку отличным кандидатом для ключа в HashMap т.к. его обработка происходит быстрее.👍45🔥5
Introduction to Programming Using Java, Version 9, JavaFX Edition (2022) True PDF, ePUB + code
Welcome to version 9.0 of Introduction to Programming Using Java, a textbook for introductory programming that uses Java as the language of instruction. This book is directed mainly towards beginning programmers, although it might also be useful for experienced programmers who want to learn something about Java.
Version 9 covers Java 17. It updates the previous version mostly by moving definitively to Java 17 and by adding a new Swing edition. This edition of Version 9 uses JavaFX for GUI programming; an alternative edition that uses Swing instead of JavaFX is also available.
There are no prerequisites beyond a general familiarity with the ideas of computers and programs. There is more than enough material for a full year of college-level programming. Chapters 1 through 7 can be used as a textbook in a one-semester college-level course or in a year-long high school course.
Welcome to version 9.0 of Introduction to Programming Using Java, a textbook for introductory programming that uses Java as the language of instruction. This book is directed mainly towards beginning programmers, although it might also be useful for experienced programmers who want to learn something about Java.
Version 9 covers Java 17. It updates the previous version mostly by moving definitively to Java 17 and by adding a new Swing edition. This edition of Version 9 uses JavaFX for GUI programming; an alternative edition that uses Swing instead of JavaFX is also available.
There are no prerequisites beyond a general familiarity with the ideas of computers and programs. There is more than enough material for a full year of college-level programming. Chapters 1 through 7 can be used as a textbook in a one-semester college-level course or in a year-long high school course.
👍7❤2
Keycloak - популярный SSO-сервис (Single Sign On), предоставляющий единую точку входа для всех ваших приложений, реализующий протоколы OAuth и OIDC. Keycloak может быть использован в связке со Spring Security с минимальным количеством дополнительного кода. В этом ролике автор продемонстрирует настройку ресурс-сервера и логина Spring Security OAuth2 с использованием Keycloak.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Keycloak и Spring Security
Keycloak - популярный SSO-сервис (Single Sign On), предоставляющий единую точку входа для всех ваших приложений, реализующий протоколы OAuth и OIDC. Keycloak может быть использован в связке со Spring Security с минимальным количеством дополнительного кода.…
👍16🔥2
Почему char[] предпочтительнее String для хранения пароля?
С момента создания строка остаётся в пуле, до тех пор, пока не будет удалена сборщиком мусора. Поэтому, даже после окончания использования пароля, он некоторое время продолжает оставаться доступным в памяти и способа избежать этого не существует. Это представляет определённый риск для безопасности, поскольку кто-либо, имеющий доступ к памяти сможет найти пароль в виде текста. В случае использования массива символов для хранения пароля имеется возможность очистить его сразу по окончанию работы с паролем, позволяя избежать риска безопасности, свойственного строке.
С момента создания строка остаётся в пуле, до тех пор, пока не будет удалена сборщиком мусора. Поэтому, даже после окончания использования пароля, он некоторое время продолжает оставаться доступным в памяти и способа избежать этого не существует. Это представляет определённый риск для безопасности, поскольку кто-либо, имеющий доступ к памяти сможет найти пароль в виде текста. В случае использования массива символов для хранения пароля имеется возможность очистить его сразу по окончанию работы с паролем, позволяя избежать риска безопасности, свойственного строке.
👍40🔥10
Идеальная работа. Программирование без прикрас (2022) PDF
В книге «Идеальная работа. Программирование без прикрас» легендарный Роберт Мартин (Дядюшка Боб) создал исчерпывающее руководство по хорошей работе для каждого программиста. Роберт Мартин объединяет дисциплины, стандарты и вопросы этики, необходимые для быстрой и продуктивной разработки надежного, эффективного кода, позволяющего испытывать гордость за программное обеспечение, которое вы создаете каждый день. Роберт Мартин, автор бестселлера «Чистый код», начинает с прагматического руководства по пяти основополагающим дисциплинам создания программного обеспечения: разработка через тестирование, рефакторинг, простой дизайн, совместное программирование и тесты. Затем он переходит к стандартам — обрисовывая ожидания «мира» от разработчиков программного обеспечения, рассказывая, как часто различаются эти подходы, и помогает вам устранить несоответствия.
В книге «Идеальная работа. Программирование без прикрас» легендарный Роберт Мартин (Дядюшка Боб) создал исчерпывающее руководство по хорошей работе для каждого программиста. Роберт Мартин объединяет дисциплины, стандарты и вопросы этики, необходимые для быстрой и продуктивной разработки надежного, эффективного кода, позволяющего испытывать гордость за программное обеспечение, которое вы создаете каждый день. Роберт Мартин, автор бестселлера «Чистый код», начинает с прагматического руководства по пяти основополагающим дисциплинам создания программного обеспечения: разработка через тестирование, рефакторинг, простой дизайн, совместное программирование и тесты. Затем он переходит к стандартам — обрисовывая ожидания «мира» от разработчиков программного обеспечения, рассказывая, как часто различаются эти подходы, и помогает вам устранить несоответствия.
❤🔥10👍3
Forwarded from Java Guru 🤓
Какое имя у бина реализованного в данном классе?
Anonymous Quiz
4%
jpaClientRepository
73%
clientRepository
5%
JpaClientRepository
8%
accountRepository
6%
определенно два бина: dataSource и repository
4%
dataSource
👍16🎅2🔥1
Computer Science для программиста-самоучки. Все что нужно знать о структурах данных и алгоритмах (2023) PDF
Книги Кори Альтхоффа вдохновили сотни тысяч людей на самостоятельное изучение программирования. Чтобы стать профи в программировании, не обязательно иметь диплом в области computer science, и личный опыт Кори подтверждает это: он стал разработчиком ПО в eBay и добился этого самостоятельно. Познакомьтесь с наиболее важными темами computer science, в которых должен разбираться каждый программист-самоучка, мечтающий о выдающейся карьере, — это структуры данных и алгоритмы. «Computer Science для программиста-самоучки» поможет вам пройти техническое интервью, без которого нельзя получить работу в «айти». Книга написана для абсолютных новичков, поэтому у вас не должно возникнуть трудностей, даже если ранее вы ничего не слышали о computer science.
Книги Кори Альтхоффа вдохновили сотни тысяч людей на самостоятельное изучение программирования. Чтобы стать профи в программировании, не обязательно иметь диплом в области computer science, и личный опыт Кори подтверждает это: он стал разработчиком ПО в eBay и добился этого самостоятельно. Познакомьтесь с наиболее важными темами computer science, в которых должен разбираться каждый программист-самоучка, мечтающий о выдающейся карьере, — это структуры данных и алгоритмы. «Computer Science для программиста-самоучки» поможет вам пройти техническое интервью, без которого нельзя получить работу в «айти». Книга написана для абсолютных новичков, поэтому у вас не должно возникнуть трудностей, даже если ранее вы ничего не слышали о computer science.
👍19🔥4
Почему строка является популярным ключом в HashMap в Java?
Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа
Поскольку строки неизменяемы, их хэш код вычисляется и кэшируется в момент создания, не требуя повторного пересчета при дальнейшем использовании. Поэтому в качестве ключа
HashMap они будут обрабатываться быстрее.👍27☃12🤩1
Привет. За 9 минут вы узнаете, как писать unit тесты с помощью библиотек junit и mockito.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
ТЕСТИРОВАНИЕ НА JAVA (JUNIT, MOCKITO)
Привет. За 9 минут вы узнаете, как писать unit тесты с помощью библиотек junit и mockito.
Код из видео:
https://github.com/dispikerton/testirovanie
Код из видео:
https://github.com/dispikerton/testirovanie
👍27🔥4
Web Development Toolkit for Java Developers: Build dynamic, secure, and scalable web applications with Java (2023) Retail PDF
A beginners guide to Java programming for web development.
Key Features
- Learn one of the most in-demand skills in the field of application development.
- Get familiar with the fundamental concepts required to develop a web app.
- Understand how to develop web apps both with and without using a framework.
Denoscription
Java is a popular language for developing web applications due to its stability, scalability, and robustness.
This comprehensive guide will teach you how to develop web apps using Java. The book will help you learn how to establish a JDBC Connection in Java, develop Model-View-Controller (MVC) apps using JSP and servlets without a framework, and understand the application and use of JavaServer Faces (JSF) over JSP to effectively develop web apps.
A beginners guide to Java programming for web development.
Key Features
- Learn one of the most in-demand skills in the field of application development.
- Get familiar with the fundamental concepts required to develop a web app.
- Understand how to develop web apps both with and without using a framework.
Denoscription
Java is a popular language for developing web applications due to its stability, scalability, and robustness.
This comprehensive guide will teach you how to develop web apps using Java. The book will help you learn how to establish a JDBC Connection in Java, develop Model-View-Controller (MVC) apps using JSP and servlets without a framework, and understand the application and use of JavaServer Faces (JSF) over JSP to effectively develop web apps.
👍13🔥1🤩1
При разработке ПО хорошей практикой является описание некоторого контракта, на который будут опираться все компоненты системы при взаимодействии друг с другом.
Для SOAP у вас есть WSDL, а вот для REST-сервисов такого однозначного способа описания контрактов изначально нет. Какое-то время автор для этого использовал связку из Spring RestDocs и Spring Cloud Contract, но со временем и возросшей популярностью Swagger переключился на описание REST-сервисов в формате OpenAPI.
В этом ролике автор постарается наглядно продемонстрировать способ валидации REST-сервисов на Spring при помощи Swagger во время выполнения интеграционных тестов.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Тестирование и валидация REST-сервисов - Spring и Swagger
При разработке ПО хорошей практикой является описание некоторого контракта, на который будут опираться все компоненты системы при взаимодействии друг с другом.
Для SOAP у вас есть WSDL, а вот для REST-сервисов такого однозначного способа описания контрактов…
Для SOAP у вас есть WSDL, а вот для REST-сервисов такого однозначного способа описания контрактов…
👍22🔥3🤩1
Что делает метод intern() в классе String?
Метод
Метод
intern() используется для сохранения строки в пуле строк или получения ссылки, если такая строка уже находится в пуле.👍39
README. Суровые реалии разработчиков (2023) PDF
Начинающим программистам требуется нечто большее, чем навыки программирования. Столкнувшись с реальной работой, вы моментально понимаете, что самым нужным вещам, имеющим критическое значение для карьеры, не обучают ни в университетах, ни на курсах. Книга «README. Суровые реалии разработчиков» призвана восполнить этот пробел. Познакомьтесь с важнейшими практиками инжиниринга, которым обучают разработчиков в ведущих компаниях. Вы узнаете о том, что вас ждет при устройстве на работу, затем познакомитесь с особенностями кода промышленного уровня, эффективным тестированием, рецензированием кода, непрерывной интеграцией и развертыванием, созданием проектной документации и лучшими практиками архитектуры ПО. В последних главах описываются навыки гибкого планирования и даются советы по построению карьеры. Ключевые концепции и лучшие практики для начинающих разработчиков — то, чему вас не учили в университете!
Начинающим программистам требуется нечто большее, чем навыки программирования. Столкнувшись с реальной работой, вы моментально понимаете, что самым нужным вещам, имеющим критическое значение для карьеры, не обучают ни в университетах, ни на курсах. Книга «README. Суровые реалии разработчиков» призвана восполнить этот пробел. Познакомьтесь с важнейшими практиками инжиниринга, которым обучают разработчиков в ведущих компаниях. Вы узнаете о том, что вас ждет при устройстве на работу, затем познакомитесь с особенностями кода промышленного уровня, эффективным тестированием, рецензированием кода, непрерывной интеграцией и развертыванием, созданием проектной документации и лучшими практиками архитектуры ПО. В последних главах описываются навыки гибкого планирования и даются советы по построению карьеры. Ключевые концепции и лучшие практики для начинающих разработчиков — то, чему вас не учили в университете!
👍18❤2🔥1
Техника «10 тестов в день» – одна из самых эффективных в изучении Java.
Канал Java Guru выложил в открытый доступ тесты, которые дают на собеседованиях в топовые компании, вроде Яндекс и MailRu.
➤ Открываете задачку – выбираете вариант – видите правильный ответ и детальное объяснение к нему. Так вы усвоите на 50% больше знаний в сжатые сроки.
Подписывайтесь и качайте свои скиллы: @javatasks
Канал Java Guru выложил в открытый доступ тесты, которые дают на собеседованиях в топовые компании, вроде Яндекс и MailRu.
➤ Открываете задачку – выбираете вариант – видите правильный ответ и детальное объяснение к нему. Так вы усвоите на 50% больше знаний в сжатые сроки.
Подписывайтесь и качайте свои скиллы: @javatasks
👍8🔥2❤1🤩1
Можно ли использовать строки в конструкции switch?
Да, начиная с Java 7 в операторе
• участвующие строки чувствительны к регистру;
• используется метод
• согласно документации, Java 7 для строк в
Да, начиная с Java 7 в операторе
switch можно использовать строки, ранние версии Java не поддерживают этого. При этом:• участвующие строки чувствительны к регистру;
• используется метод
equals() для сравнения полученного значения со значениями case, поэтому во избежание NullPointerException стоит предусмотреть проверку на null.• согласно документации, Java 7 для строк в
switch, компилятор Java формирует более эффективный байткод для строк в конструкции switch, чем для сцепленных условий if-else.👍20🔥5
Также у нас есть группа Вконтакте https://vk.com/javatutorial в ней мы выкладываем видео, статьи и книги. Не забудь подписаться 😉
👍10🔥2
Основы Java. 2-е изд. (2019) PDF, DJVU
Описан базовый синтаксис языка Java: типы данных, операторы, условия, циклы, регулярные выражения, лямбда-выражения, ссылки на методы, объектно-ориентированное программирование. Рассмотрены основные классы стандартной библиотеки, получение данных из сети Интернет, работа с базой данных MySQL. Приводится описание Date API, Stream API, лямбда-выражений, ссылок на методы, функциональные интерфейсы и др. Во втором издании приводится описание большинства нововведений: модули, интерактивная оболочка JShell, инструкция var и др. Книга содержит большое количество практических примеров, помогающих начать программировать на языке Java самостоятельно. Весь материал тщательно подобран, хорошо структурирован и компактно изложен, что позволяет использовать книгу как удобный справочник. Электронный архив с примерами из книги можно скачать с сайта издательства.
Описан базовый синтаксис языка Java: типы данных, операторы, условия, циклы, регулярные выражения, лямбда-выражения, ссылки на методы, объектно-ориентированное программирование. Рассмотрены основные классы стандартной библиотеки, получение данных из сети Интернет, работа с базой данных MySQL. Приводится описание Date API, Stream API, лямбда-выражений, ссылок на методы, функциональные интерфейсы и др. Во втором издании приводится описание большинства нововведений: модули, интерактивная оболочка JShell, инструкция var и др. Книга содержит большое количество практических примеров, помогающих начать программировать на языке Java самостоятельно. Весь материал тщательно подобран, хорошо структурирован и компактно изложен, что позволяет использовать книгу как удобный справочник. Электронный архив с примерами из книги можно скачать с сайта издательства.
👍17🔥4
Какая основная разница между String, StringBuffer, StringBuilder?
Класс
Класс
Класс
Класс
String является неизменяемым (immutable) - модифицировать объект такого класса нельзя, можно лишь заменить его созданием нового экземпляра.Класс
StringBuffer изменяемый - использовать StringBuffer следует тогда, когда необходимо часто модифицировать содержимое.Класс
StringBuilder был добавлен в Java 5 и он во всем идентичен классу StringBuffer за исключением того, что он не синхронизирован и поэтому его методы выполняются значительно быстрей.👍35🔥2
Можно ли переопределить статический метод?
Отвечая на этот вопрос, необходимо аккуратно обращаться с терминологией перегрузки и переопределения.
На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.
Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.
Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию @Override, в нём нельзя использовать ключевое слово super.
Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.
Отвечая на этот вопрос, необходимо аккуратно обращаться с терминологией перегрузки и переопределения.
На перегрузку (overload) статического метода не накладывается никаких ограничений. С точки зрения компилятора, методы с разным списком аргументов – разные методы. Но это не переопределение.
Метод с модификатором static относится к классу, а не к его объектам. Для него работает статическое связывание, поэтому именно переопределение (override) в дочернем классе не работает.
Несмотря на это, в дочернем классе можно объявить static метод с такой же сигнатурой, как в родительском. В этом случае произойдет не перегрузка и не переопределение, а перекрытие (shadowing). К такому методу нельзя применить аннотацию @Override, в нём нельзя использовать ключевое слово super.
Если вы вызываете статический метод от переменной, а не типа, перекрытие таит в себе опасность. Без динамического связывания компилятор знает только о типе переменной, но не о типе ее значения. Если объявленный тип переменной – базовый класс, то метод-перекрытие никогда не вызовется. Поэтому при попытке такого вызова в IDE мы видим предупреждение.
👍30🔥6❤🔥2❤1