面试时遇到的问题

文章讨论了服务间远程调用的RPC和HTTP协议,强调了HTTP2.0的性能改进。此外,提到了Java编程中的设计原则,如单一职责、开闭原则等,并对比了Redis缓存与自定义缓存的优势。最后,简要介绍了分布式和微服务的概念及其异同。
摘要由CSDN通过智能技术生成

在服务之间远程调用的方式有哪些?

1、RPC

        特点:自定义数据格式,速度快、效率高,早期的WebService和现在的dubbo框架是使用RPC的典型;

2、Http(网络传输协议)

        特点:规定了数据的传输格式,通用性强,现在热门的Rest风格就可以通过http来实现。

个人感觉:RPC更加透明,对用户更加方便,但要求服务双方都必须采用RPC;而http更加灵活,跨语言,跨平台。

http2.0与http1.1的区别是什么?

HTTP1.1 和 HTTP2.0 是两种不同的协议,主要区别体现在以下几个方面:

  1. 多路复用:HTTP1.1 在同一时间只能处理一个请求,而 HTTP2.0 支持多路复用,可以同时处理多个请求,提高了响应速度和效率。

  2. 头部压缩:HTTP2.0 对请求和响应头部进行压缩,减少了数据的传输量,提高了速度。

  3. 二进制传输:HTTP2.0 的数据传输采用二进制格式,提高了效率。

  4. 服务器推送:HTTP2.0 支持服务器主动向客户端推送数据,提高了数据交互的效率。

综上所述,HTTP2.0 相对于 HTTP1.1 在性能方面有很大的提升,可以更好地满足现代网络应用的需求。

java程序编程设计原则:(简述)单一职责原则、开闭原则、里式替换原则、接口隔离原则、依赖倒置原则、迪米特法则

        1、单一职责原则(一个类或方法只包含一个职责)

        2、开闭原则(扩展开放,修改关闭;用抽象构建框架,用实现展现细节)

        3、里氏替换原则 (继承尽量不要重写父类的方法,或者通过聚合、组合、依赖来解决问题)

        4、接口隔离原则(将不同依赖的接口进行隔离,只依赖自己调用的接口)

        5、依赖倒置原则(高层模块不依赖底层模块,而是依赖抽象,即面向接口编程)

        6、迪米特法则(一个对象应该对其他对象保持最少的了解,类与类关系越密切,耦合度越大)

        7、合成复用法则(尽量使用合成/聚合的方式,不要使用继承)

 设计模式:

        创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式

        结构型模式:桥接模式、代理模式、组合模式、适配器模式、享元模式、装饰器模式、外观模式

        行为型模式:迭代模式、命令模式、责任链模式、备忘录模式、中介者模式、策略模式、模板方法模式、观察者模式、状态模式、访问者模式、解释器模式

设计模式详解

缓存和内存的区别:

  1. 功能:缓存和内存都用于存储数据,但它们的功能和作用有所不同。内存是计算机系统用于存储程序和数据的主要存储介质,用于临时存储正在执行的程序和数据。而缓存是一种高速存储器,用于暂时存储从较慢的存储层(如内存或磁盘)中读取的数据,以提供更快的访问速度。

  2. 容量:内存的容量通常比缓存大得多。现代计算机系统通常具有几个到几十个GB的内存,而缓存的容量通常只有几十KB到几十MB不等。

  3. 速度:缓存的访问速度比内存更快。缓存通常位于处理器内部或非常接近处理器,因此可以更快地响应处理器的读取请求。相比之下,内存的访问速度较慢,需要更多的时间来读取和写入数据。

  4. 层次结构:计算机系统通常采用多级缓存层次结构。L1(一级)缓存是最接近处理器的缓存,容量较小但速度非常快。L2(二级)和L3(三级)缓存通常容量较大但速度略慢,位于处理器和主内存之间。主内存是计算机系统中的主要存储介质,容量更大但速度相对较慢。

  5. 控制方式:缓存的存储和读取是由硬件控制的,而内存的管理由操作系统负责。缓存的读写操作通常由处理器的缓存控制单元(Cache Controller)处理,而内存的读写由操作系统内存管理机制进行管理。

总体而言,缓存是一种用于加速计算机系统性能的高速存储器,通过临时存储常用的数据和指令,减少处理器对较慢存储介质的访问次数。内存是计算机系统的主要存储介质,用于存储程序和数据。它们在容量、速度、层次结构和控制方式等方面存在区别,并在计算机系统中发挥不同的作用。

redis缓存和程序员自定义的缓存相比的优势:

  1. 高性能:Redis是一个专门设计用于缓存的高性能数据库。它使用内存作为数据存储介质,具有快速的读写速度和低延迟。相比之下,自定义的应用缓存可能受到应用程序性能和逻辑的限制,无法达到Redis的高性能水平。

  2. 分布式支持:Redis是一种分布式缓存系统,可以在多个服务器上部署多个Redis实例,并通过分片或复制来提高性能和可靠性。这使得Redis能够支持大规模的应用缓存需求。自定义的应用缓存通常限于单个应用程序的内存空间,无法提供分布式支持。

  3. 数据持久性:Redis缓存可以将缓存数据持久化到磁盘,以防止数据丢失。它提供了多种持久化选项,如快照(snapshot)和日志(append-only log)。自定义的应用缓存通常是临时存储,不具备数据持久性。

  4. 复杂数据结构和功能:Redis提供了丰富的数据结构和功能,如字符串、列表、集合、哈希、有序集合等,以及相关的操作和命令。这使得Redis可以应对更复杂的缓存需求,并提供更多的灵活性和功能性。自定义的应用缓存通常局限于简单的键值对存储。

  5. 社区支持和生态系统:Redis拥有庞大的用户社区和活跃的开发者社区,提供了广泛的文档、教程和示例代码。此外,Redis还有丰富的第三方工具和库,用于与其他技术栈的集成。自定义的应用缓存通常需要自行编写和维护,可能缺乏相应的支持和生态系统。

综上所述,Redis缓存相比由程序员自定义的应用缓存具有更高的性能、分布式支持、数据持久化、复杂数据结构和功能,以及强大的社区支持和生态系统。因此,对于大规模、高性能的缓存需求,使用Redis缓存通常是更好的选择。

程序员如何自定义缓存步骤:

  1. 定义一个数据结构或类,用于存储缓存数据。
  2. 在应用程序的内存中创建一个缓存数据的存储容器,例如使用哈希表、链表或自定义的数据结构。
  3. 实现缓存的基本操作,包括数据的插入、查询、更新和删除等。
  4. 根据需要设置缓存数据的过期时间,并实现缓存数据的过期策略。
  5. 在需要访问数据时,首先检查缓存中是否存在该数据。如果存在,则直接从缓存中获取数据;如果不存在,则从数据源(如数据库)中获取数据,并将数据存储到缓存中以供下次使用。
  6. 在数据更新或删除时,同时更新或删除缓存中对应的数据。
  7. 可以添加适当的错误处理和异常处理,以增加缓存的稳定性和可靠性。
  8. 可以根据需要进行性能优化,例如优化缓存数据结构、减少内存占用等。
  9. 监控缓存的命中率、缓存大小等指标,以便及时调整和优化。

需要注意的是,自己创建缓存需要考虑并解决并发访问、一致性、数据过期等问题,这些问题在使用成熟的缓存解决方案(如Redis)时已经得到了有效的处理。

什么是分布式?

        分布式是指将一个计算或数据处理任务分解为多个子任务,并将这些子任务分配给多台计算机或服务器进行并行处理的方式。主要应对大规模计算和处理的需求。

        特点:

                1、并行处理

                2、可扩展性

                3、容错性

                4、消息传递

                5、数据一致性

什么是微服务?

        微服务是一种软件架构风格,它将一个大型的应用程序拆分为一组小型、自治的服务,这些服务围绕着特定的业务功能进行构建和部署。每个微服务都可以独立开发、部署和扩展,通过轻量级的通信机制进行相互通信和协作。

        特点:

                1、单一职责原则

                2、独立部署和扩展

                3、松耦合

                4、分布式治理

                5、自治性(由独立的团队开发或维护,通过明确的接口进行通信,减少团队依赖和协调成本)

        优点:灵活性和敏捷性、可扩展性、可维护性、技术多样性

分布式和微服务之间的联系和区别:

        联系:分布式系统可用于实现微服务架构、都是应对大规模应用软件的复杂性和可扩展性问题。

        区别:分布式更加的广泛,使用的技术更加的多样化;而微服务则是一种特定的架构方式,其拆分方式、通信和维护的方式、技术栈和工具都有了明确的定义或者要求;分布式系统更加广泛,可用于各种场景,微服务则更专注于以服务为中心的架构风格。

        

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值