JAVA 高级篇
集群搭建及工具使用
身为大数据开发工程师,对数据从采集、接入、流处理、批处理到数据存储、数据分析和数据可视化等一整套流程都要了解,包括的组件非常多。
做数据流处理需要掌握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虚拟机》这本书
内存管理机制
JVM内存的划分
堆和栈
创建Java对象的过程
内存泄漏和内存溢出
Java堆溢出问题的处理GC与垃圾收集器
GC与垃圾收集器
怎么判断对象是否已死
常用的垃圾收集算法
新生代和老年代
什么情况对象会进入老年代
GC分为哪几种虚拟机性能监控与故障处理工具
虚拟机性能监控与故障处理工具
常考JDK的命令行工具
查看进程状况或者配置信息的命令
类加载机制
类加载的过程
类初始化步骤和初始化时机
JVM有哪几种类加载器
双亲委派模型
对象的创建过程
HelloWorld的执行过程
常用算法和数据结构
三大排序
快排
堆排序
归并排序
树的问题
树的递归和非递归遍历
求二叉树的深度
二叉树中两节点的最低公共祖先
二叉树的广度优先遍历
红黑树与AVL树
链表
两链表的第一个公共节点
链表中环的入口
反转链表
链表中倒数第k个节点
数组的问题
二维数组的查找
数组中出现次数超过一半的数字
两数之和(给一个整数数组和一个目标值,找出数组中和为目标数的两个数,返回下标)
路径问题
最小路径(每个网格包含一个非负整数,找出一条路径,使路径上的数字和最小)
不同路径(m*n的网格,机器人从左上角往右下角移动)
二分查找法
斐波那契数列
青蛙跳台阶问题和青蛙变态跳台阶问题
不包含重复字符的最长子串的长度
计算机网络知识和操作系统
计算机网络
常考TCP和UDP
三次握手和四次挥手
为什么TCP连接需要三次握手而不是两次
用户输入域名到浏览器显示页面的过程
http和https的区别
Cookie和Session的区别
分层体系结构包括哪几层
操作系统:
进程和线程
多进程和多线程
死锁产生的必要条件
死锁的处理方法
进程通信和线程通信
谋定而后动,知止而有得