百度AIGC后端

百度AIGC后端
最新回答
虚伪无情

2021-03-12 10:44:51

百度AIGC后端实习一面主要围绕技术基础、项目经验、数据库、缓存、并发、JVM、限流及开发框架等方面展开,具体内容如下:

  • 自我介绍

    需清晰阐述个人教育背景、技术技能、项目经历及与岗位相关的优势,展示对AIGC后端开发的热情与适配性。

  • 权限管理项目

    需介绍项目中权限管理的设计思路,如基于RBAC(角色访问控制)模型实现权限分配,通过数据库存储角色-权限关系,结合中间件(如Spring Security)实现动态权限校验,并说明如何解决权限粒度控制、权限继承等具体问题。

  • Redis使用原因及性能优势

    使用原因:Redis作为内存数据库,支持高并发读写,适合缓存热点数据、会话管理等场景;其丰富的数据结构(如Hash、Sorted Set)可灵活应对复杂业务需求。

    性能快的原因:数据存储在内存中,减少磁盘I/O;单线程模型避免线程切换开销;基于事件驱动的非阻塞I/O模型(如epoll)提升并发处理能力。

  • MySQL索引机制

    索引通过B+树结构组织数据,加速查询;主键索引(聚簇索引)直接存储数据行,非主键索引(二级索引)存储主键值,需回表查询;覆盖索引可避免回表,提升查询效率。

  • 索引失效场景

    违反最左前缀原则(如联合索引未从左列开始查询);

    在索引列上使用函数或运算(如WHERE YEAR(date) = 2023);

    使用NOT、!=、OR等条件(除非OR条件均使用索引);

    索引列参与范围查询后,后续列无法使用索引(如WHERE a > 1 AND b = 2,b索引失效);

    数据分布不均(如性别字段仅两种值,索引选择性低)。

  • MySQL日志类型

    Redo Log:记录物理日志(如页修改),用于崩溃恢复,保证事务持久性;

    Undo Log:记录逻辑日志(如SQL逆操作),用于事务回滚和MVCC(多版本并发控制)。

  • 并发场景经验

    需说明参与过的并发项目,如高并发接口设计、分布式锁实现(如Redis分布式锁)、线程安全控制(如同步锁、CAS操作)等。

  • JVM模型

    需描述JVM内存结构(堆、栈、方法区等)、类加载机制、垃圾回收算法(如标记-清除、复制、标记-整理)及GC调优经验。

  • Java版本

    需明确使用的Java版本(如Java 8/11/17),并说明选择原因(如LTS版本稳定性、新特性支持)。

  • MyBatis返回主键ID配置

    MyBatis配置:在insert标签中设置useGeneratedKeys="true"和keyProperty="id",数据库需支持自增主键(如MySQL的AUTO_INCREMENT)。

    与MyBatis-Plus(MP)区别:MP通过@TableId(type = IdType.AUTO)注解简化配置,且提供更丰富的ID生成策略(如雪花算法)。

  • AOP与IOC介绍

    AOP(面向切面编程):通过动态代理实现横切关注点(如日志、事务)的模块化,减少代码重复。

    IOC(控制反转):由容器管理对象生命周期及依赖关系,通过依赖注入(DI)降低组件耦合度。

  • Redis缓存问题及解决方案

    缓存击穿:热点Key过期时大量请求直达数据库,可通过互斥锁或逻辑过期解决;

    缓存穿透:查询不存在的Key导致请求穿透到数据库,可通过布隆过滤器或缓存空值拦截;

    缓存雪崩:大量Key同时过期导致数据库压力激增,可通过随机过期时间或分级缓存缓解。

  • 缓存穿透其他解决方案

    除缓存无效Key外,还可通过接口层校验参数合法性(如ID范围限制),或使用默认值缓存(如查询不存在的商品时返回默认商品信息)。

  • 限流解决方案及算法

    解决方案

    计数器限流(如Nginx限流模块);

    漏桶算法(固定速率处理请求);

    令牌桶算法(允许突发流量,如Guava RateLimiter);

    分布式限流(如Redis+Lua实现全局限流)。

    常用算法

    固定窗口算法;

    滑动窗口算法;

    令牌桶算法;

    漏桶算法。

  • GC算法

    标记-清除:标记无用对象后直接清除,产生内存碎片;

    复制算法:将存活对象复制到另一块内存,适合新生代(如Survivor区);

    标记-整理:标记后压缩内存,解决碎片问题,适合老年代;

    分代收集:结合不同算法处理新生代和老年代(如HotSpot的Serial/Parallel/CMS/G1)。

  • Java线程池核心参数

    corePoolSize:核心线程数,长期存活;

    maximumPoolSize:最大线程数,任务队列满时创建;

    keepAliveTime:非核心线程空闲存活时间;

    unit:时间单位;

    workQueue:任务队列(如LinkedBlockingQueue);

    threadFactory:线程工厂;

    handler:拒绝策略(如AbortPolicy、CallerRunsPolicy)。