✍️ Библиотека программиста» находится в поиске переводчика и автора оригинальных статей
Кто нужен?
● Энтузиасты, которые держат руку на пульсе, читают помимо книг зарубежные техноблоги
● Энтузиасты, которым есть что сказать
Тематика
● 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 января. У вас есть время пройти курс и написать тестовое задание.
➡️ Заполнить анкету ⬅️
Интерфейс BlockingQueue
Интерфейс BlockingQueue используется для реализации очередей с блокировками.
Он позволяет безопасно работать с очередью из нескольких потоков.
Основные методы:
add(E e) — добавляет элемент в очередь, может выбросить исключение если очередь переполнена.
offer(E e) — добавляет элемент в очередь, возвращает false если очередь переполнена.
put(E e) — добавляет элемент в очередь, блокирует поток если очередь переполнена.
take() — извлекает и удаляет элемент из очереди, блокирует поток если очередь пуста.
poll() — извлекает и удаляет элемент из очереди, возвращает null если очередь пуста.
#код
Интерфейс BlockingQueue используется для реализации очередей с блокировками.
Он позволяет безопасно работать с очередью из нескольких потоков.
Основные методы:
add(E e) — добавляет элемент в очередь, может выбросить исключение если очередь переполнена.
offer(E e) — добавляет элемент в очередь, возвращает false если очередь переполнена.
put(E e) — добавляет элемент в очередь, блокирует поток если очередь переполнена.
take() — извлекает и удаляет элемент из очереди, блокирует поток если очередь пуста.
poll() — извлекает и удаляет элемент из очереди, возвращает null если очередь пуста.
#код
📁💡 Где программисту взять идеи для портфолио
Портфолио — это классный способ впечатлить работодателей. Однако у большинства айтишников портфолио состоит из примерно одинаковых работ. Как правило, это «тудушки», калькуляторы и что-то в таком роде. Но таким удивить уже сложно.
Поэтому давайте разберемся, как собрать классное портфолио, а главное — где взять интересные идеи для пет-проектов.
🔗 Читать статью
Портфолио — это классный способ впечатлить работодателей. Однако у большинства айтишников портфолио состоит из примерно одинаковых работ. Как правило, это «тудушки», калькуляторы и что-то в таком роде. Но таким удивить уже сложно.
Поэтому давайте разберемся, как собрать классное портфолио, а главное — где взять интересные идеи для пет-проектов.
🔗 Читать статью
Параллельные аккумуляторы
Кроме блокировок, Java Concurrent может предложить еще одну интересную функцию — параллельные аккумуляторы. LongAccumulator обновляет значение, используя предоставленную функцию. Это позволяет нам реализовать алгоритм без блокировок в ряде сценариев. Обычно это предпочтительнее чем AtomicLong, когда несколько потоков обновляют общее значение.
Для того чтобы создать аккумулятор, вам нужно указать в конструкторе два аргумента. Первый из них — это функция, используемая для вычисления результата аккумулятора. Обычно это метод sum. Второй параметр указывает начальное значение нашего аккумулятора.
Теперь давайте создадим LongAccumulator с начальным значением 10000а затем вызовем метод accumulate() из нескольких потоков.
#код
Кроме блокировок, Java Concurrent может предложить еще одну интересную функцию — параллельные аккумуляторы. LongAccumulator обновляет значение, используя предоставленную функцию. Это позволяет нам реализовать алгоритм без блокировок в ряде сценариев. Обычно это предпочтительнее чем AtomicLong, когда несколько потоков обновляют общее значение.
Для того чтобы создать аккумулятор, вам нужно указать в конструкторе два аргумента. Первый из них — это функция, используемая для вычисления результата аккумулятора. Обычно это метод sum. Второй параметр указывает начальное значение нашего аккумулятора.
Теперь давайте создадим LongAccumulator с начальным значением 10000а затем вызовем метод accumulate() из нескольких потоков.
#код
Подборка лучших статей «Библиотеки программиста» за ноябрь: сохраняй в заметки, чтобы прочесть позже #самыйсок
🧑💻🪜 6 карьерных советов программисту
⚖️ 25 курсов, книг и подкастов для развития критического мышления
🔈16+ лучших нейронок для синтеза речи
⭐️ FAQ по трудоустройству: разбираем самые популярные вопросы
👀 6 способов привлечь внимание работодателя
🏆 Самые популярные языки программирования 2023
📰❌ 10 признаков фейковой вакансии
🧑💻🪜 6 карьерных советов программисту
⚖️ 25 курсов, книг и подкастов для развития критического мышления
🔈16+ лучших нейронок для синтеза речи
⭐️ FAQ по трудоустройству: разбираем самые популярные вопросы
👀 6 способов привлечь внимание работодателя
🏆 Самые популярные языки программирования 2023
📰❌ 10 признаков фейковой вакансии
Тип Optional
Тип Optional используется для представления возможности отсутствия значения. Он обертывает другой тип данных и может содержать либо значение этого типа, либо быть пустым (null).
Этот код создает Optional объект, который может содержать строку. Если строка доступна, она будет возвращена; в противном случае будет возвращено значение «Default Value».
Использование Optional способствует более чистому и безопасному коду при работе с возможно отсутствующими значениями.
#код
Тип Optional используется для представления возможности отсутствия значения. Он обертывает другой тип данных и может содержать либо значение этого типа, либо быть пустым (null).
Этот код создает Optional объект, который может содержать строку. Если строка доступна, она будет возвращена; в противном случае будет возвращено значение «Default Value».
Использование Optional способствует более чистому и безопасному коду при работе с возможно отсутствующими значениями.
#код
Метод Math.random()
Используется для генерации случайного числа в диапазоне от 0.0 до 1.0. Различные диапазоны могут быть достигнуты с помощью арифметики.
Выше приведен пример выбора случайного числа в диапазоне от 0 до 10.
#код
Используется для генерации случайного числа в диапазоне от 0.0 до 1.0. Различные диапазоны могут быть достигнуты с помощью арифметики.
Выше приведен пример выбора случайного числа в диапазоне от 0 до 10.
#код
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
📈 Обзор рынка труда в ИТ: III квартал 2023 года
В этой статье обсудим зарплату программистов в III квартале 2023 года, динамику вакансий, тенденции рынка труда в ИТ и многое другое. Присоединяйтесь!
Читать статью
В этой статье обсудим зарплату программистов в III квартале 2023 года, динамику вакансий, тенденции рынка труда в ИТ и многое другое. Присоединяйтесь!
Читать статью
Класс DataOutputStream и его методы
Поток DataOutputStream позволяет записывать примитивные данные в исходный код.
Если используйте объект DataOutputStream, то у Вас есть под рукой вспомогательные методы, которые можно использовать для записи потока или для выполнения других операций над потоком.
Все перечисленные методы можно просмотреть здесь.
#код
Поток DataOutputStream позволяет записывать примитивные данные в исходный код.
Если используйте объект DataOutputStream, то у Вас есть под рукой вспомогательные методы, которые можно использовать для записи потока или для выполнения других операций над потоком.
Все перечисленные методы можно просмотреть здесь.
#код
Получить атомное время из интернет-часов
Для получения атомного времени из интернет-часов в Java вы можете воспользоваться классом java.net.URL для выполнения HTTP-запроса к одному из сервисов времени, таким как «time.google.com». Затем вы можете обработать полученный ответ и извлечь атомное время.
Обратите внимание, что формат ответа от сервиса времени может различаться, и вам может потребоваться настроить метод parseAtomicTime для вашего конкретного сервиса. Подобные сервисы могут предоставлять атомное время в разных форматах, таких как ISO 8601 или Unix Timestamp.
#код
Для получения атомного времени из интернет-часов в Java вы можете воспользоваться классом java.net.URL для выполнения HTTP-запроса к одному из сервисов времени, таким как «time.google.com». Затем вы можете обработать полученный ответ и извлечь атомное время.
Обратите внимание, что формат ответа от сервиса времени может различаться, и вам может потребоваться настроить метод parseAtomicTime для вашего конкретного сервиса. Подобные сервисы могут предоставлять атомное время в разных форматах, таких как ISO 8601 или Unix Timestamp.
#код
Могли бы вы придумать ситуацию, когда блок finally не будет выполнен?
— Если в блоке try вызвать метод System.exit(). Это приведет к немедленному завершению приложения, и блок finally пропускается.
— Если произойдет аварийное завершение JVM, например OutOfMemoryError. В этом случае JVM останавливается без выполнения finally.
— Если в блоке try выбрасывается исключение Error или его подклассы (например, StackOverflowError). Такие исключения обычно означают серьезную проблему, поэтому JVM не гарантирует выполнение finally.
— Если при выполнении кода в блоке try произошел deadlock. В этом случае поток зависает, и блок finally не выполняется.
— Если программа была принудительно остановлена, например, по kill -9 в Linux.
#вопросы_с_собеседований
— Если в блоке try вызвать метод System.exit(). Это приведет к немедленному завершению приложения, и блок finally пропускается.
— Если произойдет аварийное завершение JVM, например OutOfMemoryError. В этом случае JVM останавливается без выполнения finally.
— Если в блоке try выбрасывается исключение Error или его подклассы (например, StackOverflowError). Такие исключения обычно означают серьезную проблему, поэтому JVM не гарантирует выполнение finally.
— Если при выполнении кода в блоке try произошел deadlock. В этом случае поток зависает, и блок finally не выполняется.
— Если программа была принудительно остановлена, например, по kill -9 в Linux.
#вопросы_с_собеседований
Метод 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