我自己抄下我自己.jpg 可能会做一些小补充 回忆的时候发现一二面漏掉了一些问题
还是把三面合在一起比较好一些 便于大家的阅读.
楼主比较佛系,春招就面了字节一家公司.而且保持着一星期一面的高强度面试
但是也比较幸运 三面面试官说她今天就会告诉hr联系我进行hr面(因为三面面完是中午大概12:20 她说hr可能在吃饭所以会晚点约 :D)
然后今天面的三面也是基本上所有问题全部答出来了 最后反问环节故意问了个(划掉):我还有什么要提高的 面试官愣了几秒说你大二好好学习就行了 笑.
期间本人也经常看牛客的面经,饮水思源,回馈牛客啦~
那就开始梳理一波三面的全过程:
一面 55min 4.7
首先面试官一副不想招人的样子
一直怼我大二可能没时间来公司
上来两道算法题:
实现一个hashmap put get操作 可以不实现hash函数
首先这道题之前让我讲了讲hashmap的八股
说道1.7和1.8的扰动函数的区别后面试官表示不需要考虑hash 只需考虑hash冲突的解决方式
按照数组+链表的思路讲了一会然后开始动手写...大概20min左右写的差不多了面试官让我讲一讲思路
第二道算法题:树的Z字形遍历改:比Z字形多了一个s节点 相当于一个TreeNode中有 l r s 分别表示左子树 右子树 s指向下一个节点(当时这方面没怎么听懂面试官的意思后来沟通之后懂了)
大概15min写完+改完
算法题相当于A了 1.5/2 今天看了如何实现hashmap 感觉写不出来理所应当.....虽然也是自己蔡了只练过LRU LFU实现
然后问了一波ArrayList的扩容过程(add要进行判断容量 ensureCapacity具体判断 grow扩容1.5倍 有兴趣的同学可以看一波源码 我就是按照源码回答的)
然后面试官让我复述go语言的那个项目 巴拉巴拉,,,,
Q:你们学校大几开数据库 看你简历上写的熟悉MySQL
A:大三.....
Q:那你怎么学习的
A:巴拉巴拉....
数据库八股: 索引是什么? 分类? 作用? 索引失效? 失效原理?(最左前缀)
Q:项目用了Redis,怎么用的;
A:(窃喜,个人重点复习了Redis骚操作) docker搭了一个伪集群 redis cluster 巴拉巴拉说了cluster和哨兵的准备知识.(其实想引导面试官问我docker以及Redis集群的,结果面试官看我知识挺熟的就说今天先到这里 大概55min)
又强调了一遍我是大二没时间来公司,说什么花一两个月熟悉的公司文档你就回学校了我们团队怎么办种种,,,,(麻了,一直解释我暑期肯定有时间,大三开学就没啥事情了...)
然后就说了先下了 没反问
当时以为因为被卡年级凉了 很难受的打了一天原神...
二面 60min 4.14
新鲜的面经(60min) 面试官超nice~ 所有问题基本全答出来.
面试官稍微迟到了五分钟 不过问题不大~
然后他进房间的时候又发了个 "你好 请稍微等三分钟" 问题依旧不大~
回"好的好的 没关系"
于是面试就开始啦!
Q:介绍下自己叭
A:..............巴拉巴拉
Q:你负责的这个学校官方的运维平台项目给我讲一讲~
A:巴拉巴拉
A:加锁("Lua脚本" key默认生存30S) 锁互斥:(判断是否存在,key的hash是否包含客户端的ID 有则返回锁生存时间) 锁续期(watchdog看门狗机制)
A:此时还是想继续引导面试官往redis mysql方向靠
Q:你这个项目有用到snowflake算法 可以具体说一下怎么实现的吗
A:long(1 41 10 12) 在这里我就不详细写出来了 有兴趣的同学可以自己Google一下snowflake
Q:你是熟悉Java对吧
A:是,GO只是了解皮毛(笑)
Q:那写一下单例模式吧
(饿汉式 DCL 大概五六分钟写完的样子)
直接用redis当做mysql使用的.
Q:恩 好 你提到了redis当做MySQL 那么具体的数据要如何保存呢?
A:(诶 还真就那个勾引成功) RDB AOF 仔细说了具体操作和实现 AOF拓展了 appendfsync可以保证每执行一次命令就持久化一次 redis-check-aof可以保证宕机了也能恢复数据 顺便比较了两者的优劣
A:(诶 nice) 双写一致性 分析了两种状况的情景以及解决方法.
Q:嗯 那你要怎样保证redis读取的不是旧数据而是新数据
A:如果缓存写失败 就把缓存清空 如果缓存读的是null 那么就读MySQL 这个可以在接口层判断一下即可
Q:嗯 可以的 其实我这个算工业上的解决方法了(笑)
Q:问了一下我们投票的同步问题 你知道什么是同步问题吧
A:嗯嗯 A获取数据如果B改了A就会读到脏数据(线程同步问题)
Q:嗯嗯 那你这个是不是没有考虑呢..
A:哈哈哈哈没有考虑那么多(此时气氛相当活跃)
Q:哈哈那没事 这个涉及到开发经验 你们这个项目可能也可以容忍一定的差错性
Q:那么你投票如何计数
A:redis的string
Q:底层是嘛
A:SDS(可变长字符串)巴拉巴拉
Q:嗯 好的 这边看你写了MySQL也比较熟悉是吧 那你知道MySQL的存储引擎吗
A:5.5之后默认innodb mylsam&&innodb的区别巴拉巴拉
Q:嗯嗯 那索引了解吧 innodb是什么索引 为什么查主键索引会比较快
A:嗯嗯 innodb是聚簇索引 底层是b+ mylsam可以是hash b+的好处巴拉巴拉 主键索引保存的是索引和数据在一起 找到索引就找到了数据
Q:嗯 那么非主键索引为什么比主键慢呢
A:(假装思考)我想想 嗯...非主键保存的是索引+行数据的地址 需要再查一次(其实是蒙的 套用了非聚簇索引)
Q:(惊喜) 对的对的 你说的是对的
A:(表稳狗实慌批) 嗯嗯 这方面我也有了解
Q:你刚才提到了hash 和b+的优点 b+一定快吗
A:等值查询hash快 但是hash不能范围查询 b+可以
Q:嗯嗯 好 那我再问问计算机基础的知识吧
Q:操作系统kill命令用过吗
A:一般用kill -9 杀java进程
Q:嗯 那好 kill是靠什么来通信的
A:(其实有点小吃惊) 这个嘛,,我真得想想
Q:没事没事 你想想
A:那我猜一个信号吧 这方面没有细致了解过
Q:啊哈 你猜对了哈哈哈,
A:笑
Q:了解过页面置换算法吗
A:opt lru lfu巴拉巴拉
Q:嗯嗯 那你知道怎么实现lru吗 或者说用什么数据结构?
A:(看过我一面的应该知道我练过LRU) 嗯嗯 (假装思考) 先口述了 linkedlist+hashmap 巴拉巴拉( 本来以为这就是最后一道算法题 还高兴的一阵子 顺便扯了重写linkedhashmap的removeEldestEntry方法也可以)
本来想直接写代码的 结果面试官没让写(哭)
Q:表示了肯定以及满意 那你知道put或get的时间复杂度吗
A:hashmap是可以O(1)的
Q:嗯嗯 那你了解内存管理机制吗
A:块 页 段 段页
Q:嗯嗯 好的
Q:进程切换时机
A:秒答
Q:好了 问了那么多问题了 我这边留一道算法题 lc15三数之和
A:大概十分钟左右做出来
面试官看了三分钟 说OK
说一下时间复杂度吧
A:O(n)
Q:okk 那今天可以了 后续hr会通知你的~
A:OK 面试官再见 拜拜
Q:拜拜~
这次面试官真的超nice!!!! 而且终于没有强调大二的没时间了!!!
许愿三面!
三面 65min 4.19
三面面试官是个女生 看起来是部门老大的那种气场 但是为人提的问题还是很常规的 :D
首先让我进行了自我介绍 然后问了句:你是大二的吧
A:其实我已经对"你是大二的这个问题产生PTSD了" 笑 所以回答是的之后赶紧说了下自己肯定有时间来公司这边实习的
Q:你是大二的 专业课学完了吗 操作系统和计网之类的
A:有自学过 学校目前还没学完.
Q:嗯 好 那我提几个问题吧 (其实这时候还是挺慌的 毕竟自己真的没去上过课 都是差不多自学)
Q:我们知道操作系统有并发和并行 那么它们具体怎么对用户实现并行的.
A:单核并发时间片轮转...... 多核直接同时执行多个进程........
Q:嗯嗯好 你刚才说了时间片轮转 具体?
A:CPU分配时间片.......
Q:嗯嗯 你还知道CPU有哪些调度进程的算法么
A:解释了一波 FCFS SJF HRRN 多级反馈队列 优先级...
Q:嗯嗯好 那你也学过计网吧
A:嗯嗯是的
Q:输网址到网页显示过程 OSI每层用了什么协议 越详细越好
A:那我就说的超级详细一点(笑) 应用层DNS(解析过程说了一大堆 总是是先递归再迭代 具体可以Google一下) TCP三次握手建立连接 客户端发送http请求 服务端返回相应http报文 浏览器
根据html构建dom树 css构建渲染树两者共同绘制出网页 最后TCP四次挥手
Q:嗯嗯 那我们每次请求http都得重新建立吗
A:(卖弄了一下)不是 这个要分版本 http1.0是的 http1.1就有keep-alive长链接了...............
Q:嗯嗯好 那你提到http 你知道它和https有什么区别吗
A:答了四点 (这题烂大街了可以Google)
Q:OK 那我看你简历上有写MQ 你知道如何去重吗
A:日志库保存消息ID 每次消费前进行检测
Q:嗯嗯 如果MQ数据丢失了 有那几个方面
A:生产者(可以用transcation或者confirm模式解决) 消息队列(持久化到磁盘) 消费者(手动确认ACK)
Q:行 那我们来做道题吧 实现一个队列 可以支持O(1)时间获取最大值
A:虽然没做过这道题 但是基本开始就想到了思路 然后顺便还跟面试官讲了Java的一些具体方法 最后用两种方法实现
Q:OK 那再考你道设计题
面试官发了个短连接 然后让我访问 是一个抖音视频 变成了长链接
其实就是设计短连接的题 这题我有看过所以基本开始就有思路 但是假装想了两分钟再跟面试官说解决方法
用26+26个大小写字母+10个整数形成 62的七次幂这么多的短连接 然后跟面试官说现在互联网大概就40亿+url
所以可以完全囊括住 对原来长链接进行转十进制 再hash成相应的62进制的数即可.
Q:嗯嗯好 那你要怎么保存呢
A:用MySQL或者Redis都可以
Q:MySQL如何操作
A:分库进行保存 可以一个库存五万个url直到40亿都存完
Q:那你怎么找到相应的库呢
A:(巧了 面试前一天刚留意了一下分库查找) 把库分成num_1 num_2...num_x直到40亿url全保存完
然后我们拿到短连接后转成对应的十进制数 用十进制数模50000 商就是对应的库的number.
Q:ok 那你Redis要怎么存 k-v吗 k-v分别是什么
A:k是短连接 v是长链接 查找的时候直接根据k找到v再302临时重定向到长(原)url
Q :okk 那好 我这边没有什么问的啦 你有什么想问我的吗
A:啊 前两面面试官都没给我反问环节 您真是太好了(笑)
Q11111:部门技术栈
A:这个面试官说了好多好多 ,,,,,,,还特别提到字节有专门的自研k-v库....反正就是十分热情
Q2222:部门具体业务
A:字节全线产品的用户增长以及用户活跃度 国内是抖音 头条...国外就是tiktok,,,,同样说了超级多.....我都只能假装点头 后来都不想听了hhhh
Q:3333:回到上文:我还有什么要提高的吗
A:(楞 啊.......你好好学习就行了 我可以跟你说说我当时的学习经验(热情.jpg) 又说了一堆...
Q4444:啊 那我面试在您这里算通过吗
A:哈哈哈我们这边是不能告诉面试者答案的 不过我会通知hr让他今天有时间给你打个电话进行下hr面 不过现在他估计在吃饭了(此时已经12:20左右) 所以得下午或晚上我再通知他.
我:(都这样说了....不和已经通过基本一样了吗....) 欧克克 那我没什么问题了
面试官:嗯 好的 那今天就这样了 拜拜
拜拜~
总之字节体验还是很不错的 特别是要三面了的时候hr通知我的时候都一直在说 加油加油 hhhhh
这个假期就决定字节了~
许愿一波大三wxg.jpg
全部评论
(51) 回帖