发表于: 2017-07-24 23:01:15
1 986
任务进展:
1:深度思考:
1)maven是什么,和Ant有什么区别?
maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期,(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具。Ant运行时需要一个XML文件(构建文件)。
Maven 和 Ant 针对构建问题的两个不同方面。Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。
2)clean,install,package,deploy分别代表什么含义?
maven clean:清空生成的项目文件,maven install:在本地Repository中安装jar,maven package:打包项目,maven deploy:部署项目。
3)怎么样能让Maven跳过JUnit?
执行mvn package -Dmaven.test.skip=false,或在IDE项目pom文件中配置。
4)为什么要用Log4j来替代System.out.println?
System.out是一个直接和控制台打交道的PrintStream对象,是终端显示的基础。但其不能满足高级用户的要求,Log4j是一个完善的日志系统,包含输出媒介、优先级、格式化、日志过滤、日志管理、参数配置等功能。
5)为什么DB的设计中要使用Long来替换掉Date类型?
使用Date类型不方便sql对日期相关的数据进行一些分组排序操作。
6)自增ID有什么坏处?什么样的场景下不使用自增ID?
mysql使用自增ID,如果删除数据,再创建数据时,ID不会覆盖已删的数据,而是继续自增,因此无法根据ID进行额外的排序或统计。在做分布式数据库时,要求数据同步时,自增ID就会出现严重的问题,因为无法用该ID来唯一标识记录,同时在数据库做移植时,也会出现问题。
7)什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?
索引是对DB表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。万级以上的数据量建索引会有明显的性能差别。如果某个字段是主键或外键,或经常需要搜索,或经常用于排序,可以对此字段建索引。
8)唯一索引和普通索引的区别是什么,什么时候需要建唯一索引?
唯一索引不允许mysql表中任何两行具有相同索引值,某字段在任何情况下都保持唯一时。
9)如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?
不需要,唯一索引字段索引值是唯一的。
10)CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?
在数据第一次创建的时候赋值,此后对数据进行修改时,只更新UpdateAt,CreateAt不变。外部接口只能读取,不可修改。
11)修真类型应该是直接存储Varchar,还是应该存储int?
应该存储int,这样可以对数据进行封装和扩展,用int指代。
12)varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?
varchar类型的长度表示字符数,可根据具体的业务字段来预计区间,节省mysql性能和空间。
varchar长度范围0-65535byte,在0-255byte时需要额外1byte记录该字段的实际长度,255byte以上需要2byte,允许有默认值;text长度范围0-65535byte,需要2byte记录该字段的实际长度,不允许有默认值;longtext长度范围0-4Gbyte,需要4byte记录该字段的实际长度,不允许有默认值。
13)怎么进行分页数据的查询,如何判断是否有下一页?
在sql语句后加上LIMIT [offset,] rows。
14)为什么不可以用Select * from table?
当数据量大的时候此语句执行效率极差。
15)什么是贫血模型,什么是充血模型?为什么我们会强制要求使用贫血模型?
领域模型是描述业务用例实现的对象模型,分为贫血模型和充血模型。
贫血模型是指领域对象里只有get和set方法(POJO),所有的业务逻辑都不包含在内而是放在Business Logic层,各层之间单向依赖,Client->(Business Facade)->Business Logic->Data Access(ADO.NET)。
充血模型大多业务逻辑和持久化放在Domain Object里面,Business Logic只是简单封装部分业务逻辑以及控制事务、权限等,这样层次结构就变成Client->(Business Facade)->Business Logic->Domain Object->Data Access。
贫血模型层次结构清楚,耦合度低。
16)Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?
IOC表示控制反转,是一种设计思想。在Java开发中,IOC意味着将设计好的对象交给容器控制,而不是传统的在对象内部控制。由于容器帮我们查找和注入依赖对象,对象只是被动地接受依赖对象,所以依赖对象的获取被反转了。
17)为什么要使用Interface,而不是直接使用一个实体类来完成任务?Interface和Impl这种方式的好处是什么?
为了实现业务逻辑与实体对象的依赖解耦,这样项目层次结构清晰,各个部分互相独立,通过容器统一管理。好处是便于扩展功能,实现细粒度的逻辑控制。
18)为什么要处理异常,Try/Catch应该在什么样的场景下使用,在真实的系统中,会出现网络中断,DB连接不上的错误吗?多久会发生一次?
如果不捕获异常进行处理,java虚拟机执行到异常时会中断,不能继续执行。
使用场景:
1、以业务逻辑功能为单位,在最上层加Try/Catch机制,增加程序的健壮性,防止因抛出异常过多,导致程序崩溃。
2、底层代码,在可能出错的地方加Try-Catch机制,用Catch侦测具体的异常,然后就具体的异常,采取相应的解决方案。
3、底层代码,在需异常追踪时加Try-Catch机制,在Catch块中抛出自定义异常,调试时可迅速定位到错误代码段。
真实系统中会发生这样的错误,频率与外部物理环境有关。
19)日志应该怎么打,在什么位置,需要打印出来什么样的关键参数?
使用log4j,通过设置Log Level,定义Appender和在配置文件中指定Layout对象来配置log4j。
日志打印应该从4个方面进行:模块运行日志、业务日志、模块性能日志、模块外部资源日志。关键参数为堆栈信息和运行场景。
20)为什么需要单步调试?Debug的时候IDE是怎么找到源码的?
单步调试可以跟踪观察变量变化,协助除错。
21)可否远程连接到线上直接调试?真实的项目中,遇到问题的排查方案是什么?
可以远程连接线上直接调试。服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。
2:看完了spring mvc基于注解配置,处理请求,渲染视图。
遇到问题:
暂无
明日计划:
写jsp,运行调试。
收获:
深度思考问题能回答的都回答了,有些小问,目前还不懂。
评论