发表于: 2019-12-13 19:54:02
1 1195
今天做了什么
完成小课堂
JAVA注解就是一段代码的标签
注解的用处:
提供信息给编译器: 编译器可以利用注解来探测错误和警告信息。编译阶段时的处理: 软件工具可以用来利用注解信息来生成代码、Html文档或者做其它相应处理。运行时的处理: 某些注解可以在程序运行的时候接受代码的提取。
注解的本质就是一个继承了 Annotation 接口的接口
基本注解
@Overried:表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法中签名对不上被覆盖的方法,编译器就会发出错误提示。
@Deprected: 如果你使用了该注解标记的元素,那么编译器会发出警告信息。
@SuppressWarnings: 如果你使用了该注解标记的元素,那么编译器会发出警告信息。
。`JDK 1.7
@SafeVarargs:参数安全类型注解。它的目的是提醒开发者不要用参数做一些不安全的操作,它的存在会阻止编译器产生 unchecked 这样的警告。
JDK 1.8
@FunctionalInterface:用于编译级错误检查,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错
- 自定义注解:
- @Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface FrankTest { - }
元注解
@Target
,表示该注解可以用于什么地方。
ElementType参数包括:
–CONSTRUCTOR,构造器的声明
–FIELD,域声明,包括[enum实例]
–LOCAL_VARIABLE, 局部变量声明
–METHOD,方法声明
–PACKAGE,包声明
–PARAMETER,参数声明
–TYPE:类,接口(包括注解类型)或enum声明
-TYPE_PARAMETER:Java1.8新增,表示该注解能写在类型参数的声明语句中 -TYPE_USE:Java1.8新增,能标注任何类型名称@Retention
,表示需要在什么级别保存该注解信息。
RetentionPolicy参数包括:
–SOURCE,注解将被编译器丢弃
–CLASS,注解在class文件中可用 ,但会被VM丢弃[不读入内存]
–RUNTIME, VM将在运行期也保留注解,因此可以通过反射机制读取注解的信息@Documented
,将此注解包含在Javadoc中。@Repeatable
,Java1.8新增,标记的注解可以多次应用于相同的声明或类型@Inherited
,允许子类型继承父类中的注解。
@Inherited@Retention(RetentionPolicy.RUNTIME)
@interface Test {}
@Test
public class A {}
public class B extends A {}注解 Test 被
@Inherited
修饰,之后类 A 被 Test 注解,类 B 继承 A,类 B 也拥有 Test 这个注解。回到刚才我们自定义的
@FrankTest
的例子,我们使用了@Target
,其中ElementType是Method,表示该注解可以作用在方法上面,如果ElementType是TYPE,则表示可以作用在类上。@Retention
表示在JVM运行时保留注解信息。注解里面的元素可使用如下类型,所有的基本类型[int, float,boolean],String,Class,enum,Annotation以及以上类型的数组 ,如果你使用了其他类型,那编译器就会报错。注意,也不允许使用其他任何包装类型,不过由于自动打包的存在,这算不上是什么限制。注解也可以作为元素的类型,也就是说注解可以嵌套。
注解默认值限制
编译器对元素的默认值是有限制的。
元素不能有不确定的值。要么在元素定义的时候提供默认值,要么在使用注解时提供元素的值。
对于非基本类型的元素,无论是在源代码中声明,还是在注解接口中定义默认值,都不能以null作为其值。
深度思考
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
MVC设计模式:
第一步:用户发起请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找
第三步:找到以后处理器映射器(HandlerMappering)向前端控制器返回执行链(HandlerExecutionChain)
第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)
第五步:处理器适配器执行Handler
第六步:Handler执行完给处理器适配器返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析
第九步:视图解析器像前端控制器返回View
第十步:前端控制器对视图进行渲染
第十一步:前端控制器向用户响应结果
springmvc运转流程:
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
对参数进行判断,后端验证是为了保证安全,前端验证是为了让用户体验更好。
好处是保证准确信,保证用户体验;坏处是增加了工作量;
需要
3.SpringMVC分页查询和显示
分页查询需要的数据有:当前页,总页数,上一页,下一页,首页,尾页;
定义一个参数为总数据量,一个参数为每页显示的数据量,总页数等于总数据量除于每页显示的数据量,当前页默认为第一页,上一页为当前页减一,下一页为当前页加一,尾页为总页数,首页为第一页;
4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?
内网ip+端口适用于本地校验端口,本地访问;外网ip+端口适用于外网访问端口;域名可以隐藏IP地址,有防护作用;
5.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
内网就是局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。
外网就是广域网(英语:Wide Area Network,缩写为 WAN),又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网
局域网是自己的单位或者家庭、小区内部;
外网是单位、家庭之外有覆盖范围极大的网络,比如internet,这个大网络延伸到了我们的单位、家庭(通过光纤、网线、电话线等)
检测防火墙应该用外网ip检测;
6.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求?
curl工具可以在linux上测试接口,wget可以在linux上直接下载网页链接;
参考;https://blog.csdn.net/u010690647/article/details/78142727/
get请求:
1、使用curl命令:
curl “http://www.baidu.com” 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地
curl -i “http://www.baidu.com” 显示全部信息
curl -l “http://www.baidu.com” 只显示头部信息
curl -v “http://www.baidu.com” 显示get请求全过程解析
2、使用wget命令:
wget “http://www.baidu.com”也可以
post请求
1、使用curl命令(通过-d参数,把访问参数放在里面):
curl -d “param1=value1?m2=value2” “http://www.baidu.com”
2、使用wget命令:(--post-data参数来实现)
wget --post-data ‘user=foo&password=bar’ http://www.baidu.com
以上就是Linux模拟Http的get或post请求的方法了,这样一来Linux系统也能向远程服务器发送消息了。
示例:wget --post-data="" http://mcs-inner.99bill.com/mcs-gateway/mcs/task/clear
curl (可直接发送格式化请求例如json)
示例:目标url:http://fsc-inner.99bill.com/acs/deposit/{srcRef}
命令:curl -H "Content-type: application/json" -X POST -d '{"srcRef":"1002"}'http://fsc-inner.99bill.com/acs/deposit/1002
7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
postman是一款模拟http请求的测试软件,能够发送任何类型的HTTP请求,附带任何数量的参数+ headers;
Apizza也可以用来测试接口,功能与postman类似;
8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
一般可以用模拟工具模拟数据,也可以直接用set方法加入数据,通常先定义接口之后前后端就可以围绕接口开始写代码,由于没有直接操作数据库,先写假数据有利于后面写业务逻辑时了解操作的数据增加效率;
9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
需要打日志,访问用户名,访问IP,操作时间,访问包名,具体函数名;
10.对Service返回的结果是否要判空,为什么?
连表查询的时候需要判断,不连表查询的时候不需要,
尽量不要判空,因为判定为空不利于被其他程序调用,可以尽量使用抛出异常的方法;
11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
try catch的代价比较大,相对于判断返回值,抛出异常到捕获,需要更多的cpu指令和代码
Java的异常机制是由JVM控制的,业务逻辑复杂的情况下,会影响controller的执行效率 ;
12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
通过日志 access_log查看(https://www.cnblogs.com/gaoyuechen/p/8109522.html),
一般200ms是合理的
单线程一次只能取得一个任务并执行这一个任务.
并发:并发是一种现象:同时运行多个程序或多个任务需要被处理的现象,并发是指一段时间内处理多个任务
(并行:是指同时处理多个任务)
这些任务可能是并行执行的,也可能是串行执行的,和CPU核心数无关,是操作系统进程调度和CPU上下文切换达到的结果
解决大并发的一个思路是将大任务分解成多个小任务。nginx可以支持五万并发, tomcat支持150并发。 安全性,tomcat的安全性和apache等web服务器有差距。(tomcat最好不好直接对外网开放),集群。增加处理效率。
13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
通过配置Nginx反向代理来实现域名和端口的对应;应该通过域名访问,通过域名访问服务器的中间需要通过服务商转换成ip;
14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
指计算机用来与外围设备连接的接口,判断是否被占用可以测试能不能访问这个端口,或者是看防火墙记录里有没有开发这个端口,Telnet测试端口可以使用 Telnet+ip+端口 测试;
参考:https://blog.csdn.net/xopqaaa/article/details/89510698
第一部分:端
1、查看端口情况:netstat -napl
2、查看UDP协议的端口:netstat -nupl
3、查看tcp协议的端口:netstat -ntpl
4、查看8080是否被占用:netstat -alnp |grep 8080
第二部分:防火
1、查看防火墙开放的端口:firewall-cmd --zone=public --list-ports
2、查看当前开放了那些服务:firewall-cmd --list-services
3、查看防火墙状态:systemctl status firewalld.service
4、查看防火墙状态:firewall-cmd --state
5、查看指定端口是否开放:firewall-cmd --query-port=80/tcp
6、添加端口--permanent永久生效:firewall-cmd --zone=public --add-port=80/tcp --permanent
7、重新载入:firewall-cmd --reload
8、移除80端口号:firewall-cmd --permanent --zone=public --remove-port=80/tcp
9、启动|关闭|重新启动 防火墙:systemctl [start|stop|restart] firewalld.service
10、查看版本: firewall-cmd --versio
11、查看帮助: firewall-cmd --hel
12、显示状态: firewall-cmd --state
15.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
个人在服务器上安装了三个web容器,分别使用8090、8080、8070端口;通常的http端口为80,mysql端口为3306,ssh通道为22;
16.常用的性能统计命令有哪些,Top,Vmstat,free等命令都有什么用处,CPU占用率,内存使用分别代表什么含义?到什么情况下,应该产生报警信息?
free命令,vmstal,top等;cpu占用率表示cpu的负载情况,内存使用率表示内存占用情况;cpu可以满载,内存不行,内存占满会卡顿严重;
17.为什么要知道响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?
可以对各个部分响应时间有个判断,如果一个请求很慢可能被耗费在一些循环的语句,或者遍历资源之类的地方;
18.怎么查看Resin或者是Tomcat中的DB访问时间和Controller时间,有没有可能用Aop的方法自动记录Controller的时间和DB时间?Controller时间和DB时间的区别是什么,在你写的业务逻辑里,相差有多大?
通过查看日志,controller的时间是逻辑部分的时间,db是连接数据库进行操作的时间;
19.怎么判断WEB容器是否收到了一个Http请求,WEB容器中的Access.log是什么意思,包含哪些字段,代表什么含义,是哪里配置修改字段的。
如果没有反馈则无法判断是否成功发送一个Http请求,Access.log是访问记录日志,有用户IP,访问时间,请求方式,接口参数,服务状态,传递字节数,网页,访问信息等字段,不懂web容器可以在不同的配置文件中设置;
20.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?
系统盘是安装系统使用的,每次重装系统的时候都会清理数据。数据盘是外挂独立云磁盘,重装系统后,数据不会被清空;
21.常用的主流数据库有哪些,Mysql有几种安装方式?
有IBM的DB2、Oracle、Informix、Sybase、SQL Server、PostgreSQL、mySQL、Access数据库、FoxPro数据库、Teradata;
mysql可以用安装程序安装,解压安装;
也可以使用压缩包解压安装
22.有哪些常用的云服务器公司,Linux服务器和Windows服务器的差别是什么,Linux有哪些主流的版本,不同版本之间的差别在哪里?
国内有阿里云、腾讯云,国外有亚马逊,微软。 两种不同的系统的服务器生态不一样,windows图形化比较好,linux比较稳定,windows操作性比较好,Linux安全好。Linux 主要有Debian 、 Fedora 、SUSE家族;
23.什么是ssh?如何在linux服务器上从网站下载文件?
安全外壳协议,wget加下载地址可以下载文件;
24.C标签是什么,为什么要使用C标签,有哪些常见的指令?
JSTL 核心标签库(C标签)标签,有表达控制标签<c:out> <c:set><c:remove><c:catch>
流程控制标签<c:if><c:choose><c:when><c:otherwise>
循环标签<c:forEach><c:forTokens>
URL操作标签<c:import><c:url><c:redirect><c:param>
25.什么叫反向代理?为什么要使用反向代理?
通过nginx或者其他方式把请求主动分配给web容器,是用来代理服务器的,代理我们要访问的目标服务器。代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器;
26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
nginx的作用:反向代理、负载均衡、动静分离。其他还有varnish,Apache;
27.为什么要用start.sh,stop.sh,deploy.sh 来完成容器的启动,停止和部署,而不是直接用容器自带的命令?
脚本部署比较快,方便管理,能够随时部署,不消耗时间,改动方便;
28.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
过滤器:依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,一个过滤器实例只能在容器初始化时调用一次;
interceptor在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在一个方法前,调用一个方法,或者在方法后,调用一个方法;
29.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
需要自定义一个注解类,自定义一个注解接口和实现类,通过创建方法并实现注解注入;
通过注解运行注解处理器;
30.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
不管是XML还是Annotation,其本质都是为spring容器提供Bean定义的信息,采用基于XML的配置,则Bean的定义信息和Bean实现类本身是分离的;而采用基于注解的配置文件,则Bean的定义信息通过在Bean实现类上标注注解实现。
Annotation的优点:
1. 在class文件中,可以降低维护成本,annotation的配置机制很明显简单
2. 不需要第三方的解析工具,利用java反射技术就可以完成任务
3. 编辑期可以验证正确性,差错变得容易
4. 提高开发效率
31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等;
表头文件、命名和定制URL、定制初始化参数、设置过滤器、设置监听器;
32.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
拦截机制的不同
Struts2是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter,getter吧request数据注入到属性。Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了,只能设计为多例。
SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。
Struts2有自己的拦截Interceptor机制,SpringMVC这是用的是独立的Aop方式,这样导致Struts2的配置文件量还是比SpringMVC大。
底层框架的不同
Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。
性能方面
Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。
配置方面
spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高。
33.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序;
34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
TCP(Transmission Control Protocol)传输控制协议,相对于UDP,TCP是面向连接的、提供可靠的数据传输服务。
第一次握手:客户端向服务器发送请确包,SYN=1 (seq=x),等待服务器回应;
第二次握手:服务器端收到请求包后,将客户端的请求包SYN=1(seq=x)放入自己的未连接队列,而是服务器需要发送两个包给客户端。
第三次握手:客户端收到服务器的包后,知道服务器同意连接;向服务器发送连接建立的确认包ACK=1(ack=y+1),回应服务器SYN(sqk=y+1)包发送完毕,服务器收到后与客户端进入ESTABLISHED状态,进行数据传输。
为什么要三次握手?
握手的过程实际上是在通知对方自己的初始化序号(Initial Sequence Number),简称ISN,也就是上图中的x和y。x和y会被当作之后传输数据的一个依据,以保证TCP报文在传输过程中不会混乱。
35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
HTTP协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,POST方法是把提交的数据放在HTTP包的Body中.因此get不安全,post安全
2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.需要提交大量数据的时候使用Post
Content-Type
内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件.意思就是传输的是什么类型的数据.
Content-Type使用的是 “主类型/子类型; 额外参数” ( [type]/[subtype]; parameter )的数值格式。
application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。这种方式用的比较多。
multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。一般上传文件才会使用这种方式。
text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。一般向服务端发送json数据会使用这种方式。
http状态码有哪些?
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
36.了解maven的module。
随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式 进行开发,于是就有了我们的分层架构、分模块开发,来提高代码的清晰和重用。比如:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,这样的管理是混乱的,没有遵守一个设计模式原则:“高内聚,低耦合”,于是我们就希望用分层架构、分层模块来提高代码的清晰和重用, 这时Maven给出了聚合的配置方式;
37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。
有了RESTful结构,不管是电脑端还是手机端,或者是APP,按照REST的接口来进行数据交互,完全不用关心后端实现,也就是说,前端和后端真正的实现了完全的分离设计。
URL该怎么写就怎么写,但是没有PUT,GET,POST,DELETE方法;
38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
生成JSON的三种方式:
适用json-taglib并在jsp页面来设置字段或嵌套。
同过注解ResponseBody返回Java对象或集合,可以自动转化为JSON字符串。
利用Gson转化
JSON-taglib是一个JSP 2.0标记库,用于在JSP代码中呈现JSON(JavaScript Object Notation)数据。它可以作为AJAX应用程序的服务器端的一部分,允许使用JSP的全部功能来格式化JSON数据。
39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
接口分为四部分:方法、url、请求参数、返回参数
请求参数和返回参数,都分为5列:字段、说明、类型、备注、是否必填
易使用:没有复杂的程序、复杂的细节,易于学习;灵活的API允许按字段排序、可自定义分页、 排序和筛选等。一个完整的API意味着被期望的功能都包含在内。
难误用:对详细的错误提示,有些经验的用户可以直接使用API而不需要阅读文档。而对于开发人员来说,要求又是不一样的;
易阅读:代码的编写只需要一次一次,但是当调试或者修改的时候都需要对代码进行阅读。
易开发:个最小化的接口是使用尽可能少的类以及尽可能少的类成员。这样使得理解、记忆、调试以及改变API更容易。
40.Http的Header里面包含哪些字段,每个字段都有哪些含义?
Accept: /声明在request header中表示客户端能够接受的MIME类型
Accept-Encoding:r //声明在request header中表示某种加密压缩算法
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7 //声明在request header中表示接受的语言
Cache-Control: // 对于很多静态资源一般会赋值缓存,以便快速渲染
Connection: keep-alive
Cookie://往往是由服务器端通过Set-Cookie header的方式设置出来的值。
Host: // 服务器域名
……
41.如何写shell脚本?尝试自己编写一个简单脚本。
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell;
42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
打包,部署,回退(备份),等。。。。编写shell文件(xxx.sh)
43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
配置在不同的容器里面,这样方便管理,减少误操作;
44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?
设置的64mb启动没有问题,以最小启动内存为准了,再预留一些 ;
45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
修改服务器配置文件,一般.xml .conf .properties里面大多注释中有常用的默认配置;
46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 9支持最新的Servlet 3.2 和JSP 2.3 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
Resin是CAUCHO公司的产品,是一个非常流行的支持servlets和jsp的引擎,速度非常快。Resin本身包含了一个支持HTTP/1.1的WEB服务器。它不仅可以显示动态内容,而且它显示静态内容的能力也非常强,速度直逼APACHESERVER。许多站点都是使用该WEB服务器构建的;
根据情况而定;
47.maven常用的打包插件有哪些?有什么区别?如何使用 ?
1.package,maven自带的命令打包,平时的打包基本够用,但不能打可直接运行的jar包
2.IDEA自带的打包工具,不过打的包很容易出现冲突
3.jar-dependency插件,繁琐,性能差,不建议使用
4.assembly插件,可以打多种格式的包,具有基本的解决所打jar包内依赖包冲突的问题,但一旦出现冲突则无法解决
5.shade插件,终极杀器,jar包出现依赖包冲突可以通过调整配置解决
性能有区别
48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
WAR是Sun提出的一种Web应用程序格式,是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类。
还有jar、ear;
49.Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
没遇到过。。。
50.Content-type中的数据类型,在Spring MVC中都怎么接收数据?
MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。
类型格式:type/subtype(;parameter)? type
主类型,任意的字符串,如text,如果是*号代表所有;
subtype 子类型,任意的字符串,如html,如果是*号代表所有;
parameter 可选,一些参数,如Accept请求头的q参数, Content-Type的 charset参数
51.什么是restful?rest的请求方法有哪些,有什么区别?
restful就是基于rest的一种风格,
有put、get、post、delete等方法
分别对应增删改查
对任务二进行总结
任务二脑图总结:
任务二用时(11.28--12.13用时15天,实际用时14天(请假休息一天))
任务二小结:
任务二做了14天,主要是web服务器配置了三、四天才勉强弄好。浪费了很多时间。任务二开始接触到web工程,学习了Spring大家族的Springmvc,学习表单提交,学习了rest风格的url,学习了web服务器。
任务二使用SSM搭建了最基础的web项目,对mvc的设计有了初步了解。以后的项目都是建立在此基础上,对敲代码更加熟练了。
知识点:
SpringMvc:请求转发、重定向、mvc的视图解析器、前后台的数据传递。
Rest风格的URI设计、对以资源为核心的请求设计。
Tomcat的配置使用,项目发布时,对tomcat设置虚拟目录。
html学习、写出简单的CRUD页面,分页的设计学习。
使用Git对代码进行管理。
明天要做什么
准备进入任务三
评论