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

Java学习笔记(二十三)

1 @CacheEvict

@CacheEvict是Spring框架中用于清空缓存的注解。以下是对@CacheEvict注解的详细介绍:

1.1 作用

@CacheEvict注解的主要作用是删除缓存中的数据。在方法执行后或执行前(根据配置),它可以清空指定的缓存项或整个缓存区域。这对于删除旧的数据或无效的数据非常有用,可以确保缓存中的数据始终是最新的。

1.2 常用属性

@CacheEvict注解包含多个属性,用于配置缓存删除的行为:

  1. value/cacheNames:指定要清空的缓存的名称。可以是一个字符串或一个字符串数组,表示该方法将清空哪个缓存区域中的数据。如果指定了多个缓存名称,那么这些缓存区域中的数据都将被清空。
  2. key:指定要清空的缓存项的键。通过该属性,可以精确控制要删除的缓存数据。可以使用SpEL表达式来动态生成键的值。
  3. allEntries:一个布尔值,用于指定是否清空缓存中的所有数据。如果设置为true,那么将删除指定缓存区域中的所有数据;如果设置为false(默认值),则只删除与指定键相匹配的缓存项。
  4. beforeInvocation:一个布尔值,用于指定是否在方法执行前清空缓存。如果设置为true,那么缓存的清空操作将在方法执行之前进行;如果设置为false(默认值),则缓存的清空操作将在方法执行之后进行。需要注意的是,如果在方法执行前清空缓存,并且方法执行失败(抛出异常),那么缓存将不会被重新填充。

1.3 使用示例

以下是一个使用@CacheEvict注解的示例:

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;// 使用@Cacheable注解缓存用户数据@Cacheable(value = "users", key = "#id")public User getUserById(Long id) {return userRepository.findById(id).orElse(null);}// 使用@CacheEvict注解删除用户数据对应的缓存@CacheEvict(value = "users", key = "#user.id")public void saveUser(User user) {userRepository.save(user);}
}

在上面的示例中,UserService类中的getUserById方法使用了@Cacheable注解来缓存用户数据。而saveUser方法则使用了@CacheEvict注解来删除与保存的用户数据相对应的缓存项。这样,在每次保存用户数据后,都可以确保缓存中的数据是最新的。

1.4 注意事项

  1. 在使用@CacheEvict注解时,必须指定要清空的缓存名称(value/cacheNames属性)和缓存项的键(key属性)。
  2. 如果指定了allEntries属性为true,那么将删除指定缓存区域中的所有数据,因此需要谨慎使用。
  3. 如果在方法执行前清空缓存(beforeInvocation属性为true),并且方法执行失败,那么缓存将不会被重新填充。这可能会导致在某些情况下出现数据不一致的问题。因此,在使用beforeInvocation属性时,需要充分考虑方法的执行情况和可能的异常处理。

总之,@CacheEvict注解是Spring框架中用于清空缓存的重要工具。通过合理配置其属性,可以实现对缓存数据的精确控制和管理。

2 @Caching

@Caching注解是Spring Cache提供的一个功能强大的组合注解,它允许开发者在一个方法或类上同时指定多个缓存操作相关的注解。以下是关于@Caching注解的详细介绍:

2.1 @Caching注解的主要功能

@Caching注解通过组合多个Spring Cache注解(如@Cacheable、@CachePut、@CacheEvict等),能够定义复杂的缓存规则。这使得开发者可以在一个方法上灵活地配置多种缓存行为,而无需编写重复的缓存处理代码。

2.2 @Caching注解的属性

@Caching注解拥有三个主要属性,每个属性都可以接收一个或多个相应的注解作为值:

  1. cacheable:用于指定一个或多个@Cacheable注解的组合。@Cacheable注解用于查询缓存,如果缓存中存在相应的数据,则直接返回缓存数据而不执行方法。如果没有缓存数据,则执行方法并将结果添加到缓存中。
  2. put:用于指定一个或多个@CachePut注解的组合。@CachePut注解无论方法是否被执行,都会将方法的返回值放入指定的缓存中。这通常用于更新缓存数据。
  3. evict:用于指定一个或多个@CacheEvict注解的组合。@CacheEvict注解用于删除缓存中的数据,通常用于删除操作或数据更新后的缓存同步。

2.3 @Caching注解的使用示例

以下是一个使用@Caching注解的示例,展示了如何在一个方法上同时指定查询缓存、更新缓存和删除缓存的操作:

@Caching(cacheable = @Cacheable(key = "'userCache:'+ #uid"),put = @CachePut(key = "'userCache:'+ #uid"),evict = { @CacheEvict(key = "'userCache:'+ #uid"), @CacheEvict(key = "'addressCache:'+ #uid"), @CacheEvict(key = "'messageCache:'+ #uid") }
)
public User updateRef(String uid) {// 业务逻辑return null;
}

在这个示例中,updateRef方法被配置了多个缓存操作:

  • 使用@Cacheable注解查询userCache缓存,如果缓存中存在以uid为键的数据,则直接返回该数据。
  • 使用@CachePut注解更新userCache缓存,将方法的返回值放入缓存中。
  • 使用多个@CacheEvict注解删除userCacheaddressCachemessageCache缓存中以uid为键的数据。

2.4 @Caching注解的注意事项

  1. SpEL表达式:在@Caching注解的属性中,可以使用Spring Expression Language(SpEL)表达式来动态生成缓存的键(key)。这提供了很大的灵活性,允许开发者根据方法的参数或返回值来定制缓存的键。
  2. 缓存配置:在使用@Caching注解之前,需要确保已经配置了Spring Cache的相关依赖和缓存管理器(CacheManager)。这通常通过在Spring Boot应用程序的主类或配置类上使用@EnableCaching注解来启用缓存支持,并通过application.properties或application.yml文件进行自定义配置。
  3. 缓存同步:在使用@Cacheable和@CachePut注解时,需要注意缓存的同步问题。如果多个线程同时访问同一个缓存键,可能会导致数据不一致的问题。因此,在使用这些注解时,需要确保缓存的同步机制得到妥善处理。

综上所述,@Caching注解是Spring Cache提供的一个非常有用的工具,它允许开发者在一个方法或类上同时指定多个缓存操作相关的注解。通过合理使用@Caching注解,可以大大提高应用程序的性能和可维护性。

3 @After 、@Before 、@ Around

@After@Before@Around 是Spring AOP(面向切面编程)中的注解,它们用于定义切面的通知(Advice),这些通知在目标方法执行的不同阶段执行额外的逻辑。以下是这些注解的详细介绍及示例:

3.1 @Before 注解

  • 作用:前置通知,在目标方法执行之前执行。它通常用于执行一些前置条件检查、日志记录等。
  • 示例
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;@Aspect
@Component
public class MyBeforeAdvice {@Before("execution(* com.example.service.*.*(..))")public void beforeAdvice() {System.out.println("Before method execution");// 在这里可以执行前置逻辑,如日志记录、权限检查等}
}

在这个例子中,beforeAdvice 方法会在 com.example.service 包下所有类的所有方法执行之前执行。

3.2 @After 注解

  • 作用:后置通知,在目标方法执行之后执行,无论目标方法是否抛出异常。它通常用于执行一些清理工作、日志记录等。
  • 示例
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Aspect
@Component
public class MyAfterAdvice {@After("execution(* com.example.service.*.*(..))")public void afterAdvice(JoinPoint joinPoint) {System.out.println("After method execution: " + joinPoint.getSignature());// 在这里可以执行后置逻辑,如日志记录、资源释放等}
}

在这个例子中,afterAdvice 方法会在 com.example.service 包下所有类的所有方法执行之后执行。

3.3 @Around 注解

  • 作用:环绕通知,可以包裹目标方法的执行,拥有最大的控制权。它可以在目标方法执行前后执行自定义逻辑,甚至可以决定是否继续执行目标方法或改变其返回值。
  • 示例
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;@Aspect
@Component
public class MyAroundAdvice {@Around("execution(* com.example.service.*.*(..))")public Object aroundAdvice(ProceedingJoinPoint pjp) throws Throwable {System.out.println("Before method execution");try {Object result = pjp.proceed(); // 执行目标方法System.out.println("After method execution");return result; // 返回目标方法的执行结果} catch (Throwable throwable) {// 处理异常System.out.println("Exception occurred: " + throwable.getMessage());throw throwable; // 重新抛出异常}}
}

在这个例子中,aroundAdvice 方法会在 com.example.service 包下所有类的所有方法执行前后执行自定义逻辑。它首先打印“Before method execution”,然后执行目标方法,并打印“After method execution”。如果目标方法抛出异常,它还会捕获并处理该异常。

3.4 总结

  • @Before 注解用于在目标方法执行之前执行前置逻辑。
  • @After 注解用于在目标方法执行之后执行后置逻辑,无论目标方法是否抛出异常。
  • @Around 注解用于在目标方法执行前后执行自定义逻辑,并可以控制是否继续执行目标方法或改变其返回值。

这些注解在Spring AOP中非常有用,可以帮助开发者在不修改目标方法代码的情况下实现各种复杂的功能和逻辑。

4 docker network

Docker提供了一组命令来管理和配置Linux网络,这些命令可以创建、列出、删除和检查网络,帮助用户在Docker容器之间建立通信。以下是一些常用的Docker网络命令及其详细介绍:

4.1 创建网络

  • 命令docker network create [OPTIONS] NETWORK_NAME

  • 功能:创建一个新的Docker网络。

  • 选项

    • --driver:指定网络驱动程序(如bridge、host、overlay等)。
    • --subnet:指定子网。
    • --gateway:指定网关。
    • --ip-range:指定可用IP地址范围。
    • --ipv6:启用IPv6。
    • --label:为网络添加标签。
  • 示例docker network create --driver bridge --subnet 192.168.1.0/24 my_network

4.2 列出网络

  • 命令docker network ls
  • 功能:列出所有可用的Docker网络。
  • 输出:包括NETWORK ID、NAME、DRIVER和SCOPE等信息。

4.3 查看网络详情

  • 命令docker network inspect [OPTIONS] NETWORK_NAME
  • 功能:查看指定Docker网络的详细信息。
  • 输出:包括网络名称、ID、创建时间、作用域、驱动程序、IPAM配置(子网、网关等)、容器连接信息等。

4.4 连接容器到网络

  • 命令docker network connect [OPTIONS] NETWORK_NAME CONTAINER_NAME

  • 功能:将已创建的容器连接到指定的Docker网络中。

  • 选项:无特定选项,但可以使用--alias为容器在网络中设置别名。

  • 示例docker network connect my_network my_container

4.5 断开容器与网络的连接

  • 命令docker network disconnect [OPTIONS] NETWORK_NAME CONTAINER_NAME

  • 功能:断开指定容器与指定Docker网络的连接。

  • 选项:无特定选项。

  • 示例docker network disconnect my_network my_container

4.6 删除网络

  • 命令docker network rm [OPTIONS] NETWORK_NAME

  • 功能:删除指定的Docker网络。

  • 选项:无特定选项,但可以同时删除多个网络,如docker network rm network1 network2

  • 示例docker network rm my_network

4.7 其他注意事项

  • 网络类型:Docker支持多种网络类型,包括bridge(桥接网络,默认类型)、host(主机网络)、overlay(覆盖网络,用于多主机集群)等。
  • 网络隔离:通过创建不同的网络,可以实现容器之间的隔离,提高安全性。
  • 容器间通信:容器可以通过自定义网络在不同主机上安全地相互通信。

综上所述,Docker网络命令提供了强大的网络管理功能,允许用户创建、配置和管理Docker容器之间的网络连接。通过使用这些命令,用户可以实现容器之间的隔离、通信和网络配置,满足各种复杂的网络需求。

5 ElasticsearchTemplate 和 RestHighLevelClient

ElasticsearchTemplate 和 RestHighLevelClient 都是用于与 Elasticsearch 进行交互的客户端工具,但它们在实现方式、使用场景和功能特点上有所不同。以下是对两者的详细介绍以及它们之间的区别:

5.1 ElasticsearchTemplate

  1. 概述
    ElasticsearchTemplate 是 Spring Data Elasticsearch 提供的一个高级抽象,它封装了底层的 Elasticsearch 客户端操作,使得开发者可以更方便地与 Elasticsearch 进行交互。

  2. 特点

    • 简化操作:通过提供一系列的方法,如索引、查询、删除等,简化了与 Elasticsearch 的交互过程。
    • 丰富的操作方法:支持各种 CRUD 操作,以及复杂的查询和聚合操作。
    • 自定义查询:允许开发者通过 Java 代码构建自定义的查询条件,满足更复杂的业务需求。
  3. 使用场景

    • 适用于使用 Spring 框架的开发者,特别是那些希望利用 Spring Data Elasticsearch 提供的便利性和丰富功能的开发者。

5.2 RestHighLevelClient

  1. 概述
    RestHighLevelClient 是 Elasticsearch 官方提供的一个高级 REST 客户端,它基于 HTTP 协议与 Elasticsearch 进行交互。与低级的 REST 客户端相比,RestHighLevelClient 提供了更高的抽象层次和更丰富的功能。

  2. 特点

    • 官方支持:由 Elasticsearch 官方提供,与 Elasticsearch 的兼容性更好。
    • 丰富的 API:提供了包括索引管理、数据管理、查询等在内的丰富 API。
    • 高性能:通过优化 HTTP 请求和响应的处理,提高了与 Elasticsearch 交互的性能。
  3. 功能

    • 索引管理:支持创建、删除、判断索引是否存在等操作。
    • 数据管理:支持写入、批量写入、更新等操作。
    • 查询功能:支持基本查询、复合查询、聚合查询等,可以结合原生 Elasticsearch 查询语法实现更复杂的查询需求。
  4. 使用场景

    • 适用于需要在 Java 应用程序中集成 Elasticsearch 的开发者,特别是那些希望使用 Elasticsearch 官方提供的高级 REST 客户端的开发者。

5.3 两者区别

  1. 实现方式

    • ElasticsearchTemplate 是基于 Spring Data Elasticsearch 的,它封装了底层的 Elasticsearch 客户端操作,提供了更高层次的抽象。
    • RestHighLevelClient 是 Elasticsearch 官方提供的 REST 客户端,它基于 HTTP 协议与 Elasticsearch 进行交互,提供了更丰富的 API 和更高的性能。
  2. 使用场景

    • ElasticsearchTemplate 更适用于使用 Spring 框架的开发者,特别是那些希望利用 Spring Data Elasticsearch 的便利性和丰富功能的开发者。
    • RestHighLevelClient 则更适用于需要在 Java 应用程序中集成 Elasticsearch 的开发者,特别是那些希望使用 Elasticsearch 官方提供的高级 REST 客户端的开发者。
  3. 功能特点

    • ElasticsearchTemplate 提供了丰富的操作方法,但相对来说,它的抽象层次更高,可能对于某些复杂的查询需求需要开发者进行更多的自定义封装。
    • RestHighLevelClient 则提供了更丰富的 API 和更高的性能,对于复杂的查询需求,它可以更好地结合原生 Elasticsearch 查询语法来实现。

综上所述,ElasticsearchTemplate 和 RestHighLevelClient 都是用于与 Elasticsearch 进行交互的重要工具,但它们在实现方式、使用场景和功能特点上有所不同。开发者在选择时,应根据自己的技术栈、业务需求以及对 Elasticsearch 的熟悉程度来做出决策。

相关文章:

Java学习笔记(二十三)

1 CacheEvict CacheEvict是Spring框架中用于清空缓存的注解。以下是对CacheEvict注解的详细介绍: 1.1 作用 CacheEvict注解的主要作用是删除缓存中的数据。在方法执行后或执行前(根据配置),它可以清空指定的缓存项或整个缓存区…...

TIOBE编程语言排行靠前的编程语言的吉祥物

Python的吉祥物:小蟒蛇 Python语言的吉祥物是一只名叫"Pythonidae"(或简称"Py")的小蟒蛇。这个吉祥物由Tobias Kohn设计于2005年,它的形象借鉴了真实的蟒蛇,但加入了一些可爱和友善的特点。小蟒蛇…...

Redis集群部署详解:主从复制、Sentinel哨兵模式与Cluster集群的工作原理与配置

集群部署形式 1、主从复制1.1 工作机制1.2 配置实现1.3 优缺点1.4 部署形式1.5 主从复制优化 2、Sentinel 哨兵模式2.1 工作机制2.2 配置实现2.3 优缺点2.4 哨兵机制选举流程2.5 脑裂问题解决方案 3、Redis Cluster3.1 工作机制3.2 配置实现3.3 优缺点3.4 故障转移3.5 哈希槽为…...

Dubbo泛化调用

本文记录下利用dubbo泛化调用实现网关server收http请求,然后转发给dubbo服务,然后收到dubbo响应的功能原理。 关键点1:dubbo泛化调用。可根据(注册中心地址、接口名,方法名,参数类型)唯一确定一个dubbo服务…...

SpringBoot工程快速启动

1.问题导入 以后我们和前端开发人员协同开发,而前端开发人员需要测试前端程序就需要后端开启服务器,这就受制于后端开发人员。 为了摆脱这个受制,前端开发人员尝试着在自己电脑上安装 Tomcat 和 Idea ,在自己电脑上启动后端程序&a…...

Docker实践:部署Docker管理工具DockerUI

Docker实践:部署Docker管理工具DockerUI 前言一、DockerUI介绍1.1 DockerUI概述1.2 镜像说明 二、检查本地Docker环境三、拉取DockerUI镜像四、创建DockerUI容器五、访问DockerUI六、DockerUI的基本使用6.1 查询宿主机容器情况6.2 查询Docker镜像列表6.3 查看容器配…...

【优先算法】滑动窗口--(结合例题讲解解题思路)(C++)

目录 1. 例题1:最大连续1的个数 1.1 解题思路 1.2代码实现 1.3 错误示范如下:我最开始写了一种,但是解答错误,请看,给大家做个参考 2. 将 x 减到 0 的最小操作数 2.1解题思路 2.2代码实现 1. 例题1&#xff…...

嵌入式系统Linux实时化(四)Xenomai应用开发测试

1、Xenomai 原生API 任务管理 Xenomai 本身提供的一系列多任务调度机制,主要有以下一些函数: int rt_task_create (RT_TASK task, const char name, int stksize, int prio, intmode) ; 任务的创建;int rt_task_start(RT_TASK task, void(entry)(void cookie), void cookie…...

深度剖析RabbitMQ:从基础组件到管理页面详解

文章目录 一、简介二、Overview2.1 Overview->Totals2.2 Overview->Nodesbroker的属性2.3 Overview->Churn statistics2.4 Overview->Ports and contexts2.5 Overview->Export definitions2.6 Overview->Import definitions 三、Connections连接的属性 四、C…...

算法每日双题精讲 —— 二分查找(二分查找,在排序数组中查找元素的第一个和最后一个位置)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!&#x1f4aa…...

Golang—— error 和 panic

本文详细介绍Golang的两种错误处理机制:error 和 panic。 文章目录 Golang 的错误处理机制概述error特点代码示例基本用法创建 error panic特点运行时错误示例defer 和 recover 的结合使用代码示例基本用法创建 panic panic 的执行机制 error 和 panic 的对比生产环…...

xcrun: error: invalid active developer path 解决

在拉取 github 代码时,提示如下报错: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 原因是:这是由于 Xcode command line t…...

Jmeter配置服务代理器 Proxy(二)

1.创建脚本记录器 2.配置:Jmeter代理、端口、记录目标等 3.配置谷歌浏览器代理 浏览器配置代理的详细教程可参考:使用whistle代理-CSDN博客 4.启动Jmeter记录器 点击ok后弹出这个界面,生成了证书: 5.给浏览器安装Jmeter代理的证书…...

小黑工具人日常积累中:sqlserver中切割字符串,取首个子串

SELECTSUBSTRING(表名字, 1, CHARINDEX(分隔符, 字段名) - 1) AS FirstPart FROM表名字 WHERECHARINDEX(分隔符, 字段名) > 0继续尝试: 提取第二个子串 窗口函数...

港科夜闻 | 香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大与微软亚洲研究院签署战略合作备忘录,推动医学健康教育及科研协作。根据备忘录,双方将结合各自于科研领域的优势,携手推动医学健康领域的交流与合作。合作方向将涵盖人才培训、…...

掌握Golang strings包:高效字符串处理指南

掌握Golang strings包:高效字符串处理指南 引言为什么要学习和掌握strings包本教程的目标 基本用法strings包概述导入strings包常用函数列表及简要介绍 字符串创建与基本操作创建字符串字符串连接:Join重复字符串:Repeat修改字符串&#xff1…...

关于husky8.0 与 4.0的配置

husky的场景使用很多,一般大多场景是在配置git commit 命令拦截hook, 校验 commit-msg 格式规范。以下环境默认:git > 2.27.0, node >14 1、安装huskey8.0.1 npm install --save-dev husky8.0.1 2、初始化配置文件 在package.json scripts 属性…...

【RK3588 Linux 5.x 内核编程】-Linux内核数据结构详解(双向链表、基数树、位数组)

Linux内核数据结构详解(双向链表、基数树、位数组) 文章目录 Linux内核数据结构详解(双向链表、基数树、位数组)1、双向链表2、基数树3、位数组3.1 Linux内核中的位数组和位操作3.2 位数组声明3.3 特定于架构的位操作3.4 常见的位操作Linux内核提供了不同的数据结构实现,如…...

3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)

在上个版本Qt Quick-QML地图引擎之v4版本(新增多模型切换/3D模型欧拉角模拟)_qt加载3d地图-CSDN博客更新了3D模拟功能,在4.3版本增加动态轨迹线、三个地图(海图/天地图街道/天地图卫星)。 4.3版本已经支持qt6 cmake版本,而4.3版本以下支持qt5版本&#x…...

使用WebdriverIO和Appium测试App

1.新建项目 打开Webstorm新建项目 打开终端输入命令 npm init -y npm install wdio/cli allure-commandline --save-dev npx wdio config 然后在终端依次选择如下: 然后在终端输入命令: npm install wdio/local-runnerlatest wdio/mocha-frameworkla…...

前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单

一、最早的灵感 最早的灵感来自sprider / 网络爬虫 / 爬虫配置,在爬虫爬取网站文章时候,会输入给爬虫一个配置文件,里边的内容是一个json对象。里边包含了所有想要抓取的页面的信息。爬虫通过这个配置就可以抓取目标网站的数据。其实本文要引…...

工具推荐:PDFgear——免费且强大的PDF编辑工具 v2.1.12

PDFgear——免费且强大的PDF编辑工具 v2.1.12 软件简介 PDFgear 是一款 完全免费的 PDF 软件,支持 阅读、编辑、转换、合并 以及 跨设备签署 PDF 文件,无需注册即可使用。它提供了丰富的 PDF 处理功能,极大提升了 PDF 文件管理的便捷性和效…...

【Unity3D】【已解决】TextMeshPro无法显示中文的解决方法

TextMeshPro无法显示中文的解决方法 现象解决方法Assets 目录中新建一个字体文件夹在C:\Windows\Fonts 中随便找一个中文字体的字体文件把字体文件拖到第一步创建的文件夹中右键导入的字体,Create---TextMeshPro---Font Asset,创建字体文件资源把 SDF文件…...

【Unity】使用UniRx来快速完成Unity中的信号层开发工作。

访问官方 网址:https://github.com/neuecc/UniRx/ UniRx(Unity反应式扩展)是.NET 反应式扩展的重新实现。官方 Rx 实现很棒,但在 Unity 上不起作用,并且存在 iOS IL2CPP 兼容性问题。此库修复了这些问题,并…...

FPGA工程师成长四阶段

朋友,你有入行三年、五年、十年的职业规划吗?你知道你所做的岗位未来该如何成长吗? FPGA行业的发展近几年是蓬勃发展,有越来越多的人才想要或已经踏进了FPGA行业的大门。很多同学在入行FPGA之前,都会抱着满腹对职业发…...

配置Kubernetes从节点与集群Calico网络

在上一篇博客中,我们成功安装并初始化了Kubernetes的主节点,并且看到了集群初始化成功的标志信息。接下来,我们将继续安装从节点(worker nodes),以构建一个完整的Kubernetes集群。 步骤回顾 在上一步中&a…...

【SH】Xiaomi9刷Windows10系统研发记录 、手机刷Windows系统教程、小米9重装win10系统

文章目录 参考资料云盘资料软硬件环境手机解锁刷机驱动绑定账号和设备解锁手机 Mindows工具箱安装工具箱和修复下载下载安卓和woa资源包第三方Recovery 一键安装Windows准备工作创建分区安装系统 效果展示Windows和Android一键互换Win切换安卓安卓切换Win 删除分区 参考资料 解…...

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…...

STC的51单片机LED点灯基于KEIL

前言: 该文源于回答一个朋友的问题,代码为该朋友上传,略作修改,在此说明问题以及解决问题的思路,以减少新手错误。 电路图: 该位朋友未上传电路图,说明如下: stc8g1k08a-sop8控制…...

AV1视频编解码简介、码流结构(OBU)

我的音视频/流媒体开源项目(github) 目录 一、AV1编码技术 二、AV1码流结构(OBU) 三、IVF文件格式 四、ffmpeg支持AV1 五、关于常见格式对AV1的封装 一、AV1编码技术 AV1是由开放媒体联盟(AOM,Alliance for Open Media)在2018年发布的,AV1的前身…...

Service Work离线体验与性能优化

Service Work离线体验与性能优化 引言 先放个意外事件,万事开头难🤣🤣🤣 原计划是分享离线应用与数据资源缓存的应用实践,结果发现这一技术已被web标准废弃 曾经做过一个PC应用,业务需求要求应用具备容灾…...

linux之进程信号(初识信号,信号的产生)

目录 引入一、初识信号(信号预备知识)1.生活中的信号2.Linux中的信号3.信号进程得出的初步结论 二、信号的产生1.通过终端输入产生信号拓展: 硬件中断2.调用系统函数向进程发信号3.硬件异常产生信号4.软件条件产生信号拓展: 核心转储技术总结一下: 引入 一、初识信…...

为深度学习创建PyTorch张量 - 最佳选项

为深度学习创建PyTorch张量 - 最佳选项 正如我们所看到的,PyTorch张量是torch.Tensor​ PyTorch类的实例。张量的抽象概念与PyTorch张量之间的区别在于,PyTorch张量为我们提供了一个可以在代码中操作的具体实现。 在上一篇文章中,我们看到了…...

MySQL 与 Redis 数据一致性 2

1. 强一致还是最终一致?2. 先写 MySQL 还是先写Redis?case 1 3. 缓存(Redis)更新还是清除?更新策略更新策略会有数据不一致问题?数据不一致的概率与影响如果使用监听binlog更新数据还会出现数据不一致问题?binlog的消费问题 使用消息队列行不行?其他方案总结: 数据不一致…...

Git | git reset命令详解

关注:CodingTechWork 引言 Git 是一款非常流行的分布式版本控制工具,它帮助开发者有效地管理代码历史,支持多种功能来帮助团队协作、追踪修改和维护代码质量。git reset是 Git 中最强大、最复杂的命令之一,它的主要作用是重置当前…...

Linux高并发服务器开发 第十四天(dup/duo2/fcntl 进程 pcb进程控制块 环境变量)

目录 1.dup 和 dup2 1.1dup 1.2dup2 2.fcntl 3.进程 3.1进程和程序 3.2并发 3.3cpu 3.5pcb进程控制块 3.6进程状态 4.环境变量 1.dup 和 dup2 1.1dup - 将 文件描述符 ,复制产生“新文件描述符” 并返回。新、旧文件描述符,指向同一文件。 …...

[MySQL | 二、基本数据类型]

基本数据类型 一、数值类型举例表结构1. 整数类型zerofill属性 与 int(n) 中 n 的关系 2.bit类型3. 小数类型float类型decimal类型 二、字符串类型1. char2. varchar如何选择定长或变长字符串? 3. 日期时间类型(date datetime timestamp)4. enum枚举类型5. set多选类…...

第G1周:生成对抗网络(GAN)入门

>- **🍨 本文为[🔗365天深度学习训练营]中的学习记录博客** >- **🍖 原作者:[K同学啊]** 本人往期文章可查阅: 深度学习总结 基础任务 1.了解什么是生成对抗网络2.生成对抗网络结构是怎么样的3.学习本文代码&am…...

ROS2 准备工作(虚拟机安装,Ubuntu安装,ROS2系统安装)

准备工作 虚拟机安装 大家可以自行去安装VMware链接:https://pan.baidu.com/s/1KcN1I9FN--Sp1bUsjKqWVA?pwd6666 提取码:6666(提供者:零基础编程入门教程) 教程:【【2025最新版】VMware虚拟机安装教程,手把手教你免…...

FreeType 介绍及 C# 示例

FreeType 是一个开源的字体渲染引擎,用于将字体文件(如 TrueType、OpenType、Type 1 等)转换为位图或矢量图形。它广泛应用于操作系统、图形库、游戏引擎等领域,支持高质量的字体渲染和复杂的文本布局。 FreeType 的核心功能 字体…...

BertTokenizerFast 和 BertTokenizer 的区别

BertTokenizerFast 和 BertTokenizer 都是用于对文本进行标记化的工具,主要用于处理和输入文本数据以供 BERT 模型使用。它们都属于 HuggingFace 的 transformers 库。 主要区别 底层实现: BertTokenizer: 这是一个使用纯 Python 实现的标记器&#xff…...

OpenGL中Shader LOD失效

1)OpenGL中Shader LOD失效 2)DoTween的GC优化 3)开发微信小程序游戏有没有类似Debug真机图形的方法 4)射线和Mesh三角面碰撞检测的算法 这是第418篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了U…...

[操作系统] 深入理解约翰·冯·诺伊曼体系

约翰冯诺依曼(John von Neumann,1903年12月28日—1957年2月8日),原名诺伊曼亚诺什拉约什(Neumann Jnos Lajos),出生于匈牙利的美国籍犹太人数学家,20世纪最重要的数学家之一&#xf…...

计算机网络(五)运输层

5.1、运输层概述 概念 进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时…...

网络分析仪测试S参数

S参数的测试 一:S参数的定义 S参数(Scattering Parameters,散射参数)是一个表征器件在射频信号激励下的电气行为的工具,它以输入信号、输出信号为元素的矩阵来表现DUT的“传输”和“散射”效应,输入、输出…...

什么是数据仓库?

什么是数据仓库? 数据仓库(Data Warehouse,简称DW)是一种面向分析和决策的数据存储系统,它将企业中分散的、异构的数据按照一定的主题和模型进行集成和存储,为数据分析、报表生成以及商业智能(…...

.NET8.0多线程编码结合异步编码示例

1、创建一个.NET8.0控制台项目来演示多线程的应用 2、快速创建一个线程 3、多次运行程序,可以得到输出结果 这就是多线程的特点 - 当多个线程并行执行时,它们的具体执行顺序是不确定的,除非我们使用同步机制(如 lock、信号量等&am…...

使用 Charles 调试 Flutter 应用中的 Dio 网络请求

为了成功使用 Charles 抓取并调试 Flutter 应用程序通过 Dio 发起的网络请求,需遵循特定配置步骤来确保应用程序能够识别 Charles 的 SSL 证书,并正确设置代理服务器。 配置 Charles 以支持 HTTPS 请求捕获 Charles 默认会拦截 HTTP 流量;…...

老centos7 升级docker.io为docker-ce 脚本

旧的centos7 之前安装的是docker.io 由于一些原因,像docker compose 等版本变化,以及docker.io源受限等,我们要更新到docker-ce 并使用国内阿里云的源怎么处理?下面直接上脚本,upgrade-docker.sh #!/bin/bashset -e# 创建临时目录 TEMP_DIR"./tmp" mkdir -p "…...

Go Ebiten小游戏开发:贪吃蛇

贪吃蛇是一款经典的小游戏,玩法简单却充满乐趣。本文将介绍如何使用 Go 语言和 Ebiten 游戏引擎开发一个简单的贪吃蛇游戏。通过这个项目,你可以学习到游戏开发的基本流程、Ebiten 的使用方法以及如何用 Go 实现游戏逻辑。 项目简介 贪吃蛇的核心玩法是…...