Fork me on GitHub

JAVA 高级篇

目录

集群搭建及工具使用

身为大数据开发工程师,对数据从采集、接入、流处理、批处理到数据存储、数据分析和数据可视化等一整套流程都要了解,包括的组件非常多。
做数据流处理需要掌握spark、flink、storm、kafka stream等。
做批处理需要掌握hadoop、hive等,数据存储需要掌握hdfs、hbase、redis、tsdb、es等,各个公司会基于这些组件针对部门特有的业务进行二次开发。

Hadoop集群搭建

Hadoop集群搭建

CDH 集群搭建

CDH 集群搭建

IDEA 操作

  1. 常用快捷键
  • 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
  1. 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面试题之“==”和“equals()”方法的区别?

Java集合

JAVA 集合有那些接口

Java集合框架之四大接口、常用实现类

JAVA 集合之MAP

JAVA 集合之MAP

Hash Table和HashMap的区别

Java系列(面试必备):HashMap 和 Hashtable 的 6 个区别!

HashMap和ConcurrentHashMap的区别

HashMap和ConcurrentHashMap的知识总结

HashMap怎么解决hash冲突

HashMap中Hash冲突严重时会影响HashMap性能,该如何解决?

HashMap的大小为什么是2的幂次

HashMap的大小为什么是2的幂次

HashMap的扩容

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树

java面试-彻底搞懂红黑树

链表

两链表的第一个公共节点

链表中环的入口

反转链表

链表中倒数第k个节点

数组的问题

二维数组的查找

数组中出现次数超过一半的数字

两数之和(给一个整数数组和一个目标值,找出数组中和为目标数的两个数,返回下标)

路径问题

最小路径(每个网格包含一个非负整数,找出一条路径,使路径上的数字和最小)

不同路径(m*n的网格,机器人从左上角往右下角移动)

二分查找法

斐波那契数列

青蛙跳台阶问题和青蛙变态跳台阶问题

不包含重复字符的最长子串的长度

计算机网络知识和操作系统

计算机网络

常考TCP和UDP

三次握手和四次挥手

为什么TCP连接需要三次握手而不是两次

用户输入域名到浏览器显示页面的过程

http和https的区别

Cookie和Session的区别

分层体系结构包括哪几层

操作系统:

进程和线程

多进程和多线程

死锁产生的必要条件

死锁的处理方法

进程通信和线程通信

posted @ 2020-07-28 11:15  园狐  阅读(393)  评论(0编辑  收藏  举报