发表于: 2020-06-08 14:24:37
1 1520
加油!!!
今天完成的事:
深度思考
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
MVC是Model、View、Control的简称。分别代表M-数据模型、V-用户界面、C-控制器。
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中.
确认(VAL):产品满足预期使用需求(built the right thing,确认未必一定是通过最终产品进行)。
目的是:展示产品或产品组件能够在其预期的环境中满足其预期的应用
3.SpringMVC分页查询和显示
mybatis里面的内容,有待学习
4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?
内网IP+端口是本地网络内部局域网的各个服务,不连通外网
外网IP+端口是公网上的IP指向的地址里的服务,可以在任何连通网络的地方访问
域名是IP的一层外衣,只是为了方便识别IP地址。
内网因为范围小,速度快,而且安全性高,所以一般公司在不需要外部网络或者需要高度安全环境、需要保密的环境的时候使用。
直接访问网络/子域名的时候使用域名访问,
绑定服务器或者使用服务器内部的服务需要外部连接的时候一般都是用ip
6.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求
接口测试的工具很多,比如 postman、RESTClient、jmeter、loadrunner、SoapUI等
7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
Postman是谷歌的一款接口测试插件,它使用简单,支持用例管理,支持get、post、文件上传、响应验证、变量管理、环境参数管理等功能,可以批量运行,并支持用例导出、导入。
jmeter是一款100%纯Java编写的免费开源的工具,它主要用来做性能测试,相比loadrunner来说,它内存占用小,免费开源,轻巧方便、无需安装,越来越被大众所喜爱
8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
前后端分离的项目当中,后端开发是不需要依赖前端的,但是前端的动态页面是依赖后端提供的数据的,如果前端脱离后端自己定义数据结构时,与真实数据调试时难免造成不必要的改动而浪费开发时间,所以在真实开据。发环境中,需要前后端定义接口后,后端提供假数即数据结构,因为这是和DB设计时相关的,当然,如果前后端约定好数据结构,返回类型,前端也可以自己mock数据
9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
需要打日志,访问用户名,访问IP,操作时间,访问包名,具体函数名
10.对Service返回的结果是否要判空,为什么?
如果你不判断,人家前端拿你数据也不判断就会空指针异常
11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
2.自定义异常处理类,使用springMVC提供的统一的异常处理方式
12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
一个域名可以绑定 ip+端口号,当通过域名访问服务器时候,先找本地的 Host 文件中是否配置了域名与 IP 的映射,如果没有会通过 DNS 找到 域名对应的 IP 地址,然后访问到对应部署的服务
14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
指计算机用来与外围设备连接的接口。
查看哪些端口被打开 netstat -anp
telnet ip
出现 Escape character is ...表示连接,没有被防火墙拦截
15.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
通常用80、8080、443端口,可以通过nginx分配到同的服务器
16.常用的性能统计命令有哪些,Top,Vmstat,free等命令都有什么用处,CPU占用率,内存使用分别代表什么含义?到什么情况下,应该产生报警信息?
5.内存占用是占用的虚拟内存。
17.为什么要知道响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?
通过响应时间的分布情况可以得知究竟哪个环节出了问题,需要优化等等
第一部分前端的响应,一般包括解析和渲染,这部分的性能跟前端的代码,前端硬件有关系。 第二部分就是网络延迟,这部分的代码正常来讲是在8~16MS左右,是的,Http请求就是差不多这个性能,
第三部分就是服务器端的响应,我们说的是网站慢,一般而言,也就是主要在这里,要做性能优化的地方,基本上也是看这里。
18.怎么查看Resin或者是Tomcat中的DB访问时间和Controller时间,有没有可能用Aop的方法自动记录Controller的时间和DB时间?Controller时间和DB时间的区别是什么,在你写的业务逻辑里,相差有多大?
写一个AOP的Util
Controller时间包含DB时间,越好的业务逻辑,业务逻辑时间就会越少,这两者的时间差别就越小
19.怎么判断WEB容器是否收到了一个Http请求,WEB容器中的Access.log是什么意思,包含哪些字段,代表什么含义,是哪里配置修改字段的
访问日志如果没有反馈则无法判断是否成功发送一个Http请求,Access.log是访问记录日志,有用户IP,访问时间,请求方式,接口参数,服务状态,传递字节数,网页,访问信息等字段,不同web容器可以在不同的配置文件中设置
20.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?
数据盘和系统盘就像是win的d盘和c盘,一般数据都不推荐放在系统盘
云服务器更换操作系统是通过更换系统盘来实现的,更换操作系统后系统盘原来的数据丢失。而更换操作系统,数据盘的内容不会丢失。
21.常用的主流数据库有哪些,Mysql有几种安装方式?
Yum安装Mysql,rpm安装Mysql ,二进制安装
22.有哪些常用的云服务器公司,Linux服务器和Windows服务器的差别是什么,Linux有哪些主流的版本,不同版本之间的差别在哪里?
如果企业选择建站的内容和流量都不是很大的情况下,相同的配置的Linux服务器的性能比Windows服务器好一些,Linux服务器占用的资源会少一些
Linux是多用户多进程系统,意味着Linux能够一次性处理大量正在运行的进程,比Windows能够处理的数量要多得多
Linux系统和Windows系统各自的有属于自己的安全技术,Linux的开源软件开发方式有助于暴露错误,集众人智慧解决问题,各种补丁更新得很快,这是Windows服务器不具备的优势。
Linux三大主流发行版及其衍生版本(比较著名的)目录树为:
Debian系列
--Ubuntu
--Knopix
Slackware系列
--Suse
--Opensuse
Redhat系列
--Centos
--Fedora
还有一些其他比较著名的发行版
Gentoo
ArchLinux
23.什么是ssh?如何在linux服务器上从网站下载文件?
SSH:安全bai外壳协议
wget http://xxx.xxx.x.xxxx.tar.gz 而且linux也有自己的维护社区,也可以使用yum来进行安装,比如yum install xxx
24.C标签是什么,为什么要使用C标签,有哪些常见的指令?
C标签是:核心标签,bai最常用的JSTL标签。
https://www.jianshu.com/p/b1e2dae774e5
25.什么叫反向代理?为什么要使用反向代理?
26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗
nginx的作用:https://www.php.cn/nginx/421872.html。其他:varnish
27.为什么要用start.sh,stop.sh,deploy.sh 来完成容器的启动,停止和部署,而不是直接用容器自带的命令?
方便快捷
28.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
Filter是什么
过滤器:依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,
一个过滤器实例只能在容器初始化时调用一次
Interceptor是什么
依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。
在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,
就是在一个方法前,调用一个方法,或者在方法后,调用一个方法
AOP是什么
AOP(Aspect-Oriented Programming)是一种编程思想,对OOP的补充
常见实现:Filter和拦截器(代理模式)
OOP: 对于所有对象中都存在的一些公共行为,无能为力,为减少重复代码,AOP(面向切面)技术诞生
29.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
我们使用注解时一般都会配置扫描包路径选项:context:component-scan base-package=”pack.pack”/
30.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
xml配置主要是结构清晰,容易理解,但是配置内容过多,所以工程量大的时候不利于解读和维护。
注解相对比较灵活,但对于初学者不利于理解,配置内容比较少,相对于xml配置配置文件比较少,省事,注解代码比较简单
31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。
加载顺序为: listener >> filter >> servlet >> spring
32.Spring MVC和Struts的区别是什么,为什么更倾向于使用Spring MVC?
Struts2是类级别的拦截,每次请求就会创建一个ActionSpringMVC是方法级别的拦截,一个方法对应一个Request上下文
Struts2采用Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。
Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。
spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高
33.什么是WEBService,实现WEBService有哪些框架,为什么WEBService经常被认为太重了,只有银行和大型国企才会使用的更多有一些?
实现框架:JWS,Axis2,XFire,CXF
34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
什么是TCP/IP?
TCP/IP也称"国际协议簇", 即不仅指 TCP/IP协议本身,而且包括与其有关的协议。 TCP为传输控制协议,IP为网际协议,是网络层最重要的协议。采用TCP/IP协议通过互联网传送信息可减少网络中的传输阻塞,方便大批量的数据在网上传输,从而提高网络的传输效率。 TCP/IP协议族中包括上百个互为关联的协议,其中有:Telnet
(Remote Login): 提供远程登录功能; FTP (FileTransfer Protocol):远程文件传输协议,允许用户将远程主机上的文件拷贝到自己的计算机上; SMTP (Simple Messagetransfer Protocol):简单信息传输协议,主要用于传输电子邮件;NFS(Network File Server):网络文件服务器,可使多台计算机透明地访问彼此的目录 ; UDP ( User DatagramProtocol):用户数据包协议。
TCP/IP协议的四层结构
第一层:链路层
包括操作系统中的设备驱动程序、计算机中对应的网络接口卡
第二层:网络层
网络互连层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。
第三层:传输层
在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP和用户数据报协议UDP.
TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,
它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。
TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据.
UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。
第四层:应用层
TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。这一层主要的作用有DNS域名解析
第五层:物理层
物理层中,将数据的0,1转换为电压和脉冲传输给物理的传输介质,而相互直连的设备之间使用地址实现传输。这种地址被称为MAC地址,也可称为物理地址或硬件地址。
采用MAC地址,目的是为了识别连接到同一个传输介质上的设备。因此,在这一层中将包含MAC地址信息的首部附加到从网络层转发过来的
数据上,将其发送到网络。
序号:本报文段发送的数据的第一个字节的序号。
确认号:是“确认报文”中期望收到对方下一个报文的第一个数据字节的序号。
若确认号 = N,表明到N-1为止的所有数据都已正确收到。
数据偏移:指的是首部长度,单位是4字节。
控制位:
--紧急URG:TCP会把紧急数据放在发送缓存的最前面,同时也置于报文数据的最前面。
--推送PSH:使接收方尽快将数据交付应用程序,不必等缓存填满后再交付。
--复位RST:TCP连接中出现严重差错,必须释放连接,然后重新建立。
--同步SYN:SYN置1表明这是一个“连接请求”或“连接接受”报文。
--终止FIN:用来释放一个连接。
窗口:指明现在允许对方发送的数据量,因为接收方的缓存是有限的。窗口值是动态变化的。
紧急指针:指出报文段中紧急数据的字节数。
为什么需要采用三次握手?
主要是为了防止两次握手情况下已失效的连接请求报文段突然又传送到服务端,而产生的错误。举例如下:
客户A向服务器B发出TCP连接请求,第一个连接请求报文在网络的某个节点长时间滞留,A超时后认为报文丢失,于是再重传一次连接请求,B收到后建立连接。数据传输完毕后双方断开连接。而此时,前一个滞留在网络中的连接请求到达了服务端B,而B认为A又发来连接请求,若采用的是“两次握手”,则这种情况下B认为传输连接已经建立,并一直等待A传输数据,而A此时并无连接请求,因此不予理睬,这样就造成了B的资源白白浪费了;但此时若是使用“三次握手”,则B向A返回确认报文段,由于是一个失效的请求,因此A不予理睬,建立连接失败。第三次握手的作用:防止已失效的连接请求报文段突然又传送到了服务器。
35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
1、在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。因此,HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP协议栈来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
2、提交方式不同;传输数据大小不同,理论上post不受限制;安全性post较高
3、主要的三种:
application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。这种方式用的比较多。
multipart/form-data: 数据被编码为一条消息,页上的每个控件对应消息中的一个部分。一般上传文件才会使用这种方式。
text/plain: 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符。一般向服务端发送json数据会使用这种方式。
5、状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
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。
Maven Module也是一个maven 工程,但是却是一个子工程,必须有父工程存在并依赖,Maven Module不能抛弃父工程单独存在。
37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
简单轻量,面向资源 一目了然 有自解释性,数据描述简单
近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。
有了RESTful结构,不管是电脑端还是手机端,或者是APP,按照REST的接口来进行数据交互,完全不用关心后端实现,也就是说,前端和后端真正的实现了完全的分离设计。
URL该怎么写就怎么写,但是没有PUT,GET,POST,DELETE方法
38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
4.Jackson
39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
接口分为四部分:方法、uri、请求参数、返回参数
1、方法:新增(post) 修改(put) 删除(delete) 获取(get)
2、uri:以/a开头,如果需要登录才能调用的接口(如新增、修改;前台的用户个人信息,资金信息等)后面需要加/u,即:/a/u;中间一般放表名或者能表达这个接口的单词;get方法,如果是后台通过搜索查询列表,那么以/search结尾,如果是前台的查询列表,以/list结尾。
3、请求参数和返回参数,都分为5列:字段、说明、类型、备注、是否必填
字段是类的属性;说明是中文释义;类型是属性类型,只有String、Number、Object、Array四种类型;备注是一些解释,或者可以写一下例子,比如负责json结构的情况,最好写上例子,好让前端能更好理解;是否必填是字段的是否必填。
4、返回参数结构有几种情况:1、如果只返回接口调用成功还是失败(如新增、删除、修改等),则只有一个结构体:code和message两个参数;2、如果要返回某些参数,则有两个结构体:1是code/mesage/data,2是data里写返回的参数,data是object类型;3、如果要返回列表,那么有三个结构体,1是code/mesage/data,data是object,里面放置page/size/total/totalPage/list 5个参数,其中list是Arrary类型,list里放object,object里是具体的参数。
槽糕的API接口各种各样,但是好的API接口对于用户来说必须满足以下几个点:
• 易学习:有完善的文档及提供尽可能多的示例和可copy-paste的代码,像其他设计工作一样,你应该应用最小惊讶原则。
最小惊讶原则(Principle of least astonishment)
最小惊讶原则通常是在用户界面方面引用,但同样适用于编写的代码。代码应该尽可能减少让读者惊喜。也就是说,你编写的代码只需按照项目的要求来编写。其他华丽的功能就不必了,以免弄巧成拙。
• 易使用:没有复杂的程序、复杂的细节,易于学习;灵活的API允许按字段排序、可自定义分页、 排序和筛选等。一个完整的API意味着被期望的功能都包含在内。
• 难误用:对详细的错误提示,有些经验的用户可以直接使用API而不需要阅读文档。
而对于开发人员来说,要求又是不一样的:
• 易阅读:代码的编写只需要一次一次,但是当调试或者修改的时候都需要对代码进行阅读。
• 易开发:个最小化的接口是使用尽可能少的类以及尽可能少的类成员。这样使得理解、记忆、调试以及改变API更容易。
40.Http的Header里面包含哪些字段,每个字段都有哪些含义?
http header 消息通常被分为4个部分:general header, request header, response header, entity header
41.如何写shell脚本?尝试自己编写一个简单脚本。
前面有说过
42.在Linux服务器上部署的时候,一般都要有哪些脚本,这些脚本该怎么编写?
前面有说过
43.如果有多个WEB服务,都把WEB服务都配置在一个容器里,还是一个WEB配置一个容器,他们的差别是什么,你觉得哪种方式更好?
Tomcat就是这样一个容器。如果web服务器应用得到一个指向servlet的请求(而不是其他请求,如请求一个普通的静态HTML),此时服务器不是把这个请求交给servlet本身,而是交给部署该servlet的容器,要由容器调用servlet的方法,如doPost()或doGet()
一个容器最好只运行一个服务;不会有太多的消耗
44.Resin/tomcat/jetty等WEB容器的内存大小,一般应该设置多大合适,怎么估算WEB程度占用内存的大小?
内存配置一般1-2G。
应该先通过实时数据或者压力测试调整,再根据最大占用估计内存大小
45.jetty,resin,tomcat的常见配置有哪些,内存,端口,日志文件都怎么配置?
常见配置:1.是:port(端口) 2是:Context(上下文)path,也就是web项目的部署根目录其它还有内存大小,编码和日志的配置
46.jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
这些服务器各有优劣,选择服务器时应该先参考项目,预估规模大小等。比如大规模的企业级应用,Tomcat自身扩展了大量JEE特性可满足企业级应用的需求, 所以这种情况下应选用Tomcat。
47.maven常用的打包插件有哪些?有什么区别?如何使用 ?
6.当出现jar包冲突时:统一采用shade
48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
War包:war包就是一个web应用的打包格式,一个web应用,需要一个用户交互的界面,负责给用户提供信息输入的地方,即jsp页面。数据需要保存下来,jsp把网页上的数据穿送给后台的java类,java类在得到这些数据之后再进行数据相关的工作,如存入数据库,给出相关统计数据等等。
明天计划的事:回顾,然后准备任务三
遇到的困难:
收获:
评论