自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一、SpringBoot自动装配原理

例如我们创建下面的自动配置类,该自动配置类为我们自动装配了一个自定义的线程池对象到容器中。

2024-09-12 14:34:54 461

原创 1、https的全过程

TCP三次握手确认双方可通信,然后进行SSL握手双方获取会话秘钥(在此期间是非对称加密的过程)之后双方通过会话秘钥进行数据交互(此过程是对称加密过程)。

2024-09-11 15:27:19 1237

原创 一、JVM内存模型、方法区、内存泄漏情况、类加载器、双亲委派机制

jvm内存模型主要分为虚拟机栈、本地方法栈、程序计数器、java堆和元空间。方法区是一块存放在元空间的本地内存区域,也是被所有线程共享,它主要用于存储类的信息、静态变量、常量池、编译后的代码等内容。其中方法区也会被垃圾回收。内存泄露是指,一些对象不再被使用却一直占用内存空间,一直不被回收,从而导致可以内存越来越少的现象,以下是内存泄漏的场景双亲委派机制指的是:当一个类加载器要进行类加载时,不会直接加载,而是先委派给自己的上级加载器去加载,直到委派到启动类加载器,如果启动类加载器无法找到这个类,则返回给扩展

2024-09-06 17:38:23 850

原创 二、MySQL加锁过程

看图详解https://download.csdn.net/download/mymic/89705903。

2024-09-02 19:26:27 111

转载 四、一条数据更新总结

具体更新一条记录 UPDATE t_user SET name = ‘xiaolin’ WHERE id = 1;

2024-08-28 17:18:25 43

原创 Java的动态代理

Java的动态代理能够对一些无法修改的方法进行增强,能够对所有子类的方法进行统一处理,减少代码冗余和提高可维护性。JDK动态代理只能对接口进行代理,这是由于Proxy所生成的代理对象已经继承了Proxy类,java不支持多继承,因此只能通过实现接口来对该接口下的所有实现类进行代理,本质上是代理对象实现一个接口,然后对该接口下的所有实现类的方法进行增强。cglib通过ASM框架操作字节码直接进行类的生成,因此能够直接对类和接口直接生成子类,从而对类和接口里的方法进行增强。

2024-08-28 16:44:31 476

原创 三、一文搞懂MySQL MVCC

MVCC全称多版本并发控制,它通过维护一个称为Read View(读视图)的数据,以及维护了在表中的两个隐藏列来配合不同隔离级别下的事务中的快照读,从而避免读取到的数据出现脏读、不可重复读问题。快照是MVCC通过读视图、版本链所实现的在某一时刻下的一份数据副本,这里的某一时刻可以是事务开始时,或者是每次快照读、当前读开始时。

2024-08-28 16:38:08 955

原创 三、Buffer Pool详解

因为Buffer Pool大小有限制,为了保证一些频繁访问的数据可以留在其中,而一些访问少的数据可淘汰掉。引入LRU链表,但MySQL对LRU链表进行了改造,为了解决。Buffer Pool通过三个链表来管理缓存页,链表里存储的是控制块,控制块存储了缓存页的内存地址等信息。

2024-08-28 14:40:19 325

原创 二、bin log、bin log和redo log的区别、主从复制如何实现、两阶段提交

1、为什么需要两阶段提交?2、两阶段提交是什么?

2024-08-28 11:39:57 693

原创 一、undo log、Buffer Pool、WAL、redo log

undo log用做事务回滚,记录了事务更新前的数据,保证事务的原子性,同时也用于实现MVCCredo log用做重做数据,记录了事务更新后的数据,保证事务的持久性。通过自己的redo log buffer来缓存日志并按一定规则进行落盘操作。Buffer Pool用做缓存数据页,如果涉及数据更新,则直接对缓存数据数据页做更新,更新后的数据页称为脏页,脏页由后台线程落盘。

2024-08-27 19:01:11 486

原创 ~~~~~~面试被问汇总~~~

当多个进程协同完成一些任务的时候,不同进程的执行进度是不一样的,比如A、B两个进程要协同完成一次算,A执行到一半要等待B的执行结果,于是会停下来让B执行;B执行完后将结果给A,A又继续执行。这种协作进程间相互等待对方消息或结果、互相合作的过程叫进程同步。为什么?①、为了解决资源共享问题,在操作系统中,多个进程的执行过程是异步的,如果多个进程要对同一共享资源进行操作时,如果随意进行操作,则会出现数据不准确,系统混乱的问题。

2024-08-22 20:37:58 593

原创 六、为什么mysql使用B+树做为索引

B+树是多叉树,树高度比二叉树矮,有利于减少磁盘IO次数。B+树的非叶子节点只存放索引不放数据,这可以使得非叶子节点能存放更多的索引,使得整颗树要比B树更矮。B+树有大量冗余节点,这使得B+树在删除插入时的效率都非常高,因为冗余节点的存在,避免了树的频繁变化。B+树在范围查询方面更高效,因为叶子节点直接用了链表相连,使得范围查询通过链表高效查询,不需要再经过非叶子结点多次磁盘IO

2024-08-22 15:49:27 77

原创 五、如何优化索引

目录优化为前缀索引优化为覆盖索引主键索引最好使用自增主键索引字段最好设置为 NOT NULL预防索引失效优化为前缀索引使用字段中前几个字符建立索引,在为一些大字符串字段建立索引时,h使用前缀索引可以减小索引项的大小优化为覆盖索引当我们频繁查询的字段有多个时,可以将这多个字段设置为一个联合索引,这就使得所查字段都能在这个索引中获取,不需要进行回表主键索引最好使用自增主键自增主键可以使得每次插入的值都在之前节点的后面,不需要移动之前的节点,从而提升插入效率索引字段最好设置为 NOT N

2024-08-22 14:48:55 218

原创 四、什么时候适合 / 不适合创建索引

目录1、索引的缺点2、什么时候适合索引3、什么时候不适合索引1、索引的缺点同样需要占用物理空间,数据量越大,占用越大创建维护索引的耗时随着数据量提升而加大会降低增删改的效率,因为每次增删改要重新维护B+树2、什么时候适合索引字段具有唯一性某些频繁查询的字段,如果有多个,可以建立联合索引经常用于group by和order by的字段,索引已经排好序列3、什么时候不适合索引where、group by和order by后用不到的字段一些区分度比较低的字段,比如性别,因为优化器发

2024-08-22 14:10:18 124

原创 三、联合索引失效场景,哪一个字段使用到了联合索引,根据sql如何建立联合索引

以上场景均用上了联合索引,虽然a在条件最后,但优化器会自动调整位置。以上场景均在在a无序的情况下b、c无法有序。1、对(a,b,c)创建联合索引。1、对(a,b,c)创建联合索引。

2024-08-21 19:30:34 427

原创 一、索引的分类,什么是覆盖索引,什么是回表,什么是索引下推

在查询时使用到了二级索引,而所查的内容只有二级索引里的字段,只需要在二级索引内就能查到,不需要再去聚簇索引拿完整数据,这个过程叫覆盖索引。在查询时使用到了二级索引,而所查的内容除了二级索引里的字段外还有其他字段,需要在二级索引查到主键值再去聚簇索引查完整字段,这个过程叫回表。

2024-08-21 17:27:21 170

原创 二、索引失效的场景

原因:mysql在遇到字段和值不同类型的比较时,会把字段或值都转换为数字类型,再进行比较。如果字段是字符,值是数字,则会把字段转数字,此时相当于对字段使用函数,也就导致索引失效;如果字段是数字,值是字符,则会把值转为数字,此时索引不会失效。其中a是索引,b不是索引。原因:在联合索引中,数据是按第一个字段先排序好,再在第一个字段相等的情况下对第二个字段排序。原因:or表示只要满足一个就可以,所以只有一个条件是索引并没有意义,除非ab都是索引列。原因:因为使用函数后的值是进过计算的值,与索引树里的值不匹配。

2024-08-21 16:59:42 201

原创 java基础面试题汇总及简答(持续更新)

如果只重写了equals但没重写hashcode,那么就会在该对象进行哈希集合相关的存储时出现问题,比如两个equals为true的对象会出现在hashSet集合中,两个equals为true的key在hashMap中存在两个。结论:hashCode方法返回的哈希值决定了对象在像hashSet、hashMap等哈希集合中的位置,

2024-08-01 11:03:14 118

原创 Java的动态代理

1、Java的动态代理能够对一些无法修改的方法进行增强,能够对所有子类的方法进行统一处理,减少代码冗余和提高可维护性。2、JDK动态代理只能对接口进行代理,这是由于Proxy所生成的代理对象已经继承了Proxy类,java不支持多继承,因此只能通过实现接口来对该接口下的所有实现类进行代理,本质上是代理对象实现一个接口,然后对该接口下的所有实现类的方法进行增强。3、cglib通过ASM框架操作字节码直接进行类的生成,因此能够直接对类和接口直接生成子类,从而对类和接口里的方法进行增强。

2024-08-01 10:17:18 309

原创 ES 更新mapping

3、将右边的内容复制下来,加入新的字段(只能新增,无法对原有字段进行修改或删除)。4、将加了字段后的properties复制下来。同时将刚刚复制的内容作为参数,点击执行,成功。2、先获取到索引的mapping。

2024-07-02 17:49:21 303

原创 10G的文件里面全是无序数字,内存只有2G,如何找到里面的中位数

以上算法的思想,首先对每块数据的第一个元素组成最小堆,自然而然可以直接拿到最小元素,关键点在步骤③,为什么要将弹出元素所在块的下个元素放入最小堆呢?因为内存只有2g,而文件有10g,所有不能一次性将磁盘文件的所有数据都读进来,而是通过将10g文件分成内存能处理的多个小文件进行处理,或者每次读取2g大小进行处理。最终,通过一个只有五个数据大小的最小堆,即可得到一个经过排序好的数据文件,不过每次读取块内的元素其实都要经过一次磁盘I/O,内存是够了,但磁盘I/O是很密集的。重复②③,直到每块的元素都遍历完。

2024-05-06 18:09:20 424 1

原创 Java中的ThreadLocal原理,内存泄露原因

因为可能这个key是经过hash及线性探测而来到这个位置的,而可能上一个位置才是他hash后的位置(当然也有可能上上上个),而因为上一个位置已经指向null了,如果这个key不回到上个位置(或者上个位置之前的位置),就会在get(可以看上面的get()方法,如果获取到的Entry为null,则直接设置初始值了)这个key的时候永远get不到了,所有之后④⑤部操作都是为了让它回到上一个指向null的位置(或者null之前的位置)匹配成功,进入expungeStaleEntry方法进行Entry的清空。

2024-04-28 18:17:17 807

原创 一、Mysql中的锁

①概念:是间隙锁+纪录锁的结合,即既锁记录间的间隙,作用范围为左开右闭,也锁记录本身。2、用途:那么有了意向锁,如果想对表加锁,那么会直接查该表是否有意向独占锁,如果有就意味着表里已经有记录被加了锁,这样就不用去遍历表里的记录。②用途:适合一些读多写少,锁冲突概率较小的场景,如果写多锁冲突规律大,则会发生大量回滚或者不断重试,影响性能。①概念:针对整个库的锁,又分全局读锁和全局写锁,读写锁和上面所介绍的读写锁的功能一致。①概念:针对行的锁,又分读锁和写锁,但锁冲突概率低,但更耗资源,容易死锁。

2024-03-18 18:58:03 737

原创 docker-compose安装minio

①up命令:该命令会进行镜像拉取,容器创建并启动等一系列操作,一般用于docker-compose里的内容修改后使 用,例如换镜像,换jar包,换容器卷等,该命令会重新构建容器,之前的容器会抛弃掉。1、在目录下创建一个docker-compose.yml文件填写如下内容,其中镜像可以填写外网的镜像,如果无法连接外网,则填写刚刚导入的镜像。可以将导出的minio.tar包传到需要的docker主机上面,然后执行导入命令.3、查看镜像,此时还没有镜像名和版本号。1)、镜像的导出和导入。

2024-02-23 15:52:29 601

原创 Kafka总结

相当于一个kafka节点(服务),多个broker组成一个kafka集群。例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2024-02-18 15:11:56 692

原创 Excel数据量太大,使用poi的XSSFWorkbook时内存栈溢出,解决方案

五、所以可以先为此excel文件创建一个实体类或者直接使用JSONObject,先把excel里的数据读取到List内存中,再对整个List进行操作就能实现随机访问。一、使用XSSFWorkbook 直接读取大excel时,直接报java.lang.OutOfMemoryError: Java heap space。四、此时的sheet无法随机访问某一行,调用如下getRow()方法会报错。只能通过for来遍历全部。二、因此引进包xlsx-streamer来使用流读取(poi相关包需要在4.0以上)。

2023-12-29 16:42:48 4016 1

原创 ElasticSearch总结

本文总结了我这两个多月以来在公司所涉及到的ES相关的开发经验。公司系统的数据并不是很大,只有五十万左右,但数据的结构却没这么简单,考虑到数据(物料)的搜索涉及到多种条件,包括用户,时间,状态,还有物料本身的特定属性,还有根据某个属性进行范围,模糊和精确查询,对多个属性进行组合查询,使用mongo实现SQL较为复杂,而且响应时间不尽如人意,因此考虑使用ES来实现。es是一款内部以Lucene 做索引与搜索的全文搜索引擎,底层数据结构使用倒排索引来实现全文搜索。

2023-11-10 17:38:53 158 1

原创 前端上传大文件时后端出现java.io.EOFException: Unexpected EOF read on the socket错误

因为前端form表单和button按钮一起出现时,影响到了axios.post方法。当我将form表单删除时,或者form表单不删除,将button改成a标签,文件就能正常上传。

2022-06-14 14:34:58 1547

原创 Java实现图的最小生成树算法

Java实现图的最小生成树算法最小生成树定义:在一个连通图上创建一棵树,使这棵树能遍历所以结点,且路径值最小,且树不能有环,这样的树叫最小生成树。例如:有以下连通图生成的最小生成树就为所以的红色边实现过程:1、图的边类成员说明:①private EdgeNode edgeNode1:连接该条边的一个结点②private EdgeNode edgeNode2:连接该条边的另一个结点③private int weight:该边的权值(长度)public class Edge {

2021-04-23 23:44:26 1153

原创 Java实现邻接表存储图并实现深度优先遍历算法和广度优先遍历算法

Java实现邻接表存储图并实现深度优先算法和广度优先算法1、结点类:成员说明:① edgeNodeList:与该结点相连的结点②name:该结点名字③isVisited:是否被访问过,默认是否public class EdgeNode { //该结点所连接的其他结点 private LinkedList<EdgeNode> edgeNodeList; //结点名称 private String name; //初始阶段结点未被访问 p

2021-04-23 22:48:03 1913

原创 使用vue的axios.post方式上传multipart/form-data类型的文件

使用vue的axios.post方式上传multipart/form-data类型的文件一、post方法上传拿我这里上传视频文件做例子:1、后端接口 @PostMapping("/addVideo") @ResponseBody public String addVideo( VideoDto videoDto) throws IOException { MultipartFile videoFile=videoDto.getVideoFile(); Sy

2021-04-21 12:54:25 2753 1

原创 docker中curl ip报错curl: (56) Recv failure: Connection reset by peer,宿主机无法ping通docker容器

docker中curl ip报错curl: (56) Recv failure: Connection reset by peer,宿主机无法ping(或curl)通docker容器在创建容器的时候,容器的端口号一定要按照默认端口号填写,而主机端口号可随意填写(只要不重复),比如要创建一个tomcat容器,其容器端口号就要是8080,例如像这样 :docker run -d -p 3344:8080 --name tomcat1 tomcat完成后的端口内容是这样的此时就可以通过 curl loc

2021-01-16 14:52:28 14212 14

MySQL加锁过程脑路图

MySQL加锁过程脑路图

2024-09-02

空空如也

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

TA关注的人

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