Да, быть разработчиком непросто. Но нет ничего невозможного, если у вас есть желание разобраться ☕
А если не уверены, что именно язык Java «ваш», то добро пожаловать на подготовительный курс «Java-разработчик» от онлайн-школы Хекслет.
Практика с первого дня обучения, 62 онлайн-урока, 4 живых вебинара, помощь наставника, собственный проект по окончании программы, – и все это даже при нулевом уровне подготовки.
Не обещаем, что будет легко, но интересно, полезно и недорого (всего 990 рублей!) – гарантируем.
На все это вам будет отведено 2 недели и 1 наставник-эксперт, который поможет справиться с трудностями.
⏰ Cтарт уже 3 сентября, так что записывайтесь скорее!
А если не уверены, что именно язык Java «ваш», то добро пожаловать на подготовительный курс «Java-разработчик» от онлайн-школы Хекслет.
Практика с первого дня обучения, 62 онлайн-урока, 4 живых вебинара, помощь наставника, собственный проект по окончании программы, – и все это даже при нулевом уровне подготовки.
Не обещаем, что будет легко, но интересно, полезно и недорого (всего 990 рублей!) – гарантируем.
На все это вам будет отведено 2 недели и 1 наставник-эксперт, который поможет справиться с трудностями.
⏰ Cтарт уже 3 сентября, так что записывайтесь скорее!
👍3🔥1
Классы BigInteger и BigDecimal
BigInteger и BigDecimal – иммутабельные числа с заданной точностью. Эти классы – наследники Number, наряду с обертками примитивных чисел. В классах также реализованы базовые математические операции. Наибольший интерес представляет класс BigDecimal – дробное число.
Числа с плавающей точкой (float, double) хранят свои значения в памяти в экспоненциальном виде: знак-порядок-мантисса. Этот факт приводит к неочевидным с точки зрения десятичной системы округлениям при математических операциях.
BigDecimal хранит число в десятичном виде: немасштабированное значение (intVal), размерность (scale), точность (precision) и знак. Значение раскладывается на эти компоненты как intVal ÷ 10^scale. Точность – количество используемых знаков, без учета нулей в начале, но с учетом нулей в конце. Точность числа 0.0010 – 2.
Экземпляр BigDecimal можно создавать из числа с плавающей точкой, и из строки. В первом случае преобразование из экспоненциального в десятичный вид может привести к неожиданной точности, так что рекомендуется использовать строку.
У класса BigDecimal есть редкая особенность: у него не согласованы методы equals() и compareTo(). equals() сравнивает значения с точки зрения структуры объекта – компоненты точности, размерности и значения сравниваются по отдельности. Так equals на числах 0.1 и 0.10 вернет false – у них разная точность, 1 и 2. compareTo() сравнивает числа с математической точки зрения – на тех же 0.1 и 0.10 compareTo вернет 0.
Вместе с BigDecimal активно используется класс MathContext. Это точность, плюс план действий когда значение в нее не влазит – стратегия округления. MathContext можно передавать как в конструктор, так и в математические операции.
BigInteger можем рассматривать как частный случай BigDecimal. Он используется для целых чисел, больших чем Long.MAX_VALUE.
BigInteger и BigDecimal – иммутабельные числа с заданной точностью. Эти классы – наследники Number, наряду с обертками примитивных чисел. В классах также реализованы базовые математические операции. Наибольший интерес представляет класс BigDecimal – дробное число.
Числа с плавающей точкой (float, double) хранят свои значения в памяти в экспоненциальном виде: знак-порядок-мантисса. Этот факт приводит к неочевидным с точки зрения десятичной системы округлениям при математических операциях.
BigDecimal хранит число в десятичном виде: немасштабированное значение (intVal), размерность (scale), точность (precision) и знак. Значение раскладывается на эти компоненты как intVal ÷ 10^scale. Точность – количество используемых знаков, без учета нулей в начале, но с учетом нулей в конце. Точность числа 0.0010 – 2.
Экземпляр BigDecimal можно создавать из числа с плавающей точкой, и из строки. В первом случае преобразование из экспоненциального в десятичный вид может привести к неожиданной точности, так что рекомендуется использовать строку.
У класса BigDecimal есть редкая особенность: у него не согласованы методы equals() и compareTo(). equals() сравнивает значения с точки зрения структуры объекта – компоненты точности, размерности и значения сравниваются по отдельности. Так equals на числах 0.1 и 0.10 вернет false – у них разная точность, 1 и 2. compareTo() сравнивает числа с математической точки зрения – на тех же 0.1 и 0.10 compareTo вернет 0.
Вместе с BigDecimal активно используется класс MathContext. Это точность, плюс план действий когда значение в нее не влазит – стратегия округления. MathContext можно передавать как в конструктор, так и в математические операции.
BigInteger можем рассматривать как частный случай BigDecimal. Он используется для целых чисел, больших чем Long.MAX_VALUE.
🔥9👍5❤1
Назовите несколько примеров java.lang.Error
Как уже упоминалось ранее, исключения типа Error говорят о серьезных проблемах во время выполнения программы. Вот все ошибки стандартной библиотеки Java SE:
• AnnotationFormatError – AnnotationParser (Reflection) обнаружил дефект .class-файла аннотации;
• AssertionError – провалилась проверка утверждения (ключевое слово assert). Используется в тестах;
• CoderMalfunctionError – неисправность при кодировании/декодировании Unicode (в пакетах java.io/java.nio);
• ServiceConfigurationError – проблема с загрузкой сервисов в ServiceLoader (Service Provider Interface);
• IOError – серьезная ошибка ввода-вывода;
• ThreadDeath – особенная ошибка: в отличие от остальных наследников Error, это – «нормальное явление», сигнал асинхронного завершения текущего потока;
• LinkageError – после перекомпиляции случилось непоправимое. Предок для 15 различных ошибок формата .class-файлов, загрузки классов, пропажи используемых членов, и прочего.
• VirtualMachineError – JVM сломалась. Абстрактный класс-предок для:
◦ StackOverflowError – переполнение стека вызовов, обычно встречается при бесконечной рекурсии;
◦ OutOfMemoryError – кончилась память, и GC уже не помогает;
◦ InternalError – внутренняя проблема JVM. Её единственный наследник ZipError не используется с Java 9;
◦ UnknownError – что-то другое.
Как уже упоминалось ранее, исключения типа Error говорят о серьезных проблемах во время выполнения программы. Вот все ошибки стандартной библиотеки Java SE:
• AnnotationFormatError – AnnotationParser (Reflection) обнаружил дефект .class-файла аннотации;
• AssertionError – провалилась проверка утверждения (ключевое слово assert). Используется в тестах;
• CoderMalfunctionError – неисправность при кодировании/декодировании Unicode (в пакетах java.io/java.nio);
• ServiceConfigurationError – проблема с загрузкой сервисов в ServiceLoader (Service Provider Interface);
• IOError – серьезная ошибка ввода-вывода;
• ThreadDeath – особенная ошибка: в отличие от остальных наследников Error, это – «нормальное явление», сигнал асинхронного завершения текущего потока;
• LinkageError – после перекомпиляции случилось непоправимое. Предок для 15 различных ошибок формата .class-файлов, загрузки классов, пропажи используемых членов, и прочего.
• VirtualMachineError – JVM сломалась. Абстрактный класс-предок для:
◦ StackOverflowError – переполнение стека вызовов, обычно встречается при бесконечной рекурсии;
◦ OutOfMemoryError – кончилась память, и GC уже не помогает;
◦ InternalError – внутренняя проблема JVM. Её единственный наследник ZipError не используется с Java 9;
◦ UnknownError – что-то другое.
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Разыскиваются 5 активных JAVA разработчиков 🔥🔥🔥
Для обучения AI-разработке!
Мы научим вас создавать и тренировать нейронные сети, и вы сможете:
1️⃣ Устроиться разработчиком в крупную компанию и зарабатывать от 150 тысяч руб. в месяц
2️⃣ Разрабатывать такие проекты на заказ и зарабатывать от 500 тысяч руб. за проект
3️⃣ Создать нейро-сотрудника в вашей компании и вырасти на +30-100% в зарплате
На интенсиве будет много практики: создадим 9 нейросетей за 1 вечер:
🧬 Оценка выброса CO2 по параметрам машины
🧬 Сегментация изображения для робота доставщика
🧬 Трекинг людей на видео
🧬 Распознавание речии другие
Ведущий интенсива - Senior AI-разработчик нейросетей и основатель Университета искусственного интеллекта
🔥 Регистрируйтесь на бесплатный интенсив! Встречаемся в ближайшую среду. Вы узнаете, как освоить самую востребованную профессию 2024 года!
Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395.
Для обучения AI-разработке!
Мы научим вас создавать и тренировать нейронные сети, и вы сможете:
1️⃣ Устроиться разработчиком в крупную компанию и зарабатывать от 150 тысяч руб. в месяц
2️⃣ Разрабатывать такие проекты на заказ и зарабатывать от 500 тысяч руб. за проект
3️⃣ Создать нейро-сотрудника в вашей компании и вырасти на +30-100% в зарплате
На интенсиве будет много практики: создадим 9 нейросетей за 1 вечер:
🧬 Оценка выброса CO2 по параметрам машины
🧬 Сегментация изображения для робота доставщика
🧬 Трекинг людей на видео
🧬 Распознавание речии другие
Ведущий интенсива - Senior AI-разработчик нейросетей и основатель Университета искусственного интеллекта
🔥 Регистрируйтесь на бесплатный интенсив! Встречаемся в ближайшую среду. Вы узнаете, как освоить самую востребованную профессию 2024 года!
Реклама. ООО "ТЕРРА ЭЙАЙ". ИНН 9728019395.
👍3🔥2🥰2🌭1🤣1
Какие данные есть в исключении?
Разработчик может добавлять в исключение, как и в любой другой класс, произвольные поля и методы. Но у всех исключений есть общая часть, унаследованная от Throwable. В базовых Exception, RuntimeException и Error нет ничего кроме неё.
Cause – другое исключение, которым было вызвано это. Опционально. Можно задать через сеттер или аргумент конструктора, но задается не больше одного раза.
Message – сообщение ошибки. Устанавливается в конструкторе. Кроме обычного геттера есть getLocalizedMessage, который в наследниках может возвращать локализованный вариант сообщения.
Stack Trace – стек вызовов методов потока до того места, где сообщение было сконструировано (не выброшено!). JVM позволено терять часть, или даже все фреймы стека. Есть сеттер для фреймворков удаленного вызова (RPC). Сеттер можно отключить параметром конструктора writableStackTrace.
Suppressed – список исключений, которые были выброшены и подавлены, пока это исключение шло к обработчику. Сюда попадают подавленные исключения финализации ресурсов при использовании try-with-resource. Сеттер доступен и для пользовательского кода. Подавление можно отключить параметром конструктора enableSuppression.
Разработчик может добавлять в исключение, как и в любой другой класс, произвольные поля и методы. Но у всех исключений есть общая часть, унаследованная от Throwable. В базовых Exception, RuntimeException и Error нет ничего кроме неё.
Cause – другое исключение, которым было вызвано это. Опционально. Можно задать через сеттер или аргумент конструктора, но задается не больше одного раза.
Message – сообщение ошибки. Устанавливается в конструкторе. Кроме обычного геттера есть getLocalizedMessage, который в наследниках может возвращать локализованный вариант сообщения.
Stack Trace – стек вызовов методов потока до того места, где сообщение было сконструировано (не выброшено!). JVM позволено терять часть, или даже все фреймы стека. Есть сеттер для фреймворков удаленного вызова (RPC). Сеттер можно отключить параметром конструктора writableStackTrace.
Suppressed – список исключений, которые были выброшены и подавлены, пока это исключение шло к обработчику. Сюда попадают подавленные исключения финализации ресурсов при использовании try-with-resource. Сеттер доступен и для пользовательского кода. Подавление можно отключить параметром конструктора enableSuppression.
🔥11👍4
Хотите узнать, как концепция дилеммы заключенного применяется в разработке архитектурных решений?
Всего за пару часов вы разберете основы теории игр, научитесь анализировать преимущества и риски различных архитектурных подходов, сможете эффективно управлять компромиссами между компонентами системы.
Присоединяйтесь к открытому вебинару 3 сентября в 20:00 мск! Урок создан для архитекторов ПО, руководителей IT-проектов, Fullstack- и Backend-разработчиков.
Спикер Евгений Тюменцев — директор компании по разработке ПО, 20 лет преподает компьютерные дисциплины в ВУЗе: C++, Kotlin, C#, ООП.
Встречаемся в преддверии старта курса «Архитектура и шаблоны проектирования». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие.
Всего за пару часов вы разберете основы теории игр, научитесь анализировать преимущества и риски различных архитектурных подходов, сможете эффективно управлять компромиссами между компонентами системы.
Присоединяйтесь к открытому вебинару 3 сентября в 20:00 мск! Урок создан для архитекторов ПО, руководителей IT-проектов, Fullstack- и Backend-разработчиков.
Спикер Евгений Тюменцев — директор компании по разработке ПО, 20 лет преподает компьютерные дисциплины в ВУЗе: C++, Kotlin, C#, ООП.
Встречаемся в преддверии старта курса «Архитектура и шаблоны проектирования». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие.
❤7👍3🔥2
Какие значения возвращают мутаторы Map?
Давайте разберемся с этой путаницей раз и навсегда.
• Методы put (put, putIfAbsent) возвращают старое значение.
• Методы работы с множеством элементов (putAll, replaceAll, clear) не возвращают ничего.
• remove и replace с указанием не только ключа, но и старого значения, возвращают boolean; без указания – это самое старое значение.
• Методы с коллбэками (computeIfPresent, computeIfAbsent, compute, merge) возвращают актуальное значение после вызова, оставшееся или новое.
Давайте разберемся с этой путаницей раз и навсегда.
• Методы put (put, putIfAbsent) возвращают старое значение.
• Методы работы с множеством элементов (putAll, replaceAll, clear) не возвращают ничего.
• remove и replace с указанием не только ключа, но и старого значения, возвращают boolean; без указания – это самое старое значение.
• Методы с коллбэками (computeIfPresent, computeIfAbsent, compute, merge) возвращают актуальное значение после вызова, оставшееся или новое.
👍12🔥4🥰3
Ждем вас на открытом вебинаре 11 сентября в 20:00 мск, где мы разберем:
Урок идеально подходит для тех, кто начинает изучать Java или хочет углубить свои знания.
Встречаемся в преддверии старта курса «Специализация Java-разработчик».
Все участники вебинара получат специальную цену на обучение!
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3❤2🔥2👏1
Зачем выбирать ReentrantLock вместо synchronized?
Объект класса ReentrantLock решает те же задачи, что и блок synchronized. Поток висит на вызове метода lock() в ожидании своей очереди занять этот объект. Владеть локом, как и находиться внутри блока synchronized может только один поток одновременно. unlock(), подобно выходу из блока синхронизации, освобождает объект-монитор для других потоков.
В отличие от блока синхронизации, ReentrantLock дает расширенный интерфейс для получения информации о состоянии блокировки. Методы лока позволяют еще до блокировки узнать, занят ли он сейчас, сколько потоков ждут его в очереди, сколько раз подряд текущий поток завладел им.
Шире и возможные режимы блокировки. Кроме обычного ожидающего lock(), вариант tryLock() с параметром ожидает своей очереди только заданное время, а без параметра – вообще не ждет, а только захватывает свободный лок.
Еще одно отличие – свойство fair. Лок с этим свойством обеспечивает «справедливость» очереди: пришедший раньше поток захватывает объект раньше. Блок synchronized не дает никаких гарантий порядка.
Объект класса ReentrantLock решает те же задачи, что и блок synchronized. Поток висит на вызове метода lock() в ожидании своей очереди занять этот объект. Владеть локом, как и находиться внутри блока synchronized может только один поток одновременно. unlock(), подобно выходу из блока синхронизации, освобождает объект-монитор для других потоков.
В отличие от блока синхронизации, ReentrantLock дает расширенный интерфейс для получения информации о состоянии блокировки. Методы лока позволяют еще до блокировки узнать, занят ли он сейчас, сколько потоков ждут его в очереди, сколько раз подряд текущий поток завладел им.
Шире и возможные режимы блокировки. Кроме обычного ожидающего lock(), вариант tryLock() с параметром ожидает своей очереди только заданное время, а без параметра – вообще не ждет, а только захватывает свободный лок.
Еще одно отличие – свойство fair. Лок с этим свойством обеспечивает «справедливость» очереди: пришедший раньше поток захватывает объект раньше. Блок synchronized не дает никаких гарантий порядка.
👍21🔥5🥰4
Хотите узнать, как легко и эффективно работать с потоковыми данными с помощью Alpakka?
Всего за пару часов вы разберете работу с потоковыми данными, узнаете, что такое «продьюсер» и «консьюмер», и научитесь применять эти знания в различных областях, где данные отсылаются и принимаются через Kafka.
Присоединяйтесь к открытому вебинару «Потоковая обработка данных с помощью Alpakka» 5 сентября в 20:00 мск!
Урок будет полезен всем, кто работает с потоковыми данными.
Спикер Валентин Шилин — старший программист/аналитик данных в зарубежной компании.
Встречаемся в преддверии старта курса «Apache Kafka». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAjcup
Всего за пару часов вы разберете работу с потоковыми данными, узнаете, что такое «продьюсер» и «консьюмер», и научитесь применять эти знания в различных областях, где данные отсылаются и принимаются через Kafka.
Присоединяйтесь к открытому вебинару «Потоковая обработка данных с помощью Alpakka» 5 сентября в 20:00 мск!
Урок будет полезен всем, кто работает с потоковыми данными.
Спикер Валентин Шилин — старший программист/аналитик данных в зарубежной компании.
Встречаемся в преддверии старта курса «Apache Kafka». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAjcup
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍3🎉3🔥2
Какой результат будет получен после компиляции и выполнения данного кода?
Anonymous Quiz
6%
a test A
27%
a test B
9%
b test A
37%
b test B
3%
b test A test B
4%
Ошибка выполнения
14%
Ошибка компиляции
1👍20🔥6❤1
Всего за 4 месяца вы уверенно овладеете всеми аспектами языка Java, научитесь создавать чистый и легко читаемый код, сможете успешно пройти любое собеседование, а также успешно пройти сертификацию Oracle Java Programmer.
Хотите это реализовать? Присоединяйтесь к курсу «Углубленное изучение языка Java».
Ознакомится с курсом можно на бесплатном открытом уроке «Определение областей действия переменных (Scopes) в Java».
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥3❤2
Какой результат выполнения данной части кода?
Anonymous Quiz
12%
1
62%
2
4%
Ошибка времени выполнения
22%
Ошибка компиляции
1👍7🔥3
Ждем вас на открытом вебинаре 13 сентября в 20:00 мск.
где мы разберем:
Урок идеально подходит для Java- и Kotlin-разработчиков.
Встречаемся в преддверии старта курса «Разработчик на Spring Framework».
Все участники вебинара получат специальную цену на обучение!
📌 Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAmhpP
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
Как используется метод Lock.newCondition()?
Если реализации интерфейса Lock представляют высокоуровневую альтернативу блока synchronized, то реализации его спутника, интерфейса Condition – альтернатива методам notify/wait. Оба этих интерфейса относятся к пакету java.util.concurrent.locks.
Как и ожидание на мониторе, Condition реализует примитив синхронизации «Условная переменная». Один или несколько потоков зависают на объекте-кондишне с помощью варианта метода await (ждут удовлетворения условия). Другой поток пробуждает их методами signal и signalAll (сигнализирует об удовлетворении условия).
Конкретные реализации Condition всегда решают те же задачи, что блокировка на мониторе, но в теории могут отличаться в нюансах поведения. Например, может не быть требования вызывать ожидание/сигнал только при захваченном локе (аналог требования, по которому notify/wait всегда вызываются в synchronized). Или может гарантироваться порядок получения сигнала ожидающими потоками.
Возвращаясь к поставленному вопросу, Condition всегда связан со своим объектом типа Lock, и метод Lock.newCondition() – единственный правильный способ создания кондишна.
Если реализации интерфейса Lock представляют высокоуровневую альтернативу блока synchronized, то реализации его спутника, интерфейса Condition – альтернатива методам notify/wait. Оба этих интерфейса относятся к пакету java.util.concurrent.locks.
Как и ожидание на мониторе, Condition реализует примитив синхронизации «Условная переменная». Один или несколько потоков зависают на объекте-кондишне с помощью варианта метода await (ждут удовлетворения условия). Другой поток пробуждает их методами signal и signalAll (сигнализирует об удовлетворении условия).
Конкретные реализации Condition всегда решают те же задачи, что блокировка на мониторе, но в теории могут отличаться в нюансах поведения. Например, может не быть требования вызывать ожидание/сигнал только при захваченном локе (аналог требования, по которому notify/wait всегда вызываются в synchronized). Или может гарантироваться порядок получения сигнала ожидающими потоками.
Возвращаясь к поставленному вопросу, Condition всегда связан со своим объектом типа Lock, и метод Lock.newCondition() – единственный правильный способ создания кондишна.
👍10🔥2
Хотите узнать, как эффективно использовать CSS-локаторы и XPath?
Всего за пару часов вы научитесь уверенно находить нужные элементы на странице и использовать их для эффективного UI-тестирования на Java. Вы узнаете, какие локаторы применять и как это улучшает ваши тесты.
Присоединяйтесь к открытому вебинару «CSS-локаторы и XPath для UI-тестирования на Java» 10 сентября в 20:00 мск!
Урок будет полезен начинающим специалистам, которые хотят работать в IT, начинающим тестировщикам и разработчикам на Java или других языках.
Встречаемся в преддверии старта курса «Java QA Engineer. Basic». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAxU8p
Всего за пару часов вы научитесь уверенно находить нужные элементы на странице и использовать их для эффективного UI-тестирования на Java. Вы узнаете, какие локаторы применять и как это улучшает ваши тесты.
Присоединяйтесь к открытому вебинару «CSS-локаторы и XPath для UI-тестирования на Java» 10 сентября в 20:00 мск!
Урок будет полезен начинающим специалистам, которые хотят работать в IT, начинающим тестировщикам и разработчикам на Java или других языках.
Встречаемся в преддверии старта курса «Java QA Engineer. Basic». Все участники вебинара получат специальную цену на обучение!
Регистрируйтесь прямо сейчас, чтобы не пропустить мероприятие: https://vk.cc/cAxU8p
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥5👍4🎄1
Даны следующие классы:
Anonymous Quiz
3%
Исключение RuntimeException.
58%
Исключение ClassCastException.
21%
Успешный запуск и отработка.
18%
Ошибка компиляции.
🔥19👍5