一次意外面试的总结,可能很久之前就投了一个简历,今天突然给我打电话。
1. java的基础数据类型有哪些?
类型 | 字节 | 位 |
Byte | 1 | 8 |
short | 2 | 16 |
char | 2 | 16 |
boolean | 1 | |
double | 8 | 64 |
float | 4 | 32 |
long | 8 | 64 |
int | 4 | 32 |
byte+byte是int(Unicode编码时整形)
int+byte是int(上取整原则)
int+long是long(上取整原则)
2. Stringbuffer和Stringbuilder的使用,之前说过这些。
StringBuffer是线程安全的Stringbuilder是线程不安全的。但是是为什么呢?
主要是涉及到线程安全,异步操作的过程。有没有使用synchronized。
3. 接口继承接口是可以的,接口的实现是继承进行实现,
4.抽象类不允许实例化,需要继承后在进行实例化。
抽象类:用abstract修饰,抽象类不能创建实例对象。抽象方法必须在子类中实现,不能有抽象构造方法或者抽象静态方法。
接口:抽象类的一种特例,接口中的方法必须是抽象的。
两者的区别:
- 抽象类可以有构造方法,接口没有构造方法
- 抽象类可以有普通成员变量,接口没有普通成员变量。
- 抽象类可以有非抽象的普通方法,接口中的方法必须是抽象的。
- 抽象类中的抽象方法访问类型可以是public,protected,接口中抽闲方法必须是public类型的。
- 抽象类可以包含静态方法,接口中不能包含静态方法。
- 一个类可以实现多个接口,但是只能继承一个抽象类。
- 接口中基本数据类型的数据成员,都默认为static和final,抽象类则不是。
参考:https://www.cnblogs.com/talenter/p/9652976.html
5. 线程的使用,可以直接run吗?
直接运行run()方法,会把run()方法当成一个main线程下的普通方法去执行,并不会创建出一个新的线程去执行run()方法中写的任务。在main线程中调用run()方法后,要等run方法执行完毕后,才能继续执行接下来的方法,所以这不是一个真正的多线程工作。参考:https://www.cnblogs.com/funnyludan/p/13768656.html
6. 字符串的拼接:
+
StringBuilder
StringBuffer
concat
join
StringUtils.join
7. 数据库的数据存入过程
1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。
预先编译,效率高
2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
以一敌十,速度快
3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。
权限控制,安全好
8. 数据库的做left join和right join这个是左连接和有链接的区别,
使用中,左边为空,或者右边为空。