春招攻略:我是怎样进入字节跳动做技术的
考察维度 | 考察方法 |
智力、逻辑能力 | 算法题、数学题 |
基础知识 | 编程语言题、数据结构 |
专业领域知识 | 图像处理、机器学习、深度学习、大数据、图形渲染 |
软素质(沟通能力、应变能力、抗压能力) | 无定式、考察方法偏主观 |
1. 操作系统、计算机网络基础知识
线程和进程的区别
进程间通信方式
什么是死锁,死锁产生的原因
操作系统的几种进程调度策略
分段与分页
OSI七层模型
TCP/UDP区别
TCP的三次握手,四次挥手
HTTP中GET/POST请求
2. 语言相关——以Java为例
HashMap、泛型、反射、线程池、几种锁机制等
JVM相关,例如JVM内存模型、GC策略等
3. 数据结构与算法基础
动态规划、递归、排序、分治、贪心等
二叉树、哈希、链表、图
4. 后端框架基础
SpringBoot、SSM、SpringCloud
5. MySQL
引擎
索引与底层数据结构
主从分离
慢查询的解决方案
6. Redis、MonogoDB等NoSQL存储引擎
以Redis为例,底层数据结构、常用命令、分布式部署、缓存穿透、缓存雪崩等
7. 其他中间件,例如RocketMQ
1. 基础的算法和数据结构,每个都得深入一些,需要多考虑一些error handling和corner case
Arrays and Strings
Linked List
Stack, Queues and Heap
Tree and Graph, DFS and BFS
Bit Manipulation
面向对象编程的一些设计
Dynamic Programming
2. 尽量深入了解计算机网路,比如TCP/UCT, HTTP/HTTPS,三次握手和四次握手
3. 了解下操作系统的基本概念,进程和线程的区别,进程间如何通信
4. 需要对过往的项目比较了解,尤其是非CS出身的同学,面试官一般会根据同学的水平来调整面试难度,对于非CS同学来说更容易出彩的地方就是过往的经验。
1、基础知识
1-1、操作系统
进程和线程的关系
进程调度
线程同步机制
死锁原理
内存管理
1-2、计算机网络
7层网络协议
网络层相关(IP地址、IPV4、IPV6、子网掩码)
传输层相关(TCP、UDP)
DNS解析
应用层相关(HTTP、HTTPS)
1-3、数据结构
堆、栈
链表
跳表、散列
二叉、多叉树相关算法
图相关算法
2、前端知识
2-1、HTML
常用标签、语义化标签
HTML标签属性相关
HTML事件相关
HTML5新增内容
2-2、CSS
盒模型
选择器、样式权重
CSS常用属性(如:position)
CSS常用布局(如:flex、grid)
CSS动画相关(animation)
CSS浮动相关(float)
移动端适配
响应式布局
CSS3新增内容
2-3、JS
JS变量类型相关
函数、类相关
闭包、作用域相关
promise、async、await相关
Array类型相关知识,及常见api
Object类型相关知识,及常见api
xhr、fetch相关
DOM相关
BOM相关
正则表达式
ES6、ES7、ES2020新增内容
2-4、浏览器
浏览器中的进程与线程
浏览器渲染原理
浏览器中的Eventloop
浏览器存储相关(localstorage、sessionstorage)
2-5、Node.js
Nodejs中的Eventloop
后端http框架相关知识(如:中间件概念、koa的洋葱模型)
2-6、框架
React相关知识
Vue相关知识
2-7、其他
打包工具的使用与配置(如webpack、snowpack、esbuild等)
前端性能优化
1、大数据方向校招考察最核心的还是计算机基础知识,其他几位同学都有列举,这里不赘述啦。
2、Hadoop
HDFS架构
Yarn架构
MapReduce过程
Yarn调度MapReduce
HDFS写流程
HDFS读流程
HDFS创建一个文件的流程
Hadoop 1.x 和Hadoop 2.x 的区别
Hadoop 1.x的缺点
Hadoop HA介绍
Hadoop的常用配置文件有哪些,自己实际改过哪些?
小文件过多会有什么危害,如何避免?
启动Hadoop集群会分别启动哪些进程,各自的作用
讲一下环形缓冲区的概念
3、Hive
Hive内部表和外部表的区别
Hive中sort by / order by / cluster by / distribute by的区别
Hive的metastore的三种模式
Hive中join都有哪些
Impala 和 hive 的查询有哪些区别
Hive中大表join小表的优化方法
Hive Sql 是怎样解析成MR job的?
Hive UDF简单介绍
SQL题: 按照学生科目分组, 取每个科目的TopN
SQL题: 获取每个用户的前1/4次的数据
4、Spark
讲一下Spark 的运行架构
Spark的shuffle介绍
RDD有哪些特点
讲一下宽依赖和窄依赖
Spark中的算子都有哪些
RDD懒加载是什么意思
Spark on yarn模式下的cluster模式和client模式有什么区别
Spark的stage是如何划分的
什么是数据倾斜,怎样去处理数据倾斜
完整版可见GitHub:
https://github.com/CheckChe0803/BigData-Interview
1. 语言篇(以Java为例)
JavaSE基本语法,类与对象,I/O,深浅拷贝等;
熟练使用JCF,看过相应源码,熟悉实现逻辑,如:ArrayList,LinkedList,HashMap等;
熟悉常见设计模式,如:单例模式,多例模式,工厂设计模式,代理模式等;
熟悉Java多线程特性,如:线程同步,线程池的实现原理等;
熟悉JVM内存划分和垃圾回收算法,异常处理机制,反射等;
2. 数据结构/算法篇
熟悉常用的数据结构,链表,队列,栈,二叉树等;
熟悉常用的排序算法,快速排序,归并排序,堆排序等;
了解深度、广度优先搜索算法;
3. 操作系统篇
了解进程和线程的区别是什么、线程同步的方法有哪些;
了解什么是死锁,产生条件是什么、如何避免;
了解Linux的常用命令和Vim的使用;
4. 网络篇
TCP-IP五层模型;
http状态码有哪些,含义是;
TCP三次握手,为什么不是2次或者4次呢;
TCP/UDP的区别;
http和https的区别;
从浏览器输入一个url,到返回数据,中间发生了什么;
HTTP,TCP,IP,ARP 协议等的工作过程;
5. 数据库篇
数据库三大范式是什么;
MySQL数据库引擎MyISAM和inmoDB的区别;
什么是视图、视图的使用场景有哪些;
事务4大特性;
什么是索引、索引的数据结构是什么;
数据库的乐观锁和悲观锁是什么;
还了解哪些数据库,这些数据库的优缺点是什么;
6. 项目篇
做该项目的原因是什么、项目做完收获了什么;
项目中某部分是怎么实现的呢,思路是什么;
做项目中遇到了什么问题,是怎么样解决的呢,方案选取为何不选择另一个,优劣是什么;
7. 测试篇
熟悉常用测试用例的编写方法,缺陷的状态和状态之间的扭转 ;
了解V模型,W模型等常见的测试模型、测试手段等;
了解测试管理工具个自动化测试工具;
了解自动化框架并可以其进行测试用例编写。
题目更关注的是简单知识的融会贯通,而不是高深莫测的算法。
每个笔试题都会都一个或少数几个关键的考察点,这个考察点也许是某种数据结构,某种算法,或者是某种思维模式,但通常不会直白地给出这个考察点是什么,而是会给一个规定情境,或者讲一个小故事,需要候选人第一步做的就是脱掉题目的“马甲”,识别出考点。
判卷一般都是机器自动阅卷,编程题会以通过的cases占总cases的比例来判定分数。有些题目可能不止一种做法,针对不同规模的test cases,可以采用不同的策略去拿到分数。