- 博客(113)
- 收藏
- 关注
原创 【7】基于多设计模式下的同步&异步日志系统-代码设计
▪ 所以实际开发中会对单个⽇志⽂件的⼤⼩也会做⼀些控制,即当⼤⼩超过某个⼤⼩时(如1GB),我们就重新创建⼀个新的⽇志⽂件来滚动写⽇志。对于那些过期的⽇志, ⼤部分企业内部都有专⻔的运维⼈员去定时清理过期的⽇志,或者设置系统定时任务,定时清理过期⽇志。▪ 如果⼀个⽇志⽂件体积太⼤,⼀⽅⾯是不好打开,另⼀⽅⾯是即时打开了由于包含数据巨⼤,也不利于查找我们需要的信息。⽇志⽂件滚动的条件有两个:⽂件⼤⼩ 和 时间。▪ ⽇志⽂件在⼤于 1GB 的时候会更换新的⽂件。本项⽬基于⽂件⼤⼩的判断滚动⽣成新的⽂件。
2023-12-15 23:00:43 697
原创 【6】基于多设计模式下的同步&异步日志系统-代码设计
• std::vector< FormatItem::ptr> items成员:⽤于按序保存格式化字符串对应的⼦格式化对象。• TimeFormatItem :表⽰要从LogMsg中取出时间戳并按照指定格式进⾏格式化。• MsgFormatItem :表⽰要从LogMsg中取出有效⽇志数据。• LevelFormatItem :表⽰要从LogMsg中取出⽇志等级。• NameFormatItem :表⽰要从LogMsg中取出⽇志器名称。⽰例:“[%d{%H:%M:%S}] %m%n”◦ %c ⽇志器名称。
2023-12-15 22:54:29 478
原创 【5】基于多设计模式下的同步&异步日志系统-代码设计
提前完成⼀些零碎的功能接⼝,以便于项⽬中会⽤到。• 获取系统时间• 判断⽂件是否存在• 获取⽂件的所在⽬录路径• 创建⽬录。
2023-12-15 22:51:27 497
原创 【云备份】客户端模块
客户端要实现的功能是对指定文件夹中的文件自动进行备份上传。但是并不是所有的文件每次都需要上传,我们需要能够判断,哪些文件需要上传,哪些不需要,因此需要将备份的文件信息给管理起来,作为下一次文件是否需要备份的判断。这个其实与服务端的文件实用工具类雷同,只是功能需求并没有服务端那么多,复制过来即可。
2023-12-04 18:41:36 456
原创 【云备份】服务端热点管理&业务处理模块
而热点文件的判断在于上传的文件的最后一次访问时间是否在热点判断时间之内,比如如果一个文件一天都没有被访问过我们就认为这是一个非热点文件,其实就是当前系统时间,与文件最后一次访问时间之间的时间差是否在一天之内的判断。而我们需要对上传的文件每隔一段时间进行热点检测,相当于遍历上传文件的存储文件夹,找出所有的文件,然后通过对逐个文件进行时间差的判断,来逐个进行热点处理。基于这个思想,我们需要将上传的文件存储位置与压缩后压缩文件的存储位置分开。服务器端的热点文件管理是对上传的非热点文件进行压缩存储,节省磁盘空间。
2023-12-04 18:39:31 415
原创 【云备份】服务端数据管理模块
不管是客户端还是服务端,文件的传输备份都涉及到文件的读写,包括数据管理信息的持久化也是如此,因此首先设计封装文件操作类,这个类封装完毕之后,则在任意模块中对文件进行操作时都将变的简单化。使用单例模式管理系统配置信息,能够让配置信息的管理控制更加统一灵活。使用文件配置加载一些程序的运行关键信息可以让程序的运行更加灵活。
2023-12-04 18:24:14 427
原创 【云备份】项目总结
项目名称:云备份系统项目功能:搭建云备份服务器与客户端,客户端程序运行在客户机上自动将指定目录下的文件备份到服务器,并且能够支持浏览器查看与下载,其中下载支持断点续传功能,并且服务器端对备份的文件进行热点管理,将长时间无访问文件进行压缩存储。以及http客户端/服务器搭建,json序列化,文件压缩,热点管理,断点续传,线程池,读写锁,单例模式服务端:数据管理模块:内存中使用hash表存储提高访问效率,持久化使用文件存储管理备份数据业务处理模块:搭建http。
2023-12-04 18:18:08 737
原创 【云备份】第三方库
服务器或者客户端的库,这种第三方网络库,可以让我们免去搭建服务器或客户端的时间,把更多的精力投入到具体的业务处理中,提高开发效率。是一个嵌入式压缩库,支持23种压缩算法和2种存档格式。是一种数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。格式的序列化和反序列化,完成将多个数据对象组织成为。格式字符串解析得到多个数据对象的功能。数据类型:对象,数组,字符串,数字。数字:包括整形和浮点型,直接使用。例如:小明同学的学生信息。括起来的表示一个对象。括起来的表示一个数组。括起来的表示一个字符串。
2023-12-04 18:12:23 546
原创 【云备份】项目介绍
自动将本地计算机上指定文件夹中需要备份的文件上传备份到服务器中。并且能够随时通过浏览器进行查看并且下载,其中下载过程支持断点续传功能,而服务器也会对上传文件进行热点管理,将非热点文件进行压缩存储,节省磁盘空间。这个云备份项目需要我们实现两端程序,其中包括部署在用户机的客户端程序,上传需要备份的文件,以及运行在服务器上的服务端程序,实现备份文件的存储和管理,两端合作实现总体的自动云备份功能。
2023-12-04 18:09:58 778
原创 关于云备份项目的HTTP协议字段理解
200状态码英文名称为OK,表示请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态,一般用于GET与POST请求。
2023-12-04 12:13:24 340
原创 【4】基于多设计模式下的同步&异步日志系统-框架设计
实现对⽇志的异步输出功能,⽤⼾只需要将输出⽇志任务放⼊任务池,异步线程负责⽇志的落地输出功能,以此提供更加⾼效的⾮阻塞⽇志输出。◦ 为了降低项⽬开发的⽇志耦合,不同的项⽬组可以有⾃⼰的⽇志器来控制输出格式以及落地⽅向,因此本项⽬是⼀个多⽇志器的⽇志系统。◦ 系统的默认⽇志输出格式:%d{%H:%M:%S}%T[%t]%T[%p]%T[%c]%T%f:%l%T%m%n。并提供⼀个默认⽇志器提供标准输出的⽇志输出。◦ %c:表⽰⽇志器名称,不同的开发组可以创建⾃⼰的⽇志器进⾏⽇志输出,⼩组之间互不影响。
2023-12-03 20:19:02 567
原创 【3】基于多设计模式下的同步&异步日志系统-设计模式
⼀个类只能创建⼀个对象,即单例模式,该设计模式可以保证系统中该类只有⼀个实例,并提供⼀个访问它的全局访问点,该实例被所有程序模块共享。⽐如在某个服务器程序中,该服务器的配置信息存放在⼀个⽂件中,这些配置数据由⼀个单例对象统⼀读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息,这种⽅式简化了在复杂环境下的配置管理。单例模式有两种实现模式:饿汉模式和懒汉模式。
2023-12-03 13:57:09 1151
原创 【2】基于多设计模式下的同步&异步日志系统-设计模式
在初学C语⾔的时候,我们都⽤过printf函数进⾏打印。其中printf函数就是⼀个不定参函数,在函数内部可以根据格式化字符串中格式化字符分别获取不同的参数进⾏数据的格式化。
2023-12-01 22:32:54 1191
原创 【1】基于多设计模式下的同步&异步日志系统-项目介绍
• ⽣产环境的产品为了保证其稳定性及安全性是不允许开发⼈员附加调试器去排查问题, 可以借助⽇志系统来打印⼀些⽇志帮助开发⼈员解决问题• 上线客⼾端的产品出现bug⽆法复现并解决, 可以借助⽇志系统打印⽇志并上传到服务端帮助开发⼈员进⾏分析• 对于⼀些⾼频操作(如定时器、⼼跳包)在少量调试次数下可能⽆法触发我们想要的⾏为,通过断点的暂停⽅式,我们不得不重复操作⼏⼗次、上百次甚⾄更多,导致排查问题效率是⾮常低下,可以借助打印⽇志的⽅式查问题。
2023-12-01 18:13:22 1890 1
原创 进程、线程以及进程与线程的区别
线程是计算机中的基本执行单位。每个线程包含一个独立的执行序列、执行状态和相关的系统资源。多个线程共享同一个进程的地址空间和其他的资源,因此它们之间的通信和协调比较容易。在多线程程序中,多个线程可以同时执行不同的任务,在单处理器系统中,通过在不同的时刻切换不同的线程执行,可以实现伪并发的效果。线程包含线程独立栈,寄存器,以及程序计数器。
2023-11-28 18:59:06 1047
原创 线程为什么比进程的切换效率高
我们知道页表一般都很大,并且存放在内存中,所以处理器引入MMU后,读取指令、数据需要访问两次内存:首先通过查询页表得到物理地址,然后访问该物理地址读取指令、数据。为了减少因为MMU导致的处理器性能下降,引入了TLB,TLB是Translation Lookaside Buffer的简称,可翻译为“地址转换后援缓冲器”,也可简称为“快表”。简单地说,TLB就是页表的Cache,其中存储了当前最可能被访问到的页表项,其内容是部分页表项的一个副本。
2023-11-28 09:30:33 871
原创 Select、Poll、Epoll的优缺点
select模型是Windows sockets中最常见的IO模型。它利用select函数实现IO 管理。通过对select函数的调用,应用程序可以判断套接字是否存在数据、能否向该套接字写入数据可以等待多个套接字。
2023-11-18 11:52:23 117
原创 【RTTI】C++运行时类型鉴定机制
这种设计的一种可能做法,就是为num_sequence增加一个atring member,并令每一个派生类的constructor都将自己的类名作为参数,传给num_sequence的constructor。每一个多态类(polymorphic class ),如Fibonacci、Pell,等等,都对应一个type_info对象,该对象的name()函数会返回一个。为了调用 Fibonacci 所定义的gen_elems(),我们必须指示编译器,将ps的类型转换为 Fibonacci 指针。
2023-11-01 09:07:54 291
原创 关于C2447 “{”: 缺少函数标题(是否是老式的形式表?)
我从vscode上把代码移植过来,实际并无任何错误。但是因为这个注释,一直在报错,我把所有注释都删了,程序就自然运行了。以下两幅图,实际上并没有任何错误。
2023-10-24 20:06:55 497 2
原创 【C++11】列表初始化
通常,如标准程序库中的Vector这样的容器,总是需要声明对象-循环初始化这样的重复动作,这对于使用模板的泛型编程无疑是非常不利的。在C++11中,集合初始化已经成为基本功能,这种初始化的方法被称为“初始化列表” (initializer list)。//c++98失败,c++11通过。//c++98失败,c++11通过。//c++98通过,c++11通过。//c++98失败,c++11通过。
2023-10-21 23:18:55 124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人