发表于: 2017-07-16 21:09:44
2 1228
一.今天完成的事情
1.任务一剩余的深度思考
1. Maven是什么,和ant的主要区别是什么?
Maven是一个项目管理工具,它可以帮助我们构建工程,管理jar包,编译代码,自动运行单元测试,打包,生成文档,甚至是部署项目等.
maven因为预设了一些功能,所以maven搭建工程很快,直接就可以上手,但是ant起步比较麻烦,需要在build.xml中配置很多东西.但因为maven预设了一些功能,所以要修改默认配置比较麻烦,而ant则全部在build.xml中,创建时工作量大,但是修改时比较方便.
Maven对于第三方库文件支持较好,能够自动下载存储,对于库文件的管理和团队开发帮助很大.这使得工程的移植非常方便,不用进行特殊配置,也不用再把JAR包也一块拷过去,只要运行maven就可以自动配置好开发环境,这一点ant就没有maven擅长,还是需要手动配置
总得感觉,两者都是项目构建管理工具,ant更为灵活,配置工作也更为繁琐, maven相对更加标准化,所以在企业级的团队开发中,maven更有优势.
2. Clean,install,package,deploy分别代表什么含义?
代表maven中不同的生命周期..maven有完善的生命周期,运行maven的每个步骤都是由生命周期定义的.maven有三套相互独立的生命周期,独立的含义是你可以调用其中的一个生命周期,也可以调用两个或者三个生命周期来做一些工作.三个生命周期是Clean,默认,Site;每个生命周期又由一组阶段(Phase)组成,然后每个阶段会代用不同的插件来完成工作.我们平时输入的命令会对应于一个特定的阶段,clean就对应于Clean生命周期中的clean阶段,运行mvn clean时,maven就会执行Clean生命周期,但只会执行到clean和它之前的阶段,clean之后的阶段不会执行.
Install,package,deploy则是默认生命周期中的不同阶段,默认生命周期是maven中最重要的阶段,其中package阶段表示,将编译好的代码打包成可发布的格式,如jar包,war包等.install阶段则表示将打包好的包发布到本地仓库,供本地的其他项目依赖,所以install阶段在整个生命周期中的位置要比package靠后,执行install时maven会默认执行package,但执行package时并不会执行install.deploy则是将最终的包复制到远程仓库,供其他开发人员使用,所以deploy阶段比install阶段更为靠后,执行deploy阶段一定会执行package和install阶段.
3. 怎样能让maven跳过junit测试
因为test阶段和package,install阶段同属于一个生命周期,而且test阶段相对于package阶段更靠前,所以默认只要执行package都会执行测试.但是可以通过在pom.xml中配置插件或者在执行mvn命令是增加选项的方式跳过测试.
Pom.xml中配置
mvn 命令时的配置,通过这两个命令跳过测试
mvn clean package -DskipTests=true
mvn clean package -Dmaven.test.skip=true
4. 为什么要用log4j来代替System.out.println?
Log4j是一个灵活,强大的日志管理工具,使用System.out.print只能将信息输出至控制台,非常不灵活,而且如果输出的日志包含的信息比较多,那么程序中会出现很多特别长的System.out.println语句,非常繁琐,而且代码可读性差.除此之外,将日志输出到文件中会非常复杂,还有可能污染业务代码.而log4j能够将不同级别的日志信息以不同的方式输出到不同的目的地,这些目的地可以是控制台,也可以是文件,甚至可以输出到网络上.同时使用简单,只需要配置一个log4j.properites和一个简单的类就可以使用,如果以后需要更改日志的格式和输出地点,只需要更改配置文件就可以,不用更改源代码.
15 什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?
贫血模型就是仅仅被当作数据结构使用,而充血模型还会持有业务逻辑方法.贫血模型的好处是每个贫血对象职责单一,所以模块解耦程度很高,有利于错误的隔离和代码的复用,而更为重要的是,这种模型非常适合于大规模软件团队的协作.因为每个编程个体只需要负责单一职责的小对象模块编写,不会互相影响.
16 Spring中的IoC是什么意思,为什么用IOC而不是new来创建实例?
IOC是控制反转的意思.按照传统的的方式,什么时候创建的对象由我们自己控制,而在控制反转中,实例的创建是由框架来控制的,对于创建实例的控制权发生了反转.用传统的new方式来创建对象,如果项目规模比较大,一个实例会依赖很多实例,我们需要做大量的重复的new的操作,又麻烦而且还不理于代码的复用性.而IOC可以帮我们创建好我们需要的对象,并且管理对象和对象之间的依赖关系,我们只要专心于业务逻辑就好
17 为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
接口定义了规则和基本功能,实体类则使该功能的具体实现,一个功能可能有多种实现方式,比如说数据库的增删改查,不同的框架有不同的实现形式,但是功能实际上是一致的.所以使用Interface和Impl的方式能够将功能和具体实现分离出来,增强代码的复用性,而且也更为灵活,接口的使用者不必关心公功能是如何实现的,只需要知道如何使用接口就可以.
18为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发 生一次?
程序运行过程中总会遇到各种各样的问题,并不是遇到每个问题都直接结束程序,对于有些问题,程序内部可以处理,不必停止程序,所以在遇到这些问题时,我们再程序内部定义好处理异常的方式,当异常发生时,程序会自动进行处理.try…catch应该在问题不是很严重,该问题的发生不会影响到后续功能的情况下使用,如果遇到一个异常本级处理不了时,应该向上抛出,不能隐藏问题.在真实系统中,会出现网络中断,DB链接不上的错误,
19 日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?
目前对日志的理解较浅,个人觉得首先在try..catch的catch中必须要打日志,因为出现这种情况一定是遇到某些问题,要记录下来方便维护,还有就是需要记录某些操作时要打日志,比如记录用户登陆的操作,时间这些关键信息要打日志.参数则至少要包括时间,地点,需要记录的信息,如用户登陆的时间,异常的种类等,
20为什么需要单步调试?Debug的时候IDE是怎么找到源码的?
当程序中出现错误时,尤其是逻辑错误,一时找不到到底是哪里出现了问题,可以使用单步调试,一步一步看清楚程序是如何执行的,看是否和我们预期的执行顺序,执行方式相同,有助于定位问题,debug之前先打上断点,然后采用以debug方式运行程序,IDE就能使程序暂停在有断点的程序中
21可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?
对这个基本没有概念,参考网上的答案应该是可以通过IDE程序链接到服务器上直接调试.遇到问题时首先应该保证系统的正常运行,然后是添加监控,查找定位问题,还可以使用JDK性能测试工具和分析源码来解决.
其余的深度思考已经在前面日报中提交
2.用maven创建一个web工程
用maven创建web工程有两种方法,网上比较多的是第一种,new->maven project
创建方式里选择webapp
然后点击finish,这种方式创建出来的web工程会缺少好几个文件夹(常用src文件下的main/java,test/java,test/resource),所以需要手动创建这些文件夹,然后添加到classpath中,并且设置四个文件夹的输出floder,同时将工程转换为Dynamic Web Project
第二种创建方式是先创建出一个默认的maven工程结构
创建后打包方式选择为war包,这种创建方式创建出来的web工程中默认会有那四个source floder,所以不需要手动设置,但是这种方式创建的工程,默认不会创建WEB-INF文件夹,也没有web.xml文件,所以这两个需要手动创建,如图
创建好文件夹和文件之后,错误提示消失,web工程就创建好了.两种方式,感觉第二种方式更简单快捷一些,因为只需要额外创建一个文件夹和一个文件就好,而且不需要额外的配置.
3.初步了解rest风格的结构
Rest是一种风格,不是具体实现,只要是满足Rest风格要求的结构都可以称为是Rest结构.它有几个特点,资源,统一接口,URI,无状态.Rest风格的接口是面向资源的,资源就是网络上的一个实体,可以是信息,文本,音乐,视屏或者一种服务,资源有不同的表现形式,一般用一个URI对应一个资源,最典型的URI就是URL.而且,所有的资源都是无状态的,所谓无状态,就是每个资源都可以通过URI进行定位,这个定位和其他资源无关,也不会因为其他资源的变化而改变.Rest风格的接口对数据的操作是统一的,数据的增删改查风别对应于HTTP的GET,POST,PUT,DELETE方法,这样,仅通过HTTP方法,就可以完成对数据的所有操作.
4.学习GitHub客户端上传项目,将昨天未上传的代码都上传至GitHub网站上
二.明天计划完成的事情
1.用springMVC先实现一个Hello,world的demo,并且初步了解其背后的框架和实现逻辑
2.进一步了解其基础知识,完成一个更为复杂的demo
3.如果有时间,则再了解更多的用法,编写rest接口
三,遇到的问题
暂无
四.收获
以上
评论