- 博客(74)
- 收藏
- 关注
原创 DS-BTree
B树在大量数据存储中,不能将所有的数据都加载到内存,只能逐部加载节点,会发生磁盘IO,为了减少IO,使用平衡多路查找树,让每个节点承载更多的元素,用于更多的孩子,降低树高度;规则对于一个k阶b树若根节点不是叶子结点,则至少有两颗子树处根节点和叶子结点外,结点至少有ceil(m/2)颗子树所有的叶子结点都在同一层(最后一层)每个叶子结点都包含k-1个元素 ceil(m/2)<= k <=m)k个孩子的非叶子结点包含k-1个元素每个节点元素从小到大排列,节点当中k-1个元素
2022-04-23 11:22:50
676
2
原创 MyBatisPlus
目录概述搭建Pojo类雪花算法垂直拆分水平拆分雪花算法自动生成语句插入删除修改查询Service CRUD概述MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。MyBatis-Plus提供了通用的mapper和service,可以在不编写任何SQL语句的情况下,快速的实现对单表的CRUD、批量、逻辑删除、分页等操作。扫描pojo实体类通过反射技术将实体类中的属性抽取,分析数据库表和实体类映射关系,实现表与表之间,属性与属性
2022-04-22 00:28:57
1535
1
原创 分布式秒杀系统构建
主要解决问题高并发线程安全(超卖)事务一致性(分布式事务)防止提前下单倒计时实现数据库设计CREATE DATABASE shop-- 商品表CREATE TABLE goods( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100) NOT NULL, info TEXT, price DECIMAL(10,2), save INT NOT NULL, begin_time TIMESTAMP NOT NULL,
2022-04-20 00:34:25
2384
2
原创 分布式锁 Redis&Zookeeper
目录分布式锁两大类分布式锁Redis分布式锁出现问题与解决案例单机超卖问题分布式问题保证释放锁redis宕机如何保证释放锁设置时间不保证原子性业务代码过多,锁超过时间自动释放finally块里的判断和解锁不是原子的用其他方法锁过期时间续期主从结构锁丢失Redisson分布式锁1、jvm层面的加锁,单机锁2、分布式锁分布式微服务架构,拆分后各个服务之间为了避免冲突和数据故障而加入的一种锁问题以下这种架构会带来的问题就是:如果redis存储数据,多台springboot修改Redis,也就是多台sp
2022-04-11 21:23:59
1086
1
原创 分布式事务 Seata
目录分布式事务产生原因CAP定理BASE理论分布式事务解决思路SeataSeata架构四种方案部署TC服务器微服务集成SeataXA模式分布式事务产生原因在一个整套业务中,一个业务的失败回滚对其他业务不可见(子事务不一致)CAP定理一致性:用户访问分布式系统中的任意节点,得到的数据必须一致;(及时同步)可用性:用户访问集群中的任意健康节点,必须得到响应,而不是超时或拒绝分区容错性:多个节点形成独立的分区,一个节点挂掉,整个系统也必须能够对外提供服务在分布式中,分区容错必须实现,所有只
2022-04-09 11:29:40
3011
1
原创 Sentinel
目录雪崩问题解决方式搭建安装sentinel微服务整合sentinel限流规则流控模式直接关联链路流控效果快速失败预热模式排队等待热点参数限流雪崩问题在微服务调用链路中的某个服务故障,引起整个链路中的所有服务都不可用例如服务A调用服务D,D出现故障,不会返回响应信息,tomcat一直等待响应,不会断开AD的连接,导致A的Tomcat资源耗尽,导致整个链路上的服务都不可用解决方式超时处理:请求超过一定时间没有响应就返回错误信息,不会无休止等待;只能缓解,如果进入该服务的请求大于释放的速度,还是会
2022-04-05 20:45:11
1112
1
原创 ElasticSerach
目录ES简介倒排索引MySQL与ES搭建安装ES安装kibana安装IK分词器ES简介是一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控易扩展高性能(倒排索引)支持分布式,可水平扩展提供Restful接口,可被任何语言调用ELK:ES的核心技术栈Lucene:搜索引擎类库,提供搜索引擎的核心API倒排索引正向索引:基于文档id创建索引,查询时先找文档判断是否包含词条;模糊查询,需要逐个扫描,最终返回结果集倒排索引先对内容分词,对词条创建索引,并记录含有该
2022-04-05 18:39:35
2407
1
原创 Docker
Linux系统结构分为系统应用、内核、计算机硬件三部分,Docker就将应用程序与系统函数一并打包。开发中可以将应用、依赖、函数库、配置一起打包,行程可移植镜像;开发、测试、灰度、线上 环境不一致,比如Java、mysql版本、redis补丁。Docker是容器,是内核级虚拟化技术,相当于一个进程。如果在开发中的环境改变,运维就需要将所有的机器的软件版本进行改变,非常麻烦。Docker用一种容器虚拟化技术,可以将源码、配置、版本、环境一并打包。镜像相当于Java类模板,容器相当于实例对象。
2022-04-05 14:57:13
2613
1
原创 Feign&Gateway
目录Feign搭建相关配置优化Feign的最佳实现Gateway网关搭建网关路由断言工厂网关过滤器路由过滤器默认过滤器全局过滤器过滤器执行顺序跨域FeignRestTemplate调用服务出现的问题掺杂非业务代码url难以维护Feign是一个声明式的http请求客户端,可以帮助我们优雅的实现http请求发送搭建在服务中添加pom依赖<!--feign客户端--> <dependency> <groupId>
2022-04-04 18:15:35
1393
2
原创 Eureka&Ribbon&Nacos
目录微服务架构SpringCloud简介结构搭建服务远程调用RestTemplate提供者和消费者Eureka作用服务注册EurekaServerEurekaClient服务拉取Ribbon负载均衡流程负载均衡策略负载均衡策略配置饥饿策略Nacos搭建注册服务Nacos服务分级存储模型微服务架构将单一的应用程序拆分成小的服务,每个服务运行在独立的进程中,服务之间通过轻量级的通信机制相互协调、互相配合。特征:高内聚低耦合单一职责:每个服务对应唯一业务能力面向服务:服务对外暴露业务接口自治:团队独
2022-04-03 20:39:43
1203
1
原创 计算机操作系统
目录什么是操作系统系统死锁进程间通信方式线程间通信方式进程状态进程调度算法页面置换算法IO多路复用什么是操作系统计算机软硬件交互的中间软件,管理计算机的资源、进程和软硬件用户和计算机之间的桥梁计算机上很多程序都要对内存cpu交互,操作系统就要保证这些访问和交互能够无误的进行主要目的管理计算机资源(cpu、内存、磁盘、打印机)提供图形界面,提供用户和计算机之间的桥梁为其他软件提供服务,分配资源系统死锁死锁的四个必要条件互斥:一次只能有一个进程使用该资源保持并等待:一个进程中持有部
2022-04-02 20:03:02
715
1
原创 RabbitMQ
MQ(消息队列)存放消息的队列,是一种跨进程的通信机制,用于上下游传递消息。MQ三大应用削峰比如说下订单系统最多能处理一万次订单,但是高峰期超出,要限制超出的部分,就使用消息队列做缓冲,把一秒内的订单分散一段时间处理异步一个下单操作,业务流程很长,响应时间长,用户体验不好。使用消息队列,下单时只用调用支付系统,其他业务可以通过消息方式发出,其他系统接收到消息去执行,实现异步处理解耦电商系统有很多子系统,下单系统、库存系统、物流系统、支付系统,用户下单,只要有一个系统出现故障,都会影响
2022-03-31 21:30:38
2909
1
原创 计算机网络
网络模型应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。数据链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。HTTP超文本传输协议HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」
2022-03-28 16:07:47
8004
2
原创 --求助-- BlockingQueue实现生产者消费者 出现问题 --求助--
想用BlockingQueue实现生产者消费者问题这里用ArrayBlockingQueue做阻塞队列,用队列长度设定库存量用AtomicInteger存库存数量number用flag控制生产线还是会出现以下问题import java.util.concurrent.*;import java.util.concurrent.atomic.AtomicInteger;/** * 共享资源 */class Share { private volatile boolean fla
2022-03-21 20:58:14
576
1
原创 浅谈JVM调优
目录调优目的Arthas出现的问题频繁STWSTW时间过长调优参数先了解JVM内存模型、工作原理、垃圾回收 JVM调优目的使用较小的内存占用来获得较高的吞吐量或者较低的延迟吞吐量:用户程序运行时间占用户程序和垃圾收集占用总时间的比值延迟:减少full gc,减少STW,减少程序暂停,提高性能调优工具JDK自带的调优工具:cmd-> jvisualvm阿里开源调优工具:ArthasArthas下载:https://arthas.gitee.io/arthas-boot.ja
2022-03-19 23:39:34
588
3
原创 微服务分布式
单体应用架构就是把所有的功能都写在一起,打包成一个应用,直接部署。优点开发、调试、部署方便没有网络开销缺点系统耦合性高,开发效率低下代码冗余,多人开发下问题多语言单一,不能根据场景选择合适的语言可靠度低,一个模块出错影响整个系统不易于扩展,代码结构复杂,扩展困难单体架构就相当于一个小诊所,挂号、诊断、买药都在一个屋子内,你不需要来回跑动去完成你想完成的事务。但是当业务复杂,科目多,药种类多时,很显然一个小诊所想要完成这些功能就会出现很大的冗余,于是我们就要将这业务横向分层、纵
2022-03-06 15:28:22
4611
原创 DS-Trie树
目录Trie结构构建删除操作Trie又称前缀树或字典树,主要对字符串的存储查询值不是直接保存在节点中,而是由节点在树中的位置决定利用字符串的公共前缀来减少查询时间时间复杂度和存储元素个数无关,与查询单词的长度有关 O(w)结构构建/** * Trie树 对字符串的存储查询 * * @author Deevan */public class MyTrie { /** * 构建节点 */ private static class Nod
2022-02-09 21:03:45
563
1
原创 DS-线段树
目录结构时间复杂度分析构建结构区间求和问题区间最值问题时间复杂度分析数组更新和查询的时间复杂度都为 O(n)线段树为 O(logn)构建线段树是平衡二叉树,因为区间每次一分为二,叶子结点间高度差最大为一给定一个数组arr,获线段树的高度:叶子结点的个数大于 待求区间 的长度生成线段树的节点个数最多为:2^h -1生成线段树/** * 融合器接口:整合两数据 */public interface Merger<T> { T marg
2022-02-09 19:48:20
149
1
原创 DS-最大堆和优先队列
目录最大堆堆概念完全二叉树满二叉树最大堆概念时间复杂度分析最大堆实现优先队列最大堆堆概念是一棵完全二叉树父亲节点的优先级高于或低于左右孩子的优先级完全二叉树按照树的结构,从左到右依次排列满二叉树除叶子结点外所有的节点都有左右子树叶子结点都在最后一层第N层节点的个数:2^(N-1)叶子结点个数:2^(h-1) h为高度非叶子结点个数:2^(h-1) -1总节点个数:2^h -1最大堆概念根节点索引为0,没有父亲节点一个索引为 i 的节点的父亲节点的
2022-02-08 22:00:03
318
1
原创 DS-Map
目录接口定义使用链表实现底层链表定义LinkedMap使用二分搜索树实现底层二分搜索树定义BSMap接口定义/** * 定义Map接口 * * @author Deevan */public interface SelfMap<K, V> { boolean isEmpty(); int getSize(); boolean containsKey(K k); void add(K k, V v); void remove(K k)
2022-02-07 22:20:30
590
1
原创 DS-Set
定义接口public interface SelfSet<T> { void add(T t); void remove(T t); boolean isContains(T t); int size(); boolean isEmpty(); /** * 将set元素放入list中 */ List<T> dataList();}数组实现底层使用数组作为容器: DS-数组/** *
2022-02-01 21:42:32
515
1
原创 数组排序算法
目录冒泡排序选择排序插入排序快速排序归并排序希尔排序桶排序基数排序冒泡排序比较相邻的两个数,把较大的往后排每内循环一次将两个数较大的排在后面每外循环一次将未排序的最大的数排在最后for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - i - 1; j++) { if (array[j] > array[j + 1]) { int temp = array[j];
2022-01-28 14:51:19
2248
1
原创 MySQL高级
目录视图存储过程函数触发器MySQL架构MySQL 引擎索引为什么使用数据库索引?什么是索引?索引的原理索引的优势劣势创建索引的原则索引的分类主键索引单值索引唯一索引组合索引全文索引索引数据结构聚簇索引和非聚簇索引事务事务特性事务设置并发事务问题脏读不可重复读幻读事务的隔离级别读未提交读已提交可重复读串行化MVCC锁机制行锁表锁间隙锁共享锁 / 排他锁乐观锁 / 悲观锁SQL优化视图视图就是一条 SELECT 语句执行后返回的结果集,将查询语句包装起来-- 创建视图CREATE VIEW sel_n
2022-01-23 20:10:17
1078
4
原创 Java并发编程
并发/并行并发是在某一个时间段内,依次做好几件事情,多个线程访问共享资源单核cpu就不会出现问题硬件cpu的功能逐渐强大,已经发展为多核,可以同时执行多个线程,就有可能多个线程同时访问同一个共享数据(秒杀抢购)并发变成就是要让在多核,多线程下,也只能一次只有一个线程对共享资源访问并行多件事情在同一个时刻同事发生多线程多线程优点多线程技术使程序的响应速度更快 ,可以在进行其它工作的同时一直处于活动状态,程序性能得到提升性能提升的本质 就是榨取硬件的剩余价值(硬件利用率)多线程带来的
2022-01-21 23:47:00
1930
1
原创 框架进阶.
目录SpringBeanFactory和ApplicationContextSpringBean的生命周期Spring中的bean是线程安全的吗?Bean循环依赖Servlet 的过滤器与 Spring 拦截器区别建模语言类接口类图类和类之间的关系面向对象的设计原则Java设计模式单例模式工厂模式代理模式静态代理动态代理jdk 代理Cglib 代理注解内置的注解元注解 (注解的注解)对象克隆SpringBeanFactory和ApplicationContextBeanFactory 接口是 IOC
2022-01-20 13:51:32
629
1
原创 JVM..
JVM概述虚拟机所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机系统虚拟机:完全对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台(VMware)程序虚拟机:专门为执行某个单个计算机程序而设计(java虚拟机)在 java 虚拟机中执行的指令我们称为 java 字节码指令 Java 虚拟机是一种执行 java 字节码文件的虚拟计算机,它拥有独立的运行机制,是Java 技术的核心
2022-01-18 15:01:56
2074
1
原创 泛型扩展.
为什么使用泛型为解决Object类接收任意类型时的类型转换问题,这会存在隐患使用泛型,编译期间就会对传入的参数进行类型检测,实际上存储还是object类型ArrayList<String> list = new ArrayList<>();//底层源码public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;}//底层的还是object类型数组transient Obje
2022-01-16 17:07:27
374
1
原创 stream流
什么是streamStream 是 Java8 的新特性,它允许你以声明式的方式处理数据集合和数组,可以把它看作是遍历数据集的高级迭代器。此外与 stream 与 lambada 表达示结合后编码效率与大大提高,并且可读性更强。要澄清的是 java8 中的 stream 与 InputStream 和 OutputStream 是完全不同的概念.特点:不是数据结构,不会保存数据。不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。(保留意见:毕竟peek方法可以修改流中元素)惰性求值
2022-01-16 16:07:24
325
1
原创 lambda
出现背景 java中的方法都包含在对象中,不能独立的当参数传递若我们想要把某些功能传递给某个方法,总要去写匿名类。例如实现数组自定义排序,就需写一个类去集成comparator接口,重写compare方法,把这个类作为参数public class Demo1 { /* 诞生背景:java中的方法都包含在对象中,不能独立的当参数传递 */ public static void main(String[] args) { String[] a
2022-01-16 16:04:38
239
1
原创 redis
目录redis概述关系型数据库与非关系型数据库关系型数据库非关系型数据库搭建安装修改配置启动redis数据类型设置失效时间springboot集成redis搭建RedisTemplate的方法直接使用存储对象实例主从复制配置哨兵机制缓存问题缓存穿透缓存击穿缓存雪崩总结布隆过滤器redis概述Redis 是一个开源的,使用 C 语言编写的,支持网络交互的, 内存中的 Key-Value 数据结构存储系统,它可以用作数据库、缓存和消息中间件它支持多种类型的数据结构,如 字符串, 散列, 列表,集合, 有序
2022-01-16 15:55:36
1762
1
原创 linux
目录linux概述VMware虚拟机linux目录结构linux常用命令网络配置仅主机模式桥接模式NAT 模式防火墙设置软件安装vim编辑器java环境搭建安装jdk安装tomcat安装mysqllinux概述Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个多用户、多任务、支持多线程和多 CPU 的操作系统特点开源稳定多线程 ,多用户,处理高并发安全性好对内存和文件管理优越用途Linux 运维工程师Linux 嵌入式开发工程师Linux 环境下部署项目VM
2022-01-15 15:28:47
604
1
原创 JavaWeb前后端分离架构
JavaWeb前后端分离架构前后端分离已成为互联网项目开发的业界标准使用方式,通过 nginx+tomcat的方式有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS 等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。核心思想是前端 html 页面通过 ajax 调用后端的 restuful api 接口并使用 json数据进行交互。前后分离的优势可以实现真正的前后端解耦,前端服务器使用 ng
2022-01-15 15:25:59
1848
1
原创 nginx
nginx概述Nginx 是一款高性能的 Web 和 反向代理服务器nginx所在的位置:作用:web 服务负载均衡 (反向代理)web cache(web 缓存)优点:高并发。静态小文件占用资源少。2万并发、10个线程,内存消耗几百M。功能种类比较多。web,cache,proxy。每一个功能都不是特别强。支持epoll模型,使得nginx可以支持高并发。nginx 配合动态服务和Apache有区别。(FASTCGI 接口)利用nginx可以对IP限速,可以限制连接数。
2022-01-14 23:13:23
1232
1
原创 Vue..
目录MVVMVue概述优点Vue搭建Hello wordVue的模板语法Vue指令v-textv-htmlv-onv-modelv-showv-ifv-bindv-forVue实例生命周期Vue组件MVVM MVVM 是 Model-View-ViewModel 的简写。MVVM 就是将其中的 View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View中由于需要展示内容而涉及的业务逻辑。Vu
2022-01-03 00:29:34
572
1
原创 Springboot
回顾spring优点开源,轻量级,非侵入式的一站式框架,简化企业级应用开发。控制反转(IOC),依赖注入(DI)降低了组件之间的耦合性,实现了软件各层之间的解耦。面向切面(AOP),利用它可以很容易实现一些拦截,如事务控制等。spring对于主流的应用框架提供了很好的支持,例如mybatis。spring提供有自己的mvc实现。缺点虽然spring的组件代码是轻量级的,但它的配置却是重量级的。虽然spring引入了注解功能,但是仍然需要编写大量的模板化配置文件.项目的依赖管理也是一件
2022-01-02 17:20:02
376
1
原创 ckeditor&echarts
ckeditorckeditor是html文本编辑插件,源码是javascript。效果类似WORD。就是在textarea上多了一些编辑工具。ckfinder是ckeditor的一个插件,ckfinder主要用于上传功能ckeditor是文字编辑的。ckfinder是文件管理的。ckfinder引入将引入ckeditor,ckfinser 加入js目录下导入jar包配置web.xml和ckfinder.xml引入ckfinder.xml配置文件 将CKFi
2021-12-30 13:07:35
459
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人