
312个问题,问题涵盖广、从自我介绍到大厂实战、19大主题,一网打尽、真正提高面试成功率
一、Linux
1. 说⼀下linux的常⽤命令?
说一些高级命令即可
systemctl 设置系统参数 如:systemctl stop firewalld关闭防火墙
tail / head 查看文件尾部或开头,通常用来查看日志文件
grep 查找文件 通常配合管道符 | 使用
scp 将文件分发给其他服务器
ping 查看网络是否正常
yum 下载并安装软件包
tar 解压缩
2. 如何查看linux⽂件的前⼗⾏ 或者 后⼗⾏
head -n 10 /tmp/tmpfile # 查看⽂件前10⾏
tail -n 10 /tmp/tmpfile # 查看⽂件后10⾏
cat filename | head -n 300 | tail -n +100 # 显示100⾏到300⾏
cat filename | tail -n +10 | head -n 20 # 从10⾏开始,显示20⾏,即显示10-39
⾏
3. 只知道进程名称,⽐如yarn,如何找到此进程并杀死?
ps aux | grep yarn 来查找进程yarn进程 IDkill -9 id 强制杀死进程
⼆、Shell
1. Shell 常⽤⼯具及写过的脚本
1)常⽤⼯具:
scp 通过 SSH 协议复制文件 scp file.txt user@host:/path/to/destination
sort 对文件内容排序 sort file.txt
bash 执行 Shell 脚本 bash ./a.sh
echo 输出值 echo('666')
2)⽤ Shell 写过哪些脚本
(1)集群启动,分发脚本 start-all.sh
(2)数仓与 MySQL 的导⼊导出 (sqoop脚本)sqoop - ...
(3)数仓层级内部的导⼊:ods->dwd->dws->dwt->ads
2. Shell 中单引号和双引号区别?
1)单引号不取变量值2)双引号取变量值3)反引号 ` ,执⾏引号中命令4)双引号内部嵌套单引号,取出变量值5)单引号内部嵌套双引号,不取出变量值
三、MySQL
1. MySQL 索引使⽤有哪些注意事项呢?
1)索引哪些情况会失效
- (1)查询条件包含or,会导致索引失效。
- (2)隐式类型转换(查询时自动将某种数据类型转换为另一种数据类型),会导致索引失效,例如age字段类型是int,我们where age = “1”,这样就会触发 隐式类型转换。
- (3)like通配符会导致索引失效。注意:"ABC%“会⾛range索引,”%ABC"索引才会失效。
- (4)联合索引(包含多个列的索引),查询时的条件列不是联合索引中的第⼀个列,索引失效。
- (5)对索引字段进⾏函数运算。
2)索引不适合哪些场景
- 数据量少的不适合加索引
- 更新⽐较频繁的也不适合加索引
- 离散性低(数据值之间的差异小)的字段不适合加索引(如性别)
2. 数据库的优化
- 1)加索引
它会将表中的某一列或多列的值与对应的记录位置,数据库可以避免全表扫描,而是通过索引直接定位到符合条件的记录,从而显著减少查询的时间
- 2)⾏列裁剪,避免返回不必要的数据(select 字段)
通过只选择需要的列(而不是
SELECT *),减少网络传输的数据量
3)适当分批量进⾏ 避免一次性大数据量操作
- 4)优化sql结构
- 5)分库分表
3. Hive数仓与mysql数据库的区别?
- 1)数据规模
- Hive⽀持很⼤规模的数据计算;数据库可以⽀持的数据规模较⼩。
- 2)计算引擎
- Hive底层运⾏的是MapReduce程序,但是数据库有⾃⼰的执⾏引擎。
- 3)数据更新
- Hive读多写少,不建议对数据改写;数据库对数据的增删改操作⽐较多。
- 4)存储数据位置
- Hive数据实际是存储在HDFS上,数据库的数据存储在块设备上或者本地⽂件系统中
- 5)数据冗余
- hive允许一定量的数据冗余
四、Hadoop
1. Hadoop 常⽤端⼝号

2. HDFS 读流程和写流程 *
读流程
- 1)客户端向namenode请求下载⽂件,namenode通过查询元数据,找到⽂件块所在的datanode地址。
- 2)挑选⼀台datanode(就近原则,然后随机)服务器,请求读取数据。
- 3)datanode开始传输数据给客户端(从磁盘⾥⾯读取数据放⼊流,以packet为单位来做校验)。
- 4)客户端以packet为单位接收,先在本地缓存,然后写⼊⽬标⽂件。
- 这个读流程是⽐较简单的,⾥⾯还涉及到⽤户读权限的校验以及⽂件是否存在的判断
写流程
- 1)客户端向namenode请求上传⽂件,namenode检查⽬标⽂件是否已存在,⽗⽬录是否存在。
- 2)namenode返回是否可以上传。
- 3)客户端请求第⼀个 block上传到哪⼏个datanode服务器上。
- 4)namenode返回3个datanode节点,分别为dn1、dn2、dn3。
- 5)客户端请求dn1上传数据,dn1收到请求会继续调⽤dn2,然后dn2调⽤dn3,将这个通信管道建⽴完成。
- 6)dn1、dn2、dn3逐级应答客户端
- 7)客户端开始往dn1上传第⼀个block(先从磁盘读取数据放到⼀个本地内存缓存),以packet为单位, dn1
- 8)收到⼀个packet就会传给dn2,dn2传给dn3;dn1每传⼀个packet会放⼊⼀个应答队列等待应答
- 9)当⼀个block传输完成之后,客户端再次请求namenode上传第⼆个block的服务器。(重复执⾏3-7 步)
3. HDFS 常⽤命令
hdfs dfs -help
hdfs dfs -cat <hdfsfile> # 查看⽂件内容
hdfs dfs -mkdir <path> # 新建⽬录
hdfs dfs -put # 上传本地⽂件到hdfs
hdfs dfs -rm # 删除⽂件或⽬录
hdfs dfs -get < hdfs path> < localpath> # 将hdfs⽂件下载到本地
4. HDFS ⼩⽂件处理
a) 存储层⾯(1)1 个⽂件块,占⽤ namenode 多⼤内存 150 字节(2)128G 能存储多少⽂件块?(3)128 * 1024*1024*1024byte/150 字节 = 9 亿⽂件块(4)极⼤的占⽤了NameNode的内存b) 计算层⾯每个⼩⽂件都会起到⼀个 MapTask,占⽤了⼤量计算资源
a)采⽤ har 归档⽅式,将⼩⽂件归档b)采⽤ CombineTextInputFormat

最低0.47元/天 解锁文章
737

被折叠的 条评论
为什么被折叠?



