发表于: 2020-06-11 12:50:47
1 1680
1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?
11、前端控制器向用户响应结果DispatcherServlet是整个SpringMVC的核心。它负责接收HTTP请求组织协调Spring
2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗?
参数校验就是对用户输入的数据进行校验,前端和后端都需对用户输入进行验证,以此来保证系统数据的正确性。好处是更为安全高效,坏处是降低了用户体验。需要。
4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?
内网IP:顾名思义,就是在内网中使用的ip地址,什么是内网,一个路由器下的电脑都处在一个内网中,也称之为局域网,内网ip是可以重复的,因为局域网可以有很多个,当然出了这个局域网,就无法访问这个内网ip了。
外网ip:这个ip的功能很强大,他是互联网中唯一的地址,不会出现重复的情况,并且可以被互联网中其他的电脑直接访问到,所以一般作为服务器的电脑,我们都要保证这台电脑有一个公网ip,这样才能更好的给外网用户提供服务。
域名:域名使一个IP地址有"面具" 。一个域名的目的是成为便于记忆和沟通的一组服务器的地址。
5.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测?
区别在4,外网。
7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
Postman 提供功能强大的 Web API 和 HTTP 请求的调试,它能够发送任何类型的HTTP 请求 (GET, POST, PUT, DELETE…),并且能附带任何数量的参数和 Headers。不仅如此,它还提供测试数据和环境配置数据的导入导出。
为什么要做接口测试?
接口测试是测试系统组件间接口的一种测试,接口测试主要用于检测外部系统与内部系统之间以及各个子系统之间的交互点
简单来说:接口相当于把内、外部连接起来,测试就是检测之间的数据连接是否正确
为什么做测试:
①系统复杂度不断提升,传统测试方法不能满足
②前后端分离,对后端系统进行监控
③验证前后端传输信息是否加密
8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?
Json,前后端分离方便前端调试。
9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
一种情况是数据是一个基本类型或者对象类型,比如通过条件获取ID,或者根据Id获取对象等.
这时还要分两种情况
1.我只需要该对象的属性,比如是否为空,具体返回的数据的值是什么,我们不关心的,就不需要在日志中打印返回的结果的值
2.我除了要判断该对象的属性,还需要用到该数据的值,比如作为结果返回,或者是作为下一步操作的入参,那么就需要在日志中打印结果,以后如果出现问题,能够方便我们进行调试.
对于第二种情况一般是直接打印这个对象即可,但还要注意不能将用户的敏感信息打印出来,比如说密码,身份证号之类的敏感信息
另外一种情况是数据是一个集合类型,比如数组,List等.
这种如果没有特殊需求,只需要打印List的长度即可,不需要将所有的list中数据的具体值记录日志,因为这样会特别影响性能,而且打印长度基本也满足了我们对日志功能的需求
10.对Service返回的结果是否要判空,为什么?
绝大多数情况下都需要对Service返回的结果进行判空.
通常调用service之后返回的结果有两种用途:
一种是作为下一个操作的入参.在这种情况下就必须要判空
另外一种是作为最后的结果返回.在这种情况下还需要继续细分;如果这个结果可以为空,那么就不用判断,直接返回,如果这个结果不能为空,那么还要继续判断,并要处理异常情况.
11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?
针对预期可能发生的异常(检查类型(checked)),在代码手动处理异常可以try/catch捕获,可以向上抛出,可以声明。
针对运行时异常,只能通过规范代码质量、在系统测试时详细测试等排除运行时异常。
坏处:
(1)try catch的代价比较大。相对于判断返回值,抛出异常到捕获,需要更多的cpu指令和代码
(2)Java的异常机制是由JVM控制的,业务逻辑复杂的情况下,会影响controller的执行效率
12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?
可以通过nginx的日志查看。
响应时间越少越好,一般都是几毫秒到二三十毫秒内差不多都是合理的。
1000个并发就是1000个请求同时访问,也有可能是1000个线程同时访问,差别应该就是1和1000的差别了,如果服务器不支持肯多就是卡死或者宕机了。
Nginx可以支持10万左右。
tomcat默认是150,能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高。
nginx是专门用来负载均衡的。
13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?
客户端输入域名,通过DNS将域名解析成为服务器ip,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中
应该,域名使一个IP地址有"面具"
输入域名—浏览器接受数据—向运营商服务器发送数据—internet域名解析服务器—解析成目标网站服务器的ip地址并发送数据—数据经域名解析服务器—发送到你的IP—数据由浏览器解析 —成功
14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口
netstat -anp |grep 端口号 ;查看端口是否被占用
以3306为例,netstat -anp |grep 3306
监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用
netstat -nultp(此处不用加端口号) ;查看当前所有已经使用的端口情况
linux上直接用telnet localhost 3306
查看telnet server是否安装:rpm -qa | grep telnet-server
如果没有查询到相关信息,则安装:yum install telnet-server
15.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
http服务:80端口(默认端口号);
mysql服务:3306端口;
PHP服务:9000端口;
17.为什么要知道响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?
因为要一直监控系统的响应时间,如果响应时间过慢,要及时排查出原因,并解决问题。
原因一:http请求次数太多
原因二:接收数据时间过长,如下载资源过大
原因三:JavaScript脚本过大,阻塞了页面的加载
原因四:CSS、JavaScript、图片等需要重复加载
原因五:cookie影响
原因六:网页资源过多
20.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?
通俗的说系统盘类似于Windows系统的C盘,数据盘相当于其他的盘符
21.常用的主流数据库有哪些,Mysql有几种安装方式?
关系型数据库
1. MySQL数据库 2. Microsoft SQL Server数据库 3. Oracle数据库 4. Postgresql数据库 5. Sybase数据库 6. DB2数据库 7. Access数据库
非关系型数据库
1. Mongodb数据库 2. Redis数据库 3. Hbase数据库 4. Memcaced数据库
23.什么是ssh?如何在linux服务器上从网站下载文件?
SSH是专门为了远程登录会话和其他网络服务提供的安全性协议,使用SSH协议可以有效的防止远程连接会话的时候出现信息泄密,在数据传输的时候SSH会先对联机的数据包通过加密技术进行加密处理,加密后在进行数据的传输,确保了传输中的安全性,SSH服务主要提供两个服务功能:一个是远程联机的SSH服务,一个是借助SSH协议来传输数据的SFTP服务
先下载到本地,直接用连接服务器的软件拖到服务器你想存的路径下。
或者用命令。
25.什么叫反向代理?为什么要使用反向代理?
(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击。
(2)负载均衡,通过反向代理服务器来优化网站的负载。
26.Nginx的作用是什么,在WEB服务前端配置Nginx的好处是什么,除了Nginx,还有别的反向代理服务器吗?
28.什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
Filter是什么
过滤器:依赖于servlet容器。在实现上,基于函数回调,它可以对几乎所有请求进行过滤,
一个过滤器实例只能在容器初始化时调用一次
Interceptor是什么
依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。
在实现上,基于Java的反射机制,属于面向切面编程(AOP)的一种运用,
就是在一个方法前,调用一个方法,或者在方法后,调用一个方法
Filter与interceptor的区别
(1) 接口定义不同
Filter 接口定义在 javax.servlet 包中,接口 HandlerInterceptor 定义在org.springframework.web.servlet 包中
(2) 规范不同
Filter 是在 Servlet 规范中定义的,是 Servlet 容器支持的;拦截器是在 Spring容器内的,是Spring框架支持的
(3) 使用资源不同
拦截器是一个Spring的组件,归Spring管理,因此能使用Spring里的任何资源、
对象;Filter 不能够使用 Spring 容器资源
(4) 深度不同
Filter在只在 Servlet 前后起作用;拦截器能够深入到方法前后、异常抛出前后等。
(5) 调用者不同
Filter 是被 Server 调用;Interceptor 是被 Spring 调用。
因此 Filter 总是优先于 Interceptor 执行
29.使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
@autowired是通过动态代理和反射,在类加载过程中动态生成代理类,当初始化全局变量时,代理类跳到invoke方法,然后通过反射获取field字段对象,在method.invoke()的调用前即可实现注入。aop和拦截器以及常用注解等功能的实现都是基于动态代理实现的。
30.Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
xml配置主要是结构清晰,容易理解,但是配置内容过多,所以工程量大的时候不利于解读和维护。
注解相对比较灵活,但对于初学者不利于理解,配置内容比较少,便于维护。
Annotation的优点:
1. 在class文件中,可以降低维护成本,annotation的配置机制很明显简单
2. 不需要第三方的解析工具,利用java反射技术就可以完成任务
3. 编辑期可以验证正确性,差错变得容易
4. 提高开发效率
31.web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。
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高。
34.什么是tcp/ip协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?
TCP/IP 是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的大的集合
35.什么是http协议?get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.
GET和POST的区别
1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,POST方法是把提交的数据放在HTTP包的Body中.因此get不安全,post安全
2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.需要提交大量数据的时候使用Post
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 //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
37.为什么要用Rest风格,如果不用Rest的话,接口应该怎么定义,在使用Rest风格之前,大家都是用什么方式写接口的?
REST(Representational State Transfer)指的是一种架构设计风格,而满足这种设计风格的应用程序或设计就被认为是RESTful架构风格。
这也是目前互联网中最流行的一种软件架构风格,它结构清晰、符合标准、易于理解,越来越多的应用服务开始使用RESTful这种架构风格,尤其是那些基于HTTP协议的网络服务。
而常常提及的rest的web服务,是rest作为在web领域的一种实现方式
有了RESTful结构,不管是电脑端还是手机端,或者是APP,按照REST的接口来进行数据交互,完全不用关心后端实现,也就是说,前端和后端真正的实现了完全的分离设计。
38.生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
Json生成方式有三种:
① 使用json工具类库转化生成,如FastJson(阿里巴巴)、Gson(谷歌)、Jackson等;
② 使用注解ResponseBody返回java对象或集合,自动转化生成;
③ 使用JsonTaglib在jsp中设置字段或者嵌套生成。
为什么推荐使用JsonTaglib来处理Json呢?
因为使用JsonTaglib与其他的最大区别就是更加灵活,修改更加方便,只需要在jsp中修改即可,不需要修改controller中的代码。
并且,在项目简单的情况下,controller中的代码简洁度并不明显,但是当项目复杂时,可以很清晰的认识到代码的简洁、易读。而这其实也就是Json诞生原因之一。
39.一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
接口分为四部分:方法、uri、请求参数、返回参数:
1)方法:常用的方法就是下面的四种:GET PUT POST DELETE
2)uri:以/a开头,如果需要登录才能调用的接口(如新增、修改;前台的用户个人信息,资金信息等)后面需要加/u,即:/a/u;中间一般放表名或者能表达这个接口的单词。get方法,若果是后台通过搜索查询列表,那么以/search结尾,如果是前台的查询列表,以/list结尾。uri地址里不逊于出现大写字母,如果是两个单词拼接,用/分开
3)请求参数和返回参数:请求参数和返回参数都分为:字段、说明、类型、备注、是否必填这5列。
字段:类的属性
说明:中文释义
类型:属性的类型,只有String、Number、Object、Array四大类
备注:一些解释语,或者写简单的示例
4)返回参数,要分两种情况讨论:
只返回接口调用成功或者失败:code、reason
返回参数:字段、类型
47.maven常用的打包插件有哪些?有什么区别?如何使用 ?
1.package,maven自带的命令打包,平时的打包基本够用,但不能打可直接运行的jar包
2.IDEA自带的打包工具,不过打的包很容易出现冲突
3.jar-dependency插件,繁琐,性能差,不建议使用
4.assembly插件,可以打多种格式的包,具有基本的解决所打jar包内依赖包冲突的问题,但一旦出现冲突则无法解决
5.shade插件,终极杀器,jar包出现依赖包冲突可以通过调整配置解决
48.War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
jar包和war包的区别:
1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。
2、war包是做好一个web应用后,通常是网站,打成包部署到容器中;jar包通常是开发时要引用通用类,打成包便于存放管理。
3、war是Sun提出的一种Web应用程序格式,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织;classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)可以打包成jar放到WEB-INF下的lib目录下。
51.什么是restful?rest的请求方法有哪些,有什么区别?
REST的6个特点,分别是:客户端-服务器的、无状态的、可缓存的、统一接口、分层系统和按需编码。
REST具有跨平台、跨语言的优势。
REST是一种架构风格。
评论