7.26 虾皮 新加坡 后端校招提前批一面、二面(凉)
已凉,继续奋战秋招
7.26二面 58分钟
又紧张到忘记录屏,哎楼主真是不争气
几乎没有问八股,一些小的八股基本穿插在场景设计中,主要是一个算法题(可能时间比较紧张,没让写代码,就讲讲思路),加上一个场景设计,楼主本身没有项目经验,场景设计我认为挺简单,但是个人答得不是太好,尤其是很多相关的八股临场了没有讲解清楚。面试官全程引导,建议没有项目经验的小伙伴多多准备,把八股代入到实际场景中去理解。
算法题
给一个无序数组,让找出中位数,给出时间复杂度。
楼主大概讲了下 快排 调用划分算法的思路(应该是最优思路了吧)。可惜复杂度说不清楚,只能确定上界是O(NlogN),后来面试官说其实可以证明这个算法复杂度是 O(N),没看过算法导论实在不会啊。
数据库场景设计
设计一个表,应用场景是商品销售,商品id、店铺id、产地、产品名几个字段,要求整个设计中一直能够高效地实现两个功能接口:通过商品id查找、通过店铺id查找
面试官很贴心,表示不需要按语法写,只要用伪代码写出来就行,建表、建索引的思路。
然后慢慢引导到后续的优化
- 主键怎么设置
- 商品id怎么生成 —— 自增
- 产品名你设计 varchar(100) 100个字节够用吗,有中文怎么办,了解中文编码吗 —— 多数情况应该够用了。 utf-8,中文编码长度记错了,答约多数需要2个字节,少数3个(面试官指出错误,我说不记得了,总之肯定比英文多一些,具体忘记了,其实多数汉字需要3个字节,就不该装这个B,哎)
- 还有哪些字段可以加索引,给产地加索引可以吗 —— 区分度不大的话,没必要
- 数据变多,怎么继续保证接口2 —— 垂直分表
- 垂直分表的话,容量还是不够,怎么办 —— 水平分表
- 水平分表了,主键还是原来那个吗,主键依赖一个服务器生成吗,自增性能 —— 雪花算法,
- 怎么保证接口2 —— 答按照店铺id分表
- 那么主键仍然是商品,怎么保证唯一性,递增性,怎么保证接口1 —— 类雪花算法,店铺id也加入到商品id中
- 查询过多,数据库撑不住了怎么办 —— Redis缓存(没提MySQL读写分离,面试官帮我讲了,血亏啊!!!明明八股看过的)
- 只要一台 redis 服务器吗 —— 可以多台,Cluster。
- Cluster里面某一个节点挂掉了怎么办 —— 如果从节点挂掉影响不大,主节点挂掉可以故障转移(没提选举,完全忘了,不过面试官也没追问,追问了我估计也想不起来细节)、
- Cluster新加入某个节点怎么办 —— 不熟悉 Cluster,求放过
- 有写请求怎么保证主从一致 —— 先写DB,再直接淘汰缓存
- 写完DB服务挂掉了,连接不上缓存层,外部读到的都是旧数据怎么办 —— 短时间的主从不一致无法避免,反过来先改缓存然后DB挂了一样会主从不一致,先改DB的,然后不停重试改缓存,影响会小点。(面试官说最好缓存加过期时间,天哪!我已经默认缓存有过期时间了,竟然完全忘记了。我怀疑我答出缓存过期之后面试官就会继续追问缓存雪崩那几个了,八股天天看的啊,血亏 * 2!!!)
- 反问
反正经验教训就是大家背一些优化性质的八股的时候一定要多联系联系相关的场景,不然就会像我一样背了也是白背,真正该调用的时候一个屁都放不出来。
哎,希望能有hr面吧,面试官说我一面的面评不错,基础挺扎实代码也写得挺好,投了二十多份简历了,不想再面了啊。。。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
7.16一面 1小时15分钟
今天刚面完,楼主非科班,无CS基础,离职后花了半年考研转CS,还没开始上学,无项目经历。Shopee 是最后投的,前面打算垫好几家炮灰面,结果新加坡这边效率太高了,隔天约笔试,隔个周末就约面试,变成我的处女面,打得我措手不及。
处女面太紧张了,忘记开 OBS 录屏复盘,只能纯靠记忆复盘一下。
面试官人很好,感觉手下留情了,出的题都是常见八股题,出题的时候基本都有引导,非常流畅一点也不生硬。
对了,我投的新加坡岗,之前的笔试选择题都是英文,不知道是不是新加坡都这样,投国内岗的小伙伴是做的英文题还是中文题呢?当时也没看到切换选项,硬着头皮硬撸,好多八股里的名词可能没反应过来。
上来先撸代码
LC 72 题 编辑距离,感谢前面贡献面经的老哥,面试前一天我去医院排队的间隙抽空看完了这题题解。后面的朋友这题绝对要看,绝对是高频题。
代码撸了20分钟,加上讲思路一共30分钟左右吧。
追问,这是一道经典dp题,你觉得什么场景下你会想到用dp去解题?
- 数据结构
- Java 都有哪些数据类型?
- 说说哈希表怎么实现的吧。
- 不限于Java,哈希表还有哪些冲突解决方式?
- 数据库
- 数据库一般有哪些索引?
- B+ 树 和 B 树作索引有什么优劣,哪种更适合 MySQL?
- Redis 常见数据结构了解吗?我问是底层结构还是对象结构,面试官告诉我 Redis 没有对象(我有点懵,直接黑人问号,又不敢怼,就随便说了下)
- 漏说了 Set 和 ZSet,你可能没实战用过,没关系,想象一下这两种数据结构的应用场景?
- Java基础
- 说说 == 和 equals 的关系。
- 讲讲面向对象的特性。
- 讲讲多态吧。
- JVM
- 聊聊 Java 的内存管理,Java 的垃圾清理了解过吗?大致讲讲流程,不用拘泥于某种具体的收集器。
- Java 的引用类型了解吗,跟垃圾收集有关的,讲讲他们跟垃圾收集的关系?
- Java 的堆和栈了解吗,讲一讲用途,为什么要形成这两个分区?
- 具体讲讲栈有什么特点,为什么这种结构适合于线程执行?
- 计算机网络
- TCP UDP的各自特点
- 你提到 TCP 可靠,TCP 首部有哪些内容保证可靠性?
- 你提到 TCP 面向流,那么双方用什么机制验证数据是否传输完毕?(答曰不知道,面试官提示不在运输层实现,反应过来是应用层加字段)
- TCP 三次握手
- 操作系统
- 讲讲线程,线程怎么通信?
- 共享内存,怎么防止并发冲突?
- 加锁,会产生死锁,死锁产生的条件?
- 死锁如何避免?
感觉自己还是蛮幸运的,这些题都是八股、面经的高频题了吧,希望有个二面通知吧。希望大家都能拿到满意的 Offer。