- 博客(29)
- 资源 (1)
- 收藏
- 关注
原创 muduo库极简剖析
:如果 loop 在其对应的线程中(可能被其他线程调用这个函数),则直接调用。(避免在有 time_wait 连接时,服务器无法启动),并按需设置。如果 loop 不在其对应的线程,或者 loop 处于。 的长度,增加读索引(如果大于等于可读数据大小,则调用。,用于根据设置的线程数量,自动启动线程,并且提供。,并设置其实现的回调函数(读、写、关闭、错误) 封装,存储了读、写、关闭事件的回调函数。:抽象类,负责监听套接字事件,并设置。,并且实现了线程要执行的函数。在 subloop 中执行。
2025-02-27 14:18:07
455
原创 eBPF 开发中 ‘asm/types.h‘ file not found 的原因分析及其解决方法
在eBPF程序开发中,当我们包含了原因是,头文件保存在了目录在以 bpf 为目标时,不会自动搜索这个目录。
2024-09-12 21:10:18
542
原创 af_xdp 创建过程分析
关于 fill 和 comp 的偏移和映射问题?关于 rx 和 tx 的偏移和映射问题?,用偏移量来获取 desc 数组。把 q 中的 ring 映射出来。关于 setsockopt。涉及到的代码文件基本位于。
2024-08-09 22:58:47
1098
翻译 Busy Polling:过去、现在和将来
传统的Linux和其他Unix操作系统中的网络模型是基于设备生成中断,并根据各种约束条件在不同层进行服务。虽然这种方法在CPU资源稀缺的年代取得了良好的效果,但我们经常遇到需要费力调整的异常行为。Linux的NAPI模型添加了一个通用层,有助于提高设备之间的吞吐量和公平性,但代价是引入了抖动。2013年,引入了忙轮询作为一种替代模型,在该模型中,用户应用线程会机会性地轮询设备,消耗周期并可能避免中断延迟。到目前为止(linux-4.12),忙轮询仍然是一个应用程序选择,但它存在实际限制。
2024-07-12 20:30:53
239
翻译 AF_XDP
AF_XDP 是一个优化了高性能数据包处理的地址族。本文假设读者熟悉 BPF 和 XDP。。通过使用 XDP 程序中的 XDP_REDIRECT 动作,程序可以使用 bpf_redirect_map() 函数将入站帧重定向到其他启用了 XDP 的网络设备。AF_XDP 套接字使得 XDP 程序可以将帧重定向到用户空间应用程序中的内存缓冲区。一个 AF_XDP 套接字(XSK)通过普通的 socket() 系统调用创建。每个 XSK 关联两个环:RX 环和 TX 环。
2024-06-20 13:33:17
486
原创 goland数字信封的简易实现
如果需要公私钥文件的朋友可以使用这个网站在线生成公钥私钥对,RSA公私钥生成完整代码参考golang数字信封示例。
2023-04-04 19:27:39
356
原创 基于golang-jwt实现简易jwe,加密关键数据
我打算使用golang-jwt来做登录,但是在使用jwt的时候,发现放在token中的数据单纯是json经过base64转码后的结果,通过base64转码就可以得到明文,十分地不安全,后面翻看了官方文档,文档中明确说明没有加密,要想加密,请使用jwe随后,我去看了,描述说目前公共API十分不稳定,距离稳定版还差得远,所以放弃了使用jwe。
2023-04-03 20:29:13
644
原创 IDEA一行解决System.out输出中文乱码
没有配置的java项目使用idea运行System.out输出中文乱码,文章通过添加VM参数解决乱码问题
2022-11-01 12:58:43
2950
原创 Manjaro配置
这里写自定义目录标题安装注意显卡选择火狐浏览器配置最近一些学习需要使用Linux,尝试了deepin系统后,发现对于Nvidia显卡的支持不是很完善,经常出现无法开机的情况,所以尝试Manjaro系统,该系统安装比较简单,我这里选择的是KDE版本,直接替换安装。安装注意显卡选择对于有Nvidia显卡的用户,可以选择闭源的驱动,效率会更好火狐浏览器配置火狐浏览器中文设置,可以在应用的设置中实现,对于登录提示密码错误可以访问http://mozilla.com.cn/thread-343905-1
2022-04-29 16:59:56
1551
原创 第十二章 面向正确性与健壮性的软件构造
第十二章 面向正确性与健壮性的软件构造第十二章 面向正确性与健壮性的软件构造健壮性和正确性健壮性正确性比较评测健壮性和正确性外部观察角度内部观察视角(间接)Java中的错误和异常ErrorException抛出异常的方法创建异常类处理异常栈轨迹断言防止bug断言断言和异常pre-/post-condition防御性编程保护程序免受无效输入Barricade 设置路障The SpotBugs tool第十二章 面向正确性与健壮性的软件构造健壮性和正确性健壮性系统在不正常输入或不正常外部环境下仍能够
2021-07-07 17:21:12
596
原创 第十一章 面向可复用性和可维护性的设计模式
第十一章 面向可复用性和可维护性的设计模式第十一章 面向可复用性和可维护性的设计模式Creational patterns 创建型模式Factory Method pattern 工厂方法模式Structural patterns 结构型模式Adapter 适配器模式Decorator 装饰器模式Behavioral patterns 行为类模式Strategy 策略模式Template Method 模板模式Iterator 迭代器Visitor设计模式的对比第十一章 面向可复用性和可维护性的设计模式
2021-07-07 17:13:58
342
原创 第十章 面向可维护性的构造技术
第十章 面向可维护性的构造技术第十章 面向可维护性的构造技术软件维护与演进面向可维护性的构建可维护性指标可维护性的许多名称一些常用的可维护性指标模块化设计和模块化原则评估模块化的五个标准模块化设计的五个规则耦合内聚OO Design Principles: SOLIDSOLID:5类设计原则语法驱动的构造语法的组成部分正则语言和正则表达式Java中的正则表达式第十章 面向可维护性的构造技术软件维护与演进软件维护:修复错误、改善性能运维是软件开发中最困难的工作之一处理来自用户报告的故障
2021-07-07 17:07:07
403
原创 第九章 面向复用的软件构造技术
第九章 面向复用的软件构造技术第九章 面向复用的软件构造技术什么是软件复用特点如何使用已有软件进行开发怎样评测可复用性好的可复用性软件应该可复用代码来源复用的级别和形态复用的级别复用的形态设计可复用的类行为子类型和LSP原则委派第九章 面向复用的软件构造技术什么是软件复用软件重用是使用现有软件组件实现或更新软件系统的过程。软件复用的两个方面面向复用编程:开发出可复用的软件基于复用编程:利用已有的可复用软件搭建应用系统特点很大的适应性降低成本和开发时间充分的测试
2021-07-07 17:00:14
210
原创 第八章 ADT和OOP中的 “等价性“
第八章 ADT和OOP中的 “等价性”第八章 ADT和OOP中的 “等价性”等价关系== vs. equals()==equals()Immutable类型的等价使用AF观察等价性AF和观察等价性判断出来的结果可能不同Immutable类型观察等价性和行为等价性一致建议Mutable类型等价性观察等价性行为等价性建议示例Java自动装箱单例模式第八章 ADT和OOP中的 “等价性”等价关系自反、对称、传递== vs. equals()Java的两种操作测试等价性==== 运算符比较引用。
2021-07-07 16:52:14
390
原创 第七章 面向对象的编程
第七章 面向对象的编程第七章 面向对象的编程基本概念类成员变量类方法实例方法实例成员变量接口和枚举类型接口接口和类的关系继承和重写继承重写(Overriding)抽象类多态(Polymorphism)三种多态重要的Object方法toString()equals()hashCode()设计好的类写immutable类什么时候使用immutable什么时候使用mutable第七章 面向对象的编程基本概念类成员变量所有的类共享这一个变量,static修饰类方法static修饰,类名调用实
2021-07-07 16:46:51
359
原创 第六章 抽象数据类型(ADT)
第六章 抽象数据类型(ADT)ADT由一组操作所刻画的数据类型,而非数据的具体表示(传统类型)强调"作用于数据上的操作",程序员和 client无需关心数据如何具体存储的,只需设计/使用操作即可。ADT是由操作定义的,与其内部如何实现无关!ADT分类可变数据类型提供了可改变其内部数据的值的操作不可变数据类型其操作不改变内部值,而是构造新的对象有时一个类型会以两种形式提供,一种是可变的,一种是不可变的。 例如,StringBuilder 是 String 的可变版本
2021-07-07 16:38:35
1032
原创 第五章 设计规约
第五章 设计规约第五章 设计规约函数和方法(Functions & methods)规约(Specification)编程中的文档(Documenting in programming)规约和合同(Specification and Contract)行为等价性(Behavioral equivalence)规约设计规约规约性质比较规约规约图设计好的规约第五章 设计规约函数和方法(Functions & methods)参数类型是否匹配,在静态类型检查阶段完成返回值类型是否匹
2021-07-07 16:28:59
366
原创 第四章 数据类型与类型检验
第四章 数据类型与类型检验第四章 数据类型与类型检验数据类型Java类型静态类型检测和动态类型检测静态类型语言动态类型语言动态>静态>无检查Mutability and Immutability改变一个变量和一个变量的值的区别ImmutabilityMutable types 和 Immutable typesSnapshot diagram画法Arrays and CollectionsArrayListSetMapIteration有用的immutable类型Collections第四章
2021-07-04 18:56:14
442
原创 第三章 软件构造过程与配置管理
第三章 软件构造过程与配置管理第三章 软件构造过程与配置管理Software Development Lifecycle(SDLC)软件开发生命周期From 0 to 1 从无到有From 1 to n 从有到好传统软件开发模型两种基本的方式五种模型选择模型的依据Agile Development(敏捷开发)敏捷宣言极限编程SCM和VCS软件配置管理版本控制和基线的建立CMDB :配置管理数据库Git实际的三个区域Git仓库的三个部分文件的三个状态Object Graph和传统的VSC对比git 命令软件构
2021-07-04 18:46:24
275
原创 第二章 软件测试与测试优先的编程
第二章 软件测试与测试优先的编程第二章 软件测试与测试优先的编程测试目的测试等级单元测试集成测试系统测试回归测试验收测试静态测试和动态测试测试和调试测试艰难原因测试用例好的测试用例Test-First Programming(测试优先编程)JUnit自动化单元测试使用assertion methodssetUp() or @BeforetearDown() or @After黑盒测试测试用例写法(等价类划分和边界值分析)白盒测试独立/基本路径测试测试的覆盖度衡量标准Regression testing 回归
2021-07-04 18:32:36
737
原创 第一章 软件构造的多维视图和质量目标
这里写目录标题第一章 软件构造的多维视图和质量目标软件构造三个维度Buildtime Viewscode代码的逻辑组织component代码的物理组织Runtime ViewsCode-level view代码层面:逻辑实体在内存中如何呈现?Component-level view构件层面:物理实体在物理硬件环境中如何呈现?运行时软件的高级概念软件系统的质量特性关系外部质量内部质量质量属性之间的权衡第一章 软件构造的多维视图和质量目标软件构造三个维度build-runcode-componentm
2021-07-04 18:13:27
632
1
原创 程序人生-Hello’s P2P
计算机系统大作业题 目 程序人生-Hello’s P2P 专 业 计算学部学 号 1190202319班 级 1903001学 生 王斌 指 导 教 师 郑贵滨计算机科学与技术学院2021年6月摘 要本文详细地介绍了一个简单源代码hello.c,经历预处理,编译,汇编,链接过程最终变成可执行程序hello的过程,随后介绍了shell启动hello程序
2021-06-26 21:54:33
1511
原创 Java异常
Java异常1.为什么要使用异常处理2.Java默认异常类3.如何使用异常类1.为什么要使用异常处理在C语言中,我们常常使用类似这样的方式来处理一些异常状况FileInputStream fIn = new FileInputStream(fileName);if (fIn == null) { switch (errno) { case _ENOFILE: System.err.println(“File not found: “ + …); return -1; defau
2021-06-23 12:42:39
103
原创 LSP可替换原则
LSP可替换原则LSP可替换原则概念行为子类型协变和逆变重写和重载实现LSP可替换原则的注意要点LSP可替换原则概念面向对象编程中,为了更合理的使用继承,构造合理的父类型和子类型,有一个重要的概念,那就是LSP可替换原则,又叫里氏替换原则(Liskov Substitution principle)。它由芭芭拉·利斯科夫(Barbara Liskov)在1987年在一次会议上名为“数据的抽象与层次”的演说中首先提出。里氏替换原则的内容可以描述为: “If S is a subtype of T, the
2021-06-04 14:55:06
436
原创 Maven简介和配置
文章目录Maven简介Maven配置Maven简介Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会
2021-05-27 16:20:20
80
原创 Github常用分支操作
文章目录Github常用分支操作一、在GitHub上修改分支名称在Github创建新的分支在Github删除分支在Github切换默认分支Github常用分支操作一、在GitHub上修改分支名称这里以将main分支修改成master分支为例:在GitHub中点击分支,查看所有分支。在分支管理中修改输入想改的名字,点击Rename branch。返回GitHub代码部分,发现分支已经修改成功。在Github创建新的分支这里以创建dev分支为例输入分支名,即可创建dev分支,其分支内
2021-05-23 20:20:11
1941
2
原创 Git基本使用
Git基本使用和Eclipse中Git配置Git基本使用下载安装基本配置命令合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入Git基本使用下载安装1.访问git官网,点击Downloads,或者使用网页https://git-scm.c
2021-05-12 19:50:56
74
原创 网络与社会导论在生活中的启示
网络与社会导论在生活中的启示博弈论激励学生写作业的方法博弈论激励学生写作业的方法想象这样一个场景,你和你的好朋友小明(化名)经过一天疲惫地上课,终于回到了家中。吃了些零食,放松了一会,你决定写作业。当你拿出了你的作业的时候,你惊奇的发现,你拿错了作业,你带回来的作业本是小明的,这时,你该不该写作业?此时,你头脑清醒,会做出最理智的决定。你清楚的了解老师,当老师检查作业的时候,发现学生写了作业,老师会夸奖这个学生,当老师发现学生没有写作业的时候,老师会批评这个学生,并让他下一次补全作业。此时,我们可
2020-11-16 19:29:57
171
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人