发表于: 2017-06-11 22:06:41

1 1065


今天完成的事情:任务一总结

1.maven是什么,和Ant有什么区别?

构建工具。 用来构建项目,只需要简单的执行命令就可以。Ant是比较好的构建工具,但是脚本目录要由自己写,命令中存在依赖关系,编译,打包。 编译目录还要自己指定,maven除了指定好目录,帮你打包,同时maven有一个中央库,帮你下载需要的工具包,并且只需要在pom.xml引用即可,打包时自带进去,而不用平时跟着项目跑。ant通常脚本名为build.xml,maven为pom.xml 。


2.clean,install,package,deploy分别代表什么含义?

clean:清除上一次Maven执行的结果 install:将项目输出构件部署到本地仓库 package:生成target目录,编译、测试代码,生成测试报告,生成jar/war文件

deploy:在整合或者发布环境下执行,将最终版本的包拷贝到远程的repository,使得其他的开发者或者工程可以共享。


3.怎么样能让Maven跳过JUnit?

当Surefire插件到达test目标的时候,如果 maven.test.skip设置为true,它就会跳过单元测试。另一种配置Maven跳过单元测试的方法是给你项目的pom.xml添加这个配置。你需要为你的build添加 plugin元素。

<project>

  [...]

  <build>

    <plugins>

      <plugin>

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

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

        <configuration>

          <skip>true</skip>

        </configuration>

      </plugin>

    </plugins>

  </build>

  [...]

</project>


4.为什么要用Log4j来替代System.out.println?

没用上,没有感受,Log4j的功能更加强大


5.为什么DB的设计中要使用Long来替换掉Date类型?

说实话我个人反而觉得Datetime这种方便一点,


6.自增ID有什么坏处?什么样的场景下不使用自增ID?

自增ID的话使每一条记录都缺少了唯一标识。频繁增删数据以及数据重复的情况下不推荐使用


7.什么是DB的索引,多大的数据量下建索引会有性能的差别,什么样的情况下该对字段建索引?

索引的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE)或排序条件(ORDERBY)中的数据列创建索引。


8.唯一索引和普通索引的区别是什么,什么时候需要建唯一索引。

普通索引:最基本的索引,没有任何限制

唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。


9.如果对学员QQ号做了一个唯一索引,在插入数据的时候,是否需要先判断这个QQ号已经存在了?

需要,插入重复数据会直接报错。


10.CreateAt和UpdateAt的意义分别是创建时间和修改时间,这两个时间应该在什么情况下赋值?是否应该开放给外部调用的接口?

分别在数据创建时和数据修改时赋值,可以考虑开放。


11.修真类型应该是直接存储Varchar,还是应该存储int?

Varchar


12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?

经常变化的字段用varchar,确定固定长度的用char,尽量用varchar,超过255字符的只能用varchar,或者text能用varchar的地方不用text(效率上: char>varchar>text)text不能有默认值,存储或检索过程中,不存在大小写转换。longtext也是变长字符存储,只保存字符数据。


13.怎么进行分页数据的查询,如何判断是否有下一页?

public class Page<T> {
private int pageno;
   private int pagesize;
   private List<T> dataList;
   private int totalsize;
   public Page(String pageno) {
this.pageno = (pageno == null ? 1 : Integer.parseInt(pageno));
       this.pagesize = Const.PAGE_SIZE;
       this.dataList = new ArrayList<T>();
   }
public int getPageno(){
return pageno;
   }
public int getPagesize(){
return pagesize;
   }
public List<T> getDataList(){
return dataList;
   }
public void setTotalsize(int totalsize){
this.totalsize = totalsize;
   }
public int getTotalsize(){
return totalsize;
   }
public int getPagecount(){
return totalsize%pagesize == 0 ? totalsize/pagesize : totalsize/pagesize + 1;
   }
public String getSql(String sql){
return "select t1.* from (select t.*,rownum as linenum from ("+sql+") t where rownum<=" + pageno*pagesize + ") t1 where t1.linenum>" + (pageno-1)*pagesize;
   }
}  


14.为什么不可以用Select * from table?

select *会有一些额外的IO开销,万一数据表字段有改名、删除,程序就崩溃了。


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

贫血模型:是指领域对象里只有get和set方法,或者包含少量的CRUD方法,所有的业务逻辑都不包含在内而是放在Business Logic层。层次结构:Service(业务逻辑,事务封装) --> DAO ---> domain object 

充血模型:层次结构和上面的差不多,不过大多业务逻辑和持久化放在Domain Object里面,Business Logic只是简单封装部分业务逻辑以及控制事务、权限等。层次结构:Service(事务封装) ---> domain object <---> DAO

贫血模型系统的层次结构清楚,各层之间单向依赖,易于实现和维护,设计简单易行,底层模型非常稳定 。


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

IOC:Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。


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

      大型项目开发中,可能需要从继承链的中间插入一个类,让它的子类具备某些功能而不影响它们的父类。例如 A -> B -> C -> D -> E,A 是祖先类,如果需要为C、D、E类添加某些通用的功能,最简单的方法是让C类再继承另外一个类。但是问题来了,Java 是一种单继承的语言,不能再让C继承另外一个父类了,只到移动到继承链的最顶端,让A再继承一个父类。这样一来,对C、D、E类的修改,影响到了整个继承链,不具备可插入性的设计。

接口是可插入性的保证。在一个继承链中的任何一个类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何父类。此类将不得不实现这个接口所规定的方法,而子类可以从此类自动继承这些方法,这时候,这些子类具有了可插入性。接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,生命周期越长,接口使得软件系统的灵活性和可扩展性,可插入性方面得到保证。


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

以业务逻辑功能为单位,在最上层加Try-Catch机制。增加程序的健壮性,防止因抛出异常过多,导致程序崩溃。底层代码,在可能出错的地方加Try-Catch机制,用Catch侦测具体的异常,然后就具体的异常,采取相应的解决方案。

会出现,服务器宕机的时候,这个属于突发情况。


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


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


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

明天计划的事情;进入任务二

遇到的问题:无

收获:对整个任务一梳理了一遍。



返回列表 返回列表
评论

    分享到