亲身分享一次 字节跳动 真实面试经历和面试题

前言

朋友们好,我是Tongyao,分享一次亲身经历的大厂字节跳动面试感受!

大概今年在2月分底左右,偶然收到字节跳动hr的面试邀请,在双方约定好的时间内进行面试。

字节跳动首先会给你的邮箱发送一个面试邀请,里面含有飞书面试连接和一些字节跳动公众号介绍和公司官网介绍

飞书是他们内部产品,进行线上面试,不用下载客户端,在线视频面试、笔试都是在浏览器网页上进行的,对面试者很友好,主要面了一些比较常问的技术题,2到算法题,总体面试感觉很不错

先来个面试邀请压压惊:

亲身分享一次 字节跳动 真实面试经历和面试题_第1张图片

面试经历

双方定好的时间内,经过漫长的等待,终于迎来了面试时间,心情无比紧张和忐忑不安

我打开邮箱,点进去了那个面试连接,在进入前就想提前5分钟进入飞书找找状态,没想到一进去之后面试官就已经早早在电脑面前静静的等候着了,一下子心情更紧张起来了(不得不说面试官长得跟王思聪有一些相似)

面试管首先上来问了一下“是张童瑶吗”,我说“是的”。

“那咱们等一下时间后,就开始吧”,我说“好的”

“你先做一下自我介绍”

在我的一阵叭叭的自我介绍后,面试官又把自己介绍了一下和公司也介绍了一下

在双方互相了解之后,就开始了紧张又刺激的技术面试。

当时面试题

说一说Java中的Lock类

Lock 是 java.util.concurrent.locks 包 下的接口,Lock 实现提供了比 synchronized 关键字 更广泛的锁操作,它能以更优雅的方式处理线程同步问题。Lock提供了比synchronized更多的功能。

https访问过程

首先,https是一种加密协议,http的升级版,默认https端口是443,通过服务器上的相应证书拿到私钥后解密,访问。从本地hosts寻找相关dns服务器地址,没有的话则回去当前网络配置的dns找服务器,默认dns服务器一般都是144.144.144.144或者8.8.8.8,找到相应服务器首先回到dns缓存服务器寻找缓存,没有的话会到dns递归服务器通过递归轮询方式一次一次找到最低级域的ip,拿着ip去找dns授权服务器去授权,最终存入缓存返给用户ip地址,用户机器拿到ip地址后,通过访问服务器ip并且携带https或者http请求头,服务器ip拦截到请求和端口后寻找相应应用服务器的地址并且执行相应服务器代码信息后返回最终数据到用户浏览器渲染。

springboot和spring运行效率

答案暂不补充,尝试自己寻找答案比看我解释的更详细,更好。

springboot staer启动器,就是为什么引入pom包,jar包就跟随main启动了

答案暂不补充,尝试自己寻找答案比看我解释的更详细,更好。

nacos注册不进去如何排查问题,又根据什么关键字?

首先检查Nacos版本和当前SpringCloud版本是否兼容、检查Nacos版本依赖是否注入、检查本地或Nacos程序是否启动、检查Nacos地址是否正确、查看项目中Nacos账号密码等相关配置是否正确。

再然后可以根据debug调试,跟着代码一步一步走,看为什么注册不进去,首先Nacos官网都是有相关的Open Api的,客户端注册服务核心原理就是首先通过相关方法和类,获取当前项目中的Nacos配置信息,再然后通过拼接的方式拼成一个相应的注册服务Open Api,使用http请求Open Api完成服务的注册。
(还好之前看过nacos注册服务源码 - - )

redis主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。
默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

微服务你是怎么用的,多深

答案暂不补充,按自己对微服务理解回答,没有准确答案。

ArrayList和LinekdList有什么区别,详细说一下

LinkedeList和ArrayList是常用的两种存储结构,都可以实现了List接口

1、数据结构不同
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。

2、效率不同
当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。

3、自由性不同
ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。

4、主要控件开销不同
ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。

如果springboot没有tomcat怎么解决

有2中tomcat配置方法
第一种:
在IDEA中配置本机的Tomcat
第二中:
在Springboot项目中通过tomcat依赖,配置内置的tomcat

springboot内置tomcat怎么配置

通过加入tomcat依赖包,等待依赖引入完成后,完成tomcat的配置,在项目中还可以配置tomcat端口、路径前缀和本地tomcat能配置的配置。

为什么说线程不安全

线程在同一时间操作修改一条数据后,就会造成线程同时争夺资源,所以线程不安全。具体详细请查找答案。

进程和线程区别,JVM内存中的区别

只留问题,答案暂不补充,尝试自己寻找答案比看我解释的更详细,更好。

JVM内存堆分区块都有哪些

方法区、堆、虚拟机栈、本地方法栈、程序计数器。具体详细请查找答案。

spring、springmvc、springboot了解多少

答案暂不补充,按自己对微服务理解回答,没有准确答案。

spring和springboot有什么区别和联系

只留问题,答案暂不补充,尝试自己寻找答案比看我解释的更详细,更好。

笔试题

聊完技术,又说”让我们做几道题吧“,我说行(其实之前就有做算法功课)

1、Map时间过期,怎么用lru算法实现

没写出来,具体题目忘了,有知道的可以在评论区留言互相讨论

2、链接3个链表合成一个链表并且排序

题目:

给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
  1->4->5,
  1->3->4,
  2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

摘自力扣答案:

// 优先队列
public ListNode mergeKLists(ListNode[] lists) {
   // 边界情况考虑
   if(lists.length == 0)   return null;
   Queue<ListNode> heap = new PriorityQueue<>((ListNode a, ListNode b) -> (a.val - b.val));
   for(int i=0; i<lists.length; i++){
       ListNode curHead = lists[i];
       while(curHead != null){
           heap.offer(curHead);
           curHead = curHead.next;
       }
   }
   ListNode head = heap.poll();
   ListNode node = head;
   while(!heap.isEmpty()){
       node.next = heap.poll();
       node = node.next;
   }
   // 把链表中的环去掉,同时考虑 [[]] 的情况
   if(node != null) node.next = null;
   return head;
}

最后

总之唠了很多,大概1小时的样子,

有很多都想不起来了,核心的记得无比清楚。

不过最终面试官反响还是挺好的

最后又问了个学历问题(本人也知道自己学历一般)

不清楚是不是学历问题,最终没有进入到二面,不管怎么说继续努力提升自己吧!

总之,最后祝大家都能去到理想的公司

ok,我话说完

你可能感兴趣的:(技术深研,其他技术专栏,java,职场和发展,字节跳动,面试,字节跳动面试)