京东后端开发实习二面 55min

1. 请简单介绍AI相关基础知识及向量的概念。
2. 搭建大模型需要开展哪些工作?核心难点是什么?
3. 项目中哪部分内容较复杂?复杂点体现在哪里?最终如何解决?
4. 雪花算法的原理是什么?Snowid有哪些特性与优势?会出现耗尽的情况吗?
5. 缓存穿透的解决方案有哪些?如何处理缓存与数据库不一致的问题?
6. CRUD操作中哪些属于幂等操作?如何保证接口的幂等性?
7. 持续向RDS插入数据会引发哪些问题?
8. 线程池处理任务的完整流程是什么?核心参数应如何设置?
9. 如何从系统层面优化以避免消息积压问题(可采用限流、有损策略)?
10. 消息队列的消费顺序问题应如何解决?
11. JVM发生OOM时的排查思路与方法是什么?
12. JVM的组成部分有哪些?
13. 输入网址后,浏览器到页面加载完成的完整过程是什么?
14. 你如何理解Spring框架?
全部评论

相关推荐

昨天 13:10
门头沟学院 Java
1、Java面向对象具有封装、继承、多态三大核心特性。封装通过访问修饰符隐藏对象内部细节,仅暴露必要接口;继承允许子类复用父类属性和方法,实现代码复用和层次化扩展;多态分为编译时重载和运行时重写,使程序能够通过统一接口处理不同对象,提升灵活性和可扩展性。2、重载发生在同一类中,方法名相同但参数列表不同,与返回值和访问修饰符无关,编译时绑定;重写是子类覆盖父类方法,方法名、参数列表和返回类型必须相同,访问权限不能更严格,不能抛出新的检查异常,运行时动态绑定。3、线程池核心参数包括:核心线程数、最大线程数、空闲存活时间、时间单位、阻塞队列、线程工厂、拒绝策略。ThreadLocal底层使用ThreadLocalMap存储数据,其Key是弱引用的ThreadLocal对象,Value是强引用的实际存储值,每个线程独立拥有此Map实现数据隔离,需注意内存泄漏问题。4、使用线程池实现1~100累加时,首先创建固定大小的线程池,然后将累加任务拆分为多个子任务,通过线程池提交实现了Callable接口的每个子任务,收集返回的Future对象后,遍历这些Future并累加其阻塞获取的中间结果,最终关闭线程池并输出总和。整个过程利用线程池并行处理子任务,通过分治策略提升计算效率,同时确保资源合理回收。5、B+树非叶子节点仅存储键,叶子节点包含全部数据且形成有序链表。相比B树:1. 查询更稳定:所有数据都在叶子节点,查询路径长度一致;2. 范围查询高效:叶子节点链表直接遍历,无需回溯;3. 磁盘I/O更低:节点存储更多键,树更矮胖;4. 全表扫描更快:叶子节点链表顺序遍历即可。6、失效场景:1. 违反最左前缀原则;2. 对索引列使用函数或表达式;3. 类型隐式转换;4. 模糊查询以通配符开头;5. OR条件包含非索引列。优化方法:1. 按高频查询顺序建联合索引;2. 避免索引列运算;3. 用覆盖索引减少回表;4. 数据量大时用分区表;5. 定期分析索引使用率并删除冗余索引。7、通过EXPLAIN命令查看SQL执行计划,关注key字段显示使用的索引名,type字段为ref/range表示有效索引扫描;若为ALL则是全表扫描。额外检查Extra字段:Using index、Using filesort
点赞 评论 收藏
分享
昨天 12:15
门头沟学院 Java
1、常见的方案有数据库自增ID、UUID、Redis生成和雪花算法。实际分布式场景下,雪花算法更常用,它将ID分为时间戳、机器ID和序列号三部分,性能高且趋势递增。但要注意时钟回拨问题,可通过记录上次生成时间戳或使用扩展版算法解决。2、雪花算法的ID在时间戳维度是递增的,但同一毫秒多机器生成的ID可能乱序。如需严格单调递增,可用数据库号段模式:服务启动时申请一个ID范围,内存分配用完后再次申请,这样单服务内ID严格递增。3、redo log是InnoDB的物理日志,崩溃恢复时重放提交的事务;undo log记录数据修改前的状态,用于回滚和MVCC读;binlog是MySQL Server层的逻辑日志,用于主从同步和数据备份。4、主库将变更写入binlog,从库通过IO线程拉取binlog到relay log,再由SQL线程重放SQL实现同步。5、优化索引时要减少回表和利用覆盖索引。索引失效常见于:违反最左前缀、对索引列计算、类型转换、LIKE左模糊匹配、OR连接非索引列等情况。6、InnoDB索引用B+树实现,联合索引按字段从左到右排序。如果跳过左侧字段,因为b的值在全局无序,无法利用索引快速定位,导致失效。7、当元素少且小时,用压缩列表节省内存;当元素多或大时,自动转为 "跳跃表+字典" 组合。跳跃表负责按分值排序,支持高效范围查询;字典负责成员到分值的映射,实现O(1)快速查分数。这种设计平衡了内存与性能。8、跳表插入节点时,从最高层向右向下逐层搜索并记录小于目标的分值位置(update[]);随后随机生成新节点层高,创建节点并按层将其插入:每层链接到对应update[]节点之后,并指向其原后继;最后更新跳表的最大层高和节点总数,实现高效定位与平衡插入。9、Redis有6种淘汰策略,常用的是allkeys-lru和allkeys-lfu。LRU淘汰最近最少访问的,LFU淘汰访问频率最低的。LFU更适合长期热点场景,而LRU对突发流量更敏感。10、Redis用惰性删除+定期删除组合:访问key时检查过期,同时后台定期抽样清理过期key。当内存不足时,再根据淘汰策略主动删除数据。11、TCP通过滑动窗口实现流量控制:接收方在ACK包中携带窗口大小。发送方根据这个窗口动态调整发送数据量,避免接收方缓冲区溢出。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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