6

我用10天拿下字节跳动offer,9大面试误区+字节面经分享

 3 years ago
source link: https://blog.nowcoder.net/n/f1e15d5599b742dda85d8b1f1e8c0696?from=nowcoder_improve
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

去年,学校有位学长参加秋招的时候,拿到了字节跳动、快手、阿里、美团……等等 7 家大厂的 Offer,在此之前,学长一直“默默无闻”,基本可以说是在秋招一战成名,成为众多学弟学妹羡慕的对象。

今年,伴随着疫情的影响,就业形势并不乐观,于是,秋招的准备就变得尤为重要,毕竟毕业之后的第一家公司,决定了以后工作的起点!

去面试头条,你最好有点心理准备。我面试过头条的好兄弟给了我一句忠告。不过邮件对考查内容写的一清二楚,所以一面,我并没有做太强的心理建设,事实证明我可能对通用型业务和软性技能的理解还不够透彻。

一、字节跳动技术一面(算法)

  • Java 的 16 进制与字符串的相互转换函数
  • JAVA 时间格式化处理
  • 将毫秒转化为日期
  • 文本的倒序输出
  • 判断一个数字是奇数还是偶数
  • 用Hibernate 实现分页
  • 35 选 7 彩票程序
  • 获取 GMT8 时间
  • 中文乱码转换
  • Big5 字与 Unicode 的互换
  • 取得服务器当前的各种具体时间
  • 用半角的特殊符号代替全角的特殊符号
  • 数组和数组之间的转换代码
  • 从资源文件里读取值的类
  • 一个随机类
  • 计算传入值是否星期六
  • 转换文件大小
  • Java 日期格式化及其使用例子
  • Java几个常用方法
  • 判断字符是否属于中文
  • 去掉字符串中重复的子字符串
  • 将指定 byte 数组以 16 进制的形式打印到控制台
  • 获得任意一个整数的阶乘,递归
  • 拷贝一个目录或者文件到指定路径下
  • 简单的 txt 转换 xml
  • 字母排序(A-Z)(先大写,后小写)
  • 列出某文件夹及其子文件夹下面的文件,并可根据扩展名过滤
  • 字符串匹配的算法

二、字节跳动技术二面

  • List和Set比较,各自的子类比较
  • HashMap和ConcurrentHashMap的区别
  • HashTable和ConcurrentHashMap的区别
  • String,StringBuffer和StringBuilder的区别
  • wait和sleep的区别
  • JVM的内存结构
  • 强引用,软引用和弱引用的区别
  • 数组在内存中如何分配
  • Spring MVC的核心是什么,请求的流程是怎么处理的,控制反转怎么实现的
  • Mybatis如何处理结果集
  • Java的多态表现在哪里
  • 接口有什么用
  • 说说http,https协议
  • 说说tcp/ip协议族
  • tcp五层网络协议
  • TCP与UDP的区别
  • cookie和session的区别,分布式环境怎么保存用户状态
  • BIO、NIO和AIO的区别
  • Java中常说的堆和栈,分别是什么数据结构;另外,为什么要分为堆和栈来存储数据
  • 为什么要用线程池
  • MySQL优化经验
  • 悲观锁和乐观锁的区别,怎么实现
  • 什么是线程死锁?死锁如何产生?如何避免线程死锁?
  • notify和notifyAll区别
  • 谈一谈对MySQL InnoDB的认识
  • 谈一谈数据库事务的隔离级别?
  • MySQL主备同步的基本原理
  • 类在虚拟机中的加载过程
  • 强引用、软引用、弱引用、虚引用与GC的关系
  • 请写一段栈溢出、堆溢出的代码

三、字节跳动技术三面

  • 说一下spring中Bean的作用域
  • 说一下spring中Bean的生命周期
  • 对Spring中依赖注入两种方式的认识
  • Spring框架中都用到了哪些设计模式?
  • BeanFactory 和ApplicationContext的区别
  • 数据库的三大范式
  • TCP和UDP的区别及其适用场景
  • 说一下Spring的核心模块
  • (转发)forward与(重定向)redirect的区别
  • redis常用的五种数据类型
  • 内部类和静态内部类的区别
  • 非静态内部类中的变量和方法不能声明为静态的原因
  • String,StringBuilder,StringBuffer的区别
  • 集合和数组之间的相互转换
  • 面向对象的特征有哪些方面?
  • 概括的解释下线程的几种状态
  • Java集合类里面基本的接口有哪些
  • Iterator和ListIterator的区别
  • Enumeration和Iterator的区别
  • 介绍一下HTTP的响应结构
  • final、finalize和finally各自的作用
  • 说一下你了解的几种进程间的通信方式

四、JAVA开发技术面试中可能问到的问题

1. 基础知识

  • 集合类:List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet);
  • HashMap的底层实现,之后会问ConcurrentHashMap的底层实现;
  • 如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现;
  • HashTable和ConcurrentHashMap的区别;
  • String,StringBuffer和StringBuilder的区别;
  • Object的方法有哪些:比如有wait方法,为什么会有;
  • wait和sleep的区别,必须理解;
  • JVM的内存结构,JVM的算法;
  • 强引用,软引用和弱引用的区别;
  • 数组在内存中如何分配;
  • 用过哪些设计模式,手写一个(除单例);
  • springmvc的核心是什么,请求的流程是怎么处理的,控制反转怎么实现的;
  • spring里面的aop的原理是什么;
  • mybatis如何处理结果集:反射,建议看看源码;
  • java的多态表现在哪里;
  • 接口有什么用;
  • 说说http,https协议;
  • tcp/ip协议簇;
  • osi五层网络协议;
  • tcp,udp区别;
  • 用过哪些加密算法:对称加密,非对称加密算法;
  • 说说tcp三次握手,四次挥手;
  • cookie和session的区别,分布式环境怎么保存用户状态;
  • git,svn区别;
  • 请写一段栈溢出、堆溢出的代码;
  • ThreadLocal可以用来共享数据吗;
  • bio,nio,aio的区别;
  • nio框架:dubbo的实现原理;
  • 京东内部的jsf是使用的什么协议通讯:可参见dubbo的协议;
  • java中常说的堆和栈,分别是什么数据结构;另外,为什么要分为堆和栈来存储数据。
  • TreeMap如何插入数据:二叉树的左旋,右旋,双旋;
  • 一个排序之后的数组,插入数据,可以使用什么方法?答:二分法;问:时间复杂度是多少?
  • 平衡二叉树的时间复杂度;
  • Hash算法和二叉树算法分别什么时候用;
  • 图的广度优先算法和深度优先算法:详见jvm中垃圾回收实现;

4. 多线程

  • 说说阻塞队列的实现:可以参考ArrayBlockingQueue的底层实现(锁和同步都行);
  • 进程通讯的方式:消息队列,共享内存,信号量,socket通讯等;
  • 用过并发包的哪些类;
  • 什么地方用了多线程;
  • Excutors可以产生哪些线程池;
  • 为什么要用线程池;
  • volatile关键字的用法:使多线程中的变量可见;

5. 数据库相关(MySQL)

  • MySQL优化经验:
  • MySQL的语句优化,使用什么工具;
  • MySQL的索引分类:B+,hash;什么情况用什么索引;
  • MySQL的存储引擎有哪些,区别是什么;
  • 说说事务的特性和隔离级别;
  • 悲观锁和乐观锁的区别,怎么实现;
  • mq的原理是什么:有点大。。都可以说;
  • mq如何保证实时性;
  • mq的持久化是怎么做的;

7. Redis

  • redis和memcache的区别;
  • 用redis做过什么;
  • redis是如何持久化的:rdb和aof;
  • redis集群如何同步;
  • redis的数据添加过程是怎样的:哈希槽;
  • redis的淘汰策略有哪些;
  • redis有哪些数据结构;

8. Zookeeper

  • zookeeper是什么;
  • zookeeper哪里用到;
  • zookeeper的选主过程;
  • zookeeper集群之间如何通讯;
  • 你们的zookeeper的节点加密是用的什么方式;
  • 分布式锁的实现过程;

9. Linux

  • linux常用的命令有哪些;
  • 如何获取java进程的pid;
  • 如何获取某个进程的网络端口号;
  • 如何实时打印日志;
  • 如何统计某个字符串行数;

五、面试注意点

  1. 至少定出2天的准备时间
  2. 一定得再次阅读公司的职位要求
  3. 在刷题前,先准备项目描述的说辞
  4. 一定得准备项目描述里提到的技术
  5. 一定得准备亮点话题,并想办法往这方面绕,而且亮点话题多多益善
  6. 时间多,再去刷题
  7. 面试题,通过准备让面试官感觉你软实力也行

面试字节跳动,个人觉得应该注意的点:

  • 字节跳动并不会特别关心候选人使用什么编程语言,逻辑很简单,你 Java 特别厉害,那转 Go 语言肯定不难。当然,如果你觉得难,那大概率也通不过后面的面试。
  •  在整个的面试流程中,至少会有 3 轮技术面,并且每一轮面试都会考算法。不管你是工程师,还是架构师。
  • 为啥要考这么多算法?其实核心是看候选人是不是足够聪明。和 Netflix 一样,字节跳动招聘工程师的必要条件就是聪明。
  • 怎么考算法呢?一般会分两步,第一步是直接让你说思路,第二步是让你直接上手写代码。字节跳动的算法题一般对应的是 LeetCode 中级模式,要通过面试,你肯定得花时间好好准备。
  •  写算法代码的时候,你可以用白板,也可以用电脑,都行。常见的模式是给你 20 分钟时间,让你写出来某道题的解法。当然,肯定是越快做出来越好,这能说明你的熟练程度。
  •  如果题目没做出来,千万别觉得自己是紧张。紧张是借口,核心还是不熟练,没有精通。知道分子,一无是处,专业和熟练才是关键。
  • 写代码的时候,千万别以为只是看你算法能力。面试官还会通过这个环节考察你的编程习惯,比如变量名是不是爱用中文拼音,代码结构是不是很烂。等等。
  • 学历这块的话,和大多数互联网公司一样,本科起步。学校好是加分项。
  • 从这些沟通结果上看,字节更多是考察技术人员的基本功,基本功扎实,人足够聪明,又具备一定的软技能,那就可以做技术相关的任何事,他们对这一块的要求是专业和熟练。做知道分子是不行的。

不打无准备的战斗

把每一次面试,都当成一次出征,字节三面,面试的时间虽然只有10天,在看不见的黑夜,鬼知道我准备了多长时间呢?

给大家分享一些我在面试字节跳动之前, 所做的准备,刷算法题是必不可少的,其次就是刷刷常见的面试题,我可是足足刷了一千道Java面试题,正所谓机会都是会留给有准备的人~

注意:不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可免费分享给各位朋友,点击文章开头链接免费领取

互联网工程师必备的面试1000题

从面试题来看,面试字节跳动,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。

其余像设计模式,建议可以看看下面这4份PDF(小编我已经整理,点击文章开头链接免费领取

更多的Java面试学习笔记如下,关于面试这一块,我额外细分出Java基础-中级-高级开发的面试+解析,以及调优笔记等等等。。。

更多的Java面试学习笔记

以上所提及的全部Java面试学习的PDF及笔记,如果你也感兴趣,小编这边可以免费分享给你,

注意一下免费获取的方式:点击文章开头链接免费领取

在这个不平凡的 2020 年,希望每一位即将毕业的学生,都可以攻克算法,斩获大厂 Offer。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK