不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。 我其实特别不喜欢那种临近考试就提前背啊记啊各种题的行为,非常反对!我觉得这种方法特别极端,而且在稍有一点经验的面试官面前是根本没有用的。建议大家还是一步一个脚印踏踏实实地走。
运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试:
- 自我介绍。(你可千万这样介绍:“我叫某某,性别,来自哪里,学校是那个,自己爱干什么”,记住:多说点简历上没有的,多说点自己哪里比别人强!)
- 自己面试中可能涉及哪些知识点、那些知识点是重点。
- 面试中哪些问题会被经常问到、面试中自己改如何回答。(强烈不推荐背题,第一:通过背这种方式你能记住多少?能记住多久?第二:背题的方式的学习很难坚持下去!)
- 自己的简历该如何写。
“80%的offer掌握在20%的人手中” 这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来越强大。
另外,大家要明确的很重要的几点是:
- 写在简历上的东西一定要慎重,这可能是面试官大量提问的地方;
- 大部分应届生找工作的硬伤是没有工作经验或实习经历;
- 将自己的项目经历完美的展示出来非常重要。
笔主能力有限,如果有不对的地方或者和你想法不同的地方,敬请雅正、不舍赐教。
面试可能会问哪些问题?
希望通过这些问题,能够让大家学习更有方向,而不是单纯把这些问题都背会了!
另外,内容会继续完善,欢迎你在评论区说出你遇到的高频面试题!
Java
“ Java 基础这部分一些简单的问题就直接没有放上来。
基础:
- Java 反射?反射有什么缺点?你是怎么理解反射的(为什么框架需要反射)?
- 谈谈对 Java 注解的理解,解决了什么问题?
- 内部类了解吗?匿名内部类了解吗?
- BIO和NIO区别,4核cpu,100个http连接,用BIO和NIO分别需要多少个线程
- 假如我们需要存500个数需要多大的HashMap?
- HashMap的负载因子。
jvm:
- jvm 内存结构
- jvm 调优参数
- 什么是类加载?
- 何时类加载?
- java的类加载流程?
- 知道哪些类加载器。类加载器之间的关系?
- 类加载器之间的关系?
- 类加载器的双亲委派 (结合tomcat说一下双亲委派)
- 为什么需要双亲委派
- Java内存模型
- 栈中存放什么数据,堆中呢?
- 大对象放在哪个内存区域
- 堆区如何分类
- 垃圾回收有哪些算法
- GC的全流程
- GC中老年代用什么回收方法?
多线程:
- Java线程池有哪些参数?阻塞队列有几种?拒绝策略有几种?
- 死锁
设计模式:
- 阅读Spring源码的时候什么设计模式最让你影响深刻?如何使用?
- 单例模式,单例模式的使用场景
- 观察者模式,观察者模式的使用场景
Spring
- spring boot和spring的区别
- ioc 和 aop(ioc流程、aop实现原理)、spring aop异常处理、当一段代码被try catch后再发生异常时,aop的异常通知是否执行,为什么?
- spring bean的生命周期说一下
- spring data jpa底层是什么?
- hibernate和mybatis区别
- spring boot 过滤器
- spring boot 拦截器
- Spring动态代理默认用哪一种
- 写出spring jdk动态代理的实现。
- 画出spring boot处理一个http请求的全过程
权限认证(答案已经完成)
- 认证 (Authentication) 和授权 (Authorization)的区别是什么?
- 什么是Cookie ? Cookie的作用是什么?如何在服务端使用 Cookie ?
- Cookie 和 Session 有什么区别?如何使用Session进行身份验证?
- 如果没有Cookie的话Session还能用吗?
- 为什么Cookie 无法防止CSRF攻击,而token可以?
- 什么是 Token?什么是 JWT?如何基于Token进行身份验证?
- 什么是OAuth 2.0?
- 什么是SSO(单点登录)
微服务/分布式(答案已经完成)
- 为什么要网关?
- 限流的算法有哪些?
- 为什么要分布式 id ?分布式 id 生成策略有哪些?
- 了解RPC吗?有哪些常见的 RPC 框架?
- 如果让你自己设计 RPC 框架你会如何设计?
- Dubbo 了解吗?Spring Cloud 了解吗?
数据库
- 非关系型数据库和关系型数据库的区别?
- 事务的四大特性
- MySQL 事务隔离级别?默认是什么级别?
- 乐观锁与悲观锁的区别
- 数据库两种存储引擎的区别
- 最左前缀匹配原则及它的原因
- 大表优化的思路
- where和having的区别
- 分库分表
- explain 命令
索引
- 如何加快数据库查询速度
- 聚集索引和非聚集索引的区别
- 什么时候不该使用索引?
- 索引底层的数据结构?
- B+树做索引比红黑树好在哪里?
Redis:
- 项目中 redis 是怎么用的?解决了什么问题?
- 说一下有缓存情况下查询的流程以及有缓存情况下修改的流程。
- redis有哪些数据结构
- redis内存满了怎么办
- redis内存淘汰算法除了lru还有哪些
- 分布式缓存可能出现的问题
- 缓存穿透问题
网络
- 计算机网络的一些常见状态码
- ping 所使用的协议
- TCP的三次握手与四次挥手的内容
- TCP为什么连接是三次握手而断开是四次握手
- TCP与UDP的区别及使用场景
- 一次完整的HTTP请求所经的步骤
- http 如何保存登录信息(没太搞懂意思)
- Cookie 和 Session的关系
算法和数据结构
算法
- LRU 算法了解吗?你能实现一个吗?
- 写排序算法(快排、堆排)
数据结构
- 布隆过滤器了解吗?
设计题
- 假如有10亿个数,只有一个重复,内存只能放下5亿个数,怎么找到这个重复的数字?
- 如何设计一个秒杀系统(服务端、数据库、分布式)?分布式系统的设计?
- 有一个服务器专门接收大量请求,怎么设计?
- 如果让你自己设计 RPC 框架你会如何设计?
- 怎么快速出现一个stackoverflow错误?
其他问题
- 自我介绍。
- 说说你的项目中的亮点有哪些。
- 画一下你的项目的架构图。
- Restful 了解吗?简单说一下自己对它的认识,如果我要返回一个 boolean 类型的数据怎么办?
经验总结
- 多面试,不要害怕失败,多总结经验。
- 尽早准备,不论是找工作前、面试前还是面试后。
- 熟悉自己的简历。
- 电话和视频面试很平常,面试前提前准备一下。
- 坚持!offer 虽然可能会迟到,但是只要不放弃,就一定不会缺席。
初中级 Java 程序员必须掌握的知识。
具体的技能要求要看你应聘的公司!
- 熟练掌握数据结构、算法、操作系统、计算机网络等基础知识
- 熟练掌握Java编程、熟悉Java高并发开发手段、对JVM 虚拟机(Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理)有一定研究
- 熟练掌握SOA分布式系统开发,具有优化系统性能、提高系统并发量以及系统可用性的实际经验
- 熟练掌握Struts2、Spring、Hibernate、Mybatis 等框架的使用,熟悉 Spring 原理
- 熟练掌握Dubbo、Zookeeper、常见的消息队列(比如ActiveMq)的使用
- 熟悉Linux 系统的使用,在Linux系统下具有实际的开发经验
- 熟悉MySQL数据库的使用、常见SQL语句的书写以及常见的优化手段
- 掌握 Spring Boot +Spring Cloud +Docker
- 了解Hadoop 生态相关技术中的 HDFS、Storm、MapReduce、Hive、Hbase
推荐一个学习过程中看的仓库
笔主自己开源的一个Java学习与面试项目,目前已经几个月是JavaTrending榜第一名了,目前已经有 65k+ star,我自己有点不那么实至名归,我也只是靠平时业余时间来维护,大家可以看一下,因该对大家学习Java有一点没有帮助。
这个仓库里面有常见知识点总结(目前还在继续完善中)、常见面试题、备战面试系列文章以及BATJ真实面经等内容。
- 对于 Java 初学者来说: 本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识。另外,本文的一些文章 也是你学习和复习 Java 知识不错的实践;
- 对于非 Java 初学者来说: 本文档更适合回顾知识,准备面试,搞清面试应该把重心放在那些问题上。要搞清楚这个道理:提前知道那些面试常见,不是为了背下来应付面试,而是为了让你可以更有针对的学习重点。