发表于: 2018-03-30 13:07:13

1 540


今天完成的事情:

任务一深度思考

①maven 是什么,和ant有什么区别?

个人理解:maven是一个项目管理工具,它是对项目的整个生命周期的管理,打包,测试,部署。。。它可以方便的管理jar包的依赖管理,可以方便的及进行项目的管理,项目的工程分为三种war,jar,pom工程模式,其中jar就是可以单独打成一个独立的jar包,可以给其它项目使用,比如可以把工具类直接打包jar;war包就是可以在web项目中的打包方式,可以直接把war包放到web服务器中直接就可以部署运行;pom工程就是可以实现分模块的方式来进行项目的拆分,它可以把各个子项目聚合起来,形成一个完成的项目,一般称为父工程,可以定义公用的jar包版本,包括一些maven的插件。

ant:没用过,百度看了一下,大概也是一个项目的构建工具,可以自定义方便在项目初期的构建工作,包括相关的基础配置文件,资源文件的自动生成等等,但是现在貌似不主流了,不深入研究了。


②clean, install, package, deploy含义

这几个命令是maven的关于项目生命周期的几个命令,分别解释,clean就是清空所有target文件,其实就是把之前的编译后的.class和资源文件全部删掉。一般来说重新修改之后的打包,部署都需要clean 之后在进行。

install: 这个就是直接打包安装到本地仓库,maven关于依赖管理的方式就是把项目中需要的jar包依赖通过远程访问到中心仓库,然后download下来到本地仓库,中心仓库的位置是可以自定义的,maven的远程镜像url也是可以配置的,国内一般用阿里的仓库,速度快一点。

package:其实就是打包,根据你在pom.xml文件中配置的方式有jar,pom,war三种方式把源代码编译之后打包。

deploy: 这个是部署的意思,其实就是部署到web容器中,这个涉及到web项目的打包方式war,而且需要在pom.xml配置部署的插件才可以使用。


③maven跳过junit单元测试

命令: -DskipTests   常用 clean deploy -DskipTests


④log4j替换System.out.println?

首先为了获取程序在运行时一些关键参数的输出信息,来检查程序是否运行正常以及是否达到预期的目标,需要输出一些数据来验证。log4j可以把输出的信息一般划分分四个等级,debug ,info, warn, error这几个常用的级别,这样就可以实现信息的划分,方便定位问题。一般开发模式都用debug模式,这样可以看到几乎所有的日志输出,包括web容器初始化,加载资源文件等等。实际上线的话一般用info就可以了。还有一点很重要,log4j可以输入到文件,这样可以方便问题的追溯和解决。


⑤为何DB设计中要用long来替换Date类型?

long类型在mysql数据库里应该就是指bigint类型,这种方式来存储时间,是某一时刻的值。从数据库存储来讲存数字总是最方便也是最有效率的方式,毕竟直接转二进制就可以了是吧,从程序本身需求来讲,时间操作的话正常都是设计到加减的相关业务,纯数字的方式自然是最方便的。而从前台显示来讲,从数字转化为字符显示也比较方便而且更加灵活。综合来讲,从软件工程落地来讲,自然是简单好用最合适。


⑥自增id有什么坏处?什么场景不适用自增id?

自增id主要还是在分布式结构中,普通的单表自增id就会出现全局唯一性的问题,但是可通过配置步长来解决这个为题。


⑦什么是数据库的索引,多大的数据量建索引会有性能的差别,什么情况对字段建索引?

索引就是一种数据结构,它的目的就是实现对数据库的记录的快速检索,就是查找数据。一般超过百万的数据量都需要建立索引,建立索引的原则:经常需要查询的字段,经常出现在子查询建立索引,经常作为表连接字段建立索引。


⑧唯一索引和普通索引?

普通索引一般来说就是为了提高查询效率,它对应字段的值是可以有重复的,不能保证数据记录的唯一性;唯一索引要去字段的值不能有重复的,这一点上来说可以保证数据记录的唯一性,从这一点来说唯一索引也可以保证避免出现重复数据的情况。


⑨如果对qq号建立唯一索引,插入数据的时候需要判断qq号是否存在?

从数据库角度来说,唯一索引字段本身就可以保证重复数据的出现,保证数据记录的唯一性;当然如果在业务逻辑中进行判断,自然是更好的选择的。


⑩CreateAt和UpdateAt字段在什么时间赋值?是否应该开放给外部调用的接口?

createAt应该在执行数据库插入操作的业务层中进行赋值,updateAt应该在执行数据库数据更行的业务逻辑中尽心赋值,不应该开放给外部接口。


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

修真类型数据本身字符串,但是因为数据本身应该是枚举类型,值是有限的且分类较少,可以使用int类型作为存储到数据库的方式,只是在业务层的加入一些匹配原则,比如1代表java,2代表js等等。


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

varchar是可变长度的字符串类型,是空格不填充的,存储和检索的时候可以不处理尾部空格的问题,效率较char类型较慢。text和longtext是用来存储长文本的数据格式,不能有默认值,存储和检索的过程中,不存在大小写转换。效率上char>varchar>text


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

mysql支持limit子查询,通过select * from tablesName limit [offset] n;可以实现对查询结果的筛选,其中offset

标识掠过前面指定的数据记录,n就标识要筛选的查询记录数——就是每页显示的数量。可以根据当前页码和每页显示的数量乘积结果和查询的记录总数——select count(*) from tableName  来进行比较,分情况。总的思路就是获取当前页最后一条记录和记录总数进行对比。或者可以根据总记录数total和每页显示数量rows获取总的页树,然后就可以根据当前页和最后一页比较判断是否有下一页。


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

主要还是出于检索效率的考虑吧,这样写就会检索所有的字段,并且列出所有的数据记录,因为没有条件约束。


15.什么是贫血模型, 什么是充血模型?为什么强制使用贫血模型?

贫血模型就是那种简单的pojo类,只有属性和set/get方法定义,不涉及到业务逻辑的java类;充血模型就是指包括一些业务逻辑方法的java类。使用贫血模型,可以很好的把业务逻辑从基础pojo类中分离开,主要还是提高了代码的可复用性和降低了代码的耦合性。


16.spring 的ioc是什么意思,为什么要用ioc而不是new来创建实例?

ioc是spring的核心机制,官方叫控制反转,或者说依赖注入。其实依赖注入是实现手段,本质就是要取代new对象的操作,因为在业务逻辑的处理过程中需要创建很多的实例,如果以直使用new来操作,从代码上说效率不高,其次spring 的ioc默认是单例模式的,也就是说对于同一个类来说,只存在一个对象实例。对于Jvm虚拟机的内存依赖要小很多。通过@AutoWired注解还可以自动装配,这样在业务层和控制层来说注入依赖非常方便。总的来说就是简化了代码量,而且通过spring容器来集中管理实例对象,也比较方便使用。


17. 为什么interface,而不是直接使用实体类来完成任务?

个人理解:我觉得这是java面向对象编程三大特性:继承、封装、多态性里最能体现多态的一点。多态的机制就是父类的引用可以指向子类的对象。这也是接口和接口实现类之间的关系,而且接口更灵活,毕竟这是定义方法。在dao层,业务层,控制层,各层之间的调用关系都是通过接口来实现,这样就可以非常松耦合。当实现类有修改的时候,而我的各层之间并不受到影响,都不需要重构代码。


18. 为什么需要异常处理,try/catch应该在什么场景下用?

首先异常处理的目的是为了保证程序代码可以在出现问题的时候继续执行下去,不至于直接挂掉。java程序中主要分为编译时异常,运行时异常。编译时异常时要求做异常处理,编译时异常主要时考虑到外界因素可能造成的程序崩溃,这个时候是需要trr/catch处理。真实的系统会出现网络中断,db连接不上的错误,多久会发生一次,这个没法确定吧。


19. 日志应该怎么打?

提供日志功能的第三方框架有很多,log4j,logback...我个人觉得打日志的地方无非就是数据的输入输出的地方进行比较合适,像是控制层接受参数可以打一下接受参数的值,service层主要是处理数据,返回结果的,可以把返回结果打一下日志,dao层的话对于数据库的增删改查的sql语句包括输入的查询参数可以打一下日志。通过mybatis的学习也可以看到关于sql语句相关的日志信息。


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

单步调试主要可以追踪每一行代码的执行过程,获取参数到值的情况。


21.可否远程连接到线上直接调试?真实项目中,遇到问题的排查方案是什么?

百度下是有相关的博客介绍远程连接线上调试的,但是现在对web项目不是很明白,等之后接触web项目再来填坑


任务一的总结:

1.任务一的主要目的是数据库建表,以及使用java来读写数据库的操作,也就是仅涉及到dao层的一些代码实现,这里我个人觉得mybatis的方式是最简单的一种。因为在单表操作中,mybatis可以根据逆向工程直接生成pojo,mapper接口以及配置文件。

2. 几个工具的使用,maven , log4j, github,还有Linux服务器的安装环境配置环境变量等等。

3. 深度思考这里有一些问题现在的体会还不是很深刻,毕竟没有做过真的项目,这方便还是有待实践取验证。


明天的计划:

开始着手任务2



返回列表 返回列表
评论

    分享到