Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注
哪有所谓的套路,你会的越多,你就是套路
最近有很多朋友问我一些面试题,或者说准备面试了,怎么复习啊. 孔孔老师就上线了…正好趁着早上不想学习, 就再把这一块总结总结. 个人拙见(毕竟我还是很low的…) 夹杂部分书推荐
集合我一般喜欢从集合开始问,因为可以延伸到很多地方
- 可能会问对整个集合框架是否熟悉, java集合(一) 总体框架 可以由大而小,层层递进,真正可以讲多细,看当时面试情况吧.但多数可能从hashmap开始问,底层数据结构. 可能你会回答:分版本,1.8之前是数组 链表, 之后是数组链表红黑树.
- 你引出红黑树,那么我就可能会问你,知道什么是红黑树嘛,然后再问红黑树的反转啊等等.
- 下面可能会问hashmap是否线程安全. 这时候你就可以讲put和resize()的时候,会有问题啊. 然后讲讲如何有问题. 或者会问你了解hashmap的扩容嘛, 你就讲讲加载因子(0.75 概率学泊松方程吧),阈值然后怎么扩容的等等. 再说说为啥扩容2的倍数.等等。然后你在讲扩容的时候, 就又可以延伸到线程不安全上面了. 后面可能就会问: 怎么可以让他安全呢. 你可以跳currenthashmap或者 hashTable上面,这样世界又是你的了. 你可以给他们讲与hashmap的区别,他们内部原理.等等. 或者考虑hashmap的代码, 加个锁啥的, 面试官就又可以问你锁相关的知识了. 当讲到锁的时候, 可能会往下问多线程的问题了 集合源码易懂,建议自己读一读.
- 可能会接上面问, synchronized锁粒度. 顺便问问偏向锁轻量锁等.
- 常用线程池, 核心参数有哪些,这里可能会问一些内部具体多线程怎么跑起来的等, 比如什么情况创建新线程, 阻塞队列对线程池有啥影响等,(这里非常建议看并发编程的艺术, 讲线程池的这一章,这了讲的透透的, 然后平时正好项目有用,那么相信你完全没问题)
- 然后你正好引到项目上, 可能我就会问你具体怎么用的,可能出个简单线程题,还可能问遇没遇到死锁问题呀. 死锁怎么检测,原理是啥等等
- spring ioc aop,看过源码吗, 知道aop底层吗, jdk和cglib区别啊等等.
- bean加载过程,AOP,IOC 简介
- springboot的自动配置啊等等.spingboot-springmvc自动配置原理(ps: 只看这几篇文章是不行滴…我好多都没写, 有点小后悔, 可以看看spring的书. spring技术内幕, 然后springmvc技术内幕, 貌似这个名字,封面有绿色…我就记得这些了)
- spring循环依赖.这里也可以讲一些东西,比如如果循环依赖双方都是原型对象,那么肯定报错.如果是单例,配置有参构造器注入, 也报错.等等. 好几种情况.
- springcloud 这个问几大组件的多
mybatis
最基础可能会先问$和#的区别. 预编译,sql注入等. 然后可能会说sql注入的一些东西. 往安全性上偏, 也可以问很多,比如脚本注入等等.
简单使用,可以有参数处理, 动态sql.关系映射等. 缓存机制也是常问的内容.
附我一个地址, 也是不太全, https://blog.csdn.net/kwy15732621629/column/info/20925
源码, 如果你可以自己扩展,那当然更好了.
持久层, 如果你写了hibernate mybatis 或者jpa. 那么可能会问你三者区别啊. ssh框架的话, 可能会问Struts的内容喽~
jvm
- 最简单的, 知道内存空间不. 讲讲~ 然后你巴巴啦啦讲了什么堆栈方法区,本地方法栈,pc寄存器等等. 然后可能会给你出个例子, 说一下, 每个都在哪里放着…所以, 什么位置放什么东西.
- 你了解垃圾回收算法嘛.然后再根据垃圾回收算法, 给简单提点问题.
- 简单问题, 软引用/弱引用啊.哪些会被回收啊.
- 垃圾回收器呢?
- 类加载机制呢?
- 双亲委派了解嘛?
jvm 总结
下面就会问一些jvm调优的内容了
- 你用的什么调优工具,比如jvc, jconsole等等.
- 你参考的一个健康GC状况是什么
- 内存溢出和内存泄露区别是啥. 遇到过oom问题嘛,怎么排查的啊?
redis
- 可能会先上来就问你, 为啥要用缓存啊,你们项目怎么用的.数据量多少啊等
- 然后基础知识, 可能会问你数据结构有哪几种啊. 这里可能会有人问的比较深一点, 比如每种类型底层是什么. 甚至会问一些跳跃表的内容等. 然后一致性hash啊. 和普通hash有啥区别啊等等.
- 持久化机制了解嘛.区别是啥啊, 你们怎么用的啊
- 过期时间了解嘛, 怎么设置的哇
- redis如果重启了,或者宕机了, 这个过期时间会保留.然后讲讲redis的路由机制. (集群通信)然后缓存穿透/缓存雪崩内容.
- 怎么避免重构缓存啊
- 查询慢, 怎么解决啊. 这里可以说很多啊, 从外层比如网络一直到底层
- 缓存数据库双写数据不一致情况
- 公司怎么个硬件部署, 高峰期资源使用情况等.
- 有的可能会在出个场景题. 随机应变喽~
mq
- 使用场景,作用是啥
- 我之前比较熟悉的是rabbitmq. 当然现在在学习kafka.
- https://blog.csdn.net/kwy15732621629/article/details/85647481 基础知识,就是一些原理,然后就是一些应用问题了 4.选型; 5.怎么保证高可用; 6.重复消费问题/ 数据丢失问题 /顺序性问题/ 大量积压怎么办;
好吧, 先说说你知道的rpc.你最熟悉哪个 . 然后就开始问了… 一般如果回答dubbo. 无可避免还会问到zk. 比如注册的临时节点啊. https://blog.csdn.net/kwy15732621629/article/details/82052906 dubbo服务发现啊.通信原理啊, 负载均衡方式,集群容错策略啊 幂等性如何处理, 请求顺序如何处理啊等等 然后zk .其 watch机制啊. zk 原理, 其实分布式的感觉都差不太多. 然后zab协议. 如果扩展多了. paxos协议 一般说完zk,可能会问你们项目中分布式锁的处理. 分布式事务问题. 还是围绕zk的使用来的, 比如选主/发布订阅/负载均衡啊等等.
IO
说完dubbo .可能就会问io了. 客户端到服务端连接后, io通信怎么做? 然后简单可能就会问问bio和nio区别. 然后再聊聊nio的东西, 比如缓冲区/通道/选择器等.再往下,可能会聊聊netty.netty线程模型啊 零拷贝如何实现等
数据库
以mysql为例
- mysql的基础内容开始问. 一般就是存储引擎的一些内容. 然后说一下他们之间的区别.
- 索引, 必问的一个东西.索引原则/ 什么情况不走等等. 或者聚集索引, 非聚集索引. 总之B 往外扩伸, 也是可以有很多很多东东的.
- 数据库锁.比如最简单的乐观锁悲观锁. 数据库死锁问题.
- 是否优化过sql. 如何优化的.
- 隔离级别等
- 主从复制原理, 主从同步延迟问题如何解决.
- 读写分离.
- 分库分表. 怎么做的. 然后分库分表有好几种, 比如客户端分片,代理分片/支持事务的分布式数据库. 那么之类可以继续扩展问你, 比如sharding jdbc. mycat等内容.然后选型问题.
然后扩容方案是什么
之前有一篇, 简单写了些. 没画重点…自行领悟吧 https://blog.csdn.net/kwy15732621629/article/details/87922490
运维部署
这个其实是跟上面很多有关系, 比如说文件服务器用啥. mysql多少台. 整体的一个部署方案, 如何保证三高的~ 然后k8s啊, docker啊这么一个使用和简单原理, 方便排除一些错误使用.常用的linux命令啊.
权限每个公司的权限, 也是一个大块头. 这个看自己能力了. 最简单的基础知识应该都有了解过.
工具类比如solr.elk 等, 就靠自己去学习使用喽~
架构类这个其实我比较low喽,但是面试, 可能会问你一些架构设计问题, 还是蛮常见的. 当然也和你引导面试官, 或者简历本身, 有很直接关系.
设计模式和算法设计模式, 如果代码用了, 可以讲讲如何使用的. 然后简单的东西, 类图和优缺点啥的. 需要了解. 算法, 我平时码代码, 貌似用的不多. 但是基本的一个思想是需要了解的
书籍学习推荐先说好, 没推广费,我就是自己的一个分享…
如果你是实习生,那么基本的java基础肯定是希望扎实的, 如果你做过一些项目,还可以尽快能承担起来, 哇,那我很喜欢了好嘛
如果社招, maybe你比我优秀喽, 那么可否再推荐我些学习内容哇
java疯狂讲义, 最原始, 最简单的基础, 但是多看的时候, 总能发现自己不会的内容~
java8新特性, 这个就自己网上找视频学习使用吧.
java集合类. 建议自己跟着源码走一下.
io的话, 疯狂讲义也又讲, 然后http://ifeve.com/overview/ 这个地址也可以看看, 然后还有一本书, 叫java nio中文版 . netty的话, 我就是看的闪电侠的博客和课程(目前我还在看…我还不会.)
jvm : 书籍: 深入理解java虚拟机. 然后java性能优化, 也有讲部分.
多线程: 书籍: java多线程编程 java并发编程的艺术. 前面例子居多.后面理论居多.(我也不太会)
框架: 书籍: spring技术内幕/spring源码分析/看透spring mvc 源码分析与实践. springboot使用, 网上一堆集成过程. 书的话: springboot实战 springboot揭秘.
springcloud. 周立老师的入门《Spring Cloud与Docker微服务架构实战》, 然后程序猿DD的增进《Spring Cloud微服务实战》.
mybatis : 我当时好像是在网上找的视频入门的, 就培训班官网放出的视频. 记不太清了.
zk dubbo : dubbo的简单使用的话, dubbo用户手册讲的很清晰了. 然后dubbo架构设计详解. 我还没看… zk 《从Paxos到zookeeper分布式一致性原理与实践》 这本书
mysql: mysql技术内幕 高性能mysql .两本书结合看.我一般是横向去看. 然后mycat权威指南.
redis: 黄鹏程的入门. 付磊的<> 增进 , 黄建宏的<> 增进. 三本书各有特色. 第一本最后的一部分, 是其他没有的. 然后中间那本集群原理啥的, 给我印象很深刻. 第三本, 最喜欢的是每一部分的小结,总结很到位. <<深入分布式缓存>> 不光讲了redis还有其他, 作为知识扩展吧.
mq. 可以先看官网入门. 然后再看书
linux. 我貌似是跟着阿铭学linux. 简单使用.要不就是鸟哥私房那本书.记不清了.
solr/es 网上直接搜就行 然后maven: maven实战
Tomcat : how Tomcat works
设计模式: 最开始入门大话设计模式, 主要是故事有意思, 然后head first
算法: 啊哈算法, 还是故事好玩…
阿里的码出高效
架构: 张开涛的<<亿级流量网站架构核心技术>>. <<可伸缩服务架构>> <<分布式服务架构>> <<聊聊架构>>
个人爱好喽~~~
原文:https://mp.weixin.qq.com/s/ZomBAVZdakqbhACnR8nyRQ
,