# 大厂面经

# Shopee

一年工作经验跳槽字节跳动社招经历_牛客博客 (opens new window)

# 一面

  • mysql 有那些存储引擎,有哪些区别
  • mysql 索引在什么情况下会失效
  • innodb 与myisam 的区别?
  • mysql 的索引模型
  • mysql 主从同步怎么搞的?分哪几个过程?如果有一台新机器要加到从机里,怎么个过程。
  • 乐观锁与悲观锁的区别?
  • binlog 日志是 master 推的还是 salve 来拉的?
  • redis 持久化有哪几种方式,怎么选?
  • redis 主从同步是怎样的过程?
  • redis 的 zset 怎么实现的?
  • redis key 的过期策略
  • hashmap 是怎样实现的?
  • tcp 的握手与挥手
  • select 和 epoll的区别
  • http与https的区别,加密怎么加的?
  • raft算法和zk选主算法
  • Kafka 选主怎么做的?
  • kafka 与 rabbitmq区别
  • kafka 分区怎么同步的
  • kafka 怎么保证不丢消息的
  • kafka 为什么可以扛住这么高的qps
  • http各种返回码,401和406啥区别?
  • redis 哨兵和集群
  • kafka partition broker consumer consumer group topic 等都是啥关系?
  • 两个单向链表,返回求和后的链表结构,例如2->3->1->5,和3->6,结果返回2->3->5->1

# 字节跳动

# 一年工作经验跳槽字节跳动社招经历

# 一面

  • 问项目
  • 任务系统怎么保证任务完成后发奖一定成功
  • zset 延时队列怎么实现的
  • redis 数据结构有哪些?分别怎么实现的?
  • redis 的持久化
  • mysql 的索引
  • 一个无序数组找其子序列构成的和最大,要求子序列中的元素在原数组中两两都不相邻

# 二面

  • Redis 的 ZSET 怎么实现的? 尽量介绍的全一点,跳跃表加哈希表以及压缩链表
  • Redis 的 ZSET 做排行榜时,如果要实现分数相同时按时间顺序排序怎么实现? 说了一个将 score 拆成高 32 位和低 32 位,高 32 位存分数,低 32 位存时间的方法。问还有没有其他方法,想不出了
  • MySQL 事务的四个隔离级别? 先说了四个级别的区别,然后说了每个级别可能产生的问题
  • binlog 日志和 redolog 日志清楚吗? 说了两个日志的作用以及两阶段提交
  • C++ 的动态多态怎么实现的?
  • C++ 的构造函数可以是虚函数吗?
  • 缺失的第一个正数(leetcode第41题)
  • linux 系统里,一个被打开的文件可以被另一个进程删除吗?
  • 一个 10M 大小的 buffer 里存满了数据,现在要把这个 buffer 里的数据尽量发出去,可以允许部分丢包,问是用TCP好还是UDP好?为什么?
  • 一个完整的 HTTP 请求会涉及到哪些协议?

# 三面

  • 问项目
  • redis 的 ZSET 是怎么实现的?
  • 让你设计一个限流的系统怎么做? 令牌桶
  • 让你设计一个延时任务系统怎么做 说了两个方案,一个是使用 redis 的 ZSET 来实现,考虑分片来抗高并发,使用 redis 的持久化来实现落地,使用 redis 的哨兵实现故障转移。 一个是使用时间轮的方法。
  • 现有一个随机数生成器可以生成0到4的数,现在要让你用这个随机数生成器生成0到6的随机数,要保证生成的数概率均匀。
  • 有 N 枚棋子,每个人一次可以拿1到 M 个,谁拿完后棋子的数量为0谁就获胜。现在有1000颗棋子,每次最多拿8个,A 先拿,那么 A 有必胜的拿法吗?第一个人拿完后剩余棋子的数量是8的倍数就必胜,否则就必输。
  • 给出一棵二叉树的根节点,现在有这个二叉树的部分节点,要求这些节点最近的公共祖先。

# 头条面试题

头条大数据岗位面试真题 - 知乎 (opens new window)

# 经验1

1)技术框架部分:

(2)常用的大数据框架是肯定会问的,比如Hive、Spark、Kafka等。常见的如Kafka精准消费问题的多种解决办法对比,Spark的Task调度规则

(3)有些面试官会直接让讲了解的框架最底层实现

(4)Java,MySQL,Redis必问,JVM,Hashmap,JUC相关,MySQL的索引及优化,Redis数据结构、集群、缓存淘汰

(5)常见的协议会考,租约协议,quarum原理,Zookeeper选举,acid,acp,base等

2)项目部分:

(1)一般会让你挑你最熟的一个项目讲。考察从项目背景到实现的把控

(2)重点是参与的部分,遇到的难点

(3)常见业务难题的解决和优化,层层递进,头条追求做到极致

(4)没有做过的项目、模块不要乱讲,容易被问懵逼或者被太简单被鄙视

3)算法部分:

(1)数据结构必考,手写代码,每一面都会考。常见数组、链表、二叉树、跳表的题。有些部门会先笔试(电脑实际编码运行)再面试

(2)算法部分常见动态规划、概率题、二进制一类

(3)SQL题目,行列转换。分区函数,统计连续登陆天数这一类问题

(4)多刷Leetcode,题都是有套路的

4)HR部分:

(1)想好跳槽理由,一般注重抗压能力和稳定性

# 经验2

1)技术部分

(1)WordCount的实现过程

(2)MR与Spark的区别

(3)Spark在Client与在集群运行的区别

(3)相同的SQL在HiveSql与SparkSQL的实现中,为什么Spark比Hadoop快

(4)自定义UDF

(5)设计HBase表需要注意的点

(6)HBase的hlog

(7)数据同样存在HDFS,为什么HBase支持在线查询

(8)数据从Hive中用SparkSql进行操作有遇到什么问题?类似兼容性的问题。

(9)SparkStream与Strom,Flink与什么区别

(10)有三个map,一个reduce来做top10,哪种方法最优。数据量特别大。

2)项目的架构

(1)数据仓库的模型设计

(2)数据仓库的数据清洗

(3)业务建模、数据分析方法。

(4)数据仓库是怎么设计的

(5)数仓规范设计哪些方面(字段、维度,存储压缩、数据保留机制)

(6)数仓质量怎么监控(数据质量管理系统,主键唯一、非空、数据波动)

(7)数仓主体分哪些(按照公司业务归类:申请单、客户信息、合同信息、放款、还款、余额、逾期等)

(8)数仓拉链表的原理

(9)有没有遇到数据倾斜的问题(场景、解决方式)

(10)数仓重点调度任务的保障方式(调度系统优先级)

(11)数仓任务报错和监控(调度系统捕捉错误,电话短信告知值班人员)

# 经验3

1)技术部分

(2)写map-reduce,两份数据,一份是设备id+用户id,一份是设备id+点击的广告+点击时间,找出每个用户id每天10条最新的广告点击记录

(3)说下多线程和多进程

(4)fork命令

# 经验4

(1)MySQL引擎是什么,常用的是哪个innodb,知道原理吗

(2)MySQL优化,怎么建索引?选择合适的字段属性。对于某些文本字段可以设成ENUM类型(MySQL中被当做数值型数据来处理)。使用连接join代替子查询 。使用索引:innodb支持哈希索引、b+树索引、全文索引。

BTree和B+Tree

(3)手写sql...

user_id login_date

1 20200325

查询出用户连续三天登录的用户

表A 字段a 值1234

表B 字段b 值11235

Join 输出的结果

Left join 输出的结果

(4)Sqoop导入数据是增量怎么实现

(5)Flume事务实现

(6)Kafka消费者角度考虑是拉取数据还是推送数据

(7)Kafka中的数据是有序的吗

(8)Kafka数据推送失败怎么处理

(9)Kafka保证生产者精准一次

(10)没有接受到ack才会出现声明情况

(11)Kafka数据重复怎么处理

(12)Spark Streaming怎么里面实现精准一次消费

(13)如果offset没有发送成功数据会怎样

(14)Hive的优化,项目中怎么优化的(我说了join的一些优化)

(15)然后就问了用MR怎么实现join,手写代码

(16)数据倾斜怎么处理的,

(17)碰到过oom情况吗,什么原因导致的,怎么处理的

(18)Hbase有哪些组件,

(19)什么场景会用到Hbase

(20)Hbase的读写流程,大概说一下

(21)Spark,任务提交的流程,

(22)Spark的两种核心Shuffle,未优化的和优化的

(23)常用的数据结构都有哪些,

怎么实现一个list,

怎么实现一个map

map一般什么场景使用

用过树这种结构吗,什么场景用到的

(24)算法

字符串中第一个出现三次且仅出现三次

反转一个链表

两个链表第一次交叉的节点,

(25)用Cannal监控mysql之后,Scala怎么通过SparkStreaming去消费的

(26)你们这个项目spark计算完之后存HBase怎么设计的

(27)HBase你们在项目中怎么设计rowkey的


# 从简历被拒到收割今日头条 offer ,我花了一年时间

从简历被拒到收割今日头条 offer ,我花了一年时间 - 云+社区 - 腾讯云 (opens new window)

四、头条一面(Java+项目)

1.倒排索引

2.讲讲 redis 里面的哈希表?

3.happen-before 的规则?

4.volatile 修饰符,synchronize 锁

5.java 单例模式的实现,懒汉、饿汉?

6.进程与线程的区别,多进程和多线程的区别?

7.HashMap原理,为什么用红黑树,红黑树的特点?

8.快排时间空间复杂度,最好最坏的情况,优化方案?

9.TCP 的拥塞控制,具体过程是怎么样的?UDP 有拥塞控制吗?如何解决?

10.讲讲了解的垃圾回收算法和回收器,什么时候执行 STOP THE WORLD?

11.了解 Go 语言吗?

五、头条二面(大数据+项目)

1.Kylin 的项目架构

2.Paxos 和 ZAB 协议

3.CAP 理论,分区容错性的意义

4.大表 Join 小表优化,如何处理数据倾斜?

\5. 讲一下最大堆和最小堆

6.HDFS 的读取、写入,容错处理。(源码)

7.MapReduce 的过程(第一版和第二版的)

8.MR shuffle,Spark shuffle。

9.namenode HA,脑裂,Yarn 的调度机制。

\10. Hive 的内部表和外部表区别、数仓建模模型、数仓分层、雪花模型和星型模型。

11.了解 ClickHouse 吗?它与 Kylin 的区别?

六、头条三面(算法+场景题)

1.LRU算法实现 (opens new window)(伪代码)

2.链表倒数第 K 个数(讲思路)

3.一堆螺丝和螺母用最短时间匹配(代码实现)

4.求每天浏览页面的新用户(Hive QL实现)

5.求抖音小视频每日点击量最高的10个(Hash + 最大堆)

七、如何通过头条笔试?

这次的笔试里总共有 5 道,我 AC 了 2.5 题,第一题 90% ,第二题 90% ,第三题 70% ,不算好,但勉强通过了。去年的这个时候我可是连题目都看不懂的,看得懂的只知道用嘴怎么说,不会用代码实现。通过这段时间的算法训练,总结了如下几点算法笔试经验:

1.平时刷题一定要总结归纳,最好分类。比如关于树的题型,链表的,数组等等,观察它们的解题思路,总结出解题套路。

2.积累工具类算法。什么叫工具类算法?就是你解一道算法题需要用到另一种算法,这个被调用的算法就是解决这道算法题的工具。比如常见的「深度优先遍历」、「广度优先遍历」、「01背包」、「KMP算法」以及常见的选择和排序算法都是经常使用的工具类算法。

3.学会抽象题目。笔试算法题不同于面试算法,不会直白跟你说要使用哪种算法去解答,更多的要自己学会抽象,抛开题目本身,要明白内部讲的是什么,别被题目的糖衣炮弹迷惑了。只有把题目抽象成最原始的算法你才能更好地使用工具类算法进行解答。

八、如何准备头条面试?

头条面试和其他大厂可能大同小异,但就是这个小异才是关键地方,能异于其他人的地方。可以从如下几个方面去做准备:

1.特意准备几个面试题源码。像我在回答一些中规中矩面试题的时候,都会从源码角度出发。比如常见的 HashMap 等集合类,多线程的各种锁以及大数据框架的部分源码。

2.特意准备项目难点。面一些大厂的时候避免不了被问到项目难点,不可能用普通Bug含糊过去啊。这边可以从项目用到的技术栈出发,去寻找技术栈在项目中会存在的难点,然后套进自己的项目,找个自己能懂,最好能全懂的。

3.针对性去了解公司的技术栈使用情况。比如头条使用 Go,众人皆知,那为什么我不突击学习一下呢?比如从业内人士得知头条最早使用的是 Kylin 框架,后面慢慢转为 ClickHouse,那我必须了解一下两者的不同啊,而且可以结合头条的业务场景。

九、一个关于如何进大厂的小建议

我一直崇尚「曲线救国」的做法,也一直在向别人传播这种做法。现在能力背景不足没关系,只要规划好自己的学习路线,一步步阶梯式往上爬,总可以实现目标。因为我自己二本出身,但我意识的早,大二就开始实习,用项目和实习经历弥补我背景不足,然后一步步走到「offer自由」。很多时候并不是只有巨人才可以成功,你只需要做到行动上的普通人,就可以超过很多思想上的巨人,行动上的矮子。


# 字节跳动大数据研发实习超详细面经

字节跳动大数据研发实习超详细面经(已拿offer)_互联网校招面经-CSDN博客_字节跳动大数据开发工程师面经 (opens new window)

一面 3.30 50min

  1. 编程题:二叉树层序遍历,按层换行输出。
  2. 线程的状态及状态之间的装换
  3. 有哪些树结构
  4. B+树的特点
  5. HTTPS的工作流程
  6. Kafka如何保证生产者不丢失数据,消费端不丢失数据
  7. Zookeeper的功能, 详细介绍一下zookeeper的消息的发布订阅功能
  8. 场景题:如何从百亿条IP信息中得出访问量前10的IP地址
  9. Redis支持的数据结构
  10. Redis为什么性能高
  11. Redis为什么是单线程

二面 3.30 47min

  1. Spark源码中的任务调度
  2. 场景设计题:你自己如何设计一个分布式系统,实现对百亿条数据进行分组并求和
  3. Spark shuffle机制
  4. spark中有哪些算子会进行数据shuffle
  5. 编程题:一个数组有正数有负数,调整数组中的数使得正负交替

例:[-3, 6, 7, -4] ->[6, -3, 7, -4]

三面 4.3 25min

  1. 编程题

假设一个医院,M个医生,N个病人,每个病人看病时长已知。写一个函数,做医生和病人的分配,要求医生负载尽量均衡。

  1. 当前面试流程中(牛客网)涉及到了哪些协议
  2. 学习中遇到的难点,如果以后同样有人遇到了这些你会怎么快速地教她解决