字节中台客户端一二面面经

一面 8.30

问题

自我介绍

介绍简历上准备的RPC项目

项目中用到了序列化反序列化,说一下概念

java反射, 使用场景(只说了方便传递字符串来创建对象可配置化)(哈哈刚刚想起来,jdk动态代理也是反射)

接口和抽象类区别、什么时候用

java内部类静态内部类

知道匿名内部类吗?

final关键字

面向对象三大特性

线程池是什么

线程池是怎么实现的(说了 核心线程 阻塞队列一些东西)

进程线程区别

线程状态

进程之间隔离的吗

垃圾回收了解吗,垃圾回收机制(GC ROOT 可达性分析 分代垃圾回收算法... 背的啥统统怼上)

强软弱虚引用

了解泛型吗?泛型擦除?(面试官稍微引导了一下,我说一下Object)

HTTP HTTPS

SSL/TLS 怎么保证加密的

会那些语言?

对前端的了解?

算法题

set 和 排序 的方法不可以。于是用了原地交换的方法

剑指 Offer 03. 数组中重复的数字 - 力扣(LeetCode) (leetcode-cn.com)

二面 9.2

问题

自我介绍

项目中遇到的困难

为啥来客户端

你是不是没学客户端的技术啊?

进程线程区别 (我喜欢从历史上说先用进程再有线程,面试官不喜欢我讲历史,那我直接背八股:线程是调度的基本单位,进程是资源基本单位,balabala)

线程多了怎么办(回答用线程池)

多个线程之间会有同步问题怎么解决(synchorized wait/notify juc包里的类 )

了解设计模式吗,使用过设计模式吗

写个单例模式。(先写了个懒汉,他说“你直接放大招吧”(不是原话),啪的一下给写了个双重锁校验)

就着 双重校验锁 问 synchorized 后面小括号包围的是啥(是类对象,只是拿着他当锁对象)

接着问,那这个类啥时候加载(看我迟钝了,他说你不会就直说吧,咱们赶时间)

HTTP属于OSI那一层呀

HTTP HTTPS 区别(说多个S, 多个安全层)

SSL/TLS 怎么保证安全的(说了TSL四次握手,之后的通讯使用会话密钥)

对了说握手的时候他打断(其实面试官在面试开始就给我打预防针了“小伙子我会打断你奥~~”)我,说网络上传递的是私匙还是公钥(当然是公钥了,名字就是公,不然为啥取这个名字啊)

算法题

给出一个乱序数组,输出排序后临近元素最大的差值。例如 nums = [4, 1, 2]。 排序后 [1,2,4] 。因为 24 有最大的差值2,答案是2。要求最优时间复杂度, 空间复杂度没限制。(当时说了先排序再遍历的思路很明显不是最好的解答。没办法让撕个了快排了事)

————————————————更新分割线—————————————————————————

题目还是很不错的。搜查到很好的文章:漫画算法:无序数组排序后的最大相邻差值

贴出来自己在面试完后写的代码:

计数排序法

时间复杂 O(n) 空间取决于最大最小值

def solve(nums):
    min_ = min(nums)
    max_ = max(nums)
    cntArr = [0] * (max_ - min_ + 1)

    for num in nums:
        cntArr[num - min_] += 1

    ans = 0
    cnt = 0 # 数连续0的个数
    for item in cntArr:
        if item == 0:
            cnt += 1
        elif item != 0:
            ans = max(ans, cnt)
            cnt = 0
    return ans + 1


if __name__ == '__main__':
    nums = [2, 6, 3, 4, 5, 10, 9]
    print(solve(nums))

基于桶排序的方法

时间复杂 O(n) 空间 O(n)

class Bucket: # 自己定义一个桶
    def __init__(self):
        self.arr = []
        self.max = float('-inf')
        self.min = float('inf')

    def put(self, num):
        self.max = max(self.max, num)
        self.min = min(self.min, num)
        self.arr.append(num)

    def isEmpty(self):
        return len(self.arr) == 0


def solve(nums):
    n = len(nums)
    buckets = [Bucket() for _ in range(n + 1)]  # 小灰给出的方法三中, 分成 n + 1 个桶 ,
    d = (max(nums) - min(nums)) / n  # 空涵盖的范围
    for num in nums:
        buckets[int((num - min(nums)) / d)].put(num)  # 放入桶中

    ans = 0
    start = 0
    for idx, bucket in enumerate(buckets):  # 第一个桶和最后一个桶永远都是有数字的 找起始空桶和结束空桶还是很简单的

        if not buckets[idx - 1].isEmpty() and bucket.isEmpty():
            start = buckets[idx - 1].max

        elif buckets[idx - 1].isEmpty() and not bucket.isEmpty():
            ans = max(ans, bucket.min - start)
            start = 0

    return ans


if __name__ == '__main__':
    nums = [2, 6, 3, 4, 5, 10, 9]
    print(solve(nums))
#字节面试##面经##字节跳动#
全部评论
leetcode原题 maxgap
点赞 回复 分享
发布于 2021-09-07 17:04
"面试官不喜欢我讲历史,那我直接背八股"
点赞 回复 分享
发布于 2021-09-03 16:55
字节啥部门啊
点赞 回复 分享
发布于 2021-09-03 13:21
LZ几号投递的呀
点赞 回复 分享
发布于 2021-09-02 21:06
才想起来,算法题是考我计数排序😫。唉~ 不会就是不会
点赞 回复 分享
发布于 2021-09-02 19:24

相关推荐

05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,"又一个收割焦虑的转行帖";另一方面是看了太多用 GPT 套娃出来的「学习路线」文章,AI 味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转 AI,或者已经在转的路上,希望能给点参考。 一个反共识的开场:你以为进 OpenAI 的人都是博士? 先讲个故事,跟我没关系,但跟所有想转 AI 的人都有关系。 OpenAI 的 Sora 团队(就是搞文生视频那个)一共 13 个人。这里面有两个人特别有意思: Will DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
评论
1
14
分享

创作者周榜

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