金山面试总结
- 可参考的面试题解析:https://segmentfault.com/blog/shaoxia
- 模拟面试:https://www.nowcoder.com/interview/ai/cover?discussInterviewTagId=464
- 面试灵魂拷问:https://www.nowcoder.com/discuss/151405?source_id=&channel=
算法 / 数据结构 * 30
算法 * 29
- 会哪些算法?
- 排序算法
- 滑动窗口
- 动态规划
- 分治法
- 贪心算法
- 算法怎么样
排序算法:* 10
-
排序用过哪些?哪些是稳定排序?
-
Jdk中有关排序的方法介绍,是否了解过源码
-
快排:* 5
- 手撕
- 说一下快排流程,时间复杂度,空间复杂度,什么时候出现最坏、如何优化
- 优化:https://juejin.cn/post/6844903576037244935
- 口头描述快排、时间复杂度、优化等
-
堆排序:* 2
- 手撕
- 说一下流程,时间复杂度
DP算法:* 2
- 打家劫舍
- 背包问题
- 说一下状态转移方程和流程
流量控制算法:
- 标志桶和漏桶算法的描述以及使用场景。
树:* 4
- 二叉树的前序中序后序遍历
- 树的遍历方式 * 2
- 如何遍历二叉树?如何实现层序遍历
- *二叉树的遍历,递归和非递归
- 寻找树的深度
其他:* 10
- LRU * 4
- LRUCache算法原理,举例子说明双向循环链表插入删除操作
- LRUCache算法,自己实现一个怎么做(引出LinkedHashMap,引出线程安全问题?)
- 滑动窗口
- *图的遍历方式
- 反转链表
- 如何实现优先队列 * 2
- 如何用堆实现优先队列
- 优先队列怎么实现,除了使用堆
- 口头描述最长递增子序列算法
- 笔试题
- 给一个链表,去掉所有,只出现过一次的节点
- 给一个无序数组,求出第n大的数字出现的次数
- 默写自平衡二叉搜索树<感觉有点像替罪羊树?>
- N2复杂度求出最长回文串长度
数据结构
- 二叉树的使用场景?跟链表的区别?举例
计算机网络 * 37
- ip和mac地址的关系
- 同个内网中的设备发送数据会经过什么流程
- *浏览器地址栏输入网址整个过程 * 2
- 只会建立一个Http吗?中间还会做其他操作吗?
- 协议 * 32
- http * 11
- Http的请求过程
- 说一下Http协议
- Http长连接 * 3
- 长连接和短链接区别?http是长连接还是短链接?
- 2.0的特性,和1.1有什么区别? * 3
- header中的字段
- get 和 post 区别
- *Http状态码介绍(1XX-5XX),401、405、406分别代表什么?
- https * 4
- https了解吗
- 常用的对称加密和非对称加密算法有哪些
- http和https的区别 * 2
- 描述https通信过程,加密认证机制
- TCP * 17
- TCP与UDP的区别 * 3
- 哪些协议是基于TCP/UDP的
- 3握手4挥手 * 8
- 为什么是三次TCP握手
- 为什么两次握手不行
- 三次握手和四次挥手流程
- 通过什么判断握手和挥手
- TCP四次挥手,什么时候断开
- *tcp三次握手过程中,哪个阶段会出现close_wait?如果出现大量的close_wait是什么原因?如何解决?(引出常见的Linux命令及排查过程)
- 流量控制: * 4
- TCP滑动窗口机制 * 3
- 说一下作用
- TCP滑动窗口机制 * 3
- 拥塞控制:* 2
- 说一下拥塞控制算法
- TCP与UDP的区别 * 3
- http * 11
- session 和 cookie 的区别 - ?
设计模式 * 6
Root: * 6
- 会哪些设计模式,讲解一下单例模式 * 2
- 说一两个设计模式,它的定义,怎么去用
- 工厂模式(问的很细),优点、写法、为什么要用它 - ?
- 用过什么设计模式?
- 责任链模式是怎样的,跟装饰者模式区别(这个不太清楚直接说没有遇到), 还用过哪种设计模式?Java哪里用到什么设计模式?
Java * 87
基础 * 14
- 重写重载区别
- 怎么理解面向对象 - ? * 4
- Java抽象、面向对象说一下,举个场景
- 面向对象设计的场景题:设计一个,高三学生毕业后,上大学,学习某某专业,毕业后变成某行业工作人员
- 面向对象的三大特性
- 异常的分类图 * 3
- 讲一下Java中的异常处理
- 你遇到的运行时异常
- 集合分类图
- 接口和抽象类的区别是什么
- Integer和int的区别
- final关键字
- 父类中的static为啥不能被子类覆盖?
- StringBuffer和StringBuilder的区别?
高级 * 1
- 反射原理是什么?应用有什么? - ?
数据结构(集合) * 27
- 集合类讲一下 * 4
- 用过哪些集合 * 2(引出hashmap、List等)
- 说说你所知道的集合,并说说内部实现
- HashMap 和ConcurrentHashMap的底层实现及区别 * 15
- ConcurrentHashMap 的优化点,性能怎么样
- HashMap数据结构,什么时候树化,讲解一下红黑树 * 2
- 说下红黑树的特点?插入数据后是如何旋转的?
- HashMap数据结构,红黑树退化
- 说一下HashMap
- *HashMap是线程安全的吗?如何解决不安全?说下concurrenthashmap的put过程
- hashmap扩容是怎样的?为什么要保持2的n次方? - ?(整理下常见集合的扩容)
- *解决hash冲突的方法有哪些?开放定址法的优缺点?如何理解线性增长? - ?
- 如何遍历HashMap
- *快速失败(fail-fast)有了解吗?怎么实现? - ? - https://juejin.cn/post/6844903711148359693
- Map和HashMap的区别 * 2
- HashMap了解吗,讲讲put的原理
- HashMap和LinkHashMap的原理
- 口头描述HashMap的实现,包括哈希方法
- equals方法和hashCode方法
- ArrayList 和 LinkedList的区别,是否线程安全? * 5
- 有哪些线程安全的List?
- 如何遍历List
- List转化 - https://blog.csdn.net/zjx2016/article/details/78273192
- arraylist和linklist区别,arraylist同步问题,锁机制
- BlockingQueue都有哪些?
- 常用的数据结构哪些
- 如何存不重复数据(答了用set存,问map不可以吗,答key不允许重复,重复插入会被覆盖,value值可以重复)
并发编程 * 32
-
线程 * 20
-
线程的状态有哪些 * 2
- 六种状态,之间的相互转换,可引出:
- Object的wait和UnSuport的park的区别
- wait和sleep的区别?
- 创建线程的方式有哪些?
- 六种状态,之间的相互转换,可引出:
-
创建线程的方式有哪几种?* 3
- Java线程实现介绍,可引出:
- 线程池的创建方式有哪些?有什么区别
- 线程池的参数有哪些?作用是什么?
- SynchronousQueue?项目中用过哪些阻塞队列?引出集合相关
- Java线程实现介绍,可引出:
-
关闭一个线程的方法是什么 - ?
-
守护线程是什么 - ?
-
怎样理解线程安全
-
*线程的同步方式了解吗- ? * 2
- synchronized和AQS的原理、区别
- 引出偏向锁、轻量级锁、重量级锁,锁膨胀过程
- 锁的种类有哪些:按锁粒度(MySQL)、按加锁方式
- *死锁,如何排查和解决
- synchronized和AQS的原理、区别
-
线程、进程、协程的区别 - ?* 4
- 为什么协程的性能好(Go)
-
*线程、进程的中断,这个过程是怎么样的? - ?
-
说说sleep()方法和wait()方法区别,可引出
- 线程状态
-
*常见的线程池有哪几种?如果线程池爆了会怎样? - ?
-
线程池相关工具类介绍
-
多线程开发过吗?通信方式有哪些?
-
多线程的理解(多线程同步的途径)
-
多进程(继承什么, 不继承什么),进程间的通信
-
-
锁 * 5
- Java有哪些锁,分别适用于哪些场景
- synchronized:
- 锁(synchronized 和 Lock),synchronized 加到普通方法和静态方法的区别,一个类的两个方法都加了 synchronized,是一个锁还是两个锁; - ?
- synchronized的方法同步和代码块同步区别
- 类加锁,static方法加锁是加锁什么对象
- CAS:
- ABA问题如何解决
-
线程池: - ? * 2
- 实现线程池,你觉得核心是什么
- 线程池及参数,maximumSize 怎么达到;
-
并发类 - ? * 4
- ThreadLocal 用过吗?底层如何实现的?作用是什么?应用场景? * 2
- 用过原子类吗?答AtomicInteger,问它的原理;
- 说说volitile
JVM * 15
- GC:* 5
- Minor gc 和full gc
- 堆内存的回收算法
- Full GC场景
- 说一下GC
- GC机制
- JVM调优
- 有过调优经验吗
- 类加载机制
- 关于JVM 类加载器机制;
- JMM * 7
- 描述下Java内存模型
- Java 内存分配
- HotSpot 中的持久代指的是哪个分区?
- 堆的分区
- Java堆栈区别
- 什么情况下 OutOfMemory(哪些区域会OOM?)
- 内存泄漏问题
- 对象从产生到消亡的过程(类加载、内存分配、对象创建、代码运行、GC(垃圾标识、垃圾回收)
Spring * 10
- IOC * 3
- 说一下IOC是用来干嘛的
- IOC 原理
- 讲一下IOC,Spring如何解决循环依赖问题
- AOP * 4
- 说一下AOP是用来干嘛的 * 2
- AOP的使用场景即原理
- JDK动态代理和CGLIB的区别 *2 - ?
- jdk proxy 和cglib哪个快
- 说一下AOP是用来干嘛的 * 2
- Spring MVC的请求流程 - ? * 2
- bean 生命周期? - ?
Go
- gmp模型
- gmp模型中阻塞发生时的底层
数据库 * 38
MySQL * 38
-
存储引擎 * 4
- InnoDB
- mysql 引擎有几种,有什么最主要区别(底层结构的区别?) * 3
- MyIsam、InnoDB的区别?
-
存储结构 * 3
- mysql用B+树而不是B树的原因
- 讲讲MySQL的B+树
- 存一张学生选课表应该用什么数据结构(位图) - ?
-
事务 * 7
- 隔离级别 * 4
- 事务的四大特性(ACID)
- *并发事务带来的问题 - ?
- 解释下脏读、幻读产生的情况,MySQL如何解决幻读
-
索引 * 12
-
说一下mysql索引 * 2
-
说一下MySQL的一二级索引(引出存储引擎,引出B+树)
-
索引数据结构类型 * 4
- 哈希索引
- B+树索引 * 4
- B+树索引说一下 * 2
- 为什么用B+树而不是B树或红黑树?(他们之间的区别)
-
索引的种类有哪些
-
索引失效场景 * 3
SELECT * FROM t_user WHERE group_id = 519000; SELECT * FROM t_user WHERE group_id < 519000; SELECT * FROM t_user WHERE group_id != 519000; SELECT group_id FROM t_user WHERE group_id != 519000; SELECT * FROM t_user WHERE group_id = 519000 AND ctime > 1635351822;
-
-
锁
- mysql 行锁和列锁
-
性能优化 * 7
- 如何对mysql性能优化 * 4
- 慢查询建索引,问怎么去分析,答explain
- SQL如何优化?
- 索引优化
- 分表分库
- 数据库写操作会有性能问题吗(答了行锁表锁)
- 深度分页如何优化 - https://segmentfault.com/a/1190000023912355
- 给一个数据库,数据很多,问从表结构怎么优化?
- 如何对mysql性能优化 * 4
-
安全
- mysql如何防止注入(${}和#{}),安全性了解吗
-
其他 * 4
- 给个SQL语句说出它的执行顺序
Select sex,count(name) from test_tab where age>20 group by sex;
- 给一个数据库设计,判断为第几范式,是否有优化的方法
- 数据库日志介绍
- 数据库undo log,redo log的介绍
- 给个SQL语句说出它的执行顺序
中间件 * 30
Redis * 20
- redis比mysql快的原因
- redis了解吗
- 获取所有string的方法?
- 数据结构 * 6
- redis支持的数据类型有哪些 * 3
- redis 有什么数据结构,那set 和list 什么场景使用
- redis用在哪里?用了哪种类型的数据结构(只有字符串。。) * 2
- 应用场景
- Redis 只用来做缓存?
- 原理:* 6
- Redis 中的key 有时间限制,你觉得他怎么实现的?如何设置过期时间? * 2
- 持久化:Redis 持久化你会怎么做 * 2
- redis哈希槽底层原理 - ?
- redis新增节点,哈希槽变化 - ?
- 高级 * 4
- 缓存穿透场景
- 讲下redis的管道作用
- *redis bitmap位图
- https://www.cnblogs.com/54chensongxia/p/13794391.html
- *bitmap原理详解:https://juejin.cn/post/6844903769201704973
- redis哨兵模式 - https://www.nowcoder.com/discuss/540803?source_id=&channel=
Kafka * 8
- Kafka的原理
- Kafka的controller选举 - ?
- Kafka的副本机制
- Kafka的零拷贝
- Kafka的存储 - ?
- Kafka为什么这么快 - ?
- Kafka2.4之后的特性 - ?
- kafka如何防止数据丢失?ack机制用过吗?
Nginx * 1
- nginx怎么用的?
Zookeeper * 1
- zookeeper用过吗?
分布式 * 1
- 用过哪些分布式的东西
操作系统 * 9
Linux * 9
-
配置环境变量
-
*IO模型 - * 4
- NIO 知道吗?
- IO多路复用epoll,是轮询的吗(引出Netty)
- 五种IO模型
- *socket的流程
-
基本操作命令 * 2(常见的Linux的命令)
- 查看线程
- 排序命令(比如统计log日志内容)
-
内存管理 - ?
- 分页、分页保护、碎片
-
对操作系统原理有什么了解
项目 * 23
-
JWT
- 单点登录的实现
-
项目介绍 * 2
-
*项目遇到什么难点?如何解决的(如何优化的) - ? * 3
-
项目用到了什么技术栈? * 2
-
场景题 * 10
- 服务器被一个客户端的进程创建大量连接,怎么排查 - ?
- 多读的场景是怎么优化的,感觉讲的不够好 - ?
- 缓存:Redis
- 数据结构:CopyOnWriteArrayList(读写锁)
- 数据库:加索引
- 并发场景解决方案 - ?
- 云文档,共同协作输入内容,如何保证不冲突 - ?
- 0 - 10亿元素插入(bitmap位图)
- *top K * 2
- RGB颜色存在一个文件中,取出出现频率前十数量的RGB颜色 - ?
- 给定全国各地的城市以及各个城市的用户数量,利用spark统计下topk,说下具体思路 ?
- 给一个六面骰子,如何做出一个1~10的等概率随机方法?
- MySQL 查询前 100 条数据, 以及如何分组
- 如何存不重复数据(答了用set存,问map不可以吗,答key不允许重复,重复插入会被覆盖,value值可以重复)
-
部署环境 * 3
- 项目怎么部署的
- Docker 相关
- CI / CD 发布流程 - ?
-
开发环境 * 2
- Git 相关
- 开发环境(Windows、Linux)
其他 * 21
- 自我介绍 * 5
- 有什么想问我的吗 * 4
- 反问 * 3
- 什么时候出结果?一共几面?几天内会收到面试通知?
- 反问 * 3
- 谈人生
- 聊一下个人的技术栈、个人优势
- 二面项目展开
- 最近在学习什么?
- Go
- Netty
- 对WPS有了解吗
- 将来的职业规划
HR * 6
- 工作意愿
- 是否拿到其他offer
- 期望薪资,薪资体系 * 3
- 介绍企业文化、介绍企业业绩
重点知识整理
My金山 ROOT
- Java
- 并发编程
- 线程
- 锁
- synchronized、AQS
- 乐观锁、悲观锁
- 集合分类
- HashMap、ConcurrentHashMap
- ArrayList、LinkedList
- JVM
- JMM
- GC
- 面向对象
- 异常分类
- 并发编程
- MySQL
- 索引
- 性能优化
- 事务
- 存储引擎
- 协议
- TCP
- Http
- Https
- 项目
- 项目难点
- 场景题
- 中间件
- Redis
- 数据结构
- 原理
- Kafka
- 特性
- 原理
- 应用
- Netty
- 特性
- IO模型
- Redis
- 算法
- 排序算法
- 快排
- 堆排
- LRU
- DP算法
- 排序算法
- Spring
- AOP
- IOC
- Linux
- IO模型
- 基本命令
- 设计模式
- 单例
- 工厂
- 其他
- 自我介绍
- 最近学习
- GO
- Netty
- 生活上在学习做饭
- 职业规划
- 个人优势
- 有分布式系统开发经验
- 有较好的沟通能力和一定团队管理经理
- 有自律的生活,经常反思总结