发表于: 2018-10-19 10:38:30

1 468


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

可以通过 access.log 来查看, WEB容器中的 Access.log 就是 HTTP 访问的日志,其中有一些系统字段

  • $remote_addr 记录访问网站的客户端地址
  • $remote_user 远程客户端用户名
  • $time_local 记录访问时间与时区
  • $request 用户的 http 请求起始行信息
  • $status http 状态码,200、301、404等
  • $body_bytes_sent 服务器发送给客户端的响应 body 字节数
  • $http_referer 记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置
  • http_user_agent 记录客户端访问信息。例如,浏览器,手机客户端。
  • http_x_forwarded_for 当前端有代理服务器时,设置 web 节点记录客户端地址的配置,此参数生效的前提时代理服务器也要进行相关的 x_forwarded_for 设置

# 代表了程序真正响应的时间$upstream_response_time

# 代表了程序响应的时间和传输到用户的时间,所以如果网络不好,会远远大于前者.$request_time

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

系统盘通常存放的是系统的配置文件等

数据盘只存放用户的数据

如果发生了服务器升级,系统重装等问题,数据在系统盘就不易操作。一般都是一个数据盘挂载在系统盘外方便维护


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

MySQL

MySQL 是最受欢迎的开源 SQL 数据库管理系统。
优势:

  • MySQL 是一个关系型数据库
  • MySQL 是开源的
  • MySQL 服务器是一个快速的、可靠地和易于使用的数据库服务器。
  • MySQL 服务器工作在客户/服务器或嵌入系统中
  • 大量的 MySQL 软件可以使用

SQL Server

SQL Server 是由微软开发的数据库管理系统, 是 Web 上最流行的用于存储数据的数据库,它已广泛用于电子商务、银行、保险、电力等有关的行业。

Oracle

Oracle 率先推出了分布式数据库、客户、服务器结构等崭新的概念。首创行锁定模式以及对称多处理计算机支持。率先增加对象技术,成为关系——对象数据库系统。目前覆盖了大、中、小型机等几十种机型, Oracle 数据库成为世界上使用最广泛的关系数据系统之一。
优势:

  • 兼容性

采用标准 SQL, 并经过美国国家标准技术所 NIST 测试

  • 可移植性

Oracle 产品可以运行于很宽范围的硬件与操作系统平台上。可以安装在 70 种以上不同的大中小型机。还可以在 WMS、DOS、UNIX、Windows 等多种操作系统下工作

  • 可联结性

Oracle 能与多种通讯网络相连,支持各种协议(TCP/IP、DECnet\LU6.2)

  • 高生产率

Oracle 产品提供了多种开发工具,能够极大地方便用户进行进一步开发.。


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

阿里云

腾讯云

百度云


Windows 一般的服务器会采用 Windows Server,其中 Windows Server 还包含一个图形界面,Windows 会使用一部分内存来维护这个 图形界面。虽然 Windows Server 入门门槛低,但是并不免费。虽然有盗版,但是对于后期维护升级等很有可能还是要花钱进行升级。

且因为 Linux 的网络性能近些年来提升较快,且开源,网上有一种非常廉价的配置 

Linux + PHP + MySQL、Linux + Apache +PHP + MySQL 或者 Linux + Nginx + PHP + MySQL  的组合成为当今网络服务器的主流组合。


在开源这面大旗下,带动了很多开发者积极参与,这样的结果是发展越来越快,技术的更迭也更加的频繁,各种需求可以更快的满足。

https://zhuanlan.zhihu.com/p/28978188


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

Secure Shell 缩写, 专为远程登录回话和其他网络服务提供安全性额协议。

我们可以使用 SSH 通过一些 FTP 工具连接服务器,用可视化的界面来下载上传文件

或者直接使用 SSH 命令


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

C 标签就是 JSTL(标准标签库),是一个 JSP 标签集合,它封装了 JSP 的通用核心功能。

我们可以将其分成 5 个类别

核心标签

格式化标签

SQL 标签

XML 标签

JSTL 函数

例如核心标签库中有

<c:out>在 JSP 中显示数据

<c:set>用于保存数据

<c:remove>用于删除数据

<c:catch>用来处理产生错误的异常情况,并将错误信息存储下来

<c:if>与程序中使用 if 一样

<c:choose>本身作为 <c:when> <c:otherwise> 的父标签

<c:when> <用来判断条件是否成立>

<c:otherwise>  当<c:when>标签判断 false 被执行

<c:import>检索一个绝对会相对的 URL, 将其内容暴露给页面

<c:forEach>基础迭代标签,接收各种集合类型

<c:param>用来给包含或重定向的页面传递参数

<c:redirect>重定向至一个新的 URL

<c:url>使用可选的查询参数来创造一个  URL


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

正向代理:

即客户端先向代理服务器发送请求(对于客户端来说,代理服务器就是真正的服务器),然后代理服务器将请求转发给原始服务器发送请求,并将数据返回给客户端

反向代理服务器:

客户端将请求先发送给服务器,服务器会将请求转发给具体处理的服务器,然后将数据返回给客户端


两者好像差不多,但实际上正向代理一般设置在客户端,且要知道代理服务器的 IP, 代理程序的端口

反向代理刚好相反,设置在服务器,客户端不需要进行设置,代理服务器会判断将请求转发给具体的服务器。


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

Nginx 就是一款表现优秀的服务器软件,其优点表现在以下几点

更快:

在处理单次请求和高并发都会比其他 web 服务器更快


跨平台高拓展性:

Nginx 用 C 语言编成,可以运行在大多数 UnixLinux os 上,并且有 Windows 移植版。且由很多不同层次,不用类型,不同种类 耦合度极低的模块组成,且嵌入到二进制文件中执行,速度非常快还有很多开发的第三发模块,很多公司乐意使用 Nginx 来定制化自己的 web 服务器


可靠性:

Nginx 的每一个 worker 进程相对独立,且 master 进程在一个进程出问题后可以迅速拉起一个 worker 子进程提供服务


低内存消耗:

10000 个非活跃 keep-alive 的 http 链接仅消耗 2.5 M 的内存。


单机支持 10 万以上的并发链接:

随着互联网的高速发展以及越来越多的请求,能够支持高并发自然会受到互联网公司的青睐,且理论上 Nginx 的并发上限取决于内存


热部署:

由于 master 管理进程和 worker 工作进程的分离设计, Nginx 可以在 7 X 24 小时不间断的更新可执行文件等等...


最自由的 BSD 许可协议:

用户不仅可以免费试用,而且还可以自由的修改源码进行拓展,这吸引了无数的开发者为 Nginx 贡献自己的智慧。


实际上 Nginx 以上 7 个优点并不是全部

可以使用 golang 作为反向代理服务器


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

第一,方便开发者识别去调用

第二,容器未启动怎么能用容器的命令去启动容器呢?


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

Filter 过滤器: 拦截 web 访问 url 地址

Intercaptor 拦截器: 拦截以 .action 结尾的 url, 拦截 Action 访问

Spring AOP 拦截器: 只能拦截 Spring 管理 Bean 的访问


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

首先定义 Bean, 其次在 Spring 配置文件中标注下哪些包需要被当做 Bean。

<context:component-scan base-package="com.draper.dao"/>

其次就在你要注入的对象上面标注注解 @Autowired。

@Autowired
private StudentService studentService;

我们然后可以直接使用对象,这些都依赖于强大的 Spring 对象


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

Spring 容器成功启动的三大条件分别是 Bean 定义信息, Bean 实现类及 Spring 本身。如果采用基于 XML 的配置,则 Bean 定义信息和 Bean 实现类本身是分离的;而采用基于注解的配置文件,则 Bean 定义信息通过在 Bean 实现类上标注注解实现。


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

<listener>
   <listener-class>com.draper.servlet.listener.InitiateWebSettingListener</listener-class>
</listener>

可以在容器启动前初始化一些信息,例如网站联系方式,地址,访问人数查询以便接下来显示


加载 Spring 文件

<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:spring/spring-*.xml</param-value>
</context-param>


Servlet 及其 Mapping

<servlet>
   <servlet-name>mvc-dispatcher</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

   <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:spring/spring-*.xml</param-value>
   </init-param>
</servlet>

<servlet-mapping>
   <servlet-name>mvc-dispatcher</servlet-name>
   <url-pattern>/</url-pattern>
</servlet-mapping>


会话的超时设置

<session-config>
   <session-timeout>10</session-timeout>
</session-config>


web 的欢迎页,一般这个工作被 RequestMapping 取代

<welcome-file-list>
   <welcome-file>index.html</welcome-file>
</welcome-file-list>


错误页,用来将统一错误的页面展示给用户

<error-page>
   <exception-type>java.lang.Throwable</exception-type>
   <location>/404.html</location>
</error-page>


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

据说以前 Spring Struts Hibernate 的年代,Struts 有很多东西要自己设计,且 Struts 自身有很多的 bug, 漏洞,容易被攻击

现在流行 Spring SpringMVC Mybatis 

其中 Spring 和 SpringMVC 能够很好地结合在一起


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

Web Service 是一个平台独立的,低耦合的,自包含的,基于可编程的 Web 的应用程序,可使用开放的 XML 标准来描述,发布,发现,协调和配置这些应用程序,用于开发分布式的互操作的应用程序


Web Service 框架有 Apache Axis1 Apache Axis2 Codehaus XFire

Apache CXF RESTEasy Dubbo


Web Service 很注重规范,里面 SOAP 犹如婆娘的裹脚布,又臭又长,伴随 WEB 2.0 流行, RESTful 独领风骚


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

TCP/IP 协议不是一个协议,而是一个协议族的统称。里面包括了 IP 协议, IMCP 协议, TCP 协议,以及我们更加熟悉的 http, ftp, pop3 协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流。

与 ISO 七层协议经典架构稍微有些不同。

TCP/IP 协议族按照层次由上到下层层包装。最上面就是应用层,里面有 http,ftp 等我们熟悉的协议。第二层是传输层,著名的 TCP和UDP协议就在这个层次。第三层是网络层,IP协议就在这里,他负责对数据加上 IP 地址和其他数据已确定传输目标。第四层叫数据链路层,这个层次的定义包括网线的制式,网卡的定义等,这一部分我们就不怎么关心。

简单理解一下...对于三次握手是次数最少能确保双方建立通信的次数

对于连接的的保证就是双方收发信息都没有问题

A->B

如果 B 不回应,则有可能 A 的发送有问题, B 的接收有问题

A<-B

B回应A说明 A 的发送 B 的接收都没有问题,但是现在不知道 A 的接收和 B 的发送

A->B

A回应B 说明 A 的接收是没有问题,B的发送也是没有问题的

故这就是三次握手


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

http 协议属于 TCP/IP 协议的应用层面向对象的一个协议

工作于客户端——服务器架构之上


主要特点:

简单快速:客户想服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET/HEAD/POST...


灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记


无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并受到客户的应答后,即断开连接采用这种方式可以节省传输时间


无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

get 只能将传递的信息放入 Header 或者是 URL 中,GET 并没有 BODY 体。POST 可以将信息隐藏至 BODY 体,一般都是在 BODY 体内进行加密

http Content-Type 有 N 种,这是给浏览器看的,用于浏览器选择用什么样的方式处理这种数据,比如说下载音乐,或者使用浏览器直接打开音乐文档之类的


http 协议适合传递 web 页面,略微有延迟的数据也能接受


常见 HTTP 状态码

200 服务器成功返回网页

404 请求的网页不存在

503 服务不可用


36.了解maven的module。

module 即模块,即由大的问题分解出来的子问题

在开发中我们会经常遇到这样的事情。

而这一次他们最小的单位是 Project,我们使用 Maven 构建出一个项目组,这些项目组之间可以存在继承依赖,这些都是为了能够减少重复


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

RESTful 架构因其拓展性和简单性受到开发者欢迎,其次随着云计算和移动计算的兴起,许多企业愿意在互联网上共享自己的数据功能。另一方面,在企业中也超越 SOAP 成为实现 SOA 的重要手段之一

SOA Service-Oriented Archiecture

SOAP Simple Object Access Protocol 基于 XML


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

生成 JSON 可以使用 Jackson 目前我觉的挺好用的

不应该推荐 JsonTaglib 啊...

在我看来还得转换成 JSP 然后将其编译成 html 文件...

所以明显耗费资源是更多的...直接使用将 JSON Resolve 成 String 传递不是更好么

JsonTaglib 看起来比较容易学习简单容易使用,但是不可能每个 JSON 都要去编写一个 JSP 去解决啊,想不明白


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

接口首先分为四部分:方法, url, 请求参数,返回参数

设计好坏的准则首先要符合 RESTful 风格,其次要符合业务,再多的凭我这个水平太菜想不出来了..


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

Server 服务器,域名

Date 时间

Content-Type 返回类型

Status 状态码

Cache-Control 控制器

Content-Encoding 内容编码

Cookie 等


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

https://www.jianshu.com/p/0e3b79e61ac7

https://github.com/DraperHXY/RestSpring/blob/master/myService.sh


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

可以有部署脚本,查询 Nginx Tomcat 日志等脚本

https://github.com/DraperHXY/RestSpring/blob/master/myService.sh


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

很有可能会放过在一个容器中, 与其同一个服务器上配置两个 Tomcat 我觉得不太可行,我们可以通过使用项目名的方式来区分服务。


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

内存大小一般占用在两个G以内,一般通过压力测试来获取比较精确的数字。

resin4 设置内存在 resin/conf/resin.xml

tomcat 设置内存在 tomcat/bin/catalina.sh 中添加参数来设置内存


中间几个前面日报说过


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

使用 assembly 或者是 shade

assembly 可能会出现 bug 不推荐使用

http://jira.codehaus.org/browse/MASSEMBLY-360

可以使用这个 shade 插件

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-shade-plugin</artifactId>
   <version>2.4.1</version>
   <executions>
       <execution>
           <phase>package</phase>
           <goals>
               <goal>shade</goal>
           </goals>
       </execution>
   </executions>

</plugin>


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

有 war,jar,ear

jar 一般代表了是一个 Java 程序,里面包含了 Java 的 class 文件以及一些资源文件


war 包与 jar 包相似,但是代表的是一个 web 应用,能够被你的 web 服务器识别并把包解开。


ear 是企业应用,用 EJB 打成 ear 包。


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

因为对于 Tomcat 或者 resin 服务器通常只能接收 get 和 post 对于其他的 put,patch,delete 会过滤掉。至于 Jetty 往往是正常的...没用过

但是我知道在 web.xml 中添加过滤器可以解决了

<filter-mapping>
   <filter-name>HiddenHttpMethodFilter</filter-name>
   <url-pattern>/*</url-pattern>
   <servlet-name>mvc-dispatcher</servlet-name>
</filter-mapping>

<filter>
   <filter-name>HiddenHttpMethodFilter</filter-name>
   <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>


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

@RequestMapping(headers = "Content-Type: text/html;charset=UTF-8",value = "/student/{onlineId}", method = RequestMethod.GET, produces = "application/json; charset=utf-8")

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

前面日报讲过了


任务二总结

官方脑图


自己脑图

脑图总结:

很多东西都是任务中指出大致方向,但是很多东西都是要用到的,它可能会在我们学习的各个模块中间起连接作用,方便我们去了解 web 运行的流程。


a. 是否符合预期及解决方法

讲道理划水很多,与预期不符,时间拖沓,基础不稳,知其然不知其所以然。但好在能将项目运行成功,且功能模块暂时看来还是比较开心的。能做到的就是多看看别人是怎么做的,别人的代码有时候会给自己一个新思路,新的解决方案。多看看用的广泛的工具,少用冷门偏门知识,尽可能将自己所学用到位。



b.任务二的主要内容

开始面对 Spring 这个庞然巨兽,从 Spring MVC 入手,学习 RESTful 的风格外加 将对象转化成 JSON,这一部分应该说是应用层比较重要的。还有一部分是关于技术的选型,我们到底要怎么选择技术,根据什么需求,我们怎么应对,算是开拓了视野,且学了 Nginx 对于现在的主流技术也有了认识,且未来可以继续拓展。补充了关于 Linux 的知识,包括性能监控、端口防火墙、shell 脚本,对于服务器算是有个大概的意识



明天的计划:

任务三


遇到的问题:

1.不知道为什么我又去看了 JSON 解析

不需要转换器,只用在你需要屏蔽的属性上添加 @JsonIgnore 就可以了,醉了

@JsonIgnore
private long createAt;

@JsonIgnore
private long updateAt;


2.SpringMVC出现 Request method 'POST' not supported 错误

添加:

<filter>
   <filter-name>HiddenHttpMethodFilter</filter-name>
   <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>

<filter-mapping>
   <filter-name>HiddenHttpMethodFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

我还在好奇我怎么没遇到这个问题呢,果然遇到了,前阵子并没有使用 delete 方法

这里应该还要注意 web.xml 里面的各个东西的配置顺序


收获:

TCP/IP

HTTP

开发环境的选择





返回列表 返回列表
评论

    分享到