2026-10-19 10:22:44
滴滴日常实习一面整体以基础技术知识考察为主,涉及编程语言特性、设计模式、并发原理、框架机制、项目实践与算法,面试时长70分钟,包含反问环节,部分问题难度较低但需注意表达逻辑与项目细节。 以下是具体分析:
一、编程语言基础项目运用:如对象中包含引用类型字段(如列表),浅拷贝仅复制引用,修改会影响原对象;深拷贝需递归复制所有引用对象,确保独立性。例如,订单系统中订单对象包含商品列表,需深拷贝避免数据污染。
实现方式:浅拷贝可通过Object.clone()(需实现Cloneable接口)或构造函数;深拷贝可用序列化(如JSON.parse(JSON.stringify(obj)))或手动递归复制。
懒汉式:延迟初始化,线程不安全(需加锁)或双重检查锁优化。
饿汉式:类加载时初始化,线程安全但可能浪费资源。
有序性:禁止指令重排序(通过内存屏障)。
可见性:修改后立即刷新主内存,其他线程可见。
原子性:不能保证(如i++非原子操作),需结合synchronized或Atomic类。
JDK代理:基于接口,通过Proxy.newProxyInstance()生成代理类。
CGLIB:基于继承,通过字节码生成子类代理(Spring默认对无接口类使用)。
解决方案:
互斥锁:请求获取锁后更新缓存。
逻辑过期:缓存中存过期时间,异步更新。
永不过期:实际由后台任务刷新。
原理:通过多个哈希函数将元素映射到位数组,判断元素是否可能存在(可能误判,但不会漏判)。
减少误判:增加哈希函数数量或扩大位数组大小(需权衡内存与准确率)。
核心逻辑:将车次座位状态存储为区间(如站A-站B有票),查询时检查请求区间是否与已有区间无重叠。
100站优化:
存储:二进制位图(每位代表一站,区间通过位运算快速判断)或区间树结构。
效率:区间查询时间复杂度可优化至O(log n)(如二分查找),100站对现代数据库影响有限,但需考虑高并发场景下的锁竞争。
解法:快慢指针法。快指针每次走两步,慢指针走一步,相遇后,慢指针回到头节点,两指针同速前进,再次相遇点即为入口。
时间复杂度:O(n),最坏情况(入口在链表末尾)仍为O(n)。