更新笔记
This commit is contained in:
parent
277362a6a1
commit
667f850743
@ -40,6 +40,9 @@ dependencies {
|
|||||||
// https://mvnrepository.com/artifact/org.apache.hbase/hbase-client
|
// https://mvnrepository.com/artifact/org.apache.hbase/hbase-client
|
||||||
compile group: 'org.apache.hbase', name: 'hbase-client', version: '1.2.6'
|
compile group: 'org.apache.hbase', name: 'hbase-client', version: '1.2.6'
|
||||||
|
|
||||||
|
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
|
||||||
|
compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.46'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
jar {
|
jar {
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
- [数据库](#数据库)
|
- [数据库](#数据库)
|
||||||
- [truncate与 delete区别](#truncate与-delete区别)
|
- [truncate与 delete区别](#truncate与-delete区别)
|
||||||
- [B+树索引和哈希索引的区别](#b树索引和哈希索引的区别)
|
- [B+树索引和哈希索引的区别](#b树索引和哈希索引的区别)
|
||||||
|
- [mysql 分库分表](#mysql-分库分表)
|
||||||
- [Linux](#linux)
|
- [Linux](#linux)
|
||||||
- [Top 查看系统信息](#top-查看系统信息)
|
- [Top 查看系统信息](#top-查看系统信息)
|
||||||
- [Linux 内核空间和用户空间](#linux-内核空间和用户空间)
|
- [Linux 内核空间和用户空间](#linux-内核空间和用户空间)
|
||||||
@ -113,6 +114,30 @@ B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差
|
|||||||
|
|
||||||
说白了,等值查询的时候,Hash索引才有用武之地。
|
说白了,等值查询的时候,Hash索引才有用武之地。
|
||||||
|
|
||||||
|
## mysql 分库分表
|
||||||
|
|
||||||
|
**分表:**
|
||||||
|
分表策略可以划分为垂直拆分和水平拆分。
|
||||||
|
|
||||||
|
垂直拆分:把表的字段进行拆分。一方面,减少客户端和数据库之间的网络传输。一方面,单个数据块存放的数据更多,查询的时候就可以减少I/O次数。
|
||||||
|
|
||||||
|
垂直拆分建议:
|
||||||
|
1. 将不常用的字段单独拆分到林外一张扩展表。
|
||||||
|
2. 将大文本的字段单独拆分到另外一张扩展表。
|
||||||
|
3. 将不经常修改的字段放在同一张表中,经常改变的字段放在另一张表中。
|
||||||
|
4. 对于需要经常关联查询的字段,建议放在同一张表中。不然联合查询的时候,会给数据库带来额外压力。
|
||||||
|
|
||||||
|
水平拆分:拆分表的行。
|
||||||
|
|
||||||
|
水平拆分策略:取模分表,时间维度分表,自定义hash分表等。
|
||||||
|
|
||||||
|
取模分表和自定义hash分表属于随机分表。时间维度分表属于连续分布表。随机分表可以避免热点问题,读写相对均匀,连续分表有热点问题,但是避免了跨表查询的复杂问题。
|
||||||
|
|
||||||
|
**分库:**
|
||||||
|
垂直拆分:按照业务和功能划分数据库
|
||||||
|
|
||||||
|
水平拆分:两个数据库的表结构一样,划分方法同水平拆分表。
|
||||||
|
|
||||||
# Linux
|
# Linux
|
||||||
|
|
||||||
## Top 查看系统信息
|
## Top 查看系统信息
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
- [抽象类和接口](#抽象类和接口)
|
- [抽象类和接口](#抽象类和接口)
|
||||||
- [java 重写和重载的区别](#java-重写和重载的区别)
|
- [java 重写和重载的区别](#java-重写和重载的区别)
|
||||||
- [Synchronized 和 volitate区别](#synchronized-和-volitate区别)
|
- [Synchronized 和 volitate区别](#synchronized-和-volitate区别)
|
||||||
|
- [Synchronized 的内部实现](#synchronized-的内部实现)
|
||||||
- [异常](#异常)
|
- [异常](#异常)
|
||||||
- [String StringBuffer StringBuilder的区别](#string-stringbuffer-stringbuilder的区别)
|
- [String StringBuffer StringBuilder的区别](#string-stringbuffer-stringbuilder的区别)
|
||||||
- [运行速度:](#运行速度)
|
- [运行速度:](#运行速度)
|
||||||
@ -40,6 +41,9 @@
|
|||||||
- [接口默认方法](#接口默认方法)
|
- [接口默认方法](#接口默认方法)
|
||||||
- [socket 编程](#socket-编程)
|
- [socket 编程](#socket-编程)
|
||||||
- [Java 集合类的底层实现](#java-集合类的底层实现)
|
- [Java 集合类的底层实现](#java-集合类的底层实现)
|
||||||
|
- [.class 和 getclass的区别](#class-和-getclass的区别)
|
||||||
|
- [加载时机不同](#加载时机不同)
|
||||||
|
- [静态内部类](#静态内部类)
|
||||||
- [参考文档](#参考文档)
|
- [参考文档](#参考文档)
|
||||||
|
|
||||||
<!-- /TOC -->
|
<!-- /TOC -->
|
||||||
@ -379,6 +383,10 @@ java 类可以继承一个抽象类,实现多个接口,都不能被实例化
|
|||||||
5) 当一个域的值依赖于它之前的值时,volatile就无法工作了,如n=n+1,n++等。如果某个域的值受到其他域的值的限制,那么volatile也无法工作,如Range类的lower和upper边界,必须遵循lower<=upper的限制。
|
5) 当一个域的值依赖于它之前的值时,volatile就无法工作了,如n=n+1,n++等。如果某个域的值受到其他域的值的限制,那么volatile也无法工作,如Range类的lower和upper边界,必须遵循lower<=upper的限制。
|
||||||
6) 使用volatile而不是synchronized的唯一安全的情况是类中只有一个可变的域。
|
6) 使用volatile而不是synchronized的唯一安全的情况是类中只有一个可变的域。
|
||||||
|
|
||||||
|
# Synchronized 的内部实现
|
||||||
|
|
||||||
|
通过javap反编译代码可以看到,对于同步方法,JVM采用**ACC_SYNCHRONIZED**标记符来实现同步。 对于同步代码块。JVM采用**monitorenter、monitorexit**两个指令来实现同步。
|
||||||
|
|
||||||
# 异常
|
# 异常
|
||||||
|
|
||||||
Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: Error 和 Exception。其中 Error 用来表示 JVM 无法处理的错误,Exception 分为两种:
|
Throwable 可以用来表示任何可以作为异常抛出的类,分为两种: Error 和 Exception。其中 Error 用来表示 JVM 无法处理的错误,Exception 分为两种:
|
||||||
@ -909,6 +917,25 @@ private interface DefaulableFactory {
|
|||||||
|
|
||||||
[参考文档](https://blog.csdn.net/qq_25868207/article/details/55259978)
|
[参考文档](https://blog.csdn.net/qq_25868207/article/details/55259978)
|
||||||
|
|
||||||
|
# .class 和 getclass的区别
|
||||||
|
|
||||||
|
最明显的一个区别是,.class 可以直接从类名获取,.getClass() 是一个对象实例的方法。
|
||||||
|
|
||||||
|
## 加载时机不同
|
||||||
|
|
||||||
|
Class.forName(),getClass()在运行时加载;
|
||||||
|
|
||||||
|
Class.class是在编译器加载,即.class是静态加载,
|
||||||
|
|
||||||
|
.getClass()是动态加载。
|
||||||
|
|
||||||
|
## 静态内部类
|
||||||
|
|
||||||
|
Iterator it = s.iterator();得到的it的真正类型是KeyIterator,是Iterator的子类,按常理来说应该可以执行next()方法,但是值得注意的是,KeyIterator是hashmap的内部类,JAVA给的提示是cannot access a member of class java.util.HashMap$KeyIterator withmodifiers "public"
|
||||||
|
|
||||||
|
从上面的那些例子上也能看出,除内部类外的其他类的应用上.class功能完全等于.getClass()!只是一个是用类直接获得的,一个是用实例获得的。
|
||||||
|
|
||||||
|
|
||||||
# 参考文档
|
# 参考文档
|
||||||
|
|
||||||
- [HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!](https://crossoverjie.top/2018/07/23/java-senior/ConcurrentHashMap/)
|
- [HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!](https://crossoverjie.top/2018/07/23/java-senior/ConcurrentHashMap/)
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
- [LinkedList](#linkedlist)
|
- [LinkedList](#linkedlist)
|
||||||
- [ArrayDeque](#arraydeque)
|
- [ArrayDeque](#arraydeque)
|
||||||
- [Vector](#vector)
|
- [Vector](#vector)
|
||||||
|
- [线程间通信](#线程间通信)
|
||||||
- [参考文档](#参考文档)
|
- [参考文档](#参考文档)
|
||||||
|
|
||||||
<!-- /TOC -->
|
<!-- /TOC -->
|
||||||
@ -1043,6 +1044,24 @@ ArrayDeque: 数组实现的双端队列,默认队列长度为16,队列满了
|
|||||||
|
|
||||||
Vector 是一个线程安全的动态数组,内部采用数组实现,和ArrayList的区别在于,ArrayList的增长速度是50%,而 Vector 的增长速度为100%
|
Vector 是一个线程安全的动态数组,内部采用数组实现,和ArrayList的区别在于,ArrayList的增长速度是50%,而 Vector 的增长速度为100%
|
||||||
|
|
||||||
|
# 线程间通信
|
||||||
|
|
||||||
|
1. 同步方法
|
||||||
|
|
||||||
|
synchronized或者ReentrantLock
|
||||||
|
|
||||||
|
2. while 轮询
|
||||||
|
|
||||||
|
3. wait/notify机制
|
||||||
|
|
||||||
|
4. 管道通信
|
||||||
|
|
||||||
|
PipedInputStream
|
||||||
|
|
||||||
|
5. 共享内存(共享对象)
|
||||||
|
|
||||||
|
6. volitale、原子类
|
||||||
|
|
||||||
# 参考文档
|
# 参考文档
|
||||||
|
|
||||||
- [java并发编程--Executor框架](https://www.cnblogs.com/MOBIN/p/5436482.html)
|
- [java并发编程--Executor框架](https://www.cnblogs.com/MOBIN/p/5436482.html)
|
@ -41,6 +41,7 @@ Java后端开发(大数据、分布式应用等)
|
|||||||
华为 |8.1 | 8.21
|
华为 |8.1 | 8.21
|
||||||
百度 | 8.22 | 8.22(新投递) |
|
百度 | 8.22 | 8.22(新投递) |
|
||||||
网易 | 8.22 | 8.22(新投递) |
|
网易 | 8.22 | 8.22(新投递) |
|
||||||
|
腾讯 | 8.22 | 8.22(新投递)
|
||||||
|
|
||||||
|
|
||||||
# 2 复习内容
|
# 2 复习内容
|
||||||
|
@ -145,6 +145,8 @@
|
|||||||
- 数据库事务
|
- 数据库事务
|
||||||
- 四大基本特性?什么是隔离性?数据库并发有几个隔离级别?
|
- 四大基本特性?什么是隔离性?数据库并发有几个隔离级别?
|
||||||
- MySQL默认级别?
|
- MySQL默认级别?
|
||||||
|
- mysql 分库分表
|
||||||
|
-
|
||||||
|
|
||||||
# Linux
|
# Linux
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user