首页 > 编程语言 >Java面试题Day05

Java面试题Day05

时间:2023-01-08 08:55:28浏览次数:43  
标签:面试题 Java HashMap Day05 链表 接口 序列化 字节

1.说一下HashMap的实现原理?

HashMap是基于哈希表的Map接口的非同步实现,此实现提供所有可选的映射操作,并允许使用null值和null键.

2.HashMap是如何解决Hash冲突?

核心就是使用了数组的储存方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比,需要注意Jdk 1.8中

对HashMap的实现做了优化,

当链表中的节点数据超过了八个之后,该链表会转为红黑树来提高查询效率,数据长度低于6之后会退化为链表

3.为什么HashMap的初始长度为16?

因为长度太小很容易导致map扩容影响性能,如果分配太大的话又会浪费资源,所以就使用16作为初始大小

减少hash碰撞,提高map查询效率,分配过小防止频繁扩容,分配过大浪费资源,

4.HashMap和ConcurrentHashMap的区别?

ConcurrentHashMap对整个桶数组进行了分割分段(Segment),然后在每一个分段上都用了lock锁进行保护,

相对于HashTable的synchronized锁的粒度更精细了一些,并发性能更好,

而HashMap没有锁机制,不是线程安全的

HashMap的键值对允许有null,但是ConcureentHashMap都不允许.

5.什么是TreeMap?

TreeMap是一个有序的Key-value集合,他是通过红黑树实现的,

TreeMap基于红黑树(Red-Black tree)实现,该映射根据其键的自然顺序进行排序,

或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法,

6.comparable和comparator的区别?

comparable接口实际上是出自java,lang包,他有一个compareTo(Object obj) 方法用来排序

comparator接口实际上是出自java.util包,它有一个compare(Object obj1,Object obj2) 方法用来排序

7.如何实现对集合数据排序

使用Stream的sorted方法

使用Collections中的sort方法

使用有序的集合,例如:TreeSet,TreeMap

8.Io流系介绍

四大家族(IuputStream,OutputStream,Reader,Writer)

IuputStream与OutputStream是所有字节型输入流的祖宗类.

Reader与Writer是所有字节型输入输出流的祖宗类

9.Java的序列化.

序列化是一种处理对象流的机制,序列化就是把对象转化为字节流,被传输的对象必须实现serializable接口

反序列化是序列化的逆过程,把字节流转化为对象,

10.谈谈Java IO里面的常见类,字节流,字符流,接口,实现类,方法阻塞.

输入流就是从外部文件输入到内存,输出流主要是从内存输出到文件,

字符流中有抽象类IuputStream和OutputStream,字节流的子类有:

FileInputStream

FileOutputStream

BufferedOutputStream等

字符流的子类有

BufferedReader

Writer

都实现了Closeable,Flushable,Appendable,这些接口,程序中输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件,

java中的阻塞式方式是指在程序调用改方法时,必须等待输入数据可用或者检测到输入结束或者抛出异常,否则程序会一直停留在该语句上,

不会执行下面的语句,比如read()和readLine()方法.

标签:面试题,Java,HashMap,Day05,链表,接口,序列化,字节
From: https://www.cnblogs.com/carney/p/17034085.html

相关文章

  • 一篇文章彻底弄懂 Java 反射的使用
    文章引用自:一篇文章彻底弄懂Java反射的使用原文链接:https://zhuanlan.zhihu.com/p/378412723说到Java反射,必须先把Java的字节码搞明白了,也就是 Class ,大 Class......
  • 一篇文章彻底搞懂Java的Class到底是什么
    文章引用自:一篇文章彻底搞懂Java的大Class到底是什么原文链接:https://zhuanlan.zhihu.com/p/372418927作者在之前工作中,面试过很多求职者,发现有很多面试者对Java的 Clas......
  • Java 流程控制
    Java流程控制用户交互Scannerjava.util.Scanner是Java5的特征Scanner类是用于获取用户的输入通过Scanner类的next()和nextLine()方法获取输入的字符串读取前需要使......
  • JavaScript-DOM-节点操作
    JavaScript-DOM-节点操作目录JavaScript-DOM-节点操作5.节点操作5.1为什么学节点操作5.2节点概述5.3节点层级6.工作中常见操作1.排他思想(算法)2.百度换肤效果3.表格隔......
  • java学习笔记(九)---maven
    1、概念maven是提供专门用于管理和构建Java项目的工具,它的主要功能有:提供了一套标准化的项目结构 提供了一套标准化的构建流程(编译,测试,打包,发布...)提供了一套依赖管......
  • JavaWeb三大组件之监听器-Listener
    1.JavaWeb三大组件Servlet程序,Listener监听器,Filter过滤器2.Listener监听器监听某种变化(生命周期监听,属性变化监听),做出反应--触发对应方法完成相应任务;监听器实现接口......
  • JavaScript学习笔记—数组方法slice和splice
    (1)slice()方法定义:从已有的数组返回选定的元素语法:arrayObject.slice(start,end)start:必选。截取开始位置的索引,包含开始索引end:可选。截取结束位置的索引,不包含结......
  • 函数传参 Java JavaScript python 都是按值传递的
    实验代码如下:JavapythonJavaScript:......
  • JAVA基础之循环
    一.For循环1.结构 语句最简形式为: for(;;) 2.一般形式为: for(单次表达式;条件表达式;末尾循环体) { 中间循环体; }for(初始化;布尔表达式;更新){......
  • 【Java】基本数据类型 及 == 与 equals 方法的区别
     (159条消息)java判断基本数据类型_Java基础:基本数据类型及==与equals方法的区别_vivi可爱多的博客-CSDN博客 Java中的数据类型在内存的存储原理(1)基本数据......