死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程
--第一种
- #{}
-- 第一种是最常用
select id,name,age,score from star where name like "%"#{name}"%"
--第二种:
- ${}
select id,name,age,score from star where name like "%${value}%"
--第三种:
--mysql独有函数,concat
select id,name,age,score from star where name like concat("%",#{name},"%")
"#"号:
"$"号:
Mysql一共分为三级范式:
注意:要满足2NF的时候,首先1NF要满足,同理满足3NF,那么1NF、2NF一定也是满足的。
常用:
du -s -h 目录路径
目录少的时候用:
du -h 目录路径
命令参数:
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
常用:
df -h
命令参数:
-a 全部文件系统列表
-h 方便阅读方式显示
-i 显示inode信息
-T 文件系统类型
常用:
free -h
输出结果如下:
total used free shared buff/cache available
Mem: 38G 2.7G 25G 17M 9.8G 34G
Swap: 0B 0B 0B
输出字段说明:
Mem:表示物理内存统计
total:表示物理内存总量(total = used + free)
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。shared:共享内存。
buffers:系统分配但未被使用的buffers 数量。cached:系统分配但未被使用的cache 数量。
-/+ buffers/cache:表示物理内存的缓存统计
used2:也就是第一行中的used – buffers-cached 也是实际使用的内存总量。 //used2为第二行
free2= buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行
free2:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。
Swap:表示硬盘上交换分区的使用情况
常用:
top [-] [d] [p] [q] [c] [C] [S] [s] [n]
参数说明:
d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
p 通过指定监控进程ID来仅仅监控某个进程的状态。
q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
S 指定累计模式
s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
i 使top不显示任何闲置或者僵死进程。
c 显示整个命令行而不只是显示命令名
head -n 10 [file_name]
tail -n 10 [file_name]
tail -f [file_name]
Scala存在一个强大的模式匹配,每个模式匹配的开始都是以“match-case”进行开始匹配信息。对应于java中的switch-case模式
# scala case demo
object Test {
def main(args: Array[String]) {
println(matchTest(3))
}
def matchTest(x: Int): String = x match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
}
输出:
$ scalac Test.scala # 编译scala文件
$ scala Test # 运行scala文件信息
many
数据分层为倒三角,从上到下依次为ODS层(原始数据层)、DWD层(明细数据层)、DWS层(服务数据层)、ADS层(数据应用层),数据量是从多到少,从复杂化到简单化。
kafka在分布式集群中,担任的是分布式消息队列,在producer推送数据到kafka topic中的时候存在三种策略来解决数据在推送过程中存在的问题。
参考kafka相关博客
Kafka producer有三种ack机制 初始化producer时在config中进行配置;
ack等于0:意味着producer不等待broker同步完成的确认,继续发送下一条(批)信息提供了最低的延迟。但是最弱的持久性,当服务器发生故障时,就很可能发生数据丢失。例如leader已经死亡producer不知情,还会继续发送消息broker接收不到数据就会数据丢失。
ack等于1(默认):意味着producer要等待leader成功收到数据并得到确认,才发送下一message。此选项提供了较好的持久性较低的延迟性。Partition的Leader死亡,follwer尚未复制,数据就会丢失。
ack等于-1:意味着producer得到follwer确认,才发送下一条数据持久性最好,延时性最差
参考博客
RDD :
弹性分布式数据集,他记录的只读分区集合,是Spark的基本数据结构。
DataFrame
DataFrame思想来源于Python的Pandas库,RDD是一个数据集,DataFrame在RDD的基础上增加了Schema(描述数据信息,可以认为是元数据)
DataFrame比RDD数据多出一张表头,更加像一张表,一般用于Spark SQl。
DataSet
DataSet是DataFrame API扩展,相较于RDD来说,DataSet提供了强类型支持,区别也是给RDD的每行数据增加类型约束。
数据倾斜的原因:
如何避免数据倾斜
注意:这只是其中的一些情况,还有很多原因导致数据倾斜
数据预处理简单来说就是我们在数据清洗之前,需要对原数据信息的脏数据进行处理操作。
Hive:数据仓库
Hbase:非关系型数据库,用于对数据的列式存储。
Hadoop:具有HDFS分布式文件系统和MarReduce计算引擎
其中,Hive和Hbase存储的数据都是存储在HDFS文件系统中。HDFS文件系统为整个Hadoop生态圈提供数据存储。
Hadoop读写流程中,运行原理中,相对而言,写的知识点比较多。
hdfs dfs --test
引用:十大经典排序算法(动图演示)
十大经典排序算法
public static void main(String[] args) {
Random random = new Random();
ArrayList list = new ArrayList();
for (int x = 0; x < 10; x++) {
int num = random.nextInt(20);
if (!list.contains(num)) {
list.add(num);
} else {
x--;
}
}
System.out.println(list);
}
//输出:[5, 1, 3, 15, 9, 8, 11, 13, 7, 2]
使用set
public static void main(String[] args) {
Random random = new Random();
HashSet set = new HashSet();
while (set.size() < 10) {
int num = random.nextInt(20);
set.add(num);
}
System.out.println(set);
}
public static void main(String[] args) {
String str = "aababcabcdabcde";
HashMap<Character,Integer> map = new HashMap<Character, Integer>();
char[] a = str.toCharArray();
for (Character a1 : a) {
Integer num = map.get(a1);
if (num == null) {
map.put(a1, 1);
} else {
num++;
map.put(a1, num);
}
}
System.out.println(map);
}