Java八股
文章平均质量分 92
致力分享八股
dlwlrma-IU
日落西山非我意,晚霞在美不及你
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分库分表和sql的进阶用法总结
摘要:分库分表是解决单库性能瓶颈的常用技术,分为垂直分库分表(按业务拆分)和水平分库分表(按数据行拆分)。实施时需考虑数据分布规则、一致性及事务管理,适用于高并发大数据场景。处理非分片键查询时可采用全局查询、全局索引或分布式查询等方式。SQL进阶用法包括子查询、窗口函数、递归查询等复杂操作,以及索引优化和触发器使用等性能提升技术,能有效支持各类数据分析和高效查询需求。(149字)原创 2025-08-15 14:07:57 · 806 阅读 · 0 评论 -
测试开发你需要知道的技术点
本文收录软件测试面试过程中常见的面试题.一些问题是从网上搜罗而来,剔除了不合时宜的;一些则是自己总结的面试题.很多的问题是开放性的,并没有确切的标准答案.1.为了发现程序中的缺陷,保证软件质量。2.满足用户需要1.项目立项后,参加需求评审2.根据需求文档制定测试用例,然后进行用例评审3.项目提测后,执行用例,问题记录cp4,及时有效的跟进问题的解决情况4.测试环境测试通过后,产品进行验收测试1.黑盒测试,即常说的功能测试2.白盒测试,即单元测试,通常由开发来完成,对程序类和方法的测试。原创 2025-04-03 15:17:31 · 553 阅读 · 0 评论 -
synchronized知识回顾
Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住Monitor 被翻译为监视器,是由jvm提供,c++语言实现在代码中想要体现monitor需要借助javap命令查看clsss的字节码,比如以下代码找到这个类的class文件,在class文件目录下执行,反编译效果如下:monitorenter 上锁开始的地方monitorexit 解锁的地方。原创 2025-03-06 21:39:50 · 732 阅读 · 0 评论 -
JVM知识回顾
类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface) JNI native。原创 2025-02-25 21:26:50 · 900 阅读 · 0 评论 -
常见的垃圾回收算法以及垃圾回收器总结
等。原创 2024-12-24 19:47:08 · 719 阅读 · 0 评论 -
RESTful风格
REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格当我们想表示一个网络资源的时候,可以使用两种方式:传统风格资源描述形式查询id为1的用户信息保存用户信息REST风格描述形式传统方式一般是一个请求url对应一种操作,这样做不仅麻烦,也不安全,因为会程序的人读取了你的请求url地址,就大概知道该url实现的是一个什么样的操作。按照REST风格访问资源时使用行为动作区分对资源进行了何种操作查询全部用户信息 GET(查询)原创 2024-11-17 21:36:11 · 982 阅读 · 0 评论 -
KafKa为什么这么快?
在如今的MQ中三分天下性能之王的必然是Kafkka呢,为什么呢?最简单的就是kafka的单机吞吐量在百万级别以上。而RabbitMQ单机吞吐量在10万级别以下,而阿里开源的RocketMQ在二者之间十万到百万级别,那为什么kafka可以这么快呢,我总结了以下几点原因,如下图,我们可以从以下几个角度来分析分析。原创 2024-11-11 20:30:33 · 1620 阅读 · 0 评论 -
Redis主从架构
numkeys参数用于指定键名参数的个数。键名参数 key [key ...] 从EVAL的第三个参数开始算起,表示在脚本中所用到的那些Redis键(key),这些键名参数可以在 Lua中通过全局变量KEYS数组,用1为基址的形式访问( KEYS[1] , KEYS[2] ,以此类推)。在命令的最后,那些不是键名参数的附加参数 arg [arg ...] ,可以在Lua中通过全局变量。原创 2024-10-27 22:37:13 · 885 阅读 · 0 评论 -
Java设计模式详解----单例模式
软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用原创 2024-10-26 20:01:37 · 3720 阅读 · 0 评论 -
JVM成神之路
堆溢出是指内存中有大量的垃圾对象无法回收,从而造成堆的内存溢出常见的堆溢出有以下几种情况:1.内存泄露:例如使用ThreadLocal时,没有主动释放就会导致内存泄漏。2.无限创建大量对象3.没有合理设置堆得大小4.大量的Execl的导入和导出栈溢出通常是指虚拟机栈溢出,而导致虚拟机栈溢出的主要原因是死循环和无限创建大的对象。原创 2024-10-21 18:42:45 · 2215 阅读 · 0 评论 -
Synchronized是怎么实现的?
所以,在 JDK1.6 中出现对锁进行了很多的优化,进而出现轻量级锁,偏向锁,锁消除,适应性自旋锁,锁粗化(自旋锁在 1.4 就有 只不过默认的是关闭的,JDK1.6 是默认开启的),这些操作都是为了在线程之间更高效的共享数据 ,解决竞争问题。通常提供 singal 机制:允许正持有“许可”的线程暂时放弃“许可”,等待某个谓词成真(条件变量),而条件成立后,当前进程可以“通知”正在等待这个条件变量的线程,让他可以重新去获得运行许可。未被锁定的对象的该计数器为 0,当一个线程获得锁(执行。原创 2024-09-29 07:00:00 · 1257 阅读 · 0 评论 -
AQS为什么采用双向链表
AQS:AbstructQueuedSynchronizd(抽象队列同步器),出现在 JDK 1.5 中。他是很多同步器的基础框架,比如 ReentrantLock、CountDownLatch 和 Semaphore 等都是基于 AQS 实现的。AQS内部,维护了一个FIFO队列和一个volatile的int类型的state变量。在state=1的时候表示当前对象锁已经被占有了,state变量的值修改的动作通过CAS来完成。原创 2024-09-28 14:50:23 · 1223 阅读 · 0 评论 -
Java基础扫盲(二)
有关Java基础知识可以帮助你快速知其底层原理实现。原创 2024-09-28 13:55:56 · 1281 阅读 · 0 评论 -
Java基础知识扫盲
其实我们可以看到,double本身就是不准确的表示一个值,取得是一个近似值,例如,new BigDecimal(0.1) 但是创建出来的值并不是0.1,而是0.100000000000000000055555555......等,但是new BigDecimal("0.1")时,创建出来的值正是0.1值是很准确的。几乎所有的商用编程语言都有序列化的能力,不管是数据存储到硬盘,还是通过网络的微服务传输,都需要序列化能力。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。原创 2024-09-23 17:40:53 · 2898 阅读 · 0 评论 -
面试官问我了解Mybatis吗?我说了解,然后...........
Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语 句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。接口绑定。原创 2024-09-22 22:40:46 · 1420 阅读 · 0 评论 -
HashMap五大核心问题总结
1. JDK8中新增了红黑树,JDK8是通过数组+链表+红黑树来实现的2. JDK7中链表的插入是用的头插法,而JDK8中则改为了尾插法3. JDK8中的因为使用了红黑树保证了插入和查询了效率,所以实际上JDK8中 的Hash算法实现的复杂度降低了4. JDK8中数组扩容的条件也发了变化,只会判断是否当前元素个数是否超过了阈值,而不再判断当前put进来的元素对应的数组下标位置是否有值。5. JDK7中是先扩容再添加新元素,JDK8中是先添加新元素然后再扩容。原创 2024-09-21 20:49:03 · 649 阅读 · 0 评论 -
线程池夺命十四问
线程池:顾名思义就是一个管理线程的容器,当有任务需要处理的时候,放进任务队列里面,由线程池分配空闲的线程处理任务,处理完任务的线程不会被销毁,而是在线程池中等待下一个任务1.降低资源消耗: 频繁的创建与销毁线程,占用大量资源,线程池的出现避免了这种情况,减少了资源的消耗;2.提高响应速度: 因为线程池中的线程处于待命状态,有任务进来无需等待线程的创建就能立即执行(前提是有空闲线程,任务量巨大,还是需要排队的哈);3.更好的管理线程: 线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳原创 2024-09-17 23:37:04 · 1174 阅读 · 0 评论 -
订单出现超时未关闭场景解决方案
关于延迟任务的业务场景在实际开发中应用的很广,因此在处理相关业务时要选择合适的处理方案,并针对可能出现的问题做针对性的方案预警才可保证的业务和数据的安全性。原创 2024-09-15 14:06:13 · 1477 阅读 · 0 评论 -
Java集合基础知识
List , Set 都是继承自 Collection 接口 List 特点:元素有放入顺序,元素可重复 , Set 特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(元素虽然无放入顺序,但是元素在set中的位 置是有该元素的 HashCode 决定的,其位置其实是固定的,加入Set 的 Object 必须定义 equals ()方法 ,另外list 支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想 要的值。原创 2024-09-08 23:51:35 · 1418 阅读 · 0 评论 -
Redis Sentinel(哨兵)详解
Sentinel是一中运行模式,不提供任何的读写过程,它只负责运行特殊的Redis命令执行自动化的故障转移。默认运行在26379端口上,依赖于Redis工作,可以通过以下命令让Redis以Sentinel的形式运行或者Redis的源码中就是用来配置Sentinel的// 指定要监视的 master// 127.0.0.1 6379 为 master 地址// 2 表示当有 2 个 sentinel 认为 master 失效时,master 才算真正失效。原创 2024-09-08 16:10:27 · 1684 阅读 · 0 评论 -
AI模拟面试记录
避免了多份同样字节码的加载,内存是宝贵的,没必要保存相同的两份 Class 对象,例如 System.out.println() ,实际我们需要一个 System 的 Class 对象,并且只需要一份,如果不使用委托机制,而是自己加载自己的,那么类 A 打印的时候就会加载一份 System 字节码,类 B 打印的时候又会加载一份 System 字节码。这个策略为:在缓存结构的K条记录中,哪一个key从进入缓存结构的时刻开始,被调用set或者get的次数最少,就删掉这个key的记录;原创 2024-09-04 22:54:05 · 1154 阅读 · 0 评论 -
JVM必备知识
程序计数器:线程私有的,内部保存的字节码的行号。用于记录正在执行的字节码指令的地址。java虚拟机对于多线程是通过线程轮流切换并且分配线程执行时间。在任何的一个时间点上,一个处理器只会处理执行一个线程,如果当前被执行的这个线程它所分配的执行时间用完了【挂起】。处理器会切换到另外的一个线程上来进行执行。并且这个线程的执行时间用完了,接着处理器就会又来执行被挂起的这个线程。那么现在有一个问题就是,当前处理器如何能够知道,对于这个被挂起的线程,它上一次执行到了哪里?原创 2024-09-04 21:38:16 · 1096 阅读 · 0 评论 -
ReentrantLock可重入锁又是怎么回事?
有关Synchronized锁的知识可以参考我上篇写的内容。原创 2024-08-27 14:37:02 · 1290 阅读 · 0 评论 -
Java中的Synchronized,你了解多少?
可重入性是锁的一个基本要求,是为了解决自己锁死自己的情况。比如一个类中的同步方法调用另一个同步方法,假如Synchronized 不支持重入,进入method2方法时当前线程获得锁,method2方法里面执行method1 时当前线程又要去尝试获取锁,这时如果不支持重入,"它就要等释放,把自己阻塞,导致自己锁死自己。原创 2024-08-27 14:20:21 · 1019 阅读 · 0 评论 -
Spring底层篇
Spring: 是一个企业级java应用框架,他的作用主要是简化软件的开发以及配置过程,简化项目部署环境。Spring的有点:1、Spring低侵入设计,对业务代码的污染非常低。2、Spring的DI机制将对象之间的关系交由框架处理,减少组件的耦合。3、Spring提供了AOP技术,支持将一些通用的功能进行集中式管理,从而提供更好的复用。4、Spring对于主流框架提供了非常好的支持。IOC就是控制反转,指创建对象的控制权转移给Spring来进行管理。原创 2024-08-23 08:00:00 · 537 阅读 · 0 评论 -
网络协议与Netty
说到RPC就必须要聊一聊单体项目和分布式/微服务项目发生在上的,也就是说调用发生在本机内部,因此也被叫作本地方法调用。和运行在,它们之间的调用相比于本地方法调用,可称之为远程方法调用,简称 RPC。RPC(Remote Procedure Call ——远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络的技术。2011年开源,一个经典的RPC框架(基于TCP的)。还有springcloud中的Feign也是一个RPC的框架,不过它是基于http的。原创 2024-08-21 09:00:00 · 781 阅读 · 0 评论 -
网络协议与IO模型
传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。//客户端启动必备//实例化与服务端通信的输入输出流//服务器的通信地址try{/*连接服务器*//*向服务器输出请求*///接收服务器的输出}finally{if (socket!if (output!if (input!/*服务器必备*//*绑定监听端口*/@Override。原创 2024-08-19 20:30:00 · 1129 阅读 · 0 评论 -
来聊一聊JVM
1.强引用JVM内存管理器从根引用集合(Root Set)出发遍寻堆中所有到达对象的路径。当到达某对象的任意路径都不含有引用对象时,对这个对象的引用就被称为强引用2.软引用软引用是用来描述一些还有用但是非必须的对象。对于软引用关联的对象,在系统将于发生内存溢出异常之前,将会把这些对象列进回收范围中进行二次回收。(当你去处理占用内存较大的对象 并且生命周期比较长的,不是频繁使用的)问题:软引用可能会降低应用的运行效率与性能。原创 2024-08-16 15:06:29 · 1155 阅读 · 0 评论 -
MyBatis系列
接口绑定,就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调 用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置。接口绑定有两种实现方式1. 通过注解绑定,就是在接口的方法上面加上 @Select、@Update等注解,里面包含Sql语句来 绑定;2. 通过xml里面写SQL来绑定, 在这种情况下,要指定xml映射文件里面的namespace必须为 接口的全路径名。原创 2024-08-16 14:30:09 · 1628 阅读 · 0 评论 -
何为乐观锁和悲观锁
乐观锁对应于生活中乐观的人总是想着事情往好的方向发展,悲观锁对应于生 活中悲观的人总是想着事情往坏的方向发展。这两种人各有优缺点,不能不以 场景而定说一种人好于另外一种人。原创 2024-08-12 23:21:34 · 955 阅读 · 0 评论 -
Spring boot的最全注解
在springboot实际开发中常用的注解总结原创 2024-08-08 21:20:26 · 875 阅读 · 0 评论 -
缓存常见问题总结
缓存穿透:请求一个不存在的数据,缓存层和数据库层都没有这个数据,这种请求会穿透缓存直接到数据库进行查询。它通常发生在一些恶意用户可能故意发起不存在的请求,试图让系统陷入这种情况,以耗尽数据库连接资源或者造成性能问题。查询一个缓存中不存在的数据将会执行方法查询数据库,数据库也不存在此数据,查询完数据库也没有缓存数据,缓存没有起到作用。原创 2024-08-04 16:48:12 · 1350 阅读 · 0 评论 -
Spring系列一
控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业 务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配 器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入实现的。控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。原创 2024-08-03 22:08:49 · 679 阅读 · 0 评论 -
Spring Boot系列
是Spring社区的产品,它提供了配置Spring IoC容器的纯Java方法。因此它有助于避免使用XML配置。使用JavaConfig的优点在于:面向对象的配置。由于配置被定义为JavaConfig中的类,因此用户可以充分利用Java中的面向对象功能。一个配置类可以继承另一个,重写它的@Bean方法等。减少或消除XML配置。基于依赖注入原则的外化配置的好处已被证明。但是,许多开发人员不希望在XML和Java之间来回切换。JavaConfig。原创 2024-07-31 14:45:59 · 725 阅读 · 0 评论 -
IO的分类有哪些
BIO:同步阻塞IOJDK1.4之前,建立网络连接的时候采用BIO模式,先在启动服务端socket,然后启动客户端socket,对服务端通信,客户端发送请求后,先判断服务端是否有线程响应,如果没有则会一直等待或者遭到拒绝请求,如果有的话会等待请求结束后才继续执行。线程发起IO 请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成。原创 2024-07-28 17:58:16 · 760 阅读 · 0 评论 -
并发编程篇
自旋锁是基于CAS实现的。CAS没有自旋或者重试的效果,但是自旋锁是基于类似do-while的形式,不断尝试,直到成功为止。CAS本质就是Unsafe类中的一个方法,他只会尝试一次,成功返回true,失败返回false。CAS并不是在Java端实现的一个功能,而是在C++里面做的。最终CAS会被翻译成一个指令。Atomic::cmpxchg,而这个指令是CPU原语,CPU认识这个指令。原创 2024-07-26 23:52:54 · 856 阅读 · 2 评论
分享