字节实习面经

第一篇

一面(3点开始,80分钟)

1.自我介绍,聊了聊学校近况

2.Java 集合框架,看了哪些源码,arraylist、linkedlist原理,让你实现一个 hashmap 机会如何设计(没让手写)

3.线程池的执行过程、核心参数以及常用的几个线程池(感觉每次面试都会问)

4.JVM 的相关知识,OOM 如何定位,说几个虚拟机指令以及虚拟机栈可能会发生什么错误,四种引用类型

5.Java 并发,synchronized 性能为什么提高了(锁升级过程),与 Java 的 lock 有什么区别以及使用场景

6.网络,输入 www.baidu.com 都会发生什么

7.http 报文结构,头部都有哪些字段

8.进程与线程,了解协程吗(大概说了下)

9.死锁了解吗,说一下条件,如何解决

10.让写一下链表实现插入方法(顺序不在这里,忘了在哪了,突然想起来了),查询效率呢,怎么优化

11.写个算法,给一个表达式的字符串(+-*/),算出字符串的结果,没考虑括号说了下括号的思路

二面(45分钟)

1.面试官看着就很厉害,在家办公感觉很忙,上来先问实习的时间以及时长,说最好半年

2.没有自我介绍直接开始,先是网络,TCP 三次握手四次挥手,time_wait 和 close_wait 具体干什么,为什么要三次两次不行吗,有大量连接处于 time_wait 的原因,TCP 是长连接还是短连接

3.Https 了解吗,说一下整个过程(对称加密,非对称加密),与 http 的不同点

4.进程线程又问了,进程间通信方式(剩下的想不起来)

5.数据库部分知识,手写一个 SQL (子查询 感觉主要看 group by 和 having)

6.算法题,最长公共连续子串

 

第二篇

一面

简历写了分布式,聊聊分布式基本信息(CAP,BASE);

Redis的基础数据类型和具体应用场景;

Redis的set求交集的时间复杂度;

MySQL的索引(B+和B树的区别,为啥用B+);

让你设计数据库会注意什么;

线程和进程的区别和联系;

HTTP的一整套;

还有maven的记不清了,因为直接说了不会...

编程题:力扣32最长有效括号

二面

说说自己项目的请求过来,服务器内部怎么处理的;

类似秒杀的系统怎么设计,有什么注意事项;

Redis的缓存雪崩和缓存击穿;

因为提到了降级,说说降级策略(自己给自己挖坑,面完立马去总结了);

MySQL的索引;

JVM GC的一整套(算法、分区、判断方法、GC器);

Spring的AOP和IOC的偏底层实现;

介绍Spring MVC以及其底层原理;

聊聊MQ,你项目用了RabbitMQ仔细说说底层的东西;

几十G的数据都是URL,内存空间只有1G,磁盘空间无限,统计频率最高的Top 10;

编程题:

一个SQL,和从不订购的客户一样,左连接完事;

一个判断平衡二叉树

感受:我好垃圾,几个场景题都回答得不怎好,面试官建议多看源码

三面

基本就是对着简历问。

编程题:

力扣88 合并两个有序数组

感受:还是得多在白板上写代码。

 

第三篇

杂感:

1. 牛客网,永远滴神!(真的很感谢大家的分享)

2. 感谢github上 CyC2018(初期学习参考),SnailClimb的面试总结(面试参考对象)

面筋总结:

因为并不是每家都有做录音,忘了一些面试问题。我就贴一下我面过比较普适性的问题。 此外, 我只是做一点些关键词的提示,具体达到面试要求需要自己去详细的理解和掌握 。

一些面试问题,我在自己的有道云笔记有解答。欢迎前辈斧正。链接:http://note.youdao.com/noteshare?id=3fa30656141202169d7d99c632b261c5

JVM:

1.【高频】Java内存区域: {程序计数器,虚拟机栈,本地方法栈,堆,方法区,元空间}// 每个区域要能介绍一下

2. Minor GC触发条件: eden区剩余内存是否足够。两种情况分开分析。

FULL GC触发条件:Minor GC平均晋升空间大小 > 老年代连续剩余空间,则触发FULL GC

3.【高频】判断对象死亡的方法:{引用计数法,可达分析算法}

深入一些:GC root对象有哪些?为什么选择他们做GC root对象 ?

4.垃圾收集算法:{标记清除算法、标记整理算法、 复制算法、 分代收集算法}

深入一些: 各个算法的优点和适用场景

5.垃圾收集器:{serial、parallel、CMS、G1}

CMS、G1重点,介绍工作流程和优缺点

6.内存泄漏

例子: { 单例 , 容器 等等}

原因 : 长生命周期持有短生命周期引用

7.引用类型:{强引用、软引用、弱引用、虚引用}

8.【高频】类加载过程:{加载,连接,初始化}

有哪些类加载器,能否自定义Java.Object.String 的类加载器?

9.【高频】双亲委派机制,介绍 & 作用

Java :

1. ArrayList 和 LinkedList 的区别

2. HashMap & ConcurrentHashMap 的比较: 线程安全问题等等

深入一些:HashMap 为什么线程不安全? 能否举例 = { 并发resize()触发闭环结构 ,覆盖put操作 }

3.【高频】HashMap的相关问题// HashMap系列需要通过关键源码理解,比较重要

为什么 HashMap的size 为 2的幂次方 ?

HashMap resize()过程能否介绍 ?

HashMap效率受什么影响 (负载因子、hash数组size)?

HashMap中扰动函数的作用 ?

4. Hashtable 和 HashMap的区别:{底层数据结构 (JDK1.8后不同)、父类不同、扩容方法不同、线程上锁范围不同(重点)}

5. equals 和 == 区别

为啥重写equals要重写hashCode()

hash值相等,而两个对象不一定equals

6.【高频】String、StringBuffer、StringBuilder的区别和各自使用场景

深入一些:String是如何实现它不可变的?

为什么要设置String为不可变对象? (字节一面这个问题给我问懵了)

7.接口和抽象类区别

8.重写和重载的区别

9.深拷贝和浅拷贝区别

10.Java三大特性

11. Object的方法:{finalize、clone、getClass、equals、hashCode}

12.【高频】设计模式:{单例模式、工厂模式、装饰者模式、代理模式、策略模式 等等}(此处我的掌握也不是很好)

深入一些:单例模式为什么采用双检测机制?

单例为什么用Volatile修饰?

装饰模式和代理模式区别?

并发 :

1.线程的状态:{new,runnalbe,wait,time-wait,block,terminated }

2.进程、线程、协程的含义和区别。//个人理解是一组渐进提出的概念

3.进程间通信方式:{管道 、FIFO 、信号量、共享内存、消息队列、Socket}

4.如何避免死锁?死锁的四个必要条件

5. Sleep和wait的区别

6.【高频】Sychronized和lock的区别 ?

7. Sychronized的底层优化:{无锁、偏向锁、轻量级锁、重量级锁}

8. volatile的作用:{指令重拍、保证变量的可见性(设计JMM)}

9. ThreadLocal 底层原理

10.【高频】线程池

线程池构造器涉及哪些参数: {corePoolSize,maximumPoolSzie,timeout,timeUnit,RejectHandler,等待队列,线程工厂}

介绍线程池工作过程?

线程池拒绝策略那些?

适用Executor创建线程池的弊端?

11. AQS 框架原理和源码理解

计网 :

1.TCP/IP 模型 & OSI模型

2.应用层、传输层、网络层常见协议:{DNS、HTTP、FTP、STMP、SSL、TCP、UDP、 ARP、IP}

3.【高频】TCP 三次握手、TCP四次挥手

深入一些:为什么三次握手,能否两次?

四次挥手中什么是 time_wait 状态 ? close-wait 状态?

time_wait状态什么场景下过多,会造成什么问题?

4.TCP可靠性:{ARQ、流量控制、拥塞控制、校验和}

5.【高频】输入URL显示主页的过程//个人仅遇过一次,但是看面经感觉问的挺多

6.HTTPS和HTTP 区别// 字节专属问题

深入一些:HTTPS加密过程介绍 ?

7.Cookie和Session的区别

8.Http1.0 和HTTP1.1 和 Http2.x 的区别

9.get和post的区别

10.常见的状态码

操作系统(相对较少):

1.用户态和内核态的区别

2.fork()作用

3.Select poll epoll的区别

4.虚拟内存作用? 内存分页的作用?

5.缺页异常的介绍

6.OOM问题和 StackOverFlow的区别

MySQL:(对redis 需要学习,个人理解不深不多介绍)  // MySQL比较重要

1.【高频】MyISAM和InnoDB的区别:{是否支持行锁、是否支持十五、是否支持 MVCC、底层索引结构不同 }

2.事务特性ACID

深入一些:为什么要有一致性?AID不是已经保证了一致性了吗 ?

3.并发事务带来的问题:{脏读、修改丢失、不可重复读、幻影读}

4.【高频】事务的隔离级别

5.【高频】 MVCC机制

6.【高频】索引

为什么索引使用B+树结构,而不是B树

为什么索引使用B+树结构,而不是红黑树:{磁盘预读取、红黑树高度 }

7.聚簇索引和非聚簇索引区别? 主键索引和二级索引了解吗?

8.为什么不对每个列创建索引呢?

9.【高频】SQL语句优化,SQL题目(字节要求撸代码)

10.explain中 rows、type、key、extra字段的含义?

11.count(1)、count(*)、count(列值)的区别

其他:

需要了解linux的指令和 git指令。

对一些大数据场景题需要了解。例如1亿数据取top10,1亿数据取出现频率top10,1亿URL取出重复URL

64匹马,8个跑道,最少比赛几次选出前八?等智力题(字节常考)

此外,项目相关的知识体系需要准备, 例如我的项目涉及Netty和Zookeeper,则我会去准备相应的问题。此处因人而异。

 

第四篇

一面:

1.问了下简历和岗位相关的项目问题

2.tcp 四次挥手协议,为什么是四次

3.b tree和b+ tree的区别

4.回表,联合索引

5.https ssl讲一下,讲一下证书签发过程

6.算法题: binary tree 每层找最大值:level order traversal(BFS)

array,先递增后递减,可能有重复,找到一个数:三次binary search,第一次找到分界点,然后分别找target number

7.进程通信方法,说下管道

二面:

1.get/post 详解 说到get一般把数据放在url上,问:是什么协议规定的,可以放在body里么?

2.说下http request 和 response

然后记得不太清楚了,就感觉问的很细,被锤的感觉

3.算法题:diameter of binary tree, DFS, bottom-up方法,感觉会有很多corner case,但其实点就在于:edges=nodes-1

一亿个shot int,sort them 点在于:short int 是2^16, 然后有范围了,就可以用count sort来做,index当作值

4.什么是前后端分离,不分离的code长啥样

5.什么是事务,transaction

三面:

1.primary language是java,所以问了static变量什么作用,放在哪里 hashmap和hashtable区别

2.rand3 () 求rand5 () 说下怎么做

3.算法题: next permutation 点在于:怎么找到需要swap的index和比他值大的index,然后,需要从swap index之后需要sort么?

不需要的,因为前两次找index的时候,保证了从右往左是ascending,所以只需要two pointers reverse就行

 

第五篇

一面 (5.15)

计网:

HTTP协议的报文格式
(没答出来,以为是具体的报文格式,多少个字节那些,后面再看一下,原来是 : 请求方法 URL 状态码 这些,难顶)

数据结构:

  • HashMap 1.7 / 1.8 的区别
    追问了:hash值的计算,为什么这样优化
  • 并发用什么
  • 如何高效进行数组拷贝(其实是System.arraycopy()的原理 ,没答好)

JVM:

  • GC算法
    新生代为什么采用标记-复制(我答了存活对象少,和其它两种算法用在新生代的缺点,但面试官好像不满意,有盆友能解答下吗?)
  • 对象进入老年代的各种情况
    按年龄晋升默认阈值是多少(这个没答出来,印象比较深刻)
  • 字符串常量池在堆吗?

多线程:

  • 常见锁机制
  • ReetrantLock原理
  • CAS底层有了解吗(只知道是硬件支持的,没看native方法的具体实现)
  • ThreadLocal 原理

设计模式:

生产消费者( 问有没有实际用过,答没有就没有问了)

mysql:

update时什么锁 (next-key lock,但唯一性索引时降级为行锁,不过当时答错了)

场景:

大数据文件如何读取存储(拆分小文件,那怎么标记顺序?如何个别文件损坏怎么办?高可用问题)
这里感觉答得不好

算法

有序数组转二叉搜索树 (思路对了,但没做出来。看了下是leetCode的easy,都不知道是太紧张还是太菜了)

二面(5.21)

  • 直接算法题最大正方形 (细节写错了,用了Math.max……)
  • 设计阻塞队列(不能用JDK的api,我写了个Thread的,这里感觉也没答好)
  • 进程b通过某种方式,能访问进程a的内存,会有什么问题(没答好,我说会发生类似多线程的问题。拓展了一下fork的copyonwrite 技术,不过面试官不是想要这个答案)
  • TCP如何保证可靠连接
  • DDOS攻击(我答了SYN攻击,深入问了如何解决,关键点是什么)
  • 快速判断某正整数是否1024的倍数 (非算法题,答了位操作,就没再问了)
  • 项目相关
  • redis的zset底层结构
  • 觉得JVM哪个设计最核心(开放题吧,我答了内存分开(堆栈那些) + 双亲委派 )

技术无关

  • 项目,相关技术栈不会时,怎么办(我说先学项目的相关用法,再慢慢学原理)
  • 解决过的技术难点

 

第六篇

一面:

1、一些Java基础知识。

2、倒排索引。

3、讲讲redis里面的哈希表

4、happen-before的规则?

5、volatile修饰符,synchronize锁。

6、java单例模式的实现?

7、进程与线程的区别,多进程和多线程的区别?

8、HashMap原理,为什么用红黑树红黑树的特点?

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

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

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

12、了解Go语言吗?

13、问项目相关的东西:负责哪个模块?有没有碰到什么问题?怎么解决的?

二面:

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算法实现。(伪代码)

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

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

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

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

 

第七篇

一面

1.自我介绍

2.讲一下你做的最好的一个项目,然后问问简历的其他项目,给他讲了好几个算法项目里面确实算法比较多)

3.讲一下spring mvc的原理

4.了解哪些排序算法

5.快排的算法流程和时间复杂度?

6.什么是哈希排序

写题:

1.三路归并算法实现

2.最长不重复子串长度

最后:

让我稍等一会儿,先别退出房间,他去看看同事有没有时间,直接二面

二面:

面试官首先先问我实习地点安排在上海没问题吗,答:比较看重机会,位置什么的都可以克服

1.自我介绍

2.问了问我的研究方向,聊了一会儿

3.操作系统的页面置换算法,详细讲了一下

写题:

1.最长上升子序列

2.从54张牌中不放回抽样,每次抽n张,你会怎么实现?算是开放性回答,没写代码,交流思路

 

第八篇

一面大概的问题:

  1. 项目中的用户注册和登录的流程是什么?
  2. cookie和session
  3. cookie的参数有哪些?
  4. 服务器的域名是geogle,我可以修改cookie的domain为baidu吗?(本人不清楚)
  5. cookie被仿造怎么办?
  6. MD5加密可逆吗?会被破解吗?如何破解?
  7. 面向对象有哪些特征?解释一下
  8. SSO了解吗?
  9. 负载均衡了解吗?
  10. 数据库的关系有哪些?
  11. 一对多怎么实现?多对多怎么实现?
  12. MySQL数据库有哪些类型?这些类型有什么区别?
  13. 了解哪些设计模式?手写一个工厂方法模式
  14. 手撕sql
  15. 反转链表

二面问题:

  1. 实习做了什么?
  2. 为什么只实习了两个月?
  3. 三次握手
  4. 滑动窗口是干什么的?
  5. 拥塞窗口是干什么的?
  6. 进程和线程有什么区别?
  7. 进程通信
  8. hashtable的理想的查找效率是多少?
  9. 哈希碰撞怎么解决?
  10. HashMap在JDK1.8中有哪些改进?
  11. 随机森林算法解释一下(简历上有机器学习相关的项目
  12. 手撕代码:给定一个字符串数组 dict 和 一个字符串s,判断s能否由dict中的单词组成
  13.  

第九篇

一面

  • 4.18 一面(视频面 - 40min)
    • Java 内存模型
    • 两个进程的变量的地址相同,它们之间的写操作有相互的影响吗
    • 进程通信的方式
    • 关系型和非关系型数据库
    • 事务的特点
      • 原子性和一致性的实现原理(不会)
    • TCP 和 IP 为什么要四次挥手
      • Close_wait 状态是什么(不会)
    • 甲乙轮流射箭,两个人命中靶子的概率都是0.5,谁先射中就赢,问甲获胜的概率(答案2/3)
    • 算法题:给出一串数字,去掉k个数,问能形成的最小的数

二面

  • 4.18 二面(视频面 - 50min)
    • Java HashMap
      • put 数据的过程
      • 链表非常长会怎么样
      • 什么情况下会转红黑树(不会)
      • ConcurrentHashMap 作的改进
    • 常见的垃圾回收算法
      • 引用计数的循环引用的情况
    • MySQL 的联合索引
      • 索引的底层结构
    • 100个人坐座位,第一个人随机坐一个座位,后面的人优先坐自己的座位,只有当自己的座位被占了才会随机坐,问第100个人能坐到自己座位的概率(答案50%,不会)
    • 段页式管理下,CPU取数据要几次访存
    • 算法题:给出一个数字串的排列,找出下一个比当前数更大的一个排列(不能用next_permutation)

三面

  • 4.18 三面(视频面 - 55min)
    • 场景题:对 HashMap rehash 的时间进行优化
      • 我第一次答了:事先预估 capacity,直接申请相应大小
      • 我第二次答了:扩容时仅申请数组但不拷贝,当get命中时顺便拷贝过去
        • 缺点是什么(可能会生成很多数组)
        • 再优化(不会)
    • 手写单例模式(饿汉、DLC懒汉)
    • 算法题:给出一个转义后的字符串,问原串是什么?(写得不好)

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字节跳动是一家知名的互联网公司,提供多样化的在线服务和产品。在字节跳动的go实习面经中,通常会包含以下几个方面的内容: 1. 基础知识测试:字节跳动会对应聘者的基础知识进行测试,例如数据结构、算法、计算机网络等方面的知识。这一部分的问题可以是选择题、填空题、编程题等形式,用于评估候选人的基础水平。 2. 项目经历和实践能力评估:字节跳动也会关注应聘者的项目经历和实践能力,询问候选人在实习或学校项目中担任的角色、面临的挑战、解决方案以及取得的成果。通常会以开放性问题形式出现,侧重考察候选人的思维能力和解决问题的能力。 3. 技术深度面试:在技术深度面试环节,字节跳动会聚焦于候选人在Go语言相关技术方面的掌握情况。例如对候选人对Go语言的理解、熟练程度以及应用经验进行详细的询问和讨论。 4. 沟通与团队合作:字节跳动非常注重候选人的沟通能力和团队合作能力。所以在面试过程中,他们可能会提问候选人在团队合作中的角色、如何和其他成员协作以及如何解决团队遇到的问题等。 5. 自我介绍和问题回答:面试的最后要求候选人进行自我介绍,这是一次展示个人的机会。同时,面试官还可能询问一些与实习相关的问题,了解候选人对实习的期望、目标以及对字节跳动的了解程度。 综上所述,字节跳动的go实习面经主要包括基础知识测试、项目经历和实践能力评估、技术深度面试、沟通与团队合作以及自我介绍和问题回答等环节。应聘者需要准备充分,熟悉Go语言相关知识,并能够展示自己的技术能力、项目经历以及团队合作等方面的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值