面试复盘|字节 客户端 等HR面

一面:
TCP 与 UDP 的区别、三次握手、四次挥手?
2MSL 是什么?为什么要有 2MSL ?
HTTP 怎么发起请求?(我觉得是想问输入网址后发生的一系列事情)
HTTPS 怎么解决 HTTP 存在的问题?
对称加密和非对称加密有什么区别?各了解什么相关的加密算法?挑一个细讲
讲讲虚拟存储器?页的大小如果太大有什么影响?太小呢?
Java GC 怎么判定对象可回收?了解什么垃圾收集器?垃圾回收算法?

二面:
线程调度算法有哪些?
时间片如果设置得太大或者太小会有什么影响?
进程和线程的区别?进程中哪些资源是线程共享的,哪些是线程私有的?详细说说(................)
Java 如何实现线程安全的 i++?有多少种方式?
volatile 是什么?有什么应用场景?
synchronized 和 ReentrantLock 有什么区别?
ReentrantLock 具体怎么实现线程同步?AQS?
可重入锁是什么?ReentrantLock的应用场景有哪些?
synchronized 修饰静态方法和非静态方法有什么区别?
Java 的线程池除了核心线程数之外还有什么哪些重要的影响因素?(这块复习的不熟,死亡.........)
线程池的整个运行过程讲一下?(磕磕绊绊,哎)
Java 四大引用?分别的应用场景是哪些?

三面:
了解一下个人情况
是否可以提前实习

算法题1:复杂一点的两数之和
给定一个正整数数组和一个整数 target,寻找数组中两个之和可以等于 target 的数的下标,并且要求返回所有可能组合的数的下标,其中正整数数组的元素有可能重复
楼主思考的时候,考虑到几种测试用例:

①[1,2,4,8,9,1,2],target=3

②[1,2,4,8,9,1,3],target=3

③[2,2,2,2,2,2],target=4

④[3,1,2,4,2],target=9

⑤[4,3,7,5,9],target=2

⑥[1,2,6,8,3,5],target=7
牛客的大佬们如果有什么好思路来切入这道题,恳请在评论区留下你的思路或者代码,一起学习进步!

算法题2:互换礼物
假如班里有n个同学,每个同学都要提供一份礼物,然后对所有的礼物重新分配给每一位同学,有以下要求:
①每个同学提供的礼物最后不能分配给自己
②每个同学只拿一份礼物
③例如:
0->6
1->4
2->1
···········
n-1->8
设计一个分配算法,使得分配的方案能够符合以上要求
我的理解:是将 0~n-1 这 n 个数进行分配,输出一个这 n 个数乱序的数组,并且每个数组元素不等于它的下标,但是考虑的方法始终有些瑕疵、欠缺。如果有什么更好的解决这道题的方法或者思路,恳请能在评论区留下你的思路或者代码,一起学习进步!

继续了解一下个人情况,然后开始问一些计算机基础问题

Spring IOC、依赖注入讲一下(简历上的东西一定要会啊.....)
数据库了解什么,讲一下索引的作用,聚簇索引,B树和B+树有什么区别,索引还可以用什么数据结构来承担
了解什么设计模式,单例模式你经常怎么写
volatile 为什么可以保证重排序,哪几步重排序会出现问题,两次检验会有什么效果?
对 MVC 有什么了解?有没有了解过 MVVM、MVP 这些开发模式
反问

面试总结:整个流程下来,一二三面的难度是 基础和进阶的比例在变小,问的问题越来越注重深度与自己的思考,在三面的算法题中面试官更是希望候选人能够尽可能地思考得全面,没有说一定要个最优解法,但在这个过程中就是希望你能够想得周全,边界什么的要搞清楚。字节的面试体验感觉很好,面试官更像是一个同学在讨论面试问题

讨论:三面的算法题我依然没有能够思考到比较全面的思路,看看牛客的大佬们有没有更加完善一些的解决思路,欢迎你在评论区留言展示你的想法或者代码!

#面试复盘##字节跳动##面经#
全部评论
收到OC邮件了!
2 回复 分享
发布于 2021-09-15 16:59
复杂的两数之和可以使用一个HashMap<Integer,ArrayList<Integer>>来保存数组中的值和索引,key是值,value是索引,然后遍历数组,如果HashMap.containsKey(target-nums[i])==false,就将值和索引添加到hashmap中,如果map中存在相同的key,就把索引添加到对应的arraylist中,如果没有就直接添加即可。如果HashMap.containsKey(target-nums[i])==true,就将key为target-nums[i]所对应的arraylist中的值与i进行一一匹配加入结果集即可,然后再将键值对加入hashmap中,遍历完就得到所有可能的下标组合。 交换礼物的话如果就那两个条件的话,我觉得 判断一下n为奇数还是偶数,如果是偶数,直接reverse一下就好了,如果是奇数,第一个人和第二个人交换礼物,然后剔除第一个人,剩下的n-1个人reverse一下不就行了吗
1 回复 分享
发布于 2021-10-06 19:03
几号面的?
点赞 回复 分享
发布于 2021-09-17 00:27
那个互换礼物我是这么想的,可以先进行一个随机分组,分成两组,这里可以使用一个随机生成一个0-1的随机数,小于0.5的是一组,大于0.5的是二组。分组概率相等的话,如果整体是偶数,分完以后应该两组人数是一样的,直接对位交换礼物。如果整体是奇数,吗对位交换到最后的时候会剩下三个人,这三个人做一个轮转交换。
点赞 回复 分享
发布于 2021-09-14 14:23
哪个部门
点赞 回复 分享
发布于 2021-09-12 23:49

相关推荐

1.&nbsp;简单的自我介绍2.&nbsp;八股和项目讲讲你的项目,以及你觉得个人比较有优势的地方。可以现场演示一下你的项目吗?追问项目细节,略在C++高并发场景中,怎么保证线程同步?你都用过C++的什么锁?你了解的C++都有什么锁?分别在什么时候使用?它们有什么特点?互斥锁(Mutex)的底层原理是什么?读写锁的底层是怎么实现的?它如何区分读和写操作,并进行相应的控制?保证线程同步,除了锁还用过什么其他方法?你觉得C++和Python谁的效率更高?为什么一个简单的加法,C++会比Python的效率高?对于一个a&nbsp;+&nbsp;b的加法,Python和C++分别是怎么做的?学过计算机组成原理和编译原理吗?一段C++代码的完整编译过程是怎样的?int&nbsp;a&nbsp;=&nbsp;&quot;a_string&quot;;&nbsp;这样会报错吗?编译器怎么知道要报错?在哪个阶段进行类型检查?计算机执行加法和减法,哪个效率更高?为什么?计算机底层如何实现减法?堆和栈有什么区别?int&nbsp;a[10];&nbsp;这样定义的数组,内存是如何分配的?是在堆上还是栈上?在函数中定义的数组,离开函数时空间会释放吗?如何释放?像vector这样的可变数组,是在堆上还是栈上?它在函数中定义,离开函数时如何释放?数组和链表有什么区别?它们的查找效率呢?学过词法分析和语法分析吗?(lz大三上才学编译原理,八股也没准备这些)3.&nbsp;手撕代码手撕:C++单例模式。(表示不熟悉,同样也没准备过)单例模式是什么?有什么特点?(更换题目)手撕:无重复字符的最长子串4.&nbsp;反问环节面试流程大概要多久?什么时候能知道结果?实习地点在哪?这次答得不太好,都是一些没准备过的问题(回过头来看也是比较基础),能过感觉也是现场项目演示和面试状态没崩,很惊险
查看21道真题和解析
点赞 评论 收藏
分享
评论
4
21
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务