Java面试基础篇

news2024/12/28 22:58:37

目录

一、集合

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 );
        }

运行结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RHCE(web服务器)

文章目录一、www简介(一)网址及HTTP简介(二)HTTP协议请求的工作流程二、www服务器的类型(一)仅提供用户浏览的单向静态网页(二)提供用户互动接口的动态网站三、www服务器的基本配置四…

苹果证书p12和描述文件的创建教程

在hbuilderx或apicloud这些uniapp框架工具打包苹果APP的时候,需要p12证书和证书profile文件来编译,目前网上很少使用windows电脑生成p12证书的教程,官方的教程都是需要使用苹果电脑来创建的。 这里,我们这篇文章来教会大家如何使…

【虚拟仿真】Unity3D中实现鼠标悬浮UI上显示文字

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 本篇文章实现一个鼠标悬浮在UI上显示文字的功能,实…

LMK04828时钟芯片配置历程——SPI接口

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 LMK04828时钟芯片配置历程——SPI接口总结最近有一个开发板需要去调试,开发板上包含了AD9371和LMK04828时钟芯片,而我的任务是需要将他们都配置起来。…

c++入门之输入输出命名空间

文章目录前言一、输入输出二、命名空间1.使用命名空间的原因2.命名空间定义3.命名空间的定义注意事项(1)命名空间只能在全局范围使用(2)命名空间可以嵌套(3)命名空间是开放的,可以随时添加新的成员&#xf…

mysql流程控制

前言: 👏作者简介:我是笑霸final,一名热爱技术的在校学生。 📝个人主页:个人主页1 || 笑霸final的主页2 📕系列专栏:数据库 📧如果文章知识点有错误的地方,请…

QT---制作简易串口助手

一、ui制作打开QTCreator创建一个新文件2.进入UI设计界面进行设计进入ui界面后,选择相应的控件将串口助手的样子给做出来,我选择的是如下的控件做这个串口助手:1.按钮:2.下拉列表3.标签4.组合框5.文本编辑绘制ui界面如下&#xff…

如何用Windows自带命令修改文件和图片的MD5

首先说下,md5到底是啥,它是一段固定长度的数据。无论原始数据是多长或多短,其MD5值都是128bit。另外md5是确定性,一个原始数据的MD5值是唯一的,同一个原始数据不可能会计算出多个不同的MD5值;类似人类的身份…

快速搭建前后端分离项目

后端 配置文件和依赖 创建一个SpringBoot项目,采用Mybatis-Plus快速构建项目。 application.yml进行配置 server:port: 80spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/ems?useSSLfalse&useUnicodetrue&charact…

C++——哈希

目录 unordered系列关联式容器 unordered_mapunordered_map在线文档说明 unordered_map的接口说明 unordered系列优势 哈希 解决哈希冲突 1.闭散列——开放定址法 思考:哈希表什么情况下进行扩容?如何扩容? 插入元素代码 查找元素 …

Linux操作系统--用户和群组(保姆级教程)

用户和群组 用户 什么是用户,即登录到linux操作系统的账号就是用户。在linux操作系统中账户的类别主要有三类:1、超级管理员(root),在linux中超级管理员的账户是root,这个root账户就类似于windows操作系统中administr…

pom.xml配置中引入Oracle依赖

pom.xml配置中引入Oracle依赖1. Download Driver1.1 pom.xml2.Awakening1. Download Driver 因为Oracle是要收费的,所以不能通过远程的方式来引入,可以通过mvn指令导入到Maven本地仓库。 下载地址 Oracle Website: https://www.oracle.com/database/tech…

MyBatis案例 | 使用映射配置文件实现CRUD操作——查询所有数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇&…

各类SDR的USB接口一致性测试

最近用高带宽示波器测了好几个SDR产品的USB2接口一致性。由于探头数量只有1个,所以不能测全所有的项目。但已经包含了最主要的USB眼图(信号质量)项目。 待测件包含: 1.原版RTL-SDR 2.自制RTL-SDR 3.HackRF 4.无线电罗盘v0.8 测试…

css实现超出div长度文字自动隐藏或用省略号表示

网页中一些区域的标题文字是不能换行的,例如首页显示的文章标题,因为布局是固定的,换行会打乱布局,从而使网页产生错位。因此,我们需要一行一段文字,超出行宽的文字用省略号表示或者直接去掉不用省略号代替…

在CentOS-6.9配置apache服务(1)---基于个人主页的身份验证

文章目录一 系统环境二 用户身份验证2.1 编写主配置文件2.2 编写用户身份验证的配置文件2.3 创建用户密码文件2.4 创建测试页面2.5 测试三 基于个人主页的身份验证3.1 修改主配置文件3.2 创建测试用户3.3 创建测试的个人主页3.4 设置防火墙和selinux3.5 测试在部署了apache服务…

LeetCode-189. 轮转数组

目录方法一:使用额外的数组方法二:环状替换方法三:数组翻转题目来源 189. 轮转数组 方法一:使用额外的数组 我们可以使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度,我们遍历原数组,将原…

JSP SSM校园超市管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSPssm 校园超市管理系统 是一套完善的系统源码,对理解JSP java SrpingMVC mybiats 框架 MVC编程开发语言有帮助,系统具有完整的源代码和数据库,以及相应配套的设计文档 ,系统主要采用B/S模式开发。 研究的基…

Dubbo 中 Zookeeper 注册中心原理分析

本文通过分析Dubbo中ZooKeeper注册中心的实现ZooKeeperResitry的继承体系结构,自顶向下分析了AbstractRegistry(提供了服务数据的本地缓存)、FailbackRegistry(服务注册订阅相关的异常重试)、CacheableFailbackRegistr…

Web Spider Fiddler - JS Hook 基本使用

文章目录前言一、资源下载二、什么是Hook三、Hook 的几种方式四、Fiddler - 编程猫插件安装五、Fiddler - Hook 案例六、常用的js hook代码Hook CookieHook Header总结前言 Hook技术也叫钩子函数,功能是把网站的代码拉出来,改成我们自己想执行的代码片段…