拼多多服务端一面4.18

拼多多一般多久出结果呢?一面感觉面的依托40分钟面完了。。感觉有点小寄

整理一下一面的问题吧也学不进去。

(1)门面模式,策略模式、模板方法 (因为项目写了!所以这么问的)
门面:为复杂多子系统提供统一简洁接口,隐藏内部繁琐流程,降低调用复杂度,让外部只需一个入口就能使用整套功能。
策略: 定义一系列可互换的算法策略,封装各自逻辑,运行时灵活切换算法,不修改原有业务代码,符合开闭原则。
模板方法模式定义算法固定骨架流程,将步骤延迟到子类实现,不改变整体执行顺序,子类只重写具体细节,复用算法结构。
(2)策略模式和工厂模式区别 (这个问题一直追问我!! 我只知道特别浅浅的东西)!!! 
工厂模式负责造对象,只关心怎么创建实例;策略模式负责用算法,运行时切换不同业务逻辑,工厂管创建,策略管行为。
然后 追问 工厂模式不能做不同策略对象吗? 工厂造出策略对象,再交给策略模式去调度使用,二者分工完全不一样 然后又追问他们使用场景 多个同类对象,创建逻辑复杂多变,不想让业务代码直接 new 对象,统一封装创建,解耦对象生成与使用。 同一业务有多种算法 / 规则切换,比如支付方式、排序规则、优惠计算,运行时灵活替换业务逻辑。
又追问 相同点是什么同时他们的区别是什么呢? 回答封装变化、都用到了多态,都降低了耦合、都符合开闭原则。
不同点 一个创建对象一个选择对象怎么去干活的。
第一个项目项目学到了说明一下 就随便说了一下简历上的东西 然后没有追问
下面问rpc框架的东西了 因为简历有rpc。  自研 RPC 让我掌握TCP 粘包解决、动态代理、服务注册发现、负载均衡、SPI 扩展

(3) 问怎么处理粘包!! 定消息头 + 长度域的私有协议,先读头获取长度,再按长度读体。
(4) 为什么会有粘包的问题: TCP 是面向字节流的协议,没有消息边界,发送方批量发、接收方一次性读,就会出现多条数据粘在一起。
(5) 问我tcp为什么是流式的?? 我直接蒙蔽了。。。我咋知道!!! 
    TCP 是流式的,因为它的设计目标是提供一条可靠、有序、连续的字节管道,而不是独立数据包的传输服务。
(6) 问我项目设计的 协议消息的格式是什么样子的 让我写道屏幕上 因为确实背了这里写出来了
(7)问我 message length代表什么意思 message length 就是消息体的字节长度,告诉接收端要读多少字节才是一条完整消息,是解决 TCP 粘包半包的核心字段。
(8)因为我使用的是recordParser去进行消息的处理然后面试官问我 没有被截取的部分怎么处理呢? 看了recordParser源码所以答出来了 没读完、不完整的字节,我会自动暂存在 Vert.x RecordParser 内部缓冲区里,不丢弃、不处理,等下一次数据到来继续拼接,直到凑够一整帧才交付
(9)jdk动态代理是什么 !! 
(10)jdk动态代理底层是什么 运行时动态生成接口代理类字节码 → 加载进 JVM → 全部方法统一走 invoke () 反射调用 这里好像我当时说的怎么实现动态代理了因为我不知道底层所以当没听见。。。
(11)红黑树和跳表的应用区别 redis?
红黑树 范围查询慢 HashMap  跳表 插入 / 删除只改指针 范围查询极快 
(12)为什么空间复杂度都是O(N)
(13)除了上面还有什么区别吗? 我又重复了一遍上面的回答。。。因为确实不知道了。。
实现难度不同
红黑树:极难,要处理旋转、变色、平衡,代码复杂易错。
跳表:简单,只用随机层数 + 指针调整,代码短、易维护、易扩展。
插入 / 删除稳定性不同
红黑树:插入删除可能触发连锁旋转 / 变色,最坏会有O (logN) 次调整,高并发下有抖动。
跳表:插入删除只修改前后指针,局部调整,无连锁反应,高并发更稳定。
范围查询效率不同
红黑树:范围查询要中序遍历,跳转多、缓存不友好,速度慢。
跳表:直接在底层连续链表遍历,缓存命中率高,范围查询天生更快。
并发场景支持不同
红黑树:修改时影响路径多,加锁粒度大,并发性能差。
跳表:操作局部化,加锁粒度小,更容易实现无锁 / 细粒度并发。
缓存友好度不同
红黑树:节点分散,CPU 缓存不友好。
跳表:底层是连续链表,缓存命中率更高。
(14) 又问他们读取的区别是什么呢?读取时会怎么样
红黑树读取(查找)
从根节点开始,不断左右跳转,走一条从根到叶子的路径
节点在内存中不连续,CPU 缓存命中率低
每次比较都可能缓存未命中,读取速度受影响
范围查询需要中序遍历,跳转更多,更慢
2. 跳表读取(查找)
从最高层索引往下跳,快速缩小范围,最后落到底层有序链表
底层是连续链表,内存局部性好
CPU 缓存更友好,连续读取更快
范围查询直接遍历底层链表,几乎无跳转,极快
 (15) 最后除了两道算法题 
1、是leetcode 面试150题里面的一个
2、实现一个线程安全类 然后又add和remove操作!! 
都写出来!!

42分钟差不多就面完了
全部评论
我是刚好一周
点赞 回复 分享
发布于 04-19 23:25 安徽
狠狠拷打底层我真吐了
点赞 回复 分享
发布于 04-19 18:25 黑龙江

相关推荐

评论
1
收藏
分享

创作者周榜

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