大数据——Java 知识点整理
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:1179395false
代码解读:很显然“通话”和“重地”的 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 的标准接口有哪些,分别有什么作用?
- Driver 接口
- 定义数据库驱动对象应该具备的一些能力
- 加载驱动:Class.forName("com.mysql.jdbc.Driver");
- Connection 接口
- 创建与数据库的连接(会话)对象
- 连接数据库Connection conn = DriverManager.getConnection(String url, String user, String password);
- Statement 接口
- sql语句编译,有SQL注入风险
- PreparedStatement 接口
- sql语句预编译
- PreparedStatement pst = conn.preparestatement(String sql);
- ResultSet 接口
- 返回数据结果集
- 通过对结果集遍历,得到结果数据
- CallableStatement 接口
- 用于执行SQL存储过程的接口
22. Error 和 Exception区别
- Error:错误
- 硬件或系统级的问题,无法解决,只能捕获记录
- Exception:异常
- 可以捕获,可以解决或者尝试解决
- 异常分类:
- 运行时异常
- 编译异常
- 自定义异常
- 异常解决方案:
- 程序逻辑:运行时异常
- 抛出:编译异常
- 被应用层存在多个方法都存在异常问题,而应用层中需要对被应用层的多个存在异常的方法进行组合使用
- 捕获:编译异常
- 单一问题,或无处可抛(私有方法可以抛出,公共方法必须对异常捕获处理)
往期面试题整理:
《大数据——MySQL 知识点整理》
《大数据—— Hadoop 知识点整理》
《大数据—— Hive 知识点整理》
《大数据—— HBase 知识点整理》
《大数据—— Scala 知识点整理》
《大数据—— Spark Core 知识点整理》
《大数据——Flink 知识点整理》
大数据——Java 知识点整理相关推荐
- 大数据——Flink 知识点整理
目录 1. Flink 的特点 2. Flink 和 SparkStreaming 的对比 3. Flink 和 Blink.Alink之间的关系 4. JobManager 和 TaskManage ...
- 各大公司java面试整理对应问题博客整理
各大公司java面试整理对应问题博客整理! 阿里 分库分表 数据库中间件 MyCAT是一个强大的数据库中间件,不仅仅可以用作读写分离,以及分表分库.容灾管理,而且可以用于多租户应用开发.云平台基础设施 ...
- 史上最全大数据学习资源整理
史上最全大数据学习资源整理 ----------------------------------------------------------------------------------- 转载 ...
- 山东大学软件学院数据可视化知识点整理
数据可视化知识点整理 数据可视化主要工具: Google Refine Echarts Pyecharts Tableau R Rrocessing D3(JS) 主要编程工具: Python Lec ...
- 史上最全“大数据”学习资源整理
转自:史上最全"大数据"学习资源整理 ------------ 资源列表: 关系数据库管理系统(RDBMS) MySQL:世界最流行的开源数据库; PostgreSQL:世界最先进 ...
- 大数据 java 代码示例_功能Java示例 第7部分–将失败也视为数据
大数据 java 代码示例 这是称为" Functional Java by Example"的系列文章的第7部分. 我在本系列的每个部分中开发的示例是某种"提要处理程序 ...
- 大数据 java 代码示例_Java变量类型与示例
大数据 java 代码示例 Java变量 (Java variables) Variables are the user-defined names of the memory blocks, and ...
- 大数据+java交流微信群
一起进行大数据+Java的知识传递与分享,快来加入吧!! 本人程序员,发现身边很多朋友经常会问一些技术问题,特建立微信群供全国各地的朋友一起讨论学习,资源共享,本人也积累了很多专业性的资料,不定期分享 ...
- 一起重新开始学大数据-java篇-DAY01-第一个java代码helloworld
一起重新开始学大数据-java篇 -DAY01-第一个java代码helloworld 计算机: 按照指定程序,自动高速处理海量数据 计算机组成 硬件和软件组成 硬件: cpu:计算 内存:提供计算资 ...
最新文章
- 规范化制度保障安擎高品质产品
- rabitMQ优缺点
- 10.4-全栈Java笔记:常用流详解(二)
- c++buider2010 中.dfm无法打开设计界面的解决方法
- Android编译系统入门(二)
- Python学习笔记三
- [bzoj1059] [ZJOI2007]矩阵游戏
- angularjs中按回车事件_在AutoCAD中巧用空格键或回车键,制图效率高
- ubuntu 是基于debian gnu/linux,在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
- 数据结构学习(2):汉诺塔问题
- Markdown语法 (中文版)
- 无锁队列详细分解 — 顶层设计
- golang 对象转json
- 用Google地图来做出哈比人五军之战
- 书单|互联网企业面试案头书之运营篇
- 北航数理统计大作业_数学146分上岸复旦大学大数据学院统计学,备考经验分享!...
- 第二课,绘制几何图形
- 二叉树后序遍历非递归算法(详解)
- STM32 HAL库之IIC
- python 模拟微信浏览器请求_2020-03-06 python selenium 模拟访问网页检查更新并微信通知...
热门文章
- python脱离pc自动化_我用几行 Python 自动化脚本完美解决掉了小姐姐的微信焦虑感...
- 清洗的皮鞋面为什么会出现龟纹呢?
- 别再推荐使用 jsoncpp 了
- 美国“顺丰”Q1财报超预期,联邦快递能否甩开亚马逊机队?
- sphinxclient 查找大于_Dreamweaver dedecms搜索提示“SphinxClient类找不到”解
- 如何理解直线的投影方向?
- 将H5站点打包成app完美攻略
- 交换机与路由器技术-01-以太网MAC和以太网帧
- 剿灭“隐形刺客”——Desktop.ini维金(Worm.Viking.m)病毒的变种
- leetcode 18. 四数之和