java面试题
文章平均质量分 76
百事皆可乐~
一切皆有可能
展开
-
为什么在项目中使用List<String> list = new ArrayList<String>()而不是用ArrayList<Object> list = new ArrayList<>()
这里的list和接口都是抽象,依赖的类应该依赖抽象,而不是具体实现。写成ArrayList<Object> list = new ArrayList<>(),那么依赖他的方法参数只能是ArrayList,不能是LinkedList,如果真的要修改具体实现就需要改多行代码,代码维护复杂。软件设计6大原则中的依赖倒置原则,高层模块不应该依赖低层模块,两者都应该依赖其抽象。原创 2023-06-10 21:58:32 · 191 阅读 · 0 评论 -
HashMap集合
如果我们创建HashMap没有指定容量(默认就是16)如果指定了初始容量n,则容量是大于等于n的最小2次幂。这个是我们给定初始容量,最终会调用tableSizeFor(n)这个方法进行判断初始容量。使用无符号右移,或运算。(就是找出大于等于n的最小2次幂)HashMap长度为2的幂次方的原因是为了减少Hash碰撞,尽量使Hash算法的结果均匀。首先看一下HashMap中putVal方法的源码其中有个( n - 1) & hash的方法,那么这个方法是干什么的呢?HashMap为了存取高效,就要尽量原创 2022-07-05 15:32:42 · 215 阅读 · 0 评论 -
抽象类和接口的区别,以及使用场景?
接口中的默认方法:1.抽象类的使用场景既想约束子类具有共同的行为(但不再乎其如何实现),又想拥有缺省的方法,又能拥有实例变量如:模板方法设计模式,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。2.接口的应用场景① 约束多个实现类具有统一的行为,但是不在乎每个实现类如何具体实现② 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。③ 实现类需要具备很多不同的功能,但各个功能之间可能没有任何联系。④ 使用接口的引用调用具体实现类中实现的方法(多态)....原创 2022-06-16 10:47:23 · 6859 阅读 · 3 评论 -
谈谈equlas()和hashcode()方法的之间的关系(为什么重写equlas方法必须要重写hashcode方法)?
对象在不重写的情况下使用的是Object的equals方法和hashcode方法,从Object类的源码我们知道,默认的equals 判断的是两个对象的引用指向的是不是同一个对象;而hashcode也是根据对象地址生成一个整数数值;Java中的hash值主要是用来在散列存储结构中确定对象的存储地址的,提高对象的查询效率。hashcode方法就是用来高效判断对象是否相等的,一般用在equals前面,hash值相同即判断两对象相等,但是由于不同对象可能拥有相同的hash(hash冲突),因此需要equals再原创 2022-06-16 10:17:18 · 121 阅读 · 0 评论 -
四种常见的限流算法
计数限流最简单的限流算法就是计数限流了,例如系统能同时处理100个请求,保存一个计数器,处理了一个请求,计数器加一,一个请求处理完毕之后计数器减一。每次请求来的时候看看计数器的值,如果超过阈值直接拒绝。非常的简单粗暴,计数器的值要是存内存中就算单机限流算法。存中心存储里,例如 Redis 中,集群机器访问就算分布式限流算法。优点就是:简单粗暴,单机在 Java 中可用 Atomic 等原子类、分布式就 Redis incr。缺点就是:假设我们允许的阈值是1万,此时计数器的值为0, 当1万个请求在前1原创 2022-05-23 19:57:45 · 223 阅读 · 0 评论 -
1-3年的java面试题,持续更新中ing
java面试题,面试题原创 2020-11-21 14:17:50 · 2005 阅读 · 2 评论 -
springcloud面试题
1.什么是微服务?微服务的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。2.SpringBoot和SpringCloud的区别?SpringBoot专注于快速方便的开发单个个体微服务。SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供原创 2021-02-27 16:28:38 · 131 阅读 · 0 评论 -
Synchronized和ReentranLock锁的区别
Synchronized和ReentranLock的区别原创 2022-04-26 16:26:16 · 1122 阅读 · 0 评论 -
MySQL的MVCC多版本并发控制
在了解MVCC之前,我们要知道这几个名词,快照读和当前读,隐藏字段和undo log版本链表,ReadView。MVCC 的实现依赖于:隐藏字段、Undo Log、Read View1.什么是MVCCMVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的并发控制 。这项技术使得在InnoDB的事务隔离级别下执行 一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被原创 2022-05-14 16:53:11 · 191 阅读 · 0 评论 -
redo日志和undo日志的理解和深刻认识
带你了解redo日志和undo日志使用和在MySQL中的使用以及应用。首先我们先了解一下MySQL事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由 锁机制 实现。而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。REDO LOG 称为 重做日志 ,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。UNDO LOG 称为 回滚日志 ,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。(这原创 2022-05-14 16:23:13 · 670 阅读 · 0 评论 -
TCP 三次握手和四次挥手的流程
有的人上来就开始吹,一些专业术语都不知道是什么意思,看来也是白看。下面讲一下,三次握手和四次挥手中用到的一些英文术语:SYN, FIN, ACK,seq, PSH, RST, URG.SYN表示建立连接,FIN表示关闭连接,seq(顺序号码),ACK表示响应,PSH表示有 DATA数据传输,RST表示连接重置。三次握手的过程第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于 SYN_SENT 状态。首部的同步位SYN=1,初始序号se原创 2022-05-13 11:53:49 · 224 阅读 · 1 评论 -
Spring IOC和AOP的原理以及实际应用
我来说一下Spring IOC和AOP的原理和应用(百度一大堆,我们这里总结一下)IOC,控制反转,亦可以称为依赖注入。传统模式下使用类的方法与属性,我们需要new出这个类的对象,然后使用对象进行方法调用,而Spring提供了IOC控制反转机制,Spring帮助我们来创建对象bean,并且管理bean对象,来给我们使用,也就是控制反转的意思。在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你原创 2022-05-11 21:33:59 · 842 阅读 · 0 评论 -
String中intern()的使用
解释intern()的使用之前,我们要是知道String s = new String(“ab”)和String s = new String(“a”) + new String(“b”)的区别:0.String s = new String(“ab”)和String s = new String(“a”) + new String(“b”)的区别?String s = new String(“ab”)创建了两个对象 ,堆空间中一个new对象 ,字符串常量池中一个字符串常量"ab"(注意:此时字符串常原创 2022-04-11 16:52:48 · 426 阅读 · 0 评论 -
谈谈获取线程,以及线程池
1.获取多线程的方法继承Thread类,重写Thread类的run()实现Runnable接口实现Callable接口使用线程池获取2.说一下Callable接口重点说一下Callable接口,是一种让线程执行完成后,能够返回结果的。/** * Callable有返回值 * 批量处理的时候,需要带返回值的接口(例如支付失败的时候,需要返回错误状态) * */class MyThread2 implements Callable<Integer> { @Ove原创 2022-04-07 21:11:30 · 3930 阅读 · 0 评论 -
synchronized和Lock有什么区别?用新机Lock有什么好处?你举例说说
lock是一个接口,而synchronized是java的一个关键字,synchronized是关键字属于JVM层面;2.synchronized不需要用户手动释放锁,当synchronized代码执行完成以后系统会自动让线程释放对锁的占有。ReentrantLock则需要用户手动释放锁,若是没有主动释放,就有可能导致死锁现象。需要和lock()和unlock()方法配合try/finally语句快来完成。synchronized不可以中断,除非抛出异常或者正常运行完成。ReentrantLock.原创 2022-04-07 17:00:37 · 449 阅读 · 0 评论 -
spring中bean的生命周期
spring中bean的生命周期Spring中的bean的生命周期主要包含四个阶段:实例化Bean–> Bean属性填充–>初始化Bean—>销毁Bean1.首先是实例化Bean,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用doCreateBean()方法进行实例化,实际上就是通过反射的方式创建出个bean对象。2.Bean实例创建出来后,接着就是给这个Bean对进行属性填充,也就是注入这个Bean依赖的其它bea原创 2022-03-30 11:21:58 · 616 阅读 · 0 评论 -
java面试题
包装类原创 2020-11-21 15:20:14 · 73 阅读 · 0 评论