偏测试技术面试,高频面试题分享

devtools/2024/9/24 5:18:35/

一.介绍下你们公司产品的后端模块?

以电商微服务架构示例:

  1. 用户服务 (User Service):
    • 负责用户注册、登录、个人信息管理等功能。
    • 存储用户数据,如用户名、密码、个人资料等。
  2. 商品服务 (Product Service):
    • 管理商品信息,包括商品的增删改查、库存管理等。
    • 负责处理商品分类、推荐、搜索等功能。
  3. 订单服务 (Order Service):
    • 处理订单的创建、支付、取消、物流跟踪等流程。
    • 管理订单状态、历史订单记录等。
  4. 支付服务 (Payment Service):
    • 处理支付过程,与第三方支付平台接口对接。
    • 管理支付状态、退款等相关逻辑。
  5. 购物车服务 (Cart Service):
    • 管理用户的购物车信息,加入商品、删除商品、结算等操作。
  6. 评论与评分服务 (Review and Rating Service):
    • 用户可以对商品进行评价及评分,提供评论功能。
  7. 推荐服务 (Recommendation Service):
    • 基于用户行为和偏好向用户推荐商品,增加个性化体验。
  8. 搜索服务 (Search Service):
    • 提供商品搜索功能,支持关键词搜索、筛选、排序等。
  9. 权限与安全服务 (Security Service):
    • 负责用户权限管理、安全认证、访问控制等。
  10. 日志与监控服务 (Logging and Monitoring Service):
    • 收集微服务的日志信息、监控服务运行状态,确保系统稳定性和性能。

微服务架构特点和优势:

  • 独立部署与扩展: 每个微服务可以独立部署和扩展,便于管理和维护。
  • 松耦合性: 不同微服务间通过API相互通信,降低了耦合度,提高了灵活性。
  • 技术栈多样性: 不同微服务可以使用不同的技术栈,根据需求选择最适合的技术。
  • 容错和隔离性: 单个微服务出现故障不会影响整个系统,具有更好的容错性和隔离性。

二.基于RPC有哪些常见框架

  1. gRPC:
    • gRPC 是由Google开发的高性能、跨语言的开源RPC框架,基于HTTP/2协议和Protocol Buffers。
    • 支持多种语言(如Java、C++、Python等),提供强大的编解码和接口定义功能。
  2. Apache Dubbo:
    • Dubbo是一款高性能的Java RPC框架,由阿里巴巴开源,支持丰富的特性如负载均衡、服务治理、动态扩展等。
    • 擅长处理大规模分布式系统中的服务调用和管理。
  3. Apache Thrift:
    • Thrift是由Facebook开发并开源的跨语言的RPC框架,支持多种语言。
    • 可以生成多种语言的客户端和服务端代码,并提供了序列化协议的支持。
  4. Spring Cloud:
    • Spring Cloud为构建分布式系统提供了多个项目,其中包括Spring Cloud Netflix、Spring Cloud Consul等,用于服务注册与发现、负载均衡、断路器等功能。
    • Spring Cloud可以与RESTful服务、Dubbo等整合,提供灵活的微服务架构支持。
  5. Thrift:
    • Apache Thrift是一个跨语言的RPC框架,支持多种常见语言。
    • 可生成不同语言对应的接口定义和客户端/服务端代码,使跨语言调用变得更加简便

三.Java垃圾回收过程

Java的垃圾回收过程一般包括以下步骤:

1. 标记阶段 (Marking Phase):

  • 垃圾回收器首先从根对象(如栈、静态变量等)出发,标记所有能够被访问到的对象为活动对象。
  • 所有未标记的对象将被标记为待回收对象。

2. 清除阶段 (Sweeping Phase):

  • 在清除阶段,不再使用的对象会被删除,释放内存空间。
  • 未被标记的对象将被清除,这些未被标记的对象被认定为垃圾。

3. 压缩阶段 (Compacting Phase - Optional):

  • 在一些垃圾回收算法中,压缩阶段将执行内存碎片整理,将存活的对象向内存的一侧移动,以便给新对象分配更连续的内存空间。

四.写个内存泄漏的demo

import java.util.ArrayList;

import java.util.List;

public class MemoryLeakDemo {

    private static List<Integer> list = new ArrayList<>();

    public void addToMemoryLeakList(int number) {

        list.add(number);

    }

    public static void main(String[] args) {

        MemoryLeakDemo demo = new MemoryLeakDemo();

        for (int i = 0; i < 1000000; i++) {

            demo.addToMemoryLeakList(i);

        }

        // 假设这里应该清空list,但是忘记清空导致内存泄漏

        // list.clear();

        System.out.println("Memory leak demo done.");

    }

}

五.什么情况下索引失效

  1. 未使用索引字段进行查询: 当查询条件不包括任何索引字段,数据库优化器可能会选择不使用索引而进行全表扫描,导致索引失效。
  2. 函数操作符导致索引失效: 在查询条件中使用函数、操作符或者类型转换可能导致索引无法被利用。比如在 WHERE 子句中使用 LIKE '%value%' 或者对字段进行 FUNCTION() 操作。
  3. 数据类型不匹配: 如果在条件中对字段进行了数据类型的转换,比如将数字字段转换为字符串进行比较,可能会导致索引失效。
  4. 不满足索引的最左前缀规则: 复合索引中,如果查询条件未按照索引的从左到右的顺序使用字段,索引可能不会被有效利用。
  5. 使用 OR 条件: 当 OR 条件连接的查询条件中只有部分条件使用了索引,可能导致索引失效。
  6. 查询条件使用 IS NULL 或 <> NULL: 在查询中使用 IS NULL 或 <> NULL 的条件可能导致索引失效。
  7. 表数据量较小: 当表中的数据量较小时,数据库优化器可能会选择全表扫描而不使用索引。
  8. 数据分布不均匀: 如果数据分布不均匀,一些值的重复率较高,可能导致数据库选择不使用索引。
  9. 频繁的数据更新: 对于频繁更新的字段,在更新时可能导致索引失效,需要谨慎设计索引策略。

六.什么是单例模式

单例模式是一种创建型设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。在单例模式中,类的实例化过程被限制在一个对象,并提供一个全局的访问点来获取该实例。这种模式通常用于控制对唯一实例的访问,如全局配置、日志记录器、数据库连接等场景。

七.Python中装饰器的作用

在Python中,装饰器是一种函数,它可以接受一个函数作为参数,并返回一个新的函数。装饰器用于给函数动态地添加额外的功能,而不修改函数本身的代码。装饰器在Python中用于很多场景,比如日志记录、性能分析、权限检查等。


http://www.ppmy.cn/devtools/23727.html

相关文章

Android13锁屏或灭屏状态下,快速按两次音量下键实现打开闪光灯功能

实现思路&#xff1a; 1、发送广播 WindowManagerService循环读取下面按键消息并分发给窗口&#xff0c;在消息分发前会在PhoneWindowManager.interceptKeyBeforeQueueing方法中进行消息的过滤。因此该实现方式为在消息分发前的interceptKeyBeforeQueueing方法中监听当前按键为…

全自动开箱机:从原理到应用,全面解析自动化装箱技术

随着科技的飞速发展&#xff0c;自动化技术在各行各业的应用越来越广泛。其中&#xff0c;全自动开箱机作为现代物流领域的重要设备&#xff0c;以其高效、精准的特点&#xff0c;受到了广大企业的青睐。与星派全面解析全自动开箱机的原理、应用领域以及它所带来的变革。 一、…

数据结构 - 栈

目录 一. 栈的概念 二. 栈的结构 三. 栈的实现 1. 实现栈的两种方式 链表实现栈 顺序表实现栈 选择依据 栈的创建 栈的初始化 栈的销毁 入栈 出栈 获取栈顶元素 判断栈是否为空 获取栈中有效数据的个数 一. 栈的概念 栈&#xff08;Stack&#xff09;是一种重要…

vue2中的计算属性

1.什么是计算属性&#xff1f; 在 Vue.js 中&#xff0c;计算属性是一种依赖于 Vue 实例数据的动态属性。计算属性的值是根据它们的依赖动态计算而来的&#xff0c;只要依赖的响应式数据发生改变&#xff0c;计算属性就会重新计算其值。计算属性的优势在于可以将复杂的逻辑封装…

Flutter应用下拉菜单设计DropdownButtonFormField控件介绍

文章目录 DropdownButtonFormField介绍使用方法重点代码说明属性解释 注意事项 DropdownButtonFormField介绍 Flutter 中的 DropdownButtonFormField 是一个用于在表单中选择下拉菜单的控件。它是 DropdownButton 和 TextFormField 的组合&#xff0c;允许用户从一组选项中选择…

Docker 容器创建与使用问题汇总

目录 常用命令 Docker 18.09 Error response from daemon: Container is not running unknown flag: --gpus CUDA error: "cudaSetDevice(device_)" Docker 19.03 容器创建时指定GPU&#xff0c;执行 nvidia-smi 命令只显示指定的显卡 容器创建时指定GPU&…

如何解决IntelliJ IDEA 2024打开项目时频繁闪退问题

&#x1f42f; 如何解决IntelliJ IDEA 2024打开项目时频繁闪退问题 &#x1f43e; 文章目录 &#x1f42f; 如何解决IntelliJ IDEA 2024打开项目时频繁闪退问题 &#x1f43e;摘要引言正文&#x1f4d8; 识别问题&#x1f4d9; 内存配置调整步骤1: 定位vmoptions文件步骤2: 修改…

请编写函数fun,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依 次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…