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

设计模式——过滤器模式在 Spring 中的实践

设计模式——过滤器模式在 Spring 中的实践

  • 基础介绍
  • 模块介绍
  • 简单实现
  • 业务落地
  • 额外问题

基础介绍

过滤器模式(Filter Pattern),也称为标准模式(Criteria Pattern),是结构型设计模式之一,旨在通过应用多个条件标准来筛选对象集合。此模式的核心思想是允许对象集合按照不同的标准被过滤,并可以灵活组合这些标准进行复杂的筛选操作。在开发中,尤其是在需要根据多种动态条件对数据进行筛选时,这种模式具有极大的灵活性和可扩展性

这个模式特别适合以下场景:

  • 有大量对象集合,需要根据不同标准进行筛选
  • 筛选条件是动态的或组合复杂度较高
  • 希望筛选逻辑与对象本身的结构解耦,从而保持代码清晰、可扩展

模块介绍

  • 过滤器接口(Filter/Criteria):定义过滤行为的接口,所有的标准都需要实现这个接口
  • 具体过滤器类(ConcreteFilter/ConcreteCriteria):实现标准接口,封装具体的筛选逻辑
  • 对象集合(Items/Objects to be filtered):要被过滤的对象集合。这些对象通常是具有共同属性的实例,例如一组人、一组产品等
  • 客户端(Client):使用具体过滤器类来筛选对象集合。客户端将对象集合和过滤器结合起来,以获得符合条件的对象

请添加图片描述

简单实现

定义实体类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Person {/*** 名称*/private String name;/*** 性别*/private String gender;/*** 婚姻状况*/private String maritalStatus;
}

接口:

/*** 过滤器,进行筛选*/
public interface Filter {/*** 筛选出符合标准的返回* @param persons 集合* @return 返回符合标准的集合*/List<Person> filter(List<Person> persons);
}

子类

/*** 筛选出男性*/
public class FilterMale implements Filter {@Overridepublic List<Person> filter(List<Person> persons) {List<Person> malePersons = new ArrayList<Person>();for (Person person : persons) {if(person.getGender().equalsIgnoreCase("男")){malePersons.add(person);}}return malePersons;}
}/*** 筛选出女性*/
public class FilterFemale implements Filter {@Overridepublic List<Person> filter(List<Person> persons) {List<Person> femalePersons = new ArrayList<Person>();for (Person person : persons) {if(person.getGender().equalsIgnoreCase("女")){femalePersons.add(person);}}return femalePersons;}
}

测试:

    public static void main(String[] args) {List<Person> persons = getPerson();//男性Criteria male = new CriteriaMale();//单身Criteria single = new CriteriaSingle();//女性CriteriaFemale criteriaFemale = new CriteriaFemale();printPersons("女性: ", criteriaFemale.meetCriteria(persons));printPersons("单身: ", single.meetCriteria(persons));}

业务落地

在真实业务中,肯定不能写向上面 case 一样的代码,在真实场景落地的时候,我们会遇到以下痛点:

  • spring 容器管理依赖,但是使用过滤器模式时,我们可能需要一个 POJO 的类,来管理过滤过程中的各种数据。我们可能在过滤的过程中,需要查询 缓存、db 中的各种数据,这个时候我们可以在构造函数中将依赖传入,或者使用类似 SpringUtil 的组件获取,那在该场景中需要如何优雅的让非 spring 管理的类去访问 spring 容器中的类呢
  • 上面的 case 除了 persons 没有其它任何信息,在实际使用的过程中,我们可能需要传入一些额外信息,来辅助过滤。我们应该如何处理呢

为此,我们可能需要做以下改动:

接口:

/*** 过滤器,进行筛选*/
public interface Filter<T, A> {/*** 筛选出符合标准的返回* @param persons 集合* @return 返回符合标准的集合*/List<T> filter(List<T> data, A additionalData);/*** 获取过滤器策略** @return 过滤器策略*/FilterStrategyEnum getFilterStrategy();
}

枚举类就不用特地贴出来了,我们来看看实现类:

/*** 筛选出男性*/
@Slf4j
@Service
public class FilterMale implements Filter<Person, MaleFilterEntity> {@Resourceprivate UserCommentService userCommentService;@Overridepublic List<Person> filter(List<Person> persons, MaleFilterEntity additionalData) {List<Person> malePersons = new ArrayList<Person>();// 可能需要做一些查询操作userCommentService.query(additionalData.getCity());for (Person person : persons) {// 查出性别为男并且身高大于 x 的人if (person.getGender().equalsIgnoreCase("男") && person.getLength() > additionalData.getLength()){malePersons.add(person);}}return malePersons;}@Overridepublic FilterStrategyEnum getFilterStrategy() {return FilterStrategyEnum.MALE;}
}

在业务中,我们可能需要使用一个 chain 来注册或者使用拦截器

public class FilterChain<T> {private List<T> data;public FilterChain(List<T> data) {this.data = data;}public <A> FilterChain<T> filter(FilterStrategyEnum strategyEnum, A additionalData) {Filter filter = FILTER_MAP.get(strategyEnum);if (filter == null) {return this;}data = filter.filter(data, additionalData);return this;}public List<T> getData() {return data;}
}

我们要有一个地方管理枚举和实现类的对应关系:

@Configuration
public class FilterContext {public static final Map<FilterStrategyEnum, Filter> FILTER_MAP = new HashMap<>();@Resourceprivate List<Filter> filters;@PostConstructpublic void init() {filters.forEach(handler -> FILTER_MAP.put(handler.getFilterStrategy(), handler));}
}

至此,我们将过滤器模式嵌入工程中了,它与我们的业务代码完全解耦合,并且提供了可插排式的逻辑功能

额外问题

那么问题来了,上面的代码和下面代码,功能实现上一模一样,为什么还需要用上面的实现呢:

    public void filter(HashSet<FilterStrategyEnum> enumsSet) {if (CollectionUtils.isEmpty(persons)) {return;}if (enumsSet.contains(FilterStrategyEnum.MALE)) {filterMaleStrategy();}if (enumsSet.contains(FilterStrategyEnum.FEMALE)) {filterFemaleStrategy();}}

相关文章:

设计模式——过滤器模式在 Spring 中的实践

设计模式——过滤器模式在 Spring 中的实践 基础介绍模块介绍简单实现业务落地额外问题 基础介绍 过滤器模式&#xff08;Filter Pattern&#xff09;&#xff0c;也称为标准模式&#xff08;Criteria Pattern&#xff09;&#xff0c;是结构型设计模式之一&#xff0c;旨在通…...

15.7 LangChain 版智能销售顾问实战:构建企业级知识驱动型对话系统

LangChain 版智能销售顾问实战:构建企业级知识驱动型对话系统 关键词:LangChain 销售系统、知识图谱集成、对话状态管理、生产级部署、多链协同优化 1. LangChain 销售系统架构设计 1.1 模块化架构全景图 #mermaid-svg-42MLuD3aMcpX0y8c {font-family:"trebuchet ms&q…...

QT异步编程之线程池QThreadPool

一、概述 在一个应用程序中&#xff0c;我们需要多次使用线程&#xff0c;也就意味着&#xff0c;我们需要多次创建并销毁线程。而创建线程并销毁线程的过程势必会消耗内存。QThreadPool是Qt框架中用于管理线程池的类。它提供了一种高效的方式来管理和重用线程&#xff0c;从而…...

HTMLS基本结构及标签

HTML5是目前制作网页的核心技术&#xff0c;有叫超文本标记语言。 基本结构 声明部分位于文档的最前面&#xff0c;用于向浏览器说明当前文档使用HTML标准规范。 根部标签位于声明部分后&#xff0c;用于告知浏览器这是一个HTML文档。< html>表示文档开始&#xff0c;&l…...

linux(2)用户管理

文章目录 1. 切换用户2. 添加删除用户3.写改密码 1. 切换用户 # 切换用户名&#xff0c;不切换工作目录 su 用户名 # 一起切换工作目录 su - 用户名 # 退出用户 exit2. 添加删除用户 # 添加用户 sudo adduser username # 推荐sudo useradd -m -s /bin/bash 用户名-m 如果创建…...

蓝桥杯好题推荐----高精度乘法

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 题目链接 P1303 A*B Problem - 洛谷https://www.luogu.com.cn/problem/P1303 解题思路 这道题的思路&#xff0c;其实和前面差不多&#xff0c;我们主要说一下最为关键的部分&…...

辛格迪客户案例 | 甫康(上海)健康科技有限责任公司药物警戒管理系统(PVS)项目

01 案例企业 甫康(上海)健康科技有限责任公司&#xff08;简称“甫康”&#xff09;该公司成立于2015年11月3日。公司的核心团队由来自中国和国外顶级制药公司的专业人士组成&#xff0c;与中国科学院上海药物研究所等知名研究机构保持紧密合作。此外&#xff0c;甫康药业还与…...

【Java】System 类

目录 静态字段标准输入输出流相关 常用静态方法数组操作时间操作系统操作属性操作安全管理 其他方法 System 类位于 java.lang 包下&#xff0c;是一个 final 类&#xff0c;意味着它不能被继承。并且其所有构造方法都是私有的&#xff0c;这使得我们无法创建 System 类的实例&…...

认识苹果APP开发框架

苹果APP开发框架是苹果公司为开发者提供的一套工具和API&#xff0c;旨在帮助开发者高效、安全地构建高质量的iOS、macOS、watchOS和tvOS应用程序。以下是对苹果APP开发框架的详细认识&#xff1a; 1. 框架的定义与作用 框架&#xff08;Framework&#xff09;是包含方法资源…...

SQL分组问题

下列为电商公司用户访问时间数据 统计某个用户连续的访问记录&#xff0c;如果时间间隔小于60s&#xff0c;就分为一组 id ts 1001 17523641234 1001 17523641256 1002 17523641278 1001 17523641334 1002 17523641434 1001 17523641534 1001 17523641544 1002 17523…...

笔记20250225

关于上拉电阻和下拉电阻的作用 原理 上拉电阻&#xff1a;在上拉电阻所连接的导线上&#xff0c;如果外部组件未启用&#xff0c;上拉电阻则“微弱地”将输入电压信号“拉高”。当外部组件未连接时&#xff0c;对输入端来说&#xff0c;外部“看上去”就是高阻抗的&#xff0c…...

千峰React:案例一

做这个案例捏 因为需要用到样式&#xff0c;所以创建一个样式文件&#xff1a; //29_实战.module.css .active{text-decoration:line-through } 然后创建jsx文件&#xff0c;修改main文件&#xff1a;导入Todos&#xff0c;写入Todos组件 import { StrictMode } from react …...

说说JVM的底层原理(JAVA是如何运行的)?

JVM 底层原理深度解析 Java 虚拟机&#xff08;JVM&#xff09;是 Java 程序运行的核心环境&#xff0c;其设计融合了内存管理、类加载、垃圾回收和高效执行等复杂机制。以下从底层视角详细解析其核心模块&#xff0c;并结合实际场景说明其工作原理。 一、类加载机制 1. 类加…...

IO 和 NIO 有什么区别?

文章目录 阻塞模式与非阻塞模式数据处理方式通信模型应用场景 阻塞模式与非阻塞模式 IO&#xff1a;是阻塞式的 IO 操作。在传统的 IO 中&#xff0c;当一个线程执行读操作或者写操作时&#xff0c;该线程会被阻塞&#xff0c;直到操作完成。例如&#xff0c;在从文件读取数据…...

JVM 面试

JVM 运行时内存区域划分是怎样的&#xff1f; 程序计数器&#xff1a;记录当前线程执行的字节码指令的地址&#xff0c;是线程私有的。 Java 虚拟机栈&#xff1a;每个方法在执行时都会创建一个栈帧&#xff0c;用于存储局部变量表、操作数栈、动态链接、方法出口等信息&#…...

七、Redis集群高可用

一、节点与插槽管理 添加主节点 准备节点 首先准备一个新的节点&#xff0c;添加配置文件。 vi /usr/local/redis/cluster/conf/redis-6377.conf # 放行访问IP限制 bind 0.0.0.0 # 端口 port 6377 # 后台启动 daemonize yes # 日志存储目录及日志文件名 logfile "/us…...

WPF12-MVVM

目录 1. 什么是MVVM2. 实现简单MVVM2.1. Part 12.2. Part 21. 什么是MVVM MVVM 是 Model-View-ViewModel 的缩写,是一种用于构建用户界面的设计模式,是一种简化用户界面的事件驱动编程方式。 MVVM 的目标是实现用户界面和业务逻辑之间的彻底分离,以便更好地管理和维护应用…...

多智能体博弈代码案例

多智能体博弈代码案例 直接可用,我不吝啬 from openai import OpenAI import random# 定义不同人物角色的提示 CHARACTER_PROMPTS = {"专家": "你是该领域的权威专家,知识渊博,回答严谨专业。"...

【AHK】资源管理器自动化办公实例/自动连点设置

此处为一个自动连续点击打开检查的自动化操作案例&#xff0c;没有quicker的鼠键录制&#xff0c;不常用了&#xff0c;做个备份 #MaxThreadsPerHotkey 2 ; 这个是核心&#xff01;&#xff01;&#xff01;&#xff01;确保可以同时运行多个热键或标签global isRunning : tru…...

Python安装环境变量

1、确保已经安装python到电脑上 2、到系统上环境变量位置 3、新建 系统变量&#xff0c;变量名为PYTHON_HOME&#xff0c;变量值为python安装目录 4、 点击系统变量的path&#xff0c;并新建环境变量 5、测试 &#xff0c;windowsR,并输入cmd&#xff0c;尝试命令python --ver…...

Flink同步数据mysql到doris问题合集

Flink同步数据mysql到doris 官方同步流程Doris安装下载地址导入镜像启动配置 Flink-cdc安装&#xff08;自制&#xff09;下载地址导入镜像启动命令 启动问题修复Flink报错Could not acquire the minimum required resources.作业报错 Mysql8.0 Public Key Retrieval is not al…...

Pytest测试用例执行跳过的3种方式

文章目录 1.前言2.使用 pytest.mark.skip 标记无条件跳过3.使用 pytest.mark.skipif 标记根据条件跳过4. 执行pytest.skip()方法跳过测试用例 1.前言 在实际场景中&#xff0c;我们可能某条测试用例没写完&#xff0c;代码执行时会报错&#xff0c;或者是在一些条件下不让某些…...

spring boot 连接FTP实现文件上传

spring boot 连接FTP实现文件上传 maven&#xff1a; <!--ftp--><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency>接口示例&#xff1a; ApiO…...

深入解析/etc/hosts.allow与 /etc/hosts.deny:灵活控制 Linux 网络访问权限

文章目录 深入解析/etc/hosts.allow与 /etc/hosts.deny&#xff1a;灵活控制 Linux 网络访问权限引言什么是 TCP Wrappers&#xff1f;工作原理 什么是 /etc/hosts.allow 和 /etc/hosts.deny&#xff1f;匹配规则配置语法详解配置示例允许特定 IP 访问 SSH 服务拒绝整个子网访问…...

短跑怎么训练提高最快·棒球1号位

棒球运动员的短跑能力直接影响跑垒、防守和进攻效率&#xff0c;提升短跑速度需结合专项需求&#xff08;如爆发力、加速度、变向能力&#xff09;进行系统训练。以下为针对性训练方案&#xff1a; 一、专项爆发力训练&#xff08;提升起跑速度&#xff09; 抗阻冲刺 用弹力带…...

USRP7440-通用软件无线电平台

1、产品描述 USRP7440基于第三代XILINX Zynq UltraScale RFSoC架构&#xff0c;它将射频ADC、DAC、ARM、FPGA等集成一体&#xff0c;瞬时带宽可以达到2.5GHz&#xff0c;尤其适合于射频直采应用&#xff0c;比如通信与雷达。 第一代RFSOC高达4GHz • 8x 或 16x 6.554GSPS DAC…...

51c大模型~合集48

我自己的原文哦~ https://blog.51cto.com/whaosoft/11940475 #Mini-Omni 让大模型能听会说&#xff0c;国内机构开源全球首个端到端语音对话模型 本文出自启元世界多模态算法组&#xff0c;共同一作是来自清华大学的一年级硕士生谢之非与启元世界多模态负责人吴昌桥&…...

004-利用Docker安装Mysql

利用Docker安装Mysql 一、在镜像仓库找到 Mysql1.镜像仓库地址2.复制命令3.下载Mysql镜像4.查看镜像 二、创建实例并启动三、用本地工具连接数据库四、设置 Mysql 配置 一、在镜像仓库找到 Mysql 1.镜像仓库地址 https://hub.docker.com 2.复制命令 docker pull mysql:8.0…...

Web自动化之Selenium添加网站Cookies实现免登录

在使用Selenium进行Web自动化时&#xff0c;添加网站Cookies是实现免登录的一种高效方法。通过模拟浏览器行为&#xff0c;我们可以将已登录状态的Cookies存储起来&#xff0c;并在下次自动化测试或爬虫任务中直接加载这些Cookies&#xff0c;从而跳过登录步骤。 Cookies简介 …...

UEditor集成Markdown编辑功能方案

分步解决方案&#xff1a; 1. 推荐免费开源Markdown库 推荐使用 markdown-it&#xff08;MIT协议&#xff09; 官网&#xff1a;https://github.com/markdown-it/markdown-it 特点&#xff1a;轻量级&#xff08;15KB&#xff09;、扩展性强、支持CommonMark规范、中文文档丰…...

综合练习 —— 递归、搜索与回溯算法

目录 一、1863. 找出所有子集的异或总和再求和 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 代码思路 问题分析 核心思想 实现细节 代码解析 初始化 DFS 函数 时间复杂度 空间复杂度 示例运行 输入 运行过程 总结 二、 47. 全排列 II - 力扣&a…...

Python之使用动态导包优化软件加载速度

在开发大型 Python 软件时,可能会遇到以下问题:由于静态导入了大量模块,导致软件启动时间过长,用户体验不佳。例如,一个复杂的桌面应用程序或 Web 服务可能依赖于多个大型库(如 numpy、pandas、torch 或 Yolo),这些库在启动时被静态导入,即使某些功能模块在启动时并不…...

第16天:C++多线程完全指南 - 从基础到现代并发编程

第16天&#xff1a;C多线程完全指南 - 从基础到现代并发编程 一、多线程基础概念 1. 线程创建与管理&#xff08;C11&#xff09; #include <iostream> #include <thread>void hello() {std::cout << "Hello from thread " << std::this_…...

建筑兔零基础人工智能自学记录33|基础知识1

插入学习一下一些基础概念&#xff1a; 1、基本概念 人工智能&#xff1a;让机器像人一样思考。机器学习ML&#xff1a;计算机获取知识的过程。深度学习&#xff1a;机器的一种思考方式&#xff08;借助神经网络&#xff09;。 三者关系 2、机器学习的方式 监督学习&#x…...

win11编译pytorchaudio cuda128版本流程

1. 前置条件 本篇续接自 win11编译pytorch cuda128版本流程&#xff0c;阅读前请先参考上一篇配置环境。 访问https://kkgithub.com/pytorch/audio/archive/refs/tags/v2.6.0.tar.gz下载源码&#xff0c;下载后解压&#xff1b; 2. 编译 在visual studio 2022安装目录下查找…...

Python—Excel全字段转json文件(极速版+GUI界面打包)

目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码(简易版)5、进阶版(GUI)总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——…...

NLP学习记录十一:位置编码

目录 一、位置编码的意义 二、位置编码方法 三、代码实现 一、位置编码的意义 在标准的注意力机制中&#xff0c;每个查询都会关注所有的键&#xff0d;值对并生成一个注意力输出&#xff0c;模型并没有考虑到输入序列每个token的顺序关系。 以["我&qu…...

算法之算法主题

程序员数学 《程序员数学 v2.0》 | 小傅哥 bugstack 虫洞栈 智力题 头脑风暴题目 | Java 全栈知识体系...

【三维分割】LangSplat: 3D Language Gaussian Splatting(CVPR 2024 highlight)

论文&#xff1a;https://arxiv.org/pdf/2312.16084 代码&#xff1a;https://github.com/minghanqin/LangSplat 文章目录 一、3D language field二、回顾 Language Fields的挑战三、使用SAM学习层次结构语义四、Language Fields 的 3DGS五、开放词汇查询&#xff08;Open-voca…...

Wireshark:自定义类型帧解析

文章目录 1. 前言2. 背景3. 开发 Lua 插件 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 Wireshark 不认识用 tcpdump 抓取的数据帧&#xff0c;仔细分析相关代码和数据帧后&#xff0c…...

ES6 特性全面解析与应用实践

1、let let 关键字用来声明变量&#xff0c;使用let 声明的变量有几个特点&#xff1a; 1) 不允许重复声明 2) 块儿级作用域 3) 不存在变量提升 4) 不影响作用域链 5) 暂时性死区 6&#xff09;不与顶级对象挂钩 在代码块内&#xff0c;使用let命令声明变量之前&#x…...

Qt跨线程信号槽调用:为什么信号不能像普通函数那样调用

1. 信号与槽机制的基本原理 在 Qt 中&#xff0c;信号与槽机制是一种事件驱动的通信方式&#xff0c;用于对象之间的解耦交互。其关键特点如下&#xff1a; 信号不能直接调用 信号只是一个声明&#xff0c;并没有实际的函数实现。它们通过 emit 关键字在对象内部被触发&…...

Zookeeper(79)如何进行Zookeeper的监控?

对 Zookeeper 进行监控是确保其高可用性和性能的关键步骤。监控 Zookeeper 通常包括以下几个方面&#xff1a; 健康检查&#xff1a;检查 Zookeeper 节点是否在线。性能指标&#xff1a;监控关键性能指标&#xff0c;如请求延迟、事务处理量等。日志监控&#xff1a;监控 Zook…...

【江科大STM32】TIM输出比较-PWM功能(学习笔记)

一、PWM驱动LED呼吸灯 接线图&#xff1a; PWM的初始化: 具体步骤&#xff1a; ①RCC开启时钟&#xff08;把要用的TIM外设和GPIO外设时钟都打开&#xff09; ② 配置时基单元&#xff0c;包括前面的时钟源选择 ③配置输出比较单元&#xff0c;里面包括CCR的值&#xff…...

playbin之autoplug_factories源码剖析

一、autoplug_factories_cb /* Called when we must provide a list of factories to plug to pad with caps.* We first check if we have a sink that can handle the format and if we do, we* return NULL, to expose the pad. If we have no sink (or the sink does not…...

Spring Cloud之注册中心之Nacos的使用

目录 Naacos 服务注册/服务发现 引⼊Spring Cloud Alibaba依赖 引入Nacos依赖 引入Load Balance依赖 配置Nacos地址 服务端调用 启动服务 Naacos Nacos是Spring Cloud Alibaba的组件, Spring Cloud Alibaba遵循Spring Cloud中定义的服务注册, 服务发现规范. 因此使⽤Na…...

React antd的datePicker自定义,封装成组件

一、antd的datePicker自定义 需求&#xff1a;用户需要为日期选择器的每个日期单元格添加一个Tooltip&#xff0c;当鼠标悬停时显示日期、可兑换流量余额和本公会可兑流量。这些数据需要从接口获取。我需要结合之前的代码&#xff0c;确保Tooltip正确显示&#xff0c;并且数据…...

【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别

老式路由器TPLINK&#xff0c;接入校园网后一人登录&#xff0c;所有人都能通过连接此路由器上网&#xff0c;无法解决遂上网搜索&#xff0c;无果&#xff0c;幸而偶然看到一个帖子说要把信号源网线接入路由器lan口&#xff0c;开启新世界。 一、wan-lan&#xff0c;lan-lan区…...

散户情绪周期模型(情绪影响操作)

目录 一、个股上涨阶段情绪演化二、个股下跌阶段情绪演化三、底部震荡阶段情绪演化四、情绪观察与操作工具箱1. 情绪自测量表&#xff08;每日收盘后记录&#xff09;2. 情绪-指标对照表 五、高阶情绪管理技巧1.认知重构训练2.生理指标监控&#xff08;需配合智能手表&#xff…...

对比Grok3 普通账户与 30 美元 Super 账户:默认模式、Think 和 DeepSearch 次数限制以及如何升级

面对这个马斯克旗下的"最聪明"的人工智能&#xff0c;很多人都不知道他们的基本模式&#xff0c;本期将从几个方面开始说明&#xff1a; Grok3的背景与功能 账户类型及其详细背景 使用限制 使用限制对比表 如何充值使用 Super 账户 纯干货&#xff0c;带你了解…...