捡漏暑期面试

  1. dubbo序列化方式(fastjson2只是格式) 相比JAVA自带的序列化方法的优点
  2. JAVA自带的序列化方法 咋做的

Java 自带的序列化方法原理

Java的序列化是通过实现Serializable接口,使用ObjectInputStream和ObjectOutputStream来进行对象的序列化和反序列化。这涉及到将对象转换为字节流,以便存储或传输,然后再从字节流恢复对象。Java序列化的一个主要缺点是性能较低,生成的字节流较大,而且在跨语言支持方面有限。

Dubbo 序列化方式的优点

Dubbo 支持多种序列化协议(如 HessianKryoProtobuf),相比 Java 原生序列化,核心优势如下:

1. 性能优势

2. 支持除JAVA外的多种语言

3. 扩展性与灵活性

  • 动态选择协议:Dubbo 允许为不同服务配置不同序列化方式(如核心服务用 Protobuf,边缘服务用 JSON)。
  • 兼容性控制:Protobuf 通过字段编号和 optional 关键字支持向前/向后兼容。
  • 定制化:可自定义序列化逻辑(如 Kryo 注册类白名单提升性能)。

典型序列化协议对比

Java 原生序列化示例

1. 实现 Serializable 接口

2. 生成一个序列号 serialVersionUID

这个序列号不是必需的,但还是建议你生成。serialVersionUID 的字面含义是序列化的版本号,只有序列化和反序列化的 serialVersionUID 都相同的情况下,才能够成功地反序列化

3. 重写 writeObject()/readObject() 方法

根据需求决定是否要重写 writeObject()/readObject() 方法,实现自定义序列化

4.调用 java.io.ObjectOutputStream()方法

最后一步,调用 java.io.ObjectOutputStream 的 writeObject()/readObject() 进行序列化与反序列化。

// 序列化
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("data.bin"))) {
    oos.writeObject(new User("Alice", 25));  // User 需实现 Serializable
}

// 反序列化
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("data.bin"))) {
    User user = (User) ois.readObject();
}

总结

  • Java 原生序列化:简单易用但性能差、体积大,适合本地调试或简单场景。
  • Dubbo 序列化:通过高性能协议(如 Kryo、Protobuf)解决 Java 原生缺陷,适合分布式系统的高并发、低延迟场景。

  1. 实现切面除了AOP还有啥方法

二、非AOP框架的其他方法

  1. 装饰器模式:通过组合方式包装目标对象,手动添加增强逻辑。例如,为业务类创建装饰类,在调用前后添加日志或事务。适用场景:简单增强,但需为每个目标类编写装饰类。
  2. 责任链模式:将多个处理逻辑串联成链,每个节点决定是否执行后续操作。例如,Web框架中的过滤器链。优点:灵活扩展,支持动态添加处理逻辑。缺点:需显式调用链式处理,侵入性较强。
  3. 中间件或框架拦截机制某些框架内置拦截功能,
  4. 如:Servlet Filter:拦截HTTP请求,实现全局日志或鉴权。
  5. Spring Interceptor:在Controller方法前后添加逻辑

  1. 库存预扣减幂等性判断key是什么,说成用户ID_UUID 面试官在引导应该做成商品粒度的,否则会出现同时下单两个商品,一个成功一个重试,面试结束核对确实key是商品ID_UUID
  2. Clickhouse相比Mysql 好在哪里?我结合实习讲了查询上,提问Clickhouse存储优势 说他列式存储原理是很重要的
  3. 限流 熔断咋做的
  4. 实习有难度的点---redis实现业务幂等
  5. redisson分布式锁
  6. JVM内存区域
  7. JVM 堆和栈在内存分配上的区别。

缓存雪崩/击穿 是什么 如何解决

JAVA引用类型和基础数据类型 值传递

垃圾回收:自动释放不再被程序引用的对象的所占用的内存

CMS和G1区别:CMS是分代回收,G1是分区划分Region回收, CMS只回收老年代 G1回收老年代和新生代;CMS是使用“标记-清除”算法,容易产生内存碎片,G1是“标记-整理”算法,进行了空间整合,没有碎片。

> G1收集器的内存结构完全区别去CMS,弱化了CMS原有的分代模型(分代可以是不连续的空间),将堆内存划分成一个个Region(1MB~32MB, 默认2048个分区),这么做的目的是在进行收集时不必在全堆范围内进行。它主要特点在于达到可控的停顿时间,用户可以指定收集操作在多长时间内完成,即G1提供了接近实时的收集特性。G1步骤:

可达性分析法是如何解决引用计数法存在的A引用B B又引用A 循环引用的问题?(因为自己没懂GCRoots 可达性分析法, 面试管就:如果让你设计会如何设计(我思考扯了 有向无环图+连通分量)

可达性分析:GCRoots通常包括比如活动线程的栈帧中的局部变量、静态变量、JNI引用等。这些都是程序运行中肯定在使用的对象,作为可达性分析的起点。 GCRoots一定是正在被引用的,A引用B B又引用A

  • 由于A和B不在任何GCRoots的引用链上,遍历时不会被标记为存活。无论它们内部如何循环引用,最终都会被判定为不可达对象,从而被回收。

被质疑为啥在DobboFilter里拦截的东西放到ThreadLocal中,(方便同一线程的其他服务获取/RPC.Context也可以隐式传递)

ThreadLocal为啥不设置成强引用 强引用更不会被回收

为啥不去guoyangqi:钱少+情商低感觉无法晋升+还是追求技术从中获取成就感 我想赚钱支撑小资低奢生活 出国游(这又有啥不好启齿的)

智力题 大文件小内存排序 分治归并(最小堆 多路归并 bitmap)

静态代理

静态代理,又叫编译时代理,就是在编译的时候,已经存在代理类,运行时直接调用的方式。说的通俗一点,就是自己手动写代码实现代理类的方式。

AOP缺点,为啥不都用AOP 还要使用new()创建对象:

a. 性能:因反射或字节码生成,有一定性能损耗。而使用new()创建对象 直接内存分配和方法调用,性能更高。依赖条件:AOP需目标类实现接口(JDK Proxy)或非final类(CGLIB)。 new()创建对象 无特殊要求,直接调用构造函数即可。

b. private方法无法被AOP拦截

* 一条update会发生什么

* undo log 和redo log区别

* Mysql索引 主键索引 聚集索引和二级索引

* 分片,原来是节点数是32,现在要变成64,怎么办?我说了一致性哈希,追问现有的32个节点上的数据怎么办,我说 重新路由

* Redis高可用

全部评论
佬,图片资料是自己总结的还是网上的呀
点赞 回复 分享
发布于 06-29 21:21 安徽

相关推荐

她突然凑近问我:“你是做游戏开发的呀?具体负责哪块呀?”我背后一凉,嘴角抽搐:“就…就是大家都做的那种…”女生眼睛一下亮起来:“你是做引擎的吧?物理模拟、渲染管线优化、ECS架构那种?”我声音发虚:“不是…”她眼神更亮:“那肯定是做网络同步的咯?状态同步、帧同步、延迟补偿、反作弊,听起来就很硬核!”我垂着头:“也…不是。”我死死盯着手机屏幕,试图用意念打开deepseek给自己勇气。“难道是做AI的?行为树、寻路算法、机器学习,听着就像技术大佬在做的事情!”我脚趾动了动:“不是…”她沉默两秒,忽然问:“那你做的是策划?数值平衡、关卡设计、剧情脚本?”我像犯错的实习生一样摇头:“也不是…”女生皱了眉,眼里开始有了不解:“那…是做美术的?角色原画、场景建模、特效制作?”我低声说:“没那个天赋…”她愣了一下,试探地问:“那你…该不会是在做UI的吧?调按钮、对锚点?”我想了想那堆界面适配和美术反馈,艰难摇头:“也不是...”空气瞬间凝固。她冷静问道:“那你到底是做什么的?”我眼眶泛红,终于崩溃,带着哭腔喊出:“我…我就是在做测试的!点点点、跑跑图、复现崩溃、写缺陷报告、被策划怼‘这不是bug是设定’、被程序反问‘你环境有问题吧’!”咖啡厅瞬间死寂,只剩下隔壁桌打王者的小学生发出一声“切”我哭着拽住她的衣角:“求你别走!我们测试崽也很重要!”人群中爆发出忍不住的笑声,我却喊得更用力:“版本一天三更,策划案永远迟到,我们还要半夜被主程叫醒、验证热修、应付老板突然的‘这个活动给我测100遍’!我们是游戏质量的最后防线,是开发流程的终极背锅侠!”远处传来主程沉重的脚步声和一声无奈的叹息:“唉,又是一个测试崽…”“我知道!在你们眼里我们就是点点点的!是,我们不用写代码,是,我们不用画图,是,我们的工作看起来谁都能做!”“但是!但是啊!”我涕泪横流,死死拽住她的包包带子:“当你们在炫耀百万并发时,是我们顶着压力测出来的!当你们讨论开放世界有多自由时,是我们跑断腿找出穿模和空气墙的!”女生试图抽走她的联名杯,我却抱得更紧:“没有我们测试崽,再牛逼的游戏都可能是个Bug集合体!玩法再厉害,玩家可能连新手教程都卡关过不去!”咖啡馆角落里传来店长擦杯子的声音和一声叹息:“这个月第五个崩溃的测试崽了…”
点赞 评论 收藏
分享
评论
2
12
分享

创作者周榜

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