发表于: 2017-10-12 21:18:33
1 733
(上午先写点。。未完成)
今天完成的事情:
一 任务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的部分理解(对于网络有效的规范)。
评论