发表于: 2017-08-01 16:07:06
1 1025
【任务一小结】
一、任务概述
任务一的核心是数据库,MyBatis,Spring和MAVEN。简单来说,就是一个前期准备工作,完成了任务一基本要用到的框架和基本的技能都能掌握。
任务一为后面的任务奠定了基石。
二、任务体会
任务一虽然是基础任务,但包含的知识点也不少,而且每个知识点都可以探索的很深。而任务一并没有要求对每个知识点都能了如指掌,大多都是会配置,能运行,能写一个基本的demo即可。我想这是体现了“在实战中掌握知识”的理念——即初期先会用,后期为了完成各种更高级的要求,再探索更高级的用法。我想这是非常好的,一开始抱着一本书从头啃到尾,先不说能不能完全理解,纵使理解了,缺乏使用,可能过两天又忘了。倒不如先看前四章的基本内容,后面的根据随后的任务再来探究。
三、任务收获
1、MySql的基本语法,CRUD增删改查指令,NaviCat连入Mysql并在图形界面中CRUD,学会JDBC,用java连接数据库
2、MAVEN的使用,方便的将需要的依赖插入<dependency></dependency>中
3、Spring的基本概念:DI和AOP的理解,学会如何使用AOP,学会如何配置DI
4、MyBatis,使用XML配置来连接数据库,提供了比JDBC更好的一种方案(将sql语句单独存放于xml中)
5、学习Linux的简单指令,学习如何利用Vim编辑文件
5、购买阿里云,利用Xshell完成了在Linux系统中的MySql,JDK和MAVEN的配置
6、学会使用JUnit做单元测试,利用Assert断言可以直观的观察运行结果
四、任务心得
来了修真院有一个星期了,逐渐适应了这里的学习节奏。为了完成任务学习相关知识点,找资料,问百度,然后实现任务要求,进行下一个任务。
这样能使得每一个知识点都是落地的,以后再遇到类似的问题,即使不能行云流水的敲代码,也只要稍微查询一下,就能解决问题。完成了任务一,我其实也不是对任务一的每个知识点都理解通透,在进行后续任务时,返回来扩展与加强任务一的知识点是在所难免的,到时候带着解决问题的目的来理解,效果肯定比现在空啃书好的多。个人对做任务一的新人的建议是:掌握最核心的东西,千万不要妄想一次性的“从入门到精通”任何一样东西,先把门入了,精通是建立在大量实践上的,是个漫长的过程。在做任务的过程中,总结非常重要。我也是最近才学会了利用GitHub来管理代码,我现在是把代码传到GitHub中,然后在日报里少贴代码,更多的是知识点的总结。
【深度思考】
1.maven是什么,和Ant有什么区别?
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。我现在一般用MAVEN来添加依赖包。
而Ant是项目构建工具,基本Ant的功能MAVEN都能实现,而MAVEN比ANT多了项目对象模型和中央仓库。
2.clean,install,package,deploy分别代表什么含义?
答:mvn clean是清理target目录下编译内容
mvn install是安装Jar包到仓库
package是打包
deploy是发布到远程仓库
3.怎么样能让Maven跳过JUnit?
答:在POM.XML中插入下面语句
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
4.为什么要用Log4j来替代System.out.println?
答:System.out.println功能太局限,而Log4j专门处理日志,可调整输出的内容,并且log4j的资源占用也比较小
5.为什么DB的设计中要使用Long来替换掉Date类型?
答:主要有2个原因:一是Date类型有固定格式,而且会根据地区不同显示不同(比如外国的夏令时与冬令时),这样平白添加的转换的功夫。
二是大多数程序中,我们并不关心具体时间,我们关心的是发生某件事后经过的时间。使用BigInt类型可以很方便的加减计算。
6.自增ID有什么坏处?什么样的场景下不使用自增ID?
答:自增ID主要坏处有:1、不利于数据库的迁移 2、自增ID会越来越大,即使删除数据,ID也不会变小
7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
答:索引就相当于DB中的目录,会严重影响DB的查询速度,同时索引也会占用不少的内存。
基本上在几百条以上就会有性能的差别。
在下面几种情况下,需要对该字段做索引:该字段经常在WHERE语句中出现,该字段内容重合率很低。
8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
答:唯一索引就是该字段下内容都是不一样的,无重复内容。普通索引允许内容有重复内容。
一般在身份证ID或其他独一无二的字段下需要建唯一索引。
9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
答:不需要,Mysql会自动检测,如果已经重复,则插入失败
10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
答:创建时间该在插入数据时赋值,修改时间应该在UPDATE时赋值。
11.修真类型应该是直接存储Varchar,还是应该存储int?
答:修真类型数量较少,可以用int来指代具体类型,不过varchar更加直观
12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
答:varchar长度是字符长度+1.比如“a”的长度为2,那是因为varchar需要多表示终止符的位置。
Text和Long Text区别就在于大小。
13.怎么进行分页数据的查询,如何判断是否有下一页?
答:Mysql中分页查询使用Limit语法,关于判断下一页:总量除以页面数,若余数为零,则为最后一页,无下一页。
14.为什么不可以用Select * from table?
答:会降低查询速度,因为*会将所有字段都查询出来。
15.什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?
答:贫血模型:贫血模型中包含了一些业务逻辑,但不包含依赖持久层的业务逻辑。这部分依赖于持久层的业务逻辑将会放到服务层中。可以看出,贫血模型中的领域对象是不依赖于持久层的。
- 充血模型:充血模型中包含了所有的业务逻辑,包括依赖于持久层的业务逻辑。所以,使用充血模型的领域层是依赖于持久层,简单表示就是 UI层->服务层->领域层<->持久层
贫血模式的好处就是不包含业务逻辑,这样分层清晰。
16.Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
答:IOC即为控制反转,系统中通过引入实现了IoC模式的IoC容器,即可由IoC容器来管理对象的生命周期、依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。其中一个特点就是通过文本的配置文件进行应用程序组件间相互关系的配置,而不用重新修改并编译具体的代码。
17.为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
答:面向接口编程最大的好处就是可以任意替换接口的实现类,如果用实体类,会非常不利于项目的修改。
18.为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?
答:处理异常是为了即使程序异常产生也能按自己的意愿来处理。Try/Catch应该在有可能出现某种类型的异常下使用。
19.日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?
答:方便定位问题的日志:
1.日志明确标志属于哪次请求
2.在对外提供的接口入口处打印一条日志
3.在调用其它系统接口的前后各打印一条日志
4.不符合业务逻辑预期打印一条日志
5.业务处理出现异常打印一条日志
6.极少出现的else情况打印一条日志
显示程序运行状态的日志:
1.耗时(可能出现超时)业务逻辑处理时间打印一条日志
2.批量处理大量数据时显示处理进度打印n条日志
20.为什么需要单步调试?Debug的时候IDE是怎么找到源码的?
答:单步调试可以让人清晰直观的看见哪一步是怎么样的结果,更容易排查。
21.可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?
答:可以。真实的项目还不太清楚
评论