Метод compareAndSwap()
Метод compareAndSwap() используется для атомарного обновления значения переменной.
Он позволяет изменить значение переменной только в том случае, если ее текущее значение совпадает с ожидаемым. Это помогает избежать состояния гонки при многопоточном доступе.
В примере мы объявляем AtomicInteger count и инициализируем его значением 0. Метод increment() сначала получает текущее значение в переменную currentValue, затем в цикле do-while вызывается compareAndSet, который проверяет равно ли текущее значение count значению currentValue, если да, то устанавливает новое значение currentValue + 1, если нет (значение изменилось другим потоком), то цикл повторяется.
Таким образом гарантируется атомарное инкрементирование переменной count.
#код
Метод compareAndSwap() используется для атомарного обновления значения переменной.
Он позволяет изменить значение переменной только в том случае, если ее текущее значение совпадает с ожидаемым. Это помогает избежать состояния гонки при многопоточном доступе.
В примере мы объявляем AtomicInteger count и инициализируем его значением 0. Метод increment() сначала получает текущее значение в переменную currentValue, затем в цикле do-while вызывается compareAndSet, который проверяет равно ли текущее значение count значению currentValue, если да, то устанавливает новое значение currentValue + 1, если нет (значение изменилось другим потоком), то цикл повторяется.
Таким образом гарантируется атомарное инкрементирование переменной count.
#код
Мы продолжаем собирать ваши истории о смене профессии и трудоустройстве в IT, чтобы написать большую аналитическую статью.
👉Если вы еще не рассказывали о своем опыте, пройдите короткий опрос по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
System.nanoTime
System.nanoTime() возвращает текущее время в наносекундах.
Этот метод используется для измерения продолжительности выполнения небольших фрагментов кода.
В отличие от System.currentTimeMillis(), который возвращает время в миллисекундах, nanoTime() имеет более высокое разрешение и позволяет измерять очень короткие промежутки времени.
nanoTime() часто используется для:
— Замеров производительности.
— Измерения задержек в мультитрединге.
— Микробенчмаркинга.
— Определения интервалов между событиями в реальном времени.
#код
System.nanoTime() возвращает текущее время в наносекундах.
Этот метод используется для измерения продолжительности выполнения небольших фрагментов кода.
В отличие от System.currentTimeMillis(), который возвращает время в миллисекундах, nanoTime() имеет более высокое разрешение и позволяет измерять очень короткие промежутки времени.
nanoTime() часто используется для:
— Замеров производительности.
— Измерения задержек в мультитрединге.
— Микробенчмаркинга.
— Определения интервалов между событиями в реальном времени.
#код
Как влияет модификатор static на класс/метод/поле?
Для класса — позволяет создать static-класс, экземпляры которого создавать нельзя. Используется для создания утилитных классов.
Для метода — делает метод статическим, то есть он может быть вызван без создания экземпляра класса.
Для поля — создает поле, общее для всех экземпляров класса. Статическое поле существует в единственном экземпляре для класса.
Если кратко, static позволяет создавать классы/методы/поля, связанные с классом, а не с экземпляром.
Это удобно, когда нужно реализовать утилитные классы или объекты, общие для всех экземпляров.
#вопросы_с_собеседований
Для класса — позволяет создать static-класс, экземпляры которого создавать нельзя. Используется для создания утилитных классов.
Для метода — делает метод статическим, то есть он может быть вызван без создания экземпляра класса.
Для поля — создает поле, общее для всех экземпляров класса. Статическое поле существует в единственном экземпляре для класса.
Если кратко, static позволяет создавать классы/методы/поля, связанные с классом, а не с экземпляром.
Это удобно, когда нужно реализовать утилитные классы или объекты, общие для всех экземпляров.
#вопросы_с_собеседований
Часто ли вы читаете официальную документацию? Предпочитаете ей сторонние обучающие статьи?
#интерактив
#интерактив
java.time.LocalDate
java.time.LocalDate — это класс из пакета java.time, введенного в Java 8, который предоставляет удобные средства для работы с датами в формате «год-месяц-день». Этот класс представляет собой дату без времени и без учета часовых поясов. Он используется для выполнения операций, связанных только с датами, без учета времени суток.
#код
java.time.LocalDate — это класс из пакета java.time, введенного в Java 8, который предоставляет удобные средства для работы с датами в формате «год-месяц-день». Этот класс представляет собой дату без времени и без учета часовых поясов. Он используется для выполнения операций, связанных только с датами, без учета времени суток.
#код
Что такое Atomic types и зачем они нужны?
Atomic типы — это классы, которые предоставляют методы для выполнения атомарных операций и используются в многопоточном программировании для обеспечения безопасности потоков без использования блоков synchronized.
Атомарные операции — это операции, которые выполняются как единое целое и не могут быть прерваны. Это означает, что если поток начинает выполнять атомарную операцию, никакой другой поток не может видеть промежуточное состояние или изменять состояние, пока операция не будет завершена.
Atomic типы, такие как AtomicInteger, AtomicLong, AtomicBoolean и т. д., предоставляют методы для выполнения атомарных операций, таких как get(), set(), getAndSet(), compareAndSet() и т. д.
Они полезны в многопоточном программировании, когда необходимо обеспечить целостность данных при одновременном доступе к общим данным из нескольких потоков. Использование Atomic типов может помочь избежать ошибок синхронизации и улучшить производительность по сравнению с использованием блоков synchronized, так как они не требуют блокировки.
Atomic типы — это классы, которые предоставляют методы для выполнения атомарных операций и используются в многопоточном программировании для обеспечения безопасности потоков без использования блоков synchronized.
Атомарные операции — это операции, которые выполняются как единое целое и не могут быть прерваны. Это означает, что если поток начинает выполнять атомарную операцию, никакой другой поток не может видеть промежуточное состояние или изменять состояние, пока операция не будет завершена.
Atomic типы, такие как AtomicInteger, AtomicLong, AtomicBoolean и т. д., предоставляют методы для выполнения атомарных операций, таких как get(), set(), getAndSet(), compareAndSet() и т. д.
Они полезны в многопоточном программировании, когда необходимо обеспечить целостность данных при одновременном доступе к общим данным из нескольких потоков. Использование Atomic типов может помочь избежать ошибок синхронизации и улучшить производительность по сравнению с использованием блоков synchronized, так как они не требуют блокировки.
Forwarded from Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
😺🐙✅ Как разобраться в Git: краткая инструкция для джунов
Расскажем, как Git хранит данные, отслеживает изменения и позволяет разработчикам управлять историей коммитов.
Расскажем, как Git хранит данные, отслеживает изменения и позволяет разработчикам управлять историей коммитов.
Чему вы бы хотели научиться? Расскажите в комментариях.
#интерактив
#интерактив
Больше половины программистов страдают профессиональным выгоранием. Здесь может спасти отпуск. Но как понять, когда он нужен? В статье рассматривается 12 признаков, указывающих на то, что вам нужен отдых.
Please open Telegram to view this post
VIEW IN TELEGRAM
Метод delete() класса StringBuffer
Метод delete() в классе StringBuffer используется для удаления символов из строки. Он удаляет символы из строки, на которой он был вызван.
В качестве аргумента принимает начальный индекс и конечный индекс удаляемого фрагмента и сдвигает оставшиеся символы влево, замещая удаленные.
Возвращает ссылку на текущий объект StringBuffer.
#код
Метод delete() в классе StringBuffer используется для удаления символов из строки. Он удаляет символы из строки, на которой он был вызван.
В качестве аргумента принимает начальный индекс и конечный индекс удаляемого фрагмента и сдвигает оставшиеся символы влево, замещая удаленные.
Возвращает ссылку на текущий объект StringBuffer.
#код
Метод trimToSize()
Метод trimToSize() используется для оптимизации размера внутреннего массива коллекций, таких как ArrayList или HashMap.
Этот метод позволяет уменьшить размер внутреннего массива коллекции до текущего количества элементов, то есть избавиться от неиспользуемой памяти.
Вызывать этот метод имеет смысл после массового удаления элементов из коллекции, чтобы освободить лишнюю память.
При добавлении новых элементов размер массива автоматически увеличится.
Метод trimToSize() является необязательной оптимизацией производительности и памяти. Его можно не вызывать, в этом случае внутренний массив будет занимать максимальный размер.
#код
Метод trimToSize() используется для оптимизации размера внутреннего массива коллекций, таких как ArrayList или HashMap.
Этот метод позволяет уменьшить размер внутреннего массива коллекции до текущего количества элементов, то есть избавиться от неиспользуемой памяти.
Вызывать этот метод имеет смысл после массового удаления элементов из коллекции, чтобы освободить лишнюю память.
При добавлении новых элементов размер массива автоматически увеличится.
Метод trimToSize() является необязательной оптимизацией производительности и памяти. Его можно не вызывать, в этом случае внутренний массив будет занимать максимальный размер.
#код
StringBuffer
StringBuffer — это класс, предназначенный для работы со строками. Он позволяет создавать модифицируемые (изменяемые) строки.
В отличие от класса String, объекты StringBuffer можно изменять после их создания, используя различные методы, такие как append(), insert(), delete().
Также StringBuffer эффективнее String при частых изменениях строки, так как не создает новый объект при каждом изменении.
Класс является потокобезопасным, т. е. может использоваться в многопоточных приложениях.
Методы StringBuffer не синхронизированы, поэтому для многопоточного доступа нужно вручную синхронизировать доступ с помощью synchronized блока.
#код
StringBuffer — это класс, предназначенный для работы со строками. Он позволяет создавать модифицируемые (изменяемые) строки.
В отличие от класса String, объекты StringBuffer можно изменять после их создания, используя различные методы, такие как append(), insert(), delete().
Также StringBuffer эффективнее String при частых изменениях строки, так как не создает новый объект при каждом изменении.
Класс является потокобезопасным, т. е. может использоваться в многопоточных приложениях.
Методы StringBuffer не синхронизированы, поэтому для многопоточного доступа нужно вручную синхронизировать доступ с помощью synchronized блока.
#код
Callable
Callable — это интерфейс из пакета java.util.concurrent, который представляет собой задачу, которую можно выполнить и получить результат, а также обработать исключение, если оно произошло во время выполнения задачи. Он аналогичен интерфейсу Runnable, но в отличие от Runnable, Callable может возвращать результат выполнения и бросать проверяемые исключения.
#код
Callable — это интерфейс из пакета java.util.concurrent, который представляет собой задачу, которую можно выполнить и получить результат, а также обработать исключение, если оно произошло во время выполнения задачи. Он аналогичен интерфейсу Runnable, но в отличие от Runnable, Callable может возвращать результат выполнения и бросать проверяемые исключения.
#код
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
✍️ Библиотека программиста» находится в поиске переводчика и автора оригинальных статей
Кто нужен?
● Энтузиасты, которые держат руку на пульсе, читают помимо книг зарубежные техноблоги
● Энтузиасты, которым есть что сказать
Тематика
● Java, C#
● В четырех случаях из пяти вы предлагаете тему статьи
Объем
● От 7 до 15 тыс. знаков без учета кода
● 3-4 статьи в месяц
Оплата
● 4к руб. за статью
● Перевод — 250 руб. за 1000 символов без учета кода
● В месяц выйдет ~16к руб.
● Работаем с самозанятыми (компенсируем налог), ИП
Тестовое задание
● Автор: написать статью по Java или C#
● Переводчик: перевести статью или часть статьи по Java или C#
● Тема: на ваше усмотрение
● ЦА: начинающие/джуны
● Объем: 5-7к символов без пробелов
● Не оплачивается
Не хочу выполнять тестовое задание
Если у вас есть опубликованные статьи, пришлите ссылки на них.
Я пишу «так себе», что делать?
Чтобы написать статью, которую не стыдно опубликовать, достаточно овладеть инфостилем. У нас есть бесплатный курс для начинающих копирайтеров «Статьи для IT: как объяснять и распространять значимые идеи». Время прохождения курса: 1-2 недели.
Где публикуется статья?
Статья публикуется на сайте proglib.io, в группе ВК (425к подписчиков), на канале «Библиотека джависта» (24к подписчиков) и в «Библиотека шарписта» (20к подписчиков).
Вакансию закроем 15 января. У вас есть время пройти курс и написать тестовое задание.
➡️ Заполнить анкету ⬅️
Кто нужен?
● Энтузиасты, которые держат руку на пульсе, читают помимо книг зарубежные техноблоги
● Энтузиасты, которым есть что сказать
Тематика
● Java, C#
● В четырех случаях из пяти вы предлагаете тему статьи
Объем
● От 7 до 15 тыс. знаков без учета кода
● 3-4 статьи в месяц
Оплата
● 4к руб. за статью
● Перевод — 250 руб. за 1000 символов без учета кода
● В месяц выйдет ~16к руб.
● Работаем с самозанятыми (компенсируем налог), ИП
Тестовое задание
● Автор: написать статью по Java или C#
● Переводчик: перевести статью или часть статьи по Java или C#
● Тема: на ваше усмотрение
● ЦА: начинающие/джуны
● Объем: 5-7к символов без пробелов
● Не оплачивается
Не хочу выполнять тестовое задание
Если у вас есть опубликованные статьи, пришлите ссылки на них.
Я пишу «так себе», что делать?
Чтобы написать статью, которую не стыдно опубликовать, достаточно овладеть инфостилем. У нас есть бесплатный курс для начинающих копирайтеров «Статьи для IT: как объяснять и распространять значимые идеи». Время прохождения курса: 1-2 недели.
Где публикуется статья?
Статья публикуется на сайте proglib.io, в группе ВК (425к подписчиков), на канале «Библиотека джависта» (24к подписчиков) и в «Библиотека шарписта» (20к подписчиков).
Вакансию закроем 15 января. У вас есть время пройти курс и написать тестовое задание.
➡️ Заполнить анкету ⬅️
🎅 Новый год — отличное время для старта!
🎄Новый год начинается с подарков, а лучший подарок для себя — новые знания! Потому что ну а когда начинать учиться новому, если не в новом году. Выбирайте курс, оставляйте заявку и менеджер вас проконсультирует — https://proglib.io/w/b963d80d
📚 Начать всегда можно с вводных занятий, чтобы познакомиться с преподавателями и форматом обучения.
Конечно, советуем обратить внимание на наши самые популярные курсы:
– Математика для Data Science — 19 490 ₽ (вместо 29 990 ₽)
– Алгоритмы и структуры данных — 23 390 ₽ (вместо 35 990 ₽)
🔥 Все цены на сайте уже включают скидку 35%, поэтому не упустите возможность зайти на курс по самой выгодной цене.
☺️ Доступ бессрочный, поэтому учиться вы сможете в своем темпе.
👉 Если вы сомневаетесь в пользе обучения для своего профессионального трека, оставляете заявку. Менеджер поможет разобраться с этим и любым другим вопросом — https://proglib.io/w/b963d80d
🫶 Всех с наступающим новым годом!
🎄Новый год начинается с подарков, а лучший подарок для себя — новые знания! Потому что ну а когда начинать учиться новому, если не в новом году. Выбирайте курс, оставляйте заявку и менеджер вас проконсультирует — https://proglib.io/w/b963d80d
📚 Начать всегда можно с вводных занятий, чтобы познакомиться с преподавателями и форматом обучения.
Конечно, советуем обратить внимание на наши самые популярные курсы:
– Математика для Data Science — 19 490 ₽ (вместо 29 990 ₽)
– Алгоритмы и структуры данных — 23 390 ₽ (вместо 35 990 ₽)
🔥 Все цены на сайте уже включают скидку 35%, поэтому не упустите возможность зайти на курс по самой выгодной цене.
☺️ Доступ бессрочный, поэтому учиться вы сможете в своем темпе.
👉 Если вы сомневаетесь в пользе обучения для своего профессионального трека, оставляете заявку. Менеджер поможет разобраться с этим и любым другим вопросом — https://proglib.io/w/b963d80d
🫶 Всех с наступающим новым годом!
Конвертируем массив в список
Arrays.asList() — это статический метод класса Arrays, который позволяет конвертировать обычный массив в список List.
— Принимает массив в качестве аргумента и возвращает объект типа List с элементами этого массива.
— Возвращаемый список имеет фиксированный размер, равный длине исходного массива. Добавлять/удалять элементы в него нельзя.
— Изменения в возвращаемом списке будут вноситься в исходный массив, т. к. список работает как «представление» массива. Метод работает для массивов примитивных и ссылочных типов.
Arrays.asList хорош для чтения элементов массива, но не для записи из-за неизменяемого размера.
#код
Arrays.asList() — это статический метод класса Arrays, который позволяет конвертировать обычный массив в список List.
— Принимает массив в качестве аргумента и возвращает объект типа List с элементами этого массива.
— Возвращаемый список имеет фиксированный размер, равный длине исходного массива. Добавлять/удалять элементы в него нельзя.
— Изменения в возвращаемом списке будут вноситься в исходный массив, т. к. список работает как «представление» массива. Метод работает для массивов примитивных и ссылочных типов.
Arrays.asList хорош для чтения элементов массива, но не для записи из-за неизменяемого размера.
#код
Как не допустить сериализацию?
Чтобы не допустить автоматическую сериализацию можно переопределить private методы для создания исключительной ситуации NotSerializableException.
private void writeObject(ObjectOutputStream out) throws IOException {
throw new NotSerializableException();
}
private void readObject(ObjectInputStream in) throws IOException {
throw new NotSerializableException();
}
Чтобы не допустить автоматическую сериализацию можно переопределить private методы для создания исключительной ситуации NotSerializableException.
private void writeObject(ObjectOutputStream out) throws IOException {
throw new NotSerializableException();
}
private void readObject(ObjectInputStream in) throws IOException {
throw new NotSerializableException();
}
Как разделить строку на части?
В Java можно разделить строку на части с помощью метода split() класса String. Метод split() разбивает исходную строку на массив строк, используя заданный разделитель.
В этом примере исходная строка «Это пример строки для разделения» разбивается на части с помощью пробела в качестве разделителя. Однако, если у вас есть другой разделитель (например, запятая или точка с запятой), просто замените значение переменной delimiter на соответствующий разделитель в вашем случае.
В Java можно разделить строку на части с помощью метода split() класса String. Метод split() разбивает исходную строку на массив строк, используя заданный разделитель.
В этом примере исходная строка «Это пример строки для разделения» разбивается на части с помощью пробела в качестве разделителя. Однако, если у вас есть другой разделитель (например, запятая или точка с запятой), просто замените значение переменной delimiter на соответствующий разделитель в вашем случае.