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. 如何保证缓存和数据库的一致性