当前位置: 首页 > news >正文

【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法

工作经验一年以上程序员必问问题

面试题概述

  • 问题为在负责项目时遇到的棘手问题及解决方法,主要考察开发经验与技术水平,回答不佳会影响面试印象。
  • 提供四个回答方向,准备其中一个方向即可。
    在这里插入图片描述

1、设计模式应用方向

  • 以登录为例,未用设计模式时登录逻辑在一个业务类中,需求变更(如登录方式增减或更换)需频繁修改业务层代码。
  • 采用工厂设计模式和策略模式后,解决了频繁修改业务层代码的问题,具体实现可参考相关案例,其他设计模式介绍方式类似。

2、线上 bug 方向

  • 项目上线后可能出现测试环境未暴露的问题,如运行一段时间后 CPU 飙高、内存泄露、线程死锁等,线上调试困难。
  • 介绍时需按问题、解决过程、最终解决方案的逻辑进行,可参考 DVM 和多线程课程案例。

3、调优方向

  • 调优时最好给出指标数据,如接口调优前后的访问耗时。
  • 重点讲述调优中间过程,可涉及 SQL 优化(加索引)、添加缓存、采用集群或高可用方案等。

4、组件封装方向

  • 分布式锁和接口幂等可封装为小型工具或组件供多项目使用,支付和事务可封装为通用服务,但难度较高且需考虑高可用和通用性。
  • 有经验可详细讲述,无经验可参考网上文章,实在想不到可从其他三个方向入手。

总结强调

  • 此面试题高频出现,需提前准备,选择一个方向深入准备能体现技术水平。

具体问题

设计模式应用案例

在一个电商项目的用户登录功能开发中,最初的设计非常简单直接。登录逻辑全部集中在一个业务类 UserLoginService 中,代码如下:

public class UserLoginService {public boolean login(String username, String password) {// 直接在该方法中进行数据库查询验证if ("admin".equals(username) && "123456".equals(password)) {return true;}return false;}
}

随着业务发展,需要支持多种登录方式,如手机号验证码登录、第三方平台登录(微信、支付宝)等。每次增加新的登录方式,都需要在 login 方法中添加大量的条件判断逻辑,导致代码越来越臃肿,维护成本急剧上升。例如添加手机号验证码登录:

public class UserLoginService {public boolean login(String identifier, String credential) {if (identifier.matches("^1[3 - 9]\\d{9}$")) {// 手机号验证码登录逻辑,查询数据库验证验证码if ("validCode".equals(credential)) {return true;}} else if ("admin".equals(identifier) && "123456".equals(credential)) {// 用户名密码登录逻辑return true;}return false;}
}

为解决这个问题,引入了工厂设计模式与策略模式。首先定义一个登录策略接口 LoginStrategy

public interface LoginStrategy {boolean login(String identifier, String credential);
}

然后分别实现用户名密码登录策略类 UsernamePasswordLoginStrategy 和手机号验证码登录策略类 PhoneCodeLoginStrategy

public class UsernamePasswordLoginStrategy implements LoginStrategy {@Overridepublic boolean login(String username, String password) {// 实际数据库查询验证逻辑if ("admin".equals(username) && "123456".equals(password)) {return true;}return false;}
}
public class PhoneCodeLoginStrategy implements LoginStrategy {@Overridepublic boolean login(String phone, String code) {// 实际数据库查询验证逻辑if ("13800138000".equals(phone) && "validCode".equals(code)) {return true;}return false;}
}

接着创建一个登录策略工厂类 LoginStrategyFactory

public class LoginStrategyFactory {public static LoginStrategy getLoginStrategy(String loginType) {if ("usernamePassword".equals(loginType)) {return new UsernamePasswordLoginStrategy();} else if ("phoneCode".equals(loginType)) {return new PhoneCodeLoginStrategy();}return null;}
}

最后,修改业务类 UserLoginService,通过工厂获取相应的登录策略:

public class UserLoginService {public boolean login(String loginType, String identifier, String credential) {LoginStrategy strategy = LoginStrategyFactory.getLoginStrategy(loginType);if (strategy!= null) {return strategy.login(identifier, credential);}return false;}
}

通过这种方式,当需要添加新的登录方式时,只需要创建新的策略类并在工厂类中添加相应的获取逻辑,无需修改业务层的核心代码,大大提高了代码的扩展性和维护性。

线上 bug 处理案例

在一个大型的在线教育平台项目上线一段时间后,运维人员反馈系统出现 CPU 使用率持续飙高的情况,导致部分课程直播卡顿,严重影响用户体验。由于线上环境复杂,难以在测试环境复现相同问题,增加了调试难度。

首先,利用 jstack 命令获取当前 Java 进程的线程堆栈信息,通过分析堆栈信息,发现有一个线程一直在执行某个方法 calculateCourseScore,该方法用于计算课程的综合得分,代码如下:

public class CourseScoreCalculator {public double calculateCourseScore(List<StudentAnswer> answers) {double totalScore = 0;for (StudentAnswer answer : answers) {// 复杂的计算逻辑,包含多层嵌套循环for (int i = 0; i < answer.getOptions().size(); i++) {for (int j = 0; j < answer.getOptions().get(i).getSubOptions().size(); j++) {totalScore += answer.getOptions().get(i).getSubOptions().get(j).getScore();}}}return totalScore;}
}

从代码逻辑上看,多层嵌套循环导致计算量过大,在高并发情况下容易使 CPU 使用率飙升。针对这个问题,对计算逻辑进行了优化。通过减少不必要的循环嵌套,将部分重复计算的逻辑提取出来,优化后的代码如下:

public class CourseScoreCalculator {public double calculateCourseScore(List<StudentAnswer> answers) {double totalScore = 0;for (StudentAnswer answer : answers) {List<Option> options = answer.getOptions();for (Option option : options) {List<SubOption> subOptions = option.getSubOptions();for (SubOption subOption : subOptions) {totalScore += subOption.getScore();}}}return totalScore;}
}

同时,监控系统资源,发现数据库查询操作也占用了较多资源。通过对数据库查询语句进行分析,发现部分查询没有使用合适的索引。例如,在查询学生课程学习记录时,原 SQL 语句为:

SELECT * FROM student_course_record WHERE student_id = 12345;

student_course_record 数据量较大,而 student_id 字段没有添加索引,导致查询效率低下。为 student_id 字段添加索引:

CREATE INDEX idx_student_id ON student_course_record(student_id);

经过这些优化措施,再次监控系统,CPU 使用率恢复到正常水平,线上直播卡顿问题得到解决。

系统调优案例

在一个电商订单系统中,有一个查询订单详情的接口 getOrderDetail,调优前该接口的平均响应时间为 2 秒,严重影响用户体验。为了提升系统性能,对该接口进行了优化。

首先,对接口涉及的 SQL 查询语句进行分析。原 SQL 语句为:

SELECT * FROM orders 
JOIN order_items ON orders.order_id = order_items.order_id 
JOIN products ON order_items.product_id = products.product_id 
WHERE orders.order_id = 12345;

通过 EXPLAIN 关键字分析查询执行计划,发现 JOIN 操作效率较低,因为相关表没有合适的索引。为 orders 表的 order_id 字段、order_items 表的 order_idproduct_id 字段、products 表的 product_id 字段添加索引:

CREATE INDEX idx_order_id_orders ON orders(order_id);
CREATE INDEX idx_order_id_order_items ON order_items(order_id);
CREATE INDEX idx_product_id_order_items ON order_items(product_id);
CREATE INDEX idx_product_id_products ON products(product_id);

经过索引优化后,SQL 查询效率得到显著提升。同时,考虑到订单数据相对稳定,添加缓存机制。使用 Redis 作为缓存,在查询订单详情时,首先从 Redis 中查询是否有缓存数据,如果有则直接返回,避免了数据库查询。代码实现如下:

public OrderDetail getOrderDetail(long orderId) {OrderDetail orderDetail = (OrderDetail) redisTemplate.opsForValue().get("order:" + orderId);if (orderDetail!= null) {return orderDetail;}// 如果缓存中没有,从数据库查询orderDetail = orderDao.getOrderDetail(orderId);if (orderDetail!= null) {redisTemplate.opsForValue().set("order:" + orderId, orderDetail);}return orderDetail;
}

经过上述优化,该接口的平均响应时间从 2 秒缩短到了 500ms,系统性能得到了大幅提升。

组件封装案例

  1. 分布式锁封装
    在一个分布式电商库存扣减系统中,为了保证库存扣减的原子性,避免超卖现象,需要使用分布式锁。封装了一个简单的分布式锁工具类 DistributedLockUtil,使用 Redis 实现分布式锁。代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;@Component
public class DistributedLockUtil {@Autowiredprivate RedisTemplate<String, String> redisTemplate;public boolean tryLock(String lockKey, String requestId, int expireTime) {return redisTemplate.opsForValue().setIfAbsent(lockKey, requestId, expireTime, TimeUnit.SECONDS);}public void unlock(String lockKey, String requestId) {if (requestId.equals(redisTemplate.opsForValue().get(lockKey))) {redisTemplate.delete(lockKey);}}
}

在库存扣减业务代码中使用该分布式锁:

public class StockService {@Autowiredprivate DistributedLockUtil distributedLockUtil;public boolean deductStock(long productId, int quantity) {String lockKey = "stock:" + productId;String requestId = UUID.randomUUID().toString();if (distributedLockUtil.tryLock(lockKey, requestId, 10)) {try {// 检查库存并扣减int stock = stockDao.getStock(productId);if (stock >= quantity) {stockDao.deductStock(productId, quantity);return true;}} finally {distributedLockUtil.unlock(lockKey, requestId);}}return false;}
}

这个分布式锁工具类可以在多个电商相关项目中复用,保证了分布式环境下关键业务的一致性。

  1. 支付通用服务封装
    在一个综合性电商平台项目中,涉及多种支付方式,如微信支付、支付宝支付、银行卡支付等。为了提高代码的复用性和系统的可维护性,封装了一个支付通用服务 PaymentService

首先定义一个支付接口 PaymentProcessor

public interface PaymentProcessor {String processPayment(PaymentRequest request);
}

然后分别实现微信支付处理器 WeChatPaymentProcessor、支付宝支付处理器 AlipayPaymentProcessor 和银行卡支付处理器 BankCardPaymentProcessor

public class WeChatPaymentProcessor implements PaymentProcessor {@Overridepublic String processPayment(PaymentRequest request) {// 调用微信支付 API 进行支付处理// 返回支付结果return "微信支付成功";}
}
public class AlipayPaymentProcessor implements PaymentProcessor {@Overridepublic String processPayment(PaymentRequest request) {// 调用支付宝支付 API 进行支付处理// 返回支付结果return "支付宝支付成功";}
}
public class BankCardPaymentProcessor implements PaymentProcessor {@Overridepublic String processPayment(PaymentRequest request) {// 调用银行卡支付 API 进行支付处理// 返回支付结果return "银行卡支付成功";}
}

接着创建支付服务类 PaymentService,通过策略模式选择具体的支付处理器:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;@Service
public class PaymentService {private Map<String, PaymentProcessor> paymentProcessorMap = new HashMap<>();@Autowiredpublic PaymentService(WeChatPaymentProcessor weChatPaymentProcessor,AlipayPaymentProcessor alipayPaymentProcessor,BankCardPaymentProcessor bankCardPaymentProcessor) {paymentProcessorMap.put("wechat", weChatPaymentProcessor);paymentProcessorMap.put("alipay", alipayPaymentProcessor);paymentProcessorMap.put("bankCard", bankCardPaymentProcessor);}public String processPayment(PaymentRequest request) {String paymentType = request.getPaymentType();PaymentProcessor processor = paymentProcessorMap.get(paymentType);if (processor!= null) {return processor.processPayment(request);}return "不支持的支付方式";}
}

在订单支付业务中使用该支付服务:

public class OrderService {@Autowiredprivate PaymentService paymentService;public String payOrder(Order order) {PaymentRequest request = new PaymentRequest();request.setPaymentType(order.getPaymentType());request.setAmount(order.getTotalAmount());return paymentService.processPayment(request);}
}

通过这种方式,将支付相关的复杂逻辑封装在 PaymentService 中,其他业务模块只需调用该服务即可,提高了系统的通用性和可维护性,同时也方便扩展新的支付方式。


总结

设计模式应用

  • 主要内容:电商项目用户登录功能,从初始逻辑集中导致维护困难,到引入工厂与策略模式解决问题。
  • 核心概念:工厂设计模式用于创建对象,策略模式将算法逻辑封装。
  • 关键知识点:理解两种设计模式作用,明白如何结合使用提高代码扩展性与维护性。

总结

  • 设计模式可优化代码结构,解决业务变更时代码频繁修改问题。
  • 工厂模式负责对象创建,策略模式处理不同业务逻辑实现,二者结合使代码更灵活。

线上 bug 处理

  • 主要内容:在线教育平台上线后 CPU 飙高,通过分析线程堆栈和 SQL 语句定位并解决问题。
  • 核心概念:利用工具获取线程堆栈信息辅助定位问题,关注数据库索引对查询性能影响。
  • 关键知识点:掌握获取和分析线程堆栈方法,了解索引优化 SQL 查询原理。

总结

  • 线上 bug 因环境复杂难调试,需借助工具精准定位。
  • 优化代码逻辑和数据库查询,可有效解决性能问题。

系统调优

  • 主要内容:电商订单系统查询订单详情接口,从 2 秒响应优化到 500ms,通过 SQL 优化和缓存实现。
  • 核心概念:使用 EXPLAIN 分析查询执行计划,运用缓存减少数据库查询压力。
  • 关键知识点:学会分析查询执行计划,掌握缓存机制及应用场景。

总结

  • 系统调优需关注数据库查询和缓存策略,以提升接口响应速度。
  • 索引优化可提高 SQL 查询效率,缓存能快速返回常用数据。

组件封装

  • 分布式锁封装

    • 主要内容:电商库存扣减系统使用分布式锁保证原子性,封装基于 Redis 的分布式锁工具。
    • 核心概念:分布式锁确保分布式环境下操作一致性,Redis 提供实现方式。
    • 关键知识点:理解分布式锁原理,掌握基于 Redis 实现分布式锁方法。
  • 总结

    • 分布式锁用于解决分布式场景下数据一致性问题。
    • Redis 的 setIfAbsent 等操作可实现分布式锁基本功能。
  • 支付通用服务封装

    • 主要内容:电商平台多种支付方式,通过封装支付通用服务提高复用性与可维护性。
    • 核心概念:利用策略模式实现不同支付方式处理,封装复杂支付逻辑。
    • 关键知识点:理解策略模式应用,学会封装通用服务。
  • 总结

    • 策略模式可根据不同条件选择不同支付处理器。
    • 封装通用服务能提升代码复用,便于维护和扩展新支付方式。

相关文章:

【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法

工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法&#xff0c;主要考察开发经验与技术水平&#xff0c;回答不佳会影响面试印象。提供四个回答方向&#xff0c;准备其中一个方向即可。 1、设计模式应用方向 以登录为例&#xff0c;未…...

RT-DETR代码详解(官方pytorch版)——参数配置(1)

前言 RT-DETR虽然是DETR系列&#xff0c;但是它的代码结构和之前的DETR系列代码不一样。 它是通过很多的yaml文件进行参数配置&#xff0c;和之前在train.py的parser argparse.ArgumentParser()去配置所有参数不同&#xff0c;所以刚开始不熟悉代码的时候可能不知道在哪儿修…...

腾讯云AI代码助手编程挑战赛-凯撒密码解码编码器

作品简介 在CTFer选手比赛做crypto的题目时&#xff0c;一些题目需要自己去解密&#xff0c;但是解密的工具大部分在线上&#xff0c;而在比赛过程中大部分又是无网环境&#xff0c;所以根据要求做了这个工具 技术架构 python语言的tk库来完成的GUI页面设计&#xff0c;通过…...

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…...

【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)

文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起&#xff0c;正向定位到当前行的首个字符 b2 从光标位置起&#xff0c;反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…...

GIC中断分组介绍(IMX6ull为例)

一、Cortex-A7内核中断 Cortex-A7内核具有多个中断类型&#xff0c;但其中最重要的是复位中断和IRQ&#xff08;普通中断请求&#xff09;中断。对于IMX6ULL而言&#xff0c;主要关注的是IRQ中断&#xff0c;因为外部设备和内部事件通常都会触发这类中断。 从左到右 中断控制…...

计算机网络期末复习(知识点)

概念题 在实际复习之前&#xff0c;可以看一下这个视频将网络知识串一下&#xff0c;以便更好地复习&#xff1a;【你管这破玩意叫网络&#xff1f;】 网络规模的分类 PAN&#xff08;个人区域网络&#xff09;&#xff1a;用于个人设备间的连接&#xff0c;如手机与蓝牙耳机…...

Apache XMLBeans 一个强大的 XML 数据处理框架

Apache XMLBeans 是一个用于处理 XML 数据的 Java 框架&#xff0c;它提供了一种方式将 XML Schema (XSD) 映射到 Java 类&#xff0c;从而使得开发者可以通过强类型化的 Java 对象来访问和操作 XML 文档。下面将以一个简单的案例说明如何使用 Apache XMLBeans 来解析、生成和验…...

飞凌嵌入式i.MX8M Mini核心板已支持Linux6.1

飞凌嵌入式FETMX8MM-C核心板现已支持Linux6.1系统&#xff0c;此次升级不仅使系统功能更加丰富&#xff0c;还通过全新BSP实现了内存性能的显著提升。 基于NXP i.MX8M Mini处理器设计开发的飞凌嵌入式FETMX8MM-C核心板&#xff0c;拥有4个Cortex-A53高性能核和1个Cortex-M4实时…...

【数据链电台】洛克希德·马丁(Lockheed Martin)

洛克希德马丁公司&#xff08;Lockheed Martin&#xff09;是全球领先的航空航天、国防、先进技术和安全领域的供应商之一。 公司为美军及盟国军队提供了广泛的通信系统&#xff0c;包括数据链电台和相关的通信系统。 洛克希德马丁的许多产品用于战术通信、卫星通信、电子战、…...

python关键字(保留字)用法、保留的标识符类(1)

python关键字(保留字)用法、保留的标识符类&#xff08;1&#xff09; 一、python保留字(关键字) 1.1、python关键字 以下标识符为保留字&#xff0c;或称 关键字&#xff0c;不可用于普通标识符&#xff0c;即我们不能把它们用作任何标识符名称。 python 保留字(关键字) 关键…...

Ubuntu平台虚拟机软件学习笔记

Ubuntu平台上常见虚拟机软件 VirtualBox [Download]KVM/QEMU 1. VirtualBox 1.1 查看安装版本 VBoxManage -V2. KVM/QEMU KVM: Kernel-based Virtual Machine QEMU: Quick EMUlator 通义千问&#xff1a; virt-manager 既不是QEMU也不是KVM&#xff0c;而是用于管理和创建…...

【数据库系统概论】数据库恢复技术

目录 11.1 事务的基本概念 事务的定义 事务的开始与结束 事务的ACID特性 破坏ACID特性的因素 11.2 数据库恢复概述 11.3 故障的种类 1. 事务内部的故障 2. 系统故障 3. 介质故障 4. 计算机病毒 11.4 恢复的实现技术 如何建立冗余数据 数据转储 登记日志文件 11…...

R 语言科研绘图 --- 折线图-汇总

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

基于 Python 和 OpenCV 的人脸识别上课考勤管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

工业 4G 路由器赋能远程医疗,守护生命线

在医疗领域&#xff0c;尤其是偏远地区的医疗救治场景中&#xff0c;工业 4G 路由器正发挥着无可替代的关键作用&#xff0c;宛如一条坚韧的 “生命线”&#xff0c;为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏&#xff0c;常常面临着专业医生短缺、诊疗设备有限等困境…...

Windows安装Ubuntu子系统图形化工具

Windows如何使用WSL方式安装Ubuntu&#xff0c;可以参考&#xff1a;https://blog.csdn.net/xiangzhihong8/article/details/145044370。接下来&#xff0c;我们说一下如何安装Ubuntu的图形化系统。 为了测试&#xff0c;这里介绍两种常见的图形化工具。第一种为VcXsrv Gnome…...

MiniMind - 从0训练语言模型

文章目录 一、关于 MiniMind &#x1f4cc;项目包含 二、&#x1f4cc; Environment三、&#x1f4cc; Quick Start Test四、&#x1f4cc; Quick Start Train0、克隆项目代码1、环境安装2、如果你需要自己训练3、测试模型推理效果 五、&#x1f4cc; Data sources1、分词器&am…...

sql正则表达

MySQL中的正则表达式使用REGEXP关键字来指定匹配模式。常见的正则表达式符号包括&#xff1a; .&#xff1a;匹配任意单个字符 ^&#xff1a;匹配字符串的开始位置 $&#xff1a;匹配字符串的结束位置 *&#xff1a;匹配前面的字符或字符集出现零次或多次 &#xff1a;匹配前面…...

基于华为Maas(大模型即服务)和开源的Agent三方框架构建AI聊天助手实践

引言 随着人工智能技术的快速发展,AI聊天助手已经成为企业与用户之间沟通的重要桥梁。为了构建一个高效、智能且易于扩展的AI聊天助手,我们可以利用华为云提供的Maas(Model-as-a-Service,大模型即服务)平台,结合开源的Agent三方框架来实现。本文将详细介绍这一实践过程,…...

微信小程序——创建滑动颜色条

在微信小程序中&#xff0c;你可以使用 slider 组件来创建一个颜色滑动条。以下是一个简单的示例&#xff0c;展示了如何实现一个颜色滑动条&#xff0c;该滑动条会根据滑动位置改变背景颜色。 步骤一&#xff1a;创建小程序项目 首先&#xff0c;使用微信开发者工具创建一个新…...

Qt官方下载地址

1. 最新版本 Qt官方最新版本下载地址&#xff1a;https://www.qt.io/download-qt-installer 当前最新版本Qt6.8.* 如下图&#xff1a; 2. 历史版本 如果你要下载历史版本安装工具或者源码编译方式安装&#xff0c;请转至此链接进行下载&#xff1a;https://download.qt.i…...

网络-ping包分析

-a&#xff1a;使 ping 在收到响应时发出声音&#xff08;适用于某些操作系统&#xff09;。-b&#xff1a;允许向广播地址发送 ping。-c count&#xff1a;指定发送的 ping 请求的数量。例如&#xff0c;ping -c 5 google.com 只发送 5 个请求。-i interval&#xff1a;指定两…...

SEO内容优化:如何通过用户需求赢得搜索引擎青睐?

在谷歌SEO优化中&#xff0c;内容一直是最重要的因素之一。但要想让内容真正发挥作用&#xff0c;关键在于满足用户需求&#xff0c;而不是简单地堆砌关键词。谷歌的算法越来越智能化&#xff0c;更注重用户体验和内容的实用性。 了解目标用户的需求。通过工具如Google Trends…...

ubuntu22.04 的录屏软件有哪些?

在Ubuntu 22.04上&#xff0c;有几款适合做视频直播和录屏的软件&#xff1a; 1. OBS Studio (Open Broadcaster Software) 功能&#xff1a;OBS Studio 是最常用的开源直播和录屏软件&#xff0c;支持视频录制、直播流式传输&#xff0c;并且有强大的插件支持&#xff0c;能…...

Opencv查找、绘制轮廓、圆形矩形轮廓和近似轮廓

查找、绘制轮廓、圆形矩形轮廓和近似轮廓 目录 查找、绘制轮廓、圆形矩形轮廓和近似轮廓1 轮廓查找和绘制1.1 轮廓查找1.1.1 函数和参数1.1.2 返回值 1.2 轮廓绘制1.2.1 函数和参数 1.3 步骤1.4 实际测试绘制轮廓 2 绘制近似轮廓2.1 函数和参数2.2 查找特定轮廓2.3 近似轮廓测试…...

深入解析 Python 2 与 Python 3 的差异与演进

Python 2 和 Python 3 是 Python 编程语言的两个主要版本。Python 3 于 2008 年发布&#xff0c;旨在解决 Python 2 中的一些设计缺陷&#xff0c;并引入了许多新特性。虽然 Python 2 在很长一段时间内仍然被广泛使用&#xff0c;但自 2020 年 1 月 1 日起&#xff0c;Python 2…...

后端:Spring(IOC、AOP)

文章目录 1. Spring2. IOC 控制反转2-1. 通过配置文件定义Bean2-1-1. 通过set方法来注入Bean2-1-2. 通过构造方法来注入Bean2-1-3. 自动装配2-1-4. 集合注入2-1-5. 数据源对象管理(第三方Bean)2-1-6. 在xml配置文件中加载properties文件的数据(context命名空间)2-1-7. 加载容器…...

排序:插入、选择、交换、归并排序

排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性 &#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;…...

认识+安装ElasticSearch

1. 为什么要学习ElasticSearch? 一般的来说,项目中的搜索功能尤其是电商项目,商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的&#xff0c;存在很多问题。 1.1 数据库搜索所存在的问题 1.1.1 查询效率较低 由于数据库模糊查询不走索引&…...

做b2c网站/seo 页面链接优化

题目描述 &#xff08;试题来源&#xff1a;Link &#xff09; 司令部的将军们打算在 \(N\times M\) 的网格地图上部署他们的炮兵部队。一个 \(N\times M\) 的地图由 \(N\) 行 \(M\) 列组成&#xff0c;地图的每一格可能是山地&#xff08;用 H 表示&#xff09;&#xff0c;也…...

泉州网站公司/seo搜索优化

(3)非线性负荷模块图5.5 非线性负荷模块5.2 仿真结果及分析图5.6 为系统母线三相对称电流波形&#xff0c;图5.7 为非线性负载电流波形&#xff0c;图5.8 为系统电流谐波分量&#xff0c;图5.9 为谐波补偿电流。图5.6 系统母线三相对称电流波形图5.7 非线性负载电流波形图5.8 系…...

用flash做网站建设/网站快速排名的方法

为什么大家都很喜欢这个框架&#xff0c;它到底有神奇的作用&#xff0c;以至于&#xff0c;在python的每一次的更新里&#xff0c;这个框架都是作为重点的讨论对象&#xff0c;接下来带大家一起去了解这个框架内容&#xff0c;看看到底是什么神奇的魔力&#xff0c;让大家热门…...

wordpress建站比较/优化的概念

前言 疫情当前&#xff0c;作为一名教师&#xff0c;如何能让学生进行有效练习成了一个难题。如果使用 “问卷星”等线上调查问卷式的网站来做练习测试&#xff0c;是无法及时有效的进行&#xff0c;更谈不上对学生练习情况进行跟踪。鉴于以上现实情况和问题&#xff…...

源代码怎么做网站/竞价网络推广外包

Next.js 教程阐述安装和引入Axios插件getInitialProps 中获取数据阐述 在Next.js框架中提供了 getInitialProps 静态方法用来获取远端数据&#xff0c;这个是框架的约定&#xff0c;所以你也只能在这个方法里获取远端数据。 不要再试图在声明周期里获得&#xff0c;虽然也可以…...

用java可以做网站吗/北京网站建设公司

LEN() 函数 LEN() 函数返回文本字段中值的长度。 SQL LEN() 语法 SELECT LEN(column_name) FROM table_name; MySQL 中函数为 LENGTH(): SELECT LENGTH(column_name) FROM table_name; 演示数据库 在本教程中&#xff0c;我们将使用 RUNOOB 样本数据库。 下面是选自 "Webs…...