面试题集锦

java/JVM

1.接口和抽象类的区别
2.JVM的架构是什么
3.class文件的加载过程
4.final的原理
5讲讲GC,CMS和G1的区别

spring

1.IOC与AOP
2.spring事务原理
3.循环依赖
4.设计模式
5.输入url到浏览器到最终展示过程

多线程

1.线程的创建方式
2.线程池无解队列的坏处
3.cas的原理
3.synchronized锁升级策略

分布式

1.怎么保证缓存一致性
2.有百万级并发怎么应对
3.并发与qps
4.分布式锁如何实现,超时时间如何设置

数据库/redis/中间件

1.B 树和B+树做索引的区别
2.项目中用redis的地方
3.分页与分段的区别
4.mysql开启事务的完整过程
5.MYSQL一次查询的过程

网络/操作系统

1.上下文切换的理解
2.操作系统怎么实现上下文切换的,怎么减少并发编程中的上下文切换
3.进程间通信方式;线程间通信方式
4.tcp与udp的区别,用在什么场景下
5.tcp滑动窗口原理
6.ping命令底层
7.如何控制线程优先级
7.进程上下文包含哪些部分
8.进程切换和线程切换有什么区别
9.CPU调度算法(先进先出,时间片轮转,优先级调度,多级反馈调度)
10.什么是虚拟内存
11.如何防止别人用curl直接调接口
12.什么是多线程的上下文切换
13虚拟存储怎么实现的
14TCP粘包拆包怎么解决,收到数据长度不够怎么处理的
15说说select poll epoll,中断的概念
16用户态和内核态
17哪些系统调用会从用户态切换到内核态
18.TCPy延迟确认机制,为什么,TCP拥塞机制,以及采用的算法,重传机制
19只用ip和mac能完成通讯吗
20https的请求过程,为什么要用对称加密,我为什么对称加密比不对称加密块

算法

讲:
1.优先队列
2.大顶堆和小顶堆怎么实现
3.什么是红黑树,用在什么场景下
4.二叉树,AVL树,红黑树的区别

写:
1.归并排序
2.反转链表
3.LRU
4.链表对折
5 :1,2,5面值的零钱凑出N的方案
6 螺旋矩阵
7岛屿数量
8.合并两个有序数组
9.数组的最大子序和
10.写一个线程安全的单例模式
11.5.从10亿个数据中找出最大的10个
构建小顶堆,找出最大的k个值,则遍历数组,前k个放入,之后再有数据和堆顶值比较
,大于则入堆。
在这里插入图片描述

项目:
1.平时遇到的技术难点,擅长什么,项目亮点
2.怎么设计一个分布式id生成器(雪花算法)
3.下单业务如何防止超卖

在这里插入图片描述
4.TCP报文的结构
5.输入URL会发生什么
6.TCP为什么要三次握手
7.操作系统缺页中断,页面置换算法
8.手撕二叉搜索树的删除

如果mysql在执行时,cpu使用率过高,在主从下要如何解决
场景题:

1.如果此时要根据文章的一些内容来查询,要怎样做?用ES

2.es的倒排索引?

3.es的倒排索引底层?(没了解)

计网:

1.TCP的四次挥手?(没复习,看计算机操作系统了,麻了)

2.为什么不是三次?

3.为什么时间是2MSL?

消息队列:

1.选型问题

2.消息的可靠性保证

八股:

1、synchronized和ReentrantReadWriteLock的区别?

2.aqs的原理

3.零拷贝

算法题:经典:小于n的最大数

对微服务的理解?如何拆分微服务?
线上监控如何做的?
接口超时怎么实现告警?
两条select for update语句,一条通过主键索引查找,另一条通过联合索引查找,查到同一条语句,两条语句的锁会冲突吗?我回答了不会,但应该是会的,二级索引上锁时也会给主键索引上锁

给出前序和中序数组,构造二叉树?
如何优化?提示后才想到,使用hash储存下标,避免遍历查找根节点位置
注意是ACM模式

项目中用过mySQL吗?能说说里面有用到mysql进行优化的地方吗?

8.你在实习中遇到的那些http code 的场景,你怎么解决的这些问题的。

9.做题,最长回文串子序列

.算法:从钟表的0点开始,可以顺时针一步或者逆时针一步。给定总步数N,求终点为0点的总可能数。

算法:合并n个升序链表

  1. 现在有一个服务器,问这个服务器最多能接多少连接呢?回答是和采用的方法相关,如果来一个连接就开一个线程的话,和操作系统分配的线程栈大小相关(其实和操作系统调度线程的上限也有关,太紧张了忘了说)。又提了一嘴多路复用技术,多路复用能够维护的连接数就和设计和硬件上线相关了。

  2. Socket五元组是什么,组成有哪些

  3. TCP如何保证可靠传输?答了校验和,重传,滑窗流量控制和拥塞控制

  4. 细嗦滑窗?说了发送端的,接着让说接收端的,接收端怎样决定发来的数据到底是收下还是丢弃呢?这个和我的CS144很相似,我就顺带提了一嘴项目,说出来了,但是感觉语言组织的好垃圾。。

  5. redis中的ZSET用了什么数据结构?答的是跳表,让简单介绍了一下跳表,并且问了跳表的增删查改的时间复杂度。

  6. 让简单介绍了一下Raft协议,问我如果有节点掉线了再上线怎样保证这些集群的数据一致性呢?然而我只做到了选主这块复制状态机还没有做完。于是又问了Raft的选主过程。

  7. 你是怎样对你的WebServer进行压力测试的,要求详细点(到了这鼠鼠就只能说出来是WebBench做的了,集体参数以及HTTP协议代数)面试官看起来不是很满意的样子,说是应该可以再详细一点。(操了C++选手真的不知道该做什么项目好了

  8. 手撕:最长公共子序列,这个撕了五六分钟,太紧张有点忘了撕出来了面试官看了下思路说没毛病,但是飞书的编译器一直报段错误

  9. 反问:现在的项目普遍比较同质化,希望在项目里有自己的改动,再详细些(专指WebServer)

Q9.算法:判断数B是否为树A的子结构(秒AC)
Q10.算法:给定一个数字和数字集合。复用数字集合中的数字,组合出一个不大于给定数字的最大数。(秒AC)

websocket底层原理
还有什么长连接方式
http长连接有几种实现
http2长连接协议了解吗
粘包拆包
websocket连接过程
TCP三次握手
websocket消息发送的格式
websocket发送不同消息的数据结构,opcode不同的位数代表什么
一般维持心跳,发送方发送什么帧,接收方发送什么帧
心跳包多久发一次才能保持长连接
websocket协议扩展
项目
深拷贝浅拷贝
怎么实现深拷贝
HashSet TreeSet区别
TreeSet可以存入null值吗,为什么
ConcurrentHashMap可以存null吗,为什么
HashMap为什么可以存入null值
HashMap 1.7,1.8区别
MySQL查询怎么去重,假设查询条件为 user_id
DISTINCT 和 GROUP BY 区别,哪个性能好
假设user_id存在索引,哪个性能好
缓存数据一致性问题
先更新db,再更新缓存,如果更新缓存失败怎么办
单例模式实现
怎么判断线程池的任务是否都执行完了
导致慢查询的原因
机器cpu负载过高,怎么排查
Java内存泄漏怎么排查
线程池原理
悲观锁乐观锁
char int long占多少字节
session cookie区别
ThreadLocal怎么实现的
平时会看什么源码
maven怎么解决冲突
数据库连接池有哪些,参数有哪些,使用连接池的目的
根据什么来设置合理的连接池参数
分库分表
怎么保证分库分表主键唯一
雪花算法原理
多线程怎么串行执行
手撕:写一个限流算法

MyBatis解决了什么问题
MyBatis怎么实现级联查询(国家、省、市、区)
sql:查询学生的科目分数大于90 且大于5门的姓名和学号
项目
数据缓存一致性问题

锁模型
介绍一下乐观锁和悲观锁以及使用场景

在并发要求高的情况下,选择乐观锁还是悲观锁

如果从数据库中拿到一个值为1,准备修改前经过了很多次修改又回到了1,请问这个锁是否获取成功

其他字段也是会改变的,这种情况怎么解决

SQL优化
SQL优化相关(我嘴漏说了每背好的规则,后来强行掰到性能分析工具)

复合索引ABC,WHERE B=XXX,请问索引能生效吗

条件改成WHERE A>XXX B>=XXX,请问索引生效几个字段

Spring Boot
介绍一下IOC

bean是只有一个还是很多个

Redis
介绍一下redis的锁实现

一个事务获得锁后因为异常中断了,这个锁会怎么样

如果设置了TTL,但事务执行时间过长,锁提前释放了,会怎么样

缓存的更新策略是怎么样的

一个项目上线时没有缓存,有大量请求直接打到数据库,怎么解决

如果缓存同时失效了,怎么解决

微服务
有了解微服务吗,看到哪个部分

可以介绍一下MQ的实际应用吗

分布式事务是怎么解决的,(使用Seata),Seata会做什么事

那一般怎么选择呢

如果因为流量过大导致服务处理异常,全都回滚,开销会不会太大?怎么解决(熔断降级)

之后再执行或者数据恢复?重试?

数据结构
HashMap实现原理

是线程安全的吗(加上原理)

开放题
如果有一个很大的文件,里面10亿个数字,肯定不能全部读到内存,怎么进行排序

1、Redis分布式锁

1.1 获取不到锁怎么处理?

1.2 如果锁过期了,但业务还在处理,此时锁又被其他用户获取了,如何解决?

1.3 Redis机器时间跳变,对锁有什么影响以及会出现什么情况?如何处理?

1.4 Redis锁会出现误删的情况吗?

2、MySQL主从复制,如何实现的

    主从复制是MySQL的功能还是InnoDB引擎的功能

3、介绍数据库事务

4、事务隔离级别,为什么需要设置4种隔离级别

5、MVCC机制

6、JWT token

7、进程、线程、协程

8、为什么需要用户态和内核态

9、在Linux上遇到的问题,你会如何去排除

10、平常是怎么学习的?

手撕:

给一个非负数组和一个整数k,每次可以选择向数组中的任一数字加1,执行k次操作后,问数组元素的乘积最大为多少?

对应力扣2233. K次增加后的最大乘积

4.中间件,Kafka如何控制不丢失消息(这个OK)(offset)
5.web相关
跨域问题(蠢了,我居然说没遇到,面试后直接想起来了)
6.用户安全设计(jwt+token),没深入问题
7.算法 求字符串的最大回文子串,思路错(一直再想递归解决,其实是动态规划)

Spring boot starter的工作原理
Spring 事务是怎么生效的

手撕:滑动窗口找最小子数组
15. 场景题:两个线程不安全情况下计数到100
手撕:给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

单向链表排序

    用了最简单的方法,将节点存List中,然后调用Collections.sort()方法。然后他说自己写个排序算法(插入排序)

    对应力扣147、148
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值