腾讯AI后台开发27实习一面分享
《面试题目》
- 手撕代码:力扣原题最小路径和
- Java中接口和抽象类的区别
- 循环拼接字符串(几万次)时,String、StringBuilder、StringBuffer该如何选择?
- Java中如何实现线程安全?
- synchronized可以修饰变量吗?
- Java中哪些注解可以实现依赖注入?
- HashMap的扩容机制是怎样的?
- 什么情况下会进行扩容?
- Mybatis中如何防止SQL注入?
- 微服务的熔断和降级机制?
- 了解哪些限流方法?
- Kafka如何保持高流量和高可用?
- MySQL慢查询优化方法?
- 解析Excel时,如果中途报错如何实现断点续传或异常处理?
- 项目中大模型的接入方案与选型?
- 大模型的数据存储方案?
- 如何评估大模型的准确率?
《参考解析》
HashMap扩容机制: 默认初始容量16,加载因子0.75。当元素个数超过阈值(capacity*loadFactor)时触发扩容。JDK1.8后采用高低位拆分法,将旧数组中的数据重新分配到新数组,避免了头插法导致的链表环形死循环。
MyBatis防止SQL注入: 使用#{}占位符,底层使用PreparedStatement,会将SQL语句进行预编译,将变量作为参数传入而非直接拼接,有效防止了攻击者利用SQL语法进行注入。
MySQL慢查询优化: 首先通过explain分析执行计划,查看是否命中索引;检查SQL结构是否冗余;对慢查询字段建立联合索引;若表数据量巨大,考虑分库分表或使用Redis做缓存查询。
Kafka高可用与高流量: 通过分区(Partition)机制实现负载均衡和并行处理;通过副本(Replication)机制保证高可用,ISR(同步副本集)保证数据不丢失;配合ACK机制调整吞吐量与数据一致性的平衡。
synchronized修饰变量: 不可以。synchronized关键字只能修饰方法(实例方法或静态方法)或代码块,用来修饰对象或类锁,无法直接修饰变量(若需保证变量可见性与原子性,建议使用volatile关键字或原子类AtomicInteger等)。