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 的标准接口有哪些,分别有什么作用?

  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 知识点整理》

大数据——Java 知识点整理相关推荐

  1. 大数据——Flink 知识点整理

    目录 1. Flink 的特点 2. Flink 和 SparkStreaming 的对比 3. Flink 和 Blink.Alink之间的关系 4. JobManager 和 TaskManage ...

  2. 各大公司java面试整理对应问题博客整理

    各大公司java面试整理对应问题博客整理! 阿里 分库分表 数据库中间件 MyCAT是一个强大的数据库中间件,不仅仅可以用作读写分离,以及分表分库.容灾管理,而且可以用于多租户应用开发.云平台基础设施 ...

  3. 史上最全大数据学习资源整理

    史上最全大数据学习资源整理 ----------------------------------------------------------------------------------- 转载 ...

  4. 山东大学软件学院数据可视化知识点整理

    数据可视化知识点整理 数据可视化主要工具: Google Refine Echarts Pyecharts Tableau R Rrocessing D3(JS) 主要编程工具: Python Lec ...

  5. 史上最全“大数据”学习资源整理

    转自:史上最全"大数据"学习资源整理 ------------ 资源列表: 关系数据库管理系统(RDBMS) MySQL:世界最流行的开源数据库; PostgreSQL:世界最先进 ...

  6. 大数据 java 代码示例_功能Java示例 第7部分–将失败也视为数据

    大数据 java 代码示例 这是称为" Functional Java by Example"的系列文章的第7部分. 我在本系列的每个部分中开发的示例是某种"提要处理程序 ...

  7. 大数据 java 代码示例_Java变量类型与示例

    大数据 java 代码示例 Java变量 (Java variables) Variables are the user-defined names of the memory blocks, and ...

  8. 大数据+java交流微信群

    一起进行大数据+Java的知识传递与分享,快来加入吧!! 本人程序员,发现身边很多朋友经常会问一些技术问题,特建立微信群供全国各地的朋友一起讨论学习,资源共享,本人也积累了很多专业性的资料,不定期分享 ...

  9. 一起重新开始学大数据-java篇-DAY01-第一个java代码helloworld

    一起重新开始学大数据-java篇 -DAY01-第一个java代码helloworld 计算机: 按照指定程序,自动高速处理海量数据 计算机组成 硬件和软件组成 硬件: cpu:计算 内存:提供计算资 ...

最新文章

  1. 规范化制度保障安擎高品质产品
  2. rabitMQ优缺点
  3. 10.4-全栈Java笔记:常用流详解(二)
  4. c++buider2010 中.dfm无法打开设计界面的解决方法
  5. Android编译系统入门(二)
  6. Python学习笔记三
  7. [bzoj1059] [ZJOI2007]矩阵游戏
  8. angularjs中按回车事件_在AutoCAD中巧用空格键或回车键,制图效率高
  9. ubuntu 是基于debian gnu/linux,在 Ubuntu 或其它 GNU/Linux 系统下安装 Debian
  10. 数据结构学习(2):汉诺塔问题
  11. Markdown语法 (中文版)
  12. 无锁队列详细分解 — 顶层设计
  13. golang 对象转json
  14. 用Google地图来做出哈比人五军之战
  15. 书单|互联网企业面试案头书之运营篇
  16. 北航数理统计大作业_数学146分上岸复旦大学大数据学院统计学,备考经验分享!...
  17. 第二课,绘制几何图形
  18. 二叉树后序遍历非递归算法(详解)
  19. STM32 HAL库之IIC
  20. python 模拟微信浏览器请求_2020-03-06 python selenium 模拟访问网页检查更新并微信通知...

热门文章

  1. python脱离pc自动化_我用几行 Python 自动化脚本完美解决掉了小姐姐的微信焦虑感...
  2. 清洗的皮鞋面为什么会出现龟纹呢?
  3. 别再推荐使用 jsoncpp 了
  4. 美国“顺丰”Q1财报超预期,联邦快递能否甩开亚马逊机队?
  5. sphinxclient 查找大于_Dreamweaver dedecms搜索提示“SphinxClient类找不到”解
  6. 如何理解直线的投影方向?
  7. 将H5站点打包成app完美攻略
  8. 交换机与路由器技术-01-以太网MAC和以太网帧
  9. 剿灭“隐形刺客”——Desktop.ini维金(Worm.Viking.m)病毒的变种
  10. leetcode 18. 四数之和