Всем субботний, солнечный привет! ✌️
Целую неделю я думал над итогами опроса о канале.
На основные вопросы - почему новые подписчики приходят и потом уходят, почему имеющиеся поставили канал на заглушку и не читают его - напрашиваются вполне очевидные выводы:
- Не смотря на то, что канал называется Java для новичков, рассматриваемые темы давно ушли за мидловский предел.
- Нет внятного оглавления для поиска интересующей информации для разных грейдов.
- Объемные и подробные посты, неудобно читать к примеру с телефона.
- Сухость и формализм обучающих постов, полезны, но не интересны для новичков.
- Количество ежедневных постов, большинство скорее отталкивает, чем привлекает.
Основываясь на этих проблемах, с которыми Вы возможно согласны, я решил:
- Пересмотреть объем и частоту обучающих постов. Теперь когда в нашем оглавлении, есть практически весь Java Core, можно сконцентрироваться на изучении более точечных и новых технологий новых версий Java, библиотек и фреймворков.
- Ежедневно возвращаться и более обстоятельно рассматривать темы для новичков, но в более популярном формате.
- Полностью переработать оглавление, чтобы человеку любого грейда было легко найти интересующую тему, которая рассматривалась в канале.
- Добавить немного авторского мнения и разбора некоторых моментов в разработке.
- Дать возможность новичкам выбирать темы для разбора - путем выбора и голосования.
Что скажете на такие предложения?🤓
Целую неделю я думал над итогами опроса о канале.
На основные вопросы - почему новые подписчики приходят и потом уходят, почему имеющиеся поставили канал на заглушку и не читают его - напрашиваются вполне очевидные выводы:
- Не смотря на то, что канал называется Java для новичков, рассматриваемые темы давно ушли за мидловский предел.
- Нет внятного оглавления для поиска интересующей информации для разных грейдов.
- Объемные и подробные посты, неудобно читать к примеру с телефона.
- Сухость и формализм обучающих постов, полезны, но не интересны для новичков.
- Количество ежедневных постов, большинство скорее отталкивает, чем привлекает.
Основываясь на этих проблемах, с которыми Вы возможно согласны, я решил:
- Пересмотреть объем и частоту обучающих постов. Теперь когда в нашем оглавлении, есть практически весь Java Core, можно сконцентрироваться на изучении более точечных и новых технологий новых версий Java, библиотек и фреймворков.
- Ежедневно возвращаться и более обстоятельно рассматривать темы для новичков, но в более популярном формате.
- Полностью переработать оглавление, чтобы человеку любого грейда было легко найти интересующую тему, которая рассматривалась в канале.
- Добавить немного авторского мнения и разбора некоторых моментов в разработке.
- Дать возможность новичкам выбирать темы для разбора - путем выбора и голосования.
Что скажете на такие предложения?
Please open Telegram to view this post
VIEW IN TELEGRAM
А нужны ли вообще обучающие посты? Ведь можно делиться ссылками на страницы в интернете, там все есть😕
Anonymous Poll
71%
Нужны! Мне нравится текущая подача и подробность материала.
3%
Нужны, но в еще более развернутом варианте
19%
Нужны, но в минималистичном стиле, возможно с ссылками на развернутые материалы
0%
Не нужны. Давай ссылки и все, дальше сами разберемся
6%
Мне без разницы
Анонсирую новую рубрику!
Теперь по субботам я буду публиковать ссылки на материалы которые Вы, возможно пропустили за неделю!
Итак:
С 05.05 по 09.05
Jackson: Ключевые аннотации для сериализации
Jackson: Аннотации Jackson для десериализации и изменения структуры JSON
Jackson: работа со списками, картами и вложенными объектами
Jackson: кастомные десериализаторы
Jackson: глобальная настройка ObjectMapper: как управлять сериализацией и десериализацией
Использование модулей в Jackson: JavaTimeModule и работа с Java 8 датами
Jackson: частичная сериализация с помощью @JsonView
Jackson: Tree Model и Streaming API в Jackson: когда нужна гибкость и производительность
Полезная статья: Программирование без условных операторов
Как и всегда, задачи можно найти под тегом - #Tasks, мемы - #Mems
#memory
Теперь по субботам я буду публиковать ссылки на материалы которые Вы, возможно пропустили за неделю!
Итак:
С 05.05 по 09.05
Jackson: Ключевые аннотации для сериализации
Jackson: Аннотации Jackson для десериализации и изменения структуры JSON
Jackson: работа со списками, картами и вложенными объектами
Jackson: кастомные десериализаторы
Jackson: глобальная настройка ObjectMapper: как управлять сериализацией и десериализацией
Использование модулей в Jackson: JavaTimeModule и работа с Java 8 датами
Jackson: частичная сериализация с помощью @JsonView
Jackson: Tree Model и Streaming API в Jackson: когда нужна гибкость и производительность
Полезная статья: Программирование без условных операторов
Как и всегда, задачи можно найти под тегом - #Tasks, мемы - #Mems
#memory
Нужны ли нам посты для полных новичков в Java, по типу: Как запустить IDEA, как создать первый класс и так далее?
Anonymous Poll
20%
Да, несомненно! 👍
15%
Да, наверно.. 🤷♀️
43%
Не знаю. Мне точно не нужны ☺️
22%
Нет не нужны, в интернете много информации, пусть учатся гуглить 🖕
Нужны ли нам факты недели и цитаты с биографиями?🧐
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