2019年Java面试指南

java语言和设计模式考察点(必要问题)

1.基本概念和基本原理
2.实现方式与使用姿势
3.经常用到的知识点
4.实际应用中容易犯错的点

加分项
1.知识点与典型的业务场景关联
2.以反例来描述实际场景中误用的危害
3.与知识点相关的优化点
4.与知识点相关的最新技术趋势
5.在了解的前提下,尽量增加回答内容深度

面试题目

1.进程与线程的区别与联系
2.简单介绍一下进程的切换过程
3.你经常使用哪些 Linux命令,主要用来解决什么问题?
4.为什么TCP建连需要3次握手而断连需要45.为什么TCP关闭链接时需要 TIME WAIT状态,为什么要等2MSL?
6.一次完整的HTTP请求过程是怎样的

JVM考察点

1.深入理解VM内存模型
2.了解类加载机制
3.了解内存可见性
4.了解常用的GC算法实现和适用场景
5.能够根据业务场景选择合适儿M参数与GC算法

加分项

1.编译器优化
2.问题排查经验与思路
3.VM调优经验和调优思路
4.了解最新的技术趋势(例如ZGC、 Graalvn)

面试题目

1.简单描述一下VM的内存模型
2.什么情况下会触发 FULLGC?
3.Java类加载器有几种,关系是怎样的?
4.双亲委派机制的加载流程是怎样的,有什么好处?
5.1.8为什么用 Metaspace替换掉 Permgen? Metaspacef保存在哪里
6.编译期会对指令做哪些优化?(简单描述编译器的指令重排)
7.简单描述一下 volatiles可以解决什么问题?如何做到的?
8.简单描述一下GC的分代回收
9.G1垃圾回收算法与CMS的区别有哪些?
10.对象引用有哪几种方式,有什么特点?
11.使用过哪些VM调试工具,主要分析哪些内容?

并发和多线程考察点

1.理解线程的同步与互斥的原理
2.掌握线程安全相关机制
3.了解JUC工具的使用场景与实现原理
4.熟悉线程池的原理、使用场景、常用配置
5.理解线程的同步与异步、阻塞与非阻塞

加分项

1.结合实际项目经验或实际案例介绍原理
2.解决多线程问题的排查思路与经验
3.熟悉常用的线程分析工具与方法
4.了解Java8对J∪C的增强
5.了解 Reactive!异步编程思想

面试题目

1.如何实现一个生产者与消费者模型?(锁、信号量、线程通信、阻塞队列等)
2.如何理解线程的同步与异步、阻塞与非阻塞?
3.线程池处理任务的流程是怎样的
4.Wait与 sleep的有什么不同?
5.Synchronized和 Reentrantlock有什么不同?各适合什么场景?
6.读写锁适用于什么场景? Reentrantreadwritelock是如何实现的
7.线程之间如何通信?
8.保证线程安全的方法有哪些?
9.如何尽可提高多线程并发性能?
10.Threadlocall用来解决什么问题? Threadlocalk是如何实现的?
11.死锁的产生条件?如何分析是否有线程死锁?
12.在实际工作中遇到过什么样的并发问题,如何发现(排查)并解决的?

数据结构和算法考察点

1.了解基本数据结构及特点
2.表、栈、队列、树需要熟练掌握,深刻理解使用场景
3.了解常用的搜索、排序算法,及复杂度和稳定性
4.了解常用的字符串处理算法
5.能够分析算法实现的复杂度
6.了解常用算法分类,解决问题的思路和解决哪类问题

加分项

1.能够将数据结构与实际使用场景结合
2.不同算法在业务场景中的应用
3.面对模糊的题目能沟通确认条件和边界
4.书写算法代码前,先讲一下解题思路
5.能够发现解答中的一些问题,给出改进的思路

常用工具考察点

1.了解常用的VM分析工具
2.掌握Git的常用操作和工作流
3.了解 Linux系统下常用的分析工具

加分项

1.能够主动出击体现知识广度
2.能够体现实战能力

框架考察点

1.掌握 Spring的IOC、AOP的概念与实现
2.掌握 Springe的 Context创建流程和Bean的生命周期
3了解 Spring常用注解的作用与使用方式
4.了解 Spring Boot的相关知识点
5.掌握Netty的线程处理模型
6.知道常用RPC框架的特点
7了解 Mybatis、 Hibernate的实现原理

加分项

1.阅读过框架源码,了解实现细节及思路
2.除了会应用,还能够理解理念
3.了解最新实现或方向
4.有实际优化经验,例如nety性能调优

面试题

1.SSH和SSM框架组合的区别是什么?
2.能描述一下 Spring Context初始化的整个流程吗?
3.简单介绍一下Bean的生命周期及作用域。
4.Spring配置中的 placeholder占位符是如何替换的?有什么办法可以实现自定义的配置替换?
5.Spring MVCE的工作流程是怎样的?
6.Springs如何解决循环依赖?
7.Bean的构造方法、@ Postconstruct注解、 Initializing Bean、init- methodl的执行顺序是怎样的?
8.说说 Netty中有哪些重要的对象,它们之间的关系是什么?
9.RPC与HTP的区别是什么,什么场景适合选用RPC,什么场景适合使用HTTP?
10.RPC的交互流程是怎样的?
11.请介绍一下 Myatis的缓存机制。
12.Mybatis如何配置动态SQL?有哪些动态SQL标签?

缓存考察点

1.了解缓存的使用场景,不同类型缓存的使用方式
2.掌握MC和 Redise的常用命令
3.了解MC和 Redis?在内存中的存储结构
4.了解MC和 Redist的数据失效方式和剔除策略
5.了解 Redise的持久化、主从同步与 clusteri部署的原理

加分项
1.结合实际应用场景来介绍缓存的使用
2.有过分布式缓存设计和应用经验
3.了解缓存使用中可能产生的问题
4.知道 Redise的典型应用场景
5.知道 Redis的新特性

面试题

1.Redisi和 Memcache有什么区别?该如何选用?
2.你用到过哪些 Redisl的数据结构?用在什么场景下?
2.Redis有哪些持久化方式,区别是什么?
3.Redise的过期机制是怎样的? Redis有哪些淘汰策略?
5.如何保证 Redis的高并发和高可用?
6.如何使用 Redis?实现延时队列?如如何使用 Redis实现分布式锁?

中间件和Mysql考察点

1.了解消息队列、数据库的基本原理和常用队列、数据库的特点。
2.了解 Kafka的架构和消息处理流程
3.理解数据库事务的ACID特性和隔离级别
4.掌握常用的MSQL语句,和常用函数
5.了解MySQL数据库不同引擎的特点及不同类型的索引实现

加分项

了解新特性
1.知知道数据库表设计原则、有设计经验
2.有过数据库调优经验
3.消息队列使用经验,不同场景下的取舍

面试题

1.使用过消息队列吗?在什么场景使用的?用来解决什么问题?
2.使用队列时如何保证可靠性?
3.MQ有可能发生重复消费吗,如何解决?
4.在数据库中查询语句速度很慢,如何优化
5.数据库事务有哪些特性?事务的隔离级别有哪几种?
6.如何对SQL语句进行优化?

分布式和项目技术

表达沟通
1.分布式架构的理解
2.了解系统优化的常用方法
3.对工作的熟悉程度
4.解决问题能力

加分项

1.关注业界最新趋势
2.如果有方案对比选型会更好

项目介绍

1.交代背景:STAR法则
2.描述架构:架构图或交互流程图
3.做了什么:重点突出
4.结果如何:用实例佐证
5.如何改进:存在的问题与解决方法

准备前的技巧

提前思考、提前准备
项目在精不在多
我了解的,就是我的
体现对架构的理解,对设计的思考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章