跨专业大数据开发秋招经验总结
首先介绍一下基本情况,本科211,硕士985跨保计算机,最后拿到百度和美团意向书。我是专硕,只有两年,2019年入学,今年秋招。
我投大数据开发,一般来说,大数据应该有这么几种:数据仓库,数据分析/挖掘、大数据开发。注意岗位名称不一定和工作内容匹配,具体看岗位介绍。
准备面试主要包括刷题和看面经。注意刷题包括算法和SQL,算法可以去公众号labuladong下载电子书,使用leetcode或者牛客刷题,笔试一般都是牛客;SQL可以去牛客是sqlite3,leetcode是MySQL,有些题要花钱买会员;面经我是买的talkdata的书,可以加群965321299,里面有电子书资源,想买面经可以找群主买,买面经主要是节省时间,毕竟知道面试题去查也很浪费时间。最好有实习,没有实习建议自己学习一个到两个项目。
下面详细叙述这一年所做的事。
由于是跨专业,基础比较薄弱,看到别的同学都开始刷题。我也早早开始leetcode,有空就刷,200道左右。由于我之前对数据结构和算法代码写过多次,感觉还算轻松,当然刚开始刷题可以看答案,然后把不会的题记下来,反复刷。
研一上学期主要是刷题和上课。下学期在家待着;由于有考试,六月中旬来到学校,不让离开学校,所以一直没有实习。从今年4月开始看尚硅谷视频(直接看项目就行,不用对每个组件分开看了),到了学校开始看talkdata的书,刷剑指offer。
字节-飞书
问题:
1.概率论:事件独立,超几何分布
编程:
2.①给定字符串,删除非数字非字母的字符,要求删除后的第一个字母大写,其余小写②全局第一个字母大写
答:使用s.toLowerCase()转化为小写,然后将其他一些字母转为大写。
3.①两个表的建表语句:销售员维度表,销售记录明细表(create)
②用SQL计算最近七天每人每天的销售总量和总金额(select)
昆仑万维
问题:
1.spark streaming怎么消费kafka,有几种方式?
2.kafka架构
3.spark shuffle
4.常见排序算法和时间复杂度
5.数据来源,项目的收获
6.RDD特性
7.spark数据倾斜方式
8.有什么要问的?
编程:
9.字符串s中去除"ab",要求得到的结果不要有"ab"
例:s="aabbc",结果为"c" (使用栈解决)
10. 输出1-n的全排列(还有什么优化的地方)
优化:①对于一般的nums[]是通过交换和提前填充ArrayList<Integer>,省略boolean数组和backtrack里面省略nums数组,
这种方法无法保证字典序。
②对于nums[]是1-n的情况,实际上有两种优化:①省略nums(索引和值只差1)②省略boolean
科大讯飞
1.个人介绍,项目,实习
2.flume组件
3.项目里面flume基于内存还是磁盘,基于内存缺点
4.基于文件(WAL,writeAheadLog)
5.hadoop组件
6.hdfs包含
7.hadoop HA(是组件自带还是自己设计的),介绍(回答的不好,后面的问题一直在引导)
8.群体日志是什么日志,用处
9.editlog和fsimage合并(非HA和HA)
10.hdfs文件的元数据包含哪些部分(应该是namespace,块信息)
11.HDFS三副本机制
12.块信息在ha时怎么同步,非ha时两个namenode是否同时有block信息
13.spark streaming反压机制,令牌桶位置
14.自己实现反压机制 自己限制速率大小(没再问)
15.hbase/mysql 主从复制
16.hbase架构
17.hbase读写流程
18.定位到region的table获取数据,需要打开和读所有的hfile吗?
19.双亲委派,破坏这个机制来实现某些功能的情形
答:https://www.jianshu.com/p/bfa495467014
https://blog.csdn.net/qq_39016934/article/details/103468673?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
20.java堆划分
21.对象比较大,生命周期短,GC参数怎么调优
22.强软弱虚引用
23.类加载阶段
24.threadlocal底层
25.线程池的理解
26.JVM内存区域
27.方法栈(不太清楚具体哪个,跳过)
28.栈溢出的情形(递归,调节-Xss)
29.平时遇到内存溢出的情形,处理
答:-Xms和-Xmx,-XX:+HeapDumpOnOutMemoryError,让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后分析。
30.网络分层,tcp,ip,http在哪层
31.http与tcp关系
答:HTTP协议中的数据是利用TCP协议传输的,所以支持HTTP就一定支持TCP。
32.TCP四次挥手?客户端主动断开,time-wait在哪边?
服务端没有断开,处于什么状态,状态码?(指的是服务端发送FIN,提醒是close-wait)
33.线程之间的同步,需要什么原语(我回答的关键字synchronized)
34.Reentrantlock和synchronized底层实现不同
答:AQS和 java对象头,monitor
35.IO多路复用
36.堆外内存介绍,好处,缺点,什么情况使用
答:堆外内存也被称为直接内存。可以通过Unsafe和NIO包下的ByteBuffer来操作堆外内存。
堆外内存会溢出,并且其垃圾回收依赖于代码显式调用System.gc()。 -XX:MaxDirectMemorySize=40M
JVM在堆内只保存堆外内存的引用,用DirectByteBuffer对象来表示。
每个DirectByteBuffer对象在初始化时,都会创建一个对应的Cleaner对象。
这个Cleaner对象会在合适的时候执行unsafe.freeMemory(address),从而回收这块堆外内存。
当DirectByteBuffer对象在某次YGC中被回收,只有Cleaner对象知道堆外内存的地址。
当下一次FGC执行时,Cleaner对象会将自身Cleaner链表上删除,并触发clean方法清理堆外内存。
此时,堆外内存将被回收,Cleaner对象也将在下次YGC时被回收。
如果JVM一直没有执行FGC的话,无法触发Cleaner对象执行clean方法,从而堆外内存也一直得不到释放。
使用堆外内存可以减少GC的压力,对于spark来说,能精准控制内存大小。
37.对象在堆外需要序列化吗?
38.堆内对象写入磁盘需要多少次拷贝(和C有区别),需要经过堆外内存吗(提醒零拷贝mmMap)
答:堆内四次,堆外使用mmMAP零拷贝,两次
39.其他技术栈使用,java做过web吗
贝壳(SQL,数仓)
1.对hbase有了解吗,项目row_key设计,为什么这么设计
答:使用|确定分区数,然后使用_连接,一般是分区号_聚合字段_其他
2.hbase读写流程,Hlog的作用
3.spark常见算子
4.spark shuffle和mapreduce shuffle区别或者mapreduce/spark shuffle过程
5.mapreduce partition怎么确定的(使用hashpartitioner或者自己写,个数自己确定)
6.SQL,hive
7.两表关联方式(这里指的是交叉连接(不带where,笛卡尔积),左外连接,右外连接,全外连接,内连接)
8.平时会主动学习吗
9.数据库和数据仓库的区别(数据仓库面向主题,存储历史数据,支持OLAP)
10.会Spring吗
编程:
1.有一张用户签到表【t_user_attendence】,标记每天用户是否签到(说明:该表包含所有用户所有工作日的出勤记录,
包含三个字段:日期【fdate】,用户id【fuser_id】,用户当天是否签到【fis_sign_in:0否1是】;
问题:请计算截至当前每个用户已经连续签到的天数(输出表仅包含当天签到的所有用户,计算连续签到天数)
输出表【t_user_consecutive_days】:用户id【fuser_id】,用户联系签到天数【fconsecutive_days】
答:直接求出用户最新的未签到日期,用今天的日期减掉即可
2.二分查找
携程(数据分析)
1.项目
2.sql,python
3.逻辑回归
4.机器学习算法
5.A/B test
6.用户居住地可以用来做什么,怎么获取用户居住地信息(学校,工作场所,居住地)
7.预测用户想去的地方
8.两个不同列数表的合并(把一些列设为null,union即可)
select 姓名,性别,年龄 from student
union select 课程代号,课程内容,null from course
9.explode炸开
explode(ARRAY) 列表中的每个元素生成一行
explode(MAP) map中每个key-value对,生成一行,key为一列,value为一列
10.需要完整的项目,需要解决什么问题,得到什么结论。
4399一面 电话
1.数据倾斜
2.一台机器,大数据,找出现次数最多的top-10
3.hashmap的认识,是否线程安全
4.是否做过数据预测的问题(机器学习)
省略一次HR面
拼多多一面
1.在学校干了什么,看了什么书(java核心卷)
2.对java哪方面比较熟
(我让面试官挑,应该转入自己的范围如hashmap,线程池,快速失败安全失败modCount,ReentrantLock和synchronized等)
3.java7新的异常处理(try-resource):resource有什么要求(实现接口AutoCloseable),自己怎么实现(编译原理,虚拟机)
4.最近使用java在干什么(应该回答,写实验室论文项目)
我回答只是刷题,准备看框架,面试官小声说了:框架+算法题不够啊。
5.java从编写到运行到结果全流程(???) 方法区等 int i=1具体在哪
6.普通变量和静态变量初始化顺序
7.双亲委派,是否能够改变
8.项目,并写出核心代码,mysql怎么写入
9.二叉树中序遍历(递归,非递归)
10.反问面试官深度怎么准备:对于学的东西可以有多有少,对自己做的东西应该比较清楚(不局限项目)
华为1面
1.成绩,项目等
2.kafka介绍,kafka事件数据重复问题
3.hashmap数据结构(1.7和1.8),为什么用红黑树
4.hashmap 减少hash冲突处理
5.hashmap和hashtable,是null能否插入
6.遍历hashmap的方式,在非迭代器的for删除出现的问题(快速失败)
7.重载和重写,类的构造方法能重写吗
8.项目是否和别人协作,有没有什么印象深刻的部分
9.研究生学习对项目有无作用
10.论文什么方向,和项目的关系
11.背景基本不用管,手写LRU(有限容量)
华为2面(面试官一直在记)
1.实习或者课题,实际用处,效果和别人比较,代码量,数据结构(常见的)等
2.hashmap 泛型等
3.设计模式,数据库,安全加密解密base64等
4.场景题
同程艺龙
1.项目是公司还是实验室的(自己的)
2.hive/spark sql
3.hbase的数据需要清洗吗
4.数据量大吗?
5.论文
6.分布式集群瓶颈:CPU,内存,网络传输,磁盘IO(√)
7.HDFS副本机制
8.mapreduce中间结果需要输出到磁盘吗
9.join 几种(内连接,外连接,交叉连接)
(map/reduce/semi join)
10.单机,内存受限,求top-10
答:先hash后分成小文件,分别统计。
(其实和hadoop很一致,因为发到不同reducer以及reducer分组和hash差不多)
11.一般hashcode和equals需要重写吗(提示hashmap插入过程先hashcode找到对应桶索引,equals判断是否是同一个然后插入)
12.hashmap数据结构
13.String相等
14.ArrayList 初始化大小,插入什么时候判断扩大(好好看)
华为3面
介绍项目,实习(和实际项目的认识,差距)等
对华为的认识
能否承受压力(软件出现bug被多人用的压力,连续加班一两周的压力)
职业规划
有什么不足,具体计划(读HDFS源码)
对其他专业的了解(最近一两年一直读计算机)
触宝一面(基本都不会)
1.大数据组件
2.组件架构
3.kafka数据丢失
4.对数据仓库的了解
5.数据库,数据湖,数据中台
6.mapreduce过程
7.count(1)具体怎么执行shuffle
8.维度,指标
9.spark倾斜避免和消除(datanode挂了,task堵了)
10.hbase三级索引
11.hdfs和yarn高可用
12.主节点的datanode挂了
13.调度系统
14.select执行顺序(包括join等)
from
join
on
where
group by
avg,sum,count等各种函数
having
select
distinct
order by(asc(升序),desc(降序))
LIMIT
15.类似于reduce join实现shuffle,什么算法
16.hashmap为什么8转为红黑树,hashmap原理
17.hashmap桶什么时候满(感觉是hashmap扩容的时候??)
18.用户画像
19.机器学习算法
快手一面
1.HDFS和yarn高可用是否是自己实现的
2.数据丢没丢
3.spark反压机制介绍以及是用来干什么的(如果下游挂了会有什么问题)
4.反压和限流的关系或者区别(面试官不懂)
5.线程池及源码等
6.CAS 以及底层
7.JVM和GC等了解
8.CMS和G1的使用场景,会遇到什么问题
9.TCP三次握手,原因,第一个syn包发送后服务端做了哪些操作
10.洪流攻击,怎么判断服务端忙,如果忙了会有哪些操作
11.第一次握手客户端会重试吗
12.两个栈实现队列 多线程
同程艺龙二面
1.快速排序
2.多线程场景
3.日志文件很大怎么处理,放入消息队列
4.项目碰到什么困难
5.成绩,奖学金等