10.31题目总结

1:springmvc请求流程

1、用户发送请求到tomcat
2、tomcat查看请求的url是否符合DispatcherServlet的拦截规则,如果符合的话则将请求交由DispatcherServlet
处理,如果不符合则直接404。
3、DispatcherServlet接收到请求后,去查看HandlerMapping中是否有对应的映射,如果没有就直接404(在控制台报一个没有对应的处理器)
4、如果找到了对应了HandlerMapping,那么HandlerMapping会将请求映射为HandlerExecutionChain对象(里面封装
了handler与多个拦截器对象),然后将其返回给DispatcherServlet。
5、DispatcherServlet通过HandlerAdapter来执行handler。
6、handler执行完成之后会返回给HandlerAdapter一个ModelAndView对象。
7、HandlerAdapter将ModelAndView返回给DispatcherServlet。
8、DispatcherServlet去请求ViewResolvers,进行视图的解析(根据逻辑视图找到真实视图,比如根据show,加上前后缀变成真实视图)
10、ViewResolver(视图解析器)将视图返回给DispatcherServlet
9、DispatcherServlet对视图进行渲染(将数据写入带页面中)
11、DispatcherServlet将视图响应给用户

2:spring常用设计模式

1:工厂模式
2:单例模式
3:适配器模式
4:包装器模式
5:代理模式
6:观察者模式
7:策略模式
8:装饰器模式
9:模版方法模式

3:什么是ioc,什么是di

控制反转:之前的所有对象都是由我们在程序之中手动new出来的,而使用spring之后我们所有
的对象都有spring容器去创建,我们需要使用的时候只需要从容器中获取即可(反转创建对象
的权利)。
依赖注入:spring在创建对象的过程中,将对象中所依赖的属性注入到对象之内(给创建的对象
赋值)。

4:什么是AOP,AOP主要依靠什么实现

面向切面编程,AOP能够将与业务无关,但是又被所有业务模块共用的代码抽离出来,使用动态代理技术在容器的运行期间,动态的织入其中,减少重复代码,降低耦合度,提升系统的可维护性,并且spring的AOP事务管理功能十分强大。
AOP主要依靠动态代理实现。

5:数据库的事务,数据库的隔离级别

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

数据库的隔离级别有读未提交,读已提交,可重复度,串行化

隔离等级 内容 结果
READ UNCOMMITTED 读未提交 会出现脏读、不可重复读、幻读
READ COMMITTED 读已提交 会出现不可重复读、幻读
REPEATABLE READ 可重复读 会出现幻读(mysql不会)
SERIALIZABLE 串行化 相当于给表加了锁,如果B想操作表,必须等A结束

6:什么是悲观锁,什么是乐观锁,如果实现两种锁

悲观锁:
就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制
乐观锁:
就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量
乐观锁实例:
select version from user;
update user set username=‘zhangsan1’,version=version+1 where id=1 and version=10012;
悲观锁实例:
begin;
select username from user where id = 1 and version=10014 for update;
update user set username=‘zhangsan4’,version=version+1 where id = 1;
commit;

7:分布式与集群的区别

分布式: 牵扯到项目的拆分,将一个完整的项目拆分成多个模块,并且每个模块都能独立部署以及运行
集群:项目的部署,将一个单独的项目部署在多台服务器上就叫做集群,将分布式项目中每一个模块都部署在多台服务器上就叫 分布式+集群

8:什么是rpc,为什么要用dubbo

RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
RPC 是一种技术思想而非一种规范或协议,常见 RPC 技术和框架有:
应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。
远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
通信框架:MINA 和 Netty。

  1. 透明化的远程方法调用,底层封装了 Java NIO 通信框架 Netty、序列化及反序列化框架、以及应用层提供线程池和消息调度,使业务可以快速的实现跨进程的远程通信,就像调用本地服务那样去调用远程服务,而不需要关系底层的通信细节,例如链路的闪断、失败重试等,极大的提高了应用的开发效率。
  2. 软负载均衡及容错机制,可以在内网替代 F5 等硬件负载均衡器,降低成本,减少单点。
  3. 服务自动注册与发现,基于服务注册中心的订阅发布机制,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的ip地址,并且能够平滑添加或删除服务提供者。
  4. 服务治理,包括服务注册、服务降级、访问控制、动态配置路由规则、权重调节、负载均衡。
  5. Spring 框架无缝集成、配置化发布服务。

9:什么是nginx,什么是反向代理

是一个优秀的web服务器,其反向代理功能十分强大,依靠其反向代理可以实现负载均衡。
正向代理:由用户告知代理服务器需要访问的真实服务器地址,而代理服务器根据用户指定的服务器地址去访问对应服务,并对服务器隐藏真实的用户信息。
反向代理:客户端提供给用户的是代理服务器地址,对用户隐藏了真实服务器地址,对于用于用户而言并不知道自己使用了代理服务器。
正向代理代理的对象是客户端,反向代理代理的对象是服务端

10:支付宝支付流程

用户使用支付宝付款
1:商户客户端请求后台服务器获取签名后的订单信息
2:后台服务器返回给客户端签名后的信息
3:客户端调用支付宝客户端的支付接口
4:支付宝客户端向支付宝服务端发送支付请求
5:支付宝服务端完成支付
6:向支付宝客户端返回支付结果
7:支付宝客户端将支付结果显示给客户端
8:客户端将支付结果返回给服务器进行验签,解析
9:服务器将最终支付结果返回给客户端
10:客户端将支付结果显示给用户
11:支付宝服务端异步发送支付通知给服务器
12:服务器响应支付宝服务端的通知

简易流程:
1:服务器生成前面后的订单信息返回给客户端
2:客户端调用支付接口,并获取接口的支付结果
3:同步支付结果给服务器进行验签,解析
4:服务器将支付结果返回给客户端,并展示给用户
5:支付宝异步向服务器发送支付通知
6:服务器(修改订单状态并)响应支付宝的通知。

你可能感兴趣的:(java基础练习题)