发表于: 2017-09-03 22:29:08

6 968


一、    今天完成的事情

任务小结、深度思考(部分)

1)        任务小结

今天是做任务的第七天,就任务步骤来说,已经全部完成了,这里我做一下任务小结。

第一天)    步骤1-10

因为之前学过Java基础,这里对于我来说难度很低,所以一口气完成到10,不得不说这里最大的收获是步骤5中,要求的create_atupdate_at字段以及设置为整数类型的要求!!!

第二天)    步骤11-16

这一块完成深度思考中mysql的部分,里面的问题很经典,非常值得反复琢磨,有些问题即便我查阅到了答案自我感觉仍难以完全领会,可能是缺乏开发经验;此外,这里开始接触强大的项目管理工具——maven,确实是很方便,尽管目前我只会用来引入依赖

第三天)    步骤17-19

到这里,第一个难关出现了。使用springmybatis两种框架实现jdbc的基本操作。这里总算有点明白了之前Java基础中学的反射,xml文件的作用。这里学会了有:spring中通过ClassPathXmlApplicationContext()类的构造方法读取spring配置文件来获取一个容器,再由容器获取指定的bean从而得到bean对应的类实例;再如借助JdbcTemplate类操作sql语句;还有mybatis中将sql语句放入mapper文件操作数据库的方式,借助SqlSession对象实例直接获取dao(接口)的实例。到此算是结束,但又只是开始。

尽管已经知道如何去操作,但仍然对着两个框架有很大的疑惑。结合师兄的意见,总结原因如下:

  代码量不足。这是师兄告诉我的,我也很赞同这点,以前学C语言遇到看不懂的题解就拼命多敲几次,时间久了就懂了。

  不懂其实现原理。给我一种就只是疯狂调用API的感觉,很不舒服,这需要我系统去学习框架。

  Java基础知识不牢固。SpringMybatis的实现肯定用到了反射机制,xml基础知识,此外spring还用到动态代理…(暂且知道这么多,泪崩,好多都忘了)

第四天)    步骤20-21

这里学到了单元测试Junit和日志。Junit方面暂时没体会到它的好处。说下日志,尝试使用了log4jlog4j2,在师兄的建议下了解了slf4jlogback等。

这里有个疑问:是不是每次使用log4j将当前的报错写到日志中去,都要在当前代码中获取logger对象,并调用相应的方法,如logger.info(),logger.error() ?

第五天)    步骤22-23

这里又是一个难关,不过却也有趣。一上来我就是懵逼的,还好后来接触师兄的日报还有其它师兄的,才弄懂。这里学会了linux系统的基本操作,在linux系统上安装数据库serverclientjdkmaven,和做maven项目的单元测试

第六天)    步骤24-28

这里主要是在linux上跑项目,熟悉linux操作。此外我还安装了tomcat

2)        深度思考

1) Q1maven是什么,和Ant有什么区别?

首先明确一下概念:

Maven是软件项目管理工具和理解工具。

Ant是软件构建工具。

好吧,从概念上貌似看不出什么,那看看功能方面。

Maven具备Ant的功能,Ant的脚本可以直接运行在Maven中,此外还有Maven还有以下几个主要的功能:

使用Project Object Model来对软件项目管理;

内置更多隐式规则;

内置依赖管理和Repository来实现依赖的管理和同一存储;

内置了软件构建的生命周期(cleandefaultsite)

2) Q2clean,install,package,deploy分别代表什么含义?

Clean:清理,可以上一次编译产生的target文件移除,防止上一次构建的输出影响本次构建。

Install:安装,将项目打包成jar安置到本地仓库。

Package:打包,将项目打包成jar,一般在target目录下。

Deploy:部署,将打包的项目上传到远程仓库与他人共享

3) Q3、怎么样能让Maven跳过JUnit?

即:打包的时候跳过junit

方法一:命令行下使用命令:mvn install -Dmaven.test.skip=true

方法二:修改pom.xml,在build选项加上plugins的这段如下:

<build>

  <plugins>

      <plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-surefire-plugin</artifactId>

        <configuration>

          <skip>true</skip>

        </configuration>

      </plugin>

    </plugins>

</build>

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

      打日志的意义:

开发中记录日志可以作为日后处理问题的一个追溯,方便根据日志来统计查询解决问题。

      Log4j的特点:

能够自由控制日志信息输出位置、输出格式、输出内容

      对比System.out.printlnlog4j

日志信息可分级;

可生成文件,特别是多数情况下项目运行时是看不到控制台的输出内容的。

不需要控制台输出时,Log4j可通过配置文件快速更改,而System.out.println需要一行一行注释代码

       

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

  接口的作用总结是:降低耦合度,提高扩展性;

场景一:降低耦合度

当团队进行项目开发的时候,将项目进行分三层,表示层、业务层、数据访问层,由ABC三人分别负责。

A开始写代码,需要用到业务层中的方法,但B还在等C完成数据访问层的代码实现。

这时候,问题来了,难道开发流程必须依次等待吗?

所以接口出现了,直接定义一套service层和dao层的规范,AB就可以进行开发了,接口降低了层与层之间的密切程度,提高开发效率。

场景二:提高扩展性

Java中有一个序列化接口Serializable,作为一个标志使类可以序列化到磁盘。(没有实现此接口的类无法序列化)

现有如下代码:

public class Person { … }

Person p1 = new Person();

Person p2 = new Person();

我们希望将p1,p2两个人的信息存储到磁盘。

方式一:将p1p2的信息逐一存储。显然,效率太低

方式二:自己实现序列化算法。难度大,且不通用,难道每个需要序列化的类都来实现一次序列化算法。

方式三:实现Serializable接口。

这里,接口体现了它拓展功能的作用

  面向接口编程,方便更换实现。(目前只体会到这点)

隐藏实现细节,减少对外接口和类。

封装,高内聚

3)        练习Mybatisc3p0连接池

分别写了两个小项目作为练习(以下不展示代码)

                 

二、    明天计划的事情

1)        继续做深度思考

2)        学习linux系统

三、    遇到的问题

1)        任务小结时想到的,是不是每次使用log4j将当前的报错写到日志中去,都要在当前代码中获取logger对象,并调用相应的方法,如logger.info(),logger.error() ? 我想表达的是能不能让它自动记录到日志?

2)        今天师兄教我的那个解答问题的模式套用不起来,有什么示例可以学习吗?

四、    收获

1)        和师兄的交流,学到以一种特定的思路解答深度思考的问题

2)        回顾这七天学到的内容,温故知新

3)        做深度思考,感觉每个问题都很经典,值得研究



返回列表 返回列表
评论

    分享到