java面试常考问题_八股文

author:可以根据下面这些题查漏补缺


(1)

问题:
1. 会哪些开发语言


2. java集合中的ArrayList和LinkedList的实现原理

arraylist和linkedlist都实现了list接口

arraylist实现的底层逻辑是数组,适用于随机访问和查询

linkedlist实现的是底层逻辑是双向链表,适用于插入和删除元素


3. HashMap的底层数据结构

数组+链表


4. ConcurrentHashMap如何保证线程安全

重复扫描:ConcurrentHashMap在进行put操作时,会进行重复扫描,以确定相应key值是否已经在数组里面,进而决定是更新还是放置操作。

5. Hash函数实现

Hash函数是指把一个大范围映射到一个小范围。把大范围映射到一个小范围的目的往往是为了节省空间,使得数据容易保存。


6. Java中的锁

Java中的锁是一种同步机制,用于确保多个线程同时访问共享资源时的线程安全性。


7. synchronized和Lock的区别

Lock接口的实现类ReentrantLock,不仅具有和synchronized相同的并发性和内存语义,还多了超时的获取锁、定时锁、等候和中断锁等。


8. monitorenter和monitorexit字节码底层实现


9. 无锁的缺点

而synchronized会让线程在没获得锁的情况下发生上下文切换,进入阻塞,等到下次唤醒还得启动线程,所以效率比较低 


10. cas的底层实现


11. cpu实现原子性,锁住总线的细节


12. 掌握什么数据库,关系型和非关系型


13. mysql中有一个表有(A,B,C,D)字段,select A,B from 表 where C=? and D=?,怎么建立索引?


14. 掌握的ORM框架


15. Mybatis generator根据表结构自动生成Mapper代码的方式,如果后面在生成的mapper文件中自己新增了一些方法和sql,之后表结构发生变化,比如新增字段,这时候该怎么处理
16. redis有哪些淘汰策略
17. redis中的淘汰策略的LRU算法的具体实现(redis中用的近似LRU淘汰策略)
18. 用代码设计实现一个满足LRU的数据结构(口述),好像leetcode也有类似的题
19. 树形结构的数据库表设计(多叉树)
20. 问简历上的项目(我的项目用到了Java的nio和Reactor模式)
21. 问单Reactor单线程相较于单Reactor多线程有什么缺点
22. 多Reactor相较于单Reactor的好处,为什么要拆成多个Reactor
23. nio底层实现
24. epoll的实现原理
25. 系统如何知道网络事件的到来(网卡,网卡驱动,中断)
26. 算法题目:对称二叉树

(2)

1. ArrayList与LinkedList的区别与使用场景。
2. ArrayList的扩容原理。
3. HashMap的底层数据结构。
4. 为什么HashMap不是线程安全的?
5. 并发的集合都有哪些?
6. ConcurrentHashMap的线程安全是如何保证的?
7. 线程池的参数有哪些,并解释出来它们的含义。
8. 线程池中的5个核心线程、队列长度为500、100个非核心线程,详细解释一下线程池的执行过程。
9. Java中锁住一段代码或者某个方法的方式。
10. Sync关键字的实现方式与Reen可重入锁的实现方式。
11. MySQL中的事务隔离级别有哪些?
12. MySQL的可重复读隔离级别是否可以解决幻读问题?
13. MVCC的底层实现原理。
14. SQL题目一:一句SQL语句查出表中id分别为1,3,5的数据。
    select * from table where id in (1,3,5);
    select * from table where id = 1 or id = 3 or id = 5;
15. SQL题目二:两个表连接查询,one(a,b,c),two(c,d,e),要求a=1,d=2,查出d,e。
    select two.d, two.e from one, two where one.c = two.c and one.a = 1 and two.d = 2;
    select two.d, two.e from one inner join two on one.c = two.c where one.a = 1 and two.d = 2;
16. Redis的数据结构。
17. Redis中String类型的底层实现。
18. Redis是单线程的吗?
19. Redis的接收请求是单线程的,为什么单线程也还会这么快?
20. 如何保证MySQL与Redis的数据一致性。
21. Redis的持久化方式。
22. 算法题:合并两个有序链表(力扣原题)。

(3)

tcp和udp区别

●tcp可靠性是怎么达到的

●tcp的拥塞控制

●Linux机器路径下的文件打开计算机干了什么,操作系统干了什么

●磁盘结构

●为什么区分用户态和内核态

●https用的是对称加密还是非对称加密

●进程和线程的区别

●进程切换和线程切换都会干什么

●Java中都有哪里用到了红黑树

●红黑树相比avl树优点在哪里

●手写单例模式

●volatile的用处,除了保证可见性还能够干什么

●JVM中哪里会发生OOM

●写个方法让方法区或元空间OOM,看实在不会,问给个思路就可以了

●什么情况会导致栈的OOM 说了个递归调用(傻子)

●JVM什么时候会将对象从新生代移动到老年代

●Spring中使用到的设计模式

●数据库底层的索引结构是什么

●B+树相比B树的优点

●为什么递增字段的作为主键会更好

●mysql中的undolog和redolog,binlog

(4)


自我介绍
Java的8个基本类型
TCP和udp的区别, (TCP的四个标志啥的,不清楚)
并发工具(synchronized,reentrantlock,Semaphore,原子类)
介绍一下Semaphore(不会, 一笔带过)
线程池参数
线程池提交线程的流程
JVM内存区域是怎么样
JVM的垃圾收集器(串行,并行,CMS,G1,ZGC)
你提到了ZGC,能不能说说他的算法(不清楚,只知道用了三色标记法,没有分代)
mysql的索引, 如何建立联合索引
数据库的隔离级别
你觉得用哪个好
redis基础数据类型
项目问题(我项目里写的):
RBAC的表结构是怎么样的
springcloud的一些组件(说了熔断器, 负载均衡, 网关,注册中心)
注册中心用Eureka还是zookeeper(用的是Eureka,他是AP的,zookeeper是CP的)
你觉得CP还是AP重要(CP,数据强一致性)

手撕环节:
第一道:快排解决top k问题, 半天没想出来快排算法的过程(绷)
面试官人很好,给我换了一道, 二叉树的层序遍历
但是写完之后放在牛客的框子里编译错误了
说我思路没错, 然后就这样结束了

1. 简单的问了简历上的两个项目,没深入问
2. 合并两个有序链表(迭代+递归)
3. 业务题,与list和map的使用有关(第一次做这种题直接懵了,回头想想其实很简单)
4. 垃圾回收算法,垃圾回收器
5. fullGC是什么,什么时候会触发(忘记了)
6. 数组和链表插入和删除的时间复杂度(回答错了,其实都是O(n),忘记了插入的时候要先查找),数组整体挪动元素的时间复杂度
7. git提交、拉取、合并等命令是什么
8. maven命令有哪些,都有什么用(确实用得少,只想起来两个)
9. 怎么排查慢sql,怎么优化
10. 用实际的sql语句考察:覆盖索引、回表查询、最左前缀法则
11. 死锁是什么,写一个死锁的场景(我以为说的是java的死锁,没想到问的是mysql的死锁,脑子抽了没想出来)
12. 为什么要使用springMVC,有什么好处
13. 设计模式:代理模式和装饰器模式是什么,有什么异同,spring中哪里用到了装饰器模式和代理模式
14. rabbitmq怎么保证消息从生产者端到消费者端不丢失
15. rabbitmq场景题,简单说就是用什么技术手段保证消息传递不重复,高可用,高性能
16. redis过期key的淘汰策略,细问了惰性删除中cpu是采用何种方式支持key的删除的(这个确实不懂)
17. 如何保证缓存和数据库的一致性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值