自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不才的专栏

不积跬步无以至千里

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

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

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

2024-05-18 15:18:36 270

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

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

2024-05-18 11:10:23 142

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

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

2024-05-18 11:05:50 205

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

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

2024-05-14 08:28:02 216

原创 推荐系统是什么

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

2024-05-10 09:32:16 625

原创 闭包是什么?

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

2024-05-10 09:20:46 520

原创 什么是函数式编程?

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

2024-05-10 09:11:14 427

原创 什么是网页反作弊

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

2024-05-08 23:19:10 552

原创 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 342

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

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

2024-05-05 16:32:39 381

原创 std::any简介

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

2024-05-05 09:15:45 235

原创 科学的调试方法

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

2024-05-05 00:49:38 134

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

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

2024-05-04 22:52:34 683

原创 常见的负载均衡策略

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

2024-05-04 22:26:46 306

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

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

2024-05-04 22:19:35 333

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

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

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

原创 Homebrew是什么?

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

2024-05-03 20:06:54 396

原创 git简介

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

2024-05-03 18:09:27 559

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

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

2024-05-03 17:55:21 283

原创 什么是CI/CD流水线

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

2024-05-03 16:45:38 811

原创 什么是trace系统?

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

2024-05-03 16:37:15 705

原创 Service Mesh 是什么?

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

2024-05-03 16:18:51 622

原创 代码审查工具Gerrit简介

Gerrit是一个开源的代码审查和项目管理工具,特别为Git版本控制系统设计。它提供了一个基于Web的界面,使得开发者能够提交他们的更改供其他人审查,之后这些更改可以被接受并合并到项目中。Gerrit极大地促进了团队协作和代码质量的提升,是许多大型开源项目(如Android)和企业级开发项目的首选工具。

2024-05-03 15:44:10 1248

原创 gdb中commands命令简介

在GDB中,commands命令允许你为特定的断点、观察点或捕获点指定一系列GDB命令,这些命令在断点被触发时自动执行。这非常有用,例如,当你希望每次达到断点时自动打印某些变量的值,或者运行一些特定的GDB命令来改变执行环境或记录一些信息。

2024-05-03 15:18:21 244

原创 gdb中观察点(watch)如何使用

在GDB中,watch命令用于设置监视点(watchpoint),它允许你在程序执行过程中监视特定变量的值何时发生变化。当被监视的变量的值改变时,程序将暂停执行,使你有机会检查变量值的变化和当前的程序状态。这对于调试复杂的程序中变量值的意外改变尤其有用。

2024-05-03 14:52:51 851

原创 gdb中条件断点

在GDB中设置条件断点允许你在特定条件成立时才暂停程序的执行。这对于调试只在特定情况下出现问题的代码非常有用。

2024-05-03 14:48:52 39

原创 gdb的工作原理和常用命令

GDB(GNU调试器)是一个强大的调试工具,用于调试各种编程语言编写的程序,如C、C++和Fortran等。GDB允许你对程序执行进行深入控制,可以检查程序在运行时的内部状态,如变量的值,内存状态,甚至是调用栈的情况等。了解GDB的工作原理有助于更有效地利用它进行调试。

2024-05-03 14:43:21 10

原创 静态链接&动态链接 优缺点

在选择静态链接或动态链接时,需要根据应用程序的需求、部署环境、性能要求和维护策略等因素进行权衡。比如,某个服务要求发布部署速度要快、独立的容器环境、内存&存储资源充足,那么这类就很适合静态链接。静态链接和动态链接各自适用的场景受到多种因素的影响,包括应用程序的需求、部署环境、性能要求、维护和更新的便利性等因素。

2024-04-21 11:37:25 285

原创 什么是认知负荷?

这种类型的外在负荷会分散开发者的注意力,使他们难以专注于实际的开发任务,如编写新代码或改进现有代码。**当然这是在理想状态下,如果刚入职一家新公司或者新接手一个新项目(功能模块),首先要做的就是减少外在负荷,如果这个项目迭代频率比较高,往往看文档是跟不上的,要么死磕代码,要么问下“熟练工”,否则很容易陷入历史陈旧代码的陷阱中。如果代码库过时且没有得到很好的维护,或者相关文档不再反映当前的代码状态,这将迫使开发者需要投入额外的时间和精力去解读不一致的信息,理解代码的历史背景,以及推测代码的当前功能和用途。

2024-04-21 11:16:20 361

原创 长链接、短链接与连接池

在计算机网络中,“长连接”、"短连接"和"连接池"是常用的概念,尤其在客户端与服务器之间进行通信时。

2024-04-21 10:29:02 382

原创 什么是深度学习?

在深度学习中,"深度"一词指的是神经网络中的层级数量。人工智能:人工智能是一个广泛的领域,它涉及到使计算机能够执行通常需要人类智能才能完成的任务。随着计算能力的增强和大量数据的可用性,深度学习已经成为AI技术中最先进和最强大的工具之一。深度学习:深度学习是机器学习的一个子集,它使用称为神经网络的结构,特别是深层神经网络,来学习数据的复杂模式。总结起来,人工智能是最广泛的概念,机器学习是达成人工智能的一种方式,而深度学习是机器学习中一种特别有效的方法。是机器学习的一个子领域,它基于人工神经网络的学习算法。

2024-04-21 08:26:38 495

原创 搜索引擎中的倒排索引是什么

在搜索引擎领域,倒排索引是一种核心数据结构,它让搜索引擎能够以极高的效率找到包含用户查询关键词的所有网页。为了理解倒排索引的工作原理,我们可以将其与一种更直观、生活化的例子相比较:书店里的索引卡片系统。假设你是一位图书管理员,你的任务是帮助顾客快速找到他们想要的书籍。如果你按每本书来组织信息,每当有人来找特定主题的书时,你可能需要查看每一本书来确定它是否是顾客想要的。这种方式显然效率很低,特别是在你管理的书籍数量非常庞大时。

2024-04-21 07:00:00 983

原创 什么是持续集成系统?

持续集成的实现通常依赖于持续集成服务或者工具,如Jenkins、Travis CI、GitLab CI/CD、CircleCI等,这些工具可以帮助自动化执行构建、测试等一系列工作流程。:由Atlassian开发的商业持续集成和部署工具,与Jira、Bitbucket等Atlassian的其他工具集成良好,支持自动化构建、测试和发布。:一个开源的持续集成工具,具有高度的可配置性和可扩展性,支持各种插件,能够实现自动化构建、测试和部署。持续集成的主要目的是使软件的开发、测试和发布过程更加快速、高效。

2024-04-21 06:00:00 401

原创 使用C++模板实现工厂模式

public:这里我们使用一个函数指针映射(也可以使用std::function)来注册和创建对象。// 工厂类,不再是模板类private:public:if (it!

2024-04-21 01:10:30 370

原创 什么是蓝绿发布?

蓝绿发布(Blue-Green Deployment)是一种软件发布策略,旨在减少或消除部署过程中的服务停机时间和风险。这种策略通过同时运行两个完全相同的生产环境——一个蓝色环境和一个绿色环境——来实现。在两个环境中,只有一个对外提供服务,另一个则用于新版本的部署和测试。

2024-04-20 23:55:51 259

原创 什么是存算分离?

存算分离(Storage-Compute Separation 或 Storage-Compute Decoupling)是一种数据架构设计理念,旨在将(Storage)和(Compute)功能分离开来。这种设计允许存储资源和计算资源独立扩展和优化,根据实际需求灵活配置,从而提高系统的效率和成本效果。

2024-04-20 22:51:00 251

原创 什么是RAG?

RAG是“Retrieval-Augmented Generation”的缩写,这是一种自然语言处理(NLP)技术,用于增强生成式模型的性能,尤其是在问答、文本摘要、对话系统等任务中。RAG结合了检索(Retrieval)和生成(Generation)两个阶段,以提高模型对信息的处理和回应的质量。在RAG系统中,首先使用检索组件在一个大型的文档集合中寻找与输入查询相关的信息或文档。RAG技术的一个典型应用是在问答系统中,它能够提供比传统生成式模型更准确的答案,因为它结合了大量的外部知识。

2024-04-20 22:38:03 236

原创 不要在栈上分配大数组

但是,这个值是可以配置的。在C++中,如果你在函数中创建一个非常大的数组,它可能会导致栈溢出。这是因为,对于大多数系统,栈的大小是有限的,通常比堆小得多。请注意,尽管可以增加栈的大小,但是栈的空间总是有限的。堆的大小只受到系统可用内存的限制,而栈的大小受到更多的限制。在C++中,栈的大小是由编译器和操作系统决定的,并不是由C++语言本身规定的。所以,尽管可以增加栈的大小,但是最好尽量避免在栈上分配大量的内存。如果你试图在栈上分配一个超出其容量的大数组,可能会导致栈溢出错误,这通常会导致程序崩溃。

2023-09-20 09:13:11 190

原创 STL VIEW

stl view,gdb调试 pvector pmap 等工具

2022-11-19 22:02:46 345 1

原创 2 sre视角 note

Google Sre 视角

2022-06-04 11:33:58 210

空空如也

空空如也

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

TA关注的人

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