发表于: 2018-04-20 23:53:59

1 558


今天完成的内容:深度思考

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

Maven是可以通过加入一段描述信息来管理项目的构建,报告和文档的项目管理工具。Ant是一种基于Java的构建工具。

我们先理解为什么这几个工具会产生。因为除了个人开发基本所有开发,测试,部署人员都是分开的,那么在开发人员,部署人员之间如何实现之间的项目文件,目录等要求都完全一样呢?则此时最开始的make,jam等build工具就产生,但是刚开始这些工具实用性很差,如make是使用shell语言,则有很大的限制。而Ant工具是使用Java类扩展,脚本配置文件是使用build.XML文件,但是存在脚本目录得自己写且命令中还要输入依赖关系,自己还得编译打包,编译目录得自己指定。而Maven既帮我们指定好目录,打包,而且通过中央库可以帮我们下载第三方工具包,只要在pom.xml引用即可. 


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

maven将项目生命周期分为九个:clean,validate,compile,test,package,verify,install,site,deploy 

其中clean是清除项目中已编译文件和本地仓库中已打包的文件 

install 将打包的代码存放到本地maven仓库用于供本地其它项目依赖使用 

package 是将本地编译好的文件打包为war 或者jar 

deploy 将打包在本地仓库中的项目发布到服务器 


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

设置maven.test.skip为true时就会跳过单元测试 或者mvn install -DskipTests 也可以在pom.xml文件中添加配置 

<build>

  <plugins>

    <plugin> 

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

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

     <configuration> 

     <skip>true</skip>

     </configuration>

    </plugin> 

  </plugins> 

</build>


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

log4j是辅助我们进行日志管理的API类库,既可以记录运行日志信息也可以显示调试信息。在脱离ide环境调试程序时如果用println输出来进行调试时,会遇到无法部分显示,修改删减这些调试过程麻烦,无法多元输出如输出到文件等,


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

Date型可以直接观看日期数据,而long型表示时间时便于存储和网上传输,效率更高。


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

使用自增ID会使要插入指定ID记录时操作麻烦,而且在与其他系统集成时有可能再导入数据时发生ID的主键冲突,特别在并发系统时。而且在新旧系统要进行集成时如果主键都不同是数据型会导致修改主键数据类型。 所以不使用自增ID情况在数据行很大情况下防止溢出,而且在并发系统下也不建议使用。


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

数据库的索引就是对数据库中的值进行排序的结构,现在绝大多数数据库都是使用平衡树作为索引的结构。这个索引相当于书的目录可以加快数据库的查询目录。 

对于多大数据量会导致性能的差别,我们可以由公式log记录次数/树的分叉数=查找次数,那么在低数量下这个索引树的量不够大,无索引下O(n),与O(logn)差距不大,所以建议在100以上才使用索引。举例最低分叉数2时O(log2 100)=10,而O(100)=100就有数量级的差距了网上建议300以上,我理解应该这个数量才可以保证之间有数量级的差别。 

对于应该建索引的字段,1,主键外键;2,经常与其他表进行连接的表的连接字段;3,经常用于搜索的字段;4,索引建在小字段。


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

普通索引允许被索引的数据包含重复的值,同名这些情况,而唯一索引则只能让被索引数据包含不相同的值 需要保证数据库的数据避免重复时使用唯一索引,因为如果有重复数据插入时会拒绝此数据插入。


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

需要,因为唯一索引在插入数据时都会检索下防止重复的索引数据产生,如果有重复则拒绝插入,所以在重复时时建立不了的。 


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

在创建数据时给CreateAt输入数值,在更新数据时就更新UpdateAt 因为需要实时更新则得开放。


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

存储Varchar,因为是可以保存可变字符串,如JAVA-后端工程师等职业 


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

Varchar后面括号中可以设定值如Varchar(2)则为2个字节,最多可以存放65532字节 Text用于存储可变长度的数据,最大为2^16-1个字符,不能设置其默认字节,即使设置也无意义。 LongText最大长度可以放4个G


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

由于大量数据要在页面上显示无法同时显示到一个页面上,则产生分页查询

分页查询有两种方法:物理分页与逻辑分页。

物理分页是使用mysql数据库的limit机制来完成分页,每次物理分页都会连接mysql。

逻辑分页是通过先查询出所有数据后记录在集合中,页码来计算出一页需要显示数据,则再记录下页数,然后进行遍历。这种方法是在集合中计算的分页显示则称为逻辑分页


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

因为*是查找表中的所有列,而我们一般只查找某几个字段,而不用需要所有字段查询,这样会影响效率。


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

贫血模型是Model中仅包含状态(可理解为数据,即对象成员变量),无行为(方法),状态行为分开,使用的可视化对象中只有setter和getter方法,所有数据支持都要在DB层中实现。充血模型则是Model中既包括状态也包括行为。 贫血模型有点是系统层次结构清楚,各层之间单向依赖。这样适合web开发,解决相对简单易于理解。 


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

IOC中文即控制反转,把设计好的对象交给容器控制而不是以前new个对象出来。如果使用new来创建实例的话,需要这个调用实例的人去自己创建实例对象,而不能有其他维护者和移植者去创建,则不利于我们维护和移植代码


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

接口(以及抽象类abstract)都是可以用于实现多态,如果都用实体类实现,那么如很多执行动作都得一一写入每个实体类中,无疑大大增加代码量和编写时间不符合我们对代码要求的简洁美,采用接口与抽象类可以实现继承,则把共同的执行动作使用最简洁的方法写在接口与抽象类中,然后继承即可,而抽象类与接口对比在于接口可以继承多个,抽象类只有继承唯一的一个父类,则采取接口则能够继承多个从而实现方法类的实现 


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

异常发生情况在1,用户输入了非法数据,2,打开的文件找不到,3,连接不上网络,或JVM内存溢出 

Try/catch代码称保护代码块,用于处理代码中可能发生的异常,所以使用的位置放在可能出错的地方以及需要追踪异常的地方。 正常情况下mysql对于空闲下的连接可能在8小时内自动关闭 


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

日志打印选择位置根据级别来定,从fatal,error,warning等各级别中选择位置,越紧急则选择越醒目和能够提醒我们的位置,至于打印内容包括当前时间(无日期,毫秒级精度),日志级别,线程名,简单的日志名称(不用全称)还有消息,消息又包括记录值,数字,ID还有它们的上下文,记录处理的数据以及它的含义 


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

单步调试是指程序开发中为了找到bug,一步一步跟踪程序的执行流程,根据变量变化来发现错误原因 


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

远程调试即程序运行在远程服务器上,我们在本地端的代码上设置断点(当然两边代码必须保持一致),则每当我们提出请求到服务器上时可以在本地知道远程服务端的程序内部状态 。排查方案:查看错误说明,看看是什么错误;查看错误的地方;检查常规易错的地方;同时分析语法问题。


明天计划:mybatis与spring同时部署,服务器项目完成

收获:深度思考思索,百度云配置完成。



返回列表 返回列表
评论

    分享到