发表于: 2018-01-01 21:36:40

1 515


今天完成的事情:

第一部分   深度思考


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

Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。

Ant特点:

›没有一个约定的目录结构

›必须明确让ant做什么,什么时候做,然后编译,打包

›没有生命周期,必须定义目标及其实现的任务序列

›没有集成依赖管理

Maven特点:

› Maven是一个自动的构建工具,会根据配置文件对项目进行操作。

拥有约定,知道你的代码在哪里,放到哪里去。

›拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程。

›只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情。

›拥有依赖管理,仓库管理。

 

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

 Clean:清理项目生成的临时文件。Install:把打包的文件复制到本地仓库中,包含package动作。

 Package:在项目的target目录打包项目生成可执行文件(jar或war等可执行文件)。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?

 Log4j一次配置就可以长期将程序运行的很多信息有规律的输出在文件里,可以很方便我们找到错误的源头,但是System.out.println不但需要我们手动设置输入内容,而且还需要我们提前判断在哪里输出更合适。而且Log4J的配置可以在各种程序中都有效,System.out.println却每次都要重新编写。

 

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

date类型的好处是,date是一个对象,有固定的格式,可以直观的察看到日期数据,但date类型在网络传输之间需要转换。

Long型的好处是,方便网络数据的传输,我估计你看的数据库设计这样用,是基于这个考虑。

 

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

在做分布式数据库,要求数据同步时,因为无法用该ID来唯一标识记录,数据记录会出现严重的问题。同时在数据库做移植时,也会出现各种问题,总之,数据记录对自增ID有依赖的情况下,分布式部署都会有问题。

 

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

索引是与表关联的磁盘上结构,包含由表中一列或多列生成的键。建立索引应该是能够增强性能的,但是建立索引本身,会消耗掉系统的一部分性能,所以索引的建立应该非常慎重的建立在能够明确提升系统性能的地方。


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

在查找数据时, 唯一索引只要找到数据就会停止,而普通索引还会继续直到所有完成,所以唯一索引下不能有重复记录。但是在数据量少的时候,双方的性能不会有什么明显的差异。那么在对数据有唯一性要求,而且数据量非常大,性能差距非常明显得地方应该建立唯一索引来提升性能。、


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

唯一索引只要找到符合条件的数据就会停止继续查找,而QQ号很可能会被重复使用,所以需要先判断是否存在相同数据。

 

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

CreateAt是记录数据创建时间的,而UpdateAt是记录数据被修改时间的,createat应该在创建行时赋值,updateat应该在行内列被修改时赋值。而在保证数据记录准确性和产品应用的考量下,这两类应该提供给外界查询的接口却应该封闭外界对数据的变更权限。


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

在学院,每一个学院的修真类型都应该是高度确定而且修改方向也十分明确的,而且,varchar对内容的约束性不高,做不到数据的精确和稳定。所以应该存储int型。


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

看信息需要,针对需要内容的不同而设定针对内容长度的最大值。Text和LongText的区别在于长度,text是6.5万字节,longtext是2的三十二次方字节。

 

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

 分页数据查询有两种方法,一种是把整个数据库都加载进来,然后通过后台来划分页数传输,另一种是根据数据库自带的分页来加载,即要哪页就加载哪页。如何判断有下一页,把数据库的数据数传到后台之后自己设计算法计算。

 

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

程序需要整个表的内容的机会不多,大多数时候我们需要的都只是数据库里面的某一条数据。而且查询全表在数据库和程序性能上都很差,不如精准搜索来的方便和快捷。


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

 贫血模型就是modle和service分离,各自只尽各自的职责,是模块化思想。充血模型是说有东西都在一个类中,有存储数据操作数据等功能,自成生态的思想。

 但问题在于,充血模型里的很多方法和属性,其实也有可能是其他类型共同拥有的。而且充血模型的高耦合性不利于程序的开发和维护,贫血模型在抽象了共同方法之后,大大提高了程序的可复用性和易于维护性,让程序开发和需求满足更为方便快捷。


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

 是控制反转容器的意思,作用就是反转二次开发时的修改顺序,在此基础上再把所有的类都放在一个配置文件中,实际上就是把依赖链中双双依次依赖的形式改为在中间商配置文件这里寻找依赖。


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

 Java的特性在于类只能继承一个父类,但一个接口却可实现很多 很多接口。相比之下的高复用性,低耦合性都让开发变得快捷。而且接口可以实现很多类无法做到的事情,也让程序的功能更强大,更齐全。


18.为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?

 因为防止程序在遇到错误后还继续运行,在不知道方法是否完善的时候使用,防止了异常过多程序崩溃,然后catch里写记录日志给用户进行整改,连接不上的错误应该不会吧,我都能连上,可能是在连接被占用的时候会错误吧。

 

19.日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?

应该是在一个方法被调用后打印日志进行记录,多在方法完成后记录。根据方法运行状态选择五种级别(debug、info、warn、error、fatal)中一种打印,通常放在项目根目录中。


20.为什么需要单步调试?Debug的时候IDEA是怎么找到源码的?

单步调试可以清晰看到参数的值和传递路径或方法的调用,可以让编写者很方便的理解程序中方法相互调用的顺序与流程。以便于找到错误的源头或者功能实现的可能性。应该是根据程序的路径来找到对应的源码的吧,这个没找到答案,但是看方法之间的跳跃都是这样子跳的。


第二部分  学习总结

不知不觉来到修真院已经一个月了,经过一个月的学习,任务一这一道新手的天险总算是走了过来。实属不易,却又感觉平平。

对于任务一,按着以前的学习基础,感觉下来难度不算高,但是任务一需要的知识积累,和知识理解,却感觉是很重要的事情,学习过相关的语言,我也花了接近一个月在慢慢整理知识,也才勉强算是弄懂做通了任务一,相比于更深的理解任务一,还是差了一些。更何况,我们没有老师,唯一的灯光是任务一这一根线,网络上无数走得通走不通的程序,以及师兄简单的提点。

不敢让师兄们教导太多,自己慢慢摸索的道路才最踏实。

  

学习的心得有如下几点:

1.心态。心态很重要,心态是你学习扎实程度和持续进步的保证。


2.正确的资源。正面反馈对新手来说是很重要的事情。那么正确能够运行的程序,能够很快的帮新手理解知识,理解规范。而无法运行的程序,无法理解的错误,对于茫然的新手来说,是一种耐性的消磨,有时候还会让新手的思路跑偏,浪费时间,这进一步打击了新手的学习兴趣。而且,在学习过程中,因为不可用的程序真的耽误了我大量的时间。


3.交流。交流也是学习的一部分。首先是知识的学习,师兄们走过的路,和师兄们行走的方向,会让我们明白在学习中,什么东西是不必要的,从而减少错误的时间消耗,将精力和时间花费在更有效率的东西上来。而且,进入实际项目之后,和队友的交流也很重要。在前期培养默契和了解,以及自身的沟通技巧。现在培养这种能力同时也能够有效减少双方的沟通成本。


4.跳跃。不是所有的知识都需要掌握,不是所有的错误都需要踩一遍。


5.基础知识的学习。对于一个已经成熟的领域来说,他的基础早就已经被固定了,我们所要做的,不过是顺藤摸瓜的慢慢掌握我们所要学习的知识。并将其切实的写入自己的功能实现上来。我们要的就是积累基础知识的过程中思考如何编写,然后在实际的编写中理解知识如何实现,相互循环,相辅相成。




明天计划的事情:将任务二列入禅道,开始任务二的学习。


遇到的问题:无


收获:

1.时间管理很重要,但是清晰的体系理解是控制时间的基础。


进度:完成任务一,开始任务二。

http://task.ptteng.com/zentao/my-task.html


返回列表 返回列表
评论

    分享到