发表于: 2019-12-26 13:52:01

2 1169


啥也不说就是干!!!

今天完成的事情:

1、Http 协议

1)请求与响应

HTTP 定义了 4 种与服务器交互的方式:GET、POST、PUT、DELETE。URL全称为资源描述符,一个 URL 对应着一个网络上的资源,而 HTTP 中的 GET、POST、PUT、DELETE 就对应着这个资源的查询、修改、添加、删除 4 个操作。

HTTP 请求由 3 部分组成,分别是:状态行、请求头(Request Header)、请求正文

HTTP 响应由 3 部分组成,分别是:状态行(状态码)、响应头头(Response Header)、响应正文

2)Http 常见的 Content-Type:

 //HTML格式
 text/html

 //纯文本格式
 text/plain

//XML格式
 text/xml

 //图片格式
 image/gif、image/jpeg、image/png

 //JSON数据格式
 application/json

 //二进制流数据(如常见的文件下载)
 application/octet-stream

 //<form encType=””>中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
 application/x-www-form-urlencoded

 //需要在表单中进行文件上传时,就需要使用该格式
 multipart/form-data

2、任务二深度思考剩余部分

26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗? 

之前日报有略过


27.为什么要用start.sh,stop.sh,deploy.sh 来完成容器的启动,停止和部署,而不是直接用容器自带的命令?

使用脚本比命令更加方便


28.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系? 

Java 中常见的 AOP 技术有两个,分别是 Filter 和代理模式(也可以称为过滤器和拦截器),Filter 是基于回调函数(Struts2),代理模式是基于 Java 反射技术(SpringMVC)。

29.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?

配置 <componet-scan /> 标签 加载 @Component @Service @Controller @Autowire @Resource @Required 注解

配置 <mvc:annotation-driven/> 加载 SpringMVC 使用的 @RequestMapping 注解

30.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC? 

参考师兄日志

1.XML配置的优缺点: 
优点有: 
1. XML配置方式进一步降低了耦合,使得应用更加容易扩展,即使对配置文件进一步修改也不需要工程进行修改和重新编译。 
2. 在处理大的业务量的时候,用XML配置应该更加好一些。因为XML更加清晰的表明了各个对象之间的关系,各个业务类之间的调用。同时spring的相关配置也能一目了然。 
当然,有人会说,用XML配置,在大的业务量时候会使得XML文件过大,不容易查看。这一点我们完全可以利用业务分解书写多个XML配置文件就可以了。 
缺点有: 
配置文件读取和解析需要花费一定的时间,配置文件过多的时候难以管理,无法对配置的正确性进行校验,增加了测试难度。 
2.annotation配置的优缺点: 
优点有: 
1. 在class文件中,可以降低维护成本,annotation的配置机制很明显简单 
2. 不需要第三方的解析工具,利用java反射技术就可以完成任务 
3. 编辑期可以验证正确性,差错变得容易 
4. 提高开发效率 
缺点有: 
1. 如果需要对于annotation进行修改,那么要重新编译整个工程 
2. 业务类之间的关系不如XML配置那样容易把握。 
3. 如果在程序中annotation比较多,直接影响代码质量,对于代码的简洁度有一定的影响。
3.为什么更喜欢使用Annotaion来配置Spring MVC?
1. SpringMVC框架给出了专用的几个注解,使其层次更加分明

2. MVC层次较为简单,而url映射也十分简单,哪个网址出错可以立即找到其映射类。


31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?

Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。

web.xml怎么加载Spring 配置的? 
 1.Tomcat 启动时需要从web.xml中读取启动参数,在web.xml中我们需要对ContextLoaderListener进行配置,对于在web应用启动入口是在ContextLoaderListener中的初始化部分;

从Spring MVC上看,实际上在web容器中维护了一系列的IOC容器,其中在ContextLoader中载入的IOC容器作为根上下文而存在于 ServletContext中。


 2.完成对ContextLoaderListener的初始化以后,Tomcat开始初始化DispatchServlet。DispatcherServlet会建立自己的ApplicationContext


 3. 然后就是DispatchServlet中对Spring MVC的配置过程,首先对配置文件中的定义元素进行配置 - 请注意这个时候我们的WebApplicationContext已经建立起来了,也意味着DispatcherServlet有自己的定义资源,可以需要从web.xml中读取bean的配置信息,通常我们会使用单独的xml文件来配置MVC中各个要素定义,这里和web容器相关的加载过程实际上已经完成了


32.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?

SpringMVC 的入口是 Servlet,而 Struts2 入口是 Filter

SpringMVC 会比 Struts2 稍微开些,SpringMVC 是基于方法设计,而 Struts2 是基于类,每次发请求都会实例化一个 ACTION。

SpringMVC 可以跟 Spring 无缝融合,开发效率比 Struts2 高。支持 JSR303,处理 ajax 的请求更方便。

但是 Struts2 的 OGNL 表达式使页面的开发效率相比 SpringMVC 更高


33.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些? 

WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。

但是随着SOAP作为WebService的广泛应用,不断地增加附加的内容,使得现在开发人员觉得SOAP很重,使用门槛很高。在SOAP后续的发展过程中,WS-*一系列协议的制定,增加了SOAP的成熟度,也给SOAP增加了负担

最常见的就是 SOAP类型的WebService就是最好的例子,SOAP消息完全就是将Http协议作为消息承载,以至于对于Http协议中的各种参数(例如编码,错误码等)都置之不顾

RESTFUL的 WEBService 速度虽然可以,但安全性上远不如 SOAP。两者的选择还是看应用场景。比如银行国企自然走 SOAP ,对安全要求不高的 web项目适合 RESTFUL。

34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?  

TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。

基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。HTTP 属于应用层

第一次握手:客户端向服务端发送连接请求报文段。该报文段的头部中SYN=1,ACK=0,seq=x。请求发送后,客户端便进入SYN-SENT状态。PS1:SYN=1,ACK=0表示该报文段为连接请求报文。

第二次握手:服务端收到连接请求报文段后,如果同意连接,则会发送一个应答:SYN=1,ACK=1,seq=y,ack=x+1。该应答发送完成后便进入SYN-RCVD状态。

第三次握手:当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。

为什么连接建立需要三次握手,而不是两次握手?

防止失效的连接请求报文段被服务端接收,从而产生错误。

若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。

此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接

此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些? 

上面 http 部分有


36.了解maven的module。

Maven Project可以理解为父工程。
Maven Module可以理解为子工程。

创建Maven Module工程必须有存在的父工程,maven就是通过父子工程进行工程管理的


37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?

之前日报有略过


38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?

现在

主要使用 @ResponseBody + Jackson 给客户端返回 json 数据


39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么? 

之前日报有,略过


40.Http的Header里面包含哪些字段,每个字段都有哪些含义?  

 Http 协议部分有,略过


41.如何写shell脚本?尝试自己编写一个简单脚本。 

之前日报有

42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?  

一般需要部署脚本,之前日志有


43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?

一个 web 配置一个容器,这样即使一台服务挂掉了,其他服务不受相影响


44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?  

之前日报有


45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?

之前日报有


46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?  

之前日报有


47.maven常用的打包插件有哪些?有什么区别?如何使用 ?

1. package,maven自带的命令打包,平时的打包基本够用,但不能打可直接运行的jar包

2 .IDEA自带的打包工具,不过打的包很容易出现冲突
3. jar-dependency插件,繁琐,性能差,不建议使用
4. assembly插件,可以打多种格式的包,具有基本的解决所打jar包内依赖包冲突的问题,但一旦出现冲突则无法解决
5. shade插件,终极杀器,jar包出现依赖包冲突可以通过调整配置解决


48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?

War 包就是一个web应用的打包格式,一个web应用,需要一个用户交互的界面,负责给用户提供信息输入的地方,即jsp页面。数据需要保存下来,jsp把网页上的数据穿送给后台的java类,java类在得到这些数据之后再进行数据相关的工作,如存入数据库,给出相关统计数据等等。


49.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?

之前日报有

50.Content-type中的数据类型,在Spring MVC中都怎么接收数据?  

1、@PathVariable:接收 Url 中的占位参数 student/list/{id}

2、@RequestParams:接收请求中的参数 name=123&phone=123(application/x-www-form-urlencoded)

目标方法中接受参数

@RequestMapping(value = "/info", method = RequestMethod.POST)
public String saveInfo(@RequestParams String name,@RequestParams String phone) throws Exception {
}

或者实体类对应,如 :User

public class User{
   private String name;
   private String phone;
   ...省略 setter/getter
}

目标方法:

@RequestMapping(value = "/info", method = RequestMethod.POST)
public String saveInfo(User user) throws Exception {
}

3、@RequestBody:接收其他类型的参数,如 application/json {"name":"手机","price":"999"}

注意目标方法中要接收这个 JSON 字符串,然后反序列化

@RequestMapping(value = "/toJson2", method = RequestMethod.POST,consumes = "application/json; charset=utf-8")
public String toJson2(@RequestBody String jsonStr) throws Exception {
}

4、对于文件上传 (multipart/form-data):需要使用 CommonsUpload 组件配合使用


51.什么是restful?rest的请求方法有哪些,有什么区别? 

之前日报有,略过


明天计划的事情:

开始任务三


遇到的问题:


收获:

学习了 Http 协议相关的内容



返回列表 返回列表
评论

    分享到