部分面试题总结-java后台

1、Nginx负载均衡

轮询: 默认的,每一个请求按顺序逐一分配到不同的后端服务器,如果后端服务器挂了则能自动剔除
ip_hash: 请求按照IP的hash结果分配,这样来自一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题
weight: weight是设置权重,用于后端服务器性能不均的情况,访问比例约等于权重之比
fair: 比上面两个更智能的算法,可以根据页面大小和加载时间长短智能地进行均衡,也就是根据后端服务器的响应时间来分配请求响应时间短的优先分配。Nginx本身不支持fair,支持要下载额外的模块。
url_hash: 按照url的hash来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

2、Session加载实体对象的过程

1、Session在调用数据库查询功能之前,首先会在一级缓存中通过实体类型和主键进行查找,如果一级缓存查找命中且数据状态合法
则直接返回。
2、如果一级缓存没有命中,接下来Session会在当前NonExists记录(相当于查询黑名单,如果出现重复的无效查询可以迅速做出判断,
从而提升性能)进行查找,如果NonExists中存在同样的查询条件,则返回null;
3、如果一级缓存查询失败则查询二级缓存,如果二级缓存命中则直接返回。
4、如果之前的查询都未命中,则发出SQL语句,如果查询未发现对应记录则将此次查询添加到Session的NonExists中加以记录,并返回Null
5、根据映射配置和SQL语句得到ResultSet,并创建对应的实体对象。
6、将对象纳入Session(一级缓存)的管理。
7、如果有对应的拦截器,则执行拦截器的onload方法。
8、如果开启并设置了要使用二级缓存,则将数据对象纳入缓存。
9、返回数据对象。

3、Servlet和CGI的区别

Servlet位于处理服务器进程中,通过多线程方式运行其Service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而
CGI对每个请求都产生新的线程,服务完成后就销毁,效率上低于Servlet。

4、Servlet接口有哪些方法

init
service
destroy
getSetvletInfo
getServletConfig

5、Servlet启动过程

1、Web容器加载Servlet并将其实例化后,Servlet生命周期开始
2、容器运行其init方法进行Servlet初始化
3、请求到达时调用Servlet的service方法,service方法会调用与请求对应的doget和dopost方法
4、当服务器关闭或者项目被卸载时服务器会将Servlet实例销毁,会调用destroy方法

6、转发(forward)和重定向(redirect)的区别

**forward:**是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容直接读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是哪来的,所以地址还是原来的地址
**redirect:**是服务器端发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的连接地址。不能跨域访问。

7、选择Spring框架的原因

非侵入式: 支持基于POJO的编程模式,不强制性的要求实现Spring框架中的接口或继承Spring框架中的类。
IOC容器: IOC容器帮助应用程序管理对象以及对象之间的依赖关系,对象之间的依赖关系如果发生了改变只需要修改配置文件而不是修改代码,因为代码的修改可能意味着项目的重新构建和完整的回归测试。有了IOC容器,程序员再也不需要自己编写工厂、单例等模式。
AOP: 面向切面编程,通过配置的方式将横切关注功能动态添加到目标代码上,进一步实现了业务逻辑和系统服务之间的分离。另一方面有了AOP程序员可以省去很多自己写代理类的工作。
MVC: 为WEB表示层提供了更好的方案。
事务管理: Spring能接纳多种持久层技术。

8、什么是Spring Beans?

Spring Beans是形成Spring应用的主干java对象。它们被Spring IOC容器初始化,装配和管理。这些Bean通过容器中配置的元数据创建。

9、IOC容器配置bean的方式

1、基于XML文件进行配置
2、基于注解进行配置
3、基于Java程序进行配置

10、Spring bean的生命周期?

1、IOC容器找到Bean的定义并实例化该Bean
2、IOC容器对Bean进行依赖注入
3、如果Bean实现了对应的接口,就将Bean中对象传给相应的方法
4、如果有和Bean关联的对象,则这些对象的方法被调用
5、销毁Bean实例时,如果实现了特定的接口就调用Destroy方法

11、Spring中的自动装配有哪些限制?

1、如果使用了构造器注入或者Setter注入,那么将覆盖自动装配的依赖关系。
2、基本数据类型的值、字符串字面量、类字面量无法使用自动装配。
3、优先考虑使用显式的装配来进行更精确的依赖注入而不是使用自动装配。

12、大型网站在架构上应当考虑哪些问题?

分层:将系统横向切分成若干个切面,每个层面只承担单一的职责。
分割:对软件的纵向切分
分布式:可以使用Hadoop和MapReduce计算框架处理
集群:可以有更多的服务器提供相同的服务,更好地提供对并发的支持。
缓存:用空间换时间
异步
冗余

13、http请求报文格式?

请求行
消息头部
空行
请求正文

14、HTTP状态码含义?

1XX:信息提示
2XX:成功
3XX:重定向
4XX:客户端错误
5XX:服务器错误

15、getParameter和getAttribute方法有什么区别?

getAttribute()获取在请求对象中设置的属性,该对象返回对象为Object对象
getParamter方法是获取指定的请求参数值,返回值为String类型字符串

16、Session和Cookie的区别

1、cookie保存在客户端,session保存在服务器端
2、session会在一定时间内保存在服务器上,比较占用服务器的性能
3、单个cookie在客户端的限制是3K
4、登陆信息等重要信息存放为session,其他可以存到cookie里

17、Spring 事务隔离级别

1、ISOLATION_DEFAULT:后端数据库默认的隔离级别
2、ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读和不可重复读
3、ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可能会导致幻读和不可重复读
4、ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务所修改,可能导致幻读
5、ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID。所有事务依次逐个执行,这样事务之间完全不可能产生干扰,会严重影响性能。

18、Spring 事务传播级别

支持当前事务的情况
REQUIRED:如果当前存在事务,则加入该事务,如果没有事务,则创建一个新的事务。
SUPPORTS:如果当前存在事务,则加入该事务,如果没有事务,则以非事务的方式继续运行。
MANDATORY:如果当前存在事务,则加入该事务,如果没有事务,则抛出异常。
不支持当前事务的情况
REQUIRED_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
NOT_SUPPORTED:以非事务的方式运行,如果存在事务,则把当前事务挂起。
NEVER:以非事务方式运行,如果存在当前事务,则抛出异常。
其他情况
NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行,如果没有事务则等价于REQUIRED

19、Spring MVC流程

用户发送信息到dispactherServlet前端控制器,加载xml配置文件
通过路径映射找到HandlerMapper处理器映射器,返回信息到dispatcherServlet前端控制器
通过路径映射找到HandlerAdapter处理器适配器,交由处理器处理
处理完成返回一个ModelAndView对象到HandlerAdapter,再返回dispatcherServlet
通过ViewReoslve视图解析器解析,返回View对象到dispatcherServlet
发送数据到request域,在页面上显示

20、如何获取Cookie

使用request对象的getcookie方法

21、通过部署描述文件xml可以配置那些功能?

1、配置Servlet访问URL
2、配置Web容器,Servlet的初始化参数
3、配置欢迎、错误页面
4、Servlet加载优先级
5、Web配置监听器、过滤器
6、设置会话过期时间

22、JSP有哪些动作?作用?

1、在页面请求时引入一个文件。
2、寻找或者实例化一个JavaBean。
3、设置JavaBean的属性。
4、输出某个JavaBean的属性。
5、把请求转到一个新的页面。
6、在请求转发与include中进行页面传参。

23、jsp和Servlet区别

1、JSP在本质上就是Servlet,创建方式不一样。
2、Servlet完全是Java代码构成,擅长流程控制,JSP由HTML代码和JSP标签组成,可以方便地编写动态网页
3、在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页

24、用什么方法使服务器关闭之后,session所保存的信息不会丢失?

使用cookie实现,服务器端将需要保存的信息,通过Cookie并写入客户端磁盘中,下次访问时提交即可

25、Servlet生命周期

1、init方法:服务器初始化Servlet,开始只调用一次
2、Service方法:初始化完毕,Servlet对象调用该方法响应客户的请求
3、destroy方法:调用该方法消灭Servlet对象

26、dao是什么及作用

DAO是数据库访问接口,负责管理与数据库操作对象,将与数据维护与操作的方法通过DAO封装方法,使得这些操作可以从系统的业务逻辑中独立出来。

27、什么是Servlet?

用Java编写的服务器端程序,由服务器端调用和执行的Java类。当用户请求发送请求到服务器时,服务器可能将请求信息发送Servlet,并让Servlet建立起服务器返回给客户端的响应。

28、HTTP的GET和POST请求区别

1、get通过URL提交数据,数据可以在URL中看到。POST数据放置在HTML Headler中,无法再地址栏中看到
2、get方式提交的数据最多只能有1024字节,POST没有此限制
3、get一般用作小数据的请求,POST用作大数据的请求

29、什么时候调用doget或dopost方法?

根据客户端请求方式

30、哪些方法能提高JDBC性能?

1、尽量使用数据连接池,避免使用DriverManager.getConnection()
2、合理配置连接池参数,合理设置数据连接池的初始大小
3、选择合适的事务等级
4、及时关闭连接

31、实现会话跟踪有哪几种方式?

1、URL重写
2、隐藏表单域
3、Cookie
4、Session

32、浏览器页面和Tomcat的交互过程

1、将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时也是一个完整的Java程序
2、再由Java编译器对这个Servlet进行编译,得到class文件
3、再由JVM解释器来执行class文件,生成向客户端发送的应答,然后发送给客户端

33、JSP九大内置对象

response,request,page,out,pageContext,exception,session,application,config

34、IOC是怎样实现的?

1、读取标注或配置文件,取到类名
2、使用反射基于类名实例化对应对应的对象实例
3、将对象实例,通过构造函数或者setter传出

35、Spring配置Bean有几种方式?

1、在XML文件中显式配置
2、在Java接口和类中实现配置
3、隐式Bean的发现机制和自动装配机制(优先)

36、Spring有哪些事件?

1、上下文更新事件:会在ApplicationContext被初始化或者更新时发布
2、上下文开始事件:容器调用ConfigurableApplicationContext的start方法开始/重新开始容器触发该事件
3、上下文停止事件:容器调用ConfigurableApplicationContext的Stop方法停止容器触发该事件
4、上下文关闭事件:当ApplicationContext被关闭时触发此事件,容器被关闭时,其管理的所有单例Bean被销毁。
5、请求处理事件:在Web应用中,当一个http请求结束时触发此事件

猜你喜欢

转载自blog.csdn.net/qq_37344518/article/details/84350004