数据开发秋招实习面经,发出来攒攒人品,求一个大厂sp
实习
字节
字节一面
java gc收集器有什么,都用了什么gc算法
- 串行垃圾回收器(Serial Garbage Collector)
串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、老年代使用串行回收;新生代复制算法,老年代标记-压缩;垃圾收集的过程中会Stop The World(服务暂停)
- Parallel Old 收集器
Serial 收集器的老年代版本,它同样是一个单线程收集器。它主要有两大用途:一种用途是在 JDK1.5 以及以前的版本中与 Parallel Scavenge 收集器搭配使用,另一种用途是作为 CMS 收集器的后备方案。
- ParNew
ParNew收集器其实就是Serial收集器的多线程版本。新生代并行,老年代串行,新生代复制算法、老年代标记-压缩
- Parallel Scavenge
Parallel Scavenge 收集器关注点是吞吐量(高效率的利用 CPU)。CMS 等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。所谓吞吐量就是 CPU 中用于运行用户代码的时间与 CPU 总消耗时间的比值。
新生代采用复制算法,老年代采用标记-整理算法。
- Parallel Old收集器
Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和标记-整理算法。这个收集器是在JDK 1.6中才开始提供
- 并发标记扫描垃圾回收器(CMS Garbage Collector)
CMS 收集器是基于标记—清除算法实现的
- G1垃圾回收器(G1 Garbage Collector)
使用多线程和标记-整理算法
并发线程池是什么
gc log日志
2014-07-18T16:02:17.606+0800(当前时间戳): 611.633(时间戳): [GC(表示Young GC) 611.633: [DefNew(单线程Serial年轻代GC): 843458K(年轻代垃圾回收前的大小)->2K(年轻代回收后的大小)(948864K(年轻代总大小)), 0.0059180 secs(本次回收的时间)] 2186589K(整个堆回收前的大小)->1343132K(整个堆回收后的大小)(3057292K(堆总大小)), 0.0059490 secs(回收时间)] [Times: user=0.00(用户耗时) sys=0.00(系统耗时), real=0.00 secs(实际耗时)]
user时间为什么比real时间长
一般的GC事件中,real time是小于sys+user time的,因为一般是多个线程并发的去做GC,所以real time是要小于sys+user time的。比如说:user+sys是2秒,如果是有5个GC线程并发的做垃圾回收,那么real time差不多是2000/5=400ms左右。
如果user时间比real时间短,可能有以下问题:
1.IO负载繁重
当服务器的IO负载非常重的时候(网络、磁盘访问、用户交互),real time就会变大。应用做GC日志打印的时候,也需要访问磁盘。当磁盘的负载非常重的时候,GC事件就有可能被阻塞,这会导致real time变长。2.CPU不够用
如果服务器上跑了很多进程,你的应用很不幸没有得到足够的CPU时间,它就需要很多的等待。当你的进程在等待的时候,real time显然就比sys+user时间长了。
java类加载机制
加载 -- 校验 ---- 准备 ---- 解析 --- 初始化(真正执行java方法) ---- 使用 -- 卸载
maven怎么排除依赖冲突
maven常见指令,package和install有什么区别
1.mvn clean 清空产生的项目( target里)
2.mvn compile 编译源代码
3.mvn install 在本地repository中安装jar(包含mvn compile,mvn package,然后上传到本地仓库)
4.mvn deploy 上传到***(包含mvn install,然后,上传到***)
5.mvn package 打包
6.mvn test 运行测试
7.mvn site 产生site
8.mvn test-compile 编译测试代码
9.mvn -Dtest package 只打包不测试
10.mvn jar:jar 只打jar包
11.mvn test -skipping compile -skipping test-compile 只测试而不编译,也不测试编译
12.mvn deploy
13.mvn source.jar 源码打包
cookies作用
session作用
tcp/udp应用场景
tcp:要求数据可靠的场景,邮件、文件传输
udp:追求低时延,直播视频
tcp/udp有什么不同
UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等
TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。 TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
三次握手是什么,为什么需要三次握手
跑spark的过程中当某个节点压力过大,怎么调优
spark参数调优
syschronized和volatile有什么区别
volatile
关键字解决的是内存可见性的问题,会使得所有对volatile
变量的读写都会直接刷到主存,即保证了变量的可见性。这样就能满足一些对变量可见性有要求而对读取顺序没有要求的需求。
synchronized
关键字解决的是执行控制的问题,它会阻止其它线程获取当前对象的监控锁,这样就使得当前对象中被synchronized
关键字保护的代码块无法被其它线程访问,也就无法并发执行。更重要的是,synchronized
还会创建一个内存屏障,内存屏障指令保证了所有CPU操作结果都会直接刷到主存中,从而保证了操作的内存可见性,同时也使得先获得这个锁的线程的所有操作,都happens-before于随后获得这个锁的线程的操作
flink+kafka怎么保证精准一次性消费
两阶段提交+checkpoint+barriy+offset回拨
二叉树的层序遍历
字节二面
threadlocal了解吗,说说threadlocalMap
ThreadLocal也叫做线程本地变量,ThreadLoacl为变量在每个线程中的都创建了副本,每个线程可以访问自己内部的副本变量,线程之间互不影响
每个Thread线程内部都有一个Map,Map里面储存线程本地对象key和线程的变量副本value,Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向Map获取和设置线程的变量值;这样对于不同的线程,每次获取副本值时,别的线程并不能获取到当前线程的副本值,这样就形成了副本隔离,互不干扰
object方法
1.clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
2.getClass方法
final方法,获得运行时类型。
3.toString方法
该方法用得比较多,一般子类都有覆盖。
4.finalize方法
该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
5.equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
6.hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。一般必须满足obj1.equals(obj2)==true。可以推出obj1.hash- Code()==obj2.hashCode(),但是hashCode相等不一定就满足equals。不过为了提高效率,应该尽量使上面两个条件接近等价。
7.wait方法
wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生。
(1)其他线程调用了该对象的notify方法。
(2)其他线程调用了该对象的notifyAll方法。
(3)其他线程调用了interrupt中断该线程。
(4)时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
8.notify方法
该方法唤醒在该对象上等待的某个线程。
9.notifyAll方法
该方法唤醒在该对象上等待的所有线程。
hashcode和equals方法的关系,equals相等,hashcode一定相等吗,反过来呢
equals相等,Hashcode不一定相等
1 若是equals方法未重写,比较的是堆中地址相等 ,则是同一个对象,hashcode不管重不重写都相等
2 若是equals方法重写,比较的是对象的成员变量值,equals相等有可能是堆中new了一个对象,地址不同
所以hashcode若是没有重写,则根据地址算法不相等,
若是hashcode方法也重写了,则根据成员变量的hashcode值是相等的。hashcode相等,equals不一定相等
2.1若是Hashcode方法未重写,代表是一个地址,那么就是同一个对象,equals 不管重写不重写都相等
2.2若是hashcode方法已经重写,则代表的是成员变量的hashcode值,相等,则成员变量相同,
若是equals方法重写了,比较的也是成员变量值则相等,
若是equals方法未重写,比较的是堆中地址, 则可能是new了一个新的对象,equals不相等
sleep和wait
sleep不释放锁,wait释放锁
多个线程同步执行,让其中一些线程先执行,等他们执行结束,自己再执行
join
mysql聚簇索引和非聚簇索引
https://zhuanlan.zhihu.com/p/115778804
https://blog.csdn.net/alexdamiao/article/details/51934917
https://cloud.tencent.com/developer/article/1541265
聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据
非聚簇索引:将数据存储和索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因
mysql写过的最大一张表的数据量
spark提交yarn
client和clusater模式有什么区别
driver端运行的位置不同
提交yarn的流程
cluster模式有什么好处
driver在其他节点运行
有一个java程序,上线以后cpu负载重,怎么定位问题
模拟CPU占满还是比较简单,直接写一个死循环计算消耗CPU即可。
/** * 模拟CPU占满 */ @GetMapping("/cpu/loop") public void testCPULoop() throws InterruptedException { System.out.println("请求cpu死循环"); Thread.currentThread().setName("loop-thread-cpu"); int num = 0; while (true) { num++; if (num == Integer.MAX_VALUE) { System.out.println("reset"); } num = 0; } }请求接口地址测试
curl localhost:8080/cpu/loop
,发现CPU立***升到100%通过执行
top -Hp 32805
查看Java线程情况执行
printf '%x' 32826
获取16进制的线程id,用于dump
信息查询,结果为803a
。最后我们执行jstack 32805 |grep -A 20 803a
来查看下详细的dump
信息。这里
dump
信息直接定位出了问题方法以及代码行,这就定位出了CPU占满的问题。
spark任务出问题,怎么定位
自己定义一个类似jdk的string类,怎么在程序里面引用
修改类加载器
类加载器都有什么
启动类加载器 扩展类加载器 第三方
线程加载器有了解吗
spark和flink区别
批处理和实时处理
flink为什么能做到准实时处理
二叉树遍历和还原
字节三面
spark为什么比mr快
spark的中间计算结果都不落盘吗
为什么要划分stage
在项目中遇到的你认为最难的问题,你是怎么解决的
单词搜索(给一个list的字符串集合,快速判断,前缀树实现),一个字符串的单词搜索,时间复杂度是多少
字节一面 --- 数据仓库
java执行的过程
jvm存在的意义
8大基本类型
char
byte
boolean
int long short
double float
char
string list set map数据结构 和基本类型有什么区别
arraylist 和linkedlist 区别,为什么arrylist查询快
线程 & 进程的区别
怎么实现多线程顺序输出下面这,ABC是三个不同的线程
A print("a")
B print("b")
C print("c")
A - > B -> C
8:组件(常驻线程 add(1)) 10s
三个节点,同时对一个数据库中的一条记录执行add(1)操作,怎么保证同一时间只有一个执行成功
大数据知识
1:存储 hdfs hadoop
hdfs全称和普通的文件系统有什么不一样,你的意思是它可以无限扩展,为什么不行,后来hdfs怎么做的改进
文件系统
2:hdfs
namenode a//
/ \
namenode1 namenode2 namenode3 namenode4
datanode dataname
a // a_1 // d_1
1 a // a_1 //
2 a // a_1 //
3 a // a_1 //
4 a // a_1 //
3:spark 的join
4:算法题
1:给你一个数字,1234,希望返回一个数字
a. 返回的数字由我给你的数字所组成
b. 返回的数字要比我给你要大
c. 返回的数字要正好比我给你的数字大一位
返回比输入数值大的数值的最小的一个结果。
对工作有什么预期
a. 实时数据的处理
b. 调优级别
2:5月底6月初 实习转正
3:北京
字节二面
mr和普通程序有啥区别
hbase为什么查询快
zk的选举说一下
你觉得zk比较重要的功能
spark的shuffle(重点)
spark本地化
字节三面
自我介绍一下
说说什么是大数据
大数据和以前有什么不一样
用什么写spark的,用过sql吗,给一道题写一下
一个sql
题目:假设有一个用户充值日志表A,字段如下:
字段 类型 含义 dist_id int 区组id account string 账号 money int 充值金额 create_time string 订单时间 求解:统计某天区组下充值额最大的账号以及金额
SELECT * FROM (SELECT dist_id dist_id,account account,money money,ROW_NUMBER() over(PARTITION BY dist_id ORDER BY money DESC) row_num FROM test) t1 WHERE t1.row_num=1
能实习多久,最好能保证4个月
腾讯
自我介绍
怎么用的spark
hadoop了解吗
说说hadoop的流
hbase的region切分
sql 查找一张表中的重复字段
一行shell输出一个文件的第七行第四列
判断父子域名
美团
一面 --- 30min
自我介绍
java final
线程安全的单例模式
写一个sql
java集合
set和list区别
快排的时间复杂度和空间复杂度
智力题 3L和5L的桶,收集4L的水
秋招
陌陌 意向
一面
sql 每个班每科成绩top10(怎么优化/不使用窗函数怎么做)
mr执行流程(yarn)
获取某个目录下所有路径的数字
实习内容
hive三级分区怎么解决小文件问题
数仓建模了解吗
springboot的配置文件有哪些,优先级是什么
二面
自我介绍
hive建模说了解吗(建议看一下阿里巴巴大数据实践之路)
一个伪代码题目,用mr/spark/hivesql进行解答(类似最常出现的商品对)
如何进行etl链路优化
如果链路慢,但是没有sla风险,怎么优化(类似上一道题)
死锁是什么
如何破坏死锁
怎么数据链运行慢定位问题,对任务进行优化
怎么处理小文件
怎么确定是数据倾斜(哪项参数查看),怎么解决
reduce阶段都发生了什么,有没有进行分组
平时喜欢看什么书,谷歌的三篇论文看了吗
在读取数据库数据的时候,由于数量大,花费时间长,中间有人更改了某一项,读取的数据是更改前还是更改后
mvcc知道吗
数据库视图
数据库的三大范式,都有哪些区别,举例说明
数据库的第三范式为什么要这么设计,列式存储进行数据冗余,违反了第三范式,存在什么问题
流式计算存在的问题,流批一体的问题
字节流式数据目前的技术
未来的职业规划,在字节能得到你要的成长吗
反问:小文件合并的解决方案,流批一体的前景
hr面
四面
自我介绍
说一下你的实习经历,有哪些事情印象深刻
挑一个你认为最有挑战或者收获最大的项目介绍一下
怎么解决小文件问题
一道题:有一份用户gps轨迹的数据和全国100万个经纬度及其对应城市的名单,怎么快速找到这些城市在这些用户中的pv和uv
设计一个长链接转短链接系统
hbase为什么读快
lsm特点
lsm为什么有合并这个操作
陌陌有一栋楼,修建电梯,怎么优化使得电梯修建最合理,怎么建模,优化目标是什么
百度
提前批一面
自我介绍
怎么处理小文件
迁移spark3有什么收益
m个苹果,放在n个盘子里。有多少放法
判断环形链表
怎么进行任务优化,有什么方法论
提前批二面
自我介绍
怎么调优
怎么合并小文件
有这样一个评分器,我希望他对元素1的评价比元素0的评价高,现在有一个很大的元素集合,每个元素有两个组成,第一个是评分器的打分,第二个是这个元素本来的评价(0、1),每次从中没有放回地取两个,这两个中元素1比元素0评分高,则认为评分器打分好,根据这个指标计算评分器地总体打分率
说说你的解决方案的时间复杂度
如果有k台机器,怎么降低复杂度,能降低多少
只能降低遍历的复杂度吗,可以降低排序的时间复杂度吗,能降低多少
你在项目里面怎么计算复工等级,有没有考虑企业停工的经济损失
网易有道 意向
一面
自我介绍
挑一个项目或者实习经历说一下
挑一个优化的点说一下
有没有构思过怎么设计一个自动化调优平台
介绍一下mr
介绍一下hdfs
股票买卖的最大值
二叉搜索树插入节点
介绍一下jvm的区域
ClassA a=new Class(1) 在jvm中怎么存储
反问
二面
自我介绍
在字节做什么
数据开发和数据平台开发偏向哪个,为什么
介绍一下数据仓库
sql题目,给一个班的数据成绩进行排名
有这样一个表,时间戳 用户id 用户行为,怎么计算出每天的新用户数量
如果个别天没有新用户,怎么补全这些日期
设计一个软件系统,说说你的思路
你在项目中怎么评价你的系统性能,有什么指标吗
三面
数字字符串转ip地址 https://www.nowcoder.com/questionTerminal/ce73540d47374dbe85b3125f57727e1e
介绍项目
美团(到家) 意向
技术终面
实习直通车
为啥拒了美团实习offer
说说在字节干了什么
你们组多少人,怎么分工,只是做离线吗
介绍一下数仓建模
基础数仓有多少表,对外提供多少指标
说一说日活表的产出逻辑,经过ods->DWD->DWM的过程
你们和业务方有什么区别,定位是什么
字节和美团怎么选
有什么问题想问
hr面
联想 oc
面试官自我介绍
自我介绍
说说你的项目
数据倾斜怎么解决
实习和你在实验室有什么区别吗,你学到了什么
你接触到的数据量有多大,怎么针对这些处理的
怎么预测一个人的收入
你觉得你最大的不足是什么,或者说你身边的人觉得你哪里还有不足
360(数据平台)
一面
自我介绍
说一下实习
有什么难点,怎么解决的
说一下项目里面的难点,怎么解决的
看过什么源码,介绍一下spark源码
k个一组翻转链表
int和integer有什么区别
final 值 方法 类有什么区别
java方法是值传递还是对象传递
二面
换了时间就没下文了,算放弃了?
京东(物流)OC
一面
自我介绍
怎么优化spark
怎么处理数据倾斜
java后端做过吗,web后端呢
springboot aop知道吗
说一下你对多线程的理解
threadlocal oom是为什么
java sout(0.1+0.2)输出什么,为什么
如果让你开发一个flink项目,你怎么从0开始开发,有什么计划
反问
二面
自我介绍
说一个你在笔试中影响最深刻的题目,或者是你觉得当时没做好的题目
java juc用过吗,简单介绍一下
java web呢
假如我在后端想要控制数据库同时查询的请求,比如最多允许5个接口同时查询,多余5个的接口会暂时挂起,怎么实现,如果是限制特定接口的同时查询次数呢,多个节点能做吗,如果当某个接口查询时间过长导致其他请求阻塞,怎么处理
怎么处理数据倾斜,项目中怎么做的
腾讯
一面(PCG)
自我介绍
说下spark提交流程
mr和spark的不同
为什么要迁移到spark3
项目中比较难的地方,怎么解决的
一张公众号表和公众号下文章对应表,一张用户对不同文章的操作(浏览 点赞 评论 打赏 转发),怎么求热度前一百的公众号
一道场景题目
了解深度学习和机器学习吗
二面(PCG)
自我介绍
说说项目中的亮点
扔鸡蛋
给定一个100层的阶梯,阶梯间的高度差是递增的(e.g. 第一层和第二层之间间隔1, 第二层和第三层间隔2, 以此类推)。
同时给定一种玻璃球,这种玻璃球在层级之间掉落时有一定的承受度,如果高度差大于其承受范围的话,玻璃球就会碎掉,
如果小于承受范围的话,就安全无事。现在我们的目标就是找到阶梯上的临界层k(其定义为k-1层->k层玻璃球是安全的,k层->k+1层玻璃球会碎)。
现在给出几个定义:
尝试(try):从任意一层m,往相邻一层m+1,做一次掉落实验,称为一次尝试。
策略(solution):具体的尝试步骤构成一个策略
策略的尝试次数上界(最坏情况下的尝试次数):给定任何一个策略,都会有一种k的情况(最坏情况),
会使得需要用最多的尝试次数才能将临界层找到,这个最多的尝试次数称为该策略的尝试次数上界策略之间的优劣:尝试次数上界越小越优
最终的问题:给定2个一模一样的玻璃球,在保证找到临界层的情况下,给出最优策略。
一面(腾讯云)
自我介绍
项目架构设计
为什么选用hbase,hbase读数据流程(越详细越好)
熟悉什么大数据组件
介绍mr、spark及两者的不同
spark为什么比mr快
项目中如何确认用mr还是spark,为什么
手写快排
二面(腾讯云)
自我介绍
说一下小文件问题的原因和解决方案
说一下spark shuffle
字节集群资源有多少,怎么分配的,你能使用多少,不同队列之间会影响吗
说一下你们的业务流程
反问
快手(海外数据研发中心)OC)
一面
自我介绍
问项目
怎么优化spark
怎么处理小文件
快速得到一张表的所有字段去重后值的数目
二面
自我介绍
挑一个项目介绍一下
怎么处理项目中遇到的问题,深挖项目
介绍一下你实习中做的哪些工作
怎么进行维度建模,怎么进行业务侧开发,有什么规范或者心得
维表太宽,怎么处理
三面
自我介绍
怎么优化数据链路,整体收益是多少,为什么这么优化
怎么处理数据倾斜,有什么方法
有无限大内存,有100亿的数字,找出top1w,怎么做,时间复杂度是多少
阿里 放弃
一面 阿里妈妈
自我介绍
怎么处理小文件,为什么这么处理,字节为什么选用这个方案,spark最后不是有merge吗,为什么不行,spark重分区算子,有什么区别
spark shuffle了解吗,说一下,知道shuffle service吗
说说mr和spark的不同
怎么处理数据倾斜
有一个表,第一列是节点,第二列是节点的父节点,一个节点有多个父节点,求指定节点的所有父节点(父节点的父节点也算),怎么做,时间复杂度是多少
反问
二面 阿里妈妈
自我介绍
说一下你的毕设
问项目
感觉聊的不错,但是挂了,应该是没hc了
#面经##腾讯##百度##美团##陌陌##字节跳动##大数据开发工程师#