- 博客(68)
- 收藏
- 关注
原创 RestHighLevelClient
依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.3.0.RELEASE</version></dependency>配置类@Beanpublic RestHi.
2022-02-16 11:02:02
8708
原创 RGC(微服务体系)
1.如果没有微服务体系就要重新开发这些模块。不止如此在开发时每个部门还有很多注意事项,不如数据库那个字段不能更改,还有要熟悉不同部门的业务。解决办法就是利用微服务体系将模块独立出去(和工具类不同,工具类是将代码合成)减少开发时间,相同的功能模块直接应用,开发效率提升。2.大公司内部系统很多,每个系统有功能相同的模块(登陆退出,短信功能,系统大部分功能模块相同)比如一个系统要100个功能模块,两百个系统可能也只需要120个模块。3.大公司才有微服务体系,小公司不会性价比不值,重复率小 。4.dub
2021-10-25 19:54:22
677
原创 sleep与wait和yield的区别
sleep与wait sleep方法没有释放锁,而wait方法释放了锁 wait需要其他线程调用对象的notify()或者notifyAll()方法来唤醒,sleep可以自动换醒(超时), wait方法定义在Object类中,作用于对象本身;sleep方法定义在java.lang.Thread中,作用于当前线程 只能在同步上下文中调用wait方法,否则或抛出IllegalMonitorStateException异常,sleep不需要在同步方法或同步块中调用 w
2021-09-12 21:58:58
468
原创 Redis三
Redis 事务(不支持原子性)Redis官网也解释了自己为啥不支持回滚。简单来说就是Redis开发者们觉得没必要支持回滚事务开启> MULTI事务结束> EXEC缓存穿透缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。举个例子:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库。1)缓存无效 key...
2021-09-09 17:18:48
116
原创 Redis二
过期的数据的删除策略1. 惰性删除:只会在取出key的时候才对数据进行过期检查。这样对CPU最友好,但是可能会造成太多过期 key 没有被删除。2. 定期删除 : 每隔一段时间抽取一批 key 执行删除过期key操作。并且,Redis 底层会通过限制删除操作执行的时长和频率来减少删除操作对CPU时间的影响。Redis 采用的是定期删除+惰性/懒汉式删除 。...
2021-09-09 16:59:41
73
原创 Redis一
一.string1.string 数据结构是简单的 key-value 类型。构建了一种简单动态字符串SDS,Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据,并且获取字符串长度复杂度为 O(1),Redis 的 SDS API 是安全的,不会造成缓冲区溢出。2. 常用命令:set,get,strlen,exists,dect,incr,setex` 等等。3. 应用场景 :一般常用在需要计数的场景,比如用户的访问次数、热点文章的点...
2021-09-09 15:57:33
72
原创 对RocketMQ初步理解
主题模:在主题模型中,消息的生产者称为发布者,消息的消费者称为订阅者,存放消息的容器称为主题。生产者组: 代表某一类的生产者,比如我们有多个秒杀系统作为生产者,这多个合在一起就是一个生产者组,它们一般生产相同的消息。消费者组: 代表某一类的消费者,比如我们有多个短信系统作为消费者,这多个合在一起就是一个 消费者组,它们一般消费相同的消息。主题: 代表一类消息,比如订单消息,物流消息等等。主题中存在多个队列,生产者每次生产消息之后是指定主题中的某个队列发送消息的。集群消费模式下,一个消费者集群
2021-09-05 10:20:08
187
原创 消息队列的作用
消息队列:我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。异步:问题:流程就会变长,等待的时间也会相应的变长。解决:用户请求数据写入消息队列之后就立即返回给用户。请求数据在后续的业务校验、写数据库等操作中可能失败。因此使用消息队列进行异步处理之后,需要适当修...
2021-09-04 13:55:40
271
原创 同步通信Dubbo
1.Dubbo 是一个高性能、轻量级的开源的远程过程调用面向服务分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。Dubbo 提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo 提供的下面四点特性:负载均衡——同一个服务部署在不同的机器时该调用那一台机器上的服务。服务调用链路生成——哪个应用要在...
2021-08-30 23:26:15
135
原创 学同步通信准备
1.RPC:远程过程调用,一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 RPC 的出现就是为了让你调用远程方法像调用本地方法一样简单。先简单理解过程:消费方调用服务,client stub将服务内容变成能网络传输的格式,client stub发送到服务端。服务端解码,调用本地服务,返回结果到server stub,server stub在发送消息给消费方。...
2021-08-30 22:49:19
116
原创 操作系统简单理解2
1.解决虚拟地址到物理地址的转换要快。解决虚拟地址空间大,页表也会很大的问题。 快表 :加速虚拟地址到物理地址的转换。快表理解为一种特殊的高速缓冲存储器,其中的内容是页表的一部分或者全部内容。作为页表的 Cache,它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时 CPU 要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。...
2021-08-29 22:33:40
233
原创 操作系统简单理解1
操作系统简单理解:a.管理计算机硬件与软件资源的程序。b.操作系统本质上是一个运行在计算机上的软件程序 ,用于管理计算机硬件和软件资源。c.操作系统存在屏蔽了硬件层的复杂性。d.操作系统的内核是操作系统的核心部分,它负责系统的内存管理,硬件设备的管理,文件系统的管理以及应用程序的管理。2.用户调用操作系统提供的系统级别的功能叫系统调用:设备管理,文件管理,进程控制,进程通信,内存管理。3.进...
2021-08-29 21:36:55
397
原创 udp和tcp
1.UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等2.TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三...
2021-08-28 22:45:27
867
原创 四次挥手理解
a. 断开一个 TCP 连接则需要“四次挥手”: 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号服务器-关闭与客户端的连接,发送一个FIN给客户端客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1...
2021-08-28 22:02:56
131
原创 快速掌握三次握手
简单理解两种方式: a.先来看一个简单的理解:第一次为发送端向接收端发出握手请求,发送端请求建立连接(发送端的人说我想建立链接)第二次为接收端向发送端发出握手请求,接收端同意建立连接请求(接收端的人说可以建立链接)第三次表示为发送端向接收端发请求,出握手请求建立链接并且成功(两边的人建立连接并成功链接) b.也可以这么理解(推荐):...
2021-08-28 21:45:32
121
原创 计算机网络体系结构简单梳理
1.体系结构2.应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。应用层交互的数据单元称为报文。3.域名系统作为可以将域名和IP地址相互映射的一个分布式数据库,不用去记住能够被机器直接读取的IP数串。4.超文本传输协议是互联网上应用最为广泛的一种...
2021-08-28 20:28:50
247
原创 MYSQL索引知识点梳理
1.为什么要使用索引?通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快 数据的检索速度(大大减少的检索的数据量), 这也是创建索引的最主要的原因。帮助服务器避免排序和临时表。将随机IO变为顺序IO可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。2.索引...
2021-08-27 11:46:45
118
原创 MYSQL事务
1.事务是逻辑上的一组操作,要么都执行,要么都不执行。2.事务四大特性:原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性(Consistency): 执行事务后,数据库从一个正确的状态变化到另一个正确的状态;隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,...
2021-08-26 23:06:19
79
原创 MYSQL之lnnoDB 和MyISAM
1.lnnoDB 是事务性存储引擎,只有 InnoDB 支持事务。2.MyISAM(5.5版之前)有全文索引、压缩、空间函数等,MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。3.两者的对比:a.是否支持行级锁 : MyISAM 只有表级锁,而InnoDB 支持行级锁和表级锁,默认为行级锁。b.是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有...
2021-08-26 22:26:59
251
原创 java线程池二
1.ThreadPoolExecutor 的构造函数来创建线程池,线程池的基本七个参数2 public ThreadPoolExecutor(int corePoolSize,//线程池的核心线程数量 int maximumPoolSize,//线程池的最大线程数 long keepAliveTime,//当线程数大于核心线程数时,多余的空闲线程存活的最长时间 ...
2021-08-26 10:37:36
61
原创 Fork/Join框架
1.Fork/Join框架是Java 7并行执行任务的框架,是一个把大任务分割成若干个小任务,每个小任务结果后得到大任务结果的框架2.工作窃取算法:是指某个线程从其他队列里窃取任务来执行3.工作窃取算法的优点:充分利用线程进行并行计算,减少了线程间的竞争。工作窃取算法的缺点:在某些情况下还是存在竞争,比如双端队列里只有一个任务时。并且该算法会消耗了更多的系统资源。4.步骤1 分割任务。首...
2021-08-26 10:13:34
56
原创 ThreadLocal
1.ThreadLocal对象可以提供线程局部变量,每个线程`Thread`拥有一份自己的副本变量,多个线程互不干扰。线程安全。2.ThreadLocalMap`有自己的独立实现,可以简单地将它的`key`视作`ThreadLocal`,`value`为代码中放入的值(实际上`key`并不是`ThreadLocal`本身,而是它的一个弱引用)。3.每个线程在往`ThreadLocal`里放值的时候,都会往...
2021-08-25 22:57:41
829
原创 java之SQA二 CountDownLatch 和CyclicBarrier
9.CountDownLatch 是共享锁的一种实现,它默认构造 AQS 的 state 值为 count。当线程使用 countDown() 方法时,其实使用了tryReleaseShared方法以 CAS 的操作来减少 state,直至 state 为 0 。当调用 await() 方法的时候,如果 state 不为 0,那就证明任务还没有执行完毕,await() 方法就会一直阻塞,也就是说 await() 方法之后的语句不会被执行。然后,CountDownLatch 会自旋 CAS 判...
2021-08-24 23:40:36
77
原创 java之SQA一
1.AQS:抽象的队列式的同步器;AQS定义了一套多线程访问共享资源的同步器框架.2.AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效 的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,将暂时获取不到锁的线程加入到队列中。3.AQS 定义两种资源共享方式:1)Exclusive(独占)...
2021-08-24 23:36:46
130
原创 ==和equals比较
对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址对于equals方法,注意:equals方法不能作用于基本数据类型的变量 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址; 诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。...
2021-08-24 17:24:18
98
原创 java线程一
1.线程和进程区别:a.操作系统调度的最小单元是线程b.在一个进程里可以创建多个线程c.进程是系统资源分配的单位,线程是CPU调度的单位。d.进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。同时线程还有自己的栈和栈指针,程序计数器等寄存器。e.进程有自己独立的地址空间,而线程没有,线程必须依赖于进程而...
2021-08-24 12:11:25
49
原创 偏向锁,轻量级锁,重量级锁,锁升级
1.偏向锁升级轻量级锁a.访问Mark Word中偏向锁的标识是否设置成1,锁标志位是否为01,确认为可偏向状态。b.如果为可偏向状态,则测试线程ID是否指向当前线程,如果是,进入步骤e,否则进入步骤c。c.如果线程ID并未指向当前线程,则通过CAS操作竞争锁。如果竞争成功,则将Mark Word中线程ID设置为当前线程ID,然后执行e;如果竞争失败,执行d。...
2021-08-22 22:46:07
122
原创 java偏向锁
1.偏向锁当一个线程访问同步块并获取锁时,会在对象头和栈帧中的锁记录里存储锁偏向的线程ID。2.无锁—>偏向锁——>撤销锁过程a.当一个线程获取锁,对象头和栈帧中的锁记录里存储锁偏向的线程ID(线程在进入和退出同步块时测试一下对象头的Mark Word里是否存储偏向锁)。b.测试成功,表示线程获得了锁。失败,则需测试一下Mark Word中偏向锁的标识是否设置成1(表示当前是偏向锁)(没有...
2021-08-22 22:05:12
1466
原创 JAVA之CAS
1.CAS,比较并交换,(乐观锁的一种技术,.Java的非阻塞算法)2. 内存位置的值(V)、预期原值(A)和新值(B)。a.内存位置的值与预期原值相匹配,处理器会将该位置值更新为新值 。否则,处理器不做任何操作。b.它都会在 CAS 指令之前返回该位置的值。(在 CAS 的一些特殊情况下将仅返回 CAS 是否成功,而不提取当前值。)CAS 有效地说明了“我认为位置 V 应该包含值 A;如果包含该值,...
2021-08-22 18:00:10
44
原创 java之volatile
1.字段声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的。(volatile误用进行原子性操作)2.volatile的原理:volatile变量修饰的共享变量进行写操作时会在汇编代码前加上lock前缀, lock前缀的指令在多核处理器下会引发两件事情:将当前处理器缓存行的数据写回到系统内存该写回内存的操作会使在其他CPU里缓存了该内存地址的额数据无效...
2021-08-22 15:48:59
46
原创 并发编程面对的问题
1.并发编程的目的让程序运行得更快(单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制),面对的问题:上下文切换的问题、死锁的问题,以及受限于硬件和软件的资源限制问题2任务从保存到再加载的过程就是一次上下文切换。3减少上下文切换的方法有:无锁并发编程(将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。)、CAS算法、使用最少线程和使用协程(在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换)。...
2021-08-21 23:07:46
76
原创 java单例模式
1 .定义:单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。特点:1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。2.适用场景(和特点有十分大的关系):1.需要生成唯一序列的环境2.需要频繁实例化然后销毁的...
2021-08-20 22:50:57
69
原创 java快速排序(通俗好理解)
1,快速排序的基本思想:第一次递归:选取一个基准值,通过一移动数的位置将待排记录分隔成独立的两部分,移位后要求做到,基准数左边比基准数小,右边比基准数大,但是基准数两边的数值并不要求有任何值的比较。然后对基准数两边都用递归方式继续进行移动,保证每一次递归后的基准数左边比基准数小,右边比基准数大。最后自然而然就将顺序排好了。2来看代码:解释在代码里,结果[1, 2, 3, 4, 5, 6, 8, 10, 13]import java.util.Arrays;pu...
2021-08-20 21:33:30
286
1
原创 jvm编译优化技术
编译优化技术逃逸分析:它与类型继承关系分析一样,并不是直接优化代码的手段,而是为其他优化措施提供依据的分析技术。逃逸分析原理:分析对象动态作用域,对象在方法里面被定义后,被外部方法所引用,作为调用参数传递到其他方法中,这种称为方法逃逸;甚至还有可能被外部线程访问到,譬如赋值给可以在其他线程中访问的实例变量,这种称为线程逃逸。从不逃逸、方法逃逸到线程逃逸,称为对象由低到高的不同逃逸程度。栈上分配:在Java虚拟...
2021-08-18 22:09:26
51
原创 展望未来的收集器Shenandoah收集器
Shenandoah收集器1.目标实现任何堆内存大小下把垃圾收集的停顿时间限制在十毫秒以内。2.默认不使用分代收集。3.名为“连接矩阵”的全局数据结构来记录跨Region的引用关系,4.步骤:初始标记,并发标记·最终标记·并发清理·并发回收·初始引用更新·并发引用更新·最终引用更新.并发清理并发回收:对于并发回收阶段遇到的困难,Shenandoah将会通过读屏...
2021-08-18 16:05:48
249
原创 G1(Garbage First收集器)
Garbage First收集器1.面向局部收集设计思路和基于Region内存布局形式。2.JDK 9成为服务端模式下的默认垃圾收集器,3建立起停顿时间模的收集器(消耗在垃圾收集上的时间大概率不超过N毫秒这样的目标)4G1不再坚持分代区域划分,而是把Java堆大小相等独立区域,每一个Region都可以根据需要,扮演新生代的Eden空间、Survivor空间,或者老年代空间。5.Region中还有一类特殊的Hu...
2021-08-17 23:24:37
96
原创 老年代垃圾收集器
1.Serial Old收集器(标记-整理)。这个收集器的主要意义也是供客户端模式下的HotSpot虚拟机使用。两种用途:一种是在JDK 5以及之前的版本中与Parallel Scavenge收集器搭配使用,另外一种就是作为CMS收集器发生失败时的后备预案,在并发收集发生Concurrent Mode Failure时使用。2.Parallel Old收集器(标记-整理)...
2021-08-17 22:42:29
108
原创 jvm年轻代垃圾收集器
1.Serial收集器(标记-复制)这个收集器是一个单线程工作的收集器(它进行垃圾收集,暂停其他所有线程)是HotSpot虚拟机运行在客户端模式下的默认新生代收集器,对于单核处理器或处理器核心数较少的环境来说,Serial收集器由于没有线程交互的开销专心 做垃圾收集自然可以获得最高的单线程收集效率2. ParNew收集器(标记-复制)ParNew收集器实质上是Serial收集器的多线程并行版本除了S...
2021-08-17 22:01:01
157
原创 jvm垃圾收集器总览
记忆办法看老年代正好满足零一二三的原则零 g1只需要自己单独使用一 parallel old 能和 parallel scavenge 一起使用二 cms 能和 parNew 一起使用 cms 能和 serial 一起使用(jdk9不可以使用)三 serial old 能和 serial ,parnew(jdk9不可以使用),parallel scavenge一起使用...
2021-08-17 21:31:29
33
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人