Что такое volatile переменная?
Ключевое слово volatile используется в многопоточном программировании для обеспечения безопасности потока, поскольку модификация одной изменяемой переменной видна всем другим потокам, поэтому одна переменная может использоваться одним потоком за раз.
При помощи ключевого слова volatile можно гарантировать, что переменная будет потокобезопасна и будет храниться в общей памяти, и потоки не будут ее брать себе в свой кеш.
Как это выглядит?
private volatile AtomicInteger count;
Просто добавляем к переменной volatile.
Но это не говорит о полной потокобезопасности… Ведь операции могут быть не атомарны над переменной. Но можно использовать Atomic классы, которые делают операцию атомарно, то есть за одно выполнение процессором.
Таких классов можно много найти в пакете java.util.concurrent.atomic.
#java
Подписывайтесь на канал 👉@cod_academy
Ключевое слово volatile используется в многопоточном программировании для обеспечения безопасности потока, поскольку модификация одной изменяемой переменной видна всем другим потокам, поэтому одна переменная может использоваться одним потоком за раз.
При помощи ключевого слова volatile можно гарантировать, что переменная будет потокобезопасна и будет храниться в общей памяти, и потоки не будут ее брать себе в свой кеш.
Как это выглядит?
private volatile AtomicInteger count;
Просто добавляем к переменной volatile.
Но это не говорит о полной потокобезопасности… Ведь операции могут быть не атомарны над переменной. Но можно использовать Atomic классы, которые делают операцию атомарно, то есть за одно выполнение процессором.
Таких классов можно много найти в пакете java.util.concurrent.atomic.
#java
Подписывайтесь на канал 👉@cod_academy
Сборка exe файлов - pyinstaller
Если вы просто скопируете проект, то он не будет работать на других системах где нет установленного Python, а если есть, то возможно там отсутствуют нужные библиотеки. Но можно создать исполняемый файл exe, который запустится и без Python. Необходимо установить pyinstaller:
install pyinstaller
Затем перейти в командную строку, и перейти в нужную директорию с помощью команды cd. Далее напишем такой код:
--onefile --noconsole main.py
--onefile - означает, что будет только один исполняемый файл.
--noconsole - консоль не будет запускаться при открытии
main.py - файл, при запуске которого начинает работать ваша программа
В папке dist будет лежать нужный файл, остальные созданные папки можно удалить
Внимание! С помощью данного метода не получится скрыть ваш код, так же вы не получите прироста в скорости работы программы.
#python
Подписывайтесь на канал 👉@cod_academy
Если вы просто скопируете проект, то он не будет работать на других системах где нет установленного Python, а если есть, то возможно там отсутствуют нужные библиотеки. Но можно создать исполняемый файл exe, который запустится и без Python. Необходимо установить pyinstaller:
install pyinstaller
Затем перейти в командную строку, и перейти в нужную директорию с помощью команды cd. Далее напишем такой код:
--onefile --noconsole main.py
--onefile - означает, что будет только один исполняемый файл.
--noconsole - консоль не будет запускаться при открытии
main.py - файл, при запуске которого начинает работать ваша программа
В папке dist будет лежать нужный файл, остальные созданные папки можно удалить
Внимание! С помощью данного метода не получится скрыть ваш код, так же вы не получите прироста в скорости работы программы.
#python
Подписывайтесь на канал 👉@cod_academy
👍1
Объявление классов и функций
В init части цикла for можно объявлять не одни лишь переменные. Здесь также можно разместить классы и функции.
Благодаря этому можно использовать множество переменных с разными типами.
#cpp
Подписывайтесь на канал 👉@cod_academy
В init части цикла for можно объявлять не одни лишь переменные. Здесь также можно разместить классы и функции.
Благодаря этому можно использовать множество переменных с разными типами.
#cpp
Подписывайтесь на канал 👉@cod_academy
Что такое модификаторы доступа?
Модификаторы доступа — это инструмент, при помощи которого можно настроить доступ к классам, методам и переменным.
Бывают следующие модификаторы, упорядоченные в порядке повышения доступа:
1) private — используется для методов, полей и конструкторов. Уровень доступа — только класс, внутри которого он объявлен.
2) package-private(default) — может использоваться для классов. Доступ только в конкретном пакете (package), в котором объявлен класс, метод, переменная, конструктор.
3) protected — такой же доступ, как и package-private + для тех классов, которые наследуются от класса с модификатором protected.
4) public — используется и для классов. Полноценный доступ во всем приложении.
#java
Подписывайтесь на канал 👉@cod_academy
Модификаторы доступа — это инструмент, при помощи которого можно настроить доступ к классам, методам и переменным.
Бывают следующие модификаторы, упорядоченные в порядке повышения доступа:
1) private — используется для методов, полей и конструкторов. Уровень доступа — только класс, внутри которого он объявлен.
2) package-private(default) — может использоваться для классов. Доступ только в конкретном пакете (package), в котором объявлен класс, метод, переменная, конструктор.
3) protected — такой же доступ, как и package-private + для тех классов, которые наследуются от класса с модификатором protected.
4) public — используется и для классов. Полноценный доступ во всем приложении.
#java
Подписывайтесь на канал 👉@cod_academy
Как перевести массив в список на python?
Вы можете использовать метод .tolist() для перевода массива в список.
#python
Подписывайтесь на канал 👉@cod_academy
Вы можете использовать метод .tolist() для перевода массива в список.
#python
Подписывайтесь на канал 👉@cod_academy
Корень числа
Дано действительное число a и натуральное n. Вычислите корень n-й степени из числа a, используя вещественный бинарный поиск.
Формат входных данных:
С клавиатуры через пробел вводится два числа:
1. a – действительное, неотрицательное, не превосходит 1000, задано с точностью до 6 знаков после десятичной точки;
2. n – натуральное, не превосходящее 10.
Формат выходных данных:
Требуется вывести число с точностью не менее 6 знаков после запятой.
#cpp
Подписывайтесь на канал 👉@cod_academy
Дано действительное число a и натуральное n. Вычислите корень n-й степени из числа a, используя вещественный бинарный поиск.
Формат входных данных:
С клавиатуры через пробел вводится два числа:
1. a – действительное, неотрицательное, не превосходит 1000, задано с точностью до 6 знаков после десятичной точки;
2. n – натуральное, не превосходящее 10.
Формат выходных данных:
Требуется вывести число с точностью не менее 6 знаков после запятой.
#cpp
Подписывайтесь на канал 👉@cod_academy
Метод compareTo()
В Java метод compareTo() получает значение 0, если аргумент является строкой лексически равной данной строке; значение меньше 0, если аргумент является строкой лексически большей, чем сравниваемая строка; и значение больше 0, если аргумент является строкой лексически меньшей этой строки.
#java
Подписывайтесь на канал 👉@cod_academy
В Java метод compareTo() получает значение 0, если аргумент является строкой лексически равной данной строке; значение меньше 0, если аргумент является строкой лексически большей, чем сравниваемая строка; и значение больше 0, если аргумент является строкой лексически меньшей этой строки.
#java
Подписывайтесь на канал 👉@cod_academy
Разница между == и is
Недавно в чате наши подписчики затрагивали эту тему, поэтому мы решили разложить всё по полочкам, чтобы в дальнейшем не возникало вопросов.
Итак, оператор == проверяет равенство значений двух объектов. А оператор is в свою очередь проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти.
Однако Python в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны некоторые казусы, как в примере.
#python
Подписывайтесь на канал 👉@cod_academy
Недавно в чате наши подписчики затрагивали эту тему, поэтому мы решили разложить всё по полочкам, чтобы в дальнейшем не возникало вопросов.
Итак, оператор == проверяет равенство значений двух объектов. А оператор is в свою очередь проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти.
Однако Python в целях производительности кеширует короткие строки и малые целые числа, поэтому возможны некоторые казусы, как в примере.
#python
Подписывайтесь на канал 👉@cod_academy
Объединения тоже могут быть шаблонами
Еще одна вещь, о которой знают немногие, это то, что объединения тоже могут быть шаблонами.
У них также могут быть конструкторы и функции-члены. Ничего общего с наследованием (включая виртуальные функции).
#cpp
Подписывайтесь на канал 👉@cod_academy
Еще одна вещь, о которой знают немногие, это то, что объединения тоже могут быть шаблонами.
У них также могут быть конструкторы и функции-члены. Ничего общего с наследованием (включая виртуальные функции).
#cpp
Подписывайтесь на канал 👉@cod_academy
👍1
Внутренние классы (нестатические вложенные классы)
Внутренние классы — это механизм безопасности в Java. Создать такой класс довольно просто — нужно написать класс внутри класса. Внутренний класс может быть закрытым (private), и после того, как Вы объявляете внутренний класс закрытым, он не может быть доступен из объекта вне класса.
На картинке Outer_Demo – внешний класс, Inner_Demo – внутренний класс, display_Inner() – метод, внутри которого мы создаем внутренний класс, и этот метод вызывается из основного метода.
#java
Подписывайтесь на канал 👉@cod_academy
Внутренние классы — это механизм безопасности в Java. Создать такой класс довольно просто — нужно написать класс внутри класса. Внутренний класс может быть закрытым (private), и после того, как Вы объявляете внутренний класс закрытым, он не может быть доступен из объекта вне класса.
На картинке Outer_Demo – внешний класс, Inner_Demo – внутренний класс, display_Inner() – метод, внутри которого мы создаем внутренний класс, и этот метод вызывается из основного метода.
#java
Подписывайтесь на канал 👉@cod_academy
Коллеги, приглашаем вас на вебинар, где Валерий Харисов расскажет о том, как искать и находить неочевидные утечки исходного кода и содержащихся в них секретов.
🕚 29 июня в 15:00 (МСК)
Leak-Search — сервис сканирования публичных репозиториев на наличие утечек исходного кода, конфигураций и конфиденциальных данных компании.
Разработан и поддерживается командой по ИБ группы компаний QIWI
👨💻На вебинаре рассмотрим:
- как программный код и секреты компании попадают в сеть
- какие векторы утечек часто остаются вне фокуса
- сколько это может стоить бизнесу
- и главное, как не стать жертвой утечки данных
Все на реальных кейсах крупнейших российских и зарубежных компаний, утечки которых были найдены с помощью Leak-Search, либо известны публично.
Для участия на вебинаре зарегистрируйтесь по ссылке
https://link.webinar.fm/register/55392181/7xyczjsv
🕚Ждем вас 29 июня в 15:00 (МСК)
❗️На вебинаре вы получите доступ к пробному периоду❗️
🕚 29 июня в 15:00 (МСК)
Leak-Search — сервис сканирования публичных репозиториев на наличие утечек исходного кода, конфигураций и конфиденциальных данных компании.
Разработан и поддерживается командой по ИБ группы компаний QIWI
👨💻На вебинаре рассмотрим:
- как программный код и секреты компании попадают в сеть
- какие векторы утечек часто остаются вне фокуса
- сколько это может стоить бизнесу
- и главное, как не стать жертвой утечки данных
Все на реальных кейсах крупнейших российских и зарубежных компаний, утечки которых были найдены с помощью Leak-Search, либо известны публично.
Для участия на вебинаре зарегистрируйтесь по ссылке
https://link.webinar.fm/register/55392181/7xyczjsv
🕚Ждем вас 29 июня в 15:00 (МСК)
❗️На вебинаре вы получите доступ к пробному периоду❗️
Как округлить до тысячных в python?
Вы можете использовать
#python
Подписывайтесь на канал 👉@cod_academy
Вы можете использовать
round()
#python
Подписывайтесь на канал 👉@cod_academy
Жадный алгоритм
Данный алгоритм на каждом шаге делает локально оптимальный выбор, надеясь в итоге получить глобально оптимальное решение.
Пример: Дробный Рюкзак
Задача состоит в том, чтобы выбрать, какие предметы, имеющие вес и стоимость, поместить в рюкзак ограниченной ёмкости W, да так, чтобы максимизировать общую ценность его содержимого. Мы можем определить соотношение стоимости предмета к его весу, т. е. с «жадностью» выбирать предметы, имеющие высокую стоимость, но в то же время маленький вес, а затем сортировать их по этим критериям. В задаче с дробным рюкзаком нам разрешено брать дробные части предмета.
Поскольку сортировка — самая дорогая операция, алгоритм работает за время O(n log n). Принимая в формате (стоимость, вес) три пары предметов — {(60, 10), (100, 20), (120, 30)} — и итоговую вместительность рюкзака W = 50, приведённый выше код выводит следующее:
жадный дробный рюкзак
максимальная ценность: 240.
#cpp
Подписывайтесь на канал 👉@cod_academy
Данный алгоритм на каждом шаге делает локально оптимальный выбор, надеясь в итоге получить глобально оптимальное решение.
Пример: Дробный Рюкзак
Задача состоит в том, чтобы выбрать, какие предметы, имеющие вес и стоимость, поместить в рюкзак ограниченной ёмкости W, да так, чтобы максимизировать общую ценность его содержимого. Мы можем определить соотношение стоимости предмета к его весу, т. е. с «жадностью» выбирать предметы, имеющие высокую стоимость, но в то же время маленький вес, а затем сортировать их по этим критериям. В задаче с дробным рюкзаком нам разрешено брать дробные части предмета.
Поскольку сортировка — самая дорогая операция, алгоритм работает за время O(n log n). Принимая в формате (стоимость, вес) три пары предметов — {(60, 10), (100, 20), (120, 30)} — и итоговую вместительность рюкзака W = 50, приведённый выше код выводит следующее:
жадный дробный рюкзак
максимальная ценность: 240.
#cpp
Подписывайтесь на канал 👉@cod_academy
Что такое «ссылка на метод»?
Если существующий в классе метод уже делает все, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:
☕️ имя_класса::имя_статического_метода для статического метода;
☕️ объект_класса::имя_метода для метода экземпляра;
☕️ название_класса::new для конструктора.
Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.
Ссылки на методы потенциально более эффективны, чем использование лямбда-выражений. Кроме того, они предоставляют компилятору более качественную информацию о типе и при возможности выбора между использованием ссылки на существующий метод и использованием лямбда-выражения, следует всегда предпочитать использование ссылки на метод.
#java
Подписывайтесь на канал 👉@cod_academy
Если существующий в классе метод уже делает все, что необходимо, то можно воспользоваться механизмом method reference (ссылка на метод) для непосредственной передачи этого метода. Такая ссылка передается в виде:
☕️ имя_класса::имя_статического_метода для статического метода;
☕️ объект_класса::имя_метода для метода экземпляра;
☕️ название_класса::new для конструктора.
Результат будет в точности таким же, как в случае определения лямбда-выражения, которое вызывает этот метод.
Ссылки на методы потенциально более эффективны, чем использование лямбда-выражений. Кроме того, они предоставляют компилятору более качественную информацию о типе и при возможности выбора между использованием ссылки на существующий метод и использованием лямбда-выражения, следует всегда предпочитать использование ссылки на метод.
#java
Подписывайтесь на канал 👉@cod_academy
Как создать массив из n элементов в python?
Вы можете использовать цикл и метод .append(). Так же для примера можно использовать модуль random.
#python
Подписывайтесь на канал 👉@cod_academy
Вы можете использовать цикл и метод .append(). Так же для примера можно использовать модуль random.
#python
Подписывайтесь на канал 👉@cod_academy
Неиспользуемые переменные
Подобный макрос есть, например, в cocos2d-x, там он называется CC_UNUSED_PARAM. Из недостатков: теоретически, он может работать не на всех компиляторах. Тем не менее, в cocos2d-x он для всех платформ определен абсолютно одинаково.
Для чего? Этот макрос позволяет избежать предупреждения о неиспользуемой переменной, а читающему код он как бы говорит: «тот кто писал это — знал, что переменная не используется, все в порядке».
#cpp
Подписывайтесь на канал 👉@cod_academy
Подобный макрос есть, например, в cocos2d-x, там он называется CC_UNUSED_PARAM. Из недостатков: теоретически, он может работать не на всех компиляторах. Тем не менее, в cocos2d-x он для всех платформ определен абсолютно одинаково.
Для чего? Этот макрос позволяет избежать предупреждения о неиспользуемой переменной, а читающему код он как бы говорит: «тот кто писал это — знал, что переменная не используется, все в порядке».
#cpp
Подписывайтесь на канал 👉@cod_academy
❤1👍1
Может ли объект получить доступ к члену класса, объявленному как private? Если да, то каким образом?
• Внутри класса доступ к приватной переменной открыт без ограничений;
• Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;
• Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса. Например: getX() и setX().
• Через механизм рефлексии (Reflection API).
#java
Подписывайтесь на канал 👉@cod_academy
• Внутри класса доступ к приватной переменной открыт без ограничений;
• Вложенный класс имеет полный доступ ко всем (в том числе и приватным) членам содержащего его класса;
• Доступ к приватным переменным извне может быть организован через отличные от приватных методов, которые предоставлены разработчиком класса. Например: getX() и setX().
• Через механизм рефлексии (Reflection API).
#java
Подписывайтесь на канал 👉@cod_academy
👍2
Библиотека FuzzyWuzzy
Интересная и полезная библиотека поиска совпадений в тексте. Очень поможет вам при работе над общающимися ботами: голосовыми или текстовыми помощниками.
Разумеется, это один из инструментов, всегда можно использовать другой, но я лично пользуюсь этим.
Библиотеку следует установить:
install fuzzywuzzy
#python
Подписывайтесь на канал 👉@cod_academy
Интересная и полезная библиотека поиска совпадений в тексте. Очень поможет вам при работе над общающимися ботами: голосовыми или текстовыми помощниками.
Разумеется, это один из инструментов, всегда можно использовать другой, но я лично пользуюсь этим.
Библиотеку следует установить:
install fuzzywuzzy
#python
Подписывайтесь на канал 👉@cod_academy
👍4
set::erase()
Функция erase() используется для удаления элементов из контейнера по указанной позиции или диапазону.
#cpp
Подписывайтесь на канал 👉@cod_academy
Функция erase() используется для удаления элементов из контейнера по указанной позиции или диапазону.
#cpp
Подписывайтесь на канал 👉@cod_academy
👍2
Способы чтения ввода с консоли в Java
В Java существует четыре различных способа чтения ввода от пользователя в среде командной строки (из консоли).
Рассмотрим один из них - использование класса Buffered Reader. Это классический метод ввода данных в Java, представленный в JDK 1.0. Этот метод используется путем обертывания System .in (стандартный поток ввода) в InputStreamReader, который обернут в BufferedReader.
#java
Подписывайтесь на канал 👉@cod_academy
В Java существует четыре различных способа чтения ввода от пользователя в среде командной строки (из консоли).
Рассмотрим один из них - использование класса Buffered Reader. Это классический метод ввода данных в Java, представленный в JDK 1.0. Этот метод используется путем обертывания System .in (стандартный поток ввода) в InputStreamReader, который обернут в BufferedReader.
#java
Подписывайтесь на канал 👉@cod_academy
👍5
Избегайте неоправданных циклов с коллекциями
Предположим, что требуется создать новый список, элементами которого будут являться квадраты чисел данного списка. Большинство сразу же напишут простенький цикл for.
Но в этом и проблема. Такой подход займет как минимум три строчки: объявление новой переменной, создание цикла и инструкции внутри него. При этом также снижается скорость работы скрипта.
На прикрепленной картинке я привел две достойные альтернативы, а именно использование генератора списков и функции map. В обоих вариантах не только код становится короче и выразительнее, но и заметно повышается производительность.
#python
Подписывайтесь на канал 👉@cod_academy
Предположим, что требуется создать новый список, элементами которого будут являться квадраты чисел данного списка. Большинство сразу же напишут простенький цикл for.
Но в этом и проблема. Такой подход займет как минимум три строчки: объявление новой переменной, создание цикла и инструкции внутри него. При этом также снижается скорость работы скрипта.
На прикрепленной картинке я привел две достойные альтернативы, а именно использование генератора списков и функции map. В обоих вариантах не только код становится короче и выразительнее, но и заметно повышается производительность.
#python
Подписывайтесь на канал 👉@cod_academy
👍2