Java架构师面试必备题(含答案)
Posted SmartBrain
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java架构师面试必备题(含答案)相关的知识,希望对你有一定的参考价值。
第一题:一条sql执行过长的时间,你如何优化,从哪些方面?
答:1、查看sql是否涉及多表的联表或者子查询,如果有,看是否能进行业务拆分,相关字段冗余或者合并成临时表(业务和算法的优化)
2、涉及链表的查询,是否能进行分表查询,单表查询之后的结果进行字段整合
3、如果以上两种都不能操作,非要链表查询,那么考虑对相对应的查询条件做索引。加快查询速度
4、针对数量大的表进行历史表分离(如交易流水表)
5、数据库主从分离,读写分离,降低读写针对同一表同时的压力,至于主从同步,mysql有自带的binlog实现 主从同步
6、explain分析sql语句,查看执行计划,分析索引是否用上,分析扫描行数等等
7、查看mysql执行日志,看看是否有其他方面的问题
第二题:深入理解CAP
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)这三个要素最多只能同时实现两点,不可能三者兼顾。分布式系统肯定优先保证P,多数时候是在C和A之间做权衡选择!
C:各个节点查询的数据都一致;
A:所有节点尽量可用;
P:节点之间无法通信;
AP架构
向一个节点A写入数据成功后,立刻给客户端响应写成功的信号。
如果此时集群节点之间网络断开了,由于其可用性,其他节点仍然提供服务,但是A节点的数据还未写入到其他节点,当访问除A之外的其他节点时,就会出现数据不一致的问题,当网络恢复后,才会通过心跳保证最终一致性!
CP架构
在向一个节点A写入数据成功后,并不是马上给客户端响应写成功的信号,而是等待数据同步到其他节点后(个数取决于配置),才响应客户端,表示此次写数据成功了!这在一定程度上保证了数据一致性。为了防止数据混乱,写数据时只允许往Leader节点写,读数据时可以从所有节点读取!
CP架构下具有特殊的Leader - Flower机制,当发生网络分区时,非Leader分区下的节点会变成不可用,重新进入选举状态。
第三题:双十一秒杀高可靠如何实现?
Sentinel承接了阿里10年的促销场景,利用:流量控制(通过设置QPS来控制),容错(熔断就是切断坏路,让后续新流量再走这个坏路),降级(备选B角,走了try-cath的机制,),三板斧解决高可靠。熔断机制:通过滑动时间窗口实现的,对前一段时间的错误比例来设置熔断点。
第四题:分布式事务问题如何解决?
Seata:服务端也是通过安装和配置来实现,使用很简单,实现了事务协调功能,需要加一个依赖包,然后加一个注解@globalTranscational, AT模式,是最推荐的一种,举例:Seata如何协调订单和库存?要求同时成功或者失败。一阶段:订单和库存,都先做回滚日志记录在本地事务中,二阶段:如果有一个失败,通过回滚日志来回到回到初始。
第五题:nacos和zookeeper是如何防止脑裂的?
集群的脑裂通常是发生在集群之间通信不可达(分区)的情况下,一个大集群会分裂成不同的小集群,小集群中又各自选举出自己的master节点,导致原先的集群出现多个master节点对外提供服务的情况!
leader选举时,要求节点获取到的投票数量 > 总节点数量/2,有了这个选举原则,当发生网络分区时,无论如何最多只有一个小集群选出leader,避免集群发生脑裂。
第六题目:Redis为什么单线程还很快?
第七题:Spring Cloud 和dubbo区别?
1)服务调用方式
dubbo是RPC
SpringCloud采用Rest Api
2)注册中心
dubbo 是nacos、zookeeper
SpringCloud是eureka,也可以是nacos、zookeeper
3)服务网关
dubbo本身没有实现,只能通过其他第三方技术整合,
SpringCloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
第八题:线程间是怎么通信的,通过调用几个方法来交互的?
线程是通过wait , notify等方法相互作用进行协作通信;
wait()方法使得当前线程必须要等待,直到到另外一个线程调用notify()或者notifyAll()方法唤醒
wait()和notify()方法要求在调用时线程已经获得了对象锁,因此对这两个方法的调用需要在 synchronized修饰的方法或代码块中。
Wait,notify,notifyAll都必须在synchronized修饰的方法或代码块中使用,都属于Object的方法,可以被所有类继承,都是final修饰的方法,不能通过子类重写去改变他们的行为
第十题:SpringMVC工作流程?
1.用户请求旅程的第一站是DispatcherServlet。
2.收到请求后,DispatcherServlet调用HandlerMapping,获取对应的Handler。
3.如果有拦截器一并返回。
4.拿到Handler后,找到HandlerAdapter,通过它来访问Handler,并执行处理器。
5.执行Handler的逻辑。
6.Handler会返回一个ModelAndView对象给DispatcherServlet。
7.将获得到的ModelAndView对象返回给DispatcherServlet。
8.请求ViewResolver解析视图,根据逻辑视图名解析成真正的View。
9.返回View给DispatcherServlet。
10.DispatcherServlet对View进行渲染视图。
11.DispatcherServlet响应用户。
第十一题:阐述设计模式的责任链?
责任链模式定义:
使多个对象都有机会处理请求,从而避免请求的发送 者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一 个对象处理它为止。
责任链模式应用场景:
1) 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2) 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3) 可处理一个请求的对象集合应被动态指定。
责任链模式由两个角色组成:
1) 抽象处理者角色(Handler):它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。
2) 具体处理者角色(Concrete Handler):实现抽象角色中定义的接口,并处理它所负责的请求。如果不能处理则访问它的后继者。
举例如下:
第十二题:阐述设计模式的适配器?目标角色(Target):客户所期待得到的接口。
源角色(Adaptee):需要适配的类。
适配器角色(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
具体代码:
1.目标角色类
package com.szcatic.adapter;
public interface Target
void demand();
2.源角色类
package com.szcatic.adapter;
public class Adaptee
public void specialRequirements()
System.out.println("特殊要求");
3.适配器角色类
package com.szcatic.adapter;
public class Adapter implements Target
private Adaptee adaptee;
public Adapter(Adaptee adaptee)
this.adaptee = adaptee;
@Override
public void demand()
adaptee.specialRequirements();
4.测试类
package com.szcatic.adapter.test;
import org.junit.jupiter.api.Test;
import com.szcatic.adapter.Adaptee;
import com.szcatic.adapter.Adapter;
public class AdapterTest
@Test
void testDemand()
new Adapter(new Adaptee()).demand();
优点:
1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。
缺点:
1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。
Java架构师必备技术:java缓存机制面试题
一、Java基础
1、java中有哪些基本类型?
2、java为什么能够跨平台运行?
3、String是基本数据类型吗?我可不可以写个类继承于String?
4、谈谈&和&&的区别?
5、Switch语句里面的条件可不可以是byte、long、String?使用时候还应注意什么?
6、short s1=1;s1=s1+1;有什么错?
7、char为什么能存贮一个汉字?
9、final关键字的用法?
10、静态变量和实例变量的区别?
11、面向对象的基本特征是什么?
12、作用域public,private,protected,以及不写时的区别?
13、Overload和Override的区别。
14、构造器可不可以被重载或重写?
15、Java中有没有多继承?
16、抽象类和接口的区别?
17、java中实现多态的机制是什么?
19、String和StringBuffer的区别?StringBuffer和StringBuilder区别?
21、数组中有没有length()方法,String中有没有length()方法?
23、final, finally, finalize的区别。
24、‘==’和equals的区别?
25、JAVA中Object类中有哪些常用方法?
26、heap和stack有什么区别。
27、GC是什么? 为什么要有GC?
28、什么是内部类?分为哪几种?
29、为什么需要内部类?
30、内部类可以引用它的包含类的成员吗?有没有什么限制?
答案:
二、JavaScript/JQuery/Ajax部分
1、用js和jQuery怎么进行表单验证
2、列举javaScript的3种主要数据类型
3、2种复合数据类型和2种特殊数据类型。
4、谈谈你的JS的理解?
5、ajax的优点?
6、简述一下ajax调试代码查找错误的方法?
7、简述ajax中Js脚本缓存问题该如何解决?
8、同步和异步怎么理解?分别在什么情况下使用。
9、java后台如何接收ajax数据?
10、为什么要有jquery?
11、jQuery选择器有多少种?
13、你是如何使用jquery中的ajax的?
14、jquery中的 . g e t 和 .get和 .get和.post请求区别?
15、jquery中如何操作样式的?
16、如何设置和获取HTML和文本的值?
17、Jquery能做些什么?
18、在ajax中data主要有哪几种?
19、jQuery中ajax由几部分组成?
20、js和jQuery获取value值得区别
答案:
三、jsp/servlet部分
1、Tomcat的优化经验
2、Tomcat根目录下有哪些文件
3、什么是TOMCAT,怎样启动停止,配置文件,日志文件的存储。
4、解释一下什么是servlet;什么是servlet容器
5、说一说Servlet的生命周期,执行过程?
6、实例化servlet有几种方式
7、谈谈你对http协议的理解
8、HTTP请求的GET与POST方式的区别
9、forward 和redirect的区别?
10、servlet中怎么定义forward 和redirect
11、过滤器有哪些作用?
12、JSP的常用指令?
13、JSP和Servlet中的请求转发分别如何实现?
14、JSP乱码如何解决?
15、session 和 application的区别?
16、jsp有哪些内置对象?作用分别是什么?
17、Jsp有哪些动作?作用分别是什么?
18、JSP中动态INCLUDE与静态INCLUDE的区别?
19、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
20、页面传递对象的方法?
21、Cookied和session区别?
22、Filter的生命周期与执行过程
23、Tomcat系统内存怎么配置
24、JSTL标签库包含哪些?
答案:
四、数据库
1、触发器的作用?
2、什么是存储过程?用什么来调用?
3、存储过程的优缺点?
4、存储过程与函数的区别
5、索引的作用?和它的优点缺点是什么?
6、什么样的字段适合建索引
7、索引类型有哪些?
8、什么是事务?什么是锁?
9、什么叫视图?游标是什么?
10、视图的优缺点
11、列举几种表连接方式,有什么区别?
12、主键和外键的区别?
13、在数据库中查询语句速度很慢,如何优化?
14、数据库三范式是什么?
15、union和union all有什么不同?
16、char、varchar2、varchar有什么区别?
17、Oracle和Mysql的区别?
18、Oracle语句有多少类型
19、oracle分页语句
20、从数据库中随机取50条
21、order by与group by的区别
22、commit在哪里会运用
23、行转列、列换行怎么转
24、什么是PL/SQL?
25、序列的作用
26、表和视图的关系
27、oracle基本数据类型
28、drop、truncate、 delete区别
29、如何优化大数据量的访问?
30、oracle怎么去除去重
答案:
五、Java高级部分
1、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
2、sleep() 和 wait() 有什么区别?
3、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
4、线程的基本概念
5、什么是多线程
6、程序、进程、线程之间的关系
7、创建线程有几种方式,分别是什么?
8、线程的生命周期
9、线程currentThread()与interrupt()方法的使用
10、线程状态启动线程的方式?start or run?
11、什么是java序列化,如何实现java序列化?
12、编写一个程序,将d:\\java目录下的所有.java文件复制到d:\\jad目录下,并将原来文件的扩展名从.java改为.jad。
13、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
14、字节流与字符流的区别
15、怎么判断指定路径是否为目录
16、怎么获取指定路径下的全部文件
17、Java怎么读取文件和写入文件
18、java怎么复制文件
19、用JDBC如何调用存储过程
20、JDBC中的PreparedStatement相比Statement的好处
21、写一个用jdbc连接实例。
22、ArrayList和Vector的区别?
23、List、Set和Map的区别?
24、Collection 和 Collections的区别。
25、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
26、HashMap与HashTable的区别
27、Java中有多少种数据结构,分别是什么?
28、Arraylist 和list 的区别
29、List遍历方式有多少种
30、Map怎么遍历
答案:
六、框架部分
1、谈谈你对Struts2的理解
2、谈谈你对Hibernate的理解。
3、你对Spring的理解。
4、Struts2优缺点
5、ORM工作原理?
6、struts2的核心组件有哪些?
7、Strus2的执行过程
8、为什么要使用struts2?
9、openSession和getCurrentSession
10、拦截器的作用?拦截器和过滤器的区别?
11、struts.xml中result的type有哪些类型?
12、什么时候用JDBC什么时候用Hibernete
13、hibernate 数据的三个状态
14、Hibernate中load和get的区别?
15、Hibernate的工作原理?
16、hibernate优缺点?
17、Hibernate是如何延迟加载的?
18、如果优化Hibernate?
19、什么是ORM?
20、Hibernate的主键生成策略?
21、Hibernate的级联操作
22、Hibernate有哪5个核心接口?
23、什么是重量级?什么是轻量级?
24、谈谈Spring的IOC和DI
25、什么是AOP?
26、Spring的通知类型有哪些?
27、什么是MVC?
28、hibernate查询方式有多少种?
29、spring中Bean的scope
30、SSH对应MVC的哪些层
答案:
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
有需要这些学习笔记资料的朋友注意啦:戳这里即可免费领取
还有更多学习笔记面试资料也分享如下(都可免费领取):
哪些层
答案:[外链图片转存中…(img-1GTXOIh5-1625817936039)]
[外链图片转存中…(img-Tq1LDlU9-1625817936040)]
最后
总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习
有需要这些学习笔记资料的朋友注意啦:戳这里即可免费领取
还有更多学习笔记面试资料也分享如下(都可免费领取):
[外链图片转存中…(img-SxOGi54S-1625817936041)]
以上是关于Java架构师面试必备题(含答案)的主要内容,如果未能解决你的问题,请参考以下文章
行业内卷如此严重,技术不够的程序员该何去何从?Java 高级架构师面试题给你答案!