Java小白面试题整理-点滴积累,点滴成长。

1.JDK和JRE有什么区别?

JDK是Java开发环境,JRE是Java运行环境,JDK包含了JRE,JDK的功能多余JRE。

2.== 和 equals 的区别是什么?

==是对基本数据类型来说值比较,对引用类型来说是引用比较,equals是Object类的方法,要实现对象间的比较需要重写equals方法。

3.java 中操作字符串都有哪些类?它们之间有什么区别?

String类:字符串常量,存放在常量池,性能低于StringBuffer和StringBuilder,其中的字符串中 “+” 操作本质是用的StringBuilder的append方法在字符串后面进行追加。
StringBuffer类:字符串变量,长度可变,使用append方法对已有进行追加,线程安全,性能略低于StringBuilder
**StringBuilder类:**字符串变量,长度可变,也是用append追加,线程不安全,性能优于StringBuffer类

4.如何将字符串反转?请写一段代码

(1) StringBuilder和StringBuffer类中有reverse方法,将字符串进行反转
(2) 使用StringBuilder,调用append方法追加String中的字符
** (3) ** 存入char数组,调用String构造方法返回String
省略…

5.字符串"+"运行原理什么?

“+” 的本质是用StringBuilder对象的append方法进行拼接。

6.方法区存放什么东西?

(1)方法区(Method Area)存储的类信息

     对每个加载的类型(类class、接口interface、枚举enum、注解annotation),JVM必须在方法区中存储以下类型信息:

这个类型的完整有效名称(全名=包名.类名)
这个类型直接父类的完整有效名称( java.lang.Object除外,其他类型若没有声明父类,默认父类是Object)
这个类型的修饰符(public、abstract、final的某个子集)
这个类型直接接口的一个有序列表
除此之外还方法区(Method Area)存储类信息还有
类型的常量池( constant pool)
域(Field)信息
方法(Method)信息
除了常量外的所有静态(static)变量

(2)方法区(Method Area)存储的常量

static final修饰的成员变量都存储于 方法区(Method Area)中

(3 )方法区(Method Area)存储的静态变量

静态变量又称为类变量,类中被static修饰的成员变量都是静态变量(类变量)
静态变量之所以又称为类变量,是因为静态变量和类关联在一起,随着类的加载而存在于方法区(而不是堆中)
八种基本数据类型(byte、short、int、long、float、double、char、boolean)的静态变量会在方法区开辟空间,并将对应的值存储在方法方法区,对于引用类型的静态变量如果未用new关键字为引用类型的静态变量分配对象(如:static Object obj;)那么对象的引用obj会存储在方法区中,并为其指定默认值null;若,对于引用类型的静态变量如果用new关键字为引用类型的静态变量分配对象(如:static Person person = new Person();),那么对象的引用person 会存储在方法区中,并且该对象在堆中的地址也会存储在方法区中(注意此时静态变量只存储了对象的堆地址,而对象本身仍在堆内存中);这个过程还涉及到静态变量初始化问题,可以参考博客:静态变量初始化相关

(4) 方法区(Method Area)存储的方法(Method)

程序运行时会加载类编译生成的字节码,这个过程中静态变量(类变量)和静态方法及普通方法对应的字节码加载到方法区。

注意!!!方法区中没有实例变量,这是因为,类加载先于对应类对象的产生,而实例变量是和对象关联在一起的,没有对象就不存在实例变量,类加载时没有对象,所以方法区中没有实例变量
静态变量(类变量)和静态方法及普通方法在方法区(Method Area)存储方式是有区别的

7.HashMap 和 Hashtable 有什么区别?

(1)父类不同:Hashmap继承于AbstractMap类,HashTable继承与Dictionary
(2)HashTable 不允许为空,HashMap允许一个key为空,多个值为null
(3) HashTable(每个方法都添加了synchronize关键字)线程安全,HashMap线程不安全
(4)初始容量不同,hashtable的初始长度为11,每次扩充后变量变为原来的2*n+1(n为原来长度),hashmap的初始长度为16,每次扩充后为原来的两倍
(5)计算哈希值的方法不同

8.说一下 HashMap 的实现原理

9.Iterator 怎么使用?有什么特点?

Iterator的使用:
对集合的遍历:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Iterator it = list.iterator();
while(it.hasNext()){
Integer num = it.next();

}

10.写出IO流的分类?并写出实现文件复制功能。

根据流的方向来分:输入流和输出流
根据流的单位:字节流和字符流
根据功能分:节点流和处理流

//文件复制功能 org为源文件路径,dest为目标文件路径
    private static void copyFile(String org,String dest) {
        InputStream in;
        OutputStream out;
        try {
            in = new FileInputStream(org);
            out = new FileOutputStream(dest);
            byte[] buffer = new byte[1024];
            int len;
            while((len=in.read(buffer))!=-1) {
                //读多少,写多少
                out.write(buffer,0,len);
            }
            out.close();
            in.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SinceThenLater

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值