自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java面试问题记录(四)

1)bean的唯一标识:beanID或者beanName2)bean的类型信息,属于哪个class3)bean的作用域4)bean的构造参数5)bean的属性6)bean的初始化和销毁方法7)bean的依赖关系。

2025-09-14 21:45:38 1058

原创 Java面试问题记录(三)

1)利用位运算代替取模,提高运算效率2)保证哈希值的低位参与运算,减少哈希冲突3)简化扩容时索引重计算逻辑总结一下就是说让哈希值分布更均匀,减少哈希冲突。当一个线程通过CAS操作将一个变量从A修改为B,另一个线程又将该变量从B修改为A,那么第三个线程执行CAS操作时,无法发现该变量已经被修改过两次了。针对上述问题,可通过添加版本号去解决,每次修改时递增版本号,CAS比较时同时比较版本号和预期值。

2025-09-13 22:40:46 895

原创 Java面试问题记录(二)

设计核心:瞬时高并发,库存防超卖,系统稳定性1)前端层:秒杀未开始时,按钮置灰,开始后点击一次后置灰,防止用户重复点击。限制单用户每秒请求次数,避免恶意脚本高频请求;将秒杀页面的静态资源(商品图片,HTML,CSS)放入CDN,减少源站压力。2)接口层:可通过nginx限流,直接拦截恶意请求,或者通过网关限流,Spring Cloud Gateway + Sentinel 实现接口级限流(如秒杀接口 QPS 限制为 5000),超过阈值返回 “请求繁忙”。

2025-09-12 22:17:09 759

原创 Java面试问题记录(一)

Java中只有值传递,不存在引用传递。判断传递方式的核心在于:传递的是。区别在于副本的内容是基本类型的值还是对象引用的地址。在上述案例中,变量a是基本类型,在虚拟机栈的局部变量表中,传递时将a的值复制一份给参数num,二者在栈中是独立的内存空间,修改num不影响a。

2025-09-11 16:16:38 664

原创 大事务问题解决办法

在日常开发中,大事务需要尽量避免,它会带来一些琐碎的问题,例如死锁,接口超时,数据库连接池被占满等等。如果在已有系统中已经存在大事务问题,该如何解决呢?

2025-02-17 15:58:13 728

原创 代码重构 - 规范

事物的复杂程度在很大程度上是取决于其有序程度,减少无序能在一定程度上降低复杂度,这正是规范的价值所在。通过规范,把无序的混沌控制在一个合理的范围内,从而帮助我们减少认知成本,降低对事物认知的复杂度。

2025-01-08 22:08:41 922

原创 代码重构 - 命名

写软件的人有一大爱好,就是喜欢聚在一起,相互调侃自家的代码,“我公司祖传代码,五代单传,无注释,如无字天书……”,”我公司代码相关浪,想重构把,又害怕出线上问题”,诸如此类。近些年比较火的是微服务,但是微服务需要更强的业务建模能力和技术管理能力,否则实现和维护微服务只能是难上加难,有时候,我不禁会想,屎山般的代码是不是每个系统发展中不可避免的命运?如果不是,那应该靠什么去避免代码的腐化呢?

2025-01-05 20:16:02 835

原创 如何保证数据库和缓存双写一致性?

数据库和缓存(redis)双写数据一致性问题再高并发的场景下,是一个很严重的问题,无论在工作中,还是面试,遇到的概率非常大,这里就聊一聊目前的常见解决方案以及最优方案。

2024-12-09 20:13:34 1474

原创 关于秒杀不能忽视的细节

秒杀一般出现在商城的促销活动中,指定了一定数量的商品,以极低的价格让大量用户参与活动,但只有极少数用户能够购买成功,这类活动商家绝大部分是不赚钱的,说白了只是找个噱头宣传自己.

2024-12-06 20:55:08 953

原创 接口性能优化的技巧

索引优化的成本是最小的,可以通过线上日志或者监控报告,查到某个接口用到的某条sql语句的耗时。

2024-11-20 20:45:09 1274

原创 拼手气红包如何设计?

微信是我们日常生活中必不可少的聊天工具,里面的红包功能我们也经常使用,其中,拼手气红包有时候可以抢到很大,有时候就只有0.01,那这个功能应该是如何实现的呢?

2024-09-05 11:36:46 2380

原创 垃圾收集器

收集器串行/并行/并发年轻代/老年代收集算法目标适用场景Serial串行年轻代复制响应速度优先单 CPU 环境下的 Client 模式Serial Old串行老年代标记-整理响应速度优先单 CPU 环境下的 Client 模式、CMS 的后备预案ParNew串行 + 并行年轻代复制算法响应速度优先多 CPU 环境时在 Server 模式下与 CMS 配合串行 + 并行年轻代复制算法吞吐量优先在后台运算而不需要太多交互的任务串行 + 并行老年代标记-整理。

2024-08-09 15:47:41 998

原创 JVM垃圾回收

无论是引用计数法还是可达性分析算法都用到了 引用 这个概念,JDK1.2以前,Java中引用的定义很传统,一个对象只有引用和被引用两种状态,我们希望能描述这一类对象:当内存空间足够时,则保留,当GC后内存很紧张,就可以抛弃这些对象,很多系统的缓存功能都符合这样的应用场景,所以在JDK1.2之后,将引用分为四类,不同的引用类型,主要体现的是对象不同的可达性状态和GC的影响。老年代的对象一般寿命比较长,因此每次垃圾回收会有大量对象存活,如果采用复制算法,每次需要复制大量存活的对象,效率很低。

2024-08-02 15:44:11 1028

原创 JVM内存结构

它是一块比较小的内存空间,是当前线程正在执行的那条字节码指令的地址。它是描述Java方法运行过程的内存模型。Java虚拟机栈为每一个即将运行的Java方法创建一个名为 栈帧 的区域,用于存放该方法运行过程中的一些信息,如:局部变量表,操作数栈,动态链接,方法出口信息...它是为了JVM运行Native方法准备的空间,由于很多Native方法都是用C语言实现的,所以它通常又叫C栈。它与Java虚拟机栈实现的功能类似,只不过本地方法栈是描述本地方法运行过程的内存模型。

2024-07-26 17:14:51 1861

原创 Java内存模型

此处的变量不是指java编程中的变量,它包括了实例字段,静态字段和构成数值对象的元素,但不包括局部变量和方法参数。JMM规定所有变量都存储在主内存中。每条线程有自己的工作内存,工作内存中保留了该线程使用到变量的主内存的副本。线程对变量的所有操作都必须在工作内存中进行,不能直接读写主内存的变量,不同的线程间也无法直接访问对方工作内存的变量,线程之间的变量值传递需要通过主内存来完成。

2024-07-19 17:37:28 1027 1

原创 Java SE知识(持续更新中...)

12.synchronized和java.util.concurrent.locks.Lock的异同 :lock能完成synchronized所实现的所有功能,Lock有比synchronized更精确的线程语义和更好的性能,synchronized能自动释放锁,而Lock要求手动释放,并且必须在finally语句中释放。抽象类中可以有普通成员变量,接口中没有普通成员变量;1.switch语句可以作用在int类型上,byte,short,char可以隐形的转换成int,所以也支持,但是不支持long类型。

2024-07-10 10:28:10 410

原创 深入理解 Java 并发锁(2)

确保线程安全最常见的做法是利用锁机制(Lock,synchronized)来对共享数据做互斥同步,这样在同一时刻,只有一个线程可以执行某个方法或者某个代码块,那么操作必然是原子性的,线程安全的。在工作,面试中,经常会听到各种五花八门的锁,听的人云里雾里,实际上,锁的概念术语很多,他们说针对不同的问题所提出来的,通过简单的梳理,也不难理解。死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。

2024-07-09 10:46:22 638

原创 深入理解 Java 并发锁(1)-- AQS

全称为AbstractQueuedSynchronizer,其主要作用是处理同步,它是很多并发锁和很多同步工具类的实现基础(例如ReenTrantLock,CountDownLatch,FutureTask等)

2024-07-03 09:46:01 1032

原创 Java并发简介

并发编程可以总结为三个核心问题:分工、同步、互斥。分工:是指如何高效地拆解任务并分配给线程。同步:是指线程之间如何协作。互斥:是指保证同一时刻只允许一个线程访问共享资源。

2024-05-31 16:09:02 1215

原创 Zookeeper选举机制

节点3启动时,发起一次选举,节点1、2、3先投自己一票,然后因为节点3的id最大,两者更改选票投给为节点3,此时节点3票数最多,当选leader,节点1和节点2更改状态FOLLOWING,节点3更改状态为LEADING。节点2启动时,发起一次选举,投自己一票,此时节点1收到节点2的投票并发现节点2的ID比自己大,于是修改投票节点2,节点1和节点2状态保持为LOOKING。假设节点3宕机了,节点1的事务ID为99,节点2的事务ID为103,节点4的事务ID为100,节点5的事务ID为101,

2024-05-28 10:59:29 362

原创 JavaIO流

IO是input输入和output输出都组成,一个应用程序的输入往往是另一个应用程序的输出。

2024-04-28 11:09:10 1011 3

原创 Mysql索引探究

但是即便是红黑树,也存在着一些极端的O(n)情况,举个例子,红黑树顺序插入1~7个节点,查找id=7的计算节点数为4,那么顺序插入1~16个节点,查找id=16需要计算的节点数为6,通过观察下图中红黑树的形态,当顺序插入时,树一直处于一种右倾的趋势。在二叉树中,节点的左子树一般比节点的值小,右子树比节点的值大,查询范围时,如果是大于,则取右子树的值即可,如果是不等于,则取除节点意外的左右子树,这很容易去实现。如上图所示,如果想要查找id=7的值,需要比较的节点数为4,依然保持着不错的查找效率。

2024-04-08 16:16:15 656

原创 Go语言的简介及安装步骤

举个例子,协程可以启动10万个,然后对应的底层线程数量是可以控制的(通过编程控制),协程启动10万个,对内存没啥消耗。协程是一个循环,会不停的执行(如果程序没有控制时钟或者事件选择的话),运行阶段,协程之间是线程公用的,线程不安全的,你也可以认为协程就是某一段时间的某个线程的执行路径。现在Go的开发已经是完全开放的,并且有一个活跃的社区。5)云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。go是从2007年末由。

2024-03-19 20:02:52 2237

原创 Springboot:关于一次bean注入失败的问题记录

在日常开发中,会遇到各种各样的问题,这次遇到的问题由于我还有别的事情,足足耽搁了三天才解决,此间我尝试过很多方法,以及找同事帮忙看,最后都无功而返。类似这样bean注入的问题,需要从源头开始看,静下心来去研究源码,观察它是怎么初始化,怎么注入进系统中,如果正规手段无法解决,需要使用一些特殊的手段,按照自己的所学去理解它,这样才能在以后的开发中披坚执锐。

2024-03-07 17:47:38 1608 2

原创 多线程基础

进程是操作系统中运行的一个任务,是系统进行资源分配和调度的基本单位。线程是进程的一个基本执行单元。一个进程汇总至少包含一个线程,线程无法独立执行,必须在应用程序中,而进程有一个程序运行的入口,执行序列和程序的出口。简单的说:进程:程序资源的基本单位线程:cpu执行的基本单位。

2024-02-29 17:12:46 2030

原创 Java异常及处理方式

IOException :IO流引起的异常EOFException:输入过程中,意外到达文件或流的末尾时,会抛出该异常。名字是End Of File的缩写,当然也表示流的末尾。FileNotFoundException:读取文件时,发现文件路径不对或者根据对应路径无法找到对应文件,则会抛出该异常。在操作文件时,或多或少都会遇到这个异常,通常可能是文件路径错误引起的,我遇到的比较多就是因为相对路径/绝对路径用错了,当遇到这个异常的时候,需要先排查编写的路径是否可达。

2024-01-12 22:05:39 1757 2

原创 认识Java中的String类

常用方法如图://string的常用方法System.out.println("字符串的长度是 " + str.length());System.out.println("l字符第一次出现的位置是 " + str.indexOf('l'));System.out.println("ll字符串第一次出现的位置是 " + str.indexOf("ll"));System.out.println("l字符最后一次出现的位置是 " + str.lastIndexOf('l'));

2023-12-22 17:32:07 962

原创 Java数据类型

Java数据类型分为:基本数据类型引用数据类型。

2023-12-16 18:30:11 1073 3

原创 对象的基本概念

在子类构造过程当中必须调用父类的构造方法,这个过程隐式地使用了super关键字,这是因为如果子类构造方法中没有显式调用父类的构造方法,则系统默认调用父类无参的构造方法,那么如果自己用super关键字在子类中调用父类的构造方法,则必须在子类构造方法的第一行。注意,这里我们不能使用子类的引用指向父类,就以上面的例子来说,学生是人的一种职业, 但是无法说人是学生的一种职业,学生和人就是子类和父类的继承关系,顺序无法颠倒。当父类的引用指向子类时,该对象是一种特殊的父类,反之,子类引用指向父类是不可行的。

2023-12-13 19:21:31 1051 2

空空如也

空空如也

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

TA关注的人

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