自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不才的专栏

不积跬步无以至千里

  • 博客(296)
  • 收藏
  • 关注

原创 使用dot来画流程图

Dot是一种图形描述语言,属于Graphviz软件的一部分。Graphviz是一个用于可视化图形(图表、网络图等)的开源工具集。使用Dot语言,你可以创建并描述节点和边,从而生成图形。

2024-07-02 14:18:39 624

原创 什么是用户画像

用户画像(User Persona)是一种基于用户数据和行为特征创建的虚拟用户模型,用于更好地理解和描述目标用户群体。用户画像通常包含用户的基本信息、行为模式、需求、动机和痛点等,帮助企业在产品开发、市场营销和用户体验设计过程中做出更精准的决策。

2024-06-11 10:12:33 460

原创 C++协程

协程(Coroutine)是程序组件,可以在执行过程中暂停并在稍后继续执行。与传统的子例程(如函数或过程)不同,子例程一旦调用,必须等其返回后才能继续执行调用它的代码。协程则可以在执行过程中暂停,将控制权交还给调用者,并且可以在稍后从暂停的地方继续执行。可以在执行过程中暂停和恢复:这使得协程能够在需要的时候让出控制权,然后在适当的时候恢复执行。保持状态:协程在暂停时会保存其当前的执行状态(包括局部变量和程序计数器),在恢复时可以从上次暂停的地方继续执行。协同调度。

2024-06-08 17:41:17 821 2

原创 什么是OKR

OKR 是一种强大的目标管理工具,能够帮助组织和个人设定清晰、具体且具有挑战性的目标,并有效地追踪和实现这些目标。然而,为了充分发挥OKR的优势,需要正确理解其原则,避免常见的陷阱,并根据实际情况进行适当的调整和改进。通过平衡短期和长期目标,注重实际执行和反馈,OKR 可以成为推动组织和个人成长的重要助力。

2024-06-07 08:12:49 322

原创 vscode中使用代码片段(Snippets)来快速生成常用的代码模板

在 VS Code 中进行 C++ 编程时,可以使用代码片段(Snippets)来快速生成常用的代码模板。下面是一个简单的例子,演示如何使用代码片段在 C++ 文件中生成一个简单的类定义。

2024-06-07 00:18:01 925

原创 Elasticsearch简介

Elasticsearch 是一个基于 Apache Lucene 的开源搜索引擎,旨在实现分布式搜索和数据分析。Elasticsearch 通常与 Kibana、Logstash 和 Beats 一起使用,形成 ELK Stack,用于日志和事件数据分析、应用性能监控和业务数据可视化。

2024-06-06 23:32:47 1289 2

原创 RapidJSON

要在项目中使用 RapidJSON 库,需要首先下载并包含该库的头文件。

2024-06-06 23:21:53 539

原创 python中的预编译正则表达式

预编译正则表达式指的是使用Python的re模块中的函数提前将正则表达式的字符串形式编译成一个正则表达式对象。这样,当你需要在多个地方或多次使用同一个正则表达式时,你可以重用这个编译后的对象,而不是在每次使用时重新编译表达式。这种做法可以提高效率,特别是在需要频繁使用同一正则表达式进行匹配的场景中。

2024-06-01 22:14:47 552

原创 python正则表达式中的分组功能

在Python的re模块中,group()方法是用于从一个匹配的对象(例如,re.match或re.search返回的对象)中提取匹配的字符串。当你使用正则表达式进行匹配时,匹配对象会包含原始字符串中与模式匹配的部分。group()方法可以用来访问这些匹配的部分。group(0)group()group(n)n()n=1n=2如果正则表达式中包含了括号(用于分组),那么你可以通过group(n)来访问每个分组的匹配内容。

2024-06-01 22:03:08 385

原创 python中的正则表达式

Python中的正则表达式(Regular Expressions,简称regex)是一种强大的字符串处理工具,它通过定义搜索模式来匹配、查找、替换或拆分字符串。正则表达式在文本处理、数据清洗和验证等领域非常有用。Python通过内置的re模块提供了对正则表达式的支持。

2024-06-01 21:58:21 990

原创 什么是gRPC?

首先,创建一个Proto文件(calculator.proto),定义服务和消息类型。// 定义请求消息// 定义响应消息// 定义计算器服务。

2024-06-01 21:26:09 919

原创 RocksDb与LevelDb的区别

LevelDB 是一个开源的、嵌入式的键值存储引擎,由Google开发。它是一个轻量级的、高性能的数据库库,特别适合嵌入到需要高效读写操作的应用中。RocksDB 是一个高性能的键值存储引擎,它是由Facebook开发的,基于LevelDB。它专为需要高吞吐量和低延迟的场景而设计,特别适用于存储大量数据和需要快速访问的应用。无论是作为数据库的存储引擎、缓存系统还是日志系统,RocksDB都能够提供可靠和高效的解决方案。

2024-05-29 09:41:19 331

原创 分布式数据库的扩容思路

分布式数据库的扩容是一项复杂的工程,它要求数据库能够在不中断服务的情况下增加更多的存储资源和计算能力。扩容通常涉及增加节点(服务器实例)和重新分配数据。这个过程需要谨慎进行,以确保数据的一致性、可用性和性能不受影响。

2024-05-29 09:22:15 473

原创 C++模板元编程--函数萃取

在C++中,是一个非常有用的模板函数,它是标准库头文件的一部分。它的主要作用是在不创建对象的情况下,获取该类型的引用,从而允许在编译时表达式中使用该类型的成员函数或成员变量,即使没有默认构造函数也可以。这在模板编程和类型萃取(type traits)中尤其有用,特别是在编写依赖于SFINAE(Substitution Failure Is Not An Error)的代码时。

2024-05-29 06:00:00 492

原创 benchmark::State & benchmark 原理

除了时间,你还可以通过来报告其他自定义指标。// 测试代码// 设置自定义指标。

2024-05-28 23:44:03 990

原创 Google Benchmark库 简介

在C++中,进行性能测试(Benchmarking)是一个常见的需求,用以测量代码块的执行时间,从而对代码进行优化。Google Benchmark库是一个广泛使用的C++库,专门用于编写稳健的基准测试。

2024-05-28 23:37:51 815

原创 一个模板元函数来检查一个类是否有一个特定的成员

你可以通过创建一个模板元函数来检查一个类是否有一个特定的成员。在这个例子中,是一个模板元函数,它检查其模板参数T是否有一个名为type的成员。它首先假设T没有type成员,然后通过模板特化来检查T是否真的有type成员。如果T::type存在,那么就是void,所以就是,这匹配了模板特化,所以是true。如果T::type不存在,那么。

2024-05-24 21:00:00 716

原创 string_view

是 C++17 引入的一种非拥有型的字符串处理工具,它提供了对字符序列的轻量级、不可修改的视图。与直接使用或字符数组相比,可以提高性能和减少内存使用,因为它不负责管理字符串数据的存储和生命周期,仅仅是提供一种访问已存在字符串数据的方法。

2024-05-24 09:12:24 277

原创 什么是监督学习和无监督学习

用一个表格来对比监督学习和无监督学习,可以更直观地展示它们的区别和特点。

2024-05-18 15:18:36 299

原创 std::stringstream的原理和使用时的注意事项

是 C++ 标准库中的一个类,位于头文件中。它提供了一种在内存中操作字符串的方式,类似于文件流的操作。继承自,因此它具有输入流 () 和输出流 () 的功能。

2024-05-18 11:10:23 203

原创 如何理解机器学习中的端到端

来训练模型,因为模型需要从数据中学习到所有的特征和规律。其次,端到端模型通常比较复杂,需要更多的计算资源和时间来训练。最后,由于模型是自动学习的,因此可能会导致模型的可解释性较差,难以理解模型的决策过程。端到端机器学习的优势在于它可以自动化整个流程,减少人工干预,提高效率。同时,由于模型可以从原始数据中直接学习,因此有可能发现人类无法察觉的模式和特征,从而提高模型的性能。总的来说,端到端机器学习是一种强大的方法,可以自动化整个机器学习流程,并且有可能提高模型的性能。然而,端到端机器学习也存在一些缺点。

2024-05-18 11:05:50 315

原创 std::type_index 用在什么地方

是一个类,它的对象表示类型的标识符。它可以用于在运行时比较两个类型是否相同,或者在容器中存储类型标识符。作为键,以类型名称(字符串)作为值。然后,我们用不同类型的。还可以用于实现一些设计模式,例如访问者模式。和相应的类型名称填充了映射。可以用作在运行时确定应该调用哪个函数的键。在这个例子中,我们首先创建了一个。常用于标识数据类型。运算符获取类型,并将其转换为。,从映射中检索每种类型的名称。中存储每种类型的元数据。

2024-05-14 08:28:02 258

原创 推荐系统是什么

推荐系统是一种旨在向用户推荐他们可能感兴趣的产品、服务或信息的技术和工具。这些系统通过分析用户的历史行为、偏好、社交网络、上下文信息等数据,预测用户可能喜爱或感兴趣的内容。推荐系统广泛应用于各种在线服务平台,包括电子商务、社交媒体、内容提供商(例如新闻、视频和音乐)、在线广告等,以帮助改善用户体验,增加用户满意度和平台的用户粘性,同时也增加销售量和广告收入。

2024-05-10 09:32:16 638

原创 闭包是什么?

在需要自定义排序规则时,例如使用std::sort对自定义类型数组或容器排序,lambda表达式允许你以简洁的方式提供比较逻辑。});// 输出: 1 2 3 4 5C++中的闭包(通过lambda表达式)提供了一种强大的方式来编写清晰、灵活且高效的代码。它们的应用场景涵盖了从STL算法的使用到并发编程、事件处理等多个方面,显著提升了C++编程的表达力和实用性。

2024-05-10 09:20:46 527

原创 什么是函数式编程?

在函数式编程中,函数是"第一类"实体,意味着它们可以作为参数传递给其他函数,可以作为返回值,也可以被赋值给变量。我们将展示如何使用C++的lambda表达式和标准模板库(STL)中的算法来实现一个函数,该函数接受一个整数列表,并返回一个新列表,其中包含原列表中每个数的平方。在函数式编程中,常常会将小的、专一的函数组合起来,完成更复杂的操作,这样有助于代码的可读性和可维护性。:许多函数式编程语言拥有强大的类型系统,支持类型推断,使得代码更加安全和清晰,同时减少了需要明确声明类型的需求。

2024-05-10 09:11:14 442

原创 什么是网页反作弊

隐藏文本和链接:在网页中用与背景色相同的颜色编写文本或链接,或者使用CSS让文本变得不可见,以便在不影响用户体验的情况下提高关键词密度。链接分析:分析网页的外部和内部链接,比如链接的数量、链接的质量、链接的自然性等,可以识别出作弊的链接农场。举报和惩罚:对于被发现的作弊行为,搜索引擎会进行惩罚,比如降低排名、删除索引等,也会接受用户的举报。这些反作弊方法的目标是保护搜索结果的公正性和用户的利益,防止作弊行为对搜索引擎的影响。内容剽窃:复制他人的内容到自己的网页,试图提高搜索引擎的内容排名。

2024-05-08 23:19:10 588

原创 Boost.Preprocessor库

使用预处理器,开发者可以定义宏,进行条件编译,以及包含其他文件。Boost.Preprocessor库是Boost C++库的一部分,提供了一组扩展的预处理器元编程功能。Boost.Preprocessor库的主要优点是能够在编译阶段生成代码,这可以减少运行时的计算量,提高程序的效率。在这个例子中,BOOST_PP_SEQ_FOR_EACH宏将打印序列(1)(2)(3)(4)(5)中的每个元素。这个例子中,BOOST_PP_TUPLE_ELEM宏将打印元组TUPLE中的第三个元素,也就是3。

2024-05-08 00:09:51 395

原创 C++中不要重新定义继承而来的non-virtual函数

这意味着即使通过基类的指针或引用调用该函数,也会调用派生类中的版本,这可能违反了多态性原则,导致无法调用预期的基类函数。:非虚函数不支持运行时多态,这意味着即便派生类中有与基类同名的函数,通过基类指针或引用调用该函数时,总是会调用基类的实现,而不是派生类的实现。:重定义非虚函数可能会导致派生类与基类之间的耦合增强,因为派生类需要知道基类的具体实现细节,并且在派生类中复制这些细节。:如果在派生类中重定义了基类的非虚函数,任何对基类函数的修改都需要在所有派生类中进行检查和相应的修改,这增加了代码的维护难度。

2024-05-05 16:32:39 401

原创 std::any简介

这在某些应用程序中可能非常有用,比如插件架构,其中插件可能需要在运行时向宿主应用程序提供不同类型的数据。类的用途在于提供一种方式,用以在同一容器中存储不同类型的对象,并在运行时查询和访问这些对象。是 C++17 标准库中引入的一个类型安全的容器,它可以存储任意类型的单个值。:当你需要在运行时进行动态类型操作时,例如在脚本语言的绑定或动态类型系统中,时,需要注意类型安全的问题,因为尝试提取错误类型的值将抛出。,你可以在一个统一的容器中存储不同类型的配置数据。在这个例子中,我们首先将一个整数存储在。

2024-05-05 09:15:45 278

原创 科学的调试方法

这有助于你跟踪你的进展,并且如果你的第一个尝试没有找到问题,这些信息可能会很有用。测试和验证: 一旦你认为找到了问题的解决方案,编写测试来验证你的修复确实解决了问题,并且没有引入新的问题。理解系统:在深入代码之前,充分理解你的系统和软件的架构。查看代码变更: 查看最近的代码变更可能会提供线索,因为新引入的bug通常与最近的变更有关。学习和文档化: 从每次调试经历中学习,并且记录重要的发现以及解决问题的方法,以备将来参考。分析和理论化: 分析问题的症状和你系统的行为。基于你的知识,形成关于导致问题的原因的。

2024-05-05 00:49:38 143

原创 当redis的存储空间满了,会发生什么?

当Redis的存储空间满了时,它的行为取决于配置的最大内存策略(maxmemory-policy)。Redis的数据淘汰策略主要围绕两个关键因素展开:键是否设置了过期时间,以及键的使用频率或最近使用情况。这些策略之间的关系可以从它们是如何影响键的淘汰决策中看出。

2024-05-04 22:52:34 834

原创 常见的负载均衡策略

负载均衡策略是分布式系统设计中的关键组成部分,用于在多个服务器或资源间分配客户端请求,以提高系统的整体性能和可靠性。

2024-05-04 22:26:46 349

原创 什么是Query理解和Query改写?

对于更复杂的查询,搜索引擎可能会对查询进行结构化处理,以解析用户的具体需求。Query改写(Query Rewriting)是搜索引擎优化搜索结果的一个技术手段,它通过对用户输入的搜索查询(Query)进行一系列的修改和转换,旨在更好地理解用户的搜索意图并提供更相关的搜索结果。Query改写的目的是让搜索引擎能够更准确地匹配用户的查询和搜索目的,从而提高用户的满意度和搜索体验。:搜索引擎可能会去除查询中的常见但不太有意义的词汇,如“the”,“is”,“at”等,因为它们对于理解查询的本质意义并不重要。

2024-05-04 22:19:35 747

原创 protobuf在配置文件管理上的应用

虽然Protobuf是一个强大的工具,但它通常不是用于简单配置文件的首选,因为它生成的是二进制文件,而不是人类可读的文本文件,如JSON或YAML。然而,对于需要高效传输和读取的复杂配置数据,或者在多个服务之间共享配置数据的情况,Protobuf是一个很好的选择。:在应用程序中,你可以使用生成的数据访问类读取(反序列化)配置文件中的数据,或者写入(序列化)新的配置数据。:首先,你需要使用Protobuf的语法定义你的配置文件的结构。:应用程序可以根据解析后的配置数据进行初始化或者根据当前的需求调整配置。

2024-05-03 20:58:37 473 1

原创 Homebrew是什么?

Homebrew 是一个开源的包管理器,专为 macOS 设计,用于简化在 macOS 上安装、更新和管理软件的过程。Homebrew 填补了 macOS 系统自带的包管理工具的空白,它通过用户友好的命令行界面,提供了大量的软件包(formulae),允许用户轻松地安装和维护各种开源软件、应用程序和开发工具。

2024-05-03 20:06:54 589

原创 git简介

提交是项目历史的一个快照,包含了自上次提交以来对工作目录中文件的更改。远程仓库是位于网络上的服务器(如GitHub、GitLab或Bitbucket)上的版本库,它允许多个用户共享和协作。本地仓库是位于你的本地计算机上的一个目录,它由Git维护,并存储了项目的历史记录和变更数据。Git通过这些基本概念和操作,提供了一个强大的工具集,用于跟踪、共享和协作代码开发。目录下,它保存了下一次提交(commit)将包含的文件的信息。命令将本地的变更提交推送到远程仓库,以便其他人可以看到。分支是项目开发的不同线路。

2024-05-03 18:09:27 567

原创 doxygen 辅助阅读代码的神器

Doxygen是一个文档生成工具,主要用于编写编程语言的软件文档。它最初是为C++设计的,但后来增加了对C、C#、Java、Objective-C、Python、IDL(在某些情况下还有PHP、C#和D)的支持。Doxygen可以从一组带有文档注释的源代码文件中提取文档,并生成多种格式的可视化文档。这些注释通常遵循特定的格式,以便Doxygen能够解析它们并组织相关的文档信息。

2024-05-03 17:55:21 386

原创 什么是CI/CD流水线

在软件开发中,流水线系统(通常被称为CI/CD流水线或部署流水线)是一种自动化的过程,用以快速、可靠地将软件从开发阶段引向生产阶段。CI代表持续集成(Continuous Integration),而CD代表持续交付(Continuous Delivery)或持续部署(Continuous Deployment)。通过使用流水线系统,团队可以减少手动错误,提高生产效率,缩短产品上市时间,确保软件质量的同时,还能持续快速地响应市场变化。这种自动化的流程是现代敏捷软件开发不可或缺的一部分。

2024-05-03 16:45:38 899

原创 什么是trace系统?

Trace系统,也常被称为分布式追踪系统,是一种用于监控、分析和优化复杂分布式系统(如微服务架构)中服务调用的工具。随着现代应用程序向微服务架构的转变,一个用户请求可能需要跨越多个服务来完成。这种架构带来了更好的可扩展性和灵活性,但同时也使得监控和故障排查变得更加复杂。Trace系统通过提供请求的完整生命周期视图,帮助开发者和运维人员理解服务之间是如何相互作用的,从而快速定位问题所在。

2024-05-03 16:37:15 815

原创 Service Mesh 是什么?

随着聚会规模的扩大,你需要解决几个问题,比如如何确保每个人都能找到聚会地点(服务发现)、如何让食物和饮料供应均衡(负载均衡)、如果雨天怎么办(故障恢复)、如何确保只有被邀请的人进入(安全性)、如何了解大家是否都玩得开心(可观测性)以及如何灵活应对变化,比如突然多了很多人或有人有特殊需求(配置和流量管理)。他们知道如何引导客人到达,如何根据客人的数量和偏好调整食物和饮料的供应,如何应对下雨天气,确保只有受邀的客人能进入,监控大家的满意度,并且灵活应对任何突发情况。

2024-05-03 16:18:51 631

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除