面试题
socket http tcp/ip
- socket则是对TCP/IP协议的封装和应用,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象
- HTTP是应用层协议,主要解决如何包装数据;
- TCP/IP协议是传输层协议,主要解决数据如何在网络中传输;
- TCP协议的职责:为了通信方便,将HTTP请求报文分割成报文段,按序号分为多个报文段,把每个报文段可靠地传给对方;从对方那里接收到的报文段,重组到达的报文段,按序号以原来的顺序充组请求报文;
- IP协议的职责是搜索对方的地址,一边中转一边传;
- 而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。
UDP TCP
- TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,三次“对话”的目的是使数据包的发送和接收同步;
- *
HTTP状态码
HTTP状态码表示客户端HTTP请求的返回结果,标记服务器端的处理是否正常,通知出现的错误的等。
- 1xxx 接收的请求正在处理
2xxx 请求正常处理完毕
- 200 请求已正常处理
- 204 请求处理成功,但没有可用资源返回
- 206 表示客户端进行了范围请求,而服务器成功执行了这部分get请求
3xxx 需要进行附加操作以完成请求
- 301 永久性重定向,表示请求的资源已经被分配了新的uri
- 302 临时性重定向
- 303 应该使用get方法获取资源
- 4xxx 服务器无法处理请求
- 400: 请求报文中存在错误,服务器无法理解这个错误
- 401: 发送的请求需要有通过HTTP认证的认证信息
- 403: 请求被拒绝
- 404: 服务器没有请求的资源
5xxx 服务器处理请求出错
- 500 服务器在执行请求时出错
- 503 服务器超负载或正在停机维护
Java实现多线程的三种方式:
Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。
sql语句分组关键字,having是做什么的,如果我想要只三条数据应该用什么关键字?
分组数据涉及两个SELECT子句 分别是GROUP BY(组级过滤) 和 HAVING子句
GROUP BY 分组说明
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数
介绍一下springmvc。springmvc从前台传递数据到后台怎么接收。介绍一下springmvc工作流程。
SpringMVC是Spring的一个模块,是一个基于MVC设计模式的web框架,将web层进行职责解耦,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
SpringMVC框架是围绕着DisPatcherServlet而工作的,从名字上看它是一个Servlet它可以拦截HTTP发来的请求,在Servlet初始化时,SpringMVC会根据配置信息,得到URI和处理器之前的映射关系,为了更加灵活和增强功能,SpringMVC还会给处理器加入拦截器,所以还可以在处理器执行前后加入自己的代码,这样就构成了一个处理器的执行链,然后根据配置信息初始化视图解析器等内容,当处理器返回的时候就可以通过视图解析器定位视图,然后将数据模型渲染到视图中,用来响应用户的请求了。
当一个请求到来时,DispatcherServlet首先通过事先解析好的HandlerMapping配置,找到对应的处理器(Handler),这样就准备开始运行处理器和拦截器组成的执行链,而运行处理器需要有一个对应的环境,这样它就有了一个处理器的适配器(HandlerAdapter)通过这个适配器能运行对应的处理器(controller业务代码)及拦截器(将请求参数转换成一个对象,数据类型转换,数据格式化,数据验证),这里的处理器包含了控制器的内容和其他增强的功能,在处理器返回模型和视图给前端控制器后,DispatcherServlet就会把对应的视图信息传递给视图解析器。这一步取决于是否使用逻辑视图,如果不是逻辑视图,就不会进行处理,而是直接通过视图渲数据模型。
spring的核心原理(Ioc,AOP都是什么)。
IoC(Inversion of Control,控制反转)是Spring的一个核心思想,实现了将类实例化的时机以及细节交给Spring来管理。当一个对象创建时,它所依赖的属性和对象由外部传递给它,而非自己去创建所依赖的对象(比如通过new操作),这种方式称为DI(Dependency Injection,依赖注入)。我们就像是工厂的客户,我们只需要向工厂请求一个Car实例,然后它就给我们按照Config创建了一个Car实例。
我们完全不用管这个Car实例是怎么一步一步被创建出来。
AOP