大数据——Java 知识点整理

2023-11-04

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 知识点整理 的相关文章

  • java.lang.VerifyError:JVMVRFY012堆栈形状不一致;

    在 WAS 8 5 5 中部署 Maven 项目时出现以下错误 我在WAS中安装了JDK 1 6和1 7 错误500 org springframework web util NestedServletException 处理程序处理失败
  • 如何在 IDEA Intellij 上使用 Spring-boot 自动重新加载

    我写了一个基于Spring boot tomcat freemarker的项目 我运行成功 但是每当我修改一些模板和java类时 我必须重新启动服务器或使用Intellij上的 重新加载更改的类 菜单才能使更改生效 浪费很多时间 然后我尝试
  • 在 Java 中使用 Batik 检查和删除 SVG 中的属性

    这个问题基本上说明了一切 如何检查 SVG 是否具有 viewBox 属性 我正在使用蜡染库 我需要这个 因为我需要 至少 通知用户有一个 viewBox 属性 我可以删除它吗 使用 org w3c dom 类 您可以按照以下方式做一些事情
  • 从 Spring MVC XML 文件转移到 javaconfig。我真的对我的数据库 XML 文件感到困惑

    我从 Spring MVC XML 文件转移到 javaconfig 我真的对我的数据库 XML 文件感到困惑 我不知道如何让 Hibernate4 工作以及我的 JBoss JNDI 数据源工作 有人可以告诉我如何使 javaconfig
  • 最快的高斯模糊实现

    如何以最快的速度实施高斯模糊 http en wikipedia org wiki Gaussian blur算法 我要用Java来实现它 所以GPU http en wikipedia org wiki Graphics processi
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 使用 Spring 控制器处理错误 404

    I use ExceptionHandler处理我的网络应用程序抛出的异常 在我的例子中我的应用程序返回JSON回应HTTP status用于对客户端的错误响应 但是 我正在尝试弄清楚如何处理error 404返回与处理的类似的 JSON
  • 可访问数据的 Java 约定。 (公共访问器和 Getter/命名)

    通过 Java API 您会看到大量冲突的命名和实践 这让我感到非常困惑 例如 The String http grepcode com file repository grepcode com java root jdk openjdk
  • 确定序列化对象的类型

    我需要通过套接字发送消息 从用户到引擎的请求 以及从引擎到用户的响应 所以流程本质上是 serialized request Server lt network gt Client serialized response request r
  • Struts 1 到 Spring 迁移 - 策略

    我有一个legacy银行应用程序编码为Struts 1 JSP现在的要求是迁移后端 目前为 MVC to Springboot MVC 后续UI JSP 将迁移到angular Caveats 1 后端不是无状态的 2 会话对象中存储了大量
  • 在带有 Protocol Buffers 的项目中使用 Proguard 有什么特点?

    我有一个使用 Google Protocol Buffers 的项目 一旦我尝试用 ProGuard 对其进行混淆 似乎 protobuf 会导致问题 我将所有自己的类打包成mybuildedclasses jar 谷歌代码被打包成prot
  • 拆分/标记化/扫描字符串并注意引号

    Java中是否有默认 简单的方法来分割字符串 但要注意引号或其他符号 例如 给定以下文本 There s a man that live next door in my neighborhood and he gets me down Ob
  • 如何从intellij项目视图中隐藏不必要的文件?

    给定一个示例 gradle 项目 其项目结构如下所示 正如你所看到的 有很多东西你实际上不需要在想法中看到 但你需要它们存在 我知道下面被忽略的文件 文件夹类型Editor File Types但这些正在影响库和项目 idea 会在各处忽略
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • 删除 JFX 中选项卡后面的灰色背景

    So is there any way to remove the gray area behind the tab s 我尝试过用 CSS 来做到这一点 但没有找到方法 要设置 tabpane 标题的背景颜色 请在 CSS 文件中写入 t
  • 让 Hibernate 和 SQL Server 与 VARCHAR 和 NVARCHAR 良好配合

    我目前正在大型数据库的某些表中启用 UTF 8 字符 这些表已经是 MS SQL 类型 NVARCHAR 此外 我还有几个使用 VARCHAR 的字段 Hibernate 与 JDBC 驱动程序的交互存在一个众所周知的问题 例如 参见在 h
  • 如何建立与 FileZilla Server 1.2.0 的 FTPS 数据连接

    使用 Apache commons net 的 Java FTPSClient 进行会话恢复是一个已知问题 会话恢复是 FTPS 服务器数据连接所需的一项安全功能 Apache FTPSClient 不支持会话恢复 并且 JDK API 使
  • 决策树和规则引擎 (Drools)

    In the application that I m working on right now I need to periodically check eligibility of tens of thousands of object
  • mybatis:使用带有 XML 配置的映射器接口作为全局参数

    我喜欢使用 XML 表示法来指定全局参数 例如连接字符串 我也喜欢 Mapper 注释 当我尝试将两者结合起来时 我得到这个例外 https stackoverflow com questions 4263832 type interfac
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle

随机推荐

  • 密码学--CTF Crypto 总结

    密码学简介 密码学 Cryptography 一般可分为古典密码学和现代密码学 其中 古典密码学 作为一种实用性艺术存在 其编码和破译通常依赖于设计者和敌手的创造力与技巧 并没有对密码学原件进行清晰的定义 其主要包含以下几个方面 单表替换加
  • TCP与UDP

    前言 TCP和UDP是两个传输层最有代表性的传输层协议 TCP一般提供可靠的信息传输 而UDP常被用于广播和细节控制交给应用的通信传输 传输层的定义 在传输层 IP首部有一个协议字段 用来区分使用的是什么协议 用端口号进行处理的具体程序 在
  • 在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件

    目的和思路 一个Vitis IDE 裸机项目 需要将视频帧无损地保存下来 由于每帧的像素数据是 16bit 1通道的 bayer 格式 满足这一需求的图像格式似乎只有 tiff 格式 开源的tiff 库是 libtiff 而在 Vitis
  • nginx安装及部署

    下载 官方网站 https nginx org en download html Windows下安装 安装 下载后解压 切记不能含有中文路径 文件结构如图 我解压的路径就有中文 记得拷贝放置于英文目录下即可 启动 两种方法 1 直接双击该
  • C语言(函数与预处理、指针)

    一 函数与预处理 一 一维数组 1 一维数组的定义格式为 类型说明符 数组名 常量表达式 例如 int a 10 它表示定义了一个整形数组 数组名为a 有10个元素 2 在定义数组时 需要指定数组中元素的个数 方括弧中的常量表达式用来表示元
  • 基于 FFmpeg 的跨平台视频播放器简明教程(七):使用多线程解码视频和音频

    系列文章目录 基于 FFmpeg 的跨平台视频播放器简明教程 一 FFMPEG Conan 环境集成 基于 FFmpeg 的跨平台视频播放器简明教程 二 基础知识和解封装 demux 基于 FFmpeg 的跨平台视频播放器简明教程 三 视频
  • 69. Sqrt(x)

    Implement int sqrt int x Compute and return the square root of x where x is guaranteed to be a non negative integer Sinc
  • 新闻分析:解密代号A1S

    本周二SAP董事长特拉普纳 Hasso Plattner 在Software 2007会议上发言时阐述了SAP新的软件设计方法 SAP表示在过去的三年中有3000多名工程师都在运用这种新的软件设计方法在开发代号为A1S的新产品 虽然这一代号
  • HTML的input类型为hidden导致无法reset改字段的value问题

    问题关键 根据HTML规范 hidden是非ui类元素 不接受用户处理 所以form的 reset并不影响它 http stackoverflow com questions 6367793 why does the reset butto
  • 一种通用的业务监控触发方案设计

    一 背景 业务监控是指通过技术手段监控业务代码执行的最终结果或者状态是否符合预期 实现业务监控主要分成两步 一 在业务系统中选择节点发送消息触发业务监控 二 系统在接收到mq消息或者定时任务调度时 根据消息中或者任务中的业务数据查询业务执行
  • go-micro 在linux下安装出现service auth not found

    1 安装micro linux下执行该命令 wget q https raw githubusercontent com micro micro master scripts install sh O bin bash 2 micro se
  • vue 实现md5、base64加密

    背景 前端使用密码登录的时候 一般都会使用密文传输 否则控制台就能看到密码 具体实现如下 使用 md5 进行加密 1 安装 cnpm install save js md5 2 在 main js 全局引用 import md5 from
  • pycharm console 报错

    描述 pycharm的console本来用的好好地 但是我也不知道自己改了啥 结果报错了 报错 Error Console process terminated with error Traceback most recent call l
  • Inheritance___CH_17

    17 1 Introduction to inheritance A hierarchy is a diagram that shows how various objects are related Most hierarchies ei
  • 华为交换机配置链路聚合

    文章目录 1 拓扑图 2 任务描述 3 Sw1配置 4 Sw2配置 5 Lacp模式链路聚合演示 https blog csdn net qq 45042462 article details 120938052 1 拓扑图 2 任务描述
  • 正则表达式校验版本号

    需求 校验版本号 规则 X Y Z 1 99 0 99 0 99 要求 1 必须是三位 例如 x x x的形式 2 每位x的范围分别为1 99 0 99 0 99 3 不允许的情况 0 x x 01 x x x 0x x x 00 x x
  • Python根据Excel名单实现文件夹下文件批量改名

    班级收集截图 通过缓存快速获取图片 可是文件夹内的文件是乱码 所以采用Python进行批量改名操作 import os import xlrd count 1 path C Users White Desktop 18 文件所在文件夹 ex
  • 排查Linux服务器是否被入侵步骤

    作为一个Linux运维工程师 能够清晰地鉴别异常机器是否已经被入侵了显得至关重要 以下是结合centos7 9操作系统进行排查Linux操作系统是否被入侵 其他Linux发行版的操作类似 1 入侵者可能会删除机器的日志信息 可以查看日志信息
  • No projects are found to import 问题如何解决

    在myeclipse中导入项目遇到 No projects are found to import 导致原因 项目目录中没有 project或者 classpath 解决方案 1 project classpath直接拷贝到相应位置即可 2
  • 大数据——Java 知识点整理

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