面试题目总结三
一:背景
最近在南京同学那,待了两周左右,为了找份养活自己的工作,不停地刷面试题,投简历,去公司面试,经历了前前后后大概有9-10次面试,一般都是先笔试,再面试,最后公司主管面试,有项目外包公司也有人力外包的公司,遇见了很多人和事,内心多多少少有各种感受,写这篇博客的主要目的总结一下遇到的面试题,包括笔试和技术面试官提问的题目,有很多题目是面试官重复几次面试到的,也有一些遇到自己不会的,或者回答的不是全面的,这边总结记录一下,便于以后自己在空余的时间,针对自己不懂的知识点或者掌握不牢的知识点加强学习,同时也为了与自己相同水平的同学共勉,(内容很多都是java基础的,或者其他简单的知识,也有一些自己平时不太关注的知识点)。
二:面试题
java基础:
(1) 抽象类和接口的区别?
a.类是单继承,接口是多实现
b.抽象类中有构造方法,而接口中没有构造方法
c.抽象类中既可以有抽象方法,也可以有非抽象方法;而接口中只有抽象方法
d.抽象类中有成员变量,接口中只有常量
(2)静态变量和实例变量的区别
静态变量:static关键字修饰的变量,也称为类变量,属于类,不属于任何对象,静态变量在内存中有且仅有一个拷贝;
实例变量:依存于某个实例,需要先创建对象,然后通过对象才能访问到它,静态变量可以让多个对象共享内存。
(3)值传递和引用传递
值传递:在方法调用时,实参传递给形参,相当于将实参的值复制一份到调用的函数中,若在函数中对形参的值进行修改,不会影响实参的值。
引用传递:引用传递是将对象的地址传递过去,方法执行过程中,形参和实参的内容相同,指向同一块堆内存的地址,若改变堆内存的源数据,会影响到原对象。
例子:
public class test4 {
public static void main(String[] args) {
String str="hello";
char[] ch={'a','b'};
System.out.println(str);
System.out.println(ch);
change(str,ch);
System.out.println("-----------");
System.out.println(str);
System.out.println(ch);
}
public static void change(String str1,char[] ch1){
str1="hi";
ch1[0]='c';
}
}
结果:
内存分配:
对象初始化内存:
执行change()方法:
补充:上面的str值是存在字符串常量池中,如果常量池里没有hello,会在常量池中创建一个字符串hi,str1的引用指向hi,随着change()栈帧的调用释放,str1->hi失效
(4)ArrayList和LinkedList的区别,及Vector
a. 底层数据结构: ArrayList和Vector是基于数组实现的,LinkedList基于循环双向链表实现的。
b. 插入删除元素的区别:ArrayList在指定i位置插入元素时(add(int index,E element)),集合中第i和第i个之后的元素都要向后移动一位操作,时间复杂度为O(n-i)
LinkedList基于链表实现的,插入,删除元素时时间复杂度不受元素位置的影响,近视O(1)
c.线程安全:ArrayList和LinkedList是线程不安全的,Vector是线程安全的。
(5) 字符流转字节流
字符流输入流转字节输入流通过InputStreamReader实现,该类的构造器函数可以传入InputStream对象
字节输出流转字符输出流通过OutputStreamWriter实现,改类的构造函数可以传入OutputStream对象
(6)String、StringBuffer、StringBuilder的区别
a.可变不可变
String:是final修饰的,不可变的,若修改从新生成新的字符串对象
StringBuffer和StringBuilder:是可变的,每次操作都会对StringBuffer对象本身进行修改,不生成新的对象
b.线程是否安全
String:线程安全的
StringBuffer:线程安全的,相对于StringBuilder在调用方法上加(synchronized同步锁),执行效率慢
StringBuilder:线程不安全的,如果程序不是多线程的,那么使用StringBuilder的效率高于StringBuffer
数据库 mysql:
(1) union和union all的区别
union去掉重复的数据
union all查询所有数据,不去掉重复数据
(2)where 、group by、having的顺序
where group by having
where条件过滤原始数据
然后用group by having对数据进行分组加条件,聚合函数可以加在having后面,不可以加在where中
框架方面:
(1)springMVC的请求过程
(2)
ps:在完善中。。。。。