最近国产大模型 DeepSeek V3 版本发布,在全球火了一把。
DeepSeek 是国内人工智能公司深度求索(DeepSeek)自主研发的大语言模型。它最新的 V3 版本各项数据已经和国外 AI 巨头不相上下。
而且这个 MoE 模型总参数量高达 671B,激活参数量 37B,使用了 14.8T token 进行训练,消耗了 278.8 万 H800 卡时,训练成本仅为 560 万美元!
随之火起来的是 DeepSeek 的“天才少女”罗福莉。她之前是 DeepSeek 的深度学习研究员,是 DeepSeek-V2 关键开发者之一。
在职业生涯中,罗福莉曾在阿里巴巴达摩院担任机器智能实验室的研究员,主导开发了多语言预训练模型VECO,该模型被纳入阿里达摩院的深度语言模型体系AliceMind。
2022年,她离开阿里,加入DeepSeek,担任深度学习研究员,参与了DeepSeek-V2的开发直到现在的 V3 。
DeepSeek V3 爆火的同时,也传出她加入小米大模型实验室的消息。
早在 2019 年,罗福莉就曾经因为在自然语言处理顶级会议 ACL 2019 上发表 8 篇论文引起热议(8篇什么含金量?)。
罗福莉亲自在知乎回复了这个问题。只能说大佬不愧是大佬。
据说这次是小米创始人雷军亲自出手挖人,开出了千万年薪。这个年薪的真假,鸭鸭不好说,但百度百科上罗福莉的个人信息已经更新为小米 AI 实验室相关负责人。
最近 DeepSeek 的招聘也火起来,有兴趣的同学可以试着投一投。
……
回归今天的面试题:
什么是 Java 中的动态代理?
回答重点
Java 中的动态代理是一种在运行时创建代理对象的机制。动态代理允许程序在运行时决定代理对象的行为,而不需要在编译时确定。它通过代理模式为对象提供了一种机制,使得可以在不修改目标对象的情况下对其行为进行增强或调整。
代理可以看作是调用目标的一个包装,通常用来在调用真实的目标之前进行一些逻辑处理,消除一些重复的代码。
静态代理指的是我们预先编码好一个代理类,而动态代理指的是运行时生成代理类。
扩展知识
动态代理主要用途
简化代码:通过代理模式,可以减少重复代码,尤其是在横切关注点(如日志记录、事务管理、权限控制等)方面。 增强灵活性:动态代理使得代码更具灵活性和可扩展性,因为代理对象是在运行时生成的,可以动态地改变行为。 实现 AOP:动态代理是实现面向切面编程(AOP, Aspect-Oriented Programming)的基础,可以在方法调用前后插入额外的逻辑。
Java 动态代理与 CGLIB 代理:
Java 动态代理:只能对接口进行代理,不支持对类进行代理。 CGLIB 代理:通过字节码技术动态生成目标类的子类来实现代理,支持对类(非接口)进行代理。
JDK 示例代码:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
// 目标接口
interface MyService {
void doSomething();
}
// 目标对象的实现
class MyServiceImpl implements MyService {
@Override
public void doSomething() {
System.out.println("Doing something...");
}
}
// 动态代理处理器
class MyInvocationHandler implements InvocationHandler {
private final Object target;
public MyInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Before method call");
Object result = method.invoke(target, args);
System.out.println("After method call");
return result;
}
}
// 使用动态代理
public class Main {
public static void main(String[] args) {
MyService target = new MyServiceImpl();
MyService proxy = (MyService) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new MyInvocationHandler(target)
);
proxy.doSomething();
}
}
CGLIB 示例代码:
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
// 目标类
class MyService {
public void doSomething() {
System.out.println("Doing something...");
}
}
// CGLIB 代理处理器
class MyInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("Before method call");
Object result = proxy.invokeSuper(obj, args);
System.out.println("After method call");
return result;
}
}
// 使用 CGLIB 动态代理
public class Main {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(MyService.class);
enhancer.setCallback(new MyInterceptor());
MyService proxy = (MyService) enhancer.create();
proxy.doSomething();
}
}
最后
再来推荐下我们的面试刷题网站和小程序:面试鸭!
我们精选了近两年的高频面试真题,已经有 9000 多道面试题目啦,由大厂资深面试官手写答案,押题命中率超高!
不仅有传统八股文,场景题、项目题、系统设计题等等应有尽有,还在不断更新中!
现在邀请好友注册并成为会员,还可获得最高 50% 的分佣🧧!详情见面试鸭拉新邀请有赏规则(网页版面试鸭点击头像查看)
网页端网址:mianshiya.com
欢迎关注面试鸭,每日获取经典面试题和优质题解,我们下期见~
往期推荐
爆料!京东提前发放年终奖,是真有 20 薪啊!
腾讯阿里员工 39 岁被裁员后说自己财富自由,不上班了,所以得攒了多少钱才能躺平?
真·你码没了!
偷偷汇总了25届华为薪资情况!
互联网大厂春节假期盘点,怎么都开始卷起来了?
一个哥们在北京互联网大厂上班,压力大想躺平,我问他有躺的资格吗?然后他就把他的公积金截图发给我,这公积金水平在北京属于什么段位?