面试真题

后端 · 中等 · 阿里巴巴

如何手写一个简单的 RPC 框架?

中等 后端 🎤 阿里巴巴
参考答案
核心要点:1.定义公共服务接口与实现类;2.服务端注册并监听端口,处理请求;3.客户端通过动态代理透明调用;4.约定序列化与通信协议。原理:RPC基于网络通信和序列化将本地调用转为远程调用。实现思路:服务端提供接口实现,启动ServerSocket或使用Netty,维护接口名到实现对象的映射;接收到客户端请求后,反序列化得到方法名和参数,反射调用方法并回写结果。客户端使用JDK动态代理生成接口代理对象,在InvocationHandler中建立Socket连接,将方法名、参数类型、参数值封装为请求对象序列化发送,再读取响应反序列化返回。序列化可选JSON或Java原生,协议可简单用长度+JSON。示例客户端代理:UserService proxy = (UserService) Proxy.newProxyInstance(classLoader, new Class[]{UserService.class}, (p, method, args) -> { Socket socket = new Socket(host, port); ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); oos.writeObject(new RpcRequest(method.getName(), method.getParameterTypes(), args)); ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); return ois.readObject(); }); 以此完成最小RPC。
题目整理自公开面经,答案由校招宝自研生成,仅供参考