面试题目总结三

一:背景

       最近在南京同学那,待了两周左右,为了找份养活自己的工作,不停地刷面试题,投简历,去公司面试,经历了前前后后大概有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:在完善中。。。。。

posted @ 2019-11-26 21:05  shuaiflying  阅读(357)  评论(0编辑  收藏  举报