Нужны ли нам факты недели и цитаты с биографиями?🧐
Anonymous Poll
53%
Да, без сомнения это полезно и интересно.
24%
Не знаю, мне безразлично.
24%
Нет не нужны, ерунда какая-то
Почему все-таки программирование?
(немного еженедельной мотивации на моем примере)
Мне, без года 40-летнему человеку, по теории, должно было быть сложно менять профессию.
Тем более, я уже успел получить несколько других и добиться в них немалого успеха.
Так почему же я решился на такую авантюру? (а по другому, мои родные это не называли😂 )
Вот некоторые из тех принципов, которые определили пройденный путь:
1. Успех в определенной профессии != достойной зарплате и условиям труда🫰 .
Поработав в разных сферах и в разных условиях, посмотрев как трудятся люди разных профессий, начинаешь понимать ценность спокойной, "удаленной" работы и достойного, денежного эквивалента этого труда. ☝️
2. Развитие и перспективы в обозримом будущем🏝 .
По моему скромному мнению, пределов развития и так называемого "потолка", у человека выбравшего программирование - нет. Вот нет и все. Кто готов поспорить - жду в комментариях🤓
А есть лишь естественные причины - физические ограничения и ЛЕНЬ.😵
А это значит, что пока руки поднимаются - опускать их мимо клавиатуры, противоестественно!💪
3. Неугасаемый интерес к процессу созидания (написанию кода)🧑💻 .
Один из мощнейших, мотивационных принципов для меня.
Ведь, что может быть прекраснее, чем наблюдать как созданный тобой корабль (условно, конечно же), держится и продолжает плыть в самом современном море, которое еще не исследовано до конца?⛵️
Все это, в совокупности, перевесило мое нежелание (или инерцию мышления и жизни) изучать программирование.
И даже когда (очень часто, столкнувшись с нерешаемой задачей😭 ) мне казалось, что я сделал опрометчиво-глупый выбор - эти принципы помогали преодолеть сомнения (и конечно же задачу, потому что нерешаемых задач НЕТ 💪 ).
😎
#motivation
(немного еженедельной мотивации на моем примере)
Мне, без года 40-летнему человеку, по теории, должно было быть сложно менять профессию.
Тем более, я уже успел получить несколько других и добиться в них немалого успеха.
Так почему же я решился на такую авантюру? (а по другому, мои родные это не называли
Вот некоторые из тех принципов, которые определили пройденный путь:
1. Успех в определенной профессии != достойной зарплате и условиям труда
Поработав в разных сферах и в разных условиях, посмотрев как трудятся люди разных профессий, начинаешь понимать ценность спокойной, "удаленной" работы и достойного, денежного эквивалента этого труда. ☝️
2. Развитие и перспективы в обозримом будущем
По моему скромному мнению, пределов развития и так называемого "потолка", у человека выбравшего программирование - нет. Вот нет и все. Кто готов поспорить - жду в комментариях
А есть лишь естественные причины - физические ограничения и ЛЕНЬ.
А это значит, что пока руки поднимаются - опускать их мимо клавиатуры, противоестественно!
3. Неугасаемый интерес к процессу созидания (написанию кода)
Один из мощнейших, мотивационных принципов для меня.
Ведь, что может быть прекраснее, чем наблюдать как созданный тобой корабль (условно, конечно же), держится и продолжает плыть в самом современном море, которое еще не исследовано до конца?
Все это, в совокупности, перевесило мое нежелание (или инерцию мышления и жизни) изучать программирование.
И даже когда (очень часто, столкнувшись с нерешаемой задачей
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
А нужны ли нам воскресные встречи? 🤓
Что удобнее, смотреть смонтированные видео или лайв-кодинг с непосредственным участием?
Что удобнее, смотреть смонтированные видео или лайв-кодинг с непосредственным участием?
Anonymous Poll
42%
Встречи по-любому нужны. Это очень круто посмотреть как вживую пишут код и задать вопросы. 🧑💻
15%
Встречи нужны, но нужно изменить время. Неудобно. 🎶
23%
Мне все равно. Я всегда смотрю только запись. 😋
12%
Смонтированное видео лучше! Оно короче и не приходится проматывать как ищут решение ошибок! 🥵
8%
Вообще ничего не надо! Прекратите болтать че попало в прямом эфире. Админ иди учись! 🤷♀️
Please open Telegram to view this post
VIEW IN TELEGRAM
Еще раз всем привет.
После всех размышлений про то, как и какого уровня публиковать посты, я пришел к решению, что буду писать 1, редко два, обучающих поста в день.
Почему так?
Сейчас, я активно перерабатываю структуру тем, для обучения Java с самого нуля.
В ходе переработки я поймал мысль, что в спешке получения оффера, я недостаточно глубоко изучил основы языка. Как, к примеру происходит работа с памятью, JVM, какие процессы происходят, скрытые, но необходимые для полного понимания разработки.
Поэтому, посты будут выходить поочередно, о темах связанных с основами Java и темах middle+, с изучением новых технологий.
При этом в постах о основах Java я постараюсь рассмотреть тему настолько глубоко, насколько это вообще возможно. Это даст необходимые знания для новичков и наверняка будет интересно и более опытным разработчикам.
Ну и обещая ввести новую рубрику, давайте начнем прямо сегодня.
Ждите поста ниже!
После всех размышлений про то, как и какого уровня публиковать посты, я пришел к решению, что буду писать 1, редко два, обучающих поста в день.
Почему так?
Сейчас, я активно перерабатываю структуру тем, для обучения Java с самого нуля.
В ходе переработки я поймал мысль, что в спешке получения оффера, я недостаточно глубоко изучил основы языка. Как, к примеру происходит работа с памятью, JVM, какие процессы происходят, скрытые, но необходимые для полного понимания разработки.
Поэтому, посты будут выходить поочередно, о темах связанных с основами Java и темах middle+, с изучением новых технологий.
При этом в постах о основах Java я постараюсь рассмотреть тему настолько глубоко, насколько это вообще возможно. Это даст необходимые знания для новичков и наверняка будет интересно и более опытным разработчикам.
Ну и обещая ввести новую рубрику, давайте начнем прямо сегодня.
Ждите поста ниже!
Новая рубрика! ✈️
Предложение тем для разбора и публикации!📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
🟢 1 вопрос - от одного участника.
🟢 темы, не выше уровня middle, чтоб был интерес общим.
Жду Ваших предложений!👏
Предложение тем для разбора и публикации!
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.
Примерные правила:
Жду Ваших предложений!
Please open Telegram to view this post
VIEW IN TELEGRAM
Примитивные типы данных в Java
Примитивные типы данных в Java представляют собой фундаментальные элементы языка, разработанные для обеспечения высокой производительности, компактного представления в памяти и эффективного взаимодействия с аппаратным обеспечением.
1. Философия проектирования
При разработке Java было принято решение о введении примитивных типов как части ядра языка, несмотря на общий объектно-ориентированный подход.
Это обусловлено несколькими причинами:
Минимизация накладных расходов. Объекты требуют размещения в куче, участия в сборке мусора и хранения служебной информации. Использование объектов для представления простых значений, таких как числа или логические флаги, приводит к неоправданным издержкам по памяти и времени выполнения.
Предсказуемость поведения. Размеры всех примитивных типов жёстко заданы и не зависят от платформы. Например, тип int всегда занимает 32 бита, в отличие от языков вроде C/C++, где размер целого числа может варьироваться в зависимости от архитектуры.
Соответствие аппаратному уровню. Примитивы напрямую сопоставимы с регистрами процессора и машинными инструкциями. Это обеспечивает аппаратное ускорение вычислений и минимальные издержки при выполнении арифметических операций.
2. Низкоуровневое представление
Каждый примитивный тип в Java представлен последовательностью битов и интерпретируется согласно определённой модели:
Целочисленные типы (byte, short, int, long) хранятся в представлении с дополнительным кодом (two’s complement). Это обеспечивает корректную работу с отрицательными значениями.
Типы с плавающей точкой (float, double) соответствуют стандарту IEEE 754.
Символьный тип (char) реализован как 16-битное беззнаковое значение.
Логический тип (boolean) не имеет фиксированного размера, но часто реализуется как int.
3. Размещение в памяти и управление временем жизни
Примитивные переменные в Java хранятся по-разному в зависимости от контекста:
Локальные переменные методов размещаются в стеке вызовов.
Поля объектов хранятся непосредственно в их структуре в куче.
4. Механизмы выполнения в JVM
Для каждого примитива в спецификации JVM предусмотрены специализированные инструкции байт-кода.
Примитивы не участвуют в иерархии наследования, не реализуют интерфейсы и не имеют методов.
5. Обёртки и автоупаковка
Для интеграции примитивов в объектную модель Java были введены соответствующие классы-обёртки:
Нужно учитывать возможные проблемы:
6. Ограничения примитивов
Примитивы нельзя использовать напрямую в обобщённых коллекциях.
Сравнение обёрток может вести к неожиданным результатам:
Производительность может снижаться из-за постоянной упаковки/распаковки:
#Java #для_новичков #beginner #primitive_types
Примитивные типы данных в Java представляют собой фундаментальные элементы языка, разработанные для обеспечения высокой производительности, компактного представления в памяти и эффективного взаимодействия с аппаратным обеспечением.
1. Философия проектирования
При разработке Java было принято решение о введении примитивных типов как части ядра языка, несмотря на общий объектно-ориентированный подход.
Это обусловлено несколькими причинами:
Минимизация накладных расходов. Объекты требуют размещения в куче, участия в сборке мусора и хранения служебной информации. Использование объектов для представления простых значений, таких как числа или логические флаги, приводит к неоправданным издержкам по памяти и времени выполнения.
int x = 42; // примитив, 4 байта
Integer y = Integer.valueOf(42); // объект, ~16+ байт
Предсказуемость поведения. Размеры всех примитивных типов жёстко заданы и не зависят от платформы. Например, тип int всегда занимает 32 бита, в отличие от языков вроде C/C++, где размер целого числа может варьироваться в зависимости от архитектуры.
System.out.println(Integer.SIZE); // 32 — всегда
Соответствие аппаратному уровню. Примитивы напрямую сопоставимы с регистрами процессора и машинными инструкциями. Это обеспечивает аппаратное ускорение вычислений и минимальные издержки при выполнении арифметических операций.
int sum = a + b; // напрямую транслируется в инструкцию iadd в JVM
2. Низкоуровневое представление
Каждый примитивный тип в Java представлен последовательностью битов и интерпретируется согласно определённой модели:
Целочисленные типы (byte, short, int, long) хранятся в представлении с дополнительным кодом (two’s complement). Это обеспечивает корректную работу с отрицательными значениями.
int a = -1;
System.out.println(Integer.toBinaryString(a)); // 11111111111111111111111111111111
Типы с плавающей точкой (float, double) соответствуют стандарту IEEE 754.
double d = 3.14;
System.out.println(Double.toHexString(d)); // 0x1.91eb851eb851fp1
Символьный тип (char) реализован как 16-битное беззнаковое значение.
char ch = 'Ж';
System.out.println((int) ch); // 1046 — Unicode-код символа
Логический тип (boolean) не имеет фиксированного размера, но часто реализуется как int.
boolean flag = true;
if (flag) {
System.out.println("Включено");
}
3. Размещение в памяти и управление временем жизни
Примитивные переменные в Java хранятся по-разному в зависимости от контекста:
Локальные переменные методов размещаются в стеке вызовов.
void compute() {
int localCounter = 0; // хранится в стеке
}
Поля объектов хранятся непосредственно в их структуре в куче.
class Data {
int x = 10; // хранится в объекте в куче
}
4. Механизмы выполнения в JVM
Для каждого примитива в спецификации JVM предусмотрены специализированные инструкции байт-кода.
int x = 2, y = 3;
int result = x * y; // используется imul в байт-коде
Примитивы не участвуют в иерархии наследования, не реализуют интерфейсы и не имеют методов.
int a = 5;
// a.compareTo(3); // ошибка компиляции — у int нет методов
5. Обёртки и автоупаковка
Для интеграции примитивов в объектную модель Java были введены соответствующие классы-обёртки:
Integer wrapped = 42; // автоупаковка
int raw = wrapped; // автораспаковка
Нужно учитывать возможные проблемы:
Integer i = null;
// int val = i; // NullPointerException при распаковке
6. Ограничения примитивов
Примитивы нельзя использовать напрямую в обобщённых коллекциях.
List<Integer> list = new ArrayList<>();
list.add(10); // автоматическая упаковка int → Integer
Сравнение обёрток может вести к неожиданным результатам:
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true (значения до 127 хранятся в кэше)
Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false (разные объекты)
Производительность может снижаться из-за постоянной упаковки/распаковки:
for (int i = 0; i < 1000; i++) {
list.add(i); // создаётся 1000 объектов Integer
}
#Java #для_новичков #beginner #primitive_types
Что выведет код?
#Tasks
public class Task120525 {
public static void main(String[] args) {
byte a = 100;
byte b = 30;
byte c = (byte) (a + b);
System.out.println(c);
}
}
#Tasks
Напоминаю!
Вы еще можете предложить тему к рассмотрению - https://t.me/Java_for_beginner_dev/2310
Пишите, потом выберем лучшее)
Вы еще можете предложить тему к рассмотрению - https://t.me/Java_for_beginner_dev/2310
Пишите, потом выберем лучшее)
Telegram
Java for Beginner
Новая рубрика! ✈️
Предложение тем для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться…
Предложение тем для разбора и публикации! 📖
В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.
Голосование будет проводиться…
Gson: основы сериализации и десериализации
1. Что такое Gson и зачем он нужен
Gson — это библиотека от Google для работы с JSON в Java.
Она позволяет:
Преобразовывать Java-объекты в JSON (сериализация).
Восстанавливать Java-объекты из JSON (десериализация).
Почему Gson?
Простота: минимум кода для работы.
Мощность: поддержка сложных структур (коллекции, вложенные объекты, generics).
Нет зависимостей: работает без дополнительных библиотек.
Пример JSON и его Java-представление
Допустим, у нас есть JSON:
Ему соответствует Java-класс:
Подключение Gson
Через Maven (добавить в pom.xml):
Через Gradle (добавить в build.gradle):
2. Простая сериализация Java-объекта в JSON
Создание POJO
POJO (Plain Old Java Object) — простой Java-класс с полями, конструктором и геттерами/сеттерами.
Пример:
Сериализация с помощью Gson.toJson()
Создаем объект Gson:
Сериализуем объект в JSON-строку:
Выводим результат:
Результат:
Как это работает?
Gson рефлективно анализирует поля класса.
Имена полей становятся ключами JSON.
Примитивы (int, boolean), строки (String) и числа с плавающей точкой (double) преобразуются в соответствующие JSON-типы.
Полный пример кода
Вывод:
Важные замечания
Поля должны быть private (или иметь геттеры).
Поля со значением null не включаются в JSON (если не настроено иначе).
Gson автоматически обрабатывает вложенные объекты и коллекции.
#Java #middle #Gson
1. Что такое Gson и зачем он нужен
Gson — это библиотека от Google для работы с JSON в Java.
Она позволяет:
Преобразовывать Java-объекты в JSON (сериализация).
Восстанавливать Java-объекты из JSON (десериализация).
Почему Gson?
Простота: минимум кода для работы.
Мощность: поддержка сложных структур (коллекции, вложенные объекты, generics).
Нет зависимостей: работает без дополнительных библиотек.
Пример JSON и его Java-представление
Допустим, у нас есть JSON:
{
"name": "John",
"age": 30,
"isDeveloper": true
}
Ему соответствует Java-класс:
public class Person {
private String name;
private int age;
private boolean isDeveloper;
// Конструктор, геттеры и сеттеры (обязательны для корректной работы)
public Person(String name, int age, boolean isDeveloper) {
this.name = name;
this.age = age;
this.isDeveloper = isDeveloper;
}
// Геттеры и сеттеры (опущены для краткости, но должны быть)
}
Подключение Gson
Через Maven (добавить в pom.xml):
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- Актуальная версия на момент 2025 года -->
</dependency>
Через Gradle (добавить в build.gradle):
implementation 'com.google.code.gson:gson:2.10.1'
2. Простая сериализация Java-объекта в JSON
Создание POJO
POJO (Plain Old Java Object) — простой Java-класс с полями, конструктором и геттерами/сеттерами.
Пример:
public class Book {
private String title;
private String author;
private double price;
public Book(String title, String author, double price) {
this.title = title;
this.author = author;
this.price = price;
}
// Геттеры (обязательны для сериализации)
public String getTitle() { return title; }
public String getAuthor() { return author; }
public double getPrice() { return price; }
}
Сериализация с помощью Gson.toJson()
Создаем объект Gson:
Gson gson = new Gson();
Сериализуем объект в JSON-строку:
Book book = new Book("Clean Code", "Robert Martin", 29.99);
String json = gson.toJson(book);
Выводим результат:
System.out.println(json);
Результат:
{"title":"Clean Code","author":"Robert Martin","price":29.99}
Как это работает?
Gson рефлективно анализирует поля класса.
Имена полей становятся ключами JSON.
Примитивы (int, boolean), строки (String) и числа с плавающей точкой (double) преобразуются в соответствующие JSON-типы.
Полный пример кода
import com.google.gson.Gson;
public class Main {
public static void main(String[] args) {
// Создаем объект
Book book = new Book("Clean Code", "Robert Martin", 29.99);
// Сериализуем в JSON
Gson gson = new Gson();
String json = gson.toJson(book);
// Выводим JSON
System.out.println(json);
}
}
Вывод:
{"title":"Clean Code","author":"Robert Martin","price":29.99}
Важные замечания
Поля должны быть private (или иметь геттеры).
Поля со значением null не включаются в JSON (если не настроено иначе).
Gson автоматически обрабатывает вложенные объекты и коллекции.
#Java #middle #Gson
Что выведет код?
#Tasks
public class Task130525 {
public static void main(String[] args) {
String s = "123abc";
int num = Integer.parseInt(s);
System.out.println(num);
}
}
#Tasks