发表于: 2018-01-19 22:36:29

1 549


完成

1.深度思考

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

贫血模型是指使用的领域对象中只有setter和getter方法(POJO),所有的业务逻辑都不包含在领域对象中而是放在业务逻辑层。

充血模型将大多数业务逻辑和持久化放在领域对象中,业务逻辑(业务门面)只是完成对业务逻辑的封装、事务和权限等的处理。贫血模型的优点就是系统层次结构清楚,各层单向依赖。

贫血模型与充血模型之间的差别一定程度上造成了面向过程化编程和面向对象编程的两个分支。

那么差别到底是什么呢?说起来很简单,就是业务逻辑由谁去处理。贫血模型仅仅被当做数据结构来使用,而充血模型会持有业务逻辑方法。

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

IOC是控制反转,就是控制权由user交给了spring,new 的类实例不便于统一管理,spring 提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。

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

所謂的接口就是只給出了函數聲明,但是沒有函數體的類 ,函數體在實現類中給出。

接口提供了一个公用的方法提供方。 接口是用来规定子类的行为的。

举个例子吧 , 比如有个需求, 需要保存客户信息, 有些客户从网站来, 有些从手机客户端来, 有些从后台管理系统录入, 假设不同来源的客户有不同的处理业务流程, 这个时候我定义接口来提供一个保存客户的方法, 然后不同平台实现我这个保存客户的接口, 以后保存客户的话, 我只用知道这个接口就可以了, 具体调用哪个方法  去实例化具体你需要用的类,这也就是JAVA的多态的体现。 而如果你不用接口的话 , 首先我需要哪个方法  我就去实例化哪个类, 冗余很高,  其次扩展很差。 

接口就是一个规范, 其子类都会有他提供的方法。 统一管理。

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

出现异常不处理,程序会终止,程序终止了,系统不能正常运行。使用try/catch捕获异常的情景主要有:
1). 程序块中语句可能的异常不能引起其他逻辑中断,例如:缓存逻辑不能影响正常的逻辑运行,故缓存逻辑应该放在try/catch块中。

2). 必须对异常进行处理,否则会降低用户使用体验。

真实的系统,网络一旦中断,肯定连不上数据库,多久发生一次不了解。

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

日志编写的总体原则是简单清晰、便于排查问题。位置在控制台或输出文件。
打印的参数就是日期,运行情况,有无报错以及报错的详细进程等。
此外,在编写日志时还需要注意以下几点:
1) 在编写日志时需要注重日志细节,目标是为了方便以后维护,在遇到问题时,可以快速定位问题。
2) 不要在同一行中写意思重复的日志。
3) 日志需要足够的精简,不要随意换行。
4) 日志中字段之间可以用空格或其它符号分断,不能将日志一直连续而不将其分断,尽量使日志本身具备进行“识文断句”的能力。

5) 对于日志中的特殊信息(如会话号、IP地址等),用特殊的符号进行标识,其主要目的是为了便于搜索。

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

单步调试可以查看每步的运行结果,从而判断错误发生在哪个位置。

debug找源码就是F7查看方法内容等,然后就通过不断的查看就会跳到源码。

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

我们一般在本地写代码时,如果程序出现问题了,一般情况下,我们会在程序中打各种log,调试,找出问题,修改,测试,部署到服务器,再测试。但如果在真实项目中的呢,这样做虽然也可以,显然是不方便的。

真实项目中,我们可以通过远程连接的方式,进行远程调试:服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。排查方案暂时不清楚。


2.用测试类跑了一遍SpringTemplate,学了一些新知识点

1)final用法

final关键字的含义?
final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。
什么是final变量?
凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量。final变量经常和static关键字一起使用,作为常量。
什么是final方法?
final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。
什么是final类?
使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。

2)statement和preparestatement区别

Statement用于执行静态sql语句,在执行时,必须指定一个事先准备好的sql语句。

PrepareStatement是预编译的sql语句对象,sql语句被预编译并保存在对象中。

被封装的sql语句代表某一类操作,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。

使用PrepareStatement对象执行sql时,sql被数据库进行解析和编译,然后被放到命令缓冲区,每当执行同一个PrepareStatement对象时,它就会被解析一次,但不会被再次编译。在缓冲区可以发现预编译的命令,并且可以重用。

PrepareStatement可以减少编译次数提高数据库性能。

3)ToString用法

如果你有个类
class Student
{
int age;
String name;
}
(假设属性为对应的首字母大写)
如果不重写ToString()方法
那么要输出姓名和年龄 只能: stu.Name+stu.Age

如果重写ToString()方法
ToString()
{
return this.name+this.Age;
}
则直接就可以调用方法来显示了。

其次,可以将属性设置为仅Set,那么外部就无法通过属性获取相应的内容,但是此时,ToString() 方法任然有效。
toString应该是合在一起的,toString是String类的一个方法,你必须要从写该方法才能直接调用,因为不从写的方法的话会继承父类Object的toString方法,返回的是一个哈希码。

public String toString 这个就是重写方法,返回的是一个String类的值,所以public后跟String。


问题

目前为止,从0到1,对知识只是浅尝辄止,没有深究。

对知识点背后的业务逻辑没有直观的认识。


收获

解决各种细节问题。


计划

准备提交任务1

小课堂准备




                                              


返回列表 返回列表
评论

    分享到