【面经合集】当 deepseek 遇上快手的面试|Java后端|01

🌟【友情提示】本篇面经来自粉丝投稿+智能润色,点击进入 -> 🔗互联网面经大全 围观25届校招修罗场!!每个技术细节都经过脱敏处理,请勿对号入座~

alt

🌈 面试官

咱们先聊聊异常处理吧,Checked和Runtime异常你一般怎么选型?

💬 小基

最近重构代码时刚好遇到这个问题。比如处理用户上传文件时,如果文件类型不支持,我会用自定义Checked异常,这样调用方必须处理这个业务错误。但像数据库连接失败这种不可控异常,就直接抛RuntimeException。之前用Runtime异常导致线上有个文件解析失败没回滚,血泪教训啊!

🌈 面试官

说说ArrayList和LinkedList的实战区别?

💬 小基

我们项目有个实时行情推送功能需要频繁插入数据。最早用ArrayList,结果发现每秒几万条数据时经常触发数组扩容,GC压力大。后来改成LinkedList,插入确实快了,但遍历时iterator.next()耗时反而增加了。最后折中方案是用ArrayDeque,既支持头尾快速操作,内存又比LinkedList节省40%。

🌈 面试官

假设需要设计一个洗衣服的程序,需要设计哪些对象?说说你的设计思路

💬 小基

(挠头)这个真没准备过...要是现想的话,可能需要洗衣机对象(有水位、模式属性),衣服对象(材质、颜色),洗衣液对象(用量)。方法的话,洗衣机应该有启动()、暂停(),衣服可能有计算重量(),洗衣液可能有自动投放()?上次做智能家居项目时类似的设计,当时用状态模式管理设备状态迁移。

🌈 面试官

多态在项目中怎么应用的?

💬 小基

我们支付模块有个典型场景。比如支付成功后的通知,有短信、邮件、App推送三种方式。定义Notification接口的send()方法,不同实现类重写具体逻辑。在策略选择器里用Map存放所有实现类,根据配置动态获取具体实现。这样新增企业微信通知时,只需加个新类就行,完全不用改原有代码。

🌈 面试官

写个分组反转链表吧,比如1->2->3->4->5,分组长度2,反转后2->1->4->3->5

💬 小基

public ListNode reverseKGroup(ListNode head, int k) {
    ListNode dummy = new ListNode(0);
    dummy.next = head;
    ListNode pre = dummy, end = dummy;
    
    while (end.next != null) {
        // 定位分组末尾
        for (int i=0; i Redis怎么支撑秒杀流量的?

💬 **小基**:  
> 去年双十一我们用Redis+Lua搞库存扣减。关键有三点:1)用连接池代替单连接,2)Pipeline批量处理请求,3)内存碎片率监控。有次大促redis突然卡顿,后来发现是有人用keys*命令扫key,改成scan指令后QPS从2万涨到8万。不过现在更推荐用redis-cluster分片。


🌈 面试官

最后说说线程安全的理解?

💬 小基

上次排查个诡异bug:用户积分偶尔会多扣。后来发现是用了HashMap存积分变更记录。改成ConcurrentHashMap后问题消失。现在写工具类都会先考虑无状态设计,比如用ThreadLocal存DateFormat。但也不是所有场景都要加锁,像最近做的监控数据采集,就用CopyOnWriteArrayList来平衡读写频率。

#快手##面经##deepseek#
互联网面经合集 文章被收录于专栏

本专栏收集了互联网上的面试经验贴

全部评论

相关推荐

评论
2
2
分享

创作者周榜

更多
牛客网
牛客企业服务