字节跳动 后台实习三面面经

    先说一下我的情况,国内top10 小硕,成绩中等,半年小厂实习经验,主要用的语言是java。总共是一轮电话面和三轮视频面,三轮视频面原本打算一天面完,当时二面面的不是很好,而且面完也没有让我进行下一轮面试,当时就以为已经凉了,都开始自抱自泣了。没想到后面hr竟然来和我约三面时间,说是那天三面面试官有事没法面试,当时很震惊。三面面完当晚就收到了hr的口头offer,头条效率还是很高的。

一.第0面 电话简历面(21分钟)

因为我是投简历给hr后直接面试,没经过笔试,所以加了一轮电话简历面,问的都很基础,只有20分钟,基本不会问的太深。
1.面试官:说一下进程与线程的区别
我:进程是比线程大的一个概念,进程参与cpu调度和资源分配,线程只参与cpu调度,共享进程的资源。
面试官:线程都共享进程资源,那线程有什么自己独占的资源
我:线程有自己的栈,pc计数器,还有一些线程的缓存

2.面试官:volatile了解吗,说一下它有什么作用
我:因为线程都有自己的缓存,线程修改数据之后,其他线程不能马上知道。有了volatile之后,线程修改数据之后需要马上刷新缓存到内存,其他线程读的时候也要从内存中读最新值。volatile主要就是用来保证内存的可见性。
面试官:还有什么别的作用
我:volatile还可以防止指令的重排序。比如给两个变量a,b赋值,先给a赋值,再给b赋值。指令重排序后可能会先给b赋值,再给a赋值。volatile可以避免这样的重排序的出现。
面试官:防止重排序是防止所有的指令重排序吗?比如后面有一个c变量,只给c加volatile,那a,b可以重排序吗
我:应该可以,volatile只管c的

3.面试官:atomic包用过吗,原子性怎么保证
我:使用底层的cas指令实现修改的原子性,修改前判断一下是否还是修改前的那个值,是的话就修改,不是就修改失败

4.面试官:数据库的隔离级别说一下
读未提交,可以读到事务未提交的数据,有脏读的问题
读提交,解决脏读问题,只能读到事务已提交的数据,但是有不可重复读的问题
可重复读,解决不可重复读问题,可能会丢失更新
序列化,事务串行执行

5.面试官:下面问一些数据结构的问题,树的前序遍历非递归实现
我:(我这里说的不是很清楚,面试官应该是自己脑补出了过程)因为是前序遍历,访问到哪个节点就可以马上访问了。不断访问树的左子节点,把它加入栈中。左子节点为null时出栈,把它的右子节点压栈。
面试官:树的层次遍历
我:先进先出,这里使用队列。把根节点放入队列,然会不断放入左右子节点即可。
面试官:刚才用到了栈和队列,那如果要用栈来实现队列,怎么实现
我:用两个栈来实现(这道题以前做过,但是记不清了,只记得这个,然后想了很久)
我:不知道了
面试官:刚才你说用两个栈,这个思路是对的。你想象一下有两个栈,先往左边这个栈加数据比如1,2,3,然后要取的时候怎么办
我:把1,2,3出栈加入到右边这个栈,这样顺序就倒回来了
面试官:对,然后,这时候再加入1个4,怎么加
我:再把右边的数据倒回来(这个时间复杂度太高了)
面试官:你可以把右边的栈看成一个读缓存,读的时候就往右边读,写的时候往左边写
我:懂了,右边的栈空的时候,再一次性从左边读取就行了,左边可以继续加
面试官:对。
面试官看还有时间,又问了一道题:还是关于栈的,实现一个最大栈,每次都可以获取到栈中所有数字

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值