发表于: 2017-10-12 21:18:33

1 734


(上午先写点。。未完成)

今天完成的事情:

一 任务1的深度思考:


1.maven是什么,和Ant有什么区别?

maven是一个软件项目管理工具。主要是通过pom对依赖进行管理。

maven相比于Ant:

(1)多了一个固定的目录结构(明确什么类型的代码放在哪个地方)

2根据pom.xml来管理项目:对依赖包有明确定义(名称、版本),而非Ant无法确定版本。还有内置的构建生命周期,包含build,test,package等。通过pom中的标签进行管理:dependence(依赖管理)。。。通过setting中的mirror进行仓库管理。

2.clean,install,package,deploy分别代表什么含义?

clean 清除项目的打包文件(target文件夹)

install 安装jar到本地仓库

package 打包项目(生成target)

deploy 上传到私服

3.怎么样能让Maven跳过JUnit?

全部跳过:

pom添加

<plugin>

       <groupId>org.apache.maven.plugins</groupId>

       <artifactId>maven-surefire-plugin</artifactId>

       <configuration>

         <skip>true</skip>

       </configuration>

 </plugin>

选择性跳过(eg:TestB):

<plugin>

  <groupId>org.apache.maven.plugins</groupId>  

  <artifactId>maven-surefire-plugin</artifactId>  

  <version>2.17</version>  

  <configuration>  

        <includes>

          <include>**/TestA.java</include>       

     </includes>

        <excludes>  

            <exclude>**/TestB.java</exclude>  

        </excludes>

     </configuration>  

</plugin>

或者

mvn clean test -Dtest=TestA

4.为什么要用Log4j来替代System.out.println?

项目越来越复杂,通过System.out.println调试费力(调完了,不需要了,还要再去注释或者删除掉)。

基于此,推出一个名为Log4j的日志记录组件来满足日常开发过程中的复杂调试。包括日志记录器、日志管理器、日志对象、输出媒介控制、格式化、级别、过滤器。可以通过他们,控制日志的输出。

5.为什么DB的设计中要使用Long来替换掉Date类型?

实际设计过程中,Date类型的限制(固定格式、复杂、数据处理不方便)。

Long或者说mysql中的bigint的范围(9223372036854775808)满足日期的范围,格式转换、数据处理都很方便。

所以用Long替代Date。

6.自增ID有什么坏处?什么样的场景下不使用自增ID?

多个表自增id无法确定唯一标识。多个表呗。

7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?

索引也是一组数据,相当于目录的存在,会占用一部分窝里空间。

在百万级数据量下,建索引进行查询,对比不建索引差距3倍左右。千万级,可以达到1个多数量级的差距。亿级则有2个数量级的差距。

该字段唯一性高、常用于查询之类的时候建索引。因为所以也占地方,所以要根据需求来建立,减少消耗。

8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。

唯一索引要求索引的列的内容不重复。

当业务需求需要唯一值时,可以建唯一索引提高查询效率。

9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?

不需要判断了,唯一索引使得系统自动判断QQ是否存在,若存在则插入失败。

10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?

插入时候赋值CreateAt,更新时候赋值UpdateAt。可以开放,这个应该是可以让使用者了解的信息。

11.修真类型应该是直接存储Varchar,还是应该存储int?

varchar直观但消耗大,int减少消耗,需要再建一个表映射关系。

12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?

varchar是变长类型。

4.0版本以下varchar(20)是指20字节,如果汉字,只能存6个(3字节/个)。

5.0版本以上则是20字符,即不用考虑到底是数字、字母还是汉字。

保存时:申明255以下,用一个字节储存长度;以上,用两个。

遇到极大文本时候才用text,一般都是用varchar。

13.怎么进行分页数据的查询,如何判断是否有下一页?

limit a,b; a是第几页,b是每页多少个。

判断: 总数除以页面显示的页数,如果余数为零就是最后一页,否则还有下一页。

14.为什么不可以用Select * from table?

java中的sql语句只用*偷懒的话,在mysql表变更colunm(例如更换列顺序,int和varchar)后,就会悲剧(报错类型不符)。如果确定查询的顺序,则不会报错类型不符。

15.什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?

16.Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

IOC(Inversion of Control)是控制反转的意思,是一种设计模型,遵从依赖倒置原则。将创建实例交给IOC容器执行,减少类与类之间的耦合(New方法创建实例)。

为了解耦合(应对改改改!)。

17.为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?

接口能够明确要做什么(规定实现类写点啥)。

通过接口,和实现接口类来替代直接使用实体类完成项目,能够让代码有层次,可读性高。

可能因为场景不同有好几个实现类,通过接口规定实现类的实现方法后,可以非给不同的人编写不同的实现类,提高效率。


二 REST



REST:Representational State Transfer,表述性状态转移,针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

光看单词完全不知道在说什么。。。只能知道它是一种针对网络的设计规范,面向资源(名词),充分利用HTTP提供的CRUE等操作方法操作资源。


几个前置概念:

URI(uniform resource identifier)统一资源标识符,用来唯一标识资源。

URL(uniform resource locator)统一资源定位器,它是一种具体的URI,指明如何l标识并且ocate资源。


参考博客 http://www.ruanyifeng.com/blog/2014/05/restful_api.html

以及http://blog.csdn.net/zghwaicsdn/article/details/53788535

RESTful的API定义:

1 使用HTTPs协议进行APi与用户间的通信


2 版本号放在URL https://api.example.com/v1/


3 资源

(1) 文档 :对象或者对象的属性 http://api.soccer.restapi.org/leagues/seattle

(2) 集合 :文档的容器 http://api.soccer.restapi.org/leagues 

(3) 仓库 :存放资源的库 PUT /users/1234/favorites/alonso  向1234的用户的收藏(仓库)添加alonso资源

(4) 控制器 :除标准操作(CRUE)以外的逻辑操作


4 过滤 (?...)

GET /users?role=admin //返回权限为admin的用户列表  


5 HTTP响应状态码

完整版:https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

常用:

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

204 NO CONTENT - [DELETE]:用户删除数据成功。

400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。


6错误处理

状态码为4XX时向用户返回错误信息:

  "id" : Text,  //错误唯一标示id

  "description" : Text  //错误具体描述

}


7返回结果

GET /collection:返回资源对象的列表(数组)

GET /collection/resource:返回单个资源对象

POST /collection:返回新生成的资源对象

PUT /collection/resource:返回完整的资源对象

PATCH /collection/resource:返回完整的资源对象

DELETE /collection/resource:返回一个空文档


8 Hypermedia API

返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。

#rel关系,href路径,title标签,type返回类型

{"link": {

  "rel":   "collection https://www.example.com/zoos", 

  "href":  "https://api.example.com/zoos", 

  "title": "List of zoos",     

  "type":  "application/vnd.yourformat+json"

}}


三 创建 maven web






明天计划的事情:

开始任务2

学习SpringMVC


遇到的问题:

REST的学习要在具体实例中才好有一点点理解。

按照教程创建完了maven web 启动后有一堆错误信息。。


收获:

初步掌握任务一中的概念,REST的部分理解(对于网络有效的规范)。



返回列表 返回列表
评论

    分享到