面试时间二十分钟,时间好短觉得凉了嘤嘤嘤
先常规自我介绍,然后从介绍项目,从项目深入开始问MySQL最后问了一些Java基础,没问太深,最后反问面试官。
目录
3select查询语句(查询user表中姓X的人),索引是否失效,like以通配符开头('%abc...')mysql索引失效会变成全表扫描操作
7finally关键字和try-catch-finally代码块的执行顺序
mysql内容:
1项目Mysql表中,表的设计,字段的设计
2char和varchar的区别
-
varchar与char的区别
-
char的特点
char表示定长字符串,长度是固定的;如果插入数据的长度小于char的固定长度时,则用空格填充;因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;对于char来说,最多能存放的字符个数为255,和编码无关
-
varchar的特点
varchar表示可变长字符串,长度是可变的;插入的数据是多长,就按照多长来存储;varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的空间,是时间换空间的做法;对于varchar来说,最多能存放的字符个数为65532
-
总之,结合性能角度(char更快)和节省磁盘空间角度(varchar更小),具体情况还需具体来设计数据库才是妥当的做法。
-
-
varchar(50)中50的涵义
最多存放50个字符,varchar(50)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样)。在早期 MySQL 版本中, 50 代表字节数,现在代表字符数。
-
int(20)中20的涵义 是指显示字符的长度。20表示最大显示宽度为20,但仍占4字节存储,存储范围不变;
不影响内部存储,只是影响带 zerofill 定义的 int 时,前面补多少个 0,易于报表展示
-
mysql为什么这么设计 对大多数应用没有意义,只是规定一些工具用来显示字符的个数;int(1)和int(20)存储和计算均一样;
-
mysql中int(10)和char(10)以及varchar(10)的区别 int(10)的10表示显示的数据的长度,不是存储数据的大小;chart(10)和varchar(10)的10表示存储数据的大小,即表示存储多少个字符。
int(10) 10位的数据长度 9999999999,占32个字节,int型4位 char(10) 10位固定字符串,不足补空格 最多10个字符 varchar(10) 10位可变字符串,不足补空格 最多10个字符
char(10)表示存储定长的10个字符,不足10个就用空格补齐,占用更多的存储空间
varchar(10)表示存储10个变长的字符,存储多少个就是多少个,空格也按一个字符存储,这一点是和char(10)的空格不同的,char(10)的空格表示占位不算一个字符
3select查询语句(查询user表中姓X的人),索引是否失效,like以通配符开头('%abc...')mysql索引失效会变成全表扫描操作
select * from user where name like 'X%';
会用到索引
如果是select * from user where name like '%X';
则不会用到索引,因为会变成全表扫描
java基础
4基本数据类型,整型,short能表示的范围
5short包装类的相等判断,equals 和 ==
1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较, 因此Integer(0)会自动拆箱为int类型再进行比较,如1,4行,显然返回true。 另外两个Integer对象进行“==”比较时,如果有一方的Integer对象是new获得的,返回false,因为比较的是两个对象的地址,如5,6。 3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true,如8,10。 4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,若类型不同返回false, 若装箱后类型相同,则比较值,如果值相同,则返回true,否则返回false。如7,9。
int a=257;
Integer b=257;
Integer c=257;
Integer d=new Integer(a);
Integer d1=new Integer(a);
Integer b2=57;
Integer c2=57;
System.out.println(a==b);//1true
System.out.println(b==c);//2 false
System.out.println(b2==c2);//3true
System.out.println(a==d);//4true
System.out.println(b==d);//5 false
System.out.println(d==d1);//6 false
System.out.println();
//System.out.println(a.equals(b)); 编译出错,基本型不能调用equals()
System.out.println(b.equals(257.0)); //7 false
System.out.println(b.equals(c)); //8 true
System.out.println(b.equals(a)); //9 true
System.out.println(b.equals(d)); //10 true
6final关键字用法
用于修饰类、属性和方法;
-
被final修饰的类不可以被继承
-
被final修饰的方法不可以被重写
-
被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的
7finally关键字和try-catch-finally代码块的执行顺序
try{
user.setName(“cs”);
return user.getName();
}finally{
user.setName(“css”);
}
public class HelloWorld {
public static class a{
private int aa=10;
public void setAa(int aa) {
this.aa = aa;
}
public int getAa() {
return aa;
}
}
public static a a = new a();
public static int test(){
try{
a.setAa(20);
return a.getAa();
}finally {
a.setAa(30);
}
}
public static void main(String[] args) {
System.out.println(test());
System.out.println(a.getAa());
}
}
/*执行结果:
20
30
*/
有return的情况下try catch finally的执行顺序结论:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。