自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 SpringBoot启动过程

这是一个扩展功能,callRunners(context, applicationArguments) 可以在启动完成后执行自定义的run方法;实现 ApplicationRunner 接口实现 CommandLineRunner 接口接下来我们验证一把,为了方便代码可读性,我把这2种方式都放在同一个类里面/*** 自定义run方法的2种方式*/@Component@Override。

2022-10-03 13:12:59 5182 1

原创 hashmap中为什么使用红黑树?

①红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact|

2022-10-02 14:02:31 2921

原创 HashMap和ArrayList扩容机制

原理:前11个值全部hash碰撞,存到数组的同一个位置(虽然hash冲突,但是这时元素个数小于阈值12,并没有同时满足扩容的两个条件。(1)、就是hashmap在存值的时候(默认大小为16,负载因子0.75,阈值12),可能达到最后存满16个值的时候,再存入第17个值才会发生扩容现象,因为前16个值,每个值在底层数组中分别占据一个位置,并没有发生hash碰撞。以上为jdk1.7版本中,在1.8版本中是先插入再扩容(除非第一次初始化是先初始化再插入值),所以在1.8中key的个数大于阈值便会扩容。

2022-09-29 18:52:34 1604

原创 面试难点总结

JVM参数介绍_Pluto372的博客-CSDN博客_jvm参数Java自定义注解_搬砖大强的博客-CSDN博客_java 自定义注解。

2022-09-29 17:07:54 363

原创 Java实现自定义注解

注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。@Target({ ElementType.FIELD, ElementType.METHOD ,ElementType.TYPE}) //可以在字段、枚举的常量、方法。ElementType.TYPE_USE 应用于任何使用类型的语句中(例如声明语句、泛型和强制转换语句中的类型)表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解。

2022-09-22 20:57:44 185

转载 CopyOnWriteArrayList底层实现原理

前面说过数组引用是volatile修饰的,因此将旧的数组引用指向新的数组,根据volatile的happens-before规则,写线程对数组引用的修改对读线程是可见的。至于写操作,比如向容器中添加一个元素,则首先将当前容器复制一份,然后在新副本上执行写操作,结束之后再将原容器的引用指向新容器。由于在写数据的时候,是在新的数组中插入数据的,从而保证读写实在两个不同的数据容器中进行操作。写的时候不会阻塞读:因为写的时候是拷贝了一个新的数组,往新的里写,读是读旧的。//4. 往新数组中添加新的数据。

2022-09-21 11:34:40 207

原创 B+树和跳表对比

B+树是多叉平衡搜索树,扇出高,只需要3层左右就能存放2kw左右的数据,同样情况下跳表则需要24层左右,假设层高对应磁盘IO,那么B+树的读性能会比跳表要好,因此mysql选了B+树做索引。redis的读写全在内存里进行操作,不涉及磁盘IO,同时跳表实现简单,相比B+树、AVL树、少了旋转树结构的开销,因此redis使用跳表来实现ZSET,而不是树结构。存储引擎RocksDB内部使用了跳表,对比使用B+树的innodb,虽然写性能更好,但读性能属实差了些。在读多写少的场景下,B+树依旧YYDS。

2022-09-17 15:00:03 3392 2

原创 面试常见问题汇总

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。静态编译和动态编译在编译时确定类型,绑定对象运行时确定类型,绑定对象 反射机制优缺点优点: 运行期类型的判断,动态加载类,提高代码灵活度。缺点: 性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多。反射机制的应用场景有哪些?反射是框架设计的灵魂。

2022-09-16 11:42:46 853

原创 求最大的K个数问题

step2:顺序读取后续元素,直到结束。每次读取一个元素,如果该元素比堆顶元素小,直接丢弃;如果大于堆顶元素,则用该元素替换堆顶元素,然后保持最小堆性质。最坏情况是每次都需要替换掉堆顶的最小元素,因此需要维护堆的代价为(N-m)step1:取前m个元素(例如m=100),建立一个小顶堆。保持一个小顶堆得性质的步骤,运行时间为O(lgm);先取出前100个数,维护一个100个数的最小堆,遍历一遍剩余的元素,在此过程中维护小顶堆就可以了。最后这个堆中的元素就是前最大的100个。时间复杂度为O(N lgm)。

2022-09-15 22:11:58 68

原创 为什么用Webscoket

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。Webscoket最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于。心跳机制是每隔一段时间会向服务器发送一个数据包: 告诉服务器(后台)自己还活着,同时客户端(浏览器)会确认服务器端是否还活着 2、如果还活着的话,就会回传一个数据包给客户端 3、服务端断开连接了。

2022-09-15 17:36:20 76

原创 PostgreSql对比MySQL优势

从应用场景来说,PG更加适合严格的企业应用场景(比如金融、电信、ERP、CRM),但不仅仅限制于此,PostgreSQL的json,jsonb,hstore等数据格式,特别适用于一些大数据格式的分析;PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。3、有丰富的几何类型。

2022-09-15 16:45:25 4656

原创 马拉车算法求解最长回文子串

马拉车算法

2022-09-14 21:20:36 91

原创 莫里斯前中后序遍历

【代码】莫里斯前中后序遍历。

2022-09-14 21:18:56 184

原创 二叉树迭代遍历

/ 后序遍历顺序 左-右-中 入栈顺序:中-左-右 出栈顺序:中-右-左, 最后翻转结果。// 中序遍历顺序: 左-中-右 入栈顺序: 左-右。/ 前序遍历顺序:中-左-右,入栈顺序:中-右-左。

2022-09-14 20:36:54 64

原创 使用布隆过滤器解决大量数据的查询问题

虽然这 3 个点都为 1,但是很明显这 3 个点是不同元素经过哈希得到的位置,因此这种情况说明元素虽然不在集合中,也可能对应的都是 1,这是误判率存在的原因。另外计数器回绕也会造成问题。将要查询的元素分别通过k个哈希函数计算得到k个哈希值,这k个hash值对应位数组上的k个位置,如果这k个位置中有一个位置为0,则此元素一定不存在集合中,如果这k个位置全部为1,则这个元素可能存在。将要添加的元素分别通过k个哈希函数计算得到k个哈希值,这k个hash值对应位数组上的k个位置,然后将这k个位置设置为1。

2022-09-14 12:00:50 341

原创 Spring实现原理

在传统的面向对象(OOP)编程中,对垂直切面关注度很高,横切面关注很少,也很难关注,也就是说我们利用OOP思想可以很好的处理业务流程,却不能把系统中的某些特定重复性行为封装在某个模块中,例如在很多的业务中都需要记录操作日志,结果我们不得不在业务流程中嵌入大量的日志记录代码,无论是对业务代码还是对日志代码来说,今后的维护都非常复杂,由于系统中嵌入了这种大量的与业务无关的其他重复性代码,系统的复杂性、代码的重复性都增加了不少,从而使bug的发生率大大增加。核心容器提供 Spring 框架的基本功能。

2022-09-13 16:17:53 2659

原创 springboot实现原理

SpringBoot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以java应用程序进行执行。在没有web.xml配置文件的情况,通过java代码操作整个SpringMVC的初始化过程,java代码最终会生成class文件,内置Tomcat就会加载这些class文件,当所有程序加载完成后,项目就可以访问了。// springmvc注解启动方式,就会创建springmvc容器。

2022-09-13 16:12:53 1070

原创 springcloud实现原理

此时,由于服务注册中心之间因互相注册为服务,当服务提供者发送注册请求到一个服务注册中心时,它会将该请求转发给集群中相连的其他注册中心,从而实现注册中心之间的服务同步。在微服务架构中,存在着那么多的服务单元,若一个单元出现故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定。Hystrix使用舱壁模式实现线程池的隔离,它会为每一个依赖服务创建一个独立的线程池,这样就算某个依赖服务出现延迟过高的情况,也只是对该依赖服务的调用产生影响,而不会拖慢其他的依赖服务。

2022-09-13 16:07:42 857

原创 大量数据的查找和排序问题

由题目知道每个数据不大于8亿,那么我们就需要8亿位,占用800000000/8388608=95M的空间,满足最多使用200M内存进行操作的条件,这也是这题能够使用位图法来解决的一个基础。建立一个足够大的Bit数组当做hash表,以bit数组的下标来表示一个整数,以bit位中的0或1来表示这个整数是否在这个数组中存在,适用于无重复原始数据的搜索,原来的每个整数需要4byte空间变为1Bit,空间压缩率为32倍。我的想法,这个场景既没有介绍数据是否有重复,也没有给出数据的范围,也不是求最大的个数。

2022-09-13 16:05:19 456

转载 力扣股票问题

注意到允许的最大交易次数是不变的,因为每次交易包含两次成对的操作,买入和卖出。如果 k 为正无穷,则 k 和 k - 1 可以看成是相同的,因此有 T[i - 1][k - 1][0] = T[i - 1][k][0] 和 T[i - 1][k - 1][1] = T[i - 1][k][1]。基准情况中,T[-1][k][0] = T[i][0][0] = 0 的含义和上文相同,T[-1][k][1] = T[i][0][1] = -Infinity 的含义是在没有进行股票交易时不允许持有股票。

2022-09-11 21:20:55 139

原创 InnoDB和MyISAM的区别

6.MyISAM 引擎采用的是非聚簇式(即使是主键)设计,索引文件和数据文件不在同一个文件中。5.InnoDB 引擎的索引和文件是存放在一起的,找到索引就可以找到数据,是聚簇式设计。4.InnoDB表的大小更加的大,用MyISAM可省很多的硬盘空间。2.只有 InnoDB 支持事务,MyISAM不支持事务。3.MyISAM不支持行级锁和外键, InnoDB支持。1. InnoDB是MySQL默认的存储引擎。

2022-09-11 17:21:56 175

原创 Mysql性能优化 为什么覆盖索引能够提升效率

假设有一条查询语句如下:上面这条sql语句执行的过程如下:1、根据age这个普通索引在age索引树上搜索,得到主键id的值为300。2、因为age索引树并没有存储User的全部数据,因此需要根据在age索引树上查询到的主键id的值300再到id索引树搜索一次,查询到了u3。3、返回结果。上述执行的过程中,从age索引树再到id索引树的查询的过程叫做回表(回到主键索引树搜索的过程)。也就是说通过非主键索引的查询需要多扫描一棵索引树,因此需要尽量使用主键索引查询。

2022-09-10 16:38:14 190

原创 SpringCloud相关重难点解析

Eureka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务了,而不需要修改服务调用的配置文件,功能类似于Dubbo的注册中心,比如Zookeeper。进程式LB:将LB逻辑集成到消费方,消费方从服务注册中心获取哪些地址可用,然后通过自己再从这些地址中选出一个合适的服务器,Ribbon就属于一个进程LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

2022-09-09 22:34:35 378

原创 动态规划详解

做动规题⽬的时候,很多同学会陷⼊⼀个误区,就是以为把状态转移公式背下来,照葫芦画瓢改改,就。看⼀下题解,感觉看懂了,然后照葫芦画瓢,如果能正好画对了,万事⼤吉,⼀旦要是没通过,就怎么。下来了,遍历顺序靠习惯就是这么写的,然后⼀⿎作⽓写出代码,如果代码能通过万事⼤吉,通过不了。动态规划是⼀个很⼤的领域,今天这⼀篇讲解的内容是整个动态规划系列中都会使⽤到的⼀些理论基。这⼀篇是动态规划的整体概述,讲解了什么是动态规划,动态规划的解题步骤,以及如何。如果和⾃⼰预先模拟推导的不⼀样,那么就是代码实现细节有问题。

2022-09-09 22:33:16 117

原创 Kafka相关重点难点

开启幂等性Max.in.flight.requests.per.connection需要设置小于等于5,因为kafka1.x版本后,启用幂等后,kafka服务端会缓存producer发来的最近5个request的元数据,故无论如何,都可以保证最近的5个request的数据是有序的。-1可靠性分析:如果分区副本设置为1,或者ISR里面应答的最小副本数量设置为1,和ack=1的效果是一样的,仍有丢失风险。消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。

2022-09-09 22:31:48 690

原创 面试--操作系统--进程管理

当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。多级队列就是为这种需要连续执行多个时间片的进程考虑的,它设置了多个队列,每个队列时间片大小都不同,例如:1,2,4,8…调度:线程是独立调度的基本单位,同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程的线程是,会引起进程切换。- 因为进程切换需要保存旧进程的信息并导入新进程的信息,如果时间片太小,会导致进程切换太频繁,在进程切换上花时间过多。

2022-09-09 22:27:46 182

原创 遍历Map:

同时遍历key与value时,keySet与entrySet方法的性能差异取决于key的具体情况,包括复杂度,离散度,冲突率等。如果在遍历的过程中,对数据进行删除操作,就一定要使用Iterator,否则会抛出java.util.ConcurrentModificationException 异常。也有两种写法,一种是使用iterator遍历,一种是直接遍历。只遍历key时,keySet方法更为合适,因为entrySet将无用的value也给取出来了,浪费了性能和空间。//iterator遍历。......

2022-08-14 10:52:11 42

原创 Java定义数组的三种方式

Java定义数组的三种方式

2022-08-07 23:02:33 540

原创 面试问题1

rabbmitMQ怎么设置延迟队列,什么是死信队列。Spring 和SpringBoot。怎么找出SQL语句执行慢的原因。创建数据库语句需要注意的问题。为什么redis查询速度快。

2022-08-04 22:48:18 45

原创 Mybatis 学习笔记

1.Mybatis是支持定制化SQL存储过程以及高级映射的优秀持久层框架2.Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集3.Mybatis可以使用简单的XML注解用于配置和原始映射,将接口的Java的POJO(普通Java对象)映射成数据库的记录4、Mybatis是一个半自动的ORM(对象关系映射,将实体类对象映射到数据库,通过操作实体类对象完成对数据库的操作)框架。1、Mapper接口方法的参数为单个字面量类型,可以通过${}本质是字符串拼接,#{}本质是占位符赋值,以。...

2022-08-04 20:34:16 136

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除