Java面试题(基础篇),15个经典面试问题及回答思路

  • 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

11、HashMap和Hashtable的区别

两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

12、HashMap 和 ConcurrentHashMap 的区别?

ConcurrentHashMap和HashMap的实现方式不一样,虽然都是使用桶数组实现的,但是还是有区别,ConcurrentHashMap对桶数组进行了分段,而HashMap并没有。

ConcurrentHashMap在每一个分段上都用锁进行了保护。HashMap没有锁机制。所以,前者线程安全的,后者不是线程安全的。

13、简述Java反射机制及其作用。

Java反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

优点:可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度。

14、什么是值传递和引用传递?

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。

引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身。一般认为,Java 内的传递都是值传递,Java 中实例对象的传递是引用传递。

15、Java 支持多继承么?

Java 中类不支持多继承,只支持单继承(即一个类只有一个父类)。 但是 Java 中的接口支持多继承,即一个子接口可以有多个父接口。

16、什么是死锁?

它是指两个或者两个以上的线程在执行的过程中,因争夺资源产生的一种互相等待的现象。

17、集合框架中的泛型有什么优点?

泛型限制了集合容纳的对象类型,如果添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现 ClassCastException。泛型也使得代码整洁,我们不需要使用显式转换和 instanceOf 操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。

18、静态变量和实例变量的区别?

  • 静态变量用static 关键字修饰,实例变量不需要。

  • 静态变量,属于类所有,只要程序加载了,静态变量就会被分配空间,就可以直接使用。实例变量是对象的属性,只有实例化对象之后,才会被分配空间,才能使用。(即需要new一个才能使用)

  • 类变量是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果;而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象。

19、String s = new String(“xyz”);创建了几个String Object?二者之间有什么区别?

两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。

20、final, finally, finalize的区别。

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……

finally是异常处理语句结构的一部分,表示总是执行。

finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

21、error和exception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

22、请写出你最常见到的5个runtime exception。

考查代码量,可随意发挥。例:NullPointerException(空指针)、ArrayIndexOutOfBoundsException(数组越界)、ClassCastException(类型间转换)、ClassNotFoundException(类找不到)、FileNotFoundException(文件找不到)、IOException(IO相关)、InterruptedException(线程)…

23、sleep()和 wait()有什么区别?

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

24、多线程有几种实现方法?同步有几种实现方法?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

金三银四到了,送上一个小福利!

image.png

image.png

专题+大厂.jpg
利!

[外链图片转存中…(img-qvSxwqCw-1711755580359)]

[外链图片转存中…(img-CYtxVCp6-1711755580360)]

[外链图片转存中…(img-k2wnA5eT-1711755580360)]

  • 10
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些Java基础面试题,希望能帮助您准备面试。 1. Java中的访问修饰符有哪些?它们分别代表什么含义? 答:Java中的访问修饰符有四种,分别是public、private、protected和默认访问修饰符。它们分别代表以下含义: - public:公共的,可以被任何其他类访问; - private:私有的,只能在本类中被访问; - protected:受保护的,可以被同一包中的其他类和不同包中的子类访问; - 默认访问修饰符:没有关键字修饰,只能在同一包中被访问。 2. Java中的异常处理机制是什么? 答:Java中的异常处理机制是通过try-catch-finally语句块来实现的。在try块中编写可能引起异常的代码,在catch块中捕获异常并进行处理,在finally块中编写必须执行的代码。如果在try块中发生异常,程序会跳转到catch块中进行异常处理,如果catch块中没有捕获到异常,异常会继续向上抛出,直到被处理或者导致程序崩溃。 3. Java中的多态是什么? 答:Java中的多态是指同一个方法可以在不同的对象中表现出不同的行为。多态可以通过继承、接口实现和方法重载等方式实现。 4. Java中的线程是什么?如何创建线程? 答:Java中的线程是指程序中独立运行的子任务,可以并发执行。Java中可以通过继承Thread类或者实现Runnable接口来创建线程。具体实现方式可以参考以下代码: - 继承Thread类: ``` class MyThread extends Thread { public void run() { // 线程执行的代码 } } // 创建线程示例 MyThread myThread = new MyThread(); myThread.start(); // 启动线程 ``` - 实现Runnable接口: ``` class MyRunnable implements Runnable { public void run() { // 线程执行的代码 } } // 创建线程示例 MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); // 启动线程 ``` 5. Java中的反射是什么? 答:Java中的反射是指程序在运行时动态获取类信息、调用对象方法、访问或修改对象属性的能力。Java中的反射可以通过Class类和java.lang.reflect包中的相关类实现。反射可以使得程序更加灵活,但是也会带来一定的性能损耗。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值