面试题集02

面试题集02


  1. RESTful调用和RPC调用有什么区别?如果让你设计一个RPC服务治理框架,你会设计那些模块?是否了解过Service Mesh,如果了解Service Mesh是用来解决什么问题的?

    RESTful是表达性状态传递, 是一种软件架构风格.REST通过Http协议定义的动词方法(GET-查,PUT-改,DELETE-删,POST-增)来表示对资源的操作,用唯一的URL地址作为资源的标识符, 基于Http协议,但是Http调用效率低.RESTful也是RPC,只是消息的组织方式和协议不同
    RPC是远程过程调用, 它的意图是像调用本地方法一样调用远程服务,RPC调用基于TCP/UDP连接,使用XML-RPC或者JSON-RPC或者SOAP(基于XML数据的Http协议)等,这使得RPC调用效率更高, 减少网络开销,RPC是基于方法而不是资源的,在本地使用代理,通过序列化与反序列化,将服务当做本地方法来调用.

    设计一个RPC服务治理框架,分为两个部分,RPC部分有接口描述语言(描述接口的统一标识符),客户端,服务端,协议层(JSON-RPC),数据传输层(socket);服务治理部分有注册中心,服务监控,服务容灾,服务鉴权(用户认证)

    Service Mesh即服务网络, 是为了处理服务间通信,屏蔽分布式系统通信的复杂性,解决跨语言远程调用,实现语言无关, 对应用透明,组件可以单独升级而不必升级服务.

  2. 请描述避免多线程竞争时有哪些手段?

    多线程竞争是指,多线程同时访问一个资源,即所谓的线程安全问题
    解决多线程安全问题的方法: 不可变对象, 互斥锁, ThreadLocal对象, CAS

  3. 请简述HTTP的5个常用Method及其含义,以及5个常用的Status Code及其含义,HTTP和HTTPS的区别是什么,简述一下HTTPS的原理.

    POST: 增
    DELETE: 删
    PUT: 改
    GET: 查
    OPTIONS: 可用性检查

    100: 握手成功
    200: 请求处理成功
    300: 重定向
    400: 服务器无资源
    500: 服务器无法正常响应

    HTTP是一种超文本网络传输协议,一个HTTP协议数据包包含: 请求/响应行,请求/响应头,空行,请求/响应正文.
    HTTPS在HTTP的基础上增加了数据加密,在数据传输之前进行加密
    HTTPS=HTTP+SSL
    HTTPS协议先与服务器建立连接, 然后服务器发送公钥到客户端,客户端验证合法后,客户端根据公钥生成加密密钥,然后对数据进行加密,再将加密后数据发给服务器,服务器用私钥对其进行解密.

  4. JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?

    使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。