专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 最新阿里高级Java面试题总结

最新阿里高级Java面试题总结

更新时间:2020-03-18 10:26:13 来源:动力节点 浏览2921次


  1、JVM结构原理、GC工作机制详情


  答:具体参照:JVM结构、GC工作机制详解,说到GC,记住两点:1、GC是负责回收所有无任何引用对象的内存空间。注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,2、GC回收机制的两种算法,a、引用计数法b、可达性分析算法(这里的可达性,大家可以看基础2Java对象的什么周期),至于更详细的GC算法介绍,大家可以参考:JavaGC机制算法。


  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类中有哪些方法?


  答:Object有哪些方法。


  7、HTTP协议,GET和POST的区别


  答:浅谈HTTP中GET和POST的区别。


  线程、设计模式、缓存方面


  1、SimpleDataFormat是非线程安全的,如何更好的使用而避免风险呢?


  答:关于SimpleDateFormat安全的时间格式化线程安全问题。


  2、如何看待设计模式,并简单说说你对观察者模式的理解


  答:1、设计模式有神马用2、观察者模式类图及实现。


  3、集群环境中,session如何实现共享


  答:1、Java集群之session共享2、session多服务器共享方案,还有一种方案就是使用一个固定的服务器专门保持session,其他服务器共享。


  4、分布式、集群环境中,缓存如何刷新,如何保持同步?


  答:A、缓存如何刷新?1、定时刷新2、主动刷新覆盖,每个缓存框架都有自带的刷新机制,或者说缓存失效机制,就拿Redis和Ehcache举例,他们都有自带的过期机制,另外主动刷新覆盖时,只需获取对应的key进行数据的覆盖即可。


  B、缓存如何保持同步?这个redis有自带的集群同步机制,即复制功能,具体参考:基于Redis分布式缓存实现,Ehcache也有分布式缓存同步的配置,只需要配置不同服务器地址即可,参照:Ehcache分布式缓存同步。


  5、一条sql执行过长的时间,你如何优化,从哪些方面?


  答:1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化);


  2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合;


  3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度;


  4、针对数量大的表进行历史表分离(如交易流水表);


  5、数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,MySQL有自带的binlog实现主从同步;


  6、explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等;


  7、查看mysql执行日志,看看是否有其他方面的问题;


  个人理解:从根本上来说,查询慢是占用mysql内存比较多,那么可以从这方面去酌手考虑。


  设计方案相关


  面试还会问到一些关于设计方案相关的问题,比如:


  1、你的接口服务数据被人截包了,你如何防止数据恶意提交?


  答:我们可以在接口传输参数里面设置一个业务编号,这个编号用来区分是否重复提交。这样即使数据被抓包了,对方也无法区分每个字段你的含义,这时,这个业务编号的作用就来了。


  2、假设服务器经常宕机,你从哪些方面去排查问题?


  答:这个就留个各位看官补充了。


  总而言之该看的还是得看,还学的还是得学。再次强调,基础很重要!面试技巧同样很重要,还是那句话:祝愿各位看官都能找到心仪的工作吧~~


  另外,奉劝大家不要频繁跳槽,这些知识点能提升固然好,不要盲目跳槽,找工作很累的,而且没有哪家公司喜欢频繁跳槽的员工。


  Java程序猿跳槽应该学哪些方面的技术


  互联网产品、大型企业级项目常会用到的:


  1.并发处理技术。具体到Java上通常是涉及java.util.concurrent、并发锁机制、NIO等方面,当然最近比较火爆的Netty框架也可以作为高并发处理的备选方案之一,这需要对Java的线程调度机制有着比较深的理解。不过这些可能会涉及并发控制的对象(比如reentrantlock等)只能存在于一个JVM里的问题,一旦系统规模大到需要部署多个JVM来处理并发的情况,则需要采用共享session的技术(比如spring-session),或者尽可能将系统后台设计为无状态的服务,这需要对RESTful有着较深的理解。


  2.高可用、负载均衡技术。互联网产品、企业级应用通常要求一年里的Downtime控制在很小的范围内,这需要足够的高可用和负载均衡架构来支撑,这个一般和Java技术本身没太大关系,但却是一名初级程序员向高级程序员甚至是架构师CIO进阶的必备技术,因此可以适当了解一下Nginx、HAProxy等对这方面的支持。另外现在最“时髦”的做法是将应用docker化,配合ETCD、kubernetes等工具在容器的层面上实现高可用和负载均衡,当然这需要看实际的需求,最时髦的不见得是最适用的,要考虑构建成本。


  3.缓存技术。缓存应该是大型系统中或高并发条件下提高响应速度的亘古不变的真理(虽然也看到过淘宝搜索商品功能采用的大数据处理技术实现的零缓存的文章,但能达到淘宝的体量和技术水平一般不太可能),这方面的工具太多了,ehcache、memcached、redis……从Java的角度来讲,需要了解的一是Java对这些工具的连接器,二是缓存技术背后的JSR-107标准,可以参考spring-cache的实现,阅读一下源码加深理解。


  4.异步处理技术。这通常也是抵消高并发的处理手段之一,从Java的角度看最简单的异步处理就是新启动一个异步线程,这同样也需要对Java的线程调度有所了解,当然也可使用Spring中的@Async之类的也可以简单实现异步线程的处理。如果是非常消耗资源的业务处理,简单的异步线程是满足不了需求的,这就需要一些消息中间件来做这些异步处理了,消息中间件有很多,activemq、rabbitmq、kafka……需要了解的是Java对这些中间件的连接器。不过异步处理中最关键的是事务保证的问题,这可能需要对事务的两步提交有所了解。


最新阿里高级Java面试题总结


    以上就是动力节点Java培训机构小编介绍的“最新阿里高级Java面试题总结”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>