#java
Почему же Java вместе с JVM могут соревноваться с новоиспеченными языками программирования через 25 лет релиза?
Благодаря умению JVM жонглировать потоками? на ней делают новые языки программирования, к примеру Kotlin. JVM настолько хороша, что ее можно рассматривать как отдельную ОС. Что? - Спросит меня агрессивный любитель низкоуровневого программирования. А я отвечу: Android был значительно основан на Java. Кроме того, существуют ОС, которые в классическом понимании, полностью основаны на базе JVM.
Что делает JVM похожим на ОС? Управление памятью, управление потоками, развитый ввод / вывод, обобщенная философия объектов. Благодаря этим возможностям она позволяет создавать многозадачные и комплексные системы. Это я еще не упоминал механизм байт-кода, который крутит Java код на любом процессоре.
Конечно, JVM не идеальна. Программы на С++ куда быстрее выполняются да и ООП систему, на которой вся Java держится, часто критикуют.
Одинаково Java и JVM остаются одними из лучших инструментов в программировании.
Почему же Java вместе с JVM могут соревноваться с новоиспеченными языками программирования через 25 лет релиза?
Благодаря умению JVM жонглировать потоками? на ней делают новые языки программирования, к примеру Kotlin. JVM настолько хороша, что ее можно рассматривать как отдельную ОС. Что? - Спросит меня агрессивный любитель низкоуровневого программирования. А я отвечу: Android был значительно основан на Java. Кроме того, существуют ОС, которые в классическом понимании, полностью основаны на базе JVM.
Что делает JVM похожим на ОС? Управление памятью, управление потоками, развитый ввод / вывод, обобщенная философия объектов. Благодаря этим возможностям она позволяет создавать многозадачные и комплексные системы. Это я еще не упоминал механизм байт-кода, который крутит Java код на любом процессоре.
Конечно, JVM не идеальна. Программы на С++ куда быстрее выполняются да и ООП систему, на которой вся Java держится, часто критикуют.
Одинаково Java и JVM остаются одними из лучших инструментов в программировании.
Fortran живой. И всегда будет.
Если вы не знаете, что это за язык, то вы вполне нормальный разработчик, или студент, который никогда не имел дел с физическими расчетами, документацией прошлого тысячелетия и расчетом волновой функции линейного гармонического квантового осциллятора в состоянии с квантовым числом, чтобы оно не значило😅
Безусловно, Junior Frontend Developer никогда не писал на Fortran и в этом он точно не нуждается. Это игрушка для физиков и инженеров. Хотя, хороший инструмент будет полезен в умелых руках.
Особенностей в Fortan - четыре. Чрезвычайно огромная библиотека, которую до сих пор не перевели на С. Древний legacy code, еще с 50-х годов. Невероятная точность в расчетах. Быстродействие, которое, в некоторых случаях, обгоняет С.
Комплексные числа, вся вкуснятина с графиками, которая есть в Matlab. Удобная обработка массивов, которая позволяет умножать их на скаляр, перемножать интуитивным способом, использовать математические функции. Можно взять экспоненту из массива. Обнулять все отрицательные элементы массива в одну строку. Мечты студента, который пишет свои лабораторные на C-подобных языках.
Не надо беспокоиться о выделении памяти, компилятор оптимизирует все сам.
С помощью Fortran до сих пор тестируют суперкомпьютеры.
Если вам нужен качественный инструмент в сложных расчетах, это определенно Fortran.
Если вы не знаете, что это за язык, то вы вполне нормальный разработчик, или студент, который никогда не имел дел с физическими расчетами, документацией прошлого тысячелетия и расчетом волновой функции линейного гармонического квантового осциллятора в состоянии с квантовым числом, чтобы оно не значило😅
Безусловно, Junior Frontend Developer никогда не писал на Fortran и в этом он точно не нуждается. Это игрушка для физиков и инженеров. Хотя, хороший инструмент будет полезен в умелых руках.
Особенностей в Fortan - четыре. Чрезвычайно огромная библиотека, которую до сих пор не перевели на С. Древний legacy code, еще с 50-х годов. Невероятная точность в расчетах. Быстродействие, которое, в некоторых случаях, обгоняет С.
Комплексные числа, вся вкуснятина с графиками, которая есть в Matlab. Удобная обработка массивов, которая позволяет умножать их на скаляр, перемножать интуитивным способом, использовать математические функции. Можно взять экспоненту из массива. Обнулять все отрицательные элементы массива в одну строку. Мечты студента, который пишет свои лабораторные на C-подобных языках.
Не надо беспокоиться о выделении памяти, компилятор оптимизирует все сам.
С помощью Fortran до сих пор тестируют суперкомпьютеры.
Если вам нужен качественный инструмент в сложных расчетах, это определенно Fortran.
#java
Почему класс String объявлен final в Java?
Очень полезно иметь строки реализованы как независимые объекты.
Если строка не была окончательной, вы могли бы создать подкласс и иметь две строки, которые выглядят одинаково, когда "рассматриваются как строки", но на самом деле они разные.
Также неизменные данные очень полезны для обеспечения потокобезопасности.
Почему класс String объявлен final в Java?
Очень полезно иметь строки реализованы как независимые объекты.
Если строка не была окончательной, вы могли бы создать подкласс и иметь две строки, которые выглядят одинаково, когда "рассматриваются как строки", но на самом деле они разные.
Также неизменные данные очень полезны для обеспечения потокобезопасности.
#python
Правые методы в Python
Еще одна особенность классов в Python-правые магические методы. Они начинаются префикса r, например: radd, rsub
Эти методы вызываются для правого операнда, когда метод левого операнда не переопределен.
Если мы просуммируем a + b, то Python попытается сделать a.add(b), если метод add не переопределен, то вызовется метод b.radd(a), если radd не переопределен, то выбросится ошибка.
Правые методы в Python
Еще одна особенность классов в Python-правые магические методы. Они начинаются префикса r, например: radd, rsub
Эти методы вызываются для правого операнда, когда метод левого операнда не переопределен.
Если мы просуммируем a + b, то Python попытается сделать a.add(b), если метод add не переопределен, то вызовется метод b.radd(a), если radd не переопределен, то выбросится ошибка.
#java
Преобразование типов в Java.
Вы не можете поместить большое значение в маленькую "чашку".
Честно говоря, это можно сделать, но тогда кое-что потеряется. Произойдет своего рода переполнение. Компилятор попытается предотвратить такую ситуацию, если увидит, что в вашем коде есть какая-то сущность не вмещается в контейнер (переменную/чашку), который вы используете.
Например, вы не можете "залить" значение типа int в контейнер размера byte, как показано ниже.
int x = 24;
byte b = x;
// Не сработает!
Вы просите, почему это не сработает? Значение x равно 24, значит, оно полностью совместимо с типом byte. Да, логично, но компилятора волнует только тот факт, что вы пытаетесь поместить большую сущность в маленькую, из-за чего может произойти переполнение, а то есть, потеря ваших данных. Не надейтесь что компилятор будет знать значение переменной x, даже если вы прямо указали его в своем коде.
Для этого вы указываете компилятору, что хотите привести x(int) к byte, то есть, сделать из большой чашки, маленькую.
int x = 20;
byte b = (byte) x;
(byte) x - из большой чашки делаем маленькую.
// Сработает
И теперь наоборот, если у нас есть большая чашка, маленькую чашку в большую мы положим без проблем.
byte b = 121;
int x = b;
// Сработает
Преобразование типов в Java.
Вы не можете поместить большое значение в маленькую "чашку".
Честно говоря, это можно сделать, но тогда кое-что потеряется. Произойдет своего рода переполнение. Компилятор попытается предотвратить такую ситуацию, если увидит, что в вашем коде есть какая-то сущность не вмещается в контейнер (переменную/чашку), который вы используете.
Например, вы не можете "залить" значение типа int в контейнер размера byte, как показано ниже.
int x = 24;
byte b = x;
// Не сработает!
Вы просите, почему это не сработает? Значение x равно 24, значит, оно полностью совместимо с типом byte. Да, логично, но компилятора волнует только тот факт, что вы пытаетесь поместить большую сущность в маленькую, из-за чего может произойти переполнение, а то есть, потеря ваших данных. Не надейтесь что компилятор будет знать значение переменной x, даже если вы прямо указали его в своем коде.
Для этого вы указываете компилятору, что хотите привести x(int) к byte, то есть, сделать из большой чашки, маленькую.
int x = 20;
byte b = (byte) x;
(byte) x - из большой чашки делаем маленькую.
// Сработает
И теперь наоборот, если у нас есть большая чашка, маленькую чашку в большую мы положим без проблем.
byte b = 121;
int x = b;
// Сработает
#java
Деструкторы в Java.
На самом деле в Java нет деструкторов. Они там не нужны, ведь всю грязную работу делает Garbage Collection.
Нет необходимости очищать память вручную, но что делать, если нам нужен метод, который сообщает разработчикам об удалении экземпляра класса из памяти? Существует унаследованный метод finalize, который вызывается сборщиком мусора. Таким образом, для классов, которые надо привести в порядок, появляется метод close и используется finalize.
Когда приложение завершает работу, JVM останавливается, не дожидаясь завершения ожидающих завершения объектов, поэтому практически нет никаких гарантий, что ваши финализаторы когда-либо будут запущены.
Деструкторы в Java.
На самом деле в Java нет деструкторов. Они там не нужны, ведь всю грязную работу делает Garbage Collection.
Нет необходимости очищать память вручную, но что делать, если нам нужен метод, который сообщает разработчикам об удалении экземпляра класса из памяти? Существует унаследованный метод finalize, который вызывается сборщиком мусора. Таким образом, для классов, которые надо привести в порядок, появляется метод close и используется finalize.
Когда приложение завершает работу, JVM останавливается, не дожидаясь завершения ожидающих завершения объектов, поэтому практически нет никаких гарантий, что ваши финализаторы когда-либо будут запущены.
Из каких переменных может состоять класс?
Anonymous Quiz
21%
A - Переменные класса, переменные экземпляра
52%
B - Переменные класса, локальные переменные, переменные экземпляра
17%
C - Переменные класса
10%
D - Переменные класса, локальные переменыне
#java
ArrayList
Массив ArrayList представляет собой структуру данных, которая динамически расширяется под нужное количество элементов.
Списочный массив подобен эластичной резинке, обычный же массив, как канат: его длина фиксированная.
ArrayList<Object> array = new ArrayList<Object>();
Основные методы:
ArrayList
Массив ArrayList представляет собой структуру данных, которая динамически расширяется под нужное количество элементов.
Списочный массив подобен эластичной резинке, обычный же массив, как канат: его длина фиксированная.
ArrayList<Object> array = new ArrayList<Object>();
Основные методы:
add(Object o)
- используется для добавления элементов в Array List. Если ArrayList уже содержит элементы и методу не передается начальный индекс, то новые добавляются после последнего элемента.remove(Object o)
- удаляет определенный элемент из массива.size()
- возвращает количество элементов в массиве Array List.contains(Object o)
- этот метод вернет значение true, если массив содержит указанный элемент.get(int index)
- используется для получения элемента указанного индекса в списке.set(int index, Object o)
- обновляет(заменяет) элемент указанного индекса указанным элементом.indefOf(Object o)
- используется для определения индекса конкретного элемента в списке.trimToSize()
- cокращает емкость списочного массива до его текущего размера (При создании списочного массива, вы можете изначально задать размер, к примеру, 100 элементов, но если вы и близко не используете его полноценный размер, вы сокращаете его вместительность до количества элементов, находящихся в списке. Это нужно для уменьшения расхода памяти).#front_end
Web Assembly и что это?
Есть старая проблема, которую довольно давно пробуют решить веб-разработчики. И проблема эта - как быстро выполнять код в браузере?
Wasm - это, если очень просто, виртуальная машина, которая позволяет выполнять в браузере код языка высокого уровня. По принципу работы она похожа на JVM. То есть да, благодаря этой технологии можно написать Front end и на Python, и на Java. За ваши вкусы осуждать не буду.
Wasm запускается и загружается из JS. Может вызвать только JS. Это скорее не автономная среда, а API, зависимый от JS.
Сейчас поддерживается основными браузерами: Chrome, Firefox, Safari, MS Edge. Internet Explorer обошли стороной.
Основной плюс Wasm - это, безусловно, производительность. В основном Wasm в несколько раз быстрее JS, но для каждого отдельного случая нужно делать сравнения, ведь это свежая технология.
Теперь вы можете написать Front End на языке Brainfuck. Наслаждайтесь.
Web Assembly и что это?
Есть старая проблема, которую довольно давно пробуют решить веб-разработчики. И проблема эта - как быстро выполнять код в браузере?
Wasm - это, если очень просто, виртуальная машина, которая позволяет выполнять в браузере код языка высокого уровня. По принципу работы она похожа на JVM. То есть да, благодаря этой технологии можно написать Front end и на Python, и на Java. За ваши вкусы осуждать не буду.
Wasm запускается и загружается из JS. Может вызвать только JS. Это скорее не автономная среда, а API, зависимый от JS.
Сейчас поддерживается основными браузерами: Chrome, Firefox, Safari, MS Edge. Internet Explorer обошли стороной.
Основной плюс Wasm - это, безусловно, производительность. В основном Wasm в несколько раз быстрее JS, но для каждого отдельного случая нужно делать сравнения, ведь это свежая технология.
Теперь вы можете написать Front End на языке Brainfuck. Наслаждайтесь.
Какой из них допускает дублирование элементов?
Anonymous Quiz
63%
List
19%
Set
10%
Все
8%
Ни один из вышеперечисленных
#python
Почему в Python нет операторов ++ и -- ?
Если вы действительно хотите знать причину, то придется читать древние, как документации COBOL, форумы Python разработчиков.
Как пишут благородные питонисты: "Простые инкременты и декременты не так нужны, как в других языках. Вы не очень часто пишете такие вещи, как for(int i = 0; i < 10; ++i) в Python; вместо этого вы делаете такие вещи, как for i in range(0, 10) ". То есть нет необходимости прописывать итерацию в циклах.
Есть ли такая необходимость добавить унарные операторы инкрементации и декрементации? Помните, что это целых четыре оператора (два инкремента и два декремента), каждый из которых должен иметь собственную перегрузку класса, которая тормозит VM.
Эти операторы просто избыточны и ненужны в пайтон, когда можно использовать += и -=.
Keep it simple.
Почему в Python нет операторов ++ и -- ?
Если вы действительно хотите знать причину, то придется читать древние, как документации COBOL, форумы Python разработчиков.
Как пишут благородные питонисты: "Простые инкременты и декременты не так нужны, как в других языках. Вы не очень часто пишете такие вещи, как for(int i = 0; i < 10; ++i) в Python; вместо этого вы делаете такие вещи, как for i in range(0, 10) ". То есть нет необходимости прописывать итерацию в циклах.
Есть ли такая необходимость добавить унарные операторы инкрементации и декрементации? Помните, что это целых четыре оператора (два инкремента и два декремента), каждый из которых должен иметь собственную перегрузку класса, которая тормозит VM.
Эти операторы просто избыточны и ненужны в пайтон, когда можно использовать += и -=.
Keep it simple.