#data_structures #general
Связные списки (Linked List)
Связный список состоит из группы узлов, которые вместе образуют последовательность. Каждый узел содержит две вещи: фактические данные, которые в нем хранятся (это могут быть данные любого типа) и указатель (или ссылку) на следующий узел в последовательности. Также существуют двусвязные списки: в них у каждого узла есть указатель и на следующий, и на предыдущий элемент в списке.
Основные операции в связном списке включают добавление, удаление и поиск элемента в списке.
Связные списки (Linked List)
Связный список
— одна из базовых структур данных. Ее часто сравнивают с массивом, так как многие другие структуры можно реализовать с помощью либо массива, либо связного списка. У этих двух типов есть преимущества и недостатки.Связный список состоит из группы узлов, которые вместе образуют последовательность. Каждый узел содержит две вещи: фактические данные, которые в нем хранятся (это могут быть данные любого типа) и указатель (или ссылку) на следующий узел в последовательности. Также существуют двусвязные списки: в них у каждого узла есть указатель и на следующий, и на предыдущий элемент в списке.
Основные операции в связном списке включают добавление, удаление и поиск элемента в списке.
#remoteControl #IDE #tools
Projector — это технология, с помощью которой вы запускаете IDE на базе IntelliJ либо Swing-приложения на сервере. Далее вы можете подключаться к ним откуда угодно, используя браузеры или нативные приложения. Очевидно всем очень полезно.
Есть множество ситуаций, требующих запуска IDE на сервере. Некоторые из них типичны для больших компаний, располагающих огромной инфраструктурой.
Projector — это клиент-серверное ПО. Вы запускаете IDE на сервере, а затем подключаетесь к ней по сети. Соединение между клиентом и сервером очень легковесное и высокоскоростное.
Projector — это технология, с помощью которой вы запускаете IDE на базе IntelliJ либо Swing-приложения на сервере. Далее вы можете подключаться к ним откуда угодно, используя браузеры или нативные приложения. Очевидно всем очень полезно.
Есть множество ситуаций, требующих запуска IDE на сервере. Некоторые из них типичны для больших компаний, располагающих огромной инфраструктурой.
Projector — это клиент-серверное ПО. Вы запускаете IDE на сервере, а затем подключаетесь к ней по сети. Соединение между клиентом и сервером очень легковесное и высокоскоростное.
Что будет результатом выполнения программы?
Anonymous Quiz
17%
Compile error
8%
Hello
17%
ArithmeticException
58%
Hello2
#data_structures #general
Стеки (Stack)
Стек организован по принципу
В стеках можно выполнять три операции: добавление элемента (push), удаление элемента (pop) и отображение содержимого стека (pip).
Стеки (Stack)
Стек
— это базовая структура данных, которая позволяет добавлять или удалять элементы только в её начале. Она похожа на стопку книг: если вы хотите взглянуть на книгу в середине стека, сперва придется убрать лежащие сверху.Стек организован по принципу
LIFO (Last In First Out, «последним пришёл — первым вышел»)
. Это значит, что последний элемент, который вы добавили в стек, первым выйдет из него.В стеках можно выполнять три операции: добавление элемента (push), удаление элемента (pop) и отображение содержимого стека (pip).
#gamedev #math
Как математика используется в программировании?
Математикой в играх может называться просто сложение X и Y, манипулирование синусами, косинусами и т.д, однако в некоторых случаях над реализацией какого-либо правила в игре нужно подумать час-другой.
В качестве примера можно взглянуть на такие процессы, как создание векторов, названных MAXSPEED и MINSPEED, и добавление их в игровой цикл для проверки скоростей, расчёт скорости космического корабля, деформация поверхностей при соударении и изменение траектории и скорости в зависимости от силы удара.
Именно поэтому компании, занимающиеся разработкой игр, требуют от своих сотрудников знания математики и алгоритмов. Знание таких вещей не просто поможет разработать логику игры, но и качественно оптимизировать саму игру, находя альтернативные пути, которые помогают избежать лишних вычислений.
Некоторые вещи, которые полностью опираются на математику: симуляция жидкостей, анимация, алгоритмы, написание игровой логики, расчёт кадров в секунду, игровая физика, графика/Шейдеры, искусственный интеллект, процедурная генерация, рендеринг полигонов, и многие другие...
Как математика используется в программировании?
Математикой в играх может называться просто сложение X и Y, манипулирование синусами, косинусами и т.д, однако в некоторых случаях над реализацией какого-либо правила в игре нужно подумать час-другой.
В качестве примера можно взглянуть на такие процессы, как создание векторов, названных MAXSPEED и MINSPEED, и добавление их в игровой цикл для проверки скоростей, расчёт скорости космического корабля, деформация поверхностей при соударении и изменение траектории и скорости в зависимости от силы удара.
Именно поэтому компании, занимающиеся разработкой игр, требуют от своих сотрудников знания математики и алгоритмов. Знание таких вещей не просто поможет разработать логику игры, но и качественно оптимизировать саму игру, находя альтернативные пути, которые помогают избежать лишних вычислений.
Некоторые вещи, которые полностью опираются на математику: симуляция жидкостей, анимация, алгоритмы, написание игровой логики, расчёт кадров в секунду, игровая физика, графика/Шейдеры, искусственный интеллект, процедурная генерация, рендеринг полигонов, и многие другие...
#data_structures #general
Очереди (Queues)
Эту структуру можно представить как очередь в продуктовом магазине. Первым обслуживают того, кто пришёл в самом начале — всё как в жизни.
Очередь устроена по принципу
Очередь позволяет выполнять две основных операции: добавлять элементы в конец очереди (enqueue) и удалять первый элемент (dequeue).
Очереди (Queues)
Эту структуру можно представить как очередь в продуктовом магазине. Первым обслуживают того, кто пришёл в самом начале — всё как в жизни.
Очередь устроена по принципу
FIFO (First In First Out, «первый пришёл — первый вышел»).
Это значит, что удалить элемент можно только после того, как были убраны все ранее добавленные элементы.Очередь позволяет выполнять две основных операции: добавлять элементы в конец очереди (enqueue) и удалять первый элемент (dequeue).
#science #ASCII #easter
Решайтесь на великие поступки — ASCII
Момент посадки на Марс ровера NASA Perseverance (Настойчивость) стал историческим событием. Человечество впервые увидело нечто подобное. Многие люди с замиранием сердца наблюдали за происходящим. «Настойчивость» многие годы будет служить для нас источником вдохновения.
Интернет-ищейки заявили о том, что им удалось расшифровать скрытое сообщение, нанесённое на купол парашюта, который помог роверу безопасно приземлиться на поверхность Красной планеты. Как оказалось, фраза «Dare Mighty Things» («Решайтесь на великие поступки») — девиз лаборатории реактивного движения NASA (Jet Propulsion Laboratory) — была закодирована на парашюте с использованием красных и белых полос, представляющих двоичный компьютерный код. Этот код, что неудивительно, можно, используя некоторые вычисления, перевести в кодировку ASCII и, в итоге, понять то, что в нём скрыто.
Решайтесь на великие поступки — ASCII
Момент посадки на Марс ровера NASA Perseverance (Настойчивость) стал историческим событием. Человечество впервые увидело нечто подобное. Многие люди с замиранием сердца наблюдали за происходящим. «Настойчивость» многие годы будет служить для нас источником вдохновения.
Интернет-ищейки заявили о том, что им удалось расшифровать скрытое сообщение, нанесённое на купол парашюта, который помог роверу безопасно приземлиться на поверхность Красной планеты. Как оказалось, фраза «Dare Mighty Things» («Решайтесь на великие поступки») — девиз лаборатории реактивного движения NASA (Jet Propulsion Laboratory) — была закодирована на парашюте с использованием красных и белых полос, представляющих двоичный компьютерный код. Этот код, что неудивительно, можно, используя некоторые вычисления, перевести в кодировку ASCII и, в итоге, понять то, что в нём скрыто.
#python
Immutable vs Mutable Data Types in Python
Mutable sequences can be changed after creation. Some of Python’s mutable data types are: lists, byte arrays, sets, and dictionaries.
Immutable data types differ from their mutable counterparts in that they can not be changed after creation. Some immutable types include numeric data types, strings, bytes, frozen sets, and tuples.
Immutable vs Mutable Data Types in Python
Mutable sequences can be changed after creation. Some of Python’s mutable data types are: lists, byte arrays, sets, and dictionaries.
Immutable data types differ from their mutable counterparts in that they can not be changed after creation. Some immutable types include numeric data types, strings, bytes, frozen sets, and tuples.
#html #fiction
Книга-игра Гарри Гаррисона на HTML
Есть одно произведение. Называется "Стань Стальной Крысой" и является текстовым квестом, в котором читатель по ходу сюжета должен выбирать варианты действий из предложенных. Особенно интересно было бродить в лабиринте. Туда без блокнота и карандаша не стоило и соваться! Очень странный опыт.
Оригинал - http://www.moris.ru/~spinoza/steelrat/index.html
Не так давно мне стало интересно, а есть ли в Интернете варианты реализации этой игры на каких-либо языках программирования. Покопавшись в Сети, нашел вот этот сайт - https://bolknote.ru/all/3322/
Книга-игра Гарри Гаррисона на HTML
Есть одно произведение. Называется "Стань Стальной Крысой" и является текстовым квестом, в котором читатель по ходу сюжета должен выбирать варианты действий из предложенных. Особенно интересно было бродить в лабиринте. Туда без блокнота и карандаша не стоило и соваться! Очень странный опыт.
Оригинал - http://www.moris.ru/~spinoza/steelrat/index.html
Не так давно мне стало интересно, а есть ли в Интернете варианты реализации этой игры на каких-либо языках программирования. Покопавшись в Сети, нашел вот этот сайт - https://bolknote.ru/all/3322/
bolknote.ru
Стань стальной крысой!
Решил показать жене игру-книгу «Стань стальной крысой». Но оказалось, что читать и переходить по ссылкам в таком варианте неудобно
#data_structures #general
Множества (Sets)
Множество хранит значения данных без определенного порядка, не повторяя их. Оно позволяет не только добавлять и удалять элементы: есть ещё несколько важных функций, которые можно применять к двум множествам сразу.
Множества (Sets)
Множество хранит значения данных без определенного порядка, не повторяя их. Оно позволяет не только добавлять и удалять элементы: есть ещё несколько важных функций, которые можно применять к двум множествам сразу.
⟡
Объединение комбинирует все элементы из двух разных множеств, превращая их в одно (без дубликатов).⟡
Пересечение анализирует два множества и создает еще одно из тех элементов, которые присутствуют в обоих изначальных множествах.⟡
Разность выводит список элементов, которые есть в одном множестве, но отсутствуют в другом.⟡
Подмножество выдает булево значение, которое показывает, включает ли одно множество все элементы другого множества.#java
Что такое Heap и Stack память в Java?
Java Heap (куча) используется Java Runtime для выделения памяти под объекты и JRE классы. Создание нового объекта также происходит в куче. Здесь работает сборщик мусора: освобождает память путем удаления объектов, на которые нет каких-либо ссылок. Любой объект, созданный в куче, имеет глобальный доступ и на него могут ссылаться с любой части приложения.
Стековая память в Java работает по схеме LIFO (Последний-зашел-Первый-вышел). Всякий раз, когда вызывается метод, в памяти стека создается новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок также перестает использоваться, тем самым предоставляя доступ для следующего метода.Размер стековой памяти намного меньше объема памяти в куче.
Что такое Heap и Stack память в Java?
(1/2)
⟡
Java Heap памятьJava Heap (куча) используется Java Runtime для выделения памяти под объекты и JRE классы. Создание нового объекта также происходит в куче. Здесь работает сборщик мусора: освобождает память путем удаления объектов, на которые нет каких-либо ссылок. Любой объект, созданный в куче, имеет глобальный доступ и на него могут ссылаться с любой части приложения.
⟡
Stack память в JavaСтековая память в Java работает по схеме LIFO (Последний-зашел-Первый-вышел). Всякий раз, когда вызывается метод, в памяти стека создается новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок также перестает использоваться, тем самым предоставляя доступ для следующего метода.Размер стековой памяти намного меньше объема памяти в куче.
#java
Разница между Stack и Heap памятью в Java
Разница между Stack и Heap памятью в Java
(2/2)
⟡
Куча используется всеми частями приложения в то время как стек используется только одним потоком исполнения программы.⟡
Всякий раз, когда создается объект, он всегда хранится в куче, а в памяти стека содержится ссылка на него. Память стека содержит только локальные⟡
Объекты в куче доступны с любой точки программы, в то время как стековая память не может быть доступна для других потоков.⟡
Управление памятью в стеке осуществляется по схеме LIFO.⟡
Размер памяти стека намного меньше памяти в куче. Из-за простоты распределения памяти (LIFO), стековая память работает намного быстрее кучи.#data_structures #general
Карта (Map)
Map — это структура, которая хранит данные в парах ключ/значение, где каждый ключ уникален. Иногда её также называют ассоциативным массивом или словарём. Map часто используют для быстрого поиска данных. Она позволяет делать следующие вещи:
Карта (Map)
Map — это структура, которая хранит данные в парах ключ/значение, где каждый ключ уникален. Иногда её также называют ассоциативным массивом или словарём. Map часто используют для быстрого поиска данных. Она позволяет делать следующие вещи:
⟡
добавлять пары в коллекцию;⟡
удалять пары из коллекции;⟡
изменять существующей пары;⟡
искать значение, связанное с определенным ключом.#news #crystal
Вышел язык программирования Crystal
На днях вышла версия 1.0 языка — Crystal.
Если вы не слышали о проекте раньше, то вот краткое его описание. Crystal — это высокоуровневый объектно-ориентированный язык программирования. Его синтаксис очень похож на синтаксис Ruby, но отличается от своего конкурента тем, что компилируется в машинный код посредством LLVM.
По словам разработчиков и сторонних компаний, которые уже протестировали язык, производительность приложений, написанных на Crystal сравнима с приложениями на С. Последний считается более сложным для освоения, чем Ruby. Таким образом, создатели Crystal убивают сразу двух зайцев — дают возможность писать быстрые приложения, и обеспечивают низкий порог входа в разработку.
Вышел язык программирования Crystal
На днях вышла версия 1.0 языка — Crystal.
Если вы не слышали о проекте раньше, то вот краткое его описание. Crystal — это высокоуровневый объектно-ориентированный язык программирования. Его синтаксис очень похож на синтаксис Ruby, но отличается от своего конкурента тем, что компилируется в машинный код посредством LLVM.
По словам разработчиков и сторонних компаний, которые уже протестировали язык, производительность приложений, написанных на Crystal сравнима с приложениями на С. Последний считается более сложным для освоения, чем Ruby. Таким образом, создатели Crystal убивают сразу двух зайцев — дают возможность писать быстрые приложения, и обеспечивают низкий порог входа в разработку.
#java
Что такое пул строк в Java?
Пул строк (String Pool) — это множество строк в кучи (Java Heap Memory). Мы знаем, что String — особый класс в java, с помощью которого мы можем создавать строковые объекты.
Когда мы используем двойные кавычки, чтобы создать новую строку, то первым делом идет поиск строки с таким же значением в пуле строк. Если java такую строку нашла, то возвращает ссылку, в противном случае создается новая строка в пуле, а затем возвращается ссылка.
Однако использование оператора new заставляет класс String создать новый объект String. После этого можем использовать метод intern(), чтобы поместить этот объект в пул строк или обратиться к другому объекту из пула строк, который имеет такое же значение.
Что такое пул строк в Java?
Пул строк (String Pool) — это множество строк в кучи (Java Heap Memory). Мы знаем, что String — особый класс в java, с помощью которого мы можем создавать строковые объекты.
⟡
Пример работы с пулом строкКогда мы используем двойные кавычки, чтобы создать новую строку, то первым делом идет поиск строки с таким же значением в пуле строк. Если java такую строку нашла, то возвращает ссылку, в противном случае создается новая строка в пуле, а затем возвращается ссылка.
Однако использование оператора new заставляет класс String создать новый объект String. После этого можем использовать метод intern(), чтобы поместить этот объект в пул строк или обратиться к другому объекту из пула строк, который имеет такое же значение.
#java
Классы-обертки в Java
Все дело в том, что коллекции это набор объектов и для того, чтобы оперировать примитивными типами как объектами и были придуманы классы обертки.
Как и все объекты, переменные созданы с помощью классов оберток будут храниться в куче (heap). НО, есть одно важное замечание, о котором часто любят спрашивать в тестах или собеседованиях. Оно касается целочисленных классов оберток. Неявное создание таких переменных со значением в диапазоне -128 +127 будут храниться в пуле. Потому такие обертки с одинаковыми значениями будут являться ссылками на один объект.
Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива — типу «класса-обертки». Попытка автоупаковать переменную типа byte в Short, без предварительного явного приведения byte->short вызовет ошибку компиляции.
Ну и конечно же, классы-обертки расширяют возможности работы с примитивами, предоставляя удобные методы и поля.
Классы-обертки в Java
Все дело в том, что коллекции это набор объектов и для того, чтобы оперировать примитивными типами как объектами и были придуманы классы обертки.
Как и все объекты, переменные созданы с помощью классов оберток будут храниться в куче (heap). НО, есть одно важное замечание, о котором часто любят спрашивать в тестах или собеседованиях. Оно касается целочисленных классов оберток. Неявное создание таких переменных со значением в диапазоне -128 +127 будут храниться в пуле. Потому такие обертки с одинаковыми значениями будут являться ссылками на один объект.
Автоупаковка переменных примитивных типов требует точного соответствия типа исходного примитива — типу «класса-обертки». Попытка автоупаковать переменную типа byte в Short, без предварительного явного приведения byte->short вызовет ошибку компиляции.
Ну и конечно же, классы-обертки расширяют возможности работы с примитивами, предоставляя удобные методы и поля.
#java
Хэш-таблицы (Hash table)
Хэш-таблица — это похожая на Map структура, которая содержит пары ключ/значение. Она использует хэш-функцию для вычисления индекса в массиве из блоков данных, чтобы найти желаемое значение.
Обычно хэш-функция принимает строку символов в качестве вводных данных и выводит числовое значение. Для одного и того же ввода хэш-функция должна возвращать одинаковое число. Если два разных ввода хэшируются с одним и тем же итогом, возникает коллизия. Цель в том, чтобы таких случаев было как можно меньше.
Таким образом, когда вы вводите пару ключ/значение в хэш-таблицу, ключ проходит через хэш-функцию и превращается в число. В дальнейшем это число используется как фактический ключ, который соответствует определенному значению. Когда вы снова введёте тот же ключ, хэш-функция обработает его и вернет такой же числовой результат. Затем этот результат будет использован для поиска связанного значения. Такой подход заметно сокращает среднее время поиска.
Хэш-таблицы (Hash table)
Хэш-таблица — это похожая на Map структура, которая содержит пары ключ/значение. Она использует хэш-функцию для вычисления индекса в массиве из блоков данных, чтобы найти желаемое значение.
Обычно хэш-функция принимает строку символов в качестве вводных данных и выводит числовое значение. Для одного и того же ввода хэш-функция должна возвращать одинаковое число. Если два разных ввода хэшируются с одним и тем же итогом, возникает коллизия. Цель в том, чтобы таких случаев было как можно меньше.
Таким образом, когда вы вводите пару ключ/значение в хэш-таблицу, ключ проходит через хэш-функцию и превращается в число. В дальнейшем это число используется как фактический ключ, который соответствует определенному значению. Когда вы снова введёте тот же ключ, хэш-функция обработает его и вернет такой же числовой результат. Затем этот результат будет использован для поиска связанного значения. Такой подход заметно сокращает среднее время поиска.
#java
JDBC
Java Database Connectivity – это стандартный API для независимого соединения языка программирования Java с различными базами данных (далее – БД).
JDBC решает следующие задачи:
Одним из недостатков JDBC является то, что код, который получается в конце — выглядит очень большим по объему (хотя работы он выполняет не много). Также, очень сложно приходится, когда объект джава который мы пытаемся сохранить в базе или достать — достаточно большой. Нужно правильно замапить поля базы данных и поля класса Java. Бывает такое, что в процессе работы нужно добавить поле к готовой таблице в базе. И потом нужно находить все запросы в базу в коде приложения чтобы добавить это поле. Чтобы прочувствовать всю «боль» работы с JDBC, нужно с ним поработать. А для тех, кто уже знаком с этим функционалом я думаю объяснения будут излишне.
JDBC
Java Database Connectivity – это стандартный API для независимого соединения языка программирования Java с различными базами данных (далее – БД).
JDBC решает следующие задачи:
⟡
Создание соединения с БД⟡
Создание SQL выражений⟡
Выполнение SQL – запросов⟡
Просмотр и модификация полученных записейОдним из недостатков JDBC является то, что код, который получается в конце — выглядит очень большим по объему (хотя работы он выполняет не много). Также, очень сложно приходится, когда объект джава который мы пытаемся сохранить в базе или достать — достаточно большой. Нужно правильно замапить поля базы данных и поля класса Java. Бывает такое, что в процессе работы нужно добавить поле к готовой таблице в базе. И потом нужно находить все запросы в базу в коде приложения чтобы добавить это поле. Чтобы прочувствовать всю «боль» работы с JDBC, нужно с ним поработать. А для тех, кто уже знаком с этим функционалом я думаю объяснения будут излишне.
JPA призвана устранить вышеперечисленные недостатки.
#java
JPA
Спецификация Java Persistence API — это технология, которая позволяет удобно мапить объект Java и таблицу базы данных.
В JDBC при написании каждого запроса, Вам необходимо указать в коде все детали, необходимые для операций CRUD, такие как имена таблиц, имена столбцов. В JPA (которая использует JDBC «под капотом»).
Сама по себе спецификация JPA не является инструментом или фреймворком; скорее, она определяет набор концепций, которые могут и должны быть реализованы любым другим инструментом.
Так как JPA — это просто спецификация, Вам нужен инструмент для ее реализации. Этим инструментом может быть Hibernate, TopLink, iBatis и т. д.
Вы можете рассматривать JPA как интерфейс, а Hibernate — как реализацию.
Hibernate — это популярный фреймворк, цель которого связать ООП и реляционную базу данных. Работа с Hibernate сократит время разработки проекта в сравнении с обычным JDBC.
JPA
Спецификация Java Persistence API — это технология, которая позволяет удобно мапить объект Java и таблицу базы данных.
В JDBC при написании каждого запроса, Вам необходимо указать в коде все детали, необходимые для операций CRUD, такие как имена таблиц, имена столбцов. В JPA (которая использует JDBC «под капотом»).
Сама по себе спецификация JPA не является инструментом или фреймворком; скорее, она определяет набор концепций, которые могут и должны быть реализованы любым другим инструментом.
Так как JPA — это просто спецификация, Вам нужен инструмент для ее реализации. Этим инструментом может быть Hibernate, TopLink, iBatis и т. д.
Вы можете рассматривать JPA как интерфейс, а Hibernate — как реализацию.
Hibernate — это популярный фреймворк, цель которого связать ООП и реляционную базу данных. Работа с Hibernate сократит время разработки проекта в сравнении с обычным JDBC.
#java
Воздушные тонкие блины на молоке.
Налить в подходящую емкость молоко комнатной температуры, вбить туда яйца, добавить соль и сахар.
Все размешать, оставить на 15–20 минут и потом добавить растительное масло. Кстати, тесто для блинов можно оставить в холодильнике и приготовить блины позже. С ним ничего не случится.
На сильно раскаленную сковороду налить немного масла и жарить блины.
Постепенно подсыпать муку, при этом помешивая, чтобы не получалось комочков. Они все равно будут получаться, так что помешивать надо качественно. Довести до консистенции нежирной сметаны. Добавить разрыхлитель.
Воздушные тонкие блины на молоке.
Налить в подходящую емкость молоко комнатной температуры, вбить туда яйца, добавить соль и сахар.
Все размешать, оставить на 15–20 минут и потом добавить растительное масло. Кстати, тесто для блинов можно оставить в холодильнике и приготовить блины позже. С ним ничего не случится.
На сильно раскаленную сковороду налить немного масла и жарить блины.
Постепенно подсыпать муку, при этом помешивая, чтобы не получалось комочков. Они все равно будут получаться, так что помешивать надо качественно. Довести до консистенции нежирной сметаны. Добавить разрыхлитель.