发表于: 2018-03-22 22:06:54

1 573


今天完成的事情:


1,spring+mybatis annotation

2,关闭连接池

3,输出日志

4,深度思考一部分




spring+mybatis annotation

重新实现一下,与代理模式大同小异,就不贴代码了。




连接池关闭

使用的是DBCP数据源,发现关闭不关闭都一样,理论上是操作<destory-method>,但是发现没有什么差别。





设置日志,输出到指定位置






深度思考:

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

Maven是一个软件项目管理以及自动构建工具,是居于项目对象模型(POM)概念,能够利用一个中央信息片段管理一个项目的构建、报告和文档等步骤。

Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于java环境中的软件开发。默认情况下,他的buildfile名为build.xml

       Antjava技术开发项目提供跨平台构建任务,Maven本身描述项目的高级方面,它从Ant借用了绝大多数构建项目。

 

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

Maven clean 清除项目目录中的生成结果

Maven install 在本地Repository中安装jar

Maven package 根据项目生成jar

Maven deploy 发布项目

 

3.     怎么样能让Maven跳过JUnit?

使用Surefire插件的skip参数,添加maven.test.skip参数即可。

 

4.     为什么要用Log4j来替代System.out.println

System.out.println只能输出到控制台,而log4j之类的日志工具可以配置输出目标,输出等级,减少输出形式与程序的耦合。

 

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

Long类型方便计算

 

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

不存在连续性,数据重复了自增不会处理和提示,在面向对象时,不能保证完整性,分库的时候id就不唯一了。

 

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

 

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

 

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

 

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

 

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

       根据修真类型的案例,都是字符串,应该是存储varchar

 

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

 

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

 

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

 

 

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

贫血模型:是指领域对象里只有getset方法,或者包含少量的CRUD方法,所有的业务逻辑都不包含在内而是放在Business Logic层。 

优点是系统的层次结构清楚,各层之间单向依赖,Client->(Business Facade)->Business Logic->Data Access(ADO.NET)。当然Business Logic是依赖Domain Object的。似乎现在流行的架构就是这样,当然层次还可以细分。 

该模型的缺点是不够面向对象,领域对象只是作为保存状态或者传递状态使用,所以就说只有数据没有行为的对象不是真正的对象。在Business Logic里面处理所有的业务逻辑,在POEAA(企业应用架构模式)一书中被称为Transaction Script模式。 

充血模型:层次结构和上面的差不多,不过大多业务逻辑和持久化放在Domain Object里面,Business Logic只是简单封装部分业务逻辑以及控制事务、权限等,这样层次结构就变成Client->Business Facade)->Business Logic->Domain Object->Data Access 

它的优点是面向对象,Business Logic符合单一职责,不像在贫血模型里面 那样包含所有的业务逻辑太过沉重。 

缺点是如何划分业务逻辑,什么样的逻辑应该放在Domain Object中,什么样的业务逻辑应该放在Business Logic中,这是很含糊的。即使划分好了业务逻辑,由于分散在Business LogicDomain Object层中,不能更好的分模块开发。熟悉业务逻辑的开发人员需要渗透到Domain Logic中去,而在Domian Logic又包含了持久化,对于开发者来说这十分混乱。  其次,因为Business Logic要控制事务并且为上层提供一个统一的服务调用入口点,它就必须把在Domain Logic里实现的业务逻辑全部重新包装一遍,完全属于重复劳动。 

 

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

  使一个对象依赖其他对象时通过被动的方式传入进来,而不是手动创建,解耦,交由第三方创建。

 

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

  产生一个完全抽象的类,可以方便解耦。

 

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

 

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

  日志可以按照输出类别划分


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

 

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



明天计划的事情:把未解决问题解决。
遇到的问题:
收获:深度思考做了一部分,一些没具体实践过,等了实践一下再补充。


返回列表 返回列表
评论

    分享到