JAVA需要掌握的面试

1:面向对象三大特征

封装:
类:封装的是对象的属性和行为
方法:封装的是具体的业务逻辑功能实现
访问控制修饰符:封装的是具体的访问权限,以保护数据的安全
继承:
作用:代码复用
超类:所有派生类所共有的属性和行为
接口:部分派生类所共有的属性和行为
派生类:派生类所特有的属性和行为
单一继承、多接口实现,具有传递性
多态:
行为多态:所有抽象方法都是多态的(通过方法的重写实现的)
对象多态:所有对象都是多态的(通过向上造型来实现)
向上造型、强制类型转换、instanceof判断

2:内存管理:由JVM来管理的

堆:

存储new出来的对象(包括实例变量)
垃圾:没有任何引用所指向的对象
垃圾回收器(GC)不定时到内存中清扫垃圾,回收过程是透明的(看不到的),
不一定一发现垃圾就立刻回收,通过调用System.gc()可以建议JVM尽快调度GC回收
实例变量的生命周期:
​ 创建(new)对象时存储在堆中,对象被回收时一并被回收
内存泄漏:不再使用的对象没有被及时的回收,严重的泄漏会导致系统的崩溃
建议:不再使用的对象应及时将引用设置为null
栈:

存储正在调用的方法中的局部变量(包括方法的参数)

调用方法时,会在栈中为该方法分配一块对应的栈帧,栈帧中存储局部变量(包括方法的参数),方法调用结束时,栈帧被自动清除,局部变量一并被清除

局部变量的生命周期:
​ 调用方法时存储在栈中,方法调用结束时与栈帧一并被清除

方法区:

存储.class字节码文件(包括静态变量、所有方法)
方法只有一份,通过this来区分具体的访问对象

3:关于String的面试题

/*
  String s = new String("hello");
  问:如上语句创建了几个对象?
  答:2个
    第一个:字面量"hello"
       ---java会创建一个String对象表示字面量"hello",并将其存入常量池
    第二个:new String()
       ---new String()时会再创建一个字符串对象,并引用hello字符串的内容
 */
String s = new String("hello");
String s1 = "hello";
System.out.println("s:"+s);   //hello
System.out.println("s1:"+s1); //hello
System.out.println(s==s1); //false,==比较的是地址是否相同

//字符串实际开发中比较相等一般都是比较字符串的内容
//因此我们需要使用equals()方法来比较两个字符串的内容
System.out.println(s.equals(s1)); //equals()比较的是内容是否相同

4:互补对称:

结论:一个数的补码=这个数取反+1(取反+1) 公式: -n=~n+1
-3的补码=-3取反+1

面试题:

System.out.println(~100+1);  前面代码的运算结果是(C):注:求100的补码
A.-98  B:-99  C:-100  D:-101
System.out.println(~-100+1); 前面代码的运算结果是(C): 注:求-100的补码
A.98   B:99   C:100   D:101

5:java的8种基本类型是什么?

1)byte:字节型,用于存储整数的,占用1个字节,范围-128到127
  2)short:短整型,用于存储整数的,占用2个字节,范围-32768到32767
  3)int:整型,用于存储整数的,占用4个字节,范围-2^31到2^31-1
  4)long:长整型,用于存储整数的,占用8个字节,范围-2^63到2^63-1
  5)float:单精度浮点型,用于存储小数的,占用4个字节,不能表示精确的值
  6)double:双精度浮点型,用于存储小数的,占用8个字节,不用表示精确的值
  7)boolean:布尔型,用于存储true或false的,占用1个字节
  8)char:字符型,采用Unicode字符编码格式,用于存储单个字符,占用2个字节

6:switch能作用在哪些数据类型上?

答:switch可以作用于:byte,short,int,char,String,枚举类型,其它类型不允许

7:重写与重载的区别?

1)重写:发生在父子类中,方法名相同,参数列表相同
    ----用于在派生类中修改超类中所声明的方法
  2)重载:发生在同一类中,方法名相同,参数列表不同
    ----完全不同的方法,只是方法名正好相同

8.实例变量与静态变量的区别?

1.实例变量与静态变量的区别:
  1)实例变量:属于对象的,在创建对象的时候存储在堆中,
           创建多少个对象,则实例变量就会在堆中存在多少份
           通过引用(对象)打点来访问
  2)静态变量:属于类的,在类被加载期间存储在方法区中,
           无论创建多少个对象,静态变量在方法区中都只存在一份
           通过类名打点来访问

9:String s = new String("abc");创建了几个对象?

10.java是值传递还是引用传递:

  --java中无论是基本类型还是引用类型,都是值传递
  --1)对于基本类型而言,传递的是具体的值的副本
  --2)对于引用类型而言,传递的是具体的地址的副本
 

11==和equals的区别:

  1)==:对于基本类型而言,比较的是数值是否相等
       对于引用类型而言,比较的是内存地址是否相等
  2)equals:String中重写了equals(),用于比较字符串内容是否相同,若不重写equals()则默认调用Object中的equals()还是比较地址,所以equals()常常被重写来比较对象的数据是否相同





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值