首页 > 编程语言 >一文读懂大厂面试的JAVA基础(集合,面向对象特性,反射,IO,容器)

一文读懂大厂面试的JAVA基础(集合,面向对象特性,反射,IO,容器)

时间:2023-06-08 18:06:21浏览次数:60  
标签:Java HashMap 对象 面向对象 线程 IO JAVA 方法


整理了操作系统,计算机网络,以及JVM的高频面试题目,对于面试大厂的Android以及后端开发岗位,可以说的是十分必要的部分就是JAVA语言的基础,在整体的内容上我认为有以下的几个部分,我发现任何的学习都是先建立框架体系,再逐个击破,针对Java的基础中包括:
(1)Java语言的面向对象的特性
(2)Java语言的集合种类以及特性
(3)Java语言的反射特性
(4)Java的IO流
(5)Java语言与其他编程语言的特性对比

Java语言的基础部分的面试就是这些,我们直接上面试题,完整的面试题目资料可以关注我的公众号:AI学习经历分享,回复JAVA,即可获得。

1.Java语言的特性和优点有哪些?
(1)跨平台特性( 一次编译,N次执行,得益于JVM虚拟机将就文件转换为class字节码)
(2)支持多线程
(3)面向对象的特性

2.详细解释一下Java语言的面向对象特性与C语言的面向过程特性?
面向过程特性:分析解决问题的步骤,用函数进行逐步的实现,性能较高
面向对象特性:将构成问题的事物分解成若干的对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。性能上比面向对象要低。

3.Java语言的自动装箱以及自动拆箱?
(1)装箱为将基本数据类型转换为包装器数据类型(int->integer)
(2)拆箱为将包装类转换为基本数据类型(integer->int)

4.Java的重写与重载的区别(高频)?
(1)重载:在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同),重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来。
(2)重写:发生在父类与子类之间,进行重写,方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同,仅仅是对方法进行重写。

5.equal与==的区别是什么?
== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。
equals 用来比较的是两个对象的内容是否相等。
所有比较是否相等时,都是用 equals 并且在对常量相比较时,把常量写在前面。

6.string,stringbuffer,stringbuild的三种数据类型的区别是什么(高频)?
String 是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final 类型的字符数组。
另外 StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。

7.ArrayList与linkedlist的容器区别?
Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。
LinkList 是一个双链表,在添加和删除元素时具有比 ArrayList 更好的性能.但在 get 与 set 方面弱于ArrayList.当然,这些对比都是指数据量很大或者操作很频繁。

8.Hashmap和Hashtable的区别是什么(高频)?
(1)继承的父类不同:HashMap 是继承自 AbstractMap 类,而 Hashtable 是继承自 Dictionary 类。
(2)对null的支持性不同:HashMap的key和value均可以为null,但是这样的 key 只能有一个,因为必须保证 key 的唯一性;可以有多个 key 值对应的 value 为 null。
hashmap的key和value均不可以为null
(3)线程安全性:HashMap 是线程不安全的,在多线程并发的环境下,可能会产生死锁等问题,Hashtable 是线程安全的,它的每个方法上都有 synchronized 关键字,因此可直接用于多线程中。
(4)效率不同:虽然 HashMap 是线程不安全的,但是它的效率远远高于 Hashtable,相比来说,ConcurrentHashMap 使用了分段锁,并不对整个数据进行锁定,适合多线程下使用。

  1. Collection 包结构,与 Collections 的区别?(高频)
    Collection 是集合类的上级接口,子接口有 Set、List、LinkedList、ArrayList、Vector、Stack、Set;Collections 是集合类的一个帮助类, 它包含有各种有关集合操作的静态多态方法,用于实现对各种集合的搜索、排序、线程安全化等操作。此类不能实例化,就像一个工具类,服务于 Java 的 Collection 框架。

10.Java语言中的四种引用,强弱软虚
(1)强引用:强引用在内存不足时也不会被回收

String str = new String("str");

(2)软引用:软引用在内存不足的时候会被回收
(3)弱引用:只要 JVM 垃圾回收器发现了它,就会将之回收
(4)虚引用:虚引用的回收机制跟弱引用差不多,但是它被回收之前,会被放入 ReferenceQueue 中

11.Java的final的使用方法和特性
类不能继承,方法不能重写,修饰得常量进入常量池

12.Java中的IO流种类:
根据操作对象分为字节流和字符流
根据输出方向分为输入流和输出流

13.详细解释一下Java的面向对象的特性含义

14.sleep 和 wait 的区别
(1)对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。
(2)sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
(3)而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

15.volatile 的原理,作用,能代替锁吗?
Volatile利用内存栅栏机制来保持变量的一致性。不能代替锁,其只具备数据可见性一致性,不具备原子性。

16.JDK是什么?JRE是什么?
JDK是面向开发人员使用的SDK,JRE是Java程序的运行环境,JVM包涵在JRE中,JRE包含在JDK内部。

17.简述this的主要用法
this关键字使用在实例方法中,代表调用该方法的当前对象。

  1. BIO、NIO、AIO 有什么区别?
    BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
    NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
    Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

19.List、Set、Map 之间的区别是什么?

三种集合的主要区别在于存储元素是否有序以及是否重复,

一文读懂大厂面试的JAVA基础(集合,面向对象特性,反射,IO,容器)_编程语言

20.简述HashMap 的实现原理?

HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket 里。当计算出的 hash 值相同时,我们称之为 hash 冲突,HashMap 的做法是用链表和红黑树存储相同 hash 值的 value。当 hash 冲突的个数比较少时,使用链表否则使用红黑树。

21.简述 HashSet 的实现原理?
HashSet 是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不允许重复的值。

22.迭代器 Iterator 是什么?
Iterator 接口提供遍历任何 Collection 的接口。我们可以从一个 Collection 中使用迭代器方法来获取迭代器实例。迭代器取代了 Java 集合框架中的 Enumeration,迭代器允许调用者在迭代过程中移除元素。

23.throw 和 throws 的区别?
throw用于方法内部,throws用于方法声明上
throw后跟异常对象,throws后跟异常类型
throw后只能跟一个异常对象,throws后可以一次声明多种异常类型

24.谈谈final, finally, finalize的区别
如果一个类被final修饰,意味着该类不能派生出新的子类,不能作为父类被继承。因此一个类不能被声明为abstract,又被声明为final。将变量或方法声明为final。可以保证他们在使用的时候不被改变。其初始化可以在两个地方:一是其定义的地方,也就是在final变量在定义的时候就对其赋值;二是在构造函数中。这两个地方只能选其中的一个,要么在定义的时候给值,要么在构造函数中给值。被声明为final的方法也只能使用,不能重写。
在异常处理的时候,提供finally块来执行任何的清除操作。如果抛出一个异常,那么相匹配的catch字句就会执行,然后控制就会进入finally块,前提是有finally块。
finalize是方法名,java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是在垃圾收集器确认一个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此,所有的类都继承了它。子类覆盖finalize()方法已整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

25Java的面向对象的特性;
面向对象是一种思想,可以将复杂的问题简单化,让我们从执行者变为指挥者。面向对象的三大特征:封装、继承和多态。
封装:将事务封装成一个类,减少耦合,隐藏细节。保留特定的接口与外界联系,当接口内部发生改变时,不影响外部的调用方。
继承:从一个已知的类中派生出另一个新的类,但新的类拥有已知类的属性和方法,并且可以通过覆盖/重写来增强已知类的能力。
多态:多态的本质就是一个程序中出现多个同名的不同方法,主要通过三种方式体现:

通过子类对父类的覆盖来实现
通过一个类中对方法的重载来实现
通过将子类对象作为父类对象使用来实现

26.Java是编译型语言还是解释性语言?
Java的执行经历了编译和解释的过程,是一种先编译,后解释执行的语言。不可以简单的归到编译型或解释型语言的类别中。

  1. 启动一个线程是用run()还是start()? 多线程有几种实现 同步和并发是如何解决的 什么叫守护线程,用什么方法实现守护线程(Thread.setDeamon()的含义) 如何停止一个线程? 解释是一下什么是线程安全?举例说明一个线程不安全的例子。解释Synchronized关键字的作用。 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
    (1)start

(2)继承Thread类、实现Runnable接口、使用ExectuorService、Future、Callable实现由返回值的线程。

(3)同步方法、同步代码块、锁

(4)Damon线程、为其他线程的运行提供服务,如GC,Thread。setDeamon(true)。

(5)Thread.stop()不推荐(不会正确释放资源)、使用中断来停止线程。

(6)当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。

(7)车票被重复卖出。

(8)同步关键词。修饰静态方法,则以类作为锁对象,同时只能有一个线程访问此类同步的静态方法;修饰普通方法,则以此对象作为锁对象,同时只能有一个线程访问此类同步的普通方法;也可以自定义锁对象同步代码块。

(9)synchronized方法不可以进入,非synchronized可以进入。

致谢:
2.https://www.jianshu.com/p/226a1753296b
3.https://zhuanlan.zhihu.com/p/97132867

标签:Java,HashMap,对象,面向对象,线程,IO,JAVA,方法
From: https://blog.51cto.com/u_13638291/6442035

相关文章

  • Java面试题查缺补漏习题,锁的升级,动态代理
    之前我们总结了Java面试题目中的关于计算机网络,操作系统,以及JVM虚拟机,以及Java的相关特性。今天又看了很多面试的视频,对面试的题目进行一下仔细的补充。1.对称加密与非对称加密的区别:非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下:......
  • Java开发工程师学习日记(九)
    1.TCP与UDP网络传输协议方面:TCP的传输报文形式比UDP的传输形式更加复杂,因此UDP头部只有四个字段,因此传输效率比较,TCP<UDP2.数组或者字符串的null值含义:null表示字段或者变量还没有确定的值,3.IP地址的分类:A类:0.0.0.0~127.255.255.255B类:128.0.0.0~191.255.255.255C类:192.0.0.0~......
  • java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal al
    一、报错及部署环境Java程序访问测试域名https方法正常,访问生产域名https域名报错,报错如下javax.net.ssl.SSLHandshakeException:Receivedfatalalert:protocol_version测试环境使用KubeSphereingress生产环境使用阿里云ACK服务的ingress配置二、问题原因客户端......
  • Java中枚举类的特殊用法-使用枚举实现单例模式和策略模式
    上面针对枚举类实现单例模式和策略模式有所涉及,下面补充。Java中使用枚举类实现单例模式为什么可以这样做?枚举类不能new,因此保证单例枚举类不能被继承类不加载时,不会实例化使用枚举类创建的单例还有一个好处,就是即使使用反射,也无法打破它的单例性质新建枚举类publicenumSingleEn......
  • jquery:TypeError: $(...).on is not a function
    当发生错误TypeError:$(...).onisnotafunction时,当不存在javascript类冲突的前提下,考虑是否是因为jquery版本过低! 参考:http://stackoverflow.com/questions/15670352/typeerror-on-is-not-a-functionhttp://stackoverflow.com/questions/18958775/typeerror-jquery-on-is-n......
  • Java基础之基础语法与面向对象
    前言小知识Java由Sun公司于1995年推出,2009年Sun公司被Oracle公司收购,取得Java的版权Java之父:JamesGosling(詹姆斯·高斯林) 专业术语JDK:javadevelopmentkit(java开发工具包)JRE:javaruntimeenvironment(java运行环境)JVM:javavirualma......
  • 正则 (regular expression)
    一、简单做一个分类在线测试工具http://tool.chinaz.com/regex/1、字符组字符组:[字符组]在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示字符分为很多类,比如数字、字母、标点等等。假如你现在要求一个位置"只能出现一个数字",那么这个位置上的......
  • DSP网课笔记 ξ0_introduction
    网课链接(是一个开设给研究生的课程)离散时间信号处理吴炳飞概论课程目标是建立基本的DSP观念DSP的研究对象:信号要将模拟信号转换为数字信号,必须知道所研究信号的特性(对数字的敏感)......
  • el-api包冲突,java.lang.LinkageError: loader constraints violated when linking ja
    java.lang.LinkageError:loaderconstraintsviolatedwhenlinkingjavax/el/ExpressionFactoryclass严重:Servlet.service()forservletjspthrewexceptionjava.lang.LinkageError:loaderconstraintsviolatedwhenlinkingjavax/el/ExpressionFactoryclassat......
  • java reflection Java 反射,动态绑定
    javareflection,java反射,动态绑定                                       Reflection是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得Java类中......