更新时间:2019-08-03 09:00:00 来源:极悦 浏览3204次
作为资深java工程师,也要牢记基础知识,企业在面试时,也有很大一部分是考基础知识的,下面极悦java学院小编就来为大家总结一些资深java工程师面试题。
1、JVM结构原理、GC工作机制详情
答:具体参照:JVM结构、GC工作机制详解,说到GC,记住两点:
(1)GC是负责回收所有无任何引用对象的内存空间。 注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,
(2)GC回收机制的两种算法,a、引用计数法 b、可达性分析算法,至于更详细的GC算法介绍,大家可以参考:Java GC机制算法。
2、Java对象的生命周期
答:创建阶段 、 应用阶段 、不可见阶段 、不可达阶段 、收集阶段 、终结阶段、 对象空间重新分配阶段等等,具体参照:Java 对象的生命周期。
3、Map或者HashMap的储存原理
答:HashMap是由数组+链表的一个结构组成,具体参照:HashMap的实现原理。
4、当数据表中A、B字段做了组合索引,那么单独使用A或单独使用B会有索引效果吗?(使用like查询如何有索引效果)
答:看A、B两字段做组合索引的时候,谁在前面,谁在后面,如果A在前,那么单独使用A会有索引效果,单独使用B则没有,反之亦然。同理,使用like模糊查询时,如果只是使用前面%,那么有索引效果,如果使用双%号匹配,那么则无索引效果。
5、数据库存储日期格式时,如何考虑时区转换问题?
答:使用TimeStamp , 原因参照:Java编程中遇到的时区转换问题。
6、JavaObject类中有哪些方法?
private static native void registerNatives();
public final native Class getClass(); 这个方法可以引出有关反射,类加载机制
public native int hashCode(); 这里会引出hashmap实现原理
public boolean equals(Object obj) 这里会引出hashmap实现原理
protected native Object clone() throws CloneNotSupportedException; 这里会引出设计模式
public String toString()
public final native void notify(); 这里会引出线程通信
public final native void notifyAll(); 这里会引出线程通信
public final native void wait(long timeout) throws InterruptedException; 这里会引出线程通信
public final void wait(long timeout, int nanos) throws InterruptedException 这里会引出线程通信
public final void wait() throws InterruptedException 这里会引出线程通信
protected void finalize() throws Throwable 这里会引出垃圾回收
7、HTTP协议,GET和POST 的区别
答:浅谈HTTP中GET和POST的区别。
线程、设计模式、缓存方面
8、SimpleDataFormat是非线程安全的,如何更好的使用而避免风险呢?
答:关于SimpleDateFormat安全的时间格式化线程安全问题。
9、如何看待设计模式,并简单说说你对观察者模式的理解
答:1、设计模式有神马用2、观察者模式类图及实现。
10、集群环境中,session如何实现共享
答:1、Java集群之session共享2、session多服务器共享方案,还有一种方案就是使用一个固定的服务器专门保持session,其他服务器共享。
11、分布式、集群环境中,缓存如何刷新,如何保持同步?
答:A、缓存如何刷新?1、定时刷新 2、主动刷新覆盖,每个缓存框架都有自带的刷新机制,或者说缓存失效机制,就拿Redis和 Ehcache举例, 他们都有自带的过期机制,另外主动刷新覆盖时,只需获取对应的key进行数据的覆盖即可。
B、缓存如何保持同步? 这个redis有自带的集群同步机制,即复制功能,具体参考:基于Redis分布式缓存实现,Ehcache也有分布式缓存同步的配置,只需要配置不同服务器地址即可,参照:Ehcache分布式缓存同步。
12、一条sql执行过长的时间,你如何优化,从哪些方面?
(1)查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表;
(2)涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合;
(3)如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度;
(4)针对数量大的表进行历史表分离(如交易流水表);
(5)数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,MySQL有自带的binlog实现 主从同步;
(6)explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等;
从以上可以看出,资深java工程师面试题也离不开基础,总而言之基础很重要,极悦java学院祝愿各位都能找到心仪的工作。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习