# 面试 **Repository Path**: zxc054/interview ## Basic Information - **Project Name**: 面试 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-08-06 - **Last Updated**: 2021-11-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 面试 # java基础 ## 基础 **学习参考**: **问题参考**: **常问问题**: 1. java中的数据类型内存占用情况 | 数据类型 | 占用情况 | | :------: | :------: | | byte | 1 | | boolean | 1 | | short | 2 | | char | 2 | | int | 4 | | float | 4 | | double | 8 | | long | 8 | 2. string最大能存多少字节 学习参考: [面试官:String字符串的最大长度是多少?](https://blog.csdn.net/java_xiaoo/article/details/108685265) 简单总结: String 的长度是有限制的。 编译期的限制:字符串的UTF8编码值的字节数不能超过65535,字符串的长度不能超过65534; 运行时限制:字符串的长度不能超过2^31-1,占用的内存数不能超过虚拟机能够提供的最大值。 3. jdk1.8相对于1.7新特性 学习参考: [关于面试中经常被问到的JDK8新特性](https://zhuanlan.zhihu.com/p/110858204) [JDK1.8新特性面经整理](https://www.jianshu.com/p/2b5d465fc2ec#comments) 简单总结: 1. JDK8引入新的语法特性,比如Lambda表达式,默认方法,方法引用,新增新的日期处理类 2. JDK8为Collection新增Stream流式接口, 修改HashMap和ConcurrentHashMap实现 3. JDK8修改了JVM内存模型, 实用metaSpace代替永久代 4. JDK新增并发接口和实现, 包括新增CompletableFuture、为ConcurrentHashMap新增支持Stream方法、新增StampedLock 4. over commit 5. oom * string比较多怎么办,如何定位是哪里产生到的!!!!!! 学习参考: [Java面试--OOM](https://blog.csdn.net/weixin_41835916/article/details/81558310) 6. 接口性能优化,如何定位哪里慢 学习参考: [接口执行比较慢,你考虑通过什么方面排查并优化,从哪些方面?](https://www.zhihu.com/question/399427024) [网页/应用访问慢突然变慢,如何定位问题](https://www.cnblogs.com/jxl1996/p/10245832.html) 简单总结: 一般我会从以下几个方面入手: 1.是不是资源层面的瓶颈,硬件、配置环境之类的问题? 2.针对查询类接口,是不是没有添加缓存,如果加了,是不是热点数据导致负载不均衡? 3.是不是有依赖于第三方接口,导致因第三方请求拖慢了本地请求? 4.是不是接口涉及业务太多,导致程序执行跑很久? 5.是不是sql层面的问题导致的数据等待加长,进而拖慢接口? 6.网络层面的原因?带宽不足?DNS解析慢? 7.确实是代码质量差导致的,如出现内存泄漏,重复循环读取之类? 1、top、iostat查看cpu、内存及io占用情况 2、内核、程序参数设置不合理:查看有没有报内核错误,连接数用户打开文件数这些有没有达到上限等等 3、链路本身慢:是否跨运营商、用户上下行带宽不够、dns解析慢、服务器内网广播风暴什么的 4、程序设计不合理:是否程序本身算法设计太差,数据库语句太过复杂或者刚上线了什么功能引起的 5、其它关联的程序引起的:如果要访问数据库,检查一下是否数据库访问慢 6、是否被攻击了:查看服务器是否被DDos了等等 7、硬件故障 这个一般直接服务器就挂了,而不是访问慢 7. http1.0与1.1区别 学习参考: [http与https的区别,http 1.0与1.1的区别](https://www.cnblogs.com/DeryKong/p/10703607.html) 8. tcp客户端与服务端各自最多能建立多少连接 学习参考: [客户端和服务器最多能发送和接收多少TCP连接数?](http://www.voidcn.com/article/p-aocltgnl-bxo.html) 9. 操作系统? 10. String s = new String(“abc”)创建了多少个对象,在内存区域中什么位置? 如果字符串常量池中不存在“abc”,该语句执行时会先在字符串常量池中创建一个“abc”对象,在执行new语句时在堆去开辟新的空间,创建“abc”字符串,同时栈区会有一个引用s指向堆区的对象,此时如果要算上栈区的引用,共创建3个对象,不算,则创建两个对象。 如果字符串常量池中存在“abc”,则只会在堆区创建一个“abc”字符串,同时栈区有一个引用指向堆中的对像。如果算上栈中的引用,共创建了两个对象,不算,则创建了一个对象。 ## 集合 1. HashMap&ConcurrentHashMap **学习参考**: [HashMap面试题,看这一篇就够了!](https://www.cnblogs.com/tianzhihensu/p/11972780.html) [HashMap面试最详解](https://blog.csdn.net/weixin_36366711/article/details/113076217) [深入浅出ConcurrentHashMap详解](https://blog.csdn.net/qq_29051413/article/details/107869427) [面试 ConcurrentHashMap,看这一篇就够了!](https://blog.csdn.net/qq_33762302/article/details/115296225) **问题参考**: [HashMap常见面试题整理](https://www.cnblogs.com/zengcongcong/p/11295349.html) [Java经典面试题:HashMap和HashTable以及ConcurrentHashMap分析](https://segmentfault.com/a/1190000038989327) [HashMap 相关面试题及其解答](https://www.jianshu.com/p/75adf47958a7) [ConcurrentHashMap面试题](https://blog.csdn.net/xt199711/article/details/114339022) **常问问题**: 1. concurrentHashmap扩容机制 2. [equals与hashCode的区别](https://www.cnblogs.com/justdojava/p/11271438.html) * [都有哪些hash算法](https://blog.csdn.net/qq_32534441/article/details/89668268) 3. [object的常用方法](https://blog.csdn.net/qq_43614498/article/details/102882681) 4. concurrentHashMap*2 * get流程 * 怎么比较key的 * 怎么获取到value的 * 数组转列表、链表转红黑树的时机 * 为什么红黑树查找效率高 5. concurrentHashMap1.7与1.8的区别 * Segment(内部为HashEntry[]数组)替换为Node链表+红黑树 * ReentrantLock可重入锁替换为采用CAS+synchronized内置锁实现更加细粒度的锁 6. HashMap1.7与1.8的区别 * Entry替换为Node * 头插法替换为尾插法 * Entry链表替换为Node链表+红黑树TreeNode 7. [集合体系](https://blog.csdn.net/u014494148/article/details/117201976) 8. hashmap ## jvm **学习参考**: **问题参考**: **常问问题**: 2. [类加载过程](https://m.php.cn/java/base/480571.html) 3. [垃圾回收器*4](https://blog.csdn.net/lanzhupi/article/details/113362493) 4. [线上故障处理流程](https://www.cnblogs.com/myseries/p/11791046.html) https://blog.csdn.net/ycb1689/article/details/89669691 https://blog.csdn.net/qq_41901047/article/details/106185705 5. [线上jvm参数如何配置的](https://www.cnblogs.com/c-xiaohai/p/12489640.html) 6. [jvm内存结构](https://blog.csdn.net/lovely_girl1126/article/details/106806879) 7. [jdk常用命令?](https://blog.csdn.net/jiangyunlovec/article/details/79245085) 8. juc*3,juc以及使用场景 * 原子类 * 源码? * [aqs实现原理](https://www.jianshu.com/p/279baac48960) * 公平锁与非公平锁实现原理 * 再获取锁的时候判断当前节点是否有前驱节点,如果有则获取锁失败 9. [happens-before](https://baijiahao.baidu.com/s?id=1654963077694559106&wfr=spider&for=pc) 10. 内存区域 11. [gcroots](https://www.jianshu.com/p/22b8aca18ed5) https://blog.csdn.net/weixin_41910694/article/details/90706652 12. [堆都是线程共享的吗](https://blog.csdn.net/fuzhongmin05/article/details/107513694) * tlab 13. [JVM 为什么使用元空间替换了永久代](https://www.bilibili.com/read/cv5021445/?ivk_sa=1024320u) ## 并发 **学习参考**: **问题参考**: **常问问题**: 1. [线程池*2](https://blog.csdn.net/lixiangchibang/article/details/110456200) * 几大参数 * 执行流程 * 核心参数 * 什么时候会产生线程 2. [什么时候会产生线程不安全问题](https://blog.csdn.net/weixin_38405253/article/details/107132997) * 如何解决线程安全问题 * [ThreadLocal了解吗](https://www.cnblogs.com/juzhuxiaozhu/p/13289251.html) * [volatile是否线程安全](https://blog.csdn.net/weixin_42298382/article/details/112883222) 4. [volatile关键字](https://blog.csdn.net/fumitzuki/article/details/81630048) 5. 并发产生的原因以及带来的问题 6. 并发编程 6. [BIO、NIO、AIO的区别和联系](https://blog.csdn.net/dreamer23/article/details/80903978) 7. 线程池 * [cpu密集型与io密集型的线程池核心线程数如何配置](https://blog.csdn.net/sxllllwd/article/details/100533788) * 线程池的最大线程数是用来干嘛的 # 基础框架 ## spring **学习参考**: **问题参考**: **常问问题**: 1. [spring的事务传播行为,嵌套事务如果内部事务失败了,外部事务怎么处理](https://www.cnblogs.com/happy4java/p/11206804.html) 2. [spring源码](https://blog.csdn.net/u010013573/article/details/86547687) https://www.cnblogs.com/leap/p/10036205.html 3. [spring启动流程](https://blog.csdn.net/u012987563/article/details/99982875) https://www.cnblogs.com/warrior4236/p/13132562.html https://www.cnblogs.com/bzfsdr/p/12937006.html https://blog.csdn.net/nuomizhende45/article/details/81158383/ 4. [aop](https://www.cnblogs.com/tuyang1129/p/12878549.html) 5. ioc 6. [bean的生命周期](https://www.cnblogs.com/shoshana-kong/p/10692887.html) 7. [三级缓存](https://blog.csdn.net/u012098021/article/details/107352463/) 8. [注解Component原理源码解析](https://www.cnblogs.com/wolf-bin/p/11667208.html) 9. [Autowired注解的实现原理](https://blog.csdn.net/windrui/article/details/105963635) https://www.jianshu.com/p/88c255ec71ec 10. ## springMvc **学习参考**: **问题参考**: **常问问题**: 1. [springmvc请求执行流程](https://www.cnblogs.com/gxc6/p/9544563.html) ## springboot **学习参考**: **问题参考**: **常问问题**: 1. [springboot启动流程](https://www.cnblogs.com/trgl/p/7353782.html) https://baijiahao.baidu.com/s?id=1666047746833809358&wfr=spider&for=pc https://baijiahao.baidu.com/s?id=1658585834099966173&wfr=spider&for=pc https://blog.csdn.net/woshilijiuyi/article/details/82219585 https://www.cnblogs.com/hello-shf/p/10976646.html ## mybatis **学习参考**: **问题参考**: **常问问题**: 1. [MyBatis初始化执行过程](https://blog.csdn.net/crave_shy/article/details/46013493) 2. [mybatis常见面试题](https://blog.csdn.net/a745233700/article/details/80977133) ## dubbo **学习参考**: **问题参考**: **常问问题**: ## springcloud **学习参考**: **问题参考**: **常问问题**: 1. springcloud源码说一下? * 如何实现灰度组件 2. springCloud与springMvc的区别 3. springcloud相关组件了解多少 * 微服务架构选型是自己做的?了解其他相关组件吗 * 注册中心选型 * eureka的原理 * 数据存储在什么地方 * 如果对等节点间数据不一致会怎样 * 服务剔除机制 * 如果一个服务当机了,怎么能实现快速干掉这个服务(客户端考虑) * 连接超时与请求超时用哪个? * nginx负载均衡是第几层?每层负载均衡之间的区别 4. 注册中心选型 5. apollo * 是否划分配置文件了? * 项目里的什么内容在上面配置了 6. # 中间件 ## mysql **学习参考**: **问题参考**: **常问问题**: 1. 分库分表*13 * [怎么分库分表的](https://www.cnblogs.com/yanggb/p/11214339.html) * 上线失败怎么办 * 主键生成策略 `SNOWFLAKE`(雪花算法)是默认使用的主键生成方案,生成一个 64bit的长整型(`Long`)数据。 `sharding-jdbc` 中雪花算法生成的主键主要由 4部分组成,`1bit`符号位、`41bit`时间戳位、`10bit`工作进程位以及 `12bit` 序列号位。 * 选型、落地方案、数据如何迁移的、如何路由到每台服务器 * 如何路由、分页查询如何查 * 如何拆分的、为什么要这样拆分、索引为什么使用b+树 * 使用的什么组件、如何分的、shardingjdbc是不是只支持mysql * 如何分的、冷热数据处理 * 落地方案、为什么要这样做 * 为什么要分库分表?、落地方案、为什么要及分库又分表?只分表不行吗? * 划分情况、数据倾斜如何处理、实例信息 2. [分布式事务,分布式事务实现方式*3](https://www.jianshu.com/p/a7d1c4f2542c) 3. [事务隔离级别*3](https://www.cnblogs.com/xrq730/p/5087378.html) 4. [索引原理、索引结构](https://zhuanlan.zhihu.com/p/27789389) 5. sql优化*5 * [explain关键字段](https://blog.csdn.net/hll814/article/details/50765232) * 慢查询优化 * [如何发现慢sql](https://blog.csdn.net/qq_41788977/article/details/103504959) * [关注字段,如果一个sql完全按照你的索引走了,还是慢怎么办](https://baijiahao.baidu.com/s?id=1712109662061690324&wfr=spider&for=pc) 6. [mvcc机制*2](https://blog.csdn.net/qq_34707456/article/details/109477573) 7. 系统数据量分布 8. 事务注解核心参数 9. 怎么保证不幻读的 22. 主从高可用如何实现的 * 主节点挂掉了如何保证新请求能打到新master * mha原理 11. 间隙锁什么时候产生的 32. 按照时间查询? * 不建议这样做,需要单独存 13. 回表 14. 使用mq解决的分布式事务?如何解决的 15. [全文索引](https://blog.csdn.net/mrzhouxiaofei/article/details/79940958) 16. [哈希索引和B+树索引比较](https://www.cnblogs.com/zengkefu/p/5647279.html) ## Redis **学习参考**: **问题参考**: **常问问题**: 1. redis的基本数据类型 * [list的底层结构](https://www.cnblogs.com/reecelin/p/13358432.html) * [快速列表为什么快](https://www.cnblogs.com/xindoo/p/13837364.html) * [跳表的底层结构](https://www.cnblogs.com/yangming1996/p/11663810.html) 2. [持久化策略](https://www.cnblogs.com/gxlaqj/p/11588239.html) 3. [分布式锁*7](https://www.jianshu.com/p/47fd7f86c848) * 线程释放锁之后等待获取锁的线程如何快速获取锁 * 分布式锁的使用及原理 * 分布式锁选型 * 选型 * 原理 * Redisson命令 4. 使用场景*2 7. [布隆过滤器*2](https://www.cnblogs.com/heihaozi/p/12174478.html) * 业务场景 * 实现原理 * 误判率 8. [zset](https://www.cnblogs.com/reecelin/p/13368374.html) * 底层数据结构 * bigset如何优化 * 如何设计一个10w的排行榜,取前100条的算法或者数据结构(二叉堆) 9. [内存淘汰策略](https://blog.csdn.net/henry_yang2018/article/details/107916516) * 项目中使用的是哪个 * 如何设计一个lru算法 10. [如何保证数据库与缓存一致性](https://blog.csdn.net/qq_16803227/article/details/106004133) 11. [单线程为什么快](https://mp.weixin.qq.com/s/9uEWTvDG70XkMrOHbZv_yg) 15. [缓存失效](https://blog.csdn.net/chinawszjr/article/details/103930144) 17. redis为什么能作为内存数据库 * 数据结构讲讲 18. [站在运维的角度考虑如何优化大key](https://segmentfault.com/a/1190000022094801?utm_source=tag-newest) 20. [哨兵模式](https://www.jianshu.com/p/06ab9daf921d) * 如何探活 * 如何故障转移 * 如何选举master * 新的master产生了之后如果有命令还向老的master发送,sentinel怎么做?原理是啥 21. [缓存击穿、穿透、雪崩](https://blog.csdn.net/fcvtb/article/details/89478554) 15. [集群](https://www.cnblogs.com/coolops/p/12809893.html) ## mq **学习参考**: **问题参考**: **常问问题**: 2. 为什么不用mq的事务消息 3. [事务消息的原理](http://lifestack.cn/archives/429.html) 4. 使用场景*2 5. [如何保证mq不丢失*4](https://blog.csdn.net/yueloveme/article/details/98208486) 6. mq都挂了怎么办 6. [分布式事务*6](https://www.cnblogs.com/qdhxhz/p/11191399.html) * 为什么要用独立服务做消息服务,mq完全可以解决啊? * mq是我发送消息了之后就直接保存到broker中了吗? 7. [消息积压](https://blog.csdn.net/mlydaemon/article/details/105901543) 8. [顺序消息能否保证高可用](https://blog.csdn.net/wee616/article/details/89296824) 9. [如何保证消息幂等性](https://www.cnblogs.com/wunsiang/p/12765155.html) 10. [如何保证所有消费者都能消费到消息](https://baijiahao.baidu.com/s?id=1690555364749980380&wfr=spider&for=pc) 11. [延迟队列](https://www.jianshu.com/p/c6a4ede528a8) ## nginx **学习参考**: **问题参考**: **常问问题**: 1. [nginx常见面试题](https://blog.csdn.net/weixin_43122090/article/details/105461971) ## tomcat **学习参考**: **问题参考**: **常问问题**: ## zookeeper **学习参考**: **问题参考**: **常问问题**: ## 项目 **学习参考**: **问题参考**: **常问问题**: 1. qps 2. 监控工具 3. 慢接口性能分析 4. 自己封装的工具实现 5. 绩效考核如何给打c的同学沟通 6. 如何保证项目高可用 7. 如何保证项目质量 * 产品侧如何做风险把控 8. 如何与测试、产品沟通 9. 并发量 * 如何保证项目能支撑这些并发量 10. 接口幂等性 11. 项目里多少人 12. 整体架构以及服务部署情况 13. 网关主要做些什么事 14. 监控平台 * 监控维度 15. 流控工具 * 原理 * 如何进行限流,限流依据是什么? 16. 线上故障 17. 项目qps 18. 接口压测 19. 项目难点 * 业务 * 技术 20. 如何设计一个给自己用的小店用的项目 * 模型评估 * 技术选型 * 设计 * 架构设计 * 数据库设计 * 应用设计 * 编码 * 项目部署 21. 技术选项? 22. 架构 23. 技术亮点 24. 业务亮点 25. 系统架构、监控工具(画图) 26. 业务流程、数据流转(画图) 27. 项目部署情况、jvm参数 28. 项目架构设计 29. 项目都会关注那些指标?怎么保证项目高可用 30. 线上项目部署情况 * 单机最多承受多少qps?如何衡量? 31. 线上故障 32. 服务划分 * 为什么这么多模块没有拆分成为服务而使用一个公共的server? 33. 系统设计 34. 应用设计 35. 如何保证高可用 36. 业务 * 每个模块的设计?吐槽用户、好友模块 * 奖励模块设计?优化? 37. ## 团队 **学习参考**: **问题参考**: **常问问题**: 1. 带团队有什么好的方法? 2. 团队成员数量 3. 开发流程 4. 如何保证质量 5. 绩效考核维度 ## 开放性问题 **学习参考**: **问题参考**: **常问问题**: 1. 遇到过的比较棘手的问题 * 业务 * 技术 2. 如何保证项目代码质量 * 有没有进行单测 3. 如何压测 * 每个环境是否隔离 4. 监控系统 5. 项目中的技术难点 6. 最近在看什么书 7. 个人优缺点 8. 项目相对竞品亮点是啥 9. 对水滴了解多少 10. 为什么离职 11. 职业规划 # 设计模式 **学习参考**: **问题参考**: **常问问题** 1. [常用的设计模式、设计原则](https://blog.csdn.net/qq_24309787/article/details/82257772) * 设计模式 * 单例 * 工厂 * 代理 * 策略 * 适配器 * 模板方法 * OOP设计原则 * 单一职责原则:一个类一般应该设计成只有一个职责 * 开放封闭原则:对扩展开放,对修改关闭 * 依赖倒置原则:抽象不应该依赖于实现细节,实现细节应该依赖于抽象 * 接口隔离原则:客户端不应该可以访问不需要的方法 2. 都熟悉哪些设计模式 * 手写模板方法设计模式 3. # 算法 **学习参考**: **问题参考**: **常问问题**: 1. 求二叉树的最大深度 2. 判断链表是否有环 * 如何找到环的入口 3. 二叉树程序遍历 4. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在 5. 找一个地图上最大连续的点 6. 两个有序列表合并 # 面试记录 [面试记录](https://gitee.com/zxc054/interview/blob/master/%E9%9D%A2%E8%AF%95%E6%80%BB%E7%BB%93.md)