IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 20210712面试材料 -> 正文阅读

[大数据]20210712面试材料

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Linux++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
什么是交换空间?
交换空间是Linux使用的一定空间,用于临时保存一些并发运行的程序。当RAM没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况


如何在Linux下更改权限?
假设你是系统管理员或文件或目录的所有者,则可以使用chmod命令授予权限。使用+符号添加权限或 - 符号拒绝权限,以及以下任何字母:u(用户),g(组),o(其他),a(所有),r(读取),w(写入)和x(执行)。例如,命令chmod go + rw FILE1.TXT授予对文件FILE1.TXT的读写访问权限,该文件分配给组和其他组

Http 请求的 GET 和 POST 方式的区别
GET产生一个TCP数据包:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
POST产生两个TCP数据包:
 对于POST方式的请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

硬链接和软链接的区别
·  硬链接
只能引用同一文件系统中的文件,引用的是文件在文件系统中的物理索引(也称inode)。当移动或删除原始文件时,硬链接被破坏,因为它引用的是文件的物理数据而不是文件在文件结构中的位置。硬链接的文件不需要用户有访问原始文件的权限,也不会显示原始文件所在目录,有助于文件安全性。若删除的文件有相应硬链接,则文件依然会保留,知道所有对它的引用都被删除;
·  软链接
其实就是新建立一个文件,这个文件就是专门用来执行别的文件的(相当一Windows中的快捷方式)。所产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删除这个软链接文件,就相当于不需要这个链接,和原来存在的实体原文件没有任何关系,但删除原来的文件,则相应的软链接不可用;
·  两者区别
硬链接不会建立inode,只是在文件原来的inode link count域再增加1,因此硬链接是不可跨文件系统的;而软链接会重建一个inode,其结构与其他的不一样,只是一个指明源文件的字符串信息。源文件一旦删除,软链接将毫无意义;软链接可以跨文件系统,硬链接不可以;软链接可以对一个不存在的文件名进行链接,硬链接不可以;软链接可以对目录进行连接,硬链接不可以;

ln默认创建的是硬链接,使用-s可以创建软链接;

Linux中要找出某一文件属于哪个RPM软件包的命令:
rpm -qf filename;
如何查看所有java进程
grep是搜索关键字
ps -ef | grep java


LINUX中如何查看某个端口是否被占用
netstat  -anp  | grep   端口号

2.查看一个程序是否运行
ps –ef|grep tomcat
查看所有有关 tomcat 的进程
3.终止线程
kill -9 19979
终止线程号位 19979 的线程

图中主要看监控状态为LISTEN表示已经被占用,最后一列显示被服务mysqld占用,查看具体端口号,只要有如图这一行就表示被占用了
如何定时执行任务:

Crontab
如何通过配置文件修改修改IP
想修改ip,需要编辑哪个配置文件,修改完配置文件后,如何重启网卡,使配置生效?

答:使用vi或者vim编辑器编辑网卡配置文件/etc/sysconfig/network-scripts/ifcft-eth0

修改网卡后,可以使用命令重启网卡:
ifdown eth0
ifup eth0
也可以重启网络服务:
service network restart

Linux如何挂载磁盘
mount /dev/sdc1 /disk/disktwo/ //进行挂载
或者
vim /etc/fstab
/dev/sdc1(磁盘分区)  /disk/disktwo(挂载目录) ext3(文件格式)defaults  0  0

linux安装软件的几种方式:
 源码安装
 RPM安装
yum安装
apt安装

如何查找一个文件大小超过5M的文件
find . -type f -size +100M

网络
简述三次握手四次挥手
https://blog.csdn.net/sinat_41144773/article/details/88314735


post请求和get请求的区别
https://www.cnblogs.com/mttcug/p/8545837.html


+++++++++++++++++++++++++++++++++++++++大数据+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MR的原理和运行流程
https://blog.csdn.net/qq_31975963/article/details/84995460

MR运行过程
一个文件分成多个split数据片。
每个split由多一个map进行处理。
Map处理完一个数据就把处理结果放到一个环形缓冲区内存中。
环形缓冲区满后里面的数据会被溢写到一个个小文件中。
小文件会被合并成一个大文件,大文件会按照partition进行排序。
reduce节点将所有属于自己的数据从partition中拷贝到自己的缓冲区中,并进行合并。
最后合并后的数据交给reduce处理程序进行处理。
处理后的结果存放到HDFS上。

MR
1、什么是宽依赖,什么是窄依赖?哪些算子是宽依赖,哪些是窄依赖?
窄依赖就是一个父RDD分区对应一个子RDD分区,如map,filter
或者多个父RDD分区对应一个子RDD分区,如co-partioned join


1.1 窄依赖
窄依赖是指1个父RDD分区对应1个子RDD的分区。换句话说,一个父RDD的分区对应于一个子RDD的分区,或者多个父RDD的分区对应于一个子RDD的分区。所以窄依赖又可以分为两种情况:
1个子RDD的分区对应于1个父RDD的分区,比如map,filter,union等算子
1个子RDD的分区对应于N个父RDD的分区,比如co-partioned join

1.2 宽依赖
宽依赖是指1个父RDD分区对应多个子RDD分区。宽依赖有分为两种情况
1个父RDD对应非全部多个子RDD分区,比如groupByKey,reduceByKey,sortByKey
1个父RDD对应所有子RDD分区,比如未经协同划分的join

2. 为什么Spark将依赖分为窄依赖和宽依赖
2.1 窄依赖(narrow dependency)
可以支持在同一个集群Executor上,以pipeline管道形式顺序执行多条命令,例如在执行了map后,紧接着执行filter。分区内的计算收敛,不需要依赖所有分区的数据,可以并行地在不同节点进行计算。所以它的失败回复也更有效,因为它只需要重新计算丢失的parent partition即可

2.2 宽依赖(shuffle dependency)
则需要所有的父分区都是可用的,必须等RDD的parent partition数据全部ready之后才能开始计算,可能还需要调用类似MapReduce之类的操作进行跨节点传递。从失败恢复的角度看,shuffle dependency牵涉RDD各级的多个parent partition。



2、Transformation和action算子有什么区别?举例说明
Transformation 变换/转换:这种变换并不触发提交作业,完成作业中间过程处理。Transformation 操作是延迟计算的,也就是说从一个RDD 转换生成另一个 RDD 的转换操作不是马上执行,需要等到有 Action 操作的时候才会真正触发运算

++++++++++++++++++++++++++++++++++++JVM+++++++++++++++++++++++++++++++++++++++++++++++++++++++++

GC是怎么产生的
一个程序只要在运行,那么就不会不停的new对象,那么总有一刻Eden区会放满,那么一旦Eden区被放满之后,虚拟机会干什么呢?没错,就是gc,不过这里的gc属于minor gc,就是垃圾收集,来收集垃圾对象并清理的,那么什么是垃圾对象呢?

好比我们上面说的math对象,我们假设我们是一个web应用程序,main线程执行完之后程序不会结束,但是main方法结束了,那么main()方法栈帧会被释放,局部变量会被释放,但是局部变量对应的堆中的对象还是依然存在的,但是又没有指针指向它,那么它就是一个垃圾对象,那就应该被回收掉了,之后如果还会new Math对象,也不会用这个之前的了,因为已经无法找到它了,如果留着这个对象只会占用内存,显然是不合适的。

这里就涉及到了一个GC Root根以及可达性分析算法的概念,也是面试偶尔会被问到的。

可达性分析算法是将GC Roots对象作为起点,从这些起点开始向下搜索引用的对象,找到的对象都标记为非垃圾对象,其余未标记的都是垃圾对象。

那么GC Roots根对象又是什么呢,GC Roots根就是判断一个对象是否可以回收的依据,只要能通过GC Roots根向下一直搜索能搜索到的对象,那么这个对象就不算垃圾对象,而可以作为GC Roots根的有线程栈的本地变量、静态变量、本地方法栈的变量等等它们引用的对象,说白了就是找到和根节点有联系的对象就是有用的对象,其余都认为是垃圾对象来回收。


堆的结构
对于这个基本组成大家应该都有所了解,对就是由年轻代和老年代组成,年轻代又分为伊甸园区和survivor区,survivor区中又有from区和to区.

我们new出来的对象大家都知道是放在堆中,那具体放在堆中的哪个位置呢?

其实new出来的对象一般都放在Eden区,那么为什么叫伊甸园区呢,伊甸园就是亚当夏娃住的地方,不就是造人的地方么?所以我们new出来的对象就是放在这里的,那当Eden区满了之后呢?

假设我们给对分配600M内存,这个是可以通过参数调节的,我们后文再讲。那么老年代默认是占2/3的,也就是差不多400M,那年轻代就是200M,Eden区160M,Survivor区40M。

+++++++++++++++++++++++++++++++++++spark+++++++++++++++++++++++++++++++++++++++++++++++++++++
spark
7、Spark stage是如何划分的?

从hdfs中读取文件后,创建 RDD 对象
DAGScheduler模块介入运算,计算RDD之间的依赖关系。RDD之间的依赖关系就形成了DAG
每一个JOB被分为多个Stage,划分Stage的一个主要依据是当前计算因子的输入是否是确定的,如果是则将其分在同一个Stage,避免多个Stage之间的消息传递开销。
因此spark划分stage的整体思路是:从后往前推,遇到宽依赖就断开,划分为一个stage;遇到窄依赖就将这个RDD加入该stage中

11、RDD有多少种持久化方式?memory_only如果内存存储不了,会怎么操作?
cache和persist
memory_and_disk,放一部分到磁盘
MEMORY_ONLY_SER:同MEMORY_ONLY,但是会使用Java序列化方式,将Java对象序列化后进行持久化。可以减少内存开销,但是需要进行反序列化,因此会加大CPU开销。
MEMORY_AND_DSK_SER:同MEMORY_AND_DSK。但是使用序列化方式持久化Java对象。
DISK_ONLY:使用非序列化Java对象的方式持久化,完全存储到磁盘上。

MEMORY_ONLY_2或者MEMORY_AND_DISK_2等:如果是尾部加了2的持久化级别,表示会将持久化数据复用一份,保存到其他节点,从而在数据丢失时,不需要再次计算,只需要使用备份数据即可。


15、Groupbykey和reducebykey哪个性能更高,为什么?
reducebyKey会先在本地机器上进行局部聚合,然后在移动数据,进行全局聚合
 groupbyKey会先将数据进行移动,再做聚合



Spark解决数据倾斜
数据倾斜的解决方案
解决方案一:使用Hive ETL预处理数据
我理解为分区分桶

解决方案二:过滤少数导致倾斜的key
过来一些数据
方案适用场景:如果发现导致倾斜的key就少数几个,而且对计算本身的影响并不大的话,那么很适合使用这种方案。比如99%的key就对应10条数据,但是只有一个key对应了100万数据,从而导致了数据倾斜。

解决方案三:提高shuffle操作的并行度
方案适用场景:如果我们必须要对数据倾斜迎难而上,那么建议优先使用这种方案,因为这是处理数据倾斜最简单的一种方案。
调大reduce 的数量

解决方案四:两阶段聚合(局部聚合+全局聚合)
我理解为 给key前增加随机数,切分的时候就可以打散

方案实现原理:将原本相同的key通过附加随机前缀的方式,变成多个不同的key,就可以让原本被一个task处理的数据分散到多个task上去做局部聚合,进而解决单个task处理数据量过多的问题。接着去除掉随机前缀,再次进行全局聚合,就可以得到最终的结果。具体原理见下图。

解决方案五:将reduce join转为map join
只适用于一个大表和一个小表的情况,不会发生shuffle,也就根本不会发生数据倾斜

方案缺点:适用场景较少,因为这个方案只适用于一个大表和一个小表的情况。毕竟我们需要将小表进行广播,此时会比较消耗内存资源,driver和每个Executor内存中都会驻留一份小RDD的全量数据。如果我们广播出去的RDD数据比较大,比如10G以上,那么就可能发生内存溢出了。因此并不适合两个都是大表的情况。

解决方案六:采样倾斜key并分拆join操作
方案实现思路:
对包含少数几个数据量过大的key的那个RDD,通过sample算子采样出一份样本来,然后统计一下每个key的数量,计算出来数据量最大的是哪几个key。
然后将这几个key对应的数据从原来的RDD中拆分出来,形成一个单独的RDD,并给每个key都打上n以内的随机数作为前缀,而不会导致倾斜的大部分key形成另外一个RDD


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Hive
hive调优
https://www.cnblogs.com/frankdeng/p/9463897.html


hive表类型压缩方式对比
https://blog.csdn.net/xjp8587/article/details/52330440


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Hbase
3. hbase 的存储结构?
Hbase 中的每张表都通过行键 (rowkey) 按照一定的范围被分割成多个子表(HRegion),默认一个 HRegion 超过 256M 就要被分割成两个,由 HRegionServer 管理,管理哪些 HRegion 由 Hmaster 分配。 HRegion 存取一个子表时,会创建一个 HRegion 对象,然后对表的每个列族 (Column Family) 创建一个 store 实例, 每个 store 都会有 0个或多个 StoreFile 与之对应,每个 StoreFile 都会对应一个 HFile , HFile 就是实际的存储文件,因此,一个 HRegion 还拥有一个 MemStore 实例。

1. Hbase是什么?hbase的特点是什么?
Hbase一个分布式的基于列式存储的数据库,基于Hadoop的 hdfs 存储,zookeeper 进行管理。
Hbase适合存储半结构化或非结构化数据,对于数据结构字段不够确定或者杂乱无章很难按一个概念去抽取的数据。
Hbase 为 null 的记录不会被存储。
基于的表包含 rowkey,时间戳,和列族。新写入数据时,时间戳更新, 同时可以查询到以前的版本。
hbase 是主从架构。hmaster 作为主节点,hregionserver 作为从节点。
2. hbase如何导入数据?
通过HBase API进行批量写入数据;
使用Sqoop工具批量导数到HBase集群;
使用MapReduce批量导入;
HBase BulkLoad的方式。
3. hbase 的存储结构?
Hbase 中的每张表都通过行键 (rowkey) 按照一定的范围被分割成多个子表(HRegion),默认一个 HRegion 超过 256M 就要被分割成两个,由 HRegionServer 管理,管理哪些 HRegion 由 Hmaster 分配。 HRegion 存取一个子表时,会创建一个 HRegion 对象,然后对表的每个列族 (Column Family) 创建一个 store 实例, 每个 store 都会有 0个或多个 StoreFile 与之对应,每个 StoreFile 都会对应一个 HFile , HFile 就是实际的存储文件,因此,一个 HRegion 还拥有一个 MemStore 实例。

4. Hbase 和 hive 有什么区别?hive 与 hbase 的底层存储是什么?hive 是产生的原因是什么?habase 是为了弥补 hadoop 的什么缺陷?
共同点:

hbase与hive都是架构在hadoop之上的。都是用hadoop作为底层存储。
区别:

Hive是建立在Hadoop之上为了减少MapReducejobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop;
Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多;
Hive本身不存储和计算数据,它完全依赖于 HDFS 和 MapReduce,Hive中的表纯逻辑;
hive借用hadoop的MapReduce来完成一些hive中的命令的执行;
hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作;
hbase是列存储;
hdfs 作为底层存储,hdfs 是存放文件的系统,而 Hbase 负责组织文件;
hive 需要用到 hdfs 存储文件,需要用到 MapReduce 计算框架。

5. 解释下 hbase 实时查询的原理
实时查询,可以认为是从内存中查询,一般响应时间在 1 秒内。HBase 的机制是数据先写入到内存中,当数据量达到一定的量(如 128M),再写入磁盘中, 在内存中,是不进行数据的更新或合并操作的,只增加数据,这使得用户的写操作只要进入内存中就可以立即返回,保证了 HBase I/O 的高性能。

6. 描述 Hbase 的 rowKey 的设计原则
联系 region 和 rowkey 关系说明,设计可参考以下三个原则.

1. rowkey 长度原则
rowkey 是一个二进制码流,可以是任意字符串,最大长度 64kb,实际应用中一般为 10-100bytes,以 byte[] 形式保存,一般设计成定长。建议越短越好,不要超过 16 个字节, 原因如下:

数据的持久化文件 HFile 中是按照 KeyValue 存储的,如果 rowkey 过长会极大影响 HFile 的存储效率 MemStore 将缓存部分数据到内存,如果 rowkey 字段过长,内存的有效利用率就会降低,系统不能缓存更多的数据,这样会降低检索效率

2. rowkey 散列原则
如果 rowkey 按照时间戳的方式递增,不要将时间放在二进制码的前面,建议将 rowkey 的高位作为散列字段,由程序随机生成,低位放时间字段,这样将提高数据均衡分布在每个 RegionServer,以实现负载均衡的几率。如果没有散列字段,首字段直接是时间信息,所有的数据都会集中在一个 RegionServer 上,这样在数据检索的时候负载会集中在个别的 RegionServer 上,造成热点问题,会降低查询效率。

     3. rowkey 唯一原则
必须在设计上保证其唯一性,rowkey 是按照字典顺序排序存储的,因此, 设计 rowkey 的时候,要充分利用这个排序的特点,将经常读取的数据存储到一块,将最近可能会被访问的数据放到一块。

7. 描述 Hbase 中 scan 和 get 的功能以及实现的异同
按指 定 RowKey 获 取 唯 一 一 条 记 录 , get 方法( org.apache.hadoop.hbase.client.Get ) Get的方法处理分两种 : 设置了ClosestRowBefore和没有设置的 rowlock 主要是用来保证行的事务性,即每个get 是以一个 row 来标记的.一个 row 中可以有很多 family 和 column。
按指定的条件获取一批记录,scan 方法(org.apache.Hadoop.hbase.client.Scan)实现条件查询功能使用的就是 scan 方式


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Sqoop
1.1.6 Sqoop底层运行的任务是什么
只有Map阶段,没有Reduce阶段的任务。

1.1.7 Map task并行度设置大于1的问题
并行度导入数据的 时候 需要指定根据哪个字段进行切分 该字段通常是主键或者是自增长不重复的数值类型字段,否则会报下面的错误。

Import failed: No primary key could be found for table. Please specify one with --split-by or perform a sequential import with ‘-m 1’.

那么就是说当map task并行度大于1时,下面两个参数要同时使用

–split-by id 指定根据id字段进行切分

–m n 指定map并行度n个

2 Sqoop导入导出Null存储一致性问题
Hive中的Null在其中以“ \ N”来存储,而MySQL中的Null在实质上就是Nul??l,为了保证数据相互一致。在导出数据时采用--input-null-string和--input- null-non-string两个参数。导入数据时采用--null-string和--null-non-string。


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ES

1.ELK是什么?
ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写
Elasticsearch:负责日志检索和储存
Logstash:负责日志的收集和分析、处理
Kibana:负责日志的可视化
这三款软件都是开源软件,通常是配合使用,而且又先后归于 Elastic.co 公司名下,故被简称为 ELK


7.ES与关系数据库对比
ES 与关系型数据库的对比
在 ES 中,文档归属于一种 类型 (type) ,而这些类型存在于索引 (index) 中,类比传统关系型数据库
DB -> Databases -> Tables -> Rows -> Columns
关系型      数据库          表            行              列  
ES -> Indices   -> Types  -> Documents -> Fields
ES       索引            类型            文档           域(字段)

如何运维 
help 显示帮助                       信息
http://192.168.4.15:9200/_cat/health?help
Rest API 的简单使用
nodes 查询节点状态信息
http://192.168.4.15:9200/_cat/nodes?v
索引信息
http://192.168.4.15:9200/_cat/indices?v

ElasticSearch 基本查询语法
https://blog.csdn.net/zhanglinlang/article/details/82891547?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一、Java基础
java 中 IO 流分为几种?
https://www.cnblogs.com/QQ846300233/p/6046388.html

49.什么是死锁?

  死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。例如,在某一个计算机系统中只有一台打印机和一台输入 设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此时打印机正被进程P2 所占用,而P2在未释放打印机之前,又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去,均无法继续执行,此时两个进程陷入死锁状态。

死锁产生的原因:

1. 系统资源的竞争 :系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。

2. 进程运行推进顺序不合适:进程在运行过程中,请求和释放资源的顺序不当,会导致死锁。
说一下 jvm 调优的工具?


线程与进程的区别
1.定义

进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程:进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

2.关系
一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。

3.区别
  进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

2) 线程的划分尺度小于进程,使得多线程程序的并发性高。

3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

5) 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

https://www.cnblogs.com/cocoxu1992/p/10468317.html


 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 数据结构
 为什么MySQL数据库索引选择使用B+树
 自己总结一下。
数据库使用B+树肯定是为了提升查找效率。

但是具体如何提升查找效率呢?

查找数据,最简单的方式是顺序查找。但是对于几十万上百万,甚至上亿的数据库查询就很慢了。

所以要对查找的方式进行优化,熟悉的二分查找,二叉树可以把速度提升到O(log(n,2)),查询的瓶颈在于树的深度,最坏的情况要查找到二叉树的最深层,由于,每查找深一层,就要访问更深一层的索引文件。在多达数G的索引文件中,这将是很大的开销。所以,**尽量把数据结构设计的更为‘矮胖’**一点就可以减少访问的层数。
在众多的解决方案中,B-/B+树很好的适合。B-树定义具体可以查阅,简而言之就是中间节点可以多余两个子节点,而且中间的元素可以是一个域。

相比B-树,B+树的父节点也必须存在于子节点中,是其中最大或者最小元素,B+树的节点只存储索引key值,具体信息的地址存在于叶子节点的地址中。这就使以页为单位的索引中可以存放更多的节点。减少更多的I/O支出。

因此,B+树成为了数据库比较优秀的数据结构,MySQL中MyIsAM和InnoDB都是采用的B+树结构。不同的是前者是非聚集索引,后者主键是聚集索引,所谓聚集索引是物理地址连续存放的索引,在取区间的时候,查找速度非常快,但同样的,插入的速度也会受到影响而降低。聚集索引的物理位置使用链表来进行存储。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
shell
4)把该文件压缩?
答:tar jcvf AccQryFree2016.log.tar.bz2 /root/boss/log/AccQryFree2016.log

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:31:50  更:2021-07-13 17:32:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/1 8:29:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码