归志宁无五亩园,读书本意在元元。这篇文章主要讲述1-3年Java开发工程师面试心得分享,精选面试题40道[2021-12-10持续更新]相关的知识,希望能为你提供帮助。
一、前言【1-3年Java开发工程师面试心得分享,精选面试题40道[2021-12-10持续更新]】小编从事java开发不到两年时间,最近也是面试过很多家公司,不说什么大厂。咱只能分享一下自己在面试过程中问到的问题,总结一下,希望可以帮助到您!!答案有时间会补上去,有了问题可以先自己百度一下,网上还是有很多的答案的。
二、Java基础面试题
1. 访问修饰符public,private,protected,default的区别? 修饰符 |
同包下 | 子类 | 当前类 | 其他包下 |
---|---|---|---|---|
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
default | 可以 | 不可以 | 可以 | 不可以 |
private | 不可以 | 不可以 | 可以 | 不可以 |
final finally finalize区别
3. String、StringBuffer、StringBuilder的区别?
4. String str = " wang" 和 String str = new String(" wang" ) 区别?
5. == 和 equals 的区别是什么?
三、多线程面试题1. 实现多线程程序有几种方式?
2. Runnable 接口和实现 Callable 接口的区别?
3. 线程的状态?
4. 线程池的核心属性有哪些?
四、并发面试题1. 谈谈对volitile 关键字的理解?
public void method01()
a = 1;
//语句1
flag = true;
//语句2public void method02()
if(flag)
a = a + 5;
//语句3System.out.println("retValue: " + a);
//可能是6或1或5或0
**2. 谈谈对cas 的理解?**
>
CAS的全称为Compare-And-Swap,它是一条CPU并发原语。
它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。
CAS并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操作。再次强调,由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许被中断,也就是说CAS是一条CPU的原子指令,不会造成所谓的数据不一致问题。(原子性)---来自尚硅谷阳哥```java
//源码分析
//var1 对象本身 var2 对象值得引用地址 var4 需要变动的数量 var5 用过var1,var2找出的主内存中真实的值
public final int getAndAddInt(Object var1, long var2, int var4)
int var5;
do
var5 = this.getIntVolatile(var1, var2);
while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
return var5;
五、集合类面试题1. Vector、ArrayList、LinkedList 有何区别?
2. 对比Hashtable、HashMap、TreeMap有什么不同?
3. 介绍下 HashMap 的底层数据结构?
HashMap jdk1.7和jdk1.8底层区别
4. ConcurrenHashMap,要讲出 1.7 和 1.8 的区别?
附加源码,有需要的可以看看
插入元素过程(建议去看看源码):
如果相应位置的Node还没有初始化,则调用CAS插入相应的数据;
else if ((f = tabAt(tab, i = (n - 1) &
hash)) == null)
if (casTabAt(tab, i, null, new Node<
K,V>
(hash, key, value, null)))
break;
// no lock when adding to empty bin
如果相应位置的Node不为空,且当前该节点不处于移动状态,则对该节点加synchronized锁,如果该节点的hash不小于0,则遍历链表更新节点或插入新节点;
if (fh >
= 0)
binCount = 1;
for (Node<
K,V>
e = f;
;
++binCount)
K ek;
if (e.hash == hash &
&
((ek = e.key) == key ||
(ek != null &
&
key.equals(ek))))
oldVal = e.val;
if (!onlyIfAbsent)
e.val = value;
break;
Node<
K,V>
pred = e;
if ((e = e.next) == null)
pred.next = new Node<
K,V>
(hash, key, value, null);
break;
如果该节点是TreeBin类型的节点,说明是红黑树结构,则通过putTreeVal方法往红黑树中插入节点;如果binCount不为0,说明put操作对数据产生了影响,如果当前链表的个数达到8个,则通过treeifyBin方法转化为红黑树,如果oldVal不为空,说明是一次更新操作,没有对元素个数产生影响,则直接返回旧值;
如果插入的是一个新节点,则执行addCount()方法尝试更新元素个数baseCount;
---感谢:回答原文地址
六、mysql面试题1. 使用过联合索引?
2. 索引失效情况?
3. 怎么查看索引是否生效?
4. InnoDB 和 MyISAM 的区别? 情况比较 |
InnoDB | MyISAM |
---|---|---|
MySQL默认引擎 | 5.5版本之后 | 5.1版本之前 |
是否支持事务 | 支持 | 不支持 |
是否支持外键 | 支持 | 不支持 |
锁的粒度 | 最小行级 | 最小表级 |
是否保存表的具体行数 | 否 | 是 |
是否聚集索引 | 是 | 否 |
写不动了,先暂时写到这里,后面有空继续更新!!
< hr>
七、Spring面试题1. Spring bean 的生命周期?
2. JDK 动态代理和 Cglib 代理的区别?
3. Spring 的事务传播行为有哪些?
八、Redis面试题1. Redis 是单线程还是多线程?
2. Redis 在项目中的使用场景?
3. Redis 常见的数据结构?
4. Redis 的内存淘汰(驱逐)策略?
5. Redis 的持久化机制有哪几种,各自的实现原理和优缺点?
6. 使用过 Redis 做消息队列么?
7. Redis 实现分布式锁?
8. 如何保证数据库和缓存的数据一致性?
9. 说说缓存穿透\\缓存击穿\\缓存雪崩区别和解决方案?
九、Mybatis面试题1. Mybatis是如何进行分页的?分页插件的原理是什么?
2. #和$的区别
十、MQ面试题1. 如何保证消息的消费顺序?
2. 如何保证消息不被重复消费?
3. 如何保证MQ消息的可靠传输?
4. 如何确保消息接收方消费了消息?
5. MQ如何持久化?
推荐阅读
- #yyds干货盘点#--k8s-网络模型
- cadvisor 运行报错/sys/fs/cgroup/cpuacct,cpu: no such file or directory
- #yyds干货盘点#挑战40天从 Python菜鸟变大咖
- #yyds干货盘点#JavaSE系列Java程序设计基础——数据类型变量与运算符
- #yyds干货盘点#Windows/Mac 安装使用 Python 环境 +jupyter notebook
- pxe+kickstart自动安装系统
- Ubuntu12.04可用的源
- #yyds干货盘点#Windows Server之域控转移后清理元数据
- 虚拟机中windows与宿主机文件共享