25届春招,5月18日,大周日的进行了pdd的一面
pdd一面(整体感觉还可以相比某团和鹅厂,53min)
1、自我介绍
2、算法考察,计算最长山脉的长度,即递增递减最长长度,答:先写了一款,暴力了一下,时间复杂度是O(n*n),写完后测试用例也都过了,让我改成O(n),再写一款,就加了点判断条件改完了,然后怕他不满意,又重新写了一套解决方案,整了俩数组,上升序列和下降序列,依次 初始化,然后最后去判断最长即可,他说可以。
2.1 、根据算法,进行八股,数组对象在哪,答:堆中,问:内部结构,瞎答:对象头里的Mark Word,类指针,还有数组长度,然后就是具体的数据,以及填充字段满足8的整数倍,问:数组怎么分配空间, 答:(因为不太清楚他说的数组是什么,我就分了两种情况)int[]这种静态分配的话,那就是根据具体的数组长度进行内存分配,如果是ArrayList的话,那就可以动态扩容,巴拉巴拉开始八股吟唱
2.2 、数组是如何GC的,瞎答:如果数组作为局部变量的话,(当时看博客说数组量比较小,是支持栈上分配的),于是就扯了一下这个,然后正常情况下,数组中的数据是在堆中的,然后他的引用就是数组名字,当方法结束完,方法栈帧退出,那么这个栈上的数组引用就没了,然后就没人引用堆中数组数据的那一块区域了,然后就可以通过跟可达之类的判断它是垃圾,就可以GC了。
2.3 、为什么分为年轻代和老年代?答:吟唱八股,问:新生代和老年代的垃圾回收算法,答:复制,标记-清除,标记-压缩,问:为什么要用不同的回收算法,答:从内存碎片,内存利用率连续空间那扯的
2.4、 并发安全的三要素,答:原子性、可见性、有序性,问:三个方面都如何保证,答:扯了扯锁,扯了扯内存屏障、指令重排
扯了扯volitale关键字啥的
3、 给了我一大段代码,让我进行代码重构,我是通过策略模式+工厂模式+模板方法模式重构的
4 、项目
4.1 canel的原理,答:伪装从节点,binlog同步
4.2 缓存存的什么?答:店铺列表,店铺信息,问:具体怎么做的,如何缓存预热的,答:可以看我前两篇内容,直接吟唱
4.3 feed流如何做的,答:推拉结合,活跃用户推,让僵尸粉或者不活跃的自己来拉
(pdd基本没咋拷打项目,就问了五分钟左右)
4.4 反问环节
#春招#