HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Основные термины и понятия</a></li>
1 <ul><li><a>Основные термины и понятия</a></li>
2 <li><a>Актуальность темы</a></li>
2 <li><a>Актуальность темы</a></li>
3 <li><a>Сериализация и десериализация - общее</a><ul><li><a>Для чего требуется</a></li>
3 <li><a>Сериализация и десериализация - общее</a><ul><li><a>Для чего требуется</a></li>
4 </ul></li>
4 </ul></li>
5 <li><a>В Java</a><ul><li><a>Класс ObjectOutputStream</a><ul><li><a>Пример</a></li>
5 <li><a>В Java</a><ul><li><a>Класс ObjectOutputStream</a><ul><li><a>Пример</a></li>
6 </ul></li>
6 </ul></li>
7 <li><a>Десериализация</a></li>
7 <li><a>Десериализация</a></li>
8 <li><a>Исключение</a></li>
8 <li><a>Исключение</a></li>
9 </ul></li>
9 </ul></li>
10 <li><a>В Питоне</a><ul><li><a>Инструменты Питона</a></li>
10 <li><a>В Питоне</a><ul><li><a>Инструменты Питона</a></li>
11 </ul></li>
11 </ul></li>
12 </ul><p>Разработка программного обеспечения - это непростая задача, особенно для новичков. Им предстоит выучить множество особенностей, инструментов и функций, чтобы на выходе получать качественный софт.</p>
12 </ul><p>Разработка программного обеспечения - это непростая задача, особенно для новичков. Им предстоит выучить множество особенностей, инструментов и функций, чтобы на выходе получать качественный софт.</p>
13 <p>Программирование осуществляется с помощью специальных языков. Каждый обладает ключевыми особенностями, преимуществами, недостатками и нюансами. Основная масса современных ЯП универсальны - могут применяться как для веб-коддинга, так и для игрового софта. Согласно Google, огромным спросом пользуются языки СИ-семейства, Java, а также Python.</p>
13 <p>Программирование осуществляется с помощью специальных языков. Каждый обладает ключевыми особенностями, преимуществами, недостатками и нюансами. Основная масса современных ЯП универсальны - могут применяться как для веб-коддинга, так и для игрового софта. Согласно Google, огромным спросом пользуются языки СИ-семейства, Java, а также Python.</p>
14 <p>Хорошие разработчики должны разбираться не только в ключевых моментах создания ПО, но и в более сложных структурах процесса. В данной статье речь зайдет о таких манипуляциях как сериализация и десериализация объектов. Также будут рассмотрены наглядные примеры софта, объясняющие каждый процесс более подробно и детально.</p>
14 <p>Хорошие разработчики должны разбираться не только в ключевых моментах создания ПО, но и в более сложных структурах процесса. В данной статье речь зайдет о таких манипуляциях как сериализация и десериализация объектов. Также будут рассмотрены наглядные примеры софта, объясняющие каждый процесс более подробно и детально.</p>
15 <h2>Основные термины и понятия</h2>
15 <h2>Основные термины и понятия</h2>
16 <p>Разработка - процесс, требующий определенных общих знаний. В программировании есть общие понятия, о которых необходимо помнить каждому юзеру, желающему создать собственное программное обеспечение:</p>
16 <p>Разработка - процесс, требующий определенных общих знаний. В программировании есть общие понятия, о которых необходимо помнить каждому юзеру, желающему создать собственное программное обеспечение:</p>
17 <ol><li>Алгоритм - инструкции, правила и указания, направленные на решение той или ной задачи.</li>
17 <ol><li>Алгоритм - инструкции, правила и указания, направленные на решение той или ной задачи.</li>
18 <li>API - правила, принципы, протоколы и процедуры, направленные на помощь в создании программных приложений. Такой интерфейс способствует упрощению контактирования со сторонними службами и утилитами.</li>
18 <li>API - правила, принципы, протоколы и процедуры, направленные на помощь в создании программных приложений. Такой интерфейс способствует упрощению контактирования со сторонними службами и утилитами.</li>
19 <li>Аргументы - значения, которые передаются в функции или команды.</li>
19 <li>Аргументы - значения, которые передаются в функции или команды.</li>
20 <li>Ошибка - дефект или непредвиденный крах, приводящий к неисправностям в написанном коде.</li>
20 <li>Ошибка - дефект или непредвиденный крах, приводящий к неисправностям в написанном коде.</li>
21 <li>Символ - элементарная единица записи (отображения данных), которая выражена одной буквенной или цифирной записи.</li>
21 <li>Символ - элементарная единица записи (отображения данных), которая выражена одной буквенной или цифирной записи.</li>
22 <li>Объекты - связанные переменные, константы, а также иные структурные данные. Они будут выбираться и проходить совместную обработку при исполнении приложения.</li>
22 <li>Объекты - связанные переменные, константы, а также иные структурные данные. Они будут выбираться и проходить совместную обработку при исполнении приложения.</li>
23 <li>Объектно-ориентированное программирование - способ написания ПО, в основе которого заложены объекты и данные. Действия и логика присутствуют, но уходят на второй план.</li>
23 <li>Объектно-ориентированное программирование - способ написания ПО, в основе которого заложены объекты и данные. Действия и логика присутствуют, но уходят на второй план.</li>
24 <li>Класс - набор связанных между собой объектов, наделенных одними и теми же свойствами. Предназначается для гибкости программирования.</li>
24 <li>Класс - набор связанных между собой объектов, наделенных одними и теми же свойствами. Предназначается для гибкости программирования.</li>
25 <li>Константа - неизменное значение. Оно остается одинаковым на протяжении всего цикла приложения.</li>
25 <li>Константа - неизменное значение. Оно остается одинаковым на протяжении всего цикла приложения.</li>
26 <li>Тип данных - классификация определенной разновидности типа.</li>
26 <li>Тип данных - классификация определенной разновидности типа.</li>
27 <li>Массив - множество схожих типов данных, подвергшихся предварительной группировке.</li>
27 <li>Массив - множество схожих типов данных, подвергшихся предварительной группировке.</li>
28 <li>Итерация - один проход через определенный набор операций в коде.</li>
28 <li>Итерация - один проход через определенный набор операций в коде.</li>
29 <li>Ключевое слово - зарезервированное языком программирования или утилитой слово. Необходимо для выполнения тех или иных задач, реализации команд. Ключевики не могут выступать в виде названий переменных.</li>
29 <li>Ключевое слово - зарезервированное языком программирования или утилитой слово. Необходимо для выполнения тех или иных задач, реализации команд. Ключевики не могут выступать в виде названий переменных.</li>
30 <li>Переменная - единица хранения информации в памяти устройства, которая имеет собственное уникальное имя.</li>
30 <li>Переменная - единица хранения информации в памяти устройства, которая имеет собственное уникальное имя.</li>
31 <li>Операнд - то, чем можно управлять через операторы.</li>
31 <li>Операнд - то, чем можно управлять через операторы.</li>
32 <li>Оператор - объект, который при помощи операндов управляет другими составляющими кода в заданном выражении.</li>
32 <li>Оператор - объект, который при помощи операндов управляет другими составляющими кода в заданном выражении.</li>
33 <li>Указатель - переменная, хранящая в себе адрес места в памяти.</li>
33 <li>Указатель - переменная, хранящая в себе адрес места в памяти.</li>
34 </ol><p>Это - база, без которой невозможно успешно коддить, а также рассматривать сериализации и десериализации. Отыскать подобные определения успешно удастся через Google. Также стоит учесть, что у каждого ЯП есть "специфические" термины, используемые для конкретного способа написания ПО.</p>
34 </ol><p>Это - база, без которой невозможно успешно коддить, а также рассматривать сериализации и десериализации. Отыскать подобные определения успешно удастся через Google. Также стоит учесть, что у каждого ЯП есть "специфические" термины, используемые для конкретного способа написания ПО.</p>
35 <h2>Актуальность темы</h2>
35 <h2>Актуальность темы</h2>
36 <p>Сериализация объектов в языках программирования (будут рассмотрены примеры из Java и Python) - механизм, который помогает разрабам создать уникальное ПО, которое умеет "запоминать" собственное состояние.</p>
36 <p>Сериализация объектов в языках программирования (будут рассмотрены примеры из Java и Python) - механизм, который помогает разрабам создать уникальное ПО, которое умеет "запоминать" собственное состояние.</p>
37 <p>Пример - это компьютерная игра. Даже на приставках из 90-х были такие операции как "сохранение" и "загрузка". Но не везде. Из-за этого возникали определенности трудности. Особенно если речь заходила не просто об играх, а о "серьезном" программном обеспечении.</p>
37 <p>Пример - это компьютерная игра. Даже на приставках из 90-х были такие операции как "сохранение" и "загрузка". Но не везде. Из-за этого возникали определенности трудности. Особенно если речь заходила не просто об играх, а о "серьезном" программном обеспечении.</p>
38 <p>Сохранение и загрузка игры в обычном понимании (и, если посмотреть Google) - это продолжение с того места, где клиент закончил в прошлый раз. Для этого будет создана специальная "контрольная точка". Она задействуется при следующей загрузке ПО. Так процесс звучит в "обыденном" смысле.</p>
38 <p>Сохранение и загрузка игры в обычном понимании (и, если посмотреть Google) - это продолжение с того места, где клиент закончил в прошлый раз. Для этого будет создана специальная "контрольная точка". Она задействуется при следующей загрузке ПО. Так процесс звучит в "обыденном" смысле.</p>
39 <p>В программировании ситуация обстоит аналогичным образом. Процесс можно описать следующим образом:</p>
39 <p>В программировании ситуация обстоит аналогичным образом. Процесс можно описать следующим образом:</p>
40 <ol><li>Пользователь работает с утилитой и производит какие-то изменения.</li>
40 <ol><li>Пользователь работает с утилитой и производит какие-то изменения.</li>
41 <li>Когда нужно - пытается сохранить состояние программы.</li>
41 <li>Когда нужно - пытается сохранить состояние программы.</li>
42 <li>Информацию о приложении требуется как-то записывать, чтобы в будущем можно было произвести восстановление прогресса. Для этого нужны специальные механизмы.</li>
42 <li>Информацию о приложении требуется как-то записывать, чтобы в будущем можно было произвести восстановление прогресса. Для этого нужны специальные механизмы.</li>
43 </ol><p>Именно к этим операциям будет обращаться пользователь, когда ему требуется загрузить или выгрузить то или иное состояние контента. Манипуляции способствуют продолжению работы клиента.</p>
43 </ol><p>Именно к этим операциям будет обращаться пользователь, когда ему требуется загрузить или выгрузить то или иное состояние контента. Манипуляции способствуют продолжению работы клиента.</p>
44 <h2>Сериализация и десериализация - общее</h2>
44 <h2>Сериализация и десериализация - общее</h2>
45 <p>Сериализация имеющихся объектов - это процесс сохранения состояния объекта в последовательность байт. Механизм, который позволят "записывать" полученный прогресс для будущей выгрузки.</p>
45 <p>Сериализация имеющихся объектов - это процесс сохранения состояния объекта в последовательность байт. Механизм, который позволят "записывать" полученный прогресс для будущей выгрузки.</p>
46 <p>Десериализация - восстановление объектов из байт, сохранение которых было произведено ранее. Процедура выгрузки "зафиксированной" информации пользователем.</p>
46 <p>Десериализация - восстановление объектов из байт, сохранение которых было произведено ранее. Процедура выгрузки "зафиксированной" информации пользователем.</p>
47 <p>В Java и Python любые объекты, согласно Google, проходят через преобразование в байт последовательность. Это важный процесс, без которого существование современного ПО оказалось бы невозможным.</p>
47 <p>В Java и Python любые объекты, согласно Google, проходят через преобразование в байт последовательность. Это важный процесс, без которого существование современного ПО оказалось бы невозможным.</p>
48 <h3>Для чего требуется</h3>
48 <h3>Для чего требуется</h3>
49 <p>Программные коды не могут существовать сами по себе. Они обычно взаимодействуют друг с другом, а также обмениваются данными. Байтовый формат - это удобное и эффективное средство хранение информации в памяти. Он позволяет превращать объекты (пример - класс SaveGame - сохраненная игра) в последовательность байт. Далее - передать их через интернет на другое устройство (компьютер, смартфон, планшет), а после превратить соответствующие bytes в объект Java или Python.</p>
49 <p>Программные коды не могут существовать сами по себе. Они обычно взаимодействуют друг с другом, а также обмениваются данными. Байтовый формат - это удобное и эффективное средство хранение информации в памяти. Он позволяет превращать объекты (пример - класс SaveGame - сохраненная игра) в последовательность байт. Далее - передать их через интернет на другое устройство (компьютер, смартфон, планшет), а после превратить соответствующие bytes в объект Java или Python.</p>
50 <p>Из вышесказанного следует, что, когда данные сериализованы, ими удобно пользоваться на разных девайсах. Такой подход позволяет машине воспринимать информацию в виде простого для "осознания" устройства способа представления.</p>
50 <p>Из вышесказанного следует, что, когда данные сериализованы, ими удобно пользоваться на разных девайсах. Такой подход позволяет машине воспринимать информацию в виде простого для "осознания" устройства способа представления.</p>
51 <p>Сериализация соответствующих объектов очень удобна, когда речь идет о работе со сложными компонентами при коддинге. Это способствует созданию качественного ПО.</p>
51 <p>Сериализация соответствующих объектов очень удобна, когда речь идет о работе со сложными компонентами при коддинге. Это способствует созданию качественного ПО.</p>
52 <h2>В Java</h2>
52 <h2>В Java</h2>
53 <p>Стоит рассмотреть описанные операции на примере двух самых популярных ЯП. Начать лучше с Java, который является более функциональным и универсальным. С его помощью могут быть написаны даже сложные игры и "офисные" приложения.</p>
53 <p>Стоит рассмотреть описанные операции на примере двух самых популярных ЯП. Начать лучше с Java, который является более функциональным и универсальным. С его помощью могут быть написаны даже сложные игры и "офисные" приложения.</p>
54 <p>В Java, согласно Google, сервиализация возможна лишь относительно объектов, которые используют интерфейс Serializable. Он:</p>
54 <p>В Java, согласно Google, сервиализация возможна лишь относительно объектов, которые используют интерфейс Serializable. Он:</p>
55 <ul><li>не служит для определения тех или иных методов;</li>
55 <ul><li>не служит для определения тех или иных методов;</li>
56 <li>выступает в качестве своеобразного системного указателя;</li>
56 <li>выступает в качестве своеобразного системного указателя;</li>
57 <li>"ссылается" на то, что объект, который его реализовывает, может быть сериализован.</li>
57 <li>"ссылается" на то, что объект, который его реализовывает, может быть сериализован.</li>
58 </ul><p>Сериализация в Java - это своеобразное представление информации в байтах ссылками через специальный класс.</p>
58 </ul><p>Сериализация в Java - это своеобразное представление информации в байтах ссылками через специальный класс.</p>
59 <h3>Класс ObjectOutputStream</h3>
59 <h3>Класс ObjectOutputStream</h3>
60 <p>Для того, чтобы сериализуемый набор объектов был "собран" в поток, необходимо применить class Object Output Stream (пишется слитно). Он отвечает за потоковую запись информации.</p>
60 <p>Для того, чтобы сериализуемый набор объектов был "собран" в поток, необходимо применить class Object Output Stream (пишется слитно). Он отвечает за потоковую запись информации.</p>
61 <p>Чтобы создать подобный объект, согласно Google, требуется использовать такую форму представления в конструкторе: ObjectOutputStream (OutputStream out).</p>
61 <p>Чтобы создать подобный объект, согласно Google, требуется использовать такую форму представления в конструкторе: ObjectOutputStream (OutputStream out).</p>
62 <p>Запись электронных материалов упомянутым классом ведется за счет определенных методов. Они включают в себя следующие вариации:</p>
62 <p>Запись электронных материалов упомянутым классом ведется за счет определенных методов. Они включают в себя следующие вариации:</p>
63 <ul><li>void close() - закрытие потока;</li>
63 <ul><li>void close() - закрытие потока;</li>
64 <li>void flush() - очистка буфера и сброс содержимого в выходной поток;</li>
64 <li>void flush() - очистка буфера и сброс содержимого в выходной поток;</li>
65 <li>write(byte[] buf) - запись в поток массив байтов;</li>
65 <li>write(byte[] buf) - запись в поток массив байтов;</li>
66 <li>write (int val) - преобразование один младший байт из val;</li>
66 <li>write (int val) - преобразование один младший байт из val;</li>
67 <li>writeBoolean(int val) - работа с булевым значением;</li>
67 <li>writeBoolean(int val) - работа с булевым значением;</li>
68 <li>writeByte(int val) - сохранение в поток один младший байт из val;</li>
68 <li>writeByte(int val) - сохранение в поток один младший байт из val;</li>
69 <li>writeChar(int val) - значение типа char, которое представлено целочисленным;</li>
69 <li>writeChar(int val) - значение типа char, которое представлено целочисленным;</li>
70 <li>writeDouble - значение типа double;</li>
70 <li>writeDouble - значение типа double;</li>
71 <li>writeLong - тип long;</li>
71 <li>writeLong - тип long;</li>
72 <li>writeInt - целочисленный тип данных int;</li>
72 <li>writeInt - целочисленный тип данных int;</li>
73 <li>writeShort - запись типа short;</li>
73 <li>writeShort - запись типа short;</li>
74 <li>writeUTF(String str) - записывает в поток строку, которая идет в кодировке UTF-8;</li>
74 <li>writeUTF(String str) - записывает в поток строку, которая идет в кодировке UTF-8;</li>
75 <li>writeObject(Object obj) - запись в поток отдельного объекта.</li>
75 <li>writeObject(Object obj) - запись в поток отдельного объекта.</li>
76 </ul><p>Согласно Google, все предложенные методы - это информация, с которой допускается провести сериализацию в Java.</p>
76 </ul><p>Согласно Google, все предложенные методы - это информация, с которой допускается провести сериализацию в Java.</p>
77 <h4>Пример</h4>
77 <h4>Пример</h4>
78 <p>Чтобы лучше понимать соответствующее направление, стоит рассмотреть наглядный пример. Вот файл с кодом, в который хотим сохранить один объект класса Person:</p>
78 <p>Чтобы лучше понимать соответствующее направление, стоит рассмотреть наглядный пример. Вот файл с кодом, в который хотим сохранить один объект класса Person:</p>
79 import java.io.*; public class Program { public static void main(String[] args) { try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat"))) { Person p = new Person("Sam", 33, 178, true); oos.writeObject(p); } catch(Exception ex){ System.out.println(ex.getMessage()); } } } class Person implements Serializable{ private String name; private int age; private double height; private boolean married; Person(String n, int a, double h, boolean m){ name=n; age=a; height=h; married=m; } String getName() {return name;} int getAge(){ return age;} double getHeight(){return height;} boolean getMarried(){return married;} }<p>Он наглядно отражает сериализацию объектов в программировании на примере Джавы. Подобный приложения можно с легкостью обнаружить в Google.</p>
79 import java.io.*; public class Program { public static void main(String[] args) { try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat"))) { Person p = new Person("Sam", 33, 178, true); oos.writeObject(p); } catch(Exception ex){ System.out.println(ex.getMessage()); } } } class Person implements Serializable{ private String name; private int age; private double height; private boolean married; Person(String n, int a, double h, boolean m){ name=n; age=a; height=h; married=m; } String getName() {return name;} int getAge(){ return age;} double getHeight(){return height;} boolean getMarried(){return married;} }<p>Он наглядно отражает сериализацию объектов в программировании на примере Джавы. Подобный приложения можно с легкостью обнаружить в Google.</p>
80 <h3>Десериализация</h3>
80 <h3>Десериализация</h3>
81 <p>В Джаве есть обратный от упомянутого ранее класс. Это - ObjectInputStream. Он позволяет провести чтение электронных материалов, которые были serialized ранее. Принимает ссылку в имеющемся конструкторе на поток ввода: ObjectInputStream(InputStream in).</p>
81 <p>В Джаве есть обратный от упомянутого ранее класс. Это - ObjectInputStream. Он позволяет провести чтение электронных материалов, которые были serialized ранее. Принимает ссылку в имеющемся конструкторе на поток ввода: ObjectInputStream(InputStream in).</p>
82 <p>А вот методы, которые использует соответствующий класс:</p>
82 <p>А вот методы, которые использует соответствующий класс:</p>
83 <p>Из ранее созданного класса, прошедшего serializing, можно извлечь электронные материалы:</p>
83 <p>Из ранее созданного класса, прошедшего serializing, можно извлечь электронные материалы:</p>
84 <p>А теперь можно объединить эти файлы (serialization и deserialization) в единый документ и вывести по полям списка объектов:</p>
84 <p>А теперь можно объединить эти файлы (serialization и deserialization) в единый документ и вывести по полям списка объектов:</p>
85 <h3>Исключение</h3>
85 <h3>Исключение</h3>
86 <p>Изначально при сериализации рассматриваемых объектов в ЯП, согласно Google, будут использоваться все переменные object. Но бывают случаи, когда некоторые поля требуется исключить. Это можно сделать при помощи модификатора.</p>
86 <p>Изначально при сериализации рассматриваемых объектов в ЯП, согласно Google, будут использоваться все переменные object. Но бывают случаи, когда некоторые поля требуется исключить. Это можно сделать при помощи модификатора.</p>
87 <p>В соответствующей ситуации предстоит запомнить, что:</p>
87 <p>В соответствующей ситуации предстоит запомнить, что:</p>
88 <ol><li>Название необходимого модификатора - это transient.</li>
88 <ol><li>Название необходимого модификатора - это transient.</li>
89 <li>Если взять наглядный пример с Person, можно исключить из него переменные height.</li>
89 <li>Если взять наглядный пример с Person, можно исключить из него переменные height.</li>
90 <li>Убрать разрешается несколько элементов. Пример - дополнительно из Person исключим married.</li>
90 <li>Убрать разрешается несколько элементов. Пример - дополнительно из Person исключим married.</li>
91 </ol><p>Выше - сериализация заданных объектов с исключениями. Подобных примеров в Google тоже немало. И все они способны разъяснить процесс serialize даже новичкам.</p>
91 </ol><p>Выше - сериализация заданных объектов с исключениями. Подобных примеров в Google тоже немало. И все они способны разъяснить процесс serialize даже новичкам.</p>
92 <h2>В Питоне</h2>
92 <h2>В Питоне</h2>
93 <p>В случае с Питоном ситуация обстоит несколько иначе. Далее будут приведены примеры со средой разработки IntelJ IDEA со стандартным расширением от JetBrains.</p>
93 <p>В случае с Питоном ситуация обстоит несколько иначе. Далее будут приведены примеры со средой разработки IntelJ IDEA со стандартным расширением от JetBrains.</p>
94 <p>Чтобы успешно проверить сериализацию в Python, необходимо произвести импорт модулей. А еще - создать таблицу информации, с которой будет осуществляться дальнейшая работа.</p>
94 <p>Чтобы успешно проверить сериализацию в Python, необходимо произвести импорт модулей. А еще - создать таблицу информации, с которой будет осуществляться дальнейшая работа.</p>
95 <h3>Инструменты Питона</h3>
95 <h3>Инструменты Питона</h3>
96 <p>У Питона не one способ реализации рассматриваемой операции. Их несколько:</p>
96 <p>У Питона не one способ реализации рассматриваемой операции. Их несколько:</p>
97 <ul><li>NumPy. Он будет вести запись массива в файл в качестве одномерного. Реализовывается через метод np/ndarray.tolist().</li>
97 <ul><li>NumPy. Он будет вести запись массива в файл в качестве одномерного. Реализовывается через метод np/ndarray.tolist().</li>
98 </ul><ul><li>Google также указывает на то, что есть Pandas, который будет использовать похожий интерфейс. Здесь предусмотрен более широкий функционал. Запись - через метод pd.DataFrame.to_csv(), чтение - pd.read_csv().</li>
98 </ul><ul><li>Google также указывает на то, что есть Pandas, который будет использовать похожий интерфейс. Здесь предусмотрен более широкий функционал. Запись - через метод pd.DataFrame.to_csv(), чтение - pd.read_csv().</li>
99 </ul><ul><li>Согласно Google, можно реализовать поставленную задачу через JSON. Для этого требуются функции load и dump.</li>
99 </ul><ul><li>Согласно Google, можно реализовать поставленную задачу через JSON. Для этого требуются функции load и dump.</li>
100 </ul><ul><li>Pickle - если верить Google, представлен стандартной библиотекой, похожей на JSON.</li>
100 </ul><ul><li>Pickle - если верить Google, представлен стандартной библиотекой, похожей на JSON.</li>
101 </ul><p>Все это поможет лучше разобраться с соответствующей тематикой. В Google полно разнообразной документации как по Питону, так и по Джаве. И<a>вот один из примеров</a>.</p>
101 </ul><p>Все это поможет лучше разобраться с соответствующей тематикой. В Google полно разнообразной документации как по Питону, так и по Джаве. И<a>вот один из примеров</a>.</p>
102 <p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em></p>
102 <p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em></p>
103  
103