1、自我介绍
    2、你这些实习好像都很短啊,原因是什么?
    3、讲一下华为实习的内容吧。
    4、Spark的宽窄依赖了解么?
    父RDD分区数据划分到子RDD的多个分区 宽
    父RDD分区数据划分到子RDD的一个分区 窄
    5、Spark中的RDD、dataFrame、dataSet的区别?
    RDD -> 对象
    dataFrame -> 对象+字段
    dataSet -> 对象 + 字段 + 字段属性

    6、Spark中的map和flatMap的区别是什么?
    map 将RDD每个元素 转化成新的RDD
    flatMap 将RDD每个元素的所有内容 转化成新的RDD

    7、Spark中的groupByKey、reduceByKey、aggregateByKey的区别?

    groupByKey 直接shuffle
    reduceByKey 先聚合再shuffle 不同partition以及partition之间的聚合操作相同
    aggregateByKey 先聚合再shuffle partition之间和partition内部不同的聚合操作,并可以指定初始值


    8、一个完整的MapReduce整个有哪些过程?这些过程中哪些会用到排序呢?

    • 文件通过split分割成多个split文件
    • 按行读取,map对其处理
    • 对key进行分区(如有Combiner,则合并)写入环形缓冲区
    • 溢写完合并文件、等待reduce拉取

    • fetch现场拉取
    • 两个merge (溢写merge、全局merge)
    • 合并后排序
    • 经过reduce方法,写入HDFS


    9、Hadoop里面的SecondaryNameNode的作用是什么?具体恢复过程了解么?
    用于灾备,合并fsimage + editlog

    10、Hive里面的join分哪些类型呢?Hive的join的优化一般会怎么优化?除了mapjoin还知道别的么?

    数据倾斜原因

    • Key分布不均
    • 业务特性
    • HQL语句问题(GROUP BY, COUNT DISTINCT(),join)

    由于COUNT DISTINCT操作需要用一个Reduce Task来完成 所以COUNT DISTINCT 先group 再count

    join 、left join 、right join 、 full join 、left semi join

    1. 小表join大表
    2. join出现在where前 (提前过滤)
    3. 手动过滤NULL值(NULL=NULL 为True)


    11、kafka接触过吗?实时计算的Spark Streaming、Flink了解过吗?

    12、数仓分层一般分为哪几层?数仓建模时用到的雪花模型和星型模型的区别?

    ods 原始
    dwd 数据明细
    dws 数据聚合
    dwt 数据主题
    ads 业务层

    雪花模型 一张事实表一层维度表
    星型模型 一张事实表可能不止一层维度

    13、主要开发语言是什么?
    14、讲一下JVM的内存模型吧。

    • 虚拟机栈 (方法运行时 局部变量、加载类信息)
    • 堆 (对象存放的地方 , 内存划分 新生代(Eden+From+ To)老年代)
    • 方法区 (静态变量)
    • 程序计数器 (指向下一条字节码)
    • 本地方法栈 (有关本地方法的)


    15、常用的GC算法有哪些?怎么判断一个对象是否可以被回收?分代内存回收了解么?年轻代的继续划分?如果我要分配一个对象,这个对象已经超过了eden区的大小,这时会发生什么情况?

    GC : 标记清楚 复制 标记整理 分代回收
    判断被回收: 引用计数器、可达性分析
    内存回收 : Eden区满 minorGC 老年代满了 FullGC
    直接放入老年代


    16、常用的垃圾收集器,CMS和G1了解吗?
    CMS(Concurrent Mark Sweep)

    • 初始标记(被GCroot直接引用的对象)
    • 并发标记(多标、漏标)
    • 预清理(可被终止)
    • 重新标记(STW、三色标记法 黑灰白 bfs)
    • 并发清除

    G1

    • 内存布局:划分等大的区域块(分代)
    • 优先处理那些垃圾多的内存块的
      • 短暂STW
      • 开始CMS
      • STW Final Mark
      • 选择内存回收


    17、Java的双亲委派模型了解么?

    一个类加载器收到类加载请求,首先委派给其父类加载器加载。
    启动类
    |
    扩展类
    |
    应用类
    |
    自定义类


    18、Java里面支持多继承么?接口和抽象类的区别是什么?
    不支持
    接口是功能扩展
    抽象类的类的模板

    19、HashMap和ConcurrentHashMap的区别是什么?ConcurrentHashMap具体是怎么实现线程安全的,了解么?HashMap底层的数据结构了解么?二叉搜索树和平衡二叉树有什么区别?如何将一个二叉搜索树变成一个平衡二叉树

    ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成

    锁Segment实现线程安全

    1. HashMap底层的数据结构
    • 数组+链表/红黑树
    • 二分法构建
    • 中序排序构建

    红黑树:
    根和叶子节点为黑色
    上下不能同色
    每个节点到其子节点的黑色数目相同


    20、常用八大排序算法的时间复杂度?堆排序的时间复杂度是多少?建堆的时间复杂度?堆调整的时间复杂度?哪些排序是稳定的,哪些排序是不稳定的?如果一个数组是基本有序的,那我们要用什么排序会比较好?假设我们要对某个公司所有员工的年龄进行排序,这个时候用什么排序算法比较好?

    logn

    不稳定: 希尔、快速、选择、堆
    20210830 - 图1


    21、怎么判断两个链表是否相交?怎么优化?

    指针跑完后,到互相链表的起点去

    22、TCP和UDP的区别是什么?
    TCP:面向连接、稳定、慢
    UDP:面向报文、不稳定、快 、


    23、HTTP和HTTPS有什么区别?

    • HTTPS需要ca证书
    • HTTP明文传输、HTTPS为ssl加密传输
    • 端口不同80 443
    • http 无状态 https加密传输 身份认证


    24、子网掩码有什么用?

    划分子网用。子网掩码结合本地IP地址后,用来确定目标IP是否在“逻辑上”与本计算机在同一个网络内。

    25、进程和线程的区别?进程间通信的方式?

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

    进程是操作系统资源分配的最小单位
    线程是操作系统调度的最小单位
    一个进程中可以有多个线程,它们共享进程资源。

    进程间通信

    • 管道
    • 信号量
    • Socket
    • 消息队列
    • 信号
    • 共享内存


    26、什么是死锁,死锁产生的必要条件有哪些?

    两个进程因有限的互斥资源产生的无限制等待

    资源互斥
    请求和保持
    不剥夺
    循环等待


    27、数据库的事务?事务的特性?分别指的是什么含义?
    事务:一组对数据库的操作
    ACID
    原子性:要么成功,要么失败
    一致性:事务执行前后,状态一致
    隔离性:多个事务执行时具有隔离级别(互不干扰程度)
    持久性:事务提交后,改变是永久性的


    28、数据库的索引,比如MySQL的索引有了解么?B树和B+树有什么区别?聚簇索引和稀疏索引的区别?
    索引:为了提高检索效率,而设计的排好序的数据结构
    B树 ,都存
    B+树,非叶子节点存索引,叶子节点才存数据, 叶子节点间由链表连接

    Innodb用的是聚簇索引 (索引和数据一起)
    稀疏索引(数据和索引不在一起)

    29、MySQL的两个引擎InnoDB和MyISAM的区别是什么?

    InnoDB MyISAM
    事务 支持 不支持
    外键 支持 不支持
    索引 聚集索引 非聚集索引
    行锁 表锁

    MyISAM保存表的行数


    30、memchache和redis有了解过吗?

    基于内存的数据系统

    redis memchache
    数据类型 list、set、hash等数据结构 key-value


    31、一致性Hash有了解过吗?

    一致性哈希解决了简单哈希算法在分布式哈希表(Distributed Hash Table,DHT)中存在的动态伸缩等问题

    • 通过哈希环来实现、将服务器置于环中,将对象hash 顺时针找最近的服务器。


    32、linux常用的命令,我们要看操作系统中有哪些进程,用什么命令?如果看端口被哪些程序占用了,用什么看?
    ps -ef
    lsof -i


    33、常用的vim命令,如何跳到第一行?怎么跳到最后一行?如何删除一行?
    g
    G
    dd


    34、sed和awk用过么,用这两个实现把一个文件中的空行进行删除。


    35、正则表达式中的贪婪匹配和非贪婪匹配了解吗?这个具体写的时候怎么写了解么?


    36、常用的版本控制软件,git reset和rebase的区别是什么?

    [

    ](https://www.nowcoder.com/discuss/285388?type=all&order=time&pos=&page=1&ncTraceId=&channel=-1&source_id=search_all_nctrack)