志在指尖
用双手敲打未来

java高级工程师(面试题及答案)

java高级工程师

岗位职责:
1.担任事务体系技能结构的规划和开发、保证项目保质保量完结;
2.持续完善体系功能,保证体系的功能、质量和安全;
3.对线上体系进行监控办理,担任处理线上问题,对线上体系稳定性、可用性担任;
4.配合相关团队,完结技能部安排的其他工作;
5.深入了解回收事务,参加需求剖析,规划事务开发架构;
任职资格:
1.计算机相关专业本科及以上学历,拥有3年以上服务端开发经历;
2.了解干流应用开发结构SpringCloud、SpringBoot、Kubernetes等;
3.了解干流应用服务器Tomcat、Jetty、Nginx等;
4.了解常用工程东西Maven、Git、Eclipse/IntelliJ等;
5.了解MySQL等数据库体系原理及表规划;
6.Java根底扎实,了解IO、多线程、集合等根底结构,了解SOA,微服务,DevOps,了解JVM原理,了解软件功能剖析、调优等相关办法;
7.了解分布式、缓存、消息、负载均衡等机制和完成原理;
8.具有良好的编程规范,具有一定的架构及技能优化能力,有过高并发大型互联网项目经历优先.java

java高级工程师面试题及答案

一、面试题根底总结
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、Spring事务的阻隔性,并说说每个阻隔性的差异
回答:Spring事务详解
2、Spring事务的传达行为,并说说每个传达行为的差异
回答:Spring事务详解
3、hibernate跟Mybatis/ibatis的差异,为什么挑选?
回答:Hibernate与MyBatis的比较
4、Struts跟Springmvc的优缺点,让你选会怎么选
回答:SpringMVC与Struts的差异
5、简略说说Spring事务机制
回答:Spring事务机制
6、Spring4.0新特性
回答:Spring4新特性
四、负载均衡、集群相关
1、weblogic负载均衡的原理和集群的装备
回答:a、WEBLOGIC负载均衡原理b、负载均衡和集群的装备(参阅)
2、Nginx+Tomcat+Redis完成负载均衡、资源别离、session同享
回答:装备参阅
3、nginx装备文件详解——nginx.conf
回答:Nginx装备文件详细阐明
五、项目优化相关
1、Web怎么项目优化
回答:这个我收拾过一次,Web项目功能优化(收拾)
2、单例形式有几种?怎么优化?
回答:单例形式的7中用法
3、简略说说线程池的原理和完成
回答:线程原理及完成
六、并发和安全方面
1、项目并发怎么处理?(咱们是Web项目)
回答:高并发量网站解决计划,别的,还有数据库乐观锁,数据库读写别离、运用音讯行列、多用存储进程等等
2、简略说说功用权限存在的水平权限缝隙和笔直权限缝隙的场景和解决办法(因为咱们现在权限等级便是功用权限)
回答:
A、水平权限缝隙,如下图
假定组织有用户A和用户B两个用户,其间A有1、2和3权限,用户B有2和3的权限,这时分假定用户B知道1,并给自己添加1的权限,这时分便是水平权限缝隙。
现在解决办法:1、约束入口,让用户B无法修改自己的权限2、对用户B无法进行向上扩展。最根本的解决办法是深入到数据权限
回答:水平权限缝隙和解决办法
B、笔直权限缝隙
回答:笔直权限缝隙事例和解决计划
3、渠道上的图片怎么防盗链
回答:http下载防盗链原理:http协议的字段referer记录来完成
4、怎么差异上传的图片是不是木马?
回答:1、看上传的图片后缀2、怎么后缀是篡改的,那么每个文件有个戏法数字文件上传-戏法数字
5、音讯行列的原理和完成
回答:1、音讯行列原理2、浅显易懂音讯行列ActiveMQ
七、数据库方面
1、MySQL查询字段区不差异大小写?
回答:不差异,哪怕值也不差异(我当时还反问了,区不差异大小的运用意义有哪些,面试官没说得出来)
2、简略说说数据库集群和负载均衡、分布式(我不懂这块)
回答:数据库负载均衡和集群参阅,参阅2
3、存储进程的结构和优点
回答:大概结构
存储进程的优缺点
4、触发器的原理和效果
回答:参阅
八、Java底层根底题
1、SpringMVC的原理以及回来数据怎么渲染到jsp/html上?
答:SpringMVC的中心便是DispatcherServlet,一个恳求经过DispatcherServlet,转发给HandlerMapping,然后经反射,对应Controller及其里边办法的@RequestMapping地址,最终经ModelAndView和ViewResoler回来给对应视图。详细可参阅:SpringMVC的作业原理
2、一个类目标特点产生改动时,怎么让调用者知道?
答:Javaevent时刻监听,即在set办法改动特点时,触发,这种形式也能够了解为观察者形式,详细检查:观察者形式简略事例和阐明
3、重写equals为何要重写hashCode?
答:判断两个目标是否相等,比较的便是其hashCode,假如你重载了equals,比方说是依据目标的内容完成的,而保存hashCode的完成不变,那么很可能某两个目标明明是“相等”,而hashCode却不相同。hashcode不相同,就无法认定两个目标相等了
4、谈谈你对JVM的了解?
答:Java语言的一个非常重要的特色便是与渠道的无关性。而运用Java虚拟机是完成这一特色的关键。Java编译器只需面向JVM,生成JVM能了解的代码或字节码文件。Java源文件经编译成字节码程序,经过JVM将每一条指令翻译成不同渠道机器码,经过特定渠道运转。
JVM履行程序的进程:I.加载。class文件,II.办理并分配内存,III.履行废物搜集
JRE(Java运转时环境)由JVM构造的Java程序的运转环境
详细概况:JVM原理和调优
5、MySQL的事物阻隔等级?
答:MySQL的事物阻隔等级其实跟Spring的事物阻隔等级相同,都是1、ReadUncommitted(读取未提交内容),2、ReadCommitted(读取提交内容),3、RepeatableRead(可重读),4、Serializable(可串行化)详细参照:MySQL事物阻隔等级
6、Spring的原理
答:Spring的中心是IoC和AOP,IoC是依靠注入和操控回转,其注入办法可分为set注入、构造器注入、接口注入等等。IoC便是一个容器,担任实例化、定位、装备运用程序中的目标及建立这些目标间的依靠。简略了解便是:Java每个事务逻辑处理至少需求两个或许以上的目标协作进行作业,可是每个目标在运用它的合作目标的时分,都需求频频的new目标来完成,你就会发现,目标间的耦合度高了。而IoC的思想是:Spring容器来办理这些,目标只需求处理自身事务联系就好了。至于什么是操控回转,便是取得依靠目标的办法回转了。
AOP呢,面向切面编程,最直接的表现便是Spring事物办理。至于Spring事物的相关材料,就不细说了,参阅:Spring注解式事物办理
7、谈谈你对NIO的了解
答:IO是面向流,NIO是面向缓冲,这儿不细讲了,详细参照:JavaNIO和IO的差异
8、ArrayList和LinkedList、Vector的差异?
答:总得来说能够了解为:.
1.ArrayList是完成了依据动态数组的数据结构,LinkedList依据链表的数据结构。
2.对于随机拜访get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删去操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
Vector和ArrayList类似,但属于强同步类,即线程安全的,详细比较参照:比较ArrayList、LinkedList、Vector
9、随便说说几个单例形式,并挑选一种线程安全的
答:单例的类别:懒汉、饿汉、枚举、静态内部类、两层校验锁等等,挑选线程安全我选最终一种,两层校验锁。详细完成办法参照:Java:单例形式的七种写法
10、谈谈红黑树
答:算法和数据结构一直是我单薄之处,这方面说自己补吧,成效不大,这儿我就引荐一个:红黑树
11、举例说说几个排序,并阐明其排序原理
答:这儿我就不细说了,咱们自己看看Java完成几种常见的排序算法
12、MySQL索引的原理
答:索引的效果咱们都知道,便是加速查询速度,可是原理,我说不上来,这儿直接看吧:MySQL索引作业原理
13、序列化的原理和效果
答:Serialization(序列化)是一种将目标以一连串的字节描述的进程;反序列化deserialization是一种将这些字节重建成一个目标的进程,首要用于HTTP或许WebService接口传输进程中目标参数的传达,详细可参看:Java序列化机制和原理
九、并发及项目调优
1、说说线程安全的几种完成办法?
答:什么是线程安全?我的了解是这样的,一个目标被多个线程一起拜访,还能坚持其内部特点的次序性及同步性,则认定为线程安全。完成线程安全的三种办法:被volatile、synchronized等关键字修饰,或许运用java.util.concurrent下面的类库。至于前两者的联系,参阅:synchronized和volatile的用法差异
2、办法内部,怎么完成更好的异步?
答:咱们知道异步其实便是让另一个线程去跑,那么怎么创立线程?第一种直接newThread,第二种new一个完成Runnable接口的完成类。第三种,经过线程池来办理创立等,这儿说到更好的完成异步,那便是说咱们在办法内部避免频频的new线程,就能够考虑线程池了。那么线程池怎么创立?这儿能够new一个线程池,可是需求考虑单例,或许在程序初始启东时,就创立一个线程池,让他跑着,然后在详细办法的时分,经过线程池来创立线程,完成异步
3、项目中为何要用缓存?怎么了解nginx+Tomcat+Redis集群缓存?
答1:最直接的表现便是减轻数据库的压力。避免因为数据读取频频或过大而影响数据库功能,下降程序宕机的可能性
答2:nginx常用做静态内容服务和代理服务器,直面外来恳求转发给后边的运用服务。nginx自身也能做缓存,比方静态页面的缓存什么的。而Tomcat是运用服务器,处理JavaWeb程序功用等等。你也能够这么了解,假定把用户的恳求当做是一条河流,那么nginx就相当于一个水利工程,Tomcat相当于一条条分流的支流,而Redis相当于支流周围的一个个水库。当你洪水来了,nginx依据你每条支流的接受力度分发不同的水流量,在保证程序正常运转的情况下,分发给每条支流(tomcat)不同的水流量。而Redis相当于一个个支流的水库,存储水源,下降压力,让后边的水量平稳。
4、日常项目中,假如你接手,你准备从哪些方面调优?
答:这个呢首先是了解哪些需求优化,需求优化肯定是项目功能遭遇瓶颈或许猜测行将遭遇了,咱们才会去考虑优化。那么怎么优化?
a、扩容,扩容的了解,便是扩大服务器并行处理的能力,简略来说便是加服务器,添加处理恳求的能力,例如添加nginx、Tomcat等运用服务器的个数,或许物理服务器的个数,还有加大服务器带宽等等,这儿考虑的是硬件方面
b、调优,调优,包括体系调优和代码调优。体系调优便是说加速处理速度,比方咱们所说到的CDN、ehcache、Redis等缓存技术,音讯行列等等,加速服务间的响应速度,添加体系吞吐量,避免并发,至于代码调优,这些就需求多积累了,比方重构、工厂等,数据库调优的话这个我不是很懂,只知道索引和存储进程,详细参阅:MySQL数据库调优21个最佳实践,其他数据库调优方面就各位自己找找吧
5、谈谈你对分布式的了解
答:个人了解:分布式便是把一个体系/事务拆分红多个子体系/子事务去协同处理,这个进程就叫分布式,详细的演变办法参阅:Java分布式运用技术架构介绍
6、Redis完成音讯行列
答:Redis完成音讯行列、参阅2
7、另总结多线程相关面试题50道
8、共享一个调优东西和计划:怎么利用JConsole观察剖析Java程序的运转,进行排错调优
十、手写代码题(包含SQL题)
1、假定商户表A(id,city),买卖流水表B(aid,amount,time)这儿的time代表买卖时刻,请用SQL写出查询每个城市每个月的销售业绩(答案可在谈论里回复)
2、假定有一个数组A,int[]A={1,3,-1,0,2,1,-4,2,0,1…N};原来是需求查出大于0的数组,可是因为传参过错或许其他原因,导致查出0和负数了,现在要求在不运用新数组和新集合的情况下(即只运用这个A数组,因数组数据比较大,且只能用一次循环)完成正数放到数组的前面,小于等于0的数放到数组的结尾(答案可在谈论里回复)
十一、规划计划相关
面试还会问到一些关于规划计划相关的问题,比方
1、你的接口服务数据被人截包了,你怎么避免数据恶意提交?
答:咱们能够在接口传输参数里边设置一个事务编号,这个编号用来差异是否重复提交。这样即便数据被抓包了,对方也无法差异每个字段你的意义,这时,这个事务编号的效果就来了
2、假定服务器经常宕机,你从哪些方面去排查问题?
答:这个就留个各位看官弥补了,可谈论回复

未经允许不得转载:IT技术网站 » java高级工程师(面试题及答案)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载