底层原理
文章平均质量分 77
学习微站公众平台
Java领域从业者;CSDN新兴创新博主;Java领域优质创作者;书写奋斗者故事; 欢迎联系交流学习进步;一个有理想、有初心、有信心的博主,对所有的赞同、评价觉得认可的表达最大的感谢。希望粉丝们与我一同进步,奋斗属于自己独特的青春。
展开
-
原理底层计划--线程池原理和常见的问题
这样,当有新任务到来时,线程池就可以立即执行任务,而不需要等待线程创建的时间。这里需要注意,如果调用 isShutdown() 方法的返回的结果为 true 并不代表线程池此时已经彻底关闭了,这仅仅代表线程池开始了关闭的流程,也就是说,此时可能线程池中依然有线程在执行任务,队列里也可能有等待被执行的任务。1)当提交一个新的任务到线程池时,线程池判断corePoolSize线程池是否都在执行任务,如果有空闲的线程,则从核心线程池中取一个线程来执行此任务,直到当前线程数等于corePoolSize;原创 2023-03-14 09:13:11 · 1129 阅读 · 1 评论 -
底层原理计划--Java连环问之空城计
所以在需要查询数据的情况下每次的磁盘的IO跟树高有直接的关系,但是从另一方面来说,由于数据都被放到了叶子节点,所以放索引的磁盘块锁存放的索引数量是会跟这增加的,所以相对于B树来说,B+树的树高理论上情况下是比B树要矮的。只有当对应位置的数据都为1时,运算结果也为1,当HashMap的容量是2的n次幂时,(n-1)的2进制也就是1111111***111这样形式的,这样与添加元素的hash值进行位运算时,能够充分的散列,使得添加的元素均匀分布在HashMap的每个位置上,减少hash碰撞。原创 2023-03-14 09:12:56 · 949 阅读 · 0 评论 -
底层原理计划--Java连环问之美人计
Rocketmq了解why1、 解耦:以前那些A服务调用BCDEF服务,万一一个服务挂了怎么办?要不要重发?解决耦合性2、 异步:有些类型的报告生成时间太长了,让用户一直卡着在不太好吧。异步后,BCDEF自己去执行写库的时间,消息队列中间件自己本身执行快。3、 削峰:节假日退出活动,用户访问量增多,如果说系统一秒钟可以处理500请求,这一秒超过500请求怎么办,mq让系统平缓处理突然增加的请求。用时间换空间。让用户请求过来,我们消费者在根据先进先出原则依次消费消息。原创 2023-03-14 09:14:33 · 975 阅读 · 0 评论 -
底层原理计划--Java性能优化(详解)
我们可以假设一种情形,有10个线程同时需要通过获取该类的实例,当第一个获取这个实例时,其他9个线程都必须等待第一个调用的结束,然后由第二个线程调用该实例方法,而剩下的8个得继续等待,如此依次执行获取实例,这样10个线程执行下来,对这个简单的获取实例方法变为串行操作,可这并不是必要的!这里指的有序并不是按照大小排好序的( Sorted ),而是指集合是可以以确定的顺序访问的序列。它实现List接口,那么对外的接口几乎和原来链表类一致,这样对现有系统的改动是非常小的,只需要用新写的类替换掉程序中原有的类。原创 2023-03-13 20:48:05 · 1076 阅读 · 0 评论 -
底层原理计划--线程与线程池
创建一个固定大小的线程池,线程池内线程存活时间无限制,线程池可以支持定时及周期性任务执行,如果所有线程均处于繁忙状态,对于新任务会进入DelayedWorkQueue队列中,这是一种按照超时时间排序队列结构。线程池通过一个线程安全的阻塞任务队列加上一个或一个以上的线程实现,线程池中的线程可以从阻塞队列中获取任务进行任务处理,当线程都处于繁忙状态时可以将任务加入阻塞队列中,等到其它的线程空闲后进行处理。当线程数小于核心线程数,即使有空闲线程,也会一直创建线程直 到达到核心线程数;原创 2023-03-13 20:45:50 · 1459 阅读 · 0 评论 -
底层原理计划--死锁
(1)多进程死锁:有进程A,进程B,进程A拥有资源1,需要请求正在被进程B占有的资源2。进程A已经拥有至少一个资源,此时又去申请其他资源,而该资源又正在被进程使用,此时请求进程阻塞,但对自己已经获得的资源保持不放。(2)单进程死锁:进程A拥有资源1,而它又在请求资源1,而它所请求的资源1必须等待该资源使用完毕得到释放后才可被请求。这样,就陷入了自己的死锁。2.事务1更新uid=1的记录,事务2更新uid=2的记录,在RR级别,由于uid是唯一索引,因此两个事务将分别持有uid=1和2所在行的独占锁。原创 2023-03-14 01:00:00 · 819 阅读 · 2 评论 -
底层原理计划--RocketMq
一条消息被多个Consumer消费,几十这些Consumer属于同一个ConsumerGroup,消息也会被ConsumerGroup中的每个Consumer消费一次,广播消费中的ConsumerGroup概念可以认为在消息划分层面没有意义,适用于一些分发消息的场景,比如我订单下单成功了,需要通知财务系统,客服系统等等这种分发的场景,可以通过修改Consumer中的MessageModel来设置消费方式为广播消费。4、解耦、异步、削峰是mq主要的优点,mq的缺点是要保证mq可用的,不然也会影响业务。原创 2023-03-17 19:30:00 · 1208 阅读 · 0 评论 -
底层原理计划--Redis
我们一起来看下Redisson底层原理图吧:只要线程一加锁成功,就会启动一个watch dog看门狗,它是一个后台线程,会每隔10秒检查一下,如果线程1还持有锁,那么就会不断的延长锁key的生存时间。我们设置缓存时采用相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库cpu和内存造成巨大压力,严重的造成数据库宕机。其实我们设想一下,是否可以给获得锁的线程,开启一个定时守护线程,每隔一段时间检查锁是否还存在,存在则对锁的过期时间延长,防止锁过期提前释放。原创 2023-03-17 13:00:00 · 1030 阅读 · 1 评论 -
底层原理计划--MySQL
全文索引fulltext(全文索引(也称全文检索)是目前所有引擎使用的一种关键技术,它能够利用分词技术等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的短发规则智能地筛选出我们想要是搜索结果,前文索引非常适合大型数据集,对于小的数据集,他的用处比较小。Myisam:全表锁,拥有较高的执行速度,不支持事务,不支持外键,并发性能差,占用空间相对较小,对事务完整性没有要求,已select、insert为主的应用基本上可以用这个引擎。index 类似 ALL,但只有索引树被扫描。原创 2023-03-18 12:00:00 · 1060 阅读 · 0 评论 -
底层原理计划--常用linux
CPU 运行模式: 32-bit, 64-bit。厂商 ID: GenuineIntel。架构: x86_64。型号: 158。Linux服务器基本信息查看命令。座: 3。在线 CPU 列表: 0-2。NUMA 节点: 1。CPU 系列: 6。Ps命令 查看静态进程统计信息。查看CPU内存和网卡连接信息。Top 查看进程动态信息、每个座的核数: 1。具体查看文件夹占用情况。每个核的线程数: 1。原创 2023-03-14 09:13:54 · 764 阅读 · 0 评论 -
底层原理计划--常用linux
CPU 运行模式: 32-bit, 64-bit。厂商 ID: GenuineIntel。架构: x86_64。型号: 158。Linux服务器基本信息查看命令。座: 3。在线 CPU 列表: 0-2。NUMA 节点: 1。CPU 系列: 6。Ps命令 查看静态进程统计信息。查看CPU内存和网卡连接信息。Top 查看进程动态信息、每个座的核数: 1。具体查看文件夹占用情况。每个核的线程数: 1。原创 2023-03-18 23:00:00 · 785 阅读 · 0 评论 -
底层原理-----Nacos配置中心
WHY没有配置之前,修改一个东西要修改代码。管理起来很乱。效率低下。扩展难。Ip密码等存储不安全背景配置,应用程序启动和运行时,读取的一些信息,动态调整程序行为,比如需要从哪里连接数据库,缓存多长时间过期等。具有以下特点:只读,程序不允许更改配置伴随应用的整个生命 周期加载方式多样化,程序硬编码,环境变量,启动参数,配置文件(当前最流行),数据库(通常作为配置中心存储介质)程序硬编码,难以维护,每次更新必修重新打包,真实开发并不推荐。环境变量,分布式服务器之间不可复用。原创 2023-03-19 20:15:00 · 1160 阅读 · 0 评论 -
原理底层计划----注册中心Nacos
Why服务多了,需要统一的管理为了更好地查找这些服务1、为什么要将服务注册到nacos?之前的痛点● 需要手动的维护所有的服务访问ip地址列表。● 单个服务实现负载均衡需要自己搭建,例如使用nginx负载均衡策略,或者基于容器化多实例部署单个服务,在实例之间做负载均衡。使用注册中心能够实现服务治理,服务动态扩容,以及服务调用的负载均衡● 服务提供者:向注册中心根据服务名称提供服务访问的ip:port以及其他信息。原创 2023-03-13 20:22:05 · 1675 阅读 · 0 评论 -
一起用feign来调用接口(有源码)
nacos很好的兼容了feign,feign默认集成了Ribbon,所以Nacos下使用Feign就默认实现了负载均衡一、测试结果二、生产者结构图pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc原创 2022-02-27 21:16:31 · 339 阅读 · 0 评论 -
原理底层计划---JVM
它是每个线程私有的空间,JVM会为每个线程创建单独的PC寄存器,在任意时刻,一个Java线程总是在执行一个方法,这个方法被称为当前方法,如果当前方法不是本地方法,PC寄存器会执行当前正在被执行的指令,如果是本地方法,则PC寄存器值为undefined,寄存器存放如当前环境指针、程序计数器、操作栈指针、计算的变量指针等信息。直接内存并不是虚拟机运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,但这部分也是被频繁的读写使用,也可能会导致OutOfMemoryError异常的出现。原创 2023-03-19 18:45:00 · 1455 阅读 · 0 评论 -
跨域问题怎么解决
就是两个项目之间通讯,如果访问的域名与ajax访问的地址不一致情况,默认情况浏览器有一个安全机制。postman不一定能测试出来,因为postman是存调用,没有浏览器那种安全机制也叫安全策略。报错可能为如果a,b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是说不允许跨域请求资源。因为浏览器收到不同的域名,不同端口,不同协议不允许共享资源的,保障浏览器安全。同源策略是针对浏览器设置的门槛。原创 2023-03-03 21:30:00 · 1430 阅读 · 2 评论 -
原理底层计划--分布式事务
在本地事务执行完成后会向MQServer发送Commit或Rollback操作,此时如果在发送消息的时候生产者出故障了,那么要保证这条消息最终被消费,MQServer会像服务端发送回查请求,确认本地事务的执行状态。如果本地事务处理失败,会在继续消费 mq 中的消息进行重试,如果业务上的失败,可以通知系统 A 进行回滚操作,也就是根据记录的数据进行补偿;🌴 幻读:对于两个事务T1,T2,T1在A表中读取了一个字段,然后T2又在A表中插入了一些新的数据时,T1再读取该表时,就会发现神不知鬼不觉的多出几行了…原创 2023-03-02 20:45:00 · 992 阅读 · 0 评论 -
原理底层计划--HashMap
只有当对应位置的数据都为1时,运算结果也为1,当HashMap的容量是2的n次幂时,(n-1)的2进制也就是1111111***111这样形式的,这样与添加元素的hash值进行位运算时,能够充分的散列,使得添加的元素均匀分布在HashMap的每个位置上,减少hash碰撞。HashMap是一个线程不安全的容器,在最坏的情况下,所有元素都定位到同一个位置,形成一个长长的链表,这样get一个值时,最坏情况需要遍历所有节点,性能变成了O(n)。即在数组长度大于64,同时链表长度大于8的情况下,链表将转化为红黑树。原创 2023-03-02 22:15:00 · 979 阅读 · 0 评论