1.springboot的运行原理
- 约定大于配置
- 内嵌tomcat或jetty等servlet服务器
- 不用配置xml。
- 通过maven父子关系,快速整合依赖。
2.什么是ajax
ajax是异步javascript,是一种创建动态页面的技术,可以通过后台与服务器的少量数据交换,实现页面的部分刷新。相较于之前的form表单提交后的全局刷新,能够节省网络资源。
实现步骤:
- 创建一个XMLHttpRequest对象
- 创建一个http请求,设置该http的url,请求方法以及验证信息
- 设置响应http请求状态的函数
- 发送http请求
- 使用异步调用返回的数据
- 使用javascript和dom对象进行局部刷新
3.索引的实现原理
索引是一种快速查找的数据结构,储存在内存中。mysql中的索引是使用b+树来实现的,可以提高查询速度。
b+树中的元素也是有序的,同时由于一个节点可以存放多条数据,io读取效率高,同时相较于b树而言,非叶子节点稍微冗余,能够提升范围查询的效率。
7. 其他的提升查询速度的数据结构
8. hashmap–>精准查询,不能范围查询
9. 平衡二叉树,每个节点只能存放一条数据,需要多次读取
10. b树
4.springmvc的工作流程?各个组件的发挥的作用
dispachterServlet:前端控制器,负责调用其他组件
handlerMapping:处理器映射器
handlerAdptor:处理器管理器
handler:即controller,处理器,由工程师自己开发
- 用户通过浏览器发起 HttpRequest 请求到前端控制器 (DispatcherServlet)。
- DispatcherServlet 将用户请求发送给处理器映射器 (HandlerMapping)。
- 处理器映射器 (HandlerMapping)会根据请求,找到负责处理该请求的处理器,并将其封装为处理器执行链 返回 (HandlerExecutionChain) 给 DispatcherServlet
- DispatcherServlet 会根据 处理器执行链 中的处理器,找到能够执行该处理器的处理器适配器(HandlerAdaptor) --注,处理器适配器有多个
- 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller
- Controller 将处理结果及要跳转的视图封装到一个对象 ModelAndView 中并将其返回给处理器适配器 (HandlerAdaptor)
- HandlerAdaptor 直接将 ModelAndView 交给 DispatcherServlet ,至此,业务处理完毕
- 业务处理完毕后,我们需要将处理结果展示给用户。于是DisptcherServlet 调用 ViewResolver,将 ModelAndView 中的视图名称封装为视图对象
- ViewResolver 将封装好的视图 (View) 对象返回给 DIspatcherServlet
- DispatcherServlet 调用视图对象,让其自己 (View) 进行渲染(将模型数据填充至视图中),形成响应对象 (HttpResponse)
- 前端控制器 (DispatcherServlet) 响应 (HttpResponse) 给浏览器,展示在页面上。
5.三次握手是什么?
第一次握手:
客户端给服务端发送一个 SYN 报文,并指定客户端的初始化序列号 ISN ,此时客户端处于 SYN_SEND 状态。
SYN 报文内容:首部的同步位 SYN = 1,初始序号 Sequence number = x。
SYN = 1 的报文段不能携带数据,但要消耗掉一个序号。
第二次握手:
服务端收到客户端的SYN报文后,会以自己的SYN报文作为应答,并且也是指定了自己的初始化序列号ISN。同时会把客户端的ISN+1作为ACK的值,表示自己已经收到了客户端的SYN,此时服务器处于SYN_REVD状态。
SYN报文内容:SYN = 1,ACK = 1, Sequence number = y, Acknowledgment number = x + 1。
第三次握手:
客户端受到 SYN 报文后,会发送一个 ACK 报文,把服务器的 ISN + 1 作为自己Acknowledgment number的值,表明自己已经收到了 SYN 报文,此时客户端处于ESTABLISHED状态,服务器收到 ACK 报文后,也处于 ESTABLISHED状态。此时双方已经建立链接。
ACK报文内容: ACK = 1, Acknowledgment number = y + 1, Sequence number = x + 1。
ACK报文段可以携带数据,不携带数据则不消耗序号。
6.水仙花数
//代码如下import java.util.*;
public class ShuiXianHua {
public static void main(String[] args)
{
System.out.println("判断水仙花数");
int i, j,k = 0;
//i 是个位, j是十位,k是百位
Scanner reader = new Scanner(System.in);
System.out.println("只算3位数的代码\n");
int m;
m = reader.nextInt();
k = m / 100;
j = (m / 10) % 10;
i = m % 10;
if (Math.pow(k,3)+Math.pow(j,3)+Math.pow(i,3)== m)
System.out.println(+m+"是水仙花数");
}
}