JAVA 高级篇 集群搭建及工具使用 熟悉JVM 常用算法和数据结构 计算机网络知识和操作系统
目录
身为大数据开发工程师,对数据从采集、接入、流处理、批处理到数据存储、数据分析和数据可视化等一整套流程都要了解,包括的组件非常多。
做数据流处理需要掌握spark、flink、storm、kafka stream等。
做批处理需要掌握hadoop、hive等,数据存储需要掌握hdfs、hbase、redis、tsdb、es等,各个公司会基于这些组件针对部门特有的业务进行二次开发。
Hadoop集群搭建
CDH 集群搭建
IDEA 操作
- 常用快捷键
- Ctrl-N 再键入类的名字可以快速地在编辑器里打开任何一个类
- Ctrl-Shift-N 打开工程中的普通文件
- Ctrl-D 复制当前行
- Ctrl-Y 删除当前行
- Ctrl-F 查找
- Ctrl-R 替换
- Ctrl+P 显示方法的参数信息
- Ctrl+Alt+V 自动创建变量
- Ctrl+Alt+L 格式化代码
- ALT+INSERT 生成get/set
- idea常见问题
- idea项目所需要的依赖下载过程中,有下载动作,但是下载失败
- 原因:在依赖坐标没有错误的情况下,一般是网速导致的。
- 解决办法: 反复重试,或到本地仓库将临时文件删除再试。一般在公司开发网速正常很少碰到。
- idea项目所需要的依赖下载过程中,无下载动作,直接下载失败
- 解决办法:一般是当前idea版本和所使用的maven版本不兼容导致的,可尝试更换maven版本。
JAVA 基本数据类型
基本数据类型就是Java语言的一部分,分别是byte, short, int, long, char, float, double, boolean.
整型:byte, short, int, long
字符型:char
浮点型:float, double
布尔型:boolean
- 整形
Java中最小的计算单元为**字节**,1字节=8位(bit),Java中整型数据属于**有符号数**,即第一个bit位为0表示正整数,第一个bit位为1表示负整数。
- byte
byte属于Java中的整型,长度为1字节8bit,取值10000000(-128)到 01111111(127),变量初始化默认值为0,包装类Byte.
- short
short属于Java中的整型,长度为2字节16bit,取值10000000 00000000(-32768)到 01111111 11111111(32767),变量初始化默认值为0,包装类Short.
- int
int属于Java中的整型,长度为4字节32bit,取值-2^31 (-2,147,483,648)到 2^31-1(2,147,483,647),变量初始化默认值为0,包装类Integer
- long
long属于Java中的整型,长度为8字节64bit,取值-2^63 (-9,223,372,036,854,775,808)到 2^63-1(9,223,372,036,854,775,8087),变量初始化默认值为0或0L,包装类Long
- 浮点型
- float
float属于Java中的浮点型,也叫单精度浮点型,长度为4字节32bit,变量初始化默认值0.0f,包装类Float
- double
double属于Java中的浮点型,也叫双精度浮点型,长度为8字节64bit,变量初始化默认值0.0d,包装类Double
- 字符型
- char
char属于java中的字符型,占2字节16bit,可以赋值单字符以及整型数值, 变量初始化无默认值,包装类Character。
- 布尔型
- boolean
在JVM中并没有提供boolean专用的字节码指令,而boolean类型数据在经过编译后在JVM中会通过int类型来表示,此时boolean数据4字节32位,而boolean数组将会被编码成Java虚拟机的byte数组,此时每个boolean数据1字节占8bit.
- Java中处理大数据问题(BigInteger、BigDecimal)
这些大数都会以字符串的形式传入。
- BigInteger
如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作。
- BigDecimal
可以使用BigDecimal的构造方法或者静态方法的valueOf()方法把基本类型的变量构建成BigDecimal对象。
将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法.
Java关键字
static 关键字
Q. 请说说static关键字,你在项目中是怎么使用的?
回答角度:作用,使用场景,案例说明
A.
表示静态,static 关键字可以用来修饰:属性、方法、内部类、代码块;
static 修饰的资源属于类级别,是全体对象实例共享的资源;
使用 static 修饰的属性,静态属性是在类的加载期间初始化的,使用类名.属性访问
String、StringBuffer、StringBuilder的区别
回答角度:异同点以及各个类使用的场景
final、finally、finalize的区别
Java 面试官:说说 final、finally、finalize 的区别
==和equals的区别
Java集合
JAVA 集合有那些接口
JAVA 集合之MAP
Hash Table和HashMap的区别
Java系列(面试必备):HashMap 和 Hashtable 的 6 个区别!
HashMap和ConcurrentHashMap的区别
HashMap和ConcurrentHashMap的知识总结
HashMap怎么解决hash冲突
HashMap中Hash冲突严重时会影响HashMap性能,该如何解决?
HashMap的大小为什么是2的幂次
HashMap的扩容
jdk1.8对HashMap的改进
在JDK1.8版本中,对数据结构做了进一步的优化,引入了红黑树。而当链表长度太长(默认超过8)时,链表就转换为红黑树.
利用红黑树快速增删改查的特点提高HashMap的性能,其中会用到红黑树的插入、删除、查找等算法
Java中HashMap底层实现原理(JDK1.8)源码分析
HashMap的key适合选用什么数据类型
同问题:为什么HashMap中String、Integer这样的包装类适合作为K?
# String、Integer等包装类的特性能够保证Hash值的不可更改性和计算准确性,能够有效的减少Hash碰撞的几率
- 都是final类型,即不可变性,保证key的不可更改性,不会存在获取hash值不同的情况
- 内部已重写了equals()、hashCode()等方法,遵守了HashMap内部的规范(不清楚可以去上面看看putValue的过程),不容易出现- Hash值计算错误的情况;
# 如果想要让自己的Object作为K应该怎么办呢?
- 重写hashCode()和equals()方法
- 重写hashCode()是因为需要计算存储数据的存储位置,需要注意不要试图从散列码计算中排除掉一个对象的关键部分来提高性能,这样虽然能更快但可能会导致更多的Hash碰撞;
- 重写equals()方法,需要遵守自反性、对称性、传递性、一致性以及对于任何非null的引用值x,x.equals(null)必须返回false的这几个特性,目的是为了保证key在哈希表中的唯一性;
ArrayList和LinkedList的区别
LinkedList 实现了 List 和 Deque 接口,一般称为双向链表;ArrayList 实现了 List 接口,动态数组;
LinkedList 在插入和删除数据时效率更高,ArrayList 在查找某个 index 的数据时效率更高;
LinkedList 比 ArrayList 需要更多的内存;
Array 和 ArrayList 有什么区别?什么时候该应 Array 而不是 ArrayList 呢?
它们的区别是:
Array 可以包含基本类型和对象类型,ArrayList 只能包含对象类型。
Array 大小是固定的,ArrayList 的大小是动态变化的。
ArrayList 提供了更多的方法和特性,比如:addAll(),removeAll(),iterator() 等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
HashSet的底层实现
同回答:HashSet是如何保证数据不可重复的?
HashSet的底层其实就是HashMap,只不过我们HashSet是实现了Set接口并且把数据作为K值,而V值一直使用一个相同的虚值来保存,我们可以看到源码:
public boolean add(E e) {
// 调用HashMap的put方法,PRESENT是一个至始至终都相同的虚值
return map.put(e, PRESENT)==null;
}
由于HashMap的K值本身就不允许重复,并且在HashMap中如果K/V相同时,会用新的V覆盖掉旧的V,然后返回旧的V,那么在HashSet中执行这一句话始终会返回一个false,导致插入失败,这样就保证了数据的不可重复性;
设计模式
Java有哪些设计模式
单例模式:饿汉式和懒汉式
类的设计
什么是面向对象
面向对象的三大特征
多态的概念
多态存在的必要条件
重载和重写
熟悉JVM
研读《深入理解Java虚拟机》这本书