
大教堂与市集
文章平均质量分 64
IT相关知识
十秒耿直拆包选手
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
模式设计:策略模式及其应用场景
策略模式是一种行为型设计模式,用于在运行时动态选择算法。其核心是将算法封装为独立策略类,通过上下文对象调用,实现算法与使用的解耦。该模式包含三个角色:策略接口定义算法规范,具体策略实现不同算法,上下文负责持有和执行策略。典型应用场景如支付系统,可动态切换支付宝、微信等支付方式。优势在于符合开闭原则,消除条件分支,提高复用性和灵活性。与状态模式的区别在于策略切换由客户端主动控制,而非自动状态变迁。原创 2025-08-13 23:52:19 · 17 阅读 · 0 评论 -
大教堂与集市:UML类图之间的各种关系
UML类图关系详解 UML类图是描述类、接口及其关系的静态结构图,包含六种核心关系: 关联关系 单向关联:用实线箭头表示,如User→Address 双向关联:用直线表示,如Student↔Course 聚合关系 弱整体-部分关系(空心菱形) 部分可独立存在,如Car◇→Engine 组合关系 强整体-部分关系(实心菱形) 部分随整体销毁,如Order◆→OrderItem 依赖关系 临时性使用(虚线箭头) 通过方法参数/局部变量实现 泛化关系 继承关系(实线空心三角) 体现"is-a"原创 2025-08-03 00:27:14 · 18 阅读 · 0 评论 -
IT技术文章汇总
软件开发优秀文章汇总。原创 2025-06-01 10:14:43 · 139 阅读 · 0 评论 -
cmake:CMAKE_PREFIX_PATH使用技巧与示例
CMAKE_PREFIX_PATH是CMake中一个重要的环境变量,它用于帮助CMake在配置项目时找到各种依赖项的位置。这个变量尤其在处理那些不在标准位置安装的库时显得非常有用。转载 2025-05-15 16:36:39 · 281 阅读 · 0 评论 -
常用网址合集
常登论坛。原创 2025-04-28 14:15:57 · 636 阅读 · 0 评论 -
编程常用工具汇总
Process Explorer是一个由微软Sysinternals团队开发的强大系统监控工具,它提供了比操作系统自带任务管理器更详细、更直观的进程信息,帮助用户深入理解计算机上的进程和系统资源使用情况。主要功能包括进程信息查看、资源占用可视化、父进程关系追踪、服务和模块查看、搜索功能、挂起和终止进程、句柄查看等。用户通过熟练掌握Process Explorer的使用,可以更好地管理和控制计算机环境,提高工作效率。原创 2025-03-03 12:39:23 · 318 阅读 · 0 评论 -
C++ stoi函数,字符串转整数
通过调用stoi函数将字符串转换为整数。第一个示例将字符串"12345"转换为整数12345,第二个示例将字符串"1010"按二进制转换为整数10。第三个示例中,由于字符串"123abc"中包含无效字符"a",转换结束的位置为3,所以只将前面的数字"123"转换为整数123。- idx:可选参数,用于存储转换结束的位置,即第一个无效字符的位置。stoi函数是C++标准库中的一个函数,用于将字符串转换为整数。- base:可选参数,指定转换时使用的进制,默认为10进制。- str:要转换的字符串。原创 2024-01-06 22:49:53 · 3536 阅读 · 0 评论 -
C++:QString与string互相转换
string是C++标准库提供的类。原创 2024-01-21 15:27:34 · 880 阅读 · 0 评论 -
C++ 位运算
任何信息在计算机中都是采用二进制表示的,数据在计算机中是以补码形式存储的,位运算就是直接对整数在内存中的二进制位进行运算。由于位运算直接对内存数据进行操作,不需要转换成十进制,因此处理速度非常快。原创 2024-02-10 22:24:24 · 1699 阅读 · 0 评论 -
C++ const 和 constexpr 的区别
C++ 11标准中,const 用于为修饰的变量添加“只读”属性而 constexpr关键字则用于指明其后是一个常量,编译器在编译程序时可以顺带将其结果计算出来,而无需等到程序运行阶段,这样的优化极大地提高了程序的执行效率,本文重点介绍C++ const与constexpr区别介绍,一起看看吧。所谓常量表达式,指的就是由多个(≥1)常量组成的表达式。换句话说,如果表达式中的成员都是常量,那么该表达式就是一个常量表达式。这也意味着,常量表达式一旦确定,其值将无法修改。实际开发中,我们经常会用到常量表达式。以定转载 2024-04-07 14:09:45 · 245 阅读 · 0 评论 -
C++中五花八门的初始化
定义于任何函数体之外的变量会被初始化为0,定义在函数体内部的内置类型变量将不被初始化(uninitialized),一个未被初始化的内置类型变量的值时未定义的,如果试图拷贝或以其他形式访问此类值将引发错误。总的来说,圆括号是通过调用vector的构造函数进行初始化的,如果使用了花括号那么初始化过程会尽可能会把花括号内的值当做元素初始值的列表来处理。前面提到C++11支持所有类型的初始化,对于类类型而言,虽然我们使用列表初始化它会自动调用匹配的构造函数,但是我们也能显式指定接受初始化列表的构造函数。转载 2024-04-10 09:33:14 · 326 阅读 · 0 评论 -
cpp学习:文字常量;变量;指针基本概念
1文字常量:文字常量一般指cpp自己定义的一组数值数据类型,“文字”是因为我们只能够以它的值的形式指代它;“常量”是指我们无法改变它的值。每个文字都有其相对应的类型,例如1、2、3是int类型;3.1415926是double文字。文字常量是不可寻址的,它的值存在于机子的内存中,但是我们没有办法获取其地址。2变量:变量时一个有名字的内存存储区,程序可以通过对变量进行读rwx操作原创 2013-10-26 21:41:44 · 845 阅读 · 0 评论 -
一般函数指针和类成员函数指针(转)
类的静态成员函数采用与一般函数指针相同的调用方式,而受this指针的影响,类的非静态成员函数与一般函数指针是不兼容的。而且,不同类的this指针是不一样的,因此,指向不同类的非静态成员函数的指针也是不兼容的。由于类的非静态成员函数中有一个隐形的this指针,因此,类的成员函数的指针和一般函数的指针的表现形式不一样。为了封装同类型的函数,可以把函数指针作为通用接口函数的参数,并通过函数指针来间接调用所封装的函数。下面是一个指向类的成员函数的指针的使用的例子,包括指向静态和非静态成员函数的指针的使用。转载 2013-12-03 23:11:15 · 552 阅读 · 0 评论 -
c++:=delete使用
引入的=delete是一种特性,它用于明确禁用或删除类的成员函数、特殊成员函数、或者其他成员函数。=delete的主要目的是在编译时捕获潜在的错误,并提供更精确的控制,以确保类的行为符合设计要求。转载 2024-12-30 10:00:36 · 199 阅读 · 0 评论 -
c++: =default使用
default是C++11引入的一种特性,它允许显式要求编译器生成默认的特殊成员函数。特殊成员函数包括默认构造函数、复制构造函数、移动构造函数、复制赋值运算符、移动赋值运算符以及析构函数。在默认情况下,如果你没有显式提供这些特殊成员函数的定义,C++编译器会自动生成它们。在这个示例中,MyClass类中同时定义了一个默认构造函数和一个自定义构造函数。MyClass()构造函数使用了=default来指定,所以编译器会自动生成它,而构造函数是程序员自己定义的。可以看到 ,在main。转载 2024-12-30 08:32:42 · 410 阅读 · 0 评论 -
工程目录架构(参考)
原创 2024-11-24 09:05:03 · 142 阅读 · 0 评论 -
Java代理模式
代理模式有静态代理和动态代理两种实现方式。转载 2024-10-26 14:34:35 · 99 阅读 · 0 评论 -
Java:性能篇,解密Stream,提升集合遍历效率的秘诀!
在开始深入讨论之前,我们先来了解一下什么是 Stream。Stream 是 Java 8 中引入的一种新的抽象概念,用于处理数据序列。它为我们提供了一种更加便捷、高效的方式来操作集合数据,实现了函数式编程的特性。在之前的 Java 版本中,我们通常使用迭代器或者循环来处理集合,代码显得冗长且难以阅读。而引入 Stream 后,我们可以采用声明式的方式描述数据的处理流程,使代码更加简洁、清晰。Stream 的本质是一种数据流,它不是一种数据结构,因此不会改变原有的数据集合。转载 2024-10-11 17:10:33 · 202 阅读 · 0 评论 -
【JDK 11】关于 Java 模块系统(module),看这一篇就够了
如果把 Java 8 比作单体应用,那么引入模块系统之后,从 Java 9 开始,Java 就华丽的转身为微服务。模块系统,项目代号Jigsaw,最早于 2008 年 8 月提出(比 Martin Fowler提出微服务还早 6 年),2014 年跟随 Java 9 正式进入开发阶段,最终跟随 Java 9 发布于 2017 年 9 月。那么什么是模块系统?官方的定义是如图-1所示,模块的载体是 jar 文件,一个模块就是一个 jar 文件,但相比于传统的 jar 文件,模块的根目录下多了一个。转载 2024-10-08 20:41:14 · 3667 阅读 · 0 评论 -
cmakelist加载Qt模块
Qt编程中,cmakelist会自动添加Core,Gui,Widgets模块,有时需要添加新的Qt的模块。在命令find_package中添加要新增的模块,比如要增加对ui文件的处理。原创 2024-10-04 22:57:36 · 773 阅读 · 0 评论 -
使用CLion编写QT遇到的一些坑(找不到头文件,Build报错)
文件来组织和设置项目的,所以如果我们需要添加诸如Qt这样的第三方库或是改变编译行为,都只要修改。之后再重新Build可以有效解决问题。转载 2024-10-04 18:04:07 · 465 阅读 · 0 评论 -
现代 C++ 中的初始化
序号形式拷贝/直接初始化可用于构造函数初始值列表可用于类内初始值备注1等号拷贝初始化❌✅2等号+花括号={}拷贝初始化❌✅列表初始化3花括号{}直接初始化✅✅推荐!列表初始化,能用于各种初始化场景!4圆括号()直接初始化✅❌存在 Most Vexing Parse 问题、不可用于类内初始值及提供多个初始元素值的列表拷贝初始化:使用形式的初始化。直接初始化:不使用形式的初始化(使用{}或()形式初始化)列表初始化:使用{}转载 2024-09-18 08:35:22 · 343 阅读 · 0 评论 -
Windows系统下编译C++源码并调用
现在很多的C++库都以源码的形式在github网站开源,如果要使用,可以直接下载到本地,添加到工程中调用。也可以将源码编译为动态或静态库文件,然后将库文件添加到工程中。在这里我们将GoogleTest源码编译,然后加到工程中。原创 2024-09-10 15:13:08 · 1271 阅读 · 0 评论 -
CMake 保姆级教程(下)(未完待续)
如果项目很大,或者项目中有很多的源码目录,在通过CMake管理项目的时候如果只使用一个CMakeLists.txt,那么这个文件相对会比较复杂,有一种化繁为简的方式就是给每个源码目录都添加一个CMakeLists.txt文件(头文件目录不需要),这样每个文件都不会太复杂,而且更灵活,更容易维护。转载 2024-08-26 13:15:39 · 109 阅读 · 0 评论 -
CMake 保姆级教程(上)
在上面的例子中一共提供了5个源文件,假设这五个源文件需要反复被使用,每次都直接将它们的名字写出来确实是很麻烦,此时我们就需要定义一个变量,将文件名对应的字符串存储起来,在cmake里定义变量需要使用set。# SET 指令的语法是:# [] 中的参数为可选项, 如不需要可以不写VAR:变量名VALUE:变量值# 方式1: 各个源文件之间使用空格间隔# 方式2: 各个源文件之间使用分号;间隔div.c;main.c;mult.c;sub.c)转载 2024-08-25 16:27:06 · 512 阅读 · 0 评论 -
UDP 真的比 TCP 高效吗?
每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长(2 字节)字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值。UDP 报文格式如图所示。UDP 报文中每个字段的含义如下:源端口: 16bits,发送端的端口。目的端口:16bits,即接收端的端口长度: 16bits,UDP 数据包总的大小:包头+数据,单位:字节。校验值: 16bits,错误检查码,基于算法,计算此 UDP 数据包是否损坏。转载 2024-08-21 18:35:38 · 312 阅读 · 0 评论 -
JetBrains:Wrong tag。注释告警
Wrong tag ‘copyright:’ ,这个是alt + enter 选择 Add @copyright:to custom tags,虽然能解决问题,如果创建一个新项目又回出现这个告警提示。其实这个问题的就是这个在Java Doc里面不存在,才会出现这个问题,所以我们只需要在。原创 2024-08-05 10:52:05 · 327 阅读 · 0 评论 -
JetBrains:XML tag has empty body警告
在xml文件中配置时,因为标签内容为空,出现黄色警告影响观感。通过IDE配置关闭告警。原创 2024-08-02 13:50:36 · 812 阅读 · 0 评论 -
WPS文字页面横向
如果只需要将文档中的特定页面设置为横向,可以在需要设置横向页面的前一页末尾,点击“插入”选项卡下的“下一页分节符”插入分节符。然后,单独选择要设置为横向的页面,并在“页面布局”中将其方向更改为横向。这样,被分节符分隔的特定页面就会显示为横向,而其他页面则保持原有的纵向或横向设置。要将WPS文字页面设置为横向,可以按照以下步骤操作:12。原创 2024-05-01 21:34:05 · 915 阅读 · 0 评论 -
ASCII码表
原创 2024-03-05 23:00:45 · 584 阅读 · 0 评论 -
这个代码挑战赛火爆外网,十亿行文本处理,冠军只用了1.5s
那么有没有办法可以移除stringAt调用呢?分析代码可以看到将站名生成String对象,是为了在HashMap中存储不同气象站的统计结果数据(作为key)。而HashMap的key的作用是计算hash值判断两个key是否相等如果要避免使用stringAt调用,那么就不得不抛弃HashMap,来实现自定义的哈希表结构。实际上,构造一个指定大小的采用开放地址法指定大小:不需要考虑容量扩张,因为比赛的气象站大小已经确定。转载 2024-02-27 16:48:12 · 809 阅读 · 0 评论 -
设计模式:工厂方法模式
工厂模式属于创建型模式,也被称为多态工厂模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离,有子类决定要实例化的产品是哪一个,把产品的实例化推迟到子类。原创 2024-01-27 22:38:58 · 861 阅读 · 0 评论 -
设计模式:简单工厂模式
工厂设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。面相对象编程中,万物皆对象。每个对象如果都通过关键字new创建,则会导致对象与其调用者耦合严重。假如更换要new的对象,则所有new对象的地方都需要改变代码,这显然违背了“开-闭原则”。原创 2024-01-27 15:10:11 · 811 阅读 · 0 评论 -
设计模式:简介及基本原则
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。原创 2024-01-27 12:13:42 · 1073 阅读 · 0 评论 -
C++编码规范:JSF-AV(未完待续)
简称)是一个由美国和其盟国发起的新一代战斗机发展和采购项目。该项目旨在取代大量已老化的战斗机、战斗轰炸机和攻击机。该项目计划在未来取代各种西方主力战机,包括F-16、A-10、F/A-18、AV-8B和海鹞式战机。波音的X-32方案和洛克希德.马丁(Lockheed Martin,下文简称“洛马”)公司的X-35方案进入了最后的角逐。经过各阶段试验后,X-35于2001年10月26日击败X-32获选,并授予编号为F-35。原创 2024-01-13 09:29:04 · 1245 阅读 · 0 评论 -
位(bit)、字节(byte)的概念
位(bit)是计算机中最基本的概念。位是计算机内部数据储存的最小单位,它只能表示两种状态:0或1。当提到“位”时,通常指的是二进制位,即单个的二进制数值。在计算机中,由于只有逻辑0和逻辑1的存在,因此很多东西、动作、数字都要表示为一串二进制的字码例如: 1001 0000 1101等等。其中每一个逻辑0或者1便是一个位。例如这个例子里的1000 1110共有八个位,它的英文名字叫(bit),是计算机中最基本的单位。原创 2024-01-18 19:56:13 · 749 阅读 · 0 评论 -
C++编码规范(Google版本),未完待续
Google 经常会发布一些开源项目, 意味着会接受来自其他代码贡献者的代码. 但是如果代码贡献者的编程风格与 Google 的不一致, 会给代码阅读者和其他代码提交者造成不小的困扰. Google 因此发布了这份自己的编程风格指南, 使所有提交代码的人都能获知 Google 的编程风格.翻译初衷:规则的作用就是避免混乱. 但规则本身一定要权威, 有说服力, 并且是理性的. 我们所见过的大部分编程规范, 其内容或不够严谨, 或阐述过于简单, 或带有一定的武断性.转载 2023-12-06 22:33:07 · 98 阅读 · 0 评论 -
Google Java编程风格规范
本文档作为 Google 的 Java™ 编程语言源代码编码标准的完整定义。当且仅当它遵守此处的规则时,Java 源文件才被描述为Google 风格。与其它的编程风格指南一样,这里所讨论的不仅仅是编码格式美不美观的问题, 同时也讨论一些约定及编码标准。然而,这份文档主要侧重于我们所普遍遵循的规则, 对于那些不是明确强制要求的,我们尽量避免提供意见。每个Javadoc块都以一个简短的摘要片段开始。这个片段非常重要:它是文本中唯一出现在某些上下文中的部分,比如类和方法的索引。转载 2023-12-22 15:11:57 · 1223 阅读 · 0 评论 -
jdk17 下 netty 导致堆内存疯涨原因排查 | 京东云技术团队
1. 流程图:跨数据中心同步数据单 channel 管道同步数据能力不足,导致 tcp 环阻塞。从而导致 netty eventLoop 的消费 WriteTask 任务 (WriteAndFlush) 中的 write 能力大于 flush 能力,因此申请的大量的直接内存存放在 ChannelOutboundBuffer#unflushedEntry 链表中没法 flush。转载 2023-09-10 17:08:37 · 444 阅读 · 0 评论 -
Python 编码规范(Google)
Python 风格规范(Google)本项目并非 Google 官方项目, 而是由国内程序员凭热情创建和维护。如果你关注的是 Google 官方英文版, 请移步以下代码中表示推荐,表示不推荐。转载 2023-09-08 22:42:13 · 153 阅读 · 0 评论