Java IO модель
Ключевые слова: InputStream, OutputStream, Reader, Writer, блокировка.
Java NIO
Ключевые слова: Channel, Buffer, Selector, неблокирующий, мультиплексирование.
Сериализация в Java
Ключевые слова: Serializable, serialVersionUID, transient, Externalizable, writeObject, readObject.
Сетевое программирование на Java
Ключевые слова: Socket, ServerSocket, DatagramPacket, DatagramSocket.
Инструменты ввода-вывода в Java
Ключевые слова: File, RandomAccessFile, System, Scanner.
Ключевые слова: процесс, поток, безопасность, активность, производительность, тупик, голод, переключение контекста.
Ключевые слова: Thread, Runnable, Callable, Future, wait, notify, notifyAll, join, sleep, yield, состояние потока, взаимодействие потоков.
Ключевые слова: synchronized, volatile, CAS, ThreadLocal.
Ключевые слова: AQS, ReentrantLock, ReentrantReadWriteLock, Condition.
Ключевые слова: CAS, Atomic.
Ключевые слова: ConcurrentHashMap, CopyOnWriteArrayList.
Ключевые слова: Executor, ExecutorService, ThreadPoolExecutor, Executors.
Ключевые слова: CountDownLatch, CyclicBarrier, Semaphore.
Ключевые слова: JMM, volatile, synchronized, final, Happens-Before, барьер памяти.
Ключевые слова: программный счётчик, стек виртуальной машины, стек локальных методов, куча, область методов, пул констант времени выполнения, прямая память, OutOfMemoryError, StackOverflowError.
Ключевые слова: GC Roots, Serial, Parallel, CMS, G1, Minor GC, Full GC.
Ключевые слова: bytecode, asm, javassist.
Ключевые слова: ClassLoader, родительская делегирующая загрузка.
Ключевые слова: jps, jstat, jmap, jstack, jhat, jinfo.
Ключевые слова: jconsole, jvisualvm, MAT, JProfile, Arthas.
Ключевые слова: конфигурация, оптимизация.
Ключевые слова: процессор, память, диск, сеть, сборщик мусора.
Tomcat и Jetty — популярные лёгкие серверы Java. Nginx — популярный обратный прокси-сервер, также часто используется для балансировки нагрузки.
Spring — это популярный фреймворк для разработки приложений на Java. Он предоставляет разработчикам набор инструментов и библиотек, которые упрощают разработку, тестирование и развёртывание приложений.
Основные принципы Spring включают:
Spring Bean — это объект, управляемый контейнером Spring. Контейнер отвечает за создание, настройку и уничтожение бинов. Бины могут быть одиночными (singleton) или прототипами (prototype).
Spring IoC — это механизм, с помощью которого контейнер Spring управляет жизненным циклом бинов и их зависимостей. IoC позволяет отделить логику приложения от деталей реализации и упрощает тестирование и повторное использование кода.
Spring Dependency Lookup — процесс поиска зависимостей между бинами в контейнере Spring. Spring использует различные механизмы для поиска зависимостей, такие как автоматическое подключение (autowiring) и явное указание зависимостей в конфигурации.
Spring Dependency Injection — механизм внедрения зависимостей между бинами в контейнере Spring. DI позволяет автоматически создавать и настраивать объекты, что упрощает разработку и тестирование приложений.
Spring IoC Dependency Source — источник, из которого Spring получает информацию о зависимостях между бинами. Источником может быть конфигурация XML, аннотации или код Java.
Spring Bean Scope — область видимости бина в контейнере Spring. Область видимости определяет, сколько экземпляров бина будет создано и как долго они будут существовать. В Spring доступны следующие области видимости: singleton, prototype, request, session и global session.
Spring Bean Lifecycle — жизненный цикл бина в контейнере Spring. Жизненный цикл включает в себя создание, инициализацию, использование и уничтожение бина. Spring позволяет настроить жизненный цикл бинов с помощью методов обратного вызова (lifecycle callbacks).
Spring Configuration Metadata — метаданные, описывающие конфигурацию бинов в контейнере Spring. Метаданные могут быть представлены в виде XML-файла, аннотаций или кода Java.
Spring AOP — аспектно-ориентированное программирование в Spring. AOP позволяет разделить сквозные задачи, такие как безопасность и логирование, от основной логики приложения и упростить их реализацию.
Spring Resource Management — управление ресурсами, такими как файлы, базы данных и сети, в приложениях Spring. Spring предоставляет инструменты для работы с различными типами ресурсов и обеспечивает их безопасность.
Spring Validation — проверка данных в приложениях Spring. Spring предоставляет механизмы для проверки входных данных, таких как формы и запросы, и позволяет генерировать сообщения об ошибках.
Spring Data Binding — привязка данных к объектам модели в приложениях Spring. Spring обеспечивает автоматическую привязку данных из форм и запросов к полям объектов модели.
Spring Type Conversion — преобразование типов данных в приложениях Spring. Spring позволяет преобразовывать данные из одного типа в другой, например, строки в числа или даты.
Spring EL Expression — язык выражений в Spring, используемый для динамического вычисления значений. Spring EL позволяет создавать выражения, которые могут быть оценены во время выполнения.
Spring Event — событие в Spring, которое может быть вызвано определённым действием. Spring позволяет регистрировать обработчики событий и выполнять их при возникновении события.
Spring Internationalization — интернационализация приложений Spring. Spring позволяет разрабатывать приложения, которые поддерживают несколько языков и локалей.
Spring Generic Handling — обработка обобщённых типов в приложениях Spring. Spring позволяет использовать обобщённые типы и методы в коде Java.
Spring Annotation — аннотация в Spring, которая используется для настройки бинов и других элементов приложения. Spring поддерживает различные типы аннотаций, такие как @Component, @Autowired и @Configuration.
Spring Environment Abstraction — абстракция среды в Spring. Spring позволяет получать доступ к информации о среде выполнения, такой как свойства системы, переменные окружения и параметры командной строки.
Это лишь краткое описание основных принципов Spring. Для более подробного изучения рекомендуется обратиться к официальной документации Spring или другим источникам информации. Широ (Shiro) проще, легче и понятнее, чем другие решения, и может удовлетворить большинство базовых потребностей в области безопасности.
Широ (Shiro):
Spring Security имеет более широкий функционал и сложнее, чем Shiro. Стоит отметить, что Spring Security разрабатывается командой Spring, поэтому его интеграция с Spring и Spring Boot проще.
IO
Shiro:
Java-промежуточное ПО:
Кэширование: кэширование можно назвать основным средством оптимизации производительности системы. Кэширование применяется в различных технологиях. Если вы хотите глубже изучить кэширование, рекомендуется сначала ознакомиться с основами кэширования, чтобы понять характеристики, принципы работы кэширования и типичные проблемы и решения при использовании кэширования.
Вопросы для собеседования по кэшированию.
Java-кэширующее промежуточное ПО.
Быстрое введение в Memcached.
Быстрое введение в Ehcache.
Внутреннее кэширование процессов Java.
HTTP-кэширование.
Контроль трафика: Hystrix.
Компьютерные науки
Структуры данных и алгоритмы:
Базы данных:
Промежуточное ПО для баз данных:
Реляционные базы данных:
MySQL:
Другие:
API (Application Programming Interface) — это интерфейс прикладного программирования, который позволяет приложениям взаимодействовать друг с другом.
Elastic
Elastic — компания, которая разрабатывает и поддерживает продукты для поиска и анализа данных. Продукты Elastic включают в себя Elasticsearch, Logstash, Kibana и другие инструменты.
Elasticsearch Java API
Elasticsearch Java API — это набор библиотек для работы с Elasticsearch на языке Java. Он предоставляет разработчикам возможность создавать, изменять и удалять документы в индексе Elasticsearch.
Elasticsearch High Level REST Client
High Level REST Client — это клиентская библиотека для Elasticsearch, которая упрощает работу с REST API Elasticsearch. Она предоставляет более высокий уровень абстракции, чем низкоуровневый REST API.
Elasticsearch Cluster and Sharding
Cluster and Sharding — это функции Elasticsearch, которые позволяют распределять данные по нескольким узлам кластера и обеспечивать высокую доступность и производительность.
Elasticsearch Operations
Operations — это задачи, связанные с управлением кластером Elasticsearch, такие как мониторинг, настройка, резервное копирование и восстановление.
Сеть
Сеть — это совокупность компьютеров и других устройств, связанных между собой для обмена данными. Сеть может быть локальной или глобальной.
Computer Network Interview Summary
Computer Network Interview Summary — это обзор основных вопросов, которые могут задать на собеседовании по компьютерным сетям.
Computer Networks Guide
Computer Networks Guide — это руководство по компьютерным сетям, которое содержит информацию о различных аспектах компьютерных сетей, таких как топология, протоколы, устройства и т. д.
Network Layers
Network Layers — это уровни модели OSI (Open Systems Interconnection), которая описывает взаимодействие между компьютерами в сети. Модель OSI состоит из семи уровней: физического, канального, сетевого, транспортного, сеансового, представления и прикладного.
Physical Layer
Physical Layer — это первый уровень модели OSI, который отвечает за передачу битов по физической среде, такой как кабель или радиоволны.
Data Link Layer
Data Link Layer — это второй уровень модели OSI, который обеспечивает надёжную передачу данных по каналу связи.
Network Layer
Network Layer — это третий уровень модели OSI, который определяет маршрут передачи данных от отправителя к получателю.
Transport Layer
Transport Layer — это четвёртый уровень модели OSI, который управляет передачей данных между двумя конечными точками.
Application Layer
Application Layer — это седьмой уровень модели OSI, на котором работают приложения, использующие сеть.
Hypertext Transfer Protocol (HTTP)
Hypertext Transfer Protocol — это протокол, используемый для передачи гипертекста, такого как веб-страницы, между клиентом и сервером.
Domain Name System (DNS)
Domain Name System — это система, которая преобразует доменные имена в IP-адреса.
Transmission Control Protocol (TCP)
Transmission Control Protocol — это надёжный протокол передачи данных, который гарантирует доставку данных в правильном порядке.
User Datagram Protocol (UDP)
User Datagram Protocol — это ненадёжный протокол передачи данных, который не гарантирует доставку данных.
Internet Control Message Protocol (ICMP)
Internet Control Message Protocol — это вспомогательный протокол, который используется для диагностики проблем в сети.
Распределённая система
Распределённая система — это компьютерная система, состоящая из нескольких узлов, которые взаимодействуют друг с другом для выполнения общей задачи.
Distributed Systems Interview Summary
Distributed Systems Interview Summary — это обзор основных вопросов, которые могут задать на собеседовании по распределённым системам.
Distributed Theory
Distributed Theory — это раздел информатики, который изучает принципы проектирования и реализации распределённых систем.
Paxos Algorithm
Paxos — это алгоритм достижения консенсуса в распределённой системе. Алгоритм Paxos позволяет нескольким узлам договориться о значении некоторого параметра.
Raft Algorithm
Raft — это ещё один алгоритм достижения консенсуса в распределённой системе, похожий на Paxos.
Gossip Algorithm
Gossip — это метод распространения информации в распределённой системе. В алгоритме Gossip узлы периодически обмениваются информацией о своих соседях.
Replication
Replication — это процесс создания копий данных на нескольких узлах распределённой системы. Репликация обеспечивает высокую доступность данных и их устойчивость к сбоям.
Partitioning
Partitioning — это разделение данных на несколько частей, каждая из которых хранится на отдельном узле. Разделение данных позволяет распределить нагрузку между узлами и повысить производительность системы.
Leader Election
Leader Election — это процесс выбора лидера в распределённой системе. Лидер отвечает за координацию действий других узлов.
Transactions
Transactions — это механизм обеспечения целостности данных в распределённой системе. Транзакции позволяют выполнять несколько операций над данными как одну операцию.
Locks
Locks — это механизм синхронизации доступа к данным в распределённой системе. Блокировки позволяют избежать конфликтов при одновременном изменении данных несколькими узлами.
ZooKeeper
ZooKeeper — это распределённая система координации, которая используется для управления конфигурацией, распределением ресурсов и другими задачами в распределённых системах.
Flow Control
Flow Control — это механизм ограничения скорости передачи данных в сети. Управление потоком позволяет избежать перегрузки сети и потери данных.
Load Balancing
Load Balancing — это распределение нагрузки между несколькими серверами. Балансировка нагрузки позволяет повысить производительность и доступность системы.
Service Routing
Service Routing — это выбор маршрута передачи данных между клиентами и серверами. Маршрутизация позволяет оптимизировать трафик и обеспечить высокое качество обслуживания.
Session Management
Session Management — это управление сеансами взаимодействия между клиентами и серверами. Управление сеансами позволяет обеспечить безопасность и конфиденциальность данных.
ID Generation
ID Generation — это создание уникальных идентификаторов для объектов в распределённой системе. Генерация идентификаторов позволяет избежать коллизий и обеспечить уникальность объектов.
Fault Tolerance
Fault Tolerance — это способность системы продолжать работу после отказа одного или нескольких компонентов. Отказоустойчивость обеспечивается путём резервирования компонентов и использования механизмов восстановления.
RPC
RPC (Remote Procedure Call) — это технология вызова удалённых процедур, которая позволяет вызывать функции на удалённом сервере, как если бы они были локальными. RPC
RPC (Remote Procedure Call) — это технология удалённого вызова процедур, которая позволяет одной программе вызывать процедуры или функции другой программы, расположенной на другом компьютере в сети.
RPC является важным инструментом для создания распределённых систем и обеспечивает взаимодействие между различными компонентами системы. Он позволяет разработчикам создавать приложения, которые могут работать на разных компьютерах и взаимодействовать друг с другом через сеть.
В основе RPC лежит идея о том, что программа может вызывать процедуру или функцию на удалённом компьютере так же, как она вызывает процедуру или функцию локально. Для этого используется специальный протокол, который определяет формат запроса и ответа, а также способ передачи данных между компьютерами.
Существует несколько реализаций RPC, таких как DCE RPC, CORBA, SOAP и другие. Они различаются по сложности, производительности и безопасности.
Основные компоненты RPC:
Для обеспечения надёжности и безопасности RPC использует различные механизмы, такие как аутентификация, шифрование и контроль доступа. Это позволяет защитить систему от несанкционированного доступа и атак.
Преимущества RPC:
Недостатки RPC:
RPC широко используется в различных областях, таких как веб-сервисы, облачные вычисления, научные вычисления и другие.
MQ (Message Queue)
Message Queue (MQ) — это система обмена сообщениями, которая обеспечивает асинхронное взаимодействие между приложениями и службами. Она позволяет отправлять и получать сообщения без необходимости установления соединения между отправителем и получателем.
MQ является важным компонентом распределённых систем, поскольку он обеспечивает гибкость, масштабируемость и отказоустойчивость. Он также позволяет снизить нагрузку на сеть и серверы за счёт асинхронной обработки сообщений.
Существуют различные реализации MQ, такие как RabbitMQ, Kafka, ActiveMQ и другие. Они отличаются по функциональности, производительности, надёжности и стоимости.
Основные понятия MQ:
Для обеспечения безопасности MQ использует различные механизмы, такие как шифрование, аутентификация и авторизация. Это позволяет предотвратить несанкционированный доступ к данным и системам.
Преимущества MQ:
Недостатки MQ:
MQ широко используется в различных отраслях, таких как финансы, здравоохранение, транспорт и другие.
Kafka
Apache Kafka — это распределённая система обмена сообщениями с открытым исходным кодом, разработанная компанией Apache Software Foundation. Она обеспечивает высокую пропускную способность, низкую задержку и надёжность при обработке больших объёмов данных.
Kafka используется для потоковой обработки данных, где данные поступают непрерывно и должны быть обработаны в реальном времени. Она также используется для интеграции данных из различных источников и для построения конвейеров данных.
Основные особенности Kafka:
Kafka состоит из нескольких компонентов:
Kafka поддерживает различные протоколы связи, такие как TCP, SSL и SASL, для обеспечения безопасности и конфиденциальности данных.
RocketMQ
RocketMQ — это высокопроизводительная система обмена сообщениями с открытым исходным кодом, разработанная Alibaba Group. Она предоставляет аналогичные функции Kafka, но с некоторыми отличиями в архитектуре и реализации.
RocketMQ использует модель «точка-точка» для обмена сообщениями, в которой каждое сообщение отправляется от одного производителя одному или нескольким потребителям. Это обеспечивает более высокую скорость обработки и меньшую задержку, чем в модели «публикация-подписка», используемой Kafka.
Другие MQ
Помимо Kafka и RocketMQ существуют другие системы обмена сообщениями, такие как ActiveMQ, RabbitMQ и IBM MQ. Они имеют свои особенности и преимущества, но в целом обеспечивают аналогичные функции.
Распределённое хранение данных
Распределённое хранилище данных — это система хранения данных, которая распределяет данные по нескольким узлам или серверам для повышения доступности, надёжности и производительности. Оно используется для больших объёмов данных, которые не могут быть эффективно обработаны одним сервером.
Существует два основных типа распределённого хранилища данных:
Реляционные базы данных, такие как MySQL, Oracle и PostgreSQL, используются для традиционных приложений, требующих строгой согласованности данных и сложных запросов. Однако они имеют ограничения по масштабируемости и производительности при работе с большими объёмами данных.
Нереляционные базы данных, такие как Cassandra, MongoDB и HBase, используются для современных приложений, требующих высокой доступности, низкой задержки и горизонтального масштабирования. Они обеспечивают более гибкое и эффективное хранение данных, но требуют другого подхода к разработке и управлению данными.
Выбор между реляционным и нереляционным хранилищем зависит от требований приложения, таких как объём данных, тип данных, требования к доступности и производительности.
Программирование
Программирование — это процесс создания компьютерных программ с использованием языков программирования. Программирование включает в себя разработку алгоритмов, написание кода, тестирование и отладку программ.
Языки программирования — это формальные языки, используемые для написания программ. Существует множество языков программирования, таких как Python, Java, C++, JavaScript и другие. Каждый язык имеет свои особенности, преимущества и недостатки.
Python — это интерпретируемый язык программирования высокого уровня, используемый для разработки веб-приложений, научных вычислений, машинного обучения и других задач. Python имеет простой синтаксис, большое сообщество разработчиков и множество библиотек и фреймворков.
Java — это объектно-ориентированный язык программирования общего назначения, используемый для создания настольных, мобильных и веб-приложений. Java имеет строгую типизацию, безопасность и переносимость.
C++ — это компилируемый язык программирования среднего уровня, используемый для создания высокопроизводительных приложений, игр и операционных систем. C++ имеет низкоуровневый доступ к памяти, высокую производительность и гибкость.
JavaScript — это скриптовый язык программирования, используемый для веб-разработки, создания интерактивных веб-сайтов и мобильных приложений. JavaScript имеет динамическую типизацию, лёгкость изучения и поддержку в браузерах.
Каждый язык программирования имеет свою область применения и подходит для определённых задач. Выбор языка программирования зависит от опыта разработчика, требований проекта и предпочтений.
Проектирование
Проектирование — это процесс разработки архитектуры и дизайна системы или продукта. Проектирование включает в себя анализ требований, определение структуры, выбор технологий и создание документации.
Архитектура системы — это структура и организация системы, включая её компоненты, связи между ними и принципы работы. Архитектура определяет основные свойства системы, такие как надёжность, доступность, масштабируемость и безопасность.
Дизайн системы — это детализация архитектуры, включая выбор конкретных технологий, методов и шаблонов проектирования. Дизайн определяет реализацию системы, её удобство использования и качество.
Существует множество подходов к проектированию, таких как структурное проектирование, объектно-ориентированное проектирование, функциональное проектирование и другие. Подход к проектированию зависит от типа системы, её сложности и требований.
Структурное проектирование — это подход к проектированию, основанный на декомпозиции системы на модули и подсистемы. Структурное проектирование обеспечивает модульность, иерархию и абстракцию.
Объектно-ориентированное проектирование — это подход к проектированию, основанный на использовании объектов и классов. Объектно-ориентированное проектирование обеспечивает инкапсуляцию, полиморфизм и наследование.
Функциональное проектирование — это подход к проектированию, основанный на разделении системы на функции и процессы. Функциональное проектирование обеспечивает параллелизм, асинхронность и событийно-управляемое поведение.
Проектирование является важным этапом разработки системы, поскольку оно определяет её качество, стоимость и время разработки. Итератор (Iterator)
Наблюдатель (Observer)
Интерпретатор (Interpreter)
Посредник (Mediator)
Цепочка обязанностей (Chain of Responsibility)
Хранитель (Memento)
Стратегия (Strategy)
Посетитель (Visitor)
Состояние (State)
Плохой вкус кода и рефакторинг
Раздувание кода
Чрезмерное использование объектно-ориентированного подхода
Препятствия для изменений
Ненужные элементы
Связанность
Быстрое введение в UML
Структурные диаграммы UML
Диаграммы поведения UML
Система мониторинга
Отслеживание ссылок
Git
Другие инструменты
Методология повышения эффективности
Риторика
Стандарты технической документации
Стандарты управления каталогами
Стандарты разработки кода
Краткое руководство по Markdown
◾ 💧 Карта знаний IT от Dunwu ◾ 🎯 Блог Dunwu ◾
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )