Основы программирования с Java (2022) True PDF
Эта книга предназначена для всех, кто хочет изучить основы программирования с использованием языка Java.
Эта книга даст понимание основных элементов программирования на Java и абстракции данных с использованием объектно-ориентированного подхода. С этой книгой Вы научитесь писать программы с использованием переменных, массивов, управляющих операторов, циклов, рекурсии, абстракции данных и объектов в интегрированной среде разработки. Вы изучите основы языка программирования Java, познакомитесь с его синтаксисом, типами данных, объектами и классами и многим другим.
Эта книга предназначена для всех, кто хочет изучить основы программирования с использованием языка Java.
Эта книга даст понимание основных элементов программирования на Java и абстракции данных с использованием объектно-ориентированного подхода. С этой книгой Вы научитесь писать программы с использованием переменных, массивов, управляющих операторов, циклов, рекурсии, абстракции данных и объектов в интегрированной среде разработки. Вы изучите основы языка программирования Java, познакомитесь с его синтаксисом, типами данных, объектами и классами и многим другим.
👍12🔥2
Как избежать ConcurrentModificationException во время перебора коллекции?
• Попробовать подобрать или реализовать самостоятельно другой итератор, работающий по принципу
• Использовать
• Преобразовать список в массив и перебирать массив.
• Блокировать изменения списка на время перебора с помощью блока
Отрицательная сторона последних двух вариантов - ухудшение производительности.
• Попробовать подобрать или реализовать самостоятельно другой итератор, работающий по принципу
fail-safe
.• Использовать
ConcurrentHashMap
и CopyOnWriteArrayList
.• Преобразовать список в массив и перебирать массив.
• Блокировать изменения списка на время перебора с помощью блока
synchronized
.Отрицательная сторона последних двух вариантов - ухудшение производительности.
👍20
new vs valueOf
Старайтесь всегда использовать метод
Все оболочки, кроме чисел с плавающей точкой, от Byte до Long, имеют кэш. По умолчанию этот кэш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кэша. Значение из кэша достается в 3.5 раза быстрее, чем при использовании конструктора, плюс идёт экономия памяти.
Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной.
Старайтесь всегда использовать метод
valueOf
вместо конструктора в стандартных классах-оболочках примитивных типов, кроме тех случаев, когда вам нужно конкретно выделить память под новое значение. Сейчас объясню, почему.Все оболочки, кроме чисел с плавающей точкой, от Byte до Long, имеют кэш. По умолчанию этот кэш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кэша. Значение из кэша достается в 3.5 раза быстрее, чем при использовании конструктора, плюс идёт экономия памяти.
Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной.
❤37👍5
Зачем добавили ArrayList, если уже был Vector?
• Методы класса
• По умолчанию,
• Методы класса
Vector
синхронизированы, а ArrayList
- нет;• По умолчанию,
Vector
удваивает свой размер, когда заканчивается выделенная под элементы память. ArrayList
же увеличивает свой размер только на половину.Vector
это устаревший класс и его использование не рекомендовано.👍30
Каким будет результат сравнения в следующем коде?
Ответ:
s1 == s2 ? true
s1 == s3 ? false
s1 equals s3 ? true
Вопрос на понимание работы пула строк в Java и на понимание сравнения строк. Разберем детально: Переменная s1 ссылается на строку в пуле уникальных строк в памяти, переменная s2 ссылается на ту же саму строку в пуле уникальных строк, что и переменная s1, первое сравнение будет true, так как s1 и s2 ссылаются на один и тот же объект. Переменная s3 ссылается на новый объект, который не находится в пуле уникальных строк, так как он создан через new, следовательно второе сравнение будет false, так как сравниваем переменные которые ссылаются на на два разных объекта. Третье сравнение будет true, так как мы сравниваем строки посимвольно на эквивалентность через equals, а содержимое данных строк одинаково.
Ответ:
s1 == s2 ? true
s1 == s3 ? false
s1 equals s3 ? true
Вопрос на понимание работы пула строк в Java и на понимание сравнения строк. Разберем детально: Переменная s1 ссылается на строку в пуле уникальных строк в памяти, переменная s2 ссылается на ту же саму строку в пуле уникальных строк, что и переменная s1, первое сравнение будет true, так как s1 и s2 ссылаются на один и тот же объект. Переменная s3 ссылается на новый объект, который не находится в пуле уникальных строк, так как он создан через new, следовательно второе сравнение будет false, так как сравниваем переменные которые ссылаются на на два разных объекта. Третье сравнение будет true, так как мы сравниваем строки посимвольно на эквивалентность через equals, а содержимое данных строк одинаково.
👍41❤5🔥5
Spring быстро (2022) True PDF
Java-программистам необходим фреймворк Spring. Этот невероятный инструмент универсален: вы можете разрабатывать как приложения для малого бизнеса, так и микросервисные архитектуры промышленного масштаба. Освоить Spring не так-то просто, но первый шаг сделать легко! Книга предназначена для Java-разработчиков, желающих создавать приложения на основе Spring. Информативные иллюстрации, понятные примеры, а также ясное и живое изложение Лауренциу Спилкэ позволят быстро овладеть необходимыми навыками. Вы научитесь планировать, разрабатывать и тестировать приложения. Благодаря акценту на наиболее важных функциях разберетесь в богатой экосистеме фреймворка Spring.
Java-программистам необходим фреймворк Spring. Этот невероятный инструмент универсален: вы можете разрабатывать как приложения для малого бизнеса, так и микросервисные архитектуры промышленного масштаба. Освоить Spring не так-то просто, но первый шаг сделать легко! Книга предназначена для Java-разработчиков, желающих создавать приложения на основе Spring. Информативные иллюстрации, понятные примеры, а также ясное и живое изложение Лауренциу Спилкэ позволят быстро овладеть необходимыми навыками. Вы научитесь планировать, разрабатывать и тестировать приложения. Благодаря акценту на наиболее важных функциях разберетесь в богатой экосистеме фреймворка Spring.
🔥20👍9❤3
Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
ArrayList:
• доступ к произвольному элементу по индексу за константное время
• доступ к элементам по значению за линейное время
• вставка в конец в среднем производится за константное время
• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (
• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.
LinkedList:
• на получение элемента по индексу или значению потребуется линейное время
• на добавление и удаление в начало или конец списка потребуется константное
• вставка или удаление в/из произвольного место константное
• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.
В целом,
ArrayList
это список, реализованный на основе массива, а LinkedList
— это классический двусвязный список, основанный на объектах с ссылками между ними.ArrayList:
• доступ к произвольному элементу по индексу за константное время
O(1)
;• доступ к элементам по значению за линейное время
O(N)
;• вставка в конец в среднем производится за константное время
O(1)
;• удаление произвольного элемента из списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку влево (реальный размер массива (
capacity
) не изменяется);• вставка элемента в произвольное место списка занимает значительное время т.к. при этом все элементы, находящиеся «правее» смещаются на одну ячейку вправо;
• минимум накладных расходов при хранении.
LinkedList:
• на получение элемента по индексу или значению потребуется линейное время
O(N)
;• на добавление и удаление в начало или конец списка потребуется константное
O(1)
;• вставка или удаление в/из произвольного место константное
O(1)
;• требует больше памяти для хранения такого же количества элементов, потому что кроме самого элемента хранятся еще указатели на следующий и предыдущий элементы списка.
В целом,
LinkedList
в абсолютных величинах проигрывает ArrayList
и по потребляемой памяти, и по скорости выполнения операций. LinkedList
предпочтительно применять, когда нужны частые операции вставки/удаления или в случаях, когда необходимо гарантированное время добавления элемента в список.👍38❤4🔥1
Техника «10 тестов в день» – одна из самых эффективных в изучении Java.
Канал Java Guru выложил в открытый доступ тесты, которые дают на собеседованиях в топовые компании, вроде Яндекс и MailRu.
➤ Открываете задачку – выбираете вариант – видите правильный ответ и детальное объяснение к нему. Так вы усвоите на 50% больше знаний в сжатые сроки.
Подписывайтесь и качайте свои скиллы: @javatasks
Канал Java Guru выложил в открытый доступ тесты, которые дают на собеседованиях в топовые компании, вроде Яндекс и MailRu.
➤ Открываете задачку – выбираете вариант – видите правильный ответ и детальное объяснение к нему. Так вы усвоите на 50% больше знаний в сжатые сроки.
Подписывайтесь и качайте свои скиллы: @javatasks
👍7🔥1
Надежная, универсальная, быстрая и гибкая среда ведения журналов для Java.
Language: Java
💥Stars: 2731
📝Forks: 1211
https://github.com/qos-ch/logback
Language: Java
💥Stars: 2731
📝Forks: 1211
https://github.com/qos-ch/logback
GitHub
GitHub - qos-ch/logback: The reliable, generic, fast and flexible logging framework for Java.
The reliable, generic, fast and flexible logging framework for Java. - qos-ch/logback
👍10
Какое худшее время работы метода contains() для элемента, который есть в LinkedList?
O(N)
. Время поиска элемента линейно пропорционально количеству элементов в списке.👍20🔥1
Одинарные и двойные кавычки
Что ты ожидаешь в результате выполнения кода с картинки?
Казалось бы, строка должна возвращать «
Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды (
Что ты ожидаешь в результате выполнения кода с картинки?
Казалось бы, строка должна возвращать «
HaHa
», но на самом деле это будет «Ha169
».Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды (
'H' и 'a'
) в целые значения посредством расширения примитивных типов — получается 169
.👍30❤4🔥4
Программируем на Java. 5-е межд. изд. (2023) PDF, ePUB
Неважно, кто вы – разработчик ПО или пользователь, в любом случае вы слышали о языке Java. В этой книге вы на конкретных примерах изучите основы Java, API, библиотеки классов, приемы и идиомы программирования. Особое внимание авторы уделяют построению реальных приложений.
Вы освоите средства управления ресурсами и исключениями, а также познакомитесь с новыми возможностями языка, появившимися в последних версиях Java.
• Программируйте на Java с использованием компилятора, интерпретатора и других инструментов.
• Исследуйте средства управления потоками и параллельной обработки.
• Изучайте обработку текста и мощные API.
• Создавайте приложения и службы на базе современных сетевых коммуникаций или веб-технологий.
Неважно, кто вы – разработчик ПО или пользователь, в любом случае вы слышали о языке Java. В этой книге вы на конкретных примерах изучите основы Java, API, библиотеки классов, приемы и идиомы программирования. Особое внимание авторы уделяют построению реальных приложений.
Вы освоите средства управления ресурсами и исключениями, а также познакомитесь с новыми возможностями языка, появившимися в последних версиях Java.
• Программируйте на Java с использованием компилятора, интерпретатора и других инструментов.
• Исследуйте средства управления потоками и параллельной обработки.
• Изучайте обработку текста и мощные API.
• Создавайте приложения и службы на базе современных сетевых коммуникаций или веб-технологий.
👍14🔥3❤2😁2
Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость,
При удалении произвольного элемента из списка, все элементы, находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость,
capacity
) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize()
.👍28🔥3
Object[] vs custom Class
Код с Object абсолютно не читабельный, когда приходится работать с возвращаемым значением в другом месте.То есть, чтобы понять что же хранит в себе возвращаемое значение — нужно вернуться в класс вызова и читать комментарии к методу, если же, конечно, они есть, а если нет, вникать в код, что не очень эффективно. Собственно, я сам этим иногда грешу, когда очень спешу. С этим можно смириться, если это очень редко, но, все же, в таких ситуациях лучше создавать новый класс. Облегчите жизнь тем, кто придет после вас.
Код с Object абсолютно не читабельный, когда приходится работать с возвращаемым значением в другом месте.То есть, чтобы понять что же хранит в себе возвращаемое значение — нужно вернуться в класс вызова и читать комментарии к методу, если же, конечно, они есть, а если нет, вникать в код, что не очень эффективно. Собственно, я сам этим иногда грешу, когда очень спешу. С этим можно смириться, если это очень редко, но, все же, в таких ситуациях лучше создавать новый класс. Облегчите жизнь тем, кто придет после вас.
👍21🔥3😁1
Гид Java-разработчика. Проектно-ориентированный подход (2022) PDF
Этот гид позволит вам прокачать свои навыки объектно-ориентированного программирования и ознакомиться с его приемами на примере реальных проектов. Авторы представляют проектно-ориентированный подход к созданию программного обеспечения на Java, используя который можно стать эффективным разработчиком. Каждая глава книги сконцентрирована на определенном проекте, начинающемся как простое консольное приложение и вырастающем в полноценное приложение. Если вы знаете основы программирования на Java, то здесь вы изучите современные методы разработки программного обеспечения, которые позволят создавать актуальные, стабильные и поддерживаемые Java-приложения. Если вы недавно закончили университет или курсы программирования и ищете первую работу в сфере Java, то вам обязательно нужно купить эту книгу — она связывает между собой упражнения в программировании и реальную ежедневную работу профессионального инженера-разработчика.
Этот гид позволит вам прокачать свои навыки объектно-ориентированного программирования и ознакомиться с его приемами на примере реальных проектов. Авторы представляют проектно-ориентированный подход к созданию программного обеспечения на Java, используя который можно стать эффективным разработчиком. Каждая глава книги сконцентрирована на определенном проекте, начинающемся как простое консольное приложение и вырастающем в полноценное приложение. Если вы знаете основы программирования на Java, то здесь вы изучите современные методы разработки программного обеспечения, которые позволят создавать актуальные, стабильные и поддерживаемые Java-приложения. Если вы недавно закончили университет или курсы программирования и ищете первую работу в сфере Java, то вам обязательно нужно купить эту книгу — она связывает между собой упражнения в программировании и реальную ежедневную работу профессионального инженера-разработчика.
👍16❤2🔥2
Java. Полное руководство, 12-е издание (2022) PDF, DJVU
В полностью обновленном с учетом версии Java SE 17 издании объясняется, как разрабатывать, компилировать, отлаживать и запускать программы на Java. Автор многочисленных бестселлеров по программированию Герберт Шилдт охватывает весь язык Java, включая его синтаксис, ключевые слова и фундаментальные принципы программирования. Вы также найдете здесь информацию об основных частях библиотеки Java API, таких как ввод-вывод, Collections Framework, библиотека потоков и утилиты параллелизма. Исследуются темы Swing, JavaBeans и сервлеты, а многочисленные примеры демонстрируют язык Java в действии. Конечно же, подробно обсуждаются недавние дополнения к языку Java, в том числе записи, запечатанные классы и выражения switch. Книга написана в ясном и четком стиле, который делает книги Шилдта выбором миллионов людей во всем мире.
В полностью обновленном с учетом версии Java SE 17 издании объясняется, как разрабатывать, компилировать, отлаживать и запускать программы на Java. Автор многочисленных бестселлеров по программированию Герберт Шилдт охватывает весь язык Java, включая его синтаксис, ключевые слова и фундаментальные принципы программирования. Вы также найдете здесь информацию об основных частях библиотеки Java API, таких как ввод-вывод, Collections Framework, библиотека потоков и утилиты параллелизма. Исследуются темы Swing, JavaBeans и сервлеты, а многочисленные примеры демонстрируют язык Java в действии. Конечно же, подробно обсуждаются недавние дополнения к языку Java, в том числе записи, запечатанные классы и выражения switch. Книга написана в ясном и четком стиле, который делает книги Шилдта выбором миллионов людей во всем мире.
👍30❤6🔥4
Оцените количество памяти на хранение одного примитива типа byte в LinkedList?
Каждый элемент
Для
Каждый элемент
LinkedList
хранит ссылку на предыдущий элемент, следующий элемент и ссылку на данные.static class Node<E> {Для
E item;
Node<E> next;
Node<E> prev;
//...
}
32-битных
систем каждая ссылка занимает 32 бита
(4 байта
). Сам объект (заголовок) вложенного класса Node
занимает 8 байт
. 4 + 4 + 4 + 8 = 20 байт
, а т.к. размер каждого объекта в Java
кратен 8
, соответственно получаем 24 байта
. Примитив типа byte
занимает 1 байт
памяти, но в JCF
примитивы упаковываются: объект типа Byte
занимает в памяти 16 байт
(8 байт
на заголовок объекта, 1 байт
на поле типа byte
и 7 байт
для кратности 8
). Также напомню, что значения от -128
до 127
кэшируются и для них новые объекты каждый раз не создаются. Таким образом, в x32 JVM 24 байта
тратятся на хранение одного элемента в списке и 16 байт
- на хранение упакованного объекта типа Byte
. Итого 40 байт
.Для
64-битной JVM
каждая ссылка занимает 64 бита
(8 байт
), размер заголовка каждого объекта составляет 16 байт
(два машинных слова). Вычисления аналогичны: 8 + 8 + 8 + 16 = 40байт
и 24 байта
. Итого 64 байта
.👍29🔥6❤3
Микросервисы Spring в действии (2022) True PDF
Spring существенно упрощает создание и развертывание микросервисов! Такие библиотеки, как Spring Boot, Spring Cloud и Spring Cloud Gateway, помогают уменьшить объем типового кода в службах REST. Они предоставляют эффективный набор инструментов для запуска микросервисов как в общедоступных, так и в частных облаках.
Книга учит создавать приложения на основе микросервисов с использованием Java и Spring. Начав с создания простых служб, вы постепенно перейдете к знакомству с приемами эффективного журналирования и мониторинга. Научитесь реструктурировать приложения на Java с помощью интуитивно понятных инструментов Spring и освоите управление API с помощью Spring Cloud Gateway. Также вы будете учиться развертывать приложения Spring Cloud в AWS и Kubernetes.
Издание предназначено для опытных разработчиков на Java и Spring.
Spring существенно упрощает создание и развертывание микросервисов! Такие библиотеки, как Spring Boot, Spring Cloud и Spring Cloud Gateway, помогают уменьшить объем типового кода в службах REST. Они предоставляют эффективный набор инструментов для запуска микросервисов как в общедоступных, так и в частных облаках.
Книга учит создавать приложения на основе микросервисов с использованием Java и Spring. Начав с создания простых служб, вы постепенно перейдете к знакомству с приемами эффективного журналирования и мониторинга. Научитесь реструктурировать приложения на Java с помощью интуитивно понятных инструментов Spring и освоите управление API с помощью Spring Cloud Gateway. Также вы будете учиться развертывать приложения Spring Cloud в AWS и Kubernetes.
Издание предназначено для опытных разработчиков на Java и Spring.
👍16❤10🔥5☃1
Оцените количество памяти на хранение одного примитива типа byte в ArrayList?
ArrayList основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому
ArrayList основан на массиве, для примитивных типов данных осуществляется автоматическая упаковка значения, поэтому
16 байт
тратится на хранение упакованного объекта и 4 байта
(8 для x64
) - на хранение ссылки на этот объект в самой структуре данных. Таким образом, в x32 JVM 4 байта
используются на хранение одного элемента и 16 байт
- на хранение упакованного объекта типа Byte
. Для x64
- 8 байт
и 24 байта
соответственно.👍20❤7🔥5☃2