Java常见的面试二

embedded/2024/10/19 4:21:38/

 1、普通类和抽象类有那些区别

  1. 普通类中不能有抽象方法,抽象类中可以有抽象方法
  2. 普通类可以直接实例化,抽象类不能直接实例化

2、抽象类能够使用final修饰吗

        不能,抽象类是由子类继承的,但是final修饰的类不能被继承。两者矛盾所以抽象类不能使用final修饰

3、接口和抽象类有什么区别

         接口是子类通过implement实现的,抽象类需要子类使用extends来继承。

          接口之间可以实现多继承,子类可以进行多实现,但类之间只能单继承。      

           接口中的方法默认修饰符是public ,抽象类中方法的修饰符可以是任意类型的修饰符

4、Java中IO流分为几种

按功能分:输入流(input)和输出流(output)

按类型来分:字节流和字符流

字节流是按8位传输以字节为单位进行输入输出数据,字符流是按16位传输以字节为单位进行输入输出数据

5、BIO、NIO、AIO有什么区别

        BIO:Block IO同步阻塞IO,模式简单操作方便,处理并发能力低

        NIO:Non IO同步非阻塞IO 客户端和服务器通过Channel(通道)通讯,实现了多路复用

        AIO:Asynchronous IO是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步通过事件和回调机制实现的

6、Files的常用方法有哪些

  1. Files.exists()检验文件是否存在
  2. Files.createFile()创建文件
  3. Files.createDirectory()创建文件夹
  4. Files.delete()删除一个文件或目录
  5. Files.copy()复制文件
  6. Files.move()移动文件
  7. Files.size()获取文件个数
  8. Files.read()读取文件
  9. Files.write()写入文件

7、Java中的容器都有那些

Java容器分为Collection和Map两大类

Collection

       List

       ArrayList

        LinkedList

        Vector

        Stack

        Set

        HashSet

        LinkedHashSet

        TreeSet

Map

        HashMap

       LinkedHashMap

        TreeMap

        ConcurrentHashMap

        Hashtable

8、Collection和Collections有什么区别

        Collection是一个集合的接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如List、Set等

        Collections是一个包装类,包含了很多静态方法,不能被实例化,就像一个集合的工具类。比如排序方法:Collections.sort(list)

9、List、Set、Map之间的区别是什么

List和Set是存储单例数据集合,Map是以键值对的形式存储数据的

List中存储的数据是有序可以重复的,Set中存储的数据无序不可以重复

Map存储的数据是无序的,键是不可以重复的但是值可以重复

Set存储的数据的位置是根据元素的hashcode决定的,所以对于用户来说是无序的

10、HashMap和Hashtable有什么区别

        存储:HashMap的key和value允许为null,而Hashtable不允许

        线程安全:HashMap线程不安全,Hashtable线程安全,所有HashMap的效率要比Hashtable效率高

        推荐使用:在Hashtable的类注释可以看到,Hashtable是保留类不建议使用,推荐在单线程环境下使用Hash Map替代如果需要多线程使用则用ConcurrentHashMap替代

11、HashMap的实现原理

        HashMap基于Hash算法实现的,我们通过put(key,value)存储,get(key)来获取,当传入key时,HahMap会根据key.hashCode()计算出hash值,根据hash值将value保存在bucket里。当计算出的hash值相同时,我们称之为hash冲突。如果出现hash冲突会变量该位置上的链表中的所有数据通过equals()方法来对比每个数据的key如果key相同时会进行数据覆盖,如果key不同,在jdk1.8以前使用的是头插法,在1.8之后使用的是尾插法。另外1.8以后当链表上的节点数大于等于8并且数组长度不小于64时,链表会自动转换成红黑树,当链表中的数据小于8时会变成链表。

为什么要将链表转换成红黑树? 

        当数据量大时,链表链表查询的时间复杂度为O(n),红黑数查询的时间复杂度为O(logn),最坏时间复杂度为O(algn)

如果链表数据达到8之后数组长度小于64话会先进行数组扩容直到数组长度达到64才会转成红黑树

数组扩容有两种:一种时数组达到阙值时,数组会扩容两倍。HashMap数组长度默认是16,默认负载因子为0.75。所有刚开始阙值为12。另一种是在没有红黑树的情况下,添加元素链表长度超过8,数组会扩容为两倍。

HashMap的做法是用链表和红黑树存储相同hash值的value。当hash冲突的个数比较少时,使用链表否则使用红黑数

        

        

        


http://www.ppmy.cn/embedded/87718.html

相关文章

C++ 实现局域网内即时通信服务端功能 (windows 系统)

C 实现局域网内即时通信服务端功能 (windows 系统) 详细描述,见客户端文章 详细代码如下: /******************************************************Copyright (c) 2024, GhY, All rights reserved.*文件 server.h*描述 …

python模拟键盘鼠标操作1,pyautogui库

python模拟键盘鼠标操作有几种方法,这里讲pyautogui库 #获取当前鼠标位置 # Point(x1184, y744) pyautogui.position()###鼠标控制 #1移动鼠标 pyautogui.moveTo(100, 200) # 光标移动到(100, 200)位置 pyautogui.moveTo(None, 500) # 光标移动到(100, 500)位…

Django小项目实践:从简单的博客系统到待办事项应用的详细教程

Django小项目实践:从简单的博客系统到待办事项应用的详细教程 在本篇教程中,我们将一步一步地创建一个简单的 Django 项目,其中包含一个博客系统和一个待办事项应用。我们将从环境设置开始,然后逐步添加功能和细节。希望这个教程…

【HashMap源码学习】

HashMap的底层结构 HashMap是基于分离链表法解决散列冲突的动态散列表。 1、在jdk7中,使用的是“数组 链表”,发生散列冲突的时候键值对会用头插法添加到单链表中; 2、在jdk8中,使用的是“数组 链表 红黑树”,发…

【docker】部署证书过期监控系统mouday/domain-admin

证书过期了再去部署证书容易被骂,就找了一个开源的证书过期系统来部署一下 过程 官方文档:https://domain-admin.readthedocs.io/zh-cn/latest/manual/install.html#docker 直接下载镜像是超时的,切换一下文档推荐的镜像源 新建docker配置…

【运维】远程控制与访问的协议(域,工作组,RDP,ARD,VNC,SSH,SCP)和工具(DDNS,跳板机,堡垒机)

【运维】远程控制与访问的协议(域,工作组,RDP,ARD,VNC,SSH,SCP)和工具(DDNS,跳板机,堡垒机) 文章目录 1、远程访问协议1.1 组织&#…

hicp学习 VRRP选举过程、MSTP+VRRP混合组网

VRRP 的选举规则 1、先比优先级,越大越优先,默认优先级是100.范围 0-255,可配置的范围是1-254。0和255这两个优先级是保留的不配置 0:用来告诉 Backup 立即成为 Master。一般是 Master 设备主动退出 VRRP 组(人为删除…

【Three.js基础学习】17.imported-models

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 课程回顾: 如何在three.js 中引入不同的模型? 1. 格式 (不同的格式) https://en.wikipedia.org/wiki/List_of_file_form…