发表于: 2018-01-23 22:40:53
1 763
- 今天完成的事情:
- 一、总结任务一的深度思考:
- 1---maven时什么,和Ant有什么区别?
答:maven是一个Java项目管理工具,能够方便程序猿对项目进行清理,编译打包等操作,也方便引入外部jar包。maven工程需要满足一定的结构规范,方便工程的管理。
- 2---clean,install,package,deploy分别代表什么含义?
答:maven clean 作用是删掉之前生成的target文件。
maven install作用是打包项目,并把生成的jar包放在本地仓库,以提供给别的项目使用。
maven package作用是生成jar包,或者war包,放置在target文件夹下。
maven deploy作用是将打包生成的jar包或者war包上传到服务器中的maven仓库。以提供在服务器上使用的jar包。
- 3---怎么样能让maven跳过junit?
答:找到了maven官网上的介绍:跳过单元测试,需要在pom文件中的<build>标签下添加如下内容:
或者在命令行使用命令:
mvn install -DskipTests
或者:
mvn install -Dmaven.test.skip=true
我觉得我会使用第一种方法就可以了,生下两个方法仅作了解。
- 4---为什么要用Log4j来代替System.out.println?
答:简单来说Log4j提供的日志使用起来比较方便。这些方便体现在了
(1)提供了报错的发生时间,提供了报错发生的具体位置;
(2)能够对报错信息的重要行进行分级处理,如果使用println,无论发生了什么报错,都会打印出信息,导致信息杂乱;
- 5---为什么DB的设计中要使用Long来替换掉Date类型?
答:java中的long类型对应mysql数据库中的bigint类型。mysql有时间类型,但是工程中不经常使用,因为时间格式全球的写法不统一,又涉及到时区,冬令时夏令时等问题。timestamp这个类型只能使用到2038年。可以说到处是坑。而我们使用时间有时只是简单的计算两个事件之间的时间长度,使用bigint更方便。
- 6---自增id有什么坏处?什么样的场景下不使用自增id?
答:自增ID的优势:不用写入数据,数据库自动添加;数据不会重复;
劣势:当删掉其中的几个数据时,ID就会变得不连续。
- 7---什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
答:索引建立在数据库中的常用于查询的字段上,用来加快查询的速度。举个例子
例如,有3个未索引的表t1、t2、t3,分别只包含列c1、c2、c3,每个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示。
SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3
此查询结果应该为1000行,每行包含3个相等的值。在无索引的情况下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行。而可能的组合数目为1000×1000×1000(十亿),显然查询将会非常慢。
如果对每个表进行索引,就能极大地加速查询进程。利用索引的查询处理如下。(1)从表t1中选择第一行,查看此行所包含的数据。
(2)使用表t2上的索引,直接定位t2中与t1的值匹配的行。类似,利用表t3上的索引,直接定位t3中与来自t1的值匹配的行。
(3)扫描表t1的下一行并重复前面的过程,直到遍历t1中所有的行。
在此情形下,仍然对表t1执行了一个完全扫描,但能够在表t2和t3上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍。
- 8---唯一索引和普通索引的区别是什么,什么时候需要唯一索引?
答:
普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快数据的访问速度。因此,应该只为最经常出现在查询条件(WHERE column=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐/最紧凑的数据列来创建索引。
唯一索引:普通索引允许被索引的数据列包含重复的值,唯一索引要求数据列的值彼此各不相同。使用关键系UNIQUE来创建唯一索引。这样做的好处是:一是简化了mysql对这个索引的管理工作,这个索引也因此变得更加有效率;二是mysql会在有新纪录插入的时候,自动检查新纪录的这个字段是否已经出现过,如果是,mysql拒绝插入那条信息。
- 9---如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
答:不需要了,mysql会自动检查是否重复,原因参加上一条。
- 10---CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
答:按照《阿里巴巴JAVA开发手册》中的要求,建表必备三个字段,id,gmt_create,gmt_modified。其中id必为主键,类型为unsigned bigint、单表时自增、步长为1。gmt_create,gmt_modified的类型均为date_time类型,前者现在时表示主动创建,后者过去分词表示被动更新。
我认为这两条信息用来记录数据库每一条内容的创建时间和修改时间,可以开放给外部查询功能,不能开放修改或者删除功能,以保证数据库数据的安全。
- 11---修真类型应该直接存Varchar还是int?
答:Varchar是不固定长度的字符型数据,他占用的储存空间是实际字符串长度+1。Varchar数据类型有长度限制,如果超过,会被自动转成text类型,并有warning。Varchar数据类型索引起来浪费时间,建议使用int类型储存这个信息。
修真类型就五个数值,可以用int类型的整数来指代。比如
1———散修弟子
2———内门弟子
3———首席弟子
4———真传弟子
5———修真长老
- 12---varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
答:Varchar是可变长字符串,不预先分配储存空间,他占用的储存空间是实际字符串长度+1。按照最新的《阿里巴巴JAVA开发手册》中的强制规范要求,Varchar类型长度不要超过5000个字节。如果储存长度大于此值,则应定义字段类型为text,独立出来一张表,用主键来对应,避免影响其他字段的索引效率。
我在百度上查到了,varchar最长支持65535个字节,但是因为varchar需要使用最开始的1到2个字节记录实际数据长度,还有1个字节表示NULL标示位累计,所以可用长度最长为65532字节。varchar、Text和LongText的区别:varchar时可变长度;Text和LongText是固定数据长度。Text的长度大小是65535字节。LongText是42亿多字节,即4G。
- 13---怎么进行分页数据的查询,如何判断是否有下一页?
答:这个问题我百度了一下,百度到腾讯视频上修真院之前师兄上传的视频,观看了一下。用数据总条数除以每一页上的数据条数,如果有余数,则页数加一,如果没有余数,则页数就是这个的书。通过sql语句“select count ( * ) from表名”获取总页数,进而判断总页数,每点击一次下一页,会进入数据库获取下一页中的数据,使用sql语句“select * from table limit m,n”查询到第m条到第n条。
- 14---为什么不可以用Select * from table?
答:这个语句返回到是表中所有的数据,效率低下。需求如果只是查询某个字段,我可以只针对这个字段进行查询。
- 15---什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?
答:自己理解贫血模型是指把对象的状态和对象的行为分开。充血模型是把对象的状态和行为合在一个类中,这才是真正的面向对象编程。
16---Spring就是贫血模型,特点是容易掌握,但不是真正的面相对象。充血模型是真正的面向对象,但是需要更高的技能。对于我刚入门来说,用贫血模型可能更明智一些。
- Spring中的IOC是指什么,为什么要IOC而不是New来创建实例?
答:IOC是指控制反转,就是一个对象要使用另一个对象时,不是主动new一个对象,而是交给Spring来注入一个对象。即所谓对象注入。IOC的目的防止对象之间的耦合,导致项目逻辑过于复杂。
- 17---为什么要使用interface,而不是直接使用一个实体类完成任务?interface和inpl这种方式的好处是什么?
答:
(1)灵活性。interface是接口,使用接口程序,可以让工程变得更加灵活,只要接口不变,都能实现功能,不管具体实现方式有何种变化。
(2)合作开发。只要接口统一,项目可以同时进行开发。
- 18---为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?
答:当程序出现异常时,程序猿需要知道是什么原因导致的异常,这就需要程序不能自己卡在那里,而是需要以另外一种方式完成执行。
Try/Catch语句:try之后的代码是有可能暴出异常的代码,catch之后带的是如果异常出现该如何处理的语句。
可能会出现吧。多久发生一次,这个没有实际工作经验,真不知道。
- 19---日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?
答:日志应该放在程序容易报错的位置,需要有时间,语句位置,报错等级这些信息。
- 20---为什么需要单步调试?Debug的时候IDE是怎么找到源码的?
答:单步调节:一步一步来观察程序运行的状况,就像看慢动作,速度放慢,程序的执行顺序和发生的问题就比较容易找到啦。
- 21---可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?
答:我的理解是,不能在线上调试。因为调试需要IDE,服务器上没有IDE。应该在线下调试,调试成功之后,装配成为war包,之后再发布到线上。
二、开始任务二
1---安装tomcat,很简单,过程略去;
2---开始一个SpringMVC 的demo程序,但是没有成功,报错也忘记截图了,明天把这个程序跑通。
明天计划:
明天开始任务二,先把SpringMVC例子程序跑通,好好理解每一部分配置文档的意思。
理解RESTful接口的含义。
遇到问题:
深度思考中有些东西因为没有做过项目,不太清楚是什么意思。
第一个SpringMVC程序遇到问题,没有跑通。
评论