发表于: 2020-03-13 23:16:39

1 1275


研究配置nginx 下午

深度思考 没完

1.什么叫MVC,Spring里对应的MVC分别是什么,是怎么收到用户请求然后分发给不同的Controller的?  

MVC是Spring中实现控制层框架的一种思想。

MVC,m指的是model(模型),v指的是view(视图,即展示给用户的页面),c指的是controller(控制器)

步骤:

(1):用户发起请求到前端控制器(DispatcherServlet)

(2):前端控制器请求处理器映射器(HandlerMappering)去查找处理器(Handle):通过xml配置或者注解进行查找
(3):找到以后处理器映射器(HandlerMappering)像前端控制器返回执行链(HandlerExecutionChain)
(4):前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)
(5):处理器适配器去执行Handler
(6):Handler执行完给处理器适配器返回ModelAndView
(7):处理器适配器向前端控制器返回ModelAndView
(8):前端控制器请求视图解析器(ViewResolver)去进行视图解析
(9):视图解析器像前端控制器返回View
(10):前端控制器对视图进行渲染
(11):前端控制器向用户响应结果


2.什么是参数校验,前端和后端需要分别做校验吗?Validation的好处和坏处分别是什么,在真实项目中需要使用Validation吗? 

参数校验即对方法参数进行验证,无论是前端还是后台,包括真实项目,都需对用户输入进行验证,以此来保证系统数据的正确性。

3.SpringMVC分页查询和显示 

使用pageHelper实现分页查询和显示,就是将查询出来的数据,按照特定的长度(数量)进行分开显示 分页的核心简单地讲,就是计算每页多少记录和总页数以及第几页。

4.“内网IP+端口”和“外网IP+端口”和"域名"三种方式方式的差别是什么?什么时候用内网?什么时候用外网IP,什么时候用域名访问?  

内网IP+端口是本地网络内部局域网的各个服务,不连通外网
外网IP+端口是公网上的IP指向的地址里的服务,可以在任何连通网络的地方访问               
域名是IP的一层外衣,只是为了方便识别IP地址。
内网因为范围小,速度快,而且安全性高,所以一般公司在不需要外部网络或者需要高度安全环境、需要保密的环境的时候使用。


5.内网IP和外网IP的区别是什么,在服务器上测试接口是否被防火墙屏蔽的时候,该用内网IP检测,还是该用外网IP检测? 

内网的IP地址每个人的都不一样,Internet上的用户也无法直接访问到内网用户,外网IP就是标示了在整个互联网上的地址,而内网IP呢,就是标识着您在局域网里面的地址。在服务器上测试的话应该是用外网IP。

6.在Linux服务器上,有哪些工具是可以测试接口的,怎么用Wget或者是Curl分别发送Rest的四种请求? 

 postman、RESTClient、jmeter、loadrunner、SoapUI等;

7.PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试? 

一个接口调试工具,上手快,支持用例管理,支持抓包,保存历史记录,多终端同步用例,支持批量运行、定时运行等等。除了postman以外还有dhc、Jmeter、insomnia、paw等。

8.该怎么模拟假数据,为什么在真实项目中,我们通常都是先定义接口,再写假数据,再去写业务逻辑?  

定义了接口就知道该做什么,然后假数据就很好出了,业务逻辑也容易了,这样可以避免因接口不一致而导致的前后端交互问题,提高开发效率。

9.对Service返回的结果是否要打日志,应该打什么样的日志,为什么?  

要打日志,看看我们调用的方法得到的结果是不是正确的。

打印的话就打印一个完整的sql的日志。

10.对Service返回的结果是否要判空,为什么?  

我们的service返回的结果都是sql语句的结果,我们的日志都能看到返回的结果,不需要判断是否为空。

11.在Controller里应该怎么处理Service的异常,大段的Try Catch 会有什么坏处?  

使用try catch语句或者抛出异常,
(1)try catch的代价比较大。相对于判断返回值,抛出异常到捕获,需要更多的cpu指令和代码
(2)Java的异常机制是由JVM控制的,业务逻辑复杂的情况下,会影响controller的执行效率

12.怎么查看Nginx的访问请求时间,多少的响应时间是合理的,并发1000和单线程访问的差别是什么,Nginx可以支持多少并发,Tomcat可以支持多少并发,为什么要在Tomcat之前配置一个Nginx?  

通过nginx的log日志查看访问请求时间;60秒吧;并发1000(高并发)对应的是访问请求,单线程访问对应的是CPU;

Nginx可以支持102400并发,Tomcat默认支持150,能承载多少并发,还需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担;要实现负载均衡就需要配置Nginx.

13.域名和端口号是怎么对应起来的?应该通过域名访问吗,从域名服务商到服务器的流程是怎么样的?  

客户端输入域名,通过DNS将域名解析成为服务器ip,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中.
必须通过域名访问.

流程:

  1. (1)域名解析(获得IP地址)
  2. (2)向WEB服务器发送HTTP请求
  3. (3)服务器处理请求
  4. (4)服务器返回HTTP响应
  5. (5)浏览器显示页面信息


14.端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?

端口,(英语:port),主要分为物理端口和逻辑端口。我们一般说的都是逻辑端口,用于区分不同的服务。因为网络中一台主机只有一个IP,但是一个主机可以提供多个服务,端口号就用于区分一个主机上的不同服务。一个IP地址的端口通过16bit进行编号,最多可以有65536个端口,标识是从0~65535.

用top命令,或者netstat  -anp  |grep  端口命令

查看端口是否可访问:telnet ip 端口号 

开放的端口位于/etc/sysconfig/iptables中

查看时通过 more /etc/sysconfig/iptables 命令查看

在cmd中使用Telnet IP 端口号 命令查看

15.WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?  

http服务:80端口(默认端口号);mysql服务:3306端口;PHP服务:9000端口;其他端口可以按照需求进行配置。
可以在不同的端口上启动多个WEB服务器

16.常用的性能统计命令有哪些,Top,Vmstat,free等命令都有什么用处,CPU占用率,内存使用分别代表什么含义?到什么情况下,应该产生报警信息? 

常用的性能统计命令
TOP:查看服务器整体的性能;(uptime)
vmstat:查看CPU的性能;vmstat -n 2 3
free:查看内存使用的情况; free -m
iostat:查看磁盘读取速度; iostat -d 2 3(需要sysstat包);
ping:查看网络连通性,与Windows类似

netstat:查看端口号,一般都不使用这个命令,一般情况下都使用ps命令来查看

CPU占用率就是程序运行时对核心算力的占用比例,内存使用时程序运行时需要用到的储存空间。

CPU占用率过高,内存溢出的时候会产生警报。

17.为什么要知道响应时间的分布情况,如果一个请求很慢,它的时间可能会被耗费在哪里?  

知道响应时间的分布情况可以及时的获悉异常,或者获取到其它重要信息。

请求耗时一般是几个地方:1.网络波动;2.服务器db连接过多;3.服务器负载过高;4.前端页面处理;5项目如果有问题部署的时间会比较长

18.怎么查看Resin或者是Tomcat中的DB访问时间和Controller时间,有没有可能用Aop的方法自动记录Controller的时间和DB时间?Controller时间和DB时间的区别是什么,在你写的业务逻辑里,相差有多大?

Resin可以通过日志的配置来记录访问时间。       

Tomcat的内部日志记录使用JULI。可以在server.xml里的<host>标签下加上 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> 配置  

通过Aop的方法可以在Controller方法执行前后来切入记录日志。使用了环绕方法切入Controller和ServiceImpl来获取访问时间

19.怎么判断WEB容器是否收到了一个Http请求,WEB容器中的Access.log是什么意思,包含哪些字段,代表什么含义,是哪里配置修改字段的。 

通过查看日志判断;Access.log是apache或者nginx等web service生成的日志,对应于网页的每一次请求,包含有大量的信息;包含用户IP、访问时间、请求方式、接口参数、服务状态、传送字节数、操作系统、浏览器版本、内核信息等;在webd容器的logs文件夹里。

20.为什么通常都是将部署文件放置在/data/盘下,在云服务器中数据盘和系统盘的区别是什么?  

(1)部署文件集中在一起比较容易管理

(2)习惯data一般都是部署网站的根目录

(3)数据盘和系统盘就像是win的d盘和c盘,一般数据都不推荐放在系统盘,如果系统出了问题数据也随之丢失

21.常用的主流数据库有哪些,Mysql有几种安装方式?

主流数据库:

微软:sql server 和 access;

瑞典MySQL:AB公司 mysql;

IBM公司:db2;

美国Sybase公司:Sybase;

IBM公司:informix;

美国oracle公司:oracle;

小型数据库:access、foxbase;

中型数据库:sql server 、mysql、informix;

大型数据库:db2、Oracle、Sybase。

安装方式:

Windows系统:下载安装包;ZIP Archive 版 ;安装phpstudy 

Linux系统:使用yum;官方下载rpm包;免编译包安装

22.有哪些常用的云服务器公司,Linux服务器和Windows服务器的差别是什么,Linux有哪些主流的版本,不同版本之间的差别在哪里? 

阿里云、腾讯云、华为云;

1.Linux系统

  Linxu Server系统是专门为多用户服务器环境构建的操作系统,不同用户可以共同登录系统,资源占用上也比较的公平。Linxu Server系统具有庞大的用户群体和社区支持,当系统漏洞出现的时候,可以迅速的发布安全补丁,但是,由于Linxu Server系统对技术要求较高,针对一些小企业用户来说,在管理层面有一定的难度。

2.Windows Server系统

  Windows Server系统是专有的操作系统,包括Microsoft开发的服务器应用程序。Windows Server系统易于理解、学习和使用。Windows是一个单用户、多任务的操作环境,允许用户同时运行多个应用程序,或在一个程序中同时做几件事情。如今,较为流行的版本是win2008,在网络优化和系统兼容方面都比较好。

  介绍了以上操作系统,用户应该如何选择操作系统呢?一般而言,可以根据网站开发的玉檀、数据库类型以及用户的使用习惯来进行挑选。

  如果开发语言为ASP、.NET、HTML,数据库为ACCESS、SQL Server,请选择Windows系统;如果开发语言为PHP、HTML,数据库为MySQL,请选择Linux系统。

Ubuntu,Linux Mint和PCLinuxOS是其中最易用使用的。想快速部署使用,就可以选择这几个。尤其对于新手,已经做到了和Windows类似的易用程度了。另一方面,Slackware Linux,Arch Linux和FreeBSD是更激进的发行版,更新比较频繁,所以需要有一定的基础。不然,哪天搞崩了都不知道问题所在。 openSUSE,Fedora,Debian GNU/Linux和Mageia则是比较保守的发行版稳定性是他们的特点。但是软件包都比较旧。很多桌面版本的新功能没法用。CentOS是一个企业级的发行版,适合那些喜欢稳定性,可靠性和软件长期支持的用户。


23.什么是ssh?如何在linux服务器上从网站下载文件?  

ssh是安全外壳协议,通过使用SSH,可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了, 而且也能够防止DNS和IP欺骗。还有一个 额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。 SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提 供一个安全的“通道”。

使用:wget -c  +下载地址

wget是linux下一个从网络上自动下载文件的常用自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。一般的使用方法是: wget + 空格 + 参数 + 要下载文件的url路径,

24.C标签是什么,为什么要使用C标签,有哪些常见的指令?  

C标签是:核心标签,最常用的JSTL标签
为了简化JSP页面的设计。对于页面设计人员来说,使用脚本语言(默认值是JAVA语言)操作动态数据是比较困难的,而采用标签和表达式语言相对容易一些,JSTL的使用为页面设计人员和程序开发人员的分工协作提供了便利。

25.什么叫反向代理?为什么要使用反向代理? 

反向代理(Reverse Proxy)方式是指以代理服务器来接受客户端上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

反向代理的作用:
(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网。
(2)负载均衡,通过反向代理服务器来优化网站的负载

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

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

(1)作为 Web 服务器

(2)作为负载均衡服务器
(3)作为邮件代理服务器

好处:

  • Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris, AIX,Mac OS等操作系统上
  • Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
  • 可以实现方向代理及负载均衡

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

方便快捷,节省时间提高效率。  

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

Java中常见的AOP技术有两个,分别是Filter和代理模式(也可以称为过滤器和拦截器),Filter是基于回调函数,代理模式是基于Java反射技术,代理模式又分为静态代理和动态代理,动态代理就是拦截器的简单实现。 

WEB 开发人员通过 Filter 技术,对 web 服务器管理的所有 web 资源:例如 JSP、Servlet,、静态图片文件或静态 HTML 文件等进行拦截,从而实现一些特殊的功能。例如实现 URL 级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 

无论程序从左向右或者从右向左执行都必须经过Filter,Filter在Request到达JSP(Servlet)前截获Request并进行预处理,也可以在Response离开JSP(Servlet)时处理Response,然后对Request进行统一的设置后继续向后传递,比如可以在Filter完成字符集的设置,用户身份的识别,敏感词汇的过滤等等,配置Filter个数不限。 

Java 里的拦截器是动态拦截 action 调用的对象。它提供了一种机制可以使开发者可以定义在一个 action 执行的前后执行的代码,也可以在一个 action 执行前阻止其执行,同时也提供了一种可以提取 action 中可重用部分的方式。在AOP(Aspect-Oriented Programming,面向切面编程)中拦截器用于在某个方法或字段被访问之前进行拦截,然后在之前或之后加入某些操作。拦截器 Interceptor 的拦截功能是基于 Java 的动态代理来实现的。

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

在spring中,每使用一个注解就要声明一个bean

比如 :使用@Autowired注解,必须事先在Spring容器中声明AutowiredAnnotationBeanPostProcessor的Bean:

使用 @Required注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean:

这样的声明未免太不优雅,所以Spring为我们提供了一种极为方便注册这些BeanPostProcessor的方式,即使用context:annotation- config标签,隐式地向 Spring容器注册各种bean

另外,在我们使用注解时一般都会配置扫描包路径选项:context:component-scan base-package=”pack.pack”/

该配置项其实也包含了自动注入上述processor的功能,因此当使用context:component-scan后,即可将context:annotation-config标签省去。

@autowired注解是如何加载的?自动注入是怎样实现的?

@autowired是通过动态代理和反射,在类加载过程中动态生成代理类,当初始化全局变量时,代理类跳到invoke方法,然后通过反射获取field字段对象,在method.invoke()的调用前即可实现注入。aop和拦截器以及常用注解等功能的实现都是基于动态代理实现的。

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

注解与XML配置的区别

注解:是一种分散式的元数据,与源代码紧绑定。

xml:是一种集中式的元数据,与源代码无绑定。

因此注解和XML的选择上可以从两个角度来看:分散还是集中,源代码绑定/无绑定。

注解的缺点:

(1)在使用spring注解时,会发现注解分散到很多类中,不好管理和维护;

(2)注解的开启/关闭必须修改源代码,因为注解是源代码绑定的,如果要修改,需要改源码,这个有这个问题,所以如果是这种情况,还是使用XML配置方式;比如数据源;

(3)注解还一个缺点就是灵活性,比如在之前翻译的Spring Framework 4.0 M1: WebSocket 支持;在实现复杂的逻辑上,没有XML来的更加强大;注解就是要么用,要么不用;

(4)还一种就是约定大于配置,但是在处理一些复杂的情况下,注解还是需要的(如Spring的数据验证/数据绑定注解很强大);

(5)通用配置还是XML吧,比如事务配置,比如数据库连接池等等,即通用的配置集中化,而不是分散化;

(6)XML方式比注解的可扩展性和复杂性维护上好的多,比如需要哪些组件,不需要哪些;在面对这种情况,注解扫描机制比较逊色,因为规则很难去写或根本不可能写出来;

注解的好处:

(1)XML配置起来有时候冗长,此时注解可能是更好的选择,如jpa的实体映射;注解在处理一些不变的元数据时有时候比XML方便的多,比如springmvc的数据绑定,如果用xml写的代码会多的多;

(2)注解最大的好处就是简化了XML配置;其实大部分注解一定确定后很少会改变,所以在一些中小项目中使用注解反而提供了开发效率,所以没必要一头走到黑;

(3)注解相对于XML的另一个好处是类型安全的,XML只能在运行期才能发现问题。

注解也好,XML也好,我们还是需要一些开关/替换机制来控制特殊需求,以改变那种要么全部 要么没有的方案。。

还一种就是约定大于配置,这种方案可能在某些场景下是最优的,但是遇到一些复杂的情况可能并不能解决问题,所以此时注解也是一个不错的方案。尤其在使用springmvc时,好处是能体会的出的。

不管使用注解还是XML,做的事情还是那些事情,但注解和XML都不是万能的,满足自己的需求且已一种更简单的方式解决掉问题即可。

就像探讨一下技术问题,很多人都带有很强的个人喜好来评判一个东西的好坏,这种探讨没有任何意义,最终的目的是解决方案,所以应该探讨的是能不能解决问题,能不能以更容易理解的方式解决问题,能不能更简单的解决问题。

不管是约定大于配置、注解还是XML配置也好,没有哪个是最优的,在合适的场景选择合适的解决方案这才是重要的。就像设计模式一样:是对特定环境中重复出现的特定问题的一个经过前人验证了的解决方案。

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

主要配置都包括:Welcome页面、servlet(前端控制器)、servlet-mapping、filter(过滤器)、listener(监听器)、启动加载级别等。
加载spring配置是通过指定路径(文件)加载的
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>

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

SpringMVC是基于方法开发的,拦截方法,而Struts2是基于类开发的,拦截类;
SpringMVC是可以单例开发的,但是Struts2是必须多例开发;
SpringMVC比Struts2更加精准,与Spring更加契合。

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

Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

实现框架:如cfx、jwx、XFire与Axis2,jwx也就是jax-ws,是java6提供的对webservice的一种实现。cxf框架则简化了服务发布过程。Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新

因为只有银行、大型国企这种对安全性要求高的应用场景才会用到。

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

TCP/IP是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。
所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。
(1) 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3) 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,
如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成次握手,随后Client与Server之间可以开始传输数据了。
“三次握手”的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误

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

HTTP协议,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。是用于从万维网服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果)的。HTTP是一个属于应用层的面向对象的协议,由于其简单、快捷的方式,适用于分布式超媒体信息系统。HTTP协议工作于客户端-服务端架构之上,浏览器作为HTTP客户端通过URL向HTTP服务端即web服务器发送请求,web服务器根据接收到的请求,向客户端发送响应信息。

GET和POST的区别?

1)GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.  POST方法是把提交的数据放在HTTP包的Body中.

2)GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.

3)GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

4)GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

状态码:
 
1xx
指示信息–表示请求已接收,继续处理
2xx
成功–表示请求已被成功接收、理解、接受
3xx
重定向–要完成请求必须进行更进一步的操作。
4xx
客户端错误–请求有语法错误或请求无法实现。
5xx
服务器端错误–服务器未能实现合法的请求。


36.了解maven的module。  

modules

从字面意思来说,module就是模块,而pom.xml中的modules也正是这个意思,用来管理同个项目中的各个模块;如果maven用的比较简单,或者说项目的模块在pom.xml没进行划分,那么此元素是用不到的;不过一般大一点的项目是要用到的。

如果我们的项目分成了好几个模块,那么我们构建的时候是不是有几个模块就需要构建几次了(到每个模块的目录下执行mvn命令)?当然,你逐个构建没问题,但是非要这么麻烦的一个一个的构建吗,那么简单的做法就是使用聚合,一次构建全部模块。

多模块的好处是你只需在根模块中执行Maven命令,Maven会分别在各个子模块中执行该命令,执行顺序通过Maven的Reactor机制决定。先来看创建Maven多模块工程的常规方法。在我们的示例工程中,存在一个父工程,它包含了两个子工程(模块),一个core模块,一个webapp模块,webapp模块依赖于core模块。这是一种很常见的工程划分方式,即core模块中包含了某个领域的核心业务逻辑,webapp模块通过调用core模块中服务类来创建前端网站。这样将核心业务逻辑和前端展现分离开来,如果之后决定开发另一套桌面应用程序,那么core模块是可以重用在桌面程序中

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

近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。

不用Rest的话,URL该怎么写就怎么写,但是没有PUT,GET,POST,DELETE方法

在REST之前,用的是RPC(Remote Procedure Call,远程过程调用)和SOAP(Simple Object Access Protocol,简单对象访问协议)。RPC需要设计一些程序嵌入到某种结构中。这种结构需要存储参数、错误的代码、返回值等。SOAP产品的性能开销很大,它是一个巨大的性能杀手。

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

生成JSON的三种方式:
使用json-taglib并在jsp页面来设置字段或嵌套。
通过注解ResponseBody返回Java对象或集合,可以自动转化为JSON字符串。
利用Gson转化。
(1)使用json-taglib,在控制器中的代码更加简洁,易读
(2)使用json-taglib更加灵活,如果以后需要更改json数据格式,只需要更改jsp页面即可,不需要改动控制器代码

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

方法(get,put,post,delete)、uri、请求参数、返回参数以外,还应该添加接口示例、接口文档版本号、版本修改内容、版本修改时间、修改人,错误代码等。
衡量接口(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。

请求头字段的具体含义:
Accept:浏览器可接受的MIME类型。 
Accept-Charset:浏览器可接受的字符集。 
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。 
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。
Content-Length:表示请求消息正文的长度。 
Cookie:设置cookie,这是最重要的请求头信息之一
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 
Host:初始URL中的主机和端口。 
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。 
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。 
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。 
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

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

Unix命令:

  • echo "some text": 将文字内容打印在屏幕上
  • ls: 文件列表
  • wc –l filewc -w filewc -c file:
  • 计算文件行数计算文件中的单词数计算文件中的字符数
  • cp sourcefile destfile: 文件拷贝
  • mv oldname newname : 重命名文件或移动文件
  • rm file: 删除文件
  • grep ''pattern'' file: 在文件内搜索字符串比如:grep
  • ''searchstring'' file.txt
  • cut -b colnum file:指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令
  • cat file.txt: 输出文件内容到标准输出设备(屏幕)上
  • file somefile: 得到文件类型
  • read var: 提示用户输入,并将输入赋值给变量
  • sort file.txt: 对file.txt文件中的行进行排序
  • uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
  • expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3
  • find: 搜索文件比如:根据文件名搜索find . -name filename -print
  • tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee  outfile
  • basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
  • dirname file: 返回文件所在路径比如:dirname /bin/tux将返回/bin
  • head file: 打印文本文件开头几行
  • tail file : 打印文本文件末尾几行

#!/bin/bash

echo"Hello Internet !"


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

需要部署脚本,启动脚本,关闭脚本,重启脚本。

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

服务属性相同的前提下把web服务都配置在一个容器中,差别在于服务响应的状态好坏。

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

默认为1024,一般设置大小为war包的4倍就能运行,小于war包可能会拒绝访问

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

内存配置、端口配置、日志文件配置;分别在xml、conf。logs中配置。

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

1.jetty、tomcat、resin的区别

(1)jetty和tomcat的区别

【相同点】

Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。

【不同点】

①架构方面

Jetty的架构比Tomcat的更为简单

Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。

Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。

②性能方面

Jetty和Tomcat性能方面差异不大

Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。

Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。

Jetty默认采用NIO在处理I/O请求上更占优势,在处理静态资源时,性能较高

Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。

Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。

③其它方面

Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。

Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。

【总结】

Jetty更轻量级。由于Tomcat除了遵循Java Servlet规范之外,自身还扩展了大量JEE特性以满足企业级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。但对于大量普通互联网应用而言,并不需要用到Tomcat其他高级特性,所以在这种情况下,使用Tomcat是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。

Jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。相比之下,重量级的Tomcat原本便支持过多特性,要对其瘦身的成本远大于丰富Jetty的成本。

然而,当支持大规模企业级应用时,Jetty也许便需要扩展,在这场景下Tomcat便是更优的。


(2)tomcat和resin的区别

【相同点】

都是web服务器,并且支持集群部署。

【不同点】

①速度方面

resin的速度要比tomcat快

②机制方面

resin的启动与关闭机制以及报错机制都比tomcat好,tomcat则相对臃肿一些。

③开发环境热部署支持方面

tomcat较好,可根据需要配置。修改Jsp或java文件时,可配置是否重启服务。

resin较差,更新class及jsp文件,系统都会自动重新部署,并重启,配置了Session会话时开发比较麻烦。

④生产环境下热部署支持

tomcat一般。更新配置文件时,必须手动重启。更新其他文件时,大部分不用重启。但一次性更新太多文件时,经常会造成Tomcat重启失败。

resin较好。更新配置文件时,Resin会自动重启。

今日问题 深度思考有的没遇到没想过 回去补充了许多


返回列表 返回列表
评论

    分享到