写在路上
记录 2017年8月11日模拟面试问题及答案,许多自己答得很模糊,再次总结语言。
面试总结(二)
问题与答案
回答基于JDK1.8,低版本部分答案不适用
1.Equals和==区别?
/**
答:==在基础数据类型中比较其大小,引用类型比较内存地址。
Equals在不重写的情况下与==相同,重写后是按照其本身方法内部规则进行判断。
任何类都继承自Object,Object中有Equals方法,其底层代码:
*/
public boolean equals(Object obj) {
return (this == obj);
}
2.什么是传值和传址?
答:基础数据类型是传值,引用类型是传址,地址中的对象还是原对象,栈帧结束后 传值不改变,传址改变;
注意String例外,下面来讲。
public void add(String str){
str+=123;
}
@Test
public void a(){
String str="123";
add(str);
System.out.println(str);
}
//结果是 123
3.为什么我们常说字符串是不可变得?
/**
答:因为String底层是char数组,并且用final修饰。
因此每次创建String其原本字符串并不会消失或被替换,而会新建一个String,存储在字符串常量池中,堆区中
因此在字符串中不要使用+=拼接字符串,在进行字符串拼接,必须使用StringBuilder或StringBuffer
StringBuffer是线程安全的,因为其修改方法用synchronized修饰
*/
private final char value[];
4.switch switch case 类型?
答:支持char,byte,short,int及他们的包装类及String和枚举
Incompatible type .Found: ‘long’ ,require : ‘char,byte short,int,Character,Byte,Short,Integer,String,or an enum’;
5.运行时异常和一般异常有何异同
答:一般异常必须进行try catch或throw相应处理,运行时异常往往不进行处理。
6.try catch 和throws和throw如何使用?
答:throws向上抛出异常,调用部分继续throws或者try catch进行处理。throw new是现在抛出异常。
7.1/0报错? 异常类型,如何避免?
答:报错ArithmeticException(算术异常) 运行时异常,可以通过try catch进行捕获进行处理
8.问:Char int byte做加法运算
答:char运算时将字符转化成ASCII码进行整形运算,最后返回值为整形
9.单例设计模式两种实现方式
答:分别饥饿模式和懒汉模式。都通过getInstance获得实例,区别在于类实例是否在使用时在创建,还是在使用前就创建
10.String s = new String(“xyz”);在运行时涉及几个String实例?
答案:两个,一个是字符串字面量”xyz”所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,另一个是通过new String(String)创建并初始化的、内容与”xyz”相同的实例
11.冒泡排序
for(int i=0;i<unsorted.length+1;i++){
for(int j=0;j<unsorted.length-i-1;j++){
if(unsorted[j]>unsorted[j+1]){
Swap(unsorted,j,j+1);
}
}
}
12.一个中文几个字节
答:2-4个字节,GBK两个,UTF-16 通常两个,BCD扩展4个 UTF-8 通常3个,B区扩展4个。
ArrayList和LinkedList区别 Vector 的存储性能和特性
13.问:Str=1+9+”abc”=? Str=”abc”+1+9=?
答 “10abc”和”abc19”,此时跟运算顺序和运算过程有关
14.计算几种的最小单位是什么,基础数据类型的大小
计算机中最小单位是byte(位),1字节8位。
基础数据类型有:byte(1) short(2) int(4) long(8) float(4) double(8) boolean(1/8) char(2)
注:单位是字节
15.抽象类和接口分别该什么时候用?
答:是什么用抽象类,干什么用接口。在JDK中Thread用抽象类,集合用接口。
16.类和抽象类区别?
答:抽象类中的abstract方法子类中必须实现。只抽取功能定义,不抽取功能主体。
17.什么是多态?
答:多态意为:一种事物的多种形态。多态包含编译时多态(函数的重载)和运行时多态,运行时多态体现在继承和实现接口上,包含传参(方法传递参数)多态,引用多态(父类引用子类对象重写方法),向上转型(子类转成父类对象),声明多态(父类指向子类对象)。
18.static和final可以放置的位置?
答:放在int声明前任意位置即可。
19.问 :short s1 = 1; s1 = s1 + 1;有什么错?
答:因为(隐式类型转换)short+int会自动转成int,但short+=相当于s = (short)(s+1),short=+1;相当于short=1;
20.短路语和全路语
答:短路语:&&和||在从左边到右判断时,已经可以判断出结果了就不继续了,而全路语|和&则要全部判断完毕
21.ASCII码和Unicode和gbk和utf-8
答:ASCII定义了128个字符的编码,Unicode(联合)包含了所有字符(语言)的编码,只规定了二进制编码,却未规定二进制编码如何存储。UTF-8是Unicode的实现方式之一,GBK和Unicode一样规定了字符的编码,GBK是大陆通用编码。
22.Overload和Override的区别
答:Overload(重载),Override(重写)
23.Interger缓冲区范围
答:-128-127,在Interger定义时在缓冲区范围涉及到拆箱比较,缓冲区IntegerCache。new 对象和直接赋值在范围内数据类似String;
24.如何实现多线程?
答:继承Thread类,或实现Runnable接口,实现其run方法。 启动通过Thread().start或线程池。
25.protected和default权限
答:public>protect>default>private。protected不能在其不同包的子类调用父类修饰的方法和属性。
26.属性和成员变量
答:实现面向对象的封装思想,属性私有化,方法公开化。成员变量根据其修饰外部调用。
27.封装能干什么?
答:隐藏细节,代码复用。