前言
最近技术交流群里面很多群友在最近面试完之后,都将面试题都发到群里一起讨论,还是比较火热的,都将答案讨论出来了,但是面试题都比较零散,所以博主将大家和博主自己搜集的面试题统一整理了下分享给大家!
文章结尾有惊喜哦!
算法
建议准备一些常见的题目比较好,8大排序算法一定是要会的,然后就是可以针对链表、树分别找出常考的20-30道题目去做去吸收,还有一些DP、贪心、排列组合经典题目,图的话可能code的不多,但是图的算法还是要掌握的,必要时讲出来,拓扑、迪杰斯特拉、普利姆和克鲁斯卡尔啥的。
数据结构
数据结构 ,无非就是数组、链表、栈、队列、树、图这几类,最重要的应该是对他们的使用场景和区别要有所了解。比如树的话,搜索树、平衡搜索树、红黑树、前缀树、B、B+这些。
计算机网络
- 说一说七层模型,各层都是干什么的?有哪些协议?
- TCP和UDP区别,各自的组成部分,基于TCP和UDP的应用层协议?各自应用场景?
- TCP三次握手、四次挥手、为什么三次握手?四次挥手?,三次挥手行不行,连接后客户端出现故障怎么办
- TCP如何保证可靠,拥塞控制过程?
- TCP粘包、拆包出现原因场景及如何解决?
- CLOSE-WAIT 和 TIME-WAIT ?
- TIME-WAIT连接过多什么原因?解决?
- 浏览器输入URL并回车的过程发生了什么?DNS查询过程?DNS什么时候用TCP,什么时候用UDP?CDN知道吗?
- HTTP1.0、1.1、2.0区别?
- HTTP报文格式?常用字段?强缓存和协商缓存?
- HTTP和HTTPS的区别?HTTPS的建立过程?对称加密和非u对称加密?
- HTTP请求方式?GET和POST区别?
- 常见状态码?301和302区别?502和504区别
- cookie和session区别?
- 跨域?怎样解决跨域?
- SYN泛洪攻击?XSS脚本攻击?csrf跨站请求伪造?解决方式?
- ARP欺骗?DNS劫持?傻瓜窗口?等等。。。
操作系统
个人觉得OS这块还是比较好准备的,考的主要就是进程线程、虚拟内存这两大块比较多。Linux考的更多的是常用命令,以及给你个问题怎么排查什么的。
面试题举例:
- 进程由什么组成?进程的几种状态?低地址到高地址都存放哪些东西?
- 进程与线程的区别?
- 进程通信方式有哪些,对比优缺点?
- 用户态和内核态?
- 上下文是什么?进程线程上下文切换?
- 进程调度算法?产生死锁必要条件?解决方式?
- 分页和分段,页面置换算法?
- swap分区?fork函数?僵尸进程?孤儿进程?
- CPU缓存?MESI了解吗等等
- IO模型?多路复用select、poll、epoll?
Java多线程
- Java中线程通信方式
- Java中乐观锁?CAS问题?什么时候用乐观锁?
- volatile关键字?如何防止重排序?底层指令?
- Sychronized 与 ReentrentLock 对比?
- Sychronized底层怎么实现?MarkWord是什么?偏向锁、轻量级锁、重量级锁?自旋参数怎么设置?
- AQS原理?如何实现的公平锁,非公平锁?
- 读写锁?锁降级?变量的高16位低16位分别保存什么信息?
- CountDownLatch、CyclicBarrier、Semaphore?
- 线程池?7大参数?线程池工作过程?自带的线程池为什么不建议用?核心数量应该怎么设置?
- 手写个生产者消费者、阻塞队列、多线程轮流打印ABC?等等吧
JVM
首先主要掌握就是JVM的内存划分,各部分存储什么,干什么的,堆的划分、对象分配原则(对象在老年代还是新生代,怎么移动什么的)、垃圾回收算法、如何标记对象(引用计数法的缺点?GCroots法都哪些对象可以当作根)、对象由哪几部分组成、垃圾回收器(就是G1、CMS可以主要看看,再者可以看下ZGC收集器)、双亲委派原则及破坏、类的加载过程(可以从.java生成.class过程说起,JIT编译器)等等。
大多数比较常见的题目,再者就是JVM调优相关,这个怎么说,就是按自己理解和项目的不同来说吧。
框架
面试的话也是主要看一看各个框架的原理和理解吧,例如Spring的IOC,AOP?循环依赖怎么解决的?bean的生命周期?SpringBoot的启动流程?RPC框架都包含哪几部分?
面试中框架问的还是不多的,问也都是一些特性原理,常见的一些问题,花点时间准备下问题不大。
数据库
- 引擎的区别?
- 索引(失效?联合索引?索引建立原则?)
- 锁(行锁?表锁?间隙锁?)
- 事务(隔离级别,RR怎么避免不可重复读(MVCC)?又怎么避免幻读(MVCC+间隙锁)?)
- B+树索引和哈希索引、聚集索引和非聚集索引?
- 回表查询和索引覆盖?
- 一条SQL执行过程是怎样的?
- 数据过大怎么优化分页?
- 各个日志,都干什么的?
- SQL过慢怎么排查?Explain的关键字段?
- MySQL中LUR怎么改造的?为啥这么改?等等。
- 主从复制?分库分表依据?
Redis
- Redis为什么快?
- Redis持久化方式?
- 数据类型?底层数据结构?
- 过期策略和内存淘汰策略
- Redis 应用场景?
- pipeline批量处理的优点?
- 主从复制原理?cluster了解吗?怎么确定一个key落在哪个节点?一致性哈希了解吗?有什么缺点?怎么解决?
- 缓存雪崩、缓存穿透
- 如何保证缓存与数据库数据一致性?等等。
中间件
关于中间件,了解的可能首先就是消息队列,我最常使用的就是 RabbitMq,但是也要对其他的产品特性与应用场景有所了解,例如Kafka、RocketMq的对比。消息队列常问的问题例如:
- 消息队列应用场景,作用?
- 如何保证消息可靠?
- 如何保证消费者幂等?
- 如何保证消息顺序性?
- MQ积压了很多怎么办?等。
分布式
分布式相关的知识还是要掌握的,毕竟以后的系统都不可能是单点部署的,这就可以看下CAP理论?BASE理论?分布式事务?限流的方案?分布式id生成策略?分布式锁?或者常用的Hystrix组件等。面试时还是考的居多的。
大数据类型
这类题可以多看几个,思路大多大同小异,还是比较好准备的,例如:
- 海量数据整数,内存受限找中位数?
- 如何在100亿URL中快速判断某URL是否存在?
- 海量数据找次数TOP100?等等。
总结
面试是一场持久战,在这个过程中你不仅会收获 满意的offer,锻炼自己的 表达能力和提高情商,还能 交到来自各个地方的朋友,那群曾经与你一起战斗的好朋友们!
宝剑锋从磨砺出,梅花香自苦寒来。祝愿大家拿到满意的offer。
小编也把面试题和答案整理好啦:戳这里免费领取,暗号:CSDN,还有更多大厂面试专题资料和视频哦!
写文不易,觉得有帮助还请点赞关注支持一下小编,也欢迎各位大佬提出问题,感谢!!!