● MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?
(1)varchar与char的区别
char是一种固定长度的类型,varchar则是一种可变长度的类型
(2)varchar(50)中50的涵义
最多存放50个字符,varchar(50)和(100)存储hello字符串所占用的空间一样,但后者在排序时会消耗更多内存。
(3)mysql为什么这么设计对大多数应用没有意义,只是规定一些工具用来显示字符的个数;int(1)和int(20)存储和计算均一样;
● ArrayList扩容机制?
发生扩容的条件:
ArrayList其实底层就是一个数组的数据结构,根据传入的最小需要容量minCapacity属性来和数组的容量长度对比,若minCapactity大于或等于数组容量,则需要进行扩容。(如果实际存储数组是空数组,则最小需要容量就是默认容量)
实现扩容:
jdk7中采用>>位运算,右移动一位。容量相当于扩大了1.5倍;
举例说明:添加20个元素到ArrayList中
当第一次插入元素时才分配10(默认)个对象空间。之后扩容会按照1.5倍增长。
也就是当添加第11个数据的时候,Arraylist继续扩容变为10*1.5=15;但是此时扩容的是数组的大小,扩容完之后,ArrayList会调用一个copy方法对原有的数组进行复制,会删除原有的数组。当添加第16个数据时,继续扩容变为15 * 1.5 =22个,同样的道理会把原有的数组进行复制再删除,直到20个元素全部添加完。
Maven的生命周期?
maven有三套生命周期,分别为:
1、clean 周期:主要用于清理上一次构建产生的文件,可以理解为删除target目录下的文件
2、默认周期
主要阶段包含:
process-resources 默认处理src/test/resources/下的文件,将其输出到测试的classpath目录中,
compile 编译src/main/java下的java文件,产生对应的class
process-test-resources 默认处理src/test/resources/下的文件,将其输出到测试的classpath目录中,
test-compile 编译src/test/java下的java文件,产生对应的class
test 运行测试用例,
package 打包构件,即生成对应的jar, war等,
install将构件部署到本地仓库,或者说部署到maven所依赖的repository
deploy 部署构件到远程仓库
3、site周期
主要阶段包含
site 产生项目的站点文档
site-deploy 将项目的站点文档部署到服务器