数据研发工程师实习面试问题记录一

快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序
可以开始寻找比6小的数从右往左找第二次比较,这次要变成找比k大的了,而且要从前往后找
所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置
归并排序
归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。
第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3;
第二次归并后:{6,100,202,301},{1,8,38},比较次数:4;
堆排序
堆实际上是一棵完全二叉树
即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。
即每次调整都是从父节点、左孩子节点、右孩子节点三者中选择最大者跟父节点进行交换
插入排序--直接插入排序
先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止O(n^2).
插入排序---希尔排序
选择一个增量序列
按增量序列个数k,对序列进行k 趟排序;
冒泡排序
自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒
桶排序/基数排序
把数据分组,放在一个个的桶中,然后对每个桶里面的在进行排序。
可以把桶设为大小为10的范围
对A[1..n]从头到尾扫描一遍,把每个A[i]放入对应的桶B[j]中
再对这100个桶中每个桶里的数字排序,这时可用冒泡,选择,乃至快排
最后,依次输出每个桶里面的数字,且每个桶中的数字从小到大输出,这  样就得到所有数字排好序的一个序列了。  
java虚拟机
Java虚拟机运行时数据区分为以下几个部分: 
方法区、Java栈、Java堆、程序计数器。
程序计数器CPU必须具有某些手段来确定下一条指令的地址使其保持的总是将要执行的下一条指令的地址 用来计数的,指示指令在存储器的存放位置,也就是个地址信息
Java栈
线程私有 保存一个方法的局部变量、操作数栈、常量池指针
方法区
保存装载的类信息 类型的常量池 方法信息
Java堆
Java堆是所有线程共享的存放对象实例被成为GC堆  应用系统对象都保存在Java堆中


gc新生代算法
标记清除--首先通过根节点,标记所有从根节点开始的可达对象未被标记的对象就是未被引用的垃圾对象。然后,在清除阶段,清除所有未被标记的对象。
标记压缩--将所有的存活对象压缩到内存的一端。之后,清理边界外所有的空间。
复制算法--将原有的内存空间分为两块,每次只使用其中一块,在垃圾回收时,将正在使用的内存中的存活对象复制到未使用的内存块中,之后,清除正在使用的内存块中的所有对象,交换两个内存的角色,完成垃圾回收
分代思想
依据对象的存活周期进行分类,短命对象归为新生代,长命对象归为老年代。
根据不同代的特点,选取合适的收集算法
少量对象存活,适合复制算法
大量对象存活,适合标记清理或者标记压缩
java基础
线程进程共享内存
一个进程中可以包含若干个线程  进程作为分配资源的基本单位 进程间相互独立 进程在执行过程中拥有独立的内存单元
线程作为独立运行和独立调度的基本单位
子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间
操作系统的设计,因此可以归结为三点:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。


简单移动平均法
sma[t]= mean(ts[1:t]) 
加权移动平均法
wma[t]= sum( ts[(t-k+1):t] * weight )
k期移动平均法(简单移动平均法的优化,取最近K期的均值)
kwma[t]= mean(ts[(t-k+1):t])
指数平滑法 平滑系数α的选择(时间越远权重小)
ewma[t]= a*ts[t] + (1-a)*ewma[t-1]
当时间数列无明显的趋势变化,可用一次指数平滑预测。
二次指数平滑预测
二次指数平滑是对一次指数平滑的再平滑。它适用于具线性趋势的时间数列。
三次指数平滑预测
三次指数平滑预测是二次平滑基础上的再平滑。
它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权,新数据给较大的权,旧数据给较小的权。


mapreduce 两个大文本连接
reduce side join 重分区连接 reduce端连接
map函数同时读取两个文件File1和File2对每条数据打一个标签(tag)
在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 然后对于同一个key,对File1和File2中的数据进行join
map side join 小表连大表
Semi Join 半连接  另一个map端连接 连接的数据集中有一个数据集非常大,但同时这个数据集可以被过滤成小到可以放在内存中。
File1,将其参与join的key抽取出来,保存到文件File3 将File2中不在File3中的key对应的记录过滤掉,剩下的reduce阶段的工作与reduce side join相同
int值排序
int+出现次数
hive 
spark
RDD作为数据结构,本质上是一个只读的分区记录集合
数据分区的集合,能根据本地性快速访问到数据的偏好位置,依赖关系,计算方法,是否是哈希/范围分区的元数据


KPI统计
电影推荐
矩阵乘法
1 0 3   1 6 
4 8 7   9 5
        4 6
K   V
1 1 a 1 1 a第一行 b第一列 a矩阵 a第一列 值
1 2 a 1 1 a第一行 b第二列 a矩阵 a第一列 值
1 1 a 3 3 a第一行 b第一列 a矩阵 a第三列 值
1 2 a 3 3 a第一行 b第二列 a矩阵 a第三列 值
把要乘的数放在一起
mahout推荐
协同过滤
基于物品推荐
建立物品的同现矩阵-AB物品同时出现的次数
建立用户对物品的评分矩阵
同现矩阵X评分矩阵=物品推荐分数


优化:压缩输出文件、合并小文件har 读入多个文件作为一条input
自定义排序 自定义分组 自定义分区
top k 有序树
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值