大数据——Java 知识点整理

2023-10-28

1. JDK 和 JRE 有什么区别?

  • JDK:Java Development Kit 的简称,java开发工具包,提供了java的开发环境和运行环境。
  • JRE:Java Runtime Environment 的简称,java运行环境,为java的运行提供了所需环境。

具体来说,JDK其实包含了JRE,同时还包含了编译java源码的编译器javac,还包含了许多java程序调试和分析的工具。要运行java程序,只需要安装JRE就可以了,如果需要编写java程序,则还需要安装JDK。

2. java 的基本类型、包装类型有哪些?

  • 基本类型:boolean char byte short int long float double
  • 包装类型:Boolean Character String Byte Short Integer Long Float Double 

3. final 在 java 中有什么作用?

  • Final 修饰的类叫最终类,该类不能被继承
  • final 修饰的方法不能被重写
  • final 修饰的变量叫常量,常量必须初始化,初始化之后值不能被修改

4. 对于String的理解

首先String不属于基本类型,其次String类由final关键字修饰,表示不可被继承,一旦创建,不可修改。平常对String的操作实际在底层代码是由StringBuilder完成的

5. == 和 equals 的区别是什么?

== 解读

对于基本类型和引用类型 == 的作用效果是不同的,如下所示:

  • 基本类型:比较的是值是否相同;
  • 引用类型:比较的是引用是否相同;

代码示例:

String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true

代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也是 true,而 new String()方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。

equals 解读

equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals 方法,把它变成了值比较。看下面的代码就明白了。

首先来看默认情况下 equals 比较一个有相同值的对象,代码如下:

class Cat {
    public Cat(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Cat c1 = new Cat("ketty");
Cat c2 = new Cat("ketty");
System.out.println(c1.equals(c2)); // false

输出结果出乎我们的意料,竟然是 false?这是怎么回事,看了 equals 源码就知道了,源码如下:

public boolean equals(Object obj) {
		return (this == obj);
}

 原来 equals 本质上就是 ==。

那问题来了,两个相同值的 String 对象,为什么返回的是 true?代码如下:

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2)); // true

同样的,当我们进入 String 的 equals 方法,找到了答案,代码如下:

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}

原来是 String 重写了 Object 的 equals 方法,把引用比较改成了值比较。

总结 :== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。

6. HashMap 的底层结构

JDK1.7之前:

  • HashMap的底层结构为数组+链表
  • 创建时初始化容量为16

JDK1.8之后:

HashMap的底层结构为数组+链表+红黑树

创建时不初始化,存入第一个值是初始化 容量为16

通过键的hashcode与容量值取余,得到键的存放节点,如果该节点上无其他键,则直接存放,若为同键,则值覆盖,若为不同键,则按链表存储,当该节点下存放的键超过7个时,则按红黑树存储

7. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不对,两个对象的hashCode()相同,equals()不一定为true。

代码示例:

String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1:%d | str2:%d",  str1.hashCode(),str2.hashCode()));
System.out.println(str1.equals(str2));

执行的结果

str1:1179395 | str2:1179395

false

代码解读:很显然“通话”和“重地”的 hashCode() 相同,然而 equals() 则为 false,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等。

8. 集合框架的特点

List:有序,可重复

Set:无序,不可重复

Map:无序,键不重复,值可重复

9. 集合框架底层结构的优缺点

类别 优点 缺点
数组 有下标索引,遍历快

中间插入和删除开销大

长度固定,不利于扩展

链表 插入和删除效率高 遍历的效率低
红黑树 二分查找

平衡算法开销大

区间检索效率低

HashMap 键值映射         Hash冲突

10. String、StringBuffer、StringBuilder对比

String:是不可变对象,每次对String类型进行改变其实都等同于生成一个新的String对象

StringBuffer:可变字符串,线程安全

StringBuilder:可变字符串,单线程,线程不安全

性能:StringBuilder>StringBuffer>String

11. String 类的常用方法都有哪些?

  • index():返回指定字符的索引
  • charAt():返回指定索引处的字符
  • replace():字符串替换
  • trim():去除字符串两端空白
  • split():分割字符串,返回一个分割后的字符串数组
  • getBytes():返回字符串byte类型数组
  • length():返回字符串长度
  • toLowerCase():将字符串转成小写字母
  • toUpperCase():将字符串转成大写字符
  • substring():截取字符串
  • equals():字符串比较

12. Java OOP 的特性和理解

继承:

  • 优点:允许和鼓励重用,面向修改是封闭的,面向扩展是开放的
  • 缺点:强耦合,单根继承
  • 父类的哪些内容不能被继承:构造方法、被 private 修饰的方法不能被子类访问

封装:

  • 把过程和数据包装起来

多态:

  • 继承同一接口的类的方法可以有多种实现方式
  • 重载:同类中,方法名相同,参数不同
  • 重写:子类重写父类的同名同参方法

13. 对抽象类 abstract 和接口 interface 的理解

抽象类 abstract:

  • 抽象类可以和不同类一样有属性,构造方法,普通方法
  • 抽象类可以有抽象方法,但不同类不可以有抽象方法
  • 继承抽象类的子类必须重写抽象方法,除非子类也是抽象类
  • 抽象类不可以直接实例化

接口 interface

  • 不可以像普通类一样有属性,构造方法,不同方法
  • 接口中的变量默认为公共的静态常量
  • 接口中的方法默认为公共的抽象方法
  • 子类必须重写接口中的所有方法,除非子类为抽象类或者接口
  • 不可以直接实例化

14. Java中正则的应用

  • 正则的理解:字符串符合自定义的规则
  • 应用:字符串提取、验证、提取、分割等

15. 对于线程的理解和应用

进程是运行程序,线程是进程内部的执行序列

应用:多线程并发,提高执行的性能(例如hadoop 按行读取时是并发执行的)

16. 对于锁的理解和应用

理解:在并发编程中,多个线程访问同一对象,为了保证数据的一致性,需要上锁

应用:

  • 独占锁:可以进行读写操作
  • 共享锁:只有读的权限
  • 互斥锁:同一时间只允许一个访问者对其访问
  • 读写锁:写只允许一个,读可以有多个

17. java中流分为几种?

按方向来分:输入流(input)、输出流(output)

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

按功能来分:节点流和处理流

  • 节点流:直接面向数据源,并封装对于数据源基本操作的流
  • 处理流:以节点流或其他处理流为构造参数,扩展对于构造对象的行为

18. Java中是如何实现对象的序列化和反序列化的?

  • 序列化:将对象写入IO流
  • 反序列化:从IO流中恢复对象
  • 实现序列化的两种方式:
    • 实现Seriazable接口或者Externalizable接口
    • 使用Externalizable接口必须实现writeExternal和ReadExternal方法
  • 如果想指定字段不被序列化,可以加transient关键词修饰,反序列化时会赋予默认值null/0/false

19. Files的常用方法有哪些?

  • Files.exists():检查文件路径是否已存在
  • Files.createFile():创建文件
  • Files.createDirectory():创建文件夹
  • Files.delete():删除一个文件或路径
  • Files.copy():复制文件
  • Files.move():移动文件
  • Files.size():查看文件个数
  • Files.read():读取文件
  • Files.write():写入文件

20. 谈谈关于 Java 反射的理解和应用

  • 理解:java 代码编译后会生成 .class 文件,反射是通过字节码文件找到一个类、类的属性和方法。
  • 反射的实现:
    • Class:获取类的对象
    • Constructor:获取类的构造方法
    • Field:获取类的属性
    • Method:获取类的方法
  • 应用:jdbc获取指定类的所有属性

21. jdbc 的标准接口有哪些,分别有什么作用?

  1. Driver 接口
    1. 定义数据库驱动对象应该具备的一些能力
    2. 加载驱动:Class.forName("com.mysql.jdbc.Driver");
  2. Connection 接口
    1. 创建与数据库的连接(会话)对象
    2. 连接数据库Connection conn = DriverManager.getConnection(String url, String user, String password);
  3. Statement 接口
    1. sql语句编译,有SQL注入风险
  4. PreparedStatement 接口
    1. sql语句预编译
    2. PreparedStatement pst = conn.preparestatement(String sql);
  5. ResultSet 接口
    1. 返回数据结果集
    2. 通过对结果集遍历,得到结果数据
  6. CallableStatement 接口
    1. 用于执行SQL存储过程的接口

22. Error 和 Exception区别

  • Error:错误
    • 硬件或系统级的问题,无法解决,只能捕获记录
  • Exception:异常
    • 可以捕获,可以解决或者尝试解决
    • 异常分类:
      • 运行时异常
      • 编译异常
      • 自定义异常
    • 异常解决方案:
      • 程序逻辑:运行时异常
      • 抛出:编译异常
        • 被应用层存在多个方法都存在异常问题,而应用层中需要对被应用层的多个存在异常的方法进行组合使用
      • 捕获:编译异常
        • 单一问题,或无处可抛(私有方法可以抛出,公共方法必须对异常捕获处理)

 往期面试题整理:

《大数据——MySQL 知识点整理》

《大数据—— Hadoop 知识点整理》 

《大数据—— Hive 知识点整理》 

《大数据—— HBase 知识点整理》 

《大数据—— Scala 知识点整理》

《大数据—— Spark Core 知识点整理》

《大数据——Flink 知识点整理》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据——Java 知识点整理 的相关文章

  • Eclipse 中的 Java 构建路径问题

    在 Eclipse 中 我有一个与我的构建路径相关的错误 错误 Project XX is missing required library middlegen 2 1 jar 但该库在构建路径配置之前被删除 是不是缓存或者其他方面有问题
  • 如何知道 HTTP 服务器何时完成发送数据

    我正在开发一个面向浏览器 代理的项目 我需要下载网页 向 Web 服务器发送自定义 HTTP 请求后 我开始监听服务器响应 读取响应时 我检查响应标头中的 Content Length row 如果我得到其中之一 很容易确定服务器何时完成发
  • 有没有一种干净的方法将泛型类型的类分配给变量?

    鉴于此代码 List
  • 在 Java 中将字符串复制到文件的开头

    我想将一个字符串写入文件的开头 我该怎么做 我根本不知道如何添加字符串 这就是我到目前为止所做的 public static void prepend String filename String data throws IOExcepti
  • 如何增加使用 SAX 解析 XML 文件的entityExpansionLimit

    我正在尝试使用 Java 中的 SAX 解析器解析一个 1 23 GB 的 XML 文件 我使用的是 Mac 操作系统和 JDK 1 7 0 51 不幸的是 我收到以下错误 The pasrser has encountered more
  • 将 Swing 集成到简单的文本冒险游戏中

    我对 Java 中的一些中级概念相当陌生 最近 我制作了一款名为 DazzleQuest 的文本冒险游戏 它完全在开发者控制台 终端中运行 它涉及到我的朋友作为角色 所以我想向他们展示它 并通过将命令行的功能和控制台的输出转移到一个简单的
  • rmi类找不到异常

    我使用 java rmi 编写了一个简单的项目并导出到可执行 jar 文件 当我尝试运行它时 有时会出现异常 有时会起作用 当我指定 Djava rmi server codebase file serverClasses 时 它似乎没有正
  • 控制启动时的竞争条件

    我有一些代码想要执行一些一次性初始化 但这段代码没有明确的生命周期 因此在初始化完成之前 我的逻辑可能会被多个线程调用 所以 我想基本上确保我的逻辑代码 等待 直到初始化完成 这是我的第一次剪辑 public class MyClass p
  • 如何在 HashiCorp Vault 中安全地存储 Spring Boot 应用程序的机密?

    我已阅读以下教程 保险库配置 https spring io guides gs vault config 好的 我们安装了 Vault 服务器并放置了 2 对秘密属性 vault kv put secret gs vault config
  • 在字节数组上进行右位旋转/循环移位的最快方法是什么

    如果我有数组 01101111 11110000 00001111 111 240 15 移位 1 位的结果是 10110111 11111000 00000111 183 248 7 数组大小不固定 移位范围为 1 到 7 含 目前我有以
  • 在 XSSF 工作簿上设置密码保护

    我想为使用 poi 3 14 创建的 xlsx 文件添加密码保护 该文档声称 这是可能的 http poi apache org cryption html http poi apache org encryption html 使用我尝试
  • 异步不适用于控制器的抽象超类方法

    我有一个BaseRestControllerRest 控制器扩展的类 它有一个我想异步运行的方法 public abstract class BaseRestController Async someThreadPoolTaskExecut
  • toArray 与预先确定大小的数组

    使用时ar toArray new String ar size 安卓工作室3 2 1警告预先确定大小的数组并建议空数组 有两种方式将集合转换为数组 使用 预先确定大小的数组 如 c toArray new String c size 或使
  • CompletableFuture SupplyAsync

    我刚刚开始探索 Java 8 的一些并发特性 让我有点困惑的一件事是这两个静态方法 CompletableFuture
  • 在Linux中执行jar文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我创建了一个可执行的 Java jar 文件 也就是说 我将 java 程序正确打包到 jar 文件中 包括 META INF MANIFEST 文件
  • GSSAPI 中的 javax.naming.AuthenticationException

    我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定 我收到此错误 javax naming AuthenticationException GSSAPI 根异常是 javax security sasl SaslException
  • Thread.interrupt() 和 Thread.interrupted() 到底是如何工作的? [复制]

    这个问题在这里已经有答案了 从设置线程状态的角度来看 我不清楚这两种方法 Java 文档说 Thread interrupt 设置线程中断状态标志 调用 Thread interrupted 方法给出线程的状态并清除该标志 当这在实际场景中
  • 不幸的是 Project_Name 已停止

    我有一个简单的应用程序 您可以在文本视图中输入文本并按提交 它会在另一个活动中显示文本 然而 当我按下提交时 给我消息 不幸的是 发送已停止 我查看了SO上的其他线程 但是不幸的是 myfirstproject 在 java 中停止工作错误
  • 确保 MAVEN_HOME 设置正确

    这里是 Java 和 Maven 菜鸟 使用 OSX 10 8 并使用 HomeBrew 安装 Maven 1 如果我说which mvn我会得到这个 usr local bin mvn 2 如果我说echo MAVEN HOME我不会得到
  • 项目级别的@PowerMockIgnore

    在 Maven 中运行时 我的 powermock 测试用例出现以下错误 java lang LinkageError loader constraint violation loader instance of org powermock

随机推荐

  • chatgpt赋能python:Python重写父类方法:在OOP编程中的应用

    Python重写父类方法 在OOP编程中的应用 在Python的面向对象编程范式中 继承是一种非常重要的概念 当我们声明一个类时 我们可以通过继承来扩展类的功能并避免重复编写代码 在这个过程中 很可能你会碰到需要重写父类方法的情况 本篇文章
  • java输出1-100之间不能被5整除的数,每五个一行

    public class HomeWork06 public static void main String args int count 0 for int i 1 i lt 100 i if i 5 0 System out print
  • 剑指 Offer II 033. 变位词组&剑指 Offer II 035. 最小时间差 -做题总结和心得(剑指offer进阶-哈希表部分)

    剑指 Offer II 033 变位词组 该题解法是hash sort 答案是评论区大佬写的 大体思路 创建一个哈希表 再将每个字符串变成字符数组 排序后若哈希表里不存在排序后的字符串 则创建索引 然后将原字符串放进对应索引的数组里 cla
  • cartographer 代码思想解读(7)-位姿估计器PoseExtrapolator实现

    cartographer 代码思想解读 7 位姿估计器PoseExtrapolator实现 pose extrapolator类定义 插入IMU数据 AddImuData 插入里程计数据 AddOdometryData UpdateVelo
  • Plotly可视化:TypeError: box() got an unexpected keyword argument ‘box_color‘

    一 问题描述 我用Plotly库进行可视化 import plotly express as px category orders month stage month end month middle month start fig px
  • C++ 鼠标点击的获取

    C 鼠标点击 首先一个比较常用的宏定义如下 define KEY DOWN VK NONAME GetAsyncKeyState VK NONAME 0x8000 1 0 使用KEY DOWN 鼠标事件 可以方便获取很多鼠标的事件 鼠标各个
  • 设计模式-----工厂模式

    一 工厂模式简介 工厂模式分为简单工厂模式 工厂方法模式和抽象工厂模式 它们都属于设计模式中的创建型模式 其主要功能都是帮助我们把对象的实例化部分抽取了出来 目的是降低系统中代码耦合度 并且增强了系统的扩展性 二 简单工厂模式 简单工厂模式
  • 【最新】如何降低深度强化学习研究的计算成本(Reducing the Computational Cost of DeepRL)...

    深度强化学习实验室 官网 http www neurondance com 论坛 http deeprl neurondance com 人们普遍认为 将传统强化学习与深度神经网络相结合的深度强化学习研究的巨大增长始于开创性的DQN算法的发
  • C# 对西门子1200PLC 的优化过的DB块进行符号寻址

    最近一直在学习C 一直想利用C 对西门子的PLC的优化DB块进行数据读取 因为S7通讯只支持绝对地址 这样的话 对PLC端编程很不友好 后来发现atvise这个小软件 发现它能够符号寻址西门子PLC 然后通过OPC转发出去 这样的话 我就在
  • 《现代密码学教程》

    第一章 密码学概论 第二章 密码学基础 第三章 古典密码体制 第四章 分组密码 第五章 序列密码 第六章 Hash密码 第七章 公钥密码体制 第八章 数字密码签名 第九章 密码协议 第十章 密钥管理
  • 对象池的简单应用

    对象池呦 对象池里只有一个预制体 队列对象池 对象池里面有多个预制体 创建和销毁的伪代码 代码 测试功能 做个预制体吧 开始测试 对象池的概念 对象池是个什么东西呢 对象池是用来管理对象的一个池子 当一个物体需要大量的创建和删除时 由于函数
  • 2021年1月,DB-engines数据库排名

    2021年1月份 排行前10的数据库分别为 Oracle MySQL Microsoft SQL Server PostgreSQL MongoDB IBM Db2 Redis Elasticsearch SQLite Cassandra
  • 7.基于STM32C8T6的四旋翼无人机的飞控制作----实践操作2,AD电路板绘制-原理图库绘制

    原理图库和封装库准备 建立对应关系 Altium上绘制电路板有三种库 还有一种是集成库 不予以介绍 原理图库和封装库都可以直接用现成的库直接添加库 也可以完全自己绘制 也可以自己绘制其中一部分 另一部分直接拷贝别的库里面的元件 原理图库sc
  • Java里的包装类型

    Java里的包装类型 其实也就那么几个 基础数据类型 包装类型 和面向过程的编程不同 Java里 一切皆对象 但是就有那么一些例外 就是常见的int char boolean float double byte short long 八大基
  • 【专注力】如何打完游戏后只用15秒就进入学习状态

    教你如何打完游戏后只用15秒就进入学习状态
  • java基础语法

    Java基础语法 注释 单行注释 注释一行 多行注释 注释多行 文档注释 标识符 字母 数字 下划线 数字不能开头 数据类型扩展及面试题讲解 整数 二进制 0b开头 八进制 十进制 十六进制表示及计算问题 如 int a 10 十进制 10
  • Linux其实也是时间管理大师——掌握crontab

    引言 欸乃一声山水绿 回看天际下中流 岩上无心云相逐 勿埋我心 做网站的哥们都有一个共同的习惯 那就备份网站的数据 现在宝塔自带的备份也还可以 但是如果自己想要定时运行自定义脚本呢 那就需要用到Linux的时间管理大师了 crontab L
  • eigen常用操作

    基本操作 Eigen Matrix
  • TCP/IP协议栈模型分析

    一 TCP IP协议 标准TCP IP协议是用于计算机通信的一组协议 通常被称为TCP IP协议栈 以它为基础组建的互联网是目前国际上规模最大的计算机网络 正因为互联网的广泛应用 使得TCP IP成为了事实上的网络标准 TCP IP传输协议
  • 大数据——Java 知识点整理

    1 JDK 和 JRE 有什么区别 JDK Java Development Kit 的简称 java开发工具包 提供了java的开发环境和运行环境 JRE Java Runtime Environment 的简称 java运行环境 为ja