发表于: 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
Ant为java技术开发项目提供跨平台构建任务,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.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
11.修真类型应该是直接存储Varchar,还是应该存储int?
根据修真类型的案例,都是字符串,应该是存储varchar。
12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
13.怎么进行分页数据的查询,如何判断是否有下一页?
14.为什么不可以用Select * from table?
15.什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?
贫血模型:是指领域对象里只有get和set方法,或者包含少量的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 Logic和Domain Object层中,不能更好的分模块开发。熟悉业务逻辑的开发人员需要渗透到Domain Logic中去,而在Domian Logic又包含了持久化,对于开发者来说这十分混乱。 其次,因为Business Logic要控制事务并且为上层提供一个统一的服务调用入口点,它就必须把在Domain Logic里实现的业务逻辑全部重新包装一遍,完全属于重复劳动。
16.Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
使一个对象依赖其他对象时通过被动的方式传入进来,而不是手动创建,解耦,交由第三方创建。
17.为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
产生一个完全抽象的类,可以方便解耦。
18.为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?
19.日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?
日志可以按照输出类别划分
20.为什么需要单步调试?Debug的时候IDE是怎么找到源码的?
21.可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?
明天计划的事情:把未解决问题解决。
遇到的问题:
收获:深度思考做了一部分,一些没具体实践过,等了实践一下再补充。
评论