Java程序员备战“金九银十”必备的面试技巧(附携程Java岗面试题)
一、面试前的准备
1.1 如何准备一场面试
1.1.1 如何获取大厂面试机会
1.1.2 面试必知
- ①. 准备介绍自己
- ②. 关于着装
- ③ .随身带上自己的成绩单和简历
- ④. 如果笔试就提前刷一些笔试题
- ⑤. 花时间作一些逻辑题
- ⑥. 准备好自己的项目介绍
- ⑦. 提前了解公司以及要应聘的岗位
1.1.3 提前准备技术面试
1.1.4 面试之前先做好定向复习
1.1.5 面试之后复盘
1.2 简历改如何写
1.2.1为什么说简历很重要
1.2.2 这3点你必须要知道
1.2.3 你必须知道的两大法则
- ①. STAR法则
- ②. FAB法则
1.2.4 项目经理怎么写
1.2.5专业技能怎么写
1.2.6 开源程序员简历模板分享
1.2.7其他关于一些写简历的小Tips
1.3 如果面试官问你”你有什么问题问我吗?”时,你该怎么回答
1.3.1 这个问题对最终面试结果的影响到底大不大
1.3.2真诚一点,不要问太low的问题
1.3.3 有哪些有价值的问题值得问
- ①. 面对HR或者其他Level比较低的面试官时
- ②. 面对部门领导
- ③. 面对Level比较高的(比人总裁,老板)
1.4 面试官问你的优点是什么,该如何回答
1.5 面试官问你的缺点是什么,该如何回答
1.6 七个大部分程序员在面试前很关心的问题
- ①. 我是双非/三本/专科学校的,我有机会进大厂吗?
- ②. 非计算机专业的学生能学好Java后台吗?我能进大厂吗?
- ③. 我没有实习经历的话找工作是不是特别艰难?
- ④. 我该如何准备面试呢?面试的时候注意事项有哪些呢?
- ⑤. 没有项目经历/博客/GitHub开源项目怎么办?
- ⑥. 我该自学还是报培训班呢?
- ⑦. 大厂到底青睐什么样的应届生?
二、Java
2.1Java基础知识
2.1.1重载和重写的区别
2.1.2 String和String Buer、String Builder的区别是什么?String为什么是不可变的?
2.1.3 自动装箱与拆箱
2.1.4 ==与equals
2.1.5 关于final关键字的一些总结
2.1.6 Object类的常见方法总结
2.1.7 Java中的异常处理
2.1.8 获取用键盘输入常用的两种方法
2.1.9 借口和抽象类的区别是什么
2.2 Java集合框架
2.2.1 ArrayList与LinkedList异同
2.2.2 ArrayList与Vector区别
2.2.3 HashMap的底层实现
2.2.4 HashMap和Hashtable的区别
2.2.5 HashMap的长度为什么是2的幂次方
2.2.6 HashMap多线程操作导致死循环问题
2.2.7 HashSet和HashMap区别
2.2.8 ConcurrentHashMap和Hashtable的区别
2.2.9 ConcurrentHashMap线程安全的具体实现方式/底层具体实现
2.2.10 集合框架底层数据结构总结
2.3 Java多线程
2.3.1 面试中关于synchronized关键字的5连击
- ①. 说一说自己对于synchronized关键字的了解
- ②. 说说自己是怎么使用synchronized关键字,在项目中用到了嘛
- ③. 讲一下synchronized关键字的底层原理
- ④. 说说JDK1.6之后的synchronized关键字底层做了哪些优化,可以详细介绍一下这些优化吗
- ⑤. 谈谈synchronized和ReenTrantLock的区别
2.3.2 面试中关于线程池的4连击
- ①. 讲一下Java内存模型
- ②. 说说synchronized关键字和volatile关键字的区别
2.3.3 面试中关于线程池的2连击
- ①. 为什么要用线程池
- ②. 实现Runnable接口和Callable接口的区别
- ③. 执行execute()方法和submit()方法的区别是什么
- ④. 如何创建线程池
2.3.4 面试中关于Atomic原子类的4连击
- ①. 介绍一下Atomic原子类
- ②. JUC包中的原子类是那4类
- ③. 讲讲Atomiclnteger的使用
- ④. 能不能给我简单介绍一下Atomiclnteger类的原理
2.3.5 AQS
- ①. AQS介绍
- ②. AQS原理分析
- ③. AQS组件总结
2.4 Java虚拟机
- ①. 面试常见问题
- ②. 拓展问题
- ③. 面试常见问题
2.5 设计模式
三、计算机网络常见面试点总结
3.1 TCP/UDP协议的区别
3.2 在浏览器中输入地址url地址->>显示主页的过程
3.3 各种协议与Http协议之间的关系
3.4 Http长连接、短连接
3.5 TCP三次握手和四次挥手(面试常客)
四、Linux
4.1 简单介绍一下Linux文件系统
4.2 一些常见的Linux命令了解吗
五、MySQL
5.1 说说自己对于MySQL常见的两种存储引擎:MyISAM与InnoDB的理解
5.2 数据库索引了解吗
5.2.1 为什么索引能提高查询速度
5.2.2 最左前缀原则
5.2.3 MySQL如何为表字段添加索引
5.3 当MySQL单表记录过打时,数据库的CRUD性能会明显下降,一些常见的优化措施有什么
5.4 事务隔离级别(图文详解)
六、Redis
6.1 Redis简介
6.2 为什么要用Redis/为什么要用缓存
6.3 为什么要用Redis而不用Map/Guava做缓存
6.4 Redis和Memcached的区别
6.5 Redis常见数据结构以及使用场景分析
- ①. String
- ②. Hash
- ③. List
- ④. Set
- ⑤. Sorted Set
6.6 Redis设置过期时间
6.7 Redis内村淘汰机制(MySQL里有2000W数据,Redis中只存20W的数据,如何保证Redis中的数据都是热点数据)
6.8 Redis持久化机制(怎么保证Redis挂掉之久再重启数据可以进行恢复)
6.9 Redis事务
6.10 缓存雪崩和缓存穿透问题解决方案
6.11 如何解决Redis的并发竞争Key问题
6.12 如何保证缓存与数据库双写时数据的一致性
七、Spring
7.1 Spring Bean的作用域
7.2 Spring事务中的隔离级别
7.3 Spring事务中的事务传播行为
7.4 AOP
7.5 IOC
八、消息队列
8.1 什么是消息队列
8.2为什么要用消息队列
8.3 使用消息队列到来的一些问题
8.4 JMS VS AMQP
8.4.1 JMS
8.4.2 AMQP
8.4.3 JMS VS AMQP
8.5 常见的消息队列对比
九、Dubbo
9.1. 重要概念
9.1.1什么是Dubbo
9.1.2什么是RPC?RPC的原理是什么?
9.1.3 为什么要用Dubbo
9.1.4什么是分布式
9.1.5 为什么要用分布式
9.2 Dubbo的架构
9.2.1 Dubbo的架构图解
9.2.2 Dubbo工作原理
9.3 Dubbo的负载均衡策略
9.3.1 先解释一下什么是负载均衡
9.3.2 再来看看Dubbo提供的负载均衡策略
9.3.3 配置方式
9.4 Zookeeper宕机与Dubbo直连的情况
十、数据结构
10.1 Queue
10.1.1 什么是消息队列
10.1.2 队列的种类
10.1.3 Java集合框架中的队列Queue
10.2 Set
10.2.1 什么是Set
10.2.2 HashSet和TreeSet底层数据结构
10.3 List
10.3.1 什么是List
10.3.2 List的常见实现类
10.4 树
10.4.1 二叉树
10.4.2 完全二叉树
10.4.3 满二叉树
10.4.4 二叉查找树(BST)
10.4.5 平衡二叉树
10.4.6 红黑树
10.4.7 B+,B-,B*树
10.4.8 LSM树
十一、算法
十二、实际场景题
十三、BATJ真实面试题
13.1 携程基础篇
13.1.1 System.out.println(3丨9)输出什么
13.1.2 说一下转发(Forward)和重定向(Redirect)的区别
13.1.3 在浏览器中输入URL地址到主页显示的过程,整个过程会使用那些协议
13.1.4 TCP三次握手和四次挥手
13.1.5 IP地址与Mac地址的区别
13.1.6 HTTP请求,相应报文格式
13.1.7 为什么要使用索引?索引这么多优点,为什么不对表中的每一个列创建一个索引呢?索引是如何提高查询速度的?说一下使用索引的注意事项?Mysql 索引主要使用的两种数据结构?什么是覆盖索引?
13.1.8 进程与线程的区别是什么?进程间的几种通信方式说一下?线程间的几种通信方式知道不?
13.1.9 为什么要用单例模式?手写几种线程安全的单例模式?
13.1.10 简单介绍一下 bean;知道 Spring 的 bean 的作用域与生命周期吗?
13.1.11 Spring 中的事务传播行为了解吗?TransactionDefinition 接口中哪五个表示隔离级别的常量?
13.1.12 Spring MVC原理了解了吗?
13.1.13 Spring AOP IOC 实现原理
13.2 携程进阶篇
13.2.1 消息队列 MQ 的套路
①. 介绍一下消息队列 MQ 的应用场景/使用消息队列的好处
②. 那么使用消息队列会带来什么问题?考虑过这些问题吗?
③. 介绍一下你知道哪几种消息队列,该如何选择呢?
④. 关于消息队列其他一些常见的问题展望
13.2.2谈谈 InnoDB 和 MyIsam 两者的区别
①. 两者的对比
②. 关于两者的总结
13.2.3 聊聊 Java 中的集合吧!
①. Arraylist 与 LinkedList 有什么不同?(注意加上从数据结构分析的内容)
②. HashMap 的底层实现
③. 既然谈到了红黑树,你给我手绘一个出来吧,然后简单讲一下自己对于红黑树的理解
④. 红黑树这么优秀,为何不直接使用红黑树得了?
⑤. HashMap 和 Hashtable 的区别/HashSet 和 HashMap 区别
13.3 携程终结篇
13.1.1 Object 类有哪些方法?
①.Object 类的常见方法总结
②.hashCode 与 equals
③.==与 equals
3.1.2 ConcurrentHashMap 相关问题
①.ConcurrentHashMap 和 Hashtable 的区别
②.ConcurrentHashMap 线程安全的具体实现方式/底层具体实现
13.1.3谈谈 synchronized 和 ReenTrantLock 的区别
13.1.4线程池了解吗?
①.为什么要用线程池?
②.Java 提供了哪几种线程池?他们各自的使用场景是什么?
③.创建的线程池的方式
13.1.5 Nginx
①.简单介绍一下 Nginx
②.为什么要用 Nginx?
③.Nginx 的四个主要组成部分了解吗?
写在最后
以上是笔者总结了2019年上半年的所有的面试技巧,并附上了面试真题。苦于文章篇幅,笔者无法把整片文章的问题都再次一一解释;故笔者已经把这份面试技巧整理成了一份PDF文件,需要的朋友点击下方传送门即可免费领取!