红黑树
红黑树
数据结构演示网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
预备知识树的知识框架结构如下图所示:
平衡二叉搜索树平衡二叉搜索树(Balanced Binary Search Tree),英文简称 BBST。经典常见的平衡二叉搜索树是 AVL 树和红黑树。
二叉搜索树二叉搜索树(Binary Search Tree)是二叉树的一种,英文简称 BST。又称为二叉查找树、二叉排序树。
它的特点是任何一个结点的值都大于其左子树的所有结点的值,任何一个结点的值都小于其右子树的所有结点的值。
平衡平衡(Balance):就是当结点数量固定时,左右子树的高度越接近,这棵二叉树越平衡(高度越低)。而最理想的平衡就是完全二叉树/满二叉树,高度最小的二叉树。
一棵二叉搜索树平均时间复杂度可以认为是树的高度 O(h)。像左边这棵,结点的左右子树的高度接近,属于一棵平衡二叉搜索树,O(h) = O(logn);而右边这棵,高度达到了最大,已经退化成了链表,O(h)=O(n)。
改进二叉搜索树当二叉树退化成链表时, ...
I/O 和 Netty
NettyI/O 模型I/O 模型基本说明I/O 模型简单理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能
Java 共支持三种网络编程模型 I/O 模式:BIO、NIO、AIO
BIO
BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO
NIO:非阻塞IO
同步非阻塞,服务器实现模式为多个连接一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问。
异步阻塞, 此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因为此时是通过select系统调用来完成的,而select函数本身的实现方式是阻塞的,而采用select函数有个好处就是 ...
Redis
一、Redis 简介
“Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.” —— Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。 (摘自官网)
Redis 是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的 Web 应用程序。Redis 也被作者戏称为 数据结构服务器 ,这意味着使用者可以通过一些命令,基于带有 TCP 套接字的简单 服务器-客户端 协议来访问一组 可变数据结构 。*(在 Redis 中都采用键值对的方式,只不过对应的数据结构不一样罢了)*
Redis 的优点以下是 Redis 的一些优点:
非常快 - Redis 非常快,每秒可执行大约 110000 次的设置(SET)操作,每秒大约可执行 81000 次的读取/获取(GET)操作。
支持丰富的数据类型 - Redis 支持开发人员常用的大多数数据类型,例如列表,集合 ...
Dubbo
Dubbo一、分布式基础理论1.1什么是分布式系统《分布式系统原理与泛型》中定义:“分布式系统是独立计算机的集合,这些计算机对于用户来说就像单个相关系统”
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用框架已经无法应对,分布式服务架构以及流动计算机架构势在必行,亟需==一个治理系统==确保架构有条不紊的演进。
1.2发展演变
All In One 单一应用架构:当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架 (ORM) 是关键。
Vertical Appliation 垂直应用架构:当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的 Web 框架 (MVC) 是关键。
Distributed Server 分布式服务架构:当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框 ...
Swagger
Swagger
Swagger简介
集成了接口测试和接口文档
快速使用
导入依赖12345678910111213<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency> <groupId>i ...
MyBatisplus
MyBatisplus
简介
官网:https://mp.baomidou.com/
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
支持自定义全局通用操作:支持全局通用方法注入( Write once, use ...
Shiro
Shiro
Shiro能做什么?
Authentication 认证
Authorization 授权
Session Management 会话管理
Cryptgraphy 加密
Shiro核心组件
Subject
当前用户(当前访问系统的第三方进程)
securityManager
内部组件管理
realm
封装了一套安全相关的DAO层的 “领域”,一组认证和授权
SpringBoot 集成
Maven 依赖
1234567<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-spring --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.5.3</version ...
Docker
DockerDocker 概述Docker 是基于 Go 语言开发的开源项目!
官网:https://www.docker.com/
文档地址:https://docs.docker.com/
仓库地址:https://hub.docker.com/
Docker 能干嘛
之前的虚拟机技术
虚拟机技术缺点:
资源占用十分多
冗余步骤多
启动很慢
容器化技术
==容器化技术不是模拟的一个完整的操作系统==
比较 Docker 和 虚拟机技术的不同:
传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
容器内的应用直接运行在宿主机的内核,容器没有自己的内核,也没有虚拟硬件,所以比较轻便
每个容器间互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
DevOps (开发、运维)
应用更快速的交付和部署
Docker:打包镜像发布测试、一键运行
更便捷的升级扩缩容
项目打包为一个镜像
更简单的系统运维
在容器化之后,开发、测试环境高度一致
更高效的计算资源利用
Docker 是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,服 ...
ElasticSearch
安装 es 和 kibana12345678910111213141516171819202122232425262728293031323334353637383940# 创建 es 网络docker network create esnetwork#下载并启动es镜像 绑定网络 限制内存docker run -d --name elasticsearch --net esnetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.7.1# 进入容器中 修改 es 跨域问题docker exec -it elasticsearch /bin/bashcd /usr/share/elasticsearch/config/vi elasticsearch.yml#如果容器中没有 viapt-get update apt-get install vi#在 elastics ...