Путь данных от heap до диска
Запись через
Уровень 1: Массив в heap JVM
Java-код подготавливает данные в массиве
Уровень 2: Системный вызов write()
Вызов
Уровень 3: Страничный кэш и dirty pages
Данные не записываются на диск немедленно. Ядро ОС помещает их в страничный кэш, помечая соответствующие страницы как dirty (измененные). Фоновые потоки ядра (pdflush на Linux, buffer cache flush на других системах) периодически синхронизируют dirty pages с блочным устройством. Это называется write-back caching и является стандартной стратегией для файловых систем.
Параметр
Уровень 4: Физическая запись на диск
Контроллер диска (SSD или HDD) получает команды записи от драйвера файловой системы. Для SSD контроллер выполняет wear leveling, распределяя записи равномерно по ячейкам флеш-памяти для продления срока службы. Для HDD головки позиционируются над нужными дорожками. Этот уровень полностью вне контроля JVM и ОС — он управляется прошивкой устройства.
#Java #для_новичков #beginner #IO #NIO #FileOutputStream
Запись через
FileOutputStream проходит через те же уровни памяти, что и чтение, но в обратном направлении:Уровень 1: Массив в heap JVM
Java-код подготавливает данные в массиве
byte[], расположенном в heap. Это обычный объект, управляемый garbage collector.String text = "Hello, World!";
byte[] data = text.getBytes(StandardCharsets.UTF_8);
// data — массив в heap, содержит байты UTF-8: 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21
Уровень 2: Системный вызов write()
Вызов
fos.write(data) инициирует цепочку: нативный метод writeBytes() в FileOutputStream.c вызывает IO_Write, который оборачивает write(fd, buf, len).// Путь данных для write(byte[]):
// 1. byte[] в heap JVM
// 2. Копирование в нативный буфер (JNI transition)
// 3. Системный вызов write() — данные попадают в page cache ядра
// 4. Ядро помечает страницы как dirty (грязные)
// 5. Асинхронная запись dirty-страниц на диск фоновыми потоками ядра
Уровень 3: Страничный кэш и dirty pages
Данные не записываются на диск немедленно. Ядро ОС помещает их в страничный кэш, помечая соответствующие страницы как dirty (измененные). Фоновые потоки ядра (pdflush на Linux, buffer cache flush на других системах) периодически синхронизируют dirty pages с блочным устройством. Это называется write-back caching и является стандартной стратегией для файловых систем.
Параметр
vm.dirty_ratio в Linux определяет, при каком проценте занятой памяти dirty pages начинается агрессивная запись на диск. Параметр vm.dirty_expire_centisecs — через какое время dirty page считается устаревшей и подлежит сбросу.Уровень 4: Физическая запись на диск
Контроллер диска (SSD или HDD) получает команды записи от драйвера файловой системы. Для SSD контроллер выполняет wear leveling, распределяя записи равномерно по ячейкам флеш-памяти для продления срока службы. Для HDD головки позиционируются над нужными дорожками. Этот уровень полностью вне контроля JVM и ОС — он управляется прошивкой устройства.
#Java #для_новичков #beginner #IO #NIO #FileOutputStream
👍4
Роль flush() и fsync()
Метод
Важное различие:
В большинстве сценариев
Пример: запись строки как массива байтов
#Java #для_новичков #beginner #IO #NIO #FileOutputStream
Метод
flush() в FileOutputStream вызывает fd.sync() или аналог, который выполняет системный вызов fsync() на POSIX. Этот вызов гарантирует, что все dirty pages данного файла сброшены на физический носитель, и данные переживут сбой питания.try (FileOutputStream fos = new FileOutputStream("critical.dat")) {
fos.write(transactionData);
fos.flush(); // Сброс буферов JVM в ОС
fos.getFD().sync(); // fsync — гарантия физической записи
} // close() неявно вызывает flush(), но не fsync()Важное различие:
flush() — сброс буферов JVM в page cache ОС. Данные еще не на диске, но видны другим процессам.fsync() (через FileDescriptor.sync()) — принудительная запись dirty pages на физический носитель. Дорогостоящая операция, блокирующая поток до завершения I/O.В большинстве сценариев
flush() достаточно. fsync() применяется только для критичных данных: финансовые транзакции, контрольные точки баз данных, состояния консенсуса в распределенных системах.Пример: запись строки как массива байтов
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class FileWriteExample {
public void writeStringToFile(String path, String content) throws IOException {
// Преобразование строки в байты UTF-8
// Создается новый массив byte[] в heap Eden space
byte[] data = content.getBytes(StandardCharsets.UTF_8);
// FileOutputStream создается в heap
// Нативный fd выделяется ОС, файл открывается или создается
try (FileOutputStream fos = new FileOutputStream(path)) {
// write(byte[]) — копирование из heap в page cache через нативный буфер
fos.write(data);
// Явный flush — гарантия сброса в ОС
// Без flush данные могут оставаться в нативных буферах JVM
fos.flush();
} // close() вызывается автоматически
// 1. flush() — сброс остатков в ОС
// 2. Закрытие файлового дескриптора
// 3. Объект fos становится недостижимым для GC
// Массив data становится недостижимым после выхода из метода
// GC собирает data и fos при следующей minor collection
}
// Режим добавления
public void appendToFile(String path, String content) throws IOException {
byte[] data = (content + System.lineSeparator()).getBytes(StandardCharsets.UTF_8);
// append = true — открытие с O_APPEND, указатель в конце файла
try (FileOutputStream fos = new FileOutputStream(path, true)) {
fos.write(data);
fos.flush();
}
}
}
#Java #для_новичков #beginner #IO #NIO #FileOutputStream
👍4
Роль garbage collector при записи
Жизненный цикл объектов
В этом прице каждая итерация создает временный массив
Оптимизация: переиспользование буфера
Для устранения аллокаций в цикле можно использовать переиспользуемый
Однако этот подход усложняет код без значительного выигрыша для типичных сценариев. JVM эффективно обрабатывает короткоживущие объекты в Eden через TLAB (Thread Local Allocation Buffer), и minor GC для young generation быстр.
#Java #для_новичков #beginner #IO #NIO #FileOutputStream
Жизненный цикл объектов
public void processAndWrite(String outputPath, List<String> records) throws IOException {
// records — ссылка в стеке, объект List в heap, элементы — объекты String в heap
try (BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(outputPath), 8192)) {
for (String record : records) {
// Каждая итерация:
// 1. getBytes() создает новый byte[] в heap Eden
// 2. write() копирует данные в buf BufferedOutputStream (heap)
// 3. При заполнении buf — сброс в FileOutputStream -> ОС
byte[] bytes = record.getBytes(StandardCharsets.UTF_8);
bos.write(bytes);
bos.write('\n');
// bytes становится недостижимым после итерации
// GC собирает bytes в следующей minor collection
}
// bos.flush() сбрасывает остаток buf в ОС
} // bos и underlying fos закрыты
// records все еще достижим, если используется дальше
}В этом прице каждая итерация создает временный массив
bytes. Эти массивы короткоживущие и собираются minor GC в young generation. Если records содержит миллионы элементов, это создает значительное давление на GC, хотя сами массивы малы.Оптимизация: переиспользование буфера
Для устранения аллокаций в цикле можно использовать переиспользуемый
ByteArrayOutputStream или CharsetEncoder с переиспользуемым ByteBuffer:public void optimizedWrite(String outputPath, List<String> records) throws IOException {
// Переиспользуемый буфер в heap, создается один раз
ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
try (FileOutputStream fos = new FileOutputStream(outputPath);
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
for (String record : records) {
baos.reset(); // Сброс позиции, не создание нового объекта
byte[] bytes = record.getBytes(StandardCharsets.UTF_8);
baos.write(bytes);
baos.write('\n');
// Запись накопленных данных
bos.write(baos.toByteArray(), 0, baos.size());
}
}
}Однако этот подход усложняет код без значительного выигрыша для типичных сценариев. JVM эффективно обрабатывает короткоживущие объекты в Eden через TLAB (Thread Local Allocation Buffer), и minor GC для young generation быстр.
#Java #для_новичков #beginner #IO #NIO #FileOutputStream
👍4
Что выведет код?
#Tasks
import java.io.*;
public class Task050626 {
public static void main(String[] args) throws IOException {
try (FileOutputStream fos = new FileOutputStream("data.bin")) {
fos.write(300);
}
try (FileInputStream fis = new FileInputStream("data.bin")) {
System.out.println(fis.read());
}
}
}
#Tasks
👍3
Что такое striped locks? (ConcurrentHashMap как пример)🤓
Ответ:
Striped locking (блочная блокировка) — техника уменьшения конкуренции, когда разные части данных защищаются разными замками.
Классический пример — ConcurrentHashMap в Java 7: массив сегментов, каждый сегмент — отдельный замок.
В Java 8+ используется более тонкая блокировка на уровне корзин (buckets) с CAS для вставки в пустые корзины и synchronized на узле конкретной корзины при конфликте. Это позволяет параллельно выполнять операции, работающие с разными сегментами/корзинами.
#собеседование
Ответ:
Striped locking
Классический пример — ConcurrentHashMap в Java 7: массив сегментов, каждый сегмент — отдельный замок.
В Java 8+ используется более тонкая блокировка на уровне корзин (buckets) с CAS для вставки в пустые корзины и synchronized на узле конкретной корзины при конфликте. Это позволяет параллельно выполнять операции, работающие с разными сегментами/корзинами.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
247 Java-собесов в банках РФ: 12 вопросов в 80% случаев — и почему №7 валит 9 из 10
Фото: Markus Spiske Обновление (июнь 2026). Цифры в статье — это срез на март 2026 года: 247 разобранных интервью. С тех пор база заметно выросла — сейчас в ней более 1200 переработанных собеседований...
👍4🔥2
История технологии сегодня — 6 июня
ℹ️ Кто родился в этот день
И́горь Ива́нович Сико́рский (англ. Igor Sikorsky, 25 мая (6 июня) 1889[3], Киев, Российская империя — 26 октября 1972, Истон, штат Коннектикут, США) — русский и американский авиаконструктор, учёный, изобретатель, философ. Создатель первых в мире: четырёхмоторного самолёта «Русский витязь» (1913 год), тяжёлого четырёхмоторного бомбардировщика и пассажирского самолёта «Илья Муромец» (1914 год), трансатлантического гидроплана, серийного вертолёта одновинтовой схемы (США, 1942 год).
Джотто Биццаррини (итал. Giotto Bizzarrini; 6 июня 1926, Ливорно, Тоскана — 13 мая 2023, Чечина, Тоскана) — итальянский конструктор автомобилей и инженер-испытатель; создатель одного из наиболее известных автомобилей категории Гран Туризмо — Ferrari 250 GTO; основатель автостроительной компании Bizzarrini (1964—1969).
Карл Фердинанд Браун (нем. Karl Ferdinand Braun; 6 июня 1850, Фульда — 20 апреля 1918, Нью-Йорк) — немецкий физик, лауреат Нобелевской премии по физике в 1909 году (совместно с Г. Маркони). Интенсивно участвовал в разработке технического применения электромагнитных волн. Изобретатель катодной (электронно-лучевой) трубки для исследования электрических колебаний (так называемая «катодная трубка Брауна», или «трубка Брауна»).
🌐 Знаковые события
1761 — М. В. Ломоносов, наблюдая прохождение Венеры по солнечному диску, обнаружил наличие у неё атмосферы.
1882 — Американец Генри Сили (Henry W. Seely) запатентовал электрический утюг.
1979 — запуск советского беспилотного космического корабля «Союз-34» к орбитальной станции «Салют-6».
#Biography #Birth_Date #Events #06июня
И́горь Ива́нович Сико́рский (англ. Igor Sikorsky, 25 мая (6 июня) 1889[3], Киев, Российская империя — 26 октября 1972, Истон, штат Коннектикут, США) — русский и американский авиаконструктор, учёный, изобретатель, философ. Создатель первых в мире: четырёхмоторного самолёта «Русский витязь» (1913 год), тяжёлого четырёхмоторного бомбардировщика и пассажирского самолёта «Илья Муромец» (1914 год), трансатлантического гидроплана, серийного вертолёта одновинтовой схемы (США, 1942 год).
Джотто Биццаррини (итал. Giotto Bizzarrini; 6 июня 1926, Ливорно, Тоскана — 13 мая 2023, Чечина, Тоскана) — итальянский конструктор автомобилей и инженер-испытатель; создатель одного из наиболее известных автомобилей категории Гран Туризмо — Ferrari 250 GTO; основатель автостроительной компании Bizzarrini (1964—1969).
Карл Фердинанд Браун (нем. Karl Ferdinand Braun; 6 июня 1850, Фульда — 20 апреля 1918, Нью-Йорк) — немецкий физик, лауреат Нобелевской премии по физике в 1909 году (совместно с Г. Маркони). Интенсивно участвовал в разработке технического применения электромагнитных волн. Изобретатель катодной (электронно-лучевой) трубки для исследования электрических колебаний (так называемая «катодная трубка Брауна», или «трубка Брауна»).
1761 — М. В. Ломоносов, наблюдая прохождение Венеры по солнечному диску, обнаружил наличие у неё атмосферы.
1882 — Американец Генри Сили (Henry W. Seely) запатентовал электрический утюг.
1979 — запуск советского беспилотного космического корабля «Союз-34» к орбитальной станции «Салют-6».
#Biography #Birth_Date #Events #06июня
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
История технологии сегодня — 7 июня
ℹ️ Кто родился в этот день
Ро́берт Са́ндерсон Ма́лликен (англ. Robert Sanderson Mulliken; 7 июня 1896, Ньюберипорт, Массачусетс — 31 октября 1986, Арлингтон, Виргиния) — американский физик и химик, профессор, лауреат Нобелевской премии по химии (1966) «за фундаментальную работу по химическим связям и электронной структуре молекул, проведённую с помощью метода молекулярных орбиталей».
Чарлз Гло́вер Ба́ркла (англ. Charles Glover Barkla; 7 июня 1877, Уиднс, Чешир — 23 октября 1944, Эдинбург) — английский физик-ядерщик, лауреат Нобелевской премии по физике 1917 года «за открытие характеристического рентгеновского излучения элементов».
🌐 Знаковые события
1903 — в Берлине французский учёный Пьер Кюри объявил об открытии нового химического элемента — полония.
1965 — корпорация Sony представила первый домашний видеомагнитофон по цене $995 — CV-2000.
1983 — запущена автоматическая межпланетная станция «Венера-16» для исследования Венеры.
#Biography #Birth_Date #Events #07июня
Ро́берт Са́ндерсон Ма́лликен (англ. Robert Sanderson Mulliken; 7 июня 1896, Ньюберипорт, Массачусетс — 31 октября 1986, Арлингтон, Виргиния) — американский физик и химик, профессор, лауреат Нобелевской премии по химии (1966) «за фундаментальную работу по химическим связям и электронной структуре молекул, проведённую с помощью метода молекулярных орбиталей».
Чарлз Гло́вер Ба́ркла (англ. Charles Glover Barkla; 7 июня 1877, Уиднс, Чешир — 23 октября 1944, Эдинбург) — английский физик-ядерщик, лауреат Нобелевской премии по физике 1917 года «за открытие характеристического рентгеновского излучения элементов».
1903 — в Берлине французский учёный Пьер Кюри объявил об открытии нового химического элемента — полония.
1965 — корпорация Sony представила первый домашний видеомагнитофон по цене $995 — CV-2000.
1983 — запущена автоматическая межпланетная станция «Венера-16» для исследования Венеры.
#Biography #Birth_Date #Events #07июня
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Ты не хочешь стать программистом.
Ты хочешь, чтобы тебе дали 100500 рублей в минуту, удаленку и 3 рабочих часа в день🏝
Нет?😂
Не ври, ладно? Хотя-бы самому себе😏
А теперь задай себе вопрос - зачем ты здесь. На этом канале? В программировании?
Если Ты хочешь, чтобы программист появился внутри тебя сам, без боли, без тупежа, без стыда за глупые вопросы, особенно если ты до этого был(а) шахтером/строителем/токарем/поваром - у меня для тебя плохие новости.
Если Ты хочешь чтобы кто-то дал «тот самый» курс, «тот самый» язык, «ту самую» кнопку, нажав на которую — фьють и ты программист с зп в 500к, то как говорилнаркоман Паша Техник - "ты что-то перепутал" 🤣
Так не будет.
Извини если обломал🤷♀️
Сейчас, в жесткой конкуренции, начинание пути в IT, потребует от Тебя не просто уйти в минус.
Это и учеба вечерами после работы, куча пет-проектов в никуда, бесконечное количество собесов с «Мы отдали предпочтение более сильному кандидату, останемся на связи - мы вам обязательно позвоним!» верим, ага😂
Ты заполняешь резюме на hh.ru с мыслью:
«Я считаю, что готов работать, дайте мне работу!»
Но на рынок переполнен «готовыми».
Каждый хочет сидеть в трусах перед монитором с любимой кошкой на коленях и получать за это хорошую зп.
Каждый хочет пить в офисе чай с печеньками и быть востребованным специалистом.
А чем ты лучше их?
И тогда, с этими мыслями 90% сдаются.
Уходят обратно в стабильное/известное/удобное.
Ты ведь тоже думал уйти, да?😏
Я точно думал. И не раз😔
Путь не будет легким.
Но он совершенно точно преодолим.
Если смог я - сможешь и ты.
Но!
Если Ты до сих пор листаешь списки курсов, сравниваешь Java и Python, читаешь отзывы на Stepik и думаешь:
«Вот если бы найти один, но самый лучший — всё бы пошло».
Знай - это ловушка. Курс не станет твоей волшебной палочкой.
Он не спасёт от ощущения «ничего не понятно», он не вытащит тебя в поток.
Потому что всё равно будет сложно.
Пока ты не взрастишь в себе интерес к созиданию через программирование.☺️
Если Ты до сих пор ждёшь вдохновения -
Знай - оно появится в момент, когда код заработает.
Ты думаешь, что сначала надо захотеть, а потом начать.
На деле — сначала ты начинаешь, и только потом хочешь.
Мотивация приходит не в начале.
Когда твой проект сбилдится, все тесты пройдут, тогда и появляется кайф. И мотивация. И желание.
А не из мотивационных видео, моих статей или чужих успехов.
Есть хорошая цитата Марка Твена🤓 :
Поэтому мой совет (который я даю всем кто попросит) :
"Если Ты идешь в программирование за деньгами и "легкой" работой - либо взрасти в себе желание к созиданию, либо оно превратится для тебя в один из самых страшных кошмаров, с которым ты точно не справишься."
И помни:
Ты не ленивый.
Ты просто попал в ловушку рекламы и иллюзий.
Мы все туда попали.☺️ 😉
Но если ты все-такие решил(а) стать программистом — нужно перестать ждать и начать бороться, точно понимая, зачем и для чего тебе это.
Одно я могу обещать Тебе точно: если ты болеешь как и я - все получится.💪
#motivation
Ты хочешь, чтобы тебе дали 100500 рублей в минуту, удаленку и 3 рабочих часа в день
Нет?
Не ври, ладно? Хотя-бы самому себе
В (уже) далеких 1990-х я увидел первый компьютер.
В местном "Доме творчества" поставили несколько, и нас, детей, повели посмотреть на них. Дали поиграть в какую-то игру на зеленых экранах.
Мне кажется тогда я и заболел компьютерами. Но лишь спустя 20 лет я смог позволить себе купить его. А еще спустя 11 лет я познакомился с программированием.
Все эти годы я болел возможностью создавать что-то. Что-то свое. Ведь в детстве это казалось чудом - по экрану ездит квадратная машина и ты ей управляешь.
Много позже, разрабатывая сервера на Dayz и ARMA, реализуя в том мире все, что мог вообразить (и что позволяли знания), я все еще болел этим. Но по настоящему программировать я наверно я боялся, это казалось невозможным.
А потом пришла Java💃
И пришла возможность написать все что я пожелаю.
А теперь задай себе вопрос - зачем ты здесь. На этом канале? В программировании?
Если Ты хочешь, чтобы программист появился внутри тебя сам, без боли, без тупежа, без стыда за глупые вопросы, особенно если ты до этого был(а) шахтером/строителем/токарем/поваром - у меня для тебя плохие новости.
Если Ты хочешь чтобы кто-то дал «тот самый» курс, «тот самый» язык, «ту самую» кнопку, нажав на которую — фьють и ты программист с зп в 500к, то как говорил
Так не будет.
Извини если обломал
Сейчас, в жесткой конкуренции, начинание пути в IT, потребует от Тебя не просто уйти в минус.
Это и учеба вечерами после работы, куча пет-проектов в никуда, бесконечное количество собесов с «Мы отдали предпочтение более сильному кандидату, останемся на связи - мы вам обязательно позвоним!» верим, ага
Ты заполняешь резюме на hh.ru с мыслью:
«Я считаю, что готов работать, дайте мне работу!»
Но на рынок переполнен «готовыми».
Каждый хочет сидеть в трусах перед монитором с любимой кошкой на коленях и получать за это хорошую зп.
Каждый хочет пить в офисе чай с печеньками и быть востребованным специалистом.
А чем ты лучше их?
И тогда, с этими мыслями 90% сдаются.
Уходят обратно в стабильное/известное/удобное.
Ты ведь тоже думал уйти, да?
Я точно думал. И не раз
Путь не будет легким.
Но он совершенно точно преодолим.
Если смог я - сможешь и ты.
Но!
Если Ты до сих пор листаешь списки курсов, сравниваешь Java и Python, читаешь отзывы на Stepik и думаешь:
«Вот если бы найти один, но самый лучший — всё бы пошло».
Знай - это ловушка. Курс не станет твоей волшебной палочкой.
Он не спасёт от ощущения «ничего не понятно», он не вытащит тебя в поток.
Потому что всё равно будет сложно.
Пока ты не взрастишь в себе интерес к созиданию через программирование.
Если Ты до сих пор ждёшь вдохновения -
Знай - оно появится в момент, когда код заработает.
Ты думаешь, что сначала надо захотеть, а потом начать.
На деле — сначала ты начинаешь, и только потом хочешь.
Мотивация приходит не в начале.
Когда твой проект сбилдится, все тесты пройдут, тогда и появляется кайф. И мотивация. И желание.
А не из мотивационных видео, моих статей или чужих успехов.
Есть хорошая цитата Марка Твена
«Выбери себе работу по душе, и тебе не придётся работать ни одного дня в своей жизни»
(«Choose a job you love, and you will never have to work a day in your life»).
Поэтому мой совет
"Если Ты идешь в программирование за деньгами и "легкой" работой - либо взрасти в себе желание к созиданию, либо оно превратится для тебя в один из самых страшных кошмаров, с которым ты точно не справишься."
И помни:
Ты не ленивый.
Ты просто попал в ловушку рекламы и иллюзий.
Мы все туда попали.
Но если ты все-такие решил(а) стать программистом — нужно перестать ждать и начать бороться, точно понимая, зачем и для чего тебе это.
Одно я могу обещать Тебе точно: если ты болеешь как и я - все получится.
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13
Ребят, продолжаю набор желающих обучиться Java! 🤓
Пишите в лс, все обсудим (@Oleborn)🧑💻
И кстати маленький эксперимент - могут ли те кто когда либо обучался у меня (за все время, в том числе может по видео), дать обратную связь по качеству?☺️
Хаахах, после этого точно больше ко мне никто не пойдет 🤣 😉
Пишите в лс, все обсудим (@Oleborn)
И кстати маленький эксперимент - могут ли те кто когда либо обучался у меня (за все время, в том числе может по видео), дать обратную связь по качеству?
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣2👍1
История технологии сегодня — 8 июня
ℹ️ Кто родился в этот день
Гу́рий Ива́нович Марчу́к (8 июня 1925, Петрохерсонец, Самарская губерния — 24 марта 2013, Москва) — советский и российский учёный в области вычислительной математики, физики атмосферы и геофизики. Автор более 350 научных работ по вычислительной и прикладной математике, в том числе по методам расчёта ядерных реакторов, математическому моделированию в задачах физики атмосферы и океана, окружающей среды, в иммунологии и медицине.
Тимоти Джон Бе́рнерс-Ли (англ. Timothy John «Tim» Berners-Lee; род. 8 июня 1955 года, Лондон) — британский информатик, наиболее известный как создатель URI, URL, HTTP, HTML и Всемирной паутины (совместно с Робертом Кайо) и действующий глава Консорциума Всемирной паутины. Автор концепции семантической паутины, множества других разработок в области информационных технологий. В 1989 году, работая в ЦЕРН над внутренней системой обмена документов Enquire, Бернерс-Ли предложил глобальный гипертекстовый проект, ныне известный как Всемирная паутина. Проект был утверждён и реализован. С 1991 по 1993 год Тим Бернерс-Ли продолжал работу над Всемирной паутиной. Он собирал отзывы от пользователей и координировал работу Паутины. Тогда он впервые предложил для широкого обсуждения свои первые спецификации URI, HTTP и HTML.
Фрэнсис Гарри Комптон Крик (англ. Francis Harry Compton Crick; 8 июня 1916, Нортгемптон, Англия, Великобритания — 28 июля 2004, Сан-Диего, Калифорния, США) — британский молекулярный биолог, биофизик и нейробиолог. Лауреат Нобелевской премии по физиологии или медицине 1962 года — совместно с Джеймсом Д. Уотсоном и Морисом Х. Ф. Уилкинсом с формулировкой «за открытия, касающиеся молекулярной структуры нуклеиновых кислот и их значения для передачи информации в живых системах».
В статье, опубликованной в журнале Nature в 1961 году, Крик с соавторами предположили четыре свойства генетического кода:
три азотистых основания (триплет) кодируют одну аминокислоту;
триплеты генетического кода не перекрываются;
последовательности триплетов считываются с определённой начальной точки, знаки препинания внутри кодирующей последовательности отсутствуют;
генетический код вырожден — одна аминокислота может быть закодирована разными триплетами.
Также Крик известен тем, что сформулировал центральную догму молекулярной биологии: генетическая информация передаётся в клетке в одну сторону, от ДНК к РНК, а затем к белку.
🌐 Знаковые события
1824 — Ноа Кашинг (Noah Cushing) из Квебека запатентовал одну из ранних стиральных машин.
1869 — Айвз Макгаффи (Ives W. McGaffey) из Чикаго запатентовал модель подметательной машины — один из ранних пылесосов.
1940 — объявлено об открытии нептуния, 93-го элемента в таблице периодических элементов.
1948 — под руководством И. В. Курчатова в Челябинске-40 (ныне Озёрск) осуществляется пуск первого отечественного промышленного ядерного реактора.
#Biography #Birth_Date #Events #08июня
Гу́рий Ива́нович Марчу́к (8 июня 1925, Петрохерсонец, Самарская губерния — 24 марта 2013, Москва) — советский и российский учёный в области вычислительной математики, физики атмосферы и геофизики. Автор более 350 научных работ по вычислительной и прикладной математике, в том числе по методам расчёта ядерных реакторов, математическому моделированию в задачах физики атмосферы и океана, окружающей среды, в иммунологии и медицине.
Тимоти Джон Бе́рнерс-Ли (англ. Timothy John «Tim» Berners-Lee; род. 8 июня 1955 года, Лондон) — британский информатик, наиболее известный как создатель URI, URL, HTTP, HTML и Всемирной паутины (совместно с Робертом Кайо) и действующий глава Консорциума Всемирной паутины. Автор концепции семантической паутины, множества других разработок в области информационных технологий. В 1989 году, работая в ЦЕРН над внутренней системой обмена документов Enquire, Бернерс-Ли предложил глобальный гипертекстовый проект, ныне известный как Всемирная паутина. Проект был утверждён и реализован. С 1991 по 1993 год Тим Бернерс-Ли продолжал работу над Всемирной паутиной. Он собирал отзывы от пользователей и координировал работу Паутины. Тогда он впервые предложил для широкого обсуждения свои первые спецификации URI, HTTP и HTML.
Фрэнсис Гарри Комптон Крик (англ. Francis Harry Compton Crick; 8 июня 1916, Нортгемптон, Англия, Великобритания — 28 июля 2004, Сан-Диего, Калифорния, США) — британский молекулярный биолог, биофизик и нейробиолог. Лауреат Нобелевской премии по физиологии или медицине 1962 года — совместно с Джеймсом Д. Уотсоном и Морисом Х. Ф. Уилкинсом с формулировкой «за открытия, касающиеся молекулярной структуры нуклеиновых кислот и их значения для передачи информации в живых системах».
В статье, опубликованной в журнале Nature в 1961 году, Крик с соавторами предположили четыре свойства генетического кода:
три азотистых основания (триплет) кодируют одну аминокислоту;
триплеты генетического кода не перекрываются;
последовательности триплетов считываются с определённой начальной точки, знаки препинания внутри кодирующей последовательности отсутствуют;
генетический код вырожден — одна аминокислота может быть закодирована разными триплетами.
Также Крик известен тем, что сформулировал центральную догму молекулярной биологии: генетическая информация передаётся в клетке в одну сторону, от ДНК к РНК, а затем к белку.
1824 — Ноа Кашинг (Noah Cushing) из Квебека запатентовал одну из ранних стиральных машин.
1869 — Айвз Макгаффи (Ives W. McGaffey) из Чикаго запатентовал модель подметательной машины — один из ранних пылесосов.
1940 — объявлено об открытии нептуния, 93-го элемента в таблице периодических элементов.
1948 — под руководством И. В. Курчатова в Челябинске-40 (ныне Озёрск) осуществляется пуск первого отечественного промышленного ядерного реактора.
#Biography #Birth_Date #Events #08июня
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
[Совет по Java #047]
Тема:
Проблема: Метод
Во-первых,
Во-вторых, реализация по умолчанию делает поверхностное копирование (shallow copy), что приводит к тому, что внутренние объекты не копируются, а разделяются между оригиналом и копией.
В-третьих, метод
В-четвертых, он может выбрасывать
Для полей с
Решение: Используйте копирующие конструкторы (конструктор, принимающий объект того же типа) или статические фабричные методы копирования.
Они явны, безопасны, работают с
Начиная с Java 16, можно использовать
Объяснение:
Проблемы: нет контракта на глубину копирования,
#Java #советы
Тема:
clone() — опасный метод с неясной семантикой. Проблема: Метод
clone() из интерфейса Cloneable имеет множество проблем. Во-первых,
Cloneable — это маркерный интерфейс без метода clone(), объявление метода находится в Object. Во-вторых, реализация по умолчанию делает поверхностное копирование (shallow copy), что приводит к тому, что внутренние объекты не копируются, а разделяются между оригиналом и копией.
В-третьих, метод
clone() возвращает Object, требуется приведение типа. В-четвертых, он может выбрасывать
CloneNotSupportedException, если класс не реализует Cloneable. Кроме того, clone() не вызывает конструктор, что может нарушить инварианты класса. Для полей с
final модификатором клонирование также проблематично. В итоге правильно реализовать clone() с глубоким копированием сложно, и многие разработчики ошибаются в деталях.Решение: Используйте копирующие конструкторы (конструктор, принимающий объект того же типа) или статические фабричные методы копирования.
Они явны, безопасны, работают с
final полями и могут быть легко расширены для глубокого копирования. Для immutable объектов копирование вообще не нужно — можно использовать тот же экземпляр. Для сложных иерархий можно использовать интерфейс Copyable с методом copy(), возвращающим копию. Начиная с Java 16, можно использовать
record — они иммутабельны и предоставляют компактный конструктор копирования.public class CloneVsCopy {
//Проблемный clone
static class PersonBad implements Cloneable {
String name;
List<String> hobbies;
PersonBad(String name, List<String> hobbies) {
this.name = name;
this.hobbies = new ArrayList<>(hobbies);
}
@Override
public PersonBad clone() {
try {
PersonBad cloned = (PersonBad) super.clone(); // shallow copy!
// hobbies все еще ссылается на тот же список
return cloned;
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
}
//Копирующий конструктор
static class PersonGood {
final String name;
final List<String> hobbies;
PersonGood(String name, List<String> hobbies) {
this.name = name;
this.hobbies = new ArrayList<>(hobbies);
}
// Копирующий конструктор
PersonGood(PersonGood other) {
this.name = other.name;
this.hobbies = new ArrayList<>(other.hobbies); // глубокое копирование
}
// Статическая фабрика
static PersonGood copyOf(PersonGood other) {
return new PersonGood(other);
}
PersonGood withName(String name) {
return new PersonGood(name, this.hobbies);
}
}
//Record (Java 16+) — идеален для immutable данных
record PersonRecord(String name, List<String> hobbies) {
PersonRecord {
// Защитное копирование в компактном конструкторе
hobbies = List.copyOf(hobbies);
}
// Record автоматически предоставляет конструктор копирования
}
}Объяснение:
Cloneable и clone() считаются неудачным дизайном в Java. Проблемы: нет контракта на глубину копирования,
clone() не вызывает конструктор, сложно поддерживать при наследовании. Копирующий конструктор явен, понятен и позволяет контролировать глубину копирования. Для immutable объектов делитесь ссылкой. Для сложных графов используйте сериализацию (осторожно) или библиотеки вроде com.fasterxml.jackson.databind.ObjectMapper.#Java #советы
👍6
Что выведет код?
#Tasks
public class Task080626 {
static class Data implements Cloneable {
int[] values = {1, 2, 3};
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public static void main(String[] args) throws CloneNotSupportedException {
Data original = new Data();
Data cloned = (Data) original.clone();
cloned.values[0] = 100;
System.out.println(original.values[0]);
System.out.println(cloned.values[0]);
}
}#Tasks
👍2
👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯2
Что такое 🤓
Ответ:
FileChannel.transferTo(long position, long count, WritableByteChannel target) — высокоэффективный метод для копирования данных из файла в другой канал (например, в сокет) в режиме ядра, без перекачки данных в пользовательское пространство.
Используется для оптимизации веб-серверов (отправка статических файлов) — так называемый zero-copy. Метод transferFrom() — аналогично для копирования в файл.
Работает не полностью zero-copy на всех ОС, но значительно быстрее, чем побайтовое чтение/запись.
#собеседование
transferTo в FileChannel? Ответ:
Используется для оптимизации веб-серверов (отправка статических файлов) — так называемый zero-copy. Метод transferFrom() — аналогично для копирования в файл.
Работает не полностью zero-copy на всех ОС, но значительно быстрее, чем побайтовое чтение/запись.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
История технологии сегодня — 9 июня
ℹ️ Кто родился в этот день
Джордж Стефенсон (англ. George Stephenson; 9 июня 1781, Уилэм, графство Нортамберленд — 12 августа 1848, Честерфилд, графство Дербишир) — английский изобретатель, инженер-механик. Всемирную известность приобрёл благодаря изобретённому им паровозу. Считается одним из «отцов» железных дорог. Стефенсон предложил использовать железные рельсы (вместо чугунных), а подушки, которые в дальнейшем превратились в шпалы, делать деревянными.
Иоганн Готтфрид Га́лле (нем. Johann Gottfried Galle; 9 июня 1812, Радис — 10 июля 1910, Потсдам) — немецкий астроном. 23 сентября 1846 года получил письмо от У. Леверье с просьбой провести поиск заурановой планеты по предвычисленным им координатам. В тот же вечер Галле отыскал новую планету, получившую позже название Нептун. В его честь названы кратер на Луне и кратер на Марсе, кольцо Нептуна и астероид № 2097 (Галле).
🌐 Знаковые события
1959 — на воду спущена первая подводная лодка с баллистическими ракетами на борту — американская «Джордж Вашингтон».
#Biography #Birth_Date #Events #09июня
Джордж Стефенсон (англ. George Stephenson; 9 июня 1781, Уилэм, графство Нортамберленд — 12 августа 1848, Честерфилд, графство Дербишир) — английский изобретатель, инженер-механик. Всемирную известность приобрёл благодаря изобретённому им паровозу. Считается одним из «отцов» железных дорог. Стефенсон предложил использовать железные рельсы (вместо чугунных), а подушки, которые в дальнейшем превратились в шпалы, делать деревянными.
Иоганн Готтфрид Га́лле (нем. Johann Gottfried Galle; 9 июня 1812, Радис — 10 июля 1910, Потсдам) — немецкий астроном. 23 сентября 1846 года получил письмо от У. Леверье с просьбой провести поиск заурановой планеты по предвычисленным им координатам. В тот же вечер Галле отыскал новую планету, получившую позже название Нептун. В его честь названы кратер на Луне и кратер на Марсе, кольцо Нептуна и астероид № 2097 (Галле).
1959 — на воду спущена первая подводная лодка с баллистическими ракетами на борту — американская «Джордж Вашингтон».
#Biography #Birth_Date #Events #09июня
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2