发表于: 2017-09-21 23:30:17
1 856
今天完成的事情:
完成深度思考。
明天计划的事情:
提交代码,对任务一进行最后的总结。
遇到的问题:
对于把完成的步骤的代码在写一遍的话,报错不是很大的问题的话都可以自己解决了。
收获:
1.maven是什么,和Ant有什么区别?
Maven既是一个构建工具,还是依赖管理工具和项目信息管理工具.他还提供了中央仓库,能帮我们自动下载构件。
Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。Maven除了具备Ant的功能外,还增加了以下主要的功能:
1)使用Project Object Model来对软件项目管理;
2)内置了更多的隐式规则,使得构建文件更加简单;
3)内置依赖管理和Repository来实现依赖的管理和统一存储;
4)内置了软件构建的生命周期;
2.clean,install,package,deploy分别代表什么含义?
它们的共同点呢都是maven的一些命令,eg:mvn clean;mvn install;mvn package;mvn deploy
clean:执行命令后,表示清理项目生产的临时文件,一般是模块下的target目录。
install:执行命令后,将打包的jar/war包文件复制到本地仓库中,供其他模块使用。
package:这是一个项目打包工具,执行该命令后会在模块下的target目录生成jar/war等文件。
deploy:执行命令后,会将打包的文件发布到远程参考,提供其他人员进行下载依赖。
3.怎么样能让Maven跳过JUnit?
1)将maven.test.skip设置成true
2)在pom.xml配置中的bulid里添加plugin元素
4.为什么要用Log4j来替代System.out.println?
程序员经常会遇到脱离java ide环境调试程序的情况,这时大多数人会选择使用System.out.println语句输出某个变量值的方法进行调试。这样会带来一个非常麻烦的问题:一旦哪天程序员决定不要显示这些System.out.println的东西了就只能一行行的把这些垃圾语句注释掉。若哪天又需调试变量值,则只能再一行行去掉这些注释恢复System.out.println语句。而Log4j作为帮助开发人员进行日志输出管理的API类库,它除了可以灵活的配置设置日志信息的优先级、输出目的地以及输出格式以外,还可以显示调试信息,所以会代替输出语句来处理类似问题。
5.为什么DB的设计中要使用Long来替换掉Date类型?
date类型和bigint类型之间的互相转换只是简单的计算,并不影响选择。但是bigint时间戳可以表达更为准确、恒定的时间,是这些字面时间所不能达到的。所以在程序设计中的为了提供便利,一般坚持使用bigint时间戳总会好一点。
6.自增ID有什么坏处?什么样的场景下不使用自增ID?
坏处:(1)不存在连续性。
(2)数据重复了自增不会处理和提示。
(3)在面向对象时,不能保证完整性。(由于ID自增后有系统处理该字段,所以在调用对象时,找不到ID值。)
(4)分库的时候ID就不唯一了。(第二个数据库的ID值会从0开始递增,则无法保证ID值唯一。)
不使用自增ID的情况:
(1)自增ID的作用是唯一的标识表中某一条记录,如果有其他能标识该行数据的列,就不用自增ID了。
(2)在做分布式数据库的时候,要求同步自增ID就会出现严重的问题。
7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
DB的索引:对数据库表中一个或多个列进行排序的一个结构。至于性能还是要看要求,见索引的话一般会比不建索引的运行慢,而且随着数据量的增大变慢,所以对于把索引建在哪个字段上也是需要判断的。
需要建立索引的数据:
(1)表的主键、外键必须要有索引;
(2)数据量超过300的表应该有索引;
(3)经常与其他表进行连接的表,在连接字段上应该建立索引;
(4)经常出现在where子句中的字段,特别是大表的字段,应该建立索引;
(5)索引应该建在选择性高的字段上;
(6)索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
(7)复合索引的建立需要进行仔细分析,尽量考虑用单字段索引代替;
1⃣️正确选择复合索引中的主列字段,一般是选择性较好的字段。
2⃣️复合索引的几个字段是否经常同时以AND方式出现在where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引,否则考虑单字段索引。
3⃣️如果复合索引中包含的字段经常单独出现在where子句中,则分解为单字段索引。
4⃣️如果复合索引中包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段。
5⃣️如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引。
(8)频繁进行数据操作的表,不要建立太多的索引;
(9)删除无用的索引,避免对执行计划造成负面影响。
8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。
区别:唯一索引要求索引列的值唯一。而普通索引没有任何限制。
一般创建唯一索引的目的在于避免数据的重复,所以如果在一个数据表中,有数据重复出现,则需要在包含彼此各不相同值的一列建立唯一索引,以此来简化mysql的索引管理工作,也可以在新数据在插入时检测表中是否已经存在。
9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
不需要,由于学员QQ号已经做了唯一索引,根据唯一索引的概念已经其添加目的就可以知道,为了避免重复才会建立唯一索引,所以不需要先判断,在语句执行后,若无异常,则表示表中没有相同的QQ号。
10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
不是很懂。创建时间的话应该在数据输入的时候给予赋值,而修改时间的话,相对于就比较麻烦,需要特定的语句来进行设置,赋值的话可以选择在创建的时候赋值,也可以在第一次修改数据的时候进行赋值,然后以后每一次更新时间,都会相应改变。
11.修真类型应该是直接存储Varchar,还是应该存储int?
该字段是数字类型的,按理来说着两种类型都是可以的。但varchar会在数据长度不够的时候,按照实际的长度来分配空间来避免空间浪费,不过会影响查询时间,所以会选择用int类型来存储,查询和存储速度都快,也不会在处理中转化。
12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
根据实际业务数据内容来确定其长度。
区别:(1)长度不同。
(2)运行效率,varchar比text要快。
(3)varchar可以有默认值,而text不可以有默认值。
13.怎么进行分页数据的查询,如何判断是否有下一页?
进行分页数据的查询:
(1)直接使用数据库提供的sql语句
(2)建立主键或唯一索引,利用索引
(3)基于索引在排序
(4)基于索引使用prepare
(5)利用mysql支持order操作可以利用索引快速定位部分元件,避免全表扫描。
参考文献:http://www.cnblogs.com/geningchao/p/6649907.html
判断是否有下一页:
在不使用框架的情况下,可以将搜索条件写入URL里,用这些方法将搜索条件附带上,然后在多出一条判断,如果post为空,从get获取搜索条件,查看下一页。
14.为什么不可以用Select * from table?
因为执行效率,select * from table 会查询全部,而且还要先被解释成 select all column from table,多了一个查询数据字典的过程。
15.什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?
贫血模式:指Model中,仅包含状态(属性),不包含行为(方法),采用这种设计时,需要分离出DB层,专门用于数据库操作。
充血模式:Model中既包括状态,又包括行为,是最符合面向对象的设计方式。
要求使用贫血模式的原因:个人理解是由于我们现在遇到的项目都不是很复杂,而贫血模式里面只有数据,没有一点业务逻辑层的东西,所以会更好的承载和传递数据,用更容易看懂。
16.Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
IOC:控制反转(Inversion of Control),Spring的核心。
通过提供一种有效的方式将个个分开的组件合成一个完全可供使用的应用。
不使用New来创建实例是因为调用者直接使用new关键字创建的实例,调用者和被调用者之间的耦合度很高,要有调用者亲自创建被调用者的实例对象,不利于软件的移植和维护。
17.为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
这就是要知道接口的特点。接口是一种规范,可以使代码更容易阅读;接口进行了抽象;接口可以实现多态。所以会选择用接口来完成。
另外接口可以实现:
1)通过组合而不是类继承实现各种需求 避免oo的强耦合
2)无需了解类的细节直接使用方法
3)蕴含面向过程的编程思路
18.为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?
(1)调用互相影响的地方,代码容易保存,可以使用Try/Catch是程序继续运行下去。
(2)调bug是,方便查看代码出错的地方。
真实项目没做过,DB连接不上应该实惠发生的,多久就不知道了。
19.日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?
这个跳过,不是很懂。
20.为什么需要单步调试?Debug的时候IDE是怎么找到源码的?
单步调试是在断点范围内进行调试,可以很清楚的看到程序运行的步骤和变量的改变,从而更好的找到问题所在。源码什么的就不知道了。
21.可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?
这个还没接触的,还不会。不过感觉应该可以远程进调试。
评论