面试是一个未知的场景,你会去到一个陌生的环境遇到陌生的面试官,不知道面试官的性格不知道面试官会问出什么样的问题,但是面试也是可以准备的,只要把各类技术掌握的通透的、各类源码理解的透透的、各类神一样冒出来的新技术理解的透透的,任何面试都所向无敌,但是说的容易,做起来就没那么容易了,面试不是一个平静的去解决问题的场合,面试会遇到你不自知的各类各样的坑,一些面试官自认为高明的坑,如果不预先做好准备,一向实诚的傻傻地程序员还一脸天然呆的茫然,是万万没救的。面试中,一些平时看似鸡肋的理论就派上用场了,只有这个时候才深刻的体会到大学老师语重心长的话:现在好好学,以后都用得上。话说将各类技术融会贯通、触类旁通是一个痛苦的过程,但是之后的收获还是大大的,自我感觉脑门放光又提高了一个X格一样。。
下面总结了一些常见的比较关键的经常会被问到的觉得比较重要的问题,也就这些了吧,还能问出什么花来嘛,没有答案、没有答案、没有答案,自己找,懒人没有未来。。。
基础篇
JAVA基础
1、 JAVA基础
1) 抽象类和接口的区别?
补充问题:JAVA8中为什么要加入默认方法?
2) 静态内部类(static class)的作用?
3) 序列化和反序列化
4) 动态代理和静态代理的区别?
赠送问题:代理模式,什么是代理模式?如何实现?代理模式结构图是怎样的?代理模式应用在什么场景?
5) nio熟悉吗,nio和io的区别?
6) java8有哪些新特性?
2、 JAVA API
1) transient关键字的作用?
2) volatile关键字的作用?
3) abstract和final是否可同时使用?
4) ArrayList、LinkedList、vector的区别?
5) HashMap、LinkedHashMap,concurrentHashMap的区别,concurrentHashMap为什么特别好用,你看过源码吗?
6) collection的继承结构,你是否看过源码?
3、 JVM调优(性能)
1) 有哪些调优工具
2) 如何快速定位有问题代码
3) 内存溢出如何处理,如何调优
4) 垃圾回收机制,有哪些垃圾回收算法,如何配置垃圾回收策略
5) 新生代和老年代
4、 Tomcat
tomcat可以稳定支持的最大并发用户数
Tomcat集群如何架设:Tomcat+Apache
集群时特别关注两个问题:
1:如何实现多应用服务器间的session共享:(一台服务器崩溃,另外一台服务器可以继续支持)
2:如何分发请求到各个应用服务器实现压力分解:(这里的解决方案是用apache做 web服务器)
算法问题
1、 生产者和消费者问题?
2、 查找算法有几种,写出实现代码?
3、 排序算法有几种,写出实现代码?
4、 遍历二叉树,分别按照前序、中序、后续?
5、 红黑树
程序题
1、 写出一个字符串,打印出字符串中字符的所有排序
2、 无序的有重复数据的list变成有序的无重复数据的list
框架篇
1、 Spring核心:
分别说说aop和IOC
事务配置的几种方式?
spring有几种注入方式?
spring依赖注入的四种装配方式?
spring的几个重要注解@Component(不推荐使用)、@Repository、@Service、@Controller
2、 SpringMVC和Struts2:两者的区别
3、 Mybatis和Hibernate:两者的区别
mybatis如何实现多表关联查询
mybatis的resultMap
mybatis的#和$
4、 是否可以用maven搭建项目,maven如何构建web项目?
5、 git的使用
6、 当日志非常大时,如何查找需要的日志?
7、 SSH的局限有哪些
数据库篇
数据库基础
1、 mysql和oracle的区别
2、 Oracle移植到mysql需要处理哪些
3、 存储过程
4、 mysql存储引擎innodb和myisam的区别
数据库优化
1、 sql优化
2、 索引
关于索引:联合索引A和B,当按照A、A和B、B查询时索引使用情况?
3、 数据库优化,使用过哪些优化工具:常用的SQLYOG、基准测试,expain、status等
具体问题:
如何找到并定位慢SQL?
如何确定表和查询是否是最优的?
枚举类型如何使用,枚举类型的误用带来的损失?
有没有什么工具可以监控数据库,快速查看有问题的sql?如果存在大批量有问题的sql,如何排查?
如何诊断响应差的(太多线程),僵尸进程(无响应或长时间运行),或者诊断连接问题?
如果在某段时间内用户反映服务器变慢,如何知道服务器性能差?
假设已经检查了所有常规信息——内存、磁盘等,而所有这些信息都在正常范围内,没有出现错误和异常,这时,你怎么知道系统是否运行变慢?
数据库进阶
1、 当数据库存储数据出现瓶颈,如何处理?——数据库水平拆分、垂直拆分
2、 说说水平拆分和垂直拆分,什么时候水平拆分,什么时候垂直拆分,分别解决了哪些问题,分别存在哪些不能解决的问题,如何结合使用?
3、 当水平拆分时,到不同的表和库中或不同的分布式服务器上时:不同的表可以联合查询(union)、不同的库可以加上库名进行联合查询;如果需要查询的数据分布在不同的服务器之间,如何查询?如何在存储数据时就将需要同时查询的数据放在同一服务器上(存储时取模或者按照时间分布数据,查询的时候取模或者按照时间查询)
4、 mysql读写分离
5、 数据库集群
升级篇
分布式
1、 有哪些分布式框架,对比其性能优劣?
同步调用:RSET(JAX-RS、Spring Boot)、RPC(Thrift、Dubbo、HSF)
异步调用:Kafka、Notify、MetaQ
同步和异步的区别,分别用于什么场景?
2、 dubbo + zookeeper
3、 nosql(redis、memcache、mongodb)
大并发的处理
1、 负载均衡
2、 分布式
3、 缓存
4、 数据库分库分表
5、 数据库集群
6、 图片服务器分离
7、 首页静态化
大数据问题:
假如每天产生5亿行日志文件,如何搜索到指定内容?
有一个100T大小的文件存放在磁盘中,不借助任何外部存储设备,如何统计指定字符串的个数?
同上,有一个文件,存放每天访问的URL,每天有100万条,如何统计URL的个数?
测试1000万条数据的查询
多线程
1、 有哪些多线程的应用场景
2、 你自己有写过多线程吗,在哪些场景
3、 线程池,java提供的线程池有哪几种?
4、 队列
5、 servlet是线程安全的吗,如何改进?
6、 实现同步的几种方式?
安全
关于安全方面做了哪些工作?
手机、支付如何保证信息安全?
sql注入问题
如何保证访问URL安全:如何不暴露真实的URL地址;如何防止篡改URL地址;如何防止在URL中SQL注入?
设计模式
1、 你熟悉哪些设计模式
2、 框架中用到哪些设计模式
JAVA IO:装饰器模式(Decorator)、适配器模式(Adapt)
Spring :访问者模式(Visitor)、代理模式(Proxy)、策略模式(Strategy)
SpringMVC:模版模式(TempleteMethod)
Mybatis: 简单工厂模式、工厂方法模式(FactoryMethod)、抽象工厂模式(Abstract Factory)
Tomcat:门面模式、观察者模式(Observer)、命令模式(Command)、责任链模式(chainof responsible)
Velocity :合成模式
3、 装饰模式和适配器模式的区别
4、 写一个单例模式
linux
1、 会使用哪些命令
查看端口是否被占用
如何查看指定的日志
网络
1、 通信协议是否有了解,TCP/UDP等、HTTP
2、 http反向代理
业务篇
1、 订单:大并发问题
2、 订单或产品数据量变大之后如何优化
3、 交易付款如何操作
4、 与物流接口
5、 画出你负责的项目的架构图
源:https://blog.csdn.net/hll814/article/details/51035681