Java面试基础篇

目录

一、集合

1.集合与集合之间的区别

2.集合子类之间的区别(数据结构)

二、线程

三、面向对象

继承

多态

四、异常

五、IO流

六、序列化与反序列化


今天给大家分享 Java基础篇的面试题,小编给大家稍微整理了一下,希望即将面试的朋友们看了后能有帮助。

一、集合

1.集合与集合之间的区别

例如:list、set、map之间的区别

List:有序、可重复。

Set:无序、不可重复的集合。重复元素会覆盖掉。

Map:键值对,键唯一、值不唯一。Map 集合中存储的是键值对,键不能重复,值可以重复。

2.集合子类之间的区别(数据结构)

问题一:ArrayList与Linkedlist的区别

它们都属于list集合的子类。
ArrayList-数组-查询修改快,删除新增慢
Linkedlist-链表-查询修改慢,删除新增快

 

问题二:hashset和treeset的区别

它们都属于set集合的子类。

hashset的数据结构是哈希表,哈希表特点是去重 底层数据结构依赖跟hashcode以及equals返回值有关

treeset的数据结构是二叉树,二叉树的特点自带排序属性,实现了Comarable自然排序接口

hashset的哈希表是怎么判断是否同一个对象的?

判读对象 是否是同一个对象重写hashcode(x轴)与equals(y轴)这两个方法,如果返回值都相同,那么就是同一个对象。

问题三:hashmap与hashtable的区别

hashmap线程不安全。

hashtable的方法都被synchronize修饰,线程是同步,线程安全。

二、线程

概念:最小的程序运行单元;进程与线程的关系是1对多
实现:extends Thread,implement Runnable
线程的状态:初始化、就绪、运行、阻塞/等待/休眠、销毁
 

问题一:start与run的区别?

启动线程用start方法,run方法实现的是内容。
 

问题二:sleep与wait的区别?

sleep设置休眠时间到了后是线程自动唤醒,wait要通过notify方法人为唤醒
死锁:两个及以上的线程,互相抢占锁资源,呈现僵持状态
 

三、面向对象

继承

问题一:重写与重载的区别

重载 同名不同参
重写  同名同参 子类覆盖父类的方法,而且只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常。

多态

问题二:接口与抽象类的区别

接口是比抽象类更抽象的抽象类

  1. 抽象类可以有构造方法,接口中不能有构造方法;
  2. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法;
  3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
  4. 一个类可以实现多个接口,但只能继承一个抽象类。

 

四、异常


处理方式:声明throws 扑捉异常try catch
问题一:普通异常与运行时异常的区别

运行时异常不用声明throws,普通异常必须要处理,否则编译不通过。


怎么样写一段指定的代码,抛出指定的异常(栈内存溢出StackOverflow)

递归最容易出现栈内存溢出。

五、IO流


常识:InputStream、outputstream、Reader、Writer
文件拷贝/文件夹递归查询

文件拷贝案例

   public static void main(String[] args) throws Exception {
        BufferedInputStream in = new BufferedInputStream(
                new FileInputStream(new File("E:\\学习资料\\Y1\\java基础录屏\\readme.txt"))
        );
        BufferedOutputStream out = new BufferedOutputStream(
                new FileOutputStream(new File("E:\\workspace\\java基础面试笔记.txt"))
        );

        byte[] bytes = new byte[1024];
        int len = 0;
        while ((len = in.read(bytes)) != -1) {
                out.write(bytes,0,len);
        }
        in.close();
        out.close();
    }

六、序列化与反序列化

定义:将一个对象转化为一种格式,能够更好的传输和理解。

反序列化是转换过来,便于人们观看的。

问题:怎样把对象如何实现序列化?

举个例子,假如我们要对Student类对象序列化到一个名为student.txt的文本文件中,然后再通过文本文件反序列化成Student类对象:

先写一个实体类

public class Student implements Serializable {
    private String name;
    private Integer age;
    private Integer score;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getScore() {
        return score;
    }

    public void setScore(Integer score) {
        this.score = score;
    }
}

写一个方法实现    对象->流

 public static void serialize(  ) throws IOException {

            Student student = new Student();
            student.setName("linko");
            student.setAge( 18 );
            student.setScore( 1000 );

            ObjectOutputStream objectOutputStream =
                    new ObjectOutputStream( new FileOutputStream( new File("D:\\student.txt") ) );
            objectOutputStream.writeObject( student );
            objectOutputStream.close();

            System.out.println("序列化成功!已经生成student.txt文件");
        }

再写一个方法实现    流-->对象 

public static void deserialize(  ) throws IOException, ClassNotFoundException {
            ObjectInputStream objectInputStream =
                    new ObjectInputStream( new FileInputStream( new File("student.txt") ) );
            Student student = (Student) objectInputStream.readObject();
            objectInputStream.close();

            System.out.println("反序列化结果为:");
            System.out.println( student );
        }

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值