携程 一面+二面(线下面,已过)
一面
1. 自我介绍
2. 从项目出发,介绍一下项目
3. 项目中,比如用户A和用户B有共同关注的好友,我想做相关的推荐,如何获取用户A和用户B的共同好友呢?【没想到太好的办法,面试官说似乎可以使用一些非关系型数据库将这种交互关系存储起来,我这才想起PostgreSql也许可以】
4. 分布式定时任务了解吗?项目中是如何实现的?
5. 项目的中的jwt相关部分?用户的token如何设置?
6. token如何存储?存储之后当我们获取token的时候发现有效时间过了,如何去延长有效时间?(大概这个意思,记不清楚了)
7. redis的内存淘汰机制了解吗?
8. jmm了解吗?双亲委派机制怎么理解?
9. ConcurrentHashMap的底层原理了解吗?
10. Spring中的依赖循环问题?(大概讲了一下依赖注入)
11. Spring中的ICO和AOP的理解?
12. 面向过程编程和面向对象编程的区别和理解?
13. 乐观锁和悲观锁了解吗?应用场景有什么区别?
14. GC机制了解吗?GC垃圾回收器有了解吗?
15. 分布式的内容了解吗?为什么一般zookeeper中的集群数量一般设置为3个?(奇数个)
16. 大概讲一下leader选举机制?
17. 大概讲一下RPC的框架?
18. 一个场景题:想要轮询播放当前库存里销售情况最好的若干商品(我考虑用分布式定时任务+REDIS的ZSET结构)
19. 一道算法题:好像是leetcode原题,就是若干个木桩高度大小不同排列,例如数组[1,5,4,2,3]这种,然后其中最大的盛水面积(短板原则),解法我一开始以为是接雨水,就说单调栈,后来看了半天不对,就说最大面积这种可以用DP来做,然后稍微列了一下转移方程,最后发现似乎双指针就可以了!
5分钟之后告诉我通过了A面,继续B面
二面
1. 上来是一道“简单”的斐波那契数列题,让我用尽可能多的解法来实现(手写,写在纸上),我选择的方式是常规的DP和递归
2. 让我分析一下我上面实现的两种方式的缺点,我就从时间复杂度和空间复杂度分析了一下
3. 还有吗?这部分我就往实际情况去考虑了,比如n超大的时候,我说可以用BigInteger这种来存放超大整数,面试官还问了我一下BigInteger的范围,我就说字符串有多长就能表示多大hhh
4. 有没有别的方式来处理这个超大的N?我说可以考虑分片,分片思想还是挺常见的,我说对不同片进行分片计算,计算结果可以持久化到数据库中。然后我还扯了一堆比如什么范围分片、hash分配啥的。
5. 了解垃圾收集器吗?G1收集器了解吗?CMS收集器了解吗?
6. 你的这两个设计方法(斐波那契的实现)还有别的问题吗?我说还要考虑N是不是有可能为负数这种。
7. 介绍一下你的项目
8. 项目时间长度?分工?其中的整个流程(我就说了一套完整的软件开发流程,从需求分析到最终的测试交付维护之类)
9. 项目中使用了微服务架构,你是怎么理解微服务的?微服务架构的优点与缺点有哪些?去中心化的理解?
10. 说一下项目中你认为的项目难点?
11. 项目过程中的不一致性?我从cache aside开始讲到延时双删,面试官说不是特别明白,然后我就具体举例子说事务A和事务B并发操作时候的一些不一致情况。
12. 然后面试官问我如果操作过程中redis挂了怎么办?我说redis挂了的话应该可以通过日志恢复?面试官继续问我说怎么知道在宕机前进行到哪一步?我说这里面可能涉及什么2PC和3PC思想,反正我扯了一堆把自己也扯进去了,面试官点点头说好的,然后面试就差不多结束了
5分钟过后通知我B面通过,等HR面,线上交流
综合来说一面八股基础比较多,二面很自由发散,不过还好过了
#我的实习求职记录##你觉得今年春招回暖了吗#