- 博客(42)
- 收藏
- 关注
原创 除了敲代码,程序员还能做什么副业
主要原因有两个:1,博主目前的薪资在计算机领域并不算高,养活一个人当然是轻轻松松,但博主有个青梅竹马的对象,不久后就得考虑结婚生子的问题了(得花钱哈哈哈哈),因此得想办法增加些收入。2,在经历秋招这个残酷的过程后,我深刻意识到,计算机行业竞争太强了太内卷了,我担心以后跟不上卷的节奏,然后被淘汰掉,有个副业至少能兜点底。前期,也就是24年2月-6月,我当时在国外交换,主要在准备理论部分的知识,包括背八股文,刷算法题,做项目,找实习,可谓是苦不堪言,甚至经常凌晨三四点起床参加面试(国内外时差导致)。
2025-04-13 13:48:00
150
原创 六种常用设计模式
/ 抽象产品类Apublic:// 具体产品类A1public:// 具体产品类A2public:// 抽象产品类Bpublic:// 具体产品类B1public:// 具体产品类B2public:// 抽象工厂类public:// 具体工厂类1public:// 具体工厂类2public:// 创建具体工厂对象// 创建具体产品对象// 调用具体产品对象的方法// 释放资源。
2024-05-21 04:44:22
1141
原创 Redis数据库知识点
在这种模型下,Redis的主线程仍然负责执行命令的解析、执行以及数据处理等核心任务,而多个 I/O 线程负责处理网络 I/O 操作,如接受新的客户端连接、读取和写入数据等。aof是在执行写命令是,不仅会将数据写入到内存中,还会将写操作追加到aof文件中,它会以日志的形式来记录每一个写操作,在redis重启后,通过重新执行aof文件中的命令,来恢复数据。:Redis 采用了预编译的方式处理客户端请求,将一些常用的操作编译成底层的指令,减少了解析和执行的时间,提高了读取速度。
2024-05-17 04:47:49
943
原创 软链接(Symbolic link)和硬链接(Hard link)有什么区别:
总的来说,软链接提供了更大的灵活性和便利性,可以跨越文件系统进行链接,并且可以链接到目录。而硬链接提供了更高的稳定性,它们的链接是强的,即使原始文件被删除,链接仍然存在。
2024-05-13 22:27:50
836
原创 网路分层模型
物理层(Physical Layer):数据链路层(Data Link Layer):网络层(Network Layer):传输层(Transport Layer):会话层(Session Layer):表示层(Presentation Layer):应用层(Application Layer):物理层(Physical Layer):数据链路层(Link Layer)(也称为网络接口层):网络层(Internet Layer):传输层(Transport Layer):应用层(Application La
2024-05-04 05:02:39
404
原创 单例设计模式c++
单例模式指在整个系统生命周期里,保证一个类只能产生一个实例,确保该类的。单例模式分类单例模式可以分为和,两者之间的区别在于。
2024-04-24 20:11:47
359
3
原创 STL中各类容器详细介绍
STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。
2024-04-04 20:00:07
1579
原创 从输入 URL 到页面展示到底发生了什么?
这时候攻攻击者就会有机可乘,通过拦截第一次请求,从而进行后续的攻击,比如篡改数据、跳转到钓鱼网站等等。
2024-03-31 23:59:29
352
原创 如何制作静态库和动态库,以及如何使用它们
命名规则:linux:libxxx.a, 以lib为前缀,.a为后缀, xxx为静态库名字windows: libxxx.lib, 以lib为前缀,.lib为后缀, xxx为静态库名字。
2024-03-31 19:21:30
313
原创 进程知识点
进程是某个程序在计算机系统中正在运行的实例。进程是操作系统资源分配的基本单位,可以看作是程序在执行过程中的动态表现。PCB是进程中存在的唯一标志。从不同角度,进程可以有不同的定义,比较传统典型的定义有:三者皆强调动态性进程是程序的一次执行过程。进程是一个程序及其数据再处理机上顺序执行时所发生的活动进程是具有独立功能的程序在数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单位。进程控制的主要功能就是对系统中的所有进程实施有效的管理,它具有创建进程、撤销进程、实现进程状态转换的功能。
2024-03-28 23:42:48
797
转载 C++后端学习路线
互斥锁阻塞的线程是挂起的,此时系统会优先执行其它可执行的线程,就会将阻塞的线程切换到可执行线程,而当临界区执行的时间非常短时,此时线程切换频繁、开销较大,此时就会采用自旋锁的方式,让阻塞的线程处于忙等状态。当然对于非科班的学生来说,大部分都没有充足的时间的,这时候建议尽量把C++基础、计算机网络、操作系统、网络编程、数据结构与算法这五个部分的内容学得很扎实,大概6个月的时间。9、排序算法:冒泡排序、简单选择排序、插入排序、希尔排序、归并排序、堆排序、快速排序。18、继承时,父类的析构函数是否为虚函数?
2024-03-19 05:43:34
223
1
转载 预处理#相关命令
value__LINE__整数值,表示当前正在编译的行在源文件中的行数。__FILE__字符串,表示被编译的源文件的文件名。__DATE__一个格式为 "Mmm dd yyyy" 的字符串,存储编译开始的日期。__TIME__一个格式为 "hh:mm:ss" 的字符串,存储编译开始的时间。整数值,所有C++编译器都定义了这个常量为某个值。如果这个编译器是完全遵守C++标准的,它的值应该等于或大于199711L,具体值取决于它遵守的是哪个版本的标准。
2024-03-15 01:06:29
73
原创 c++复习
栈: 存放函数的局部变量、函数参数、返回地址等,由编译器自动分配和释放。堆: 动态申请的内存空间,就是由 malloc 分配的内存块,由程序员控制它的分配和释放,如果程序执行结束还没有释放,操作系统会自动回收。全局区/静态存储区(.bss 段和 .data 段): 存放全局变量和静态变量,程序运行结束操作系统自动释放,在 C 语言中,未初始化的放在 .bss 段中,初始化的放在 .data 段中,C++ 中不再区分了。常量存储区(.data 段): 存放的是常量,不允许修改,程序运行结束自动释放。
2024-03-06 01:49:53
849
原创 pair,二叉搜索树(BST),set,map,AVL树,红黑树,B树,B+树
(2)两种实现都缩放为a O(lg N),其中N是叶子的数量,但实际上AVL树在查找密集型任务上更快:利用更好的平衡,树遍历平均更短。(4)两个都给O(log n)查找,但平衡AVL树可能需要O(log n)旋转,而红黑树将需要最多两次旋转使其达到平衡(尽管可能需要检查O(log n)节点以确定旋转的位置)。(1)AVL树是更加严格的平衡,因此可以提供更快的查找速度,一般读取查找密集型任务,适用AVL树。pair,二叉搜索树(BST),set,map,t红黑树,AVL树,B树,B+树。
2024-03-05 04:55:13
846
转载 软件设计模式
综上来看,如果系统有良好的设计,也尽可能满足了开闭原则,那么后续在扩展新功能时,原有系统不会受到影响,只需要针对新扩展的部分重点测试即可(测试工程师狂喜),即便是扩展的功能出现了问题,也相对容易进行修复,最坏就是把扩展的内容全删掉罢了。就像打麻将,同时有10桌在玩,每桌都有4个"八筒",如果建立40个"八筒"对象,那就非常冗余,但如果用享元模式建立一套麻将牌,每桌打出"八筒"时,就调用享元中的"八筒",相当于只用了1个对象,这样即节省了资源,也完成了需求。子类实现父类的方法,输入要比父类的输入更宽松。
2024-03-04 04:08:11
42
原创 动态库制作
4, 运行主程序,这是需注意linux系统会找不到对应的动态库的位置,这是因为linux只会在系统动态库文件夹中和环境变量里的路径去寻找,因此我们-需要将所制作的动态库放至系统动态库文件夹中/usr/local/lib 或将其路径添加到环境变量中。3,编译主程序, 需添加参数 -l动态库文件名(省略前缀和扩展名) -L(指定寻找动态库的路径)linux下前缀为dll 扩展名为.so(shared object)2,在主程序中包含动态库(就是添加头文件的方法)1,制作动态库, libmath.so。
2024-03-04 02:18:22
139
原创 并行和并发的区别
并行和并发的区别是并行指的是多个任务在同一时间点上同时执行,而并发指的是多个任务在同一时间段内交替执行。并行需要多个处理器或者多核处理器,每个任务都有独立的资源,不会互相干扰。并发可以在单核或者多核处理器上实现,多个任务通过快速切换或者时间片轮转来共享资源,提高系统的响应性和资源利用率。
2024-03-03 23:41:08
151
原创 身份证,户口簿翻译模板
个人主页:吴彦祖 (WuYanZu0x) - Gitee.com翻译件仓库链接:ID and Household Register template: 身份证和户口簿的翻译件模板 (gitee.com)
2024-01-12 12:08:47
2922
2
原创 web服务器的实现
早起第一件事便是改代码,首先去研究了http的格式,发现reqline是以空格为分隔符的,书上写的是slash / ,我昨天没怀疑书上有误,因为这本书蛮负盛名的。将strtok()的分隔符参数由 / 修改为空格后,测试便成功了!在处理http请求时,需要对接受到的http内容进行处理,单独取出http的各部分内容。由于对http头部格式不熟悉,同时对字符串的操作不熟悉,例如书上给的。服务器始终有bug,改了许久,尝试了许多方法仍未处理成功。今天将bug版本先上传了,头昏脑胀了,休息了,明天继续!
2023-12-20 22:48:25
348
1
原创 测试基于线程池的服务器时所遇到的问题
结合之前第二个客户端一直等待的现象,我推测应该是锁的问题导致一直等待,add_task中用的锁为mutex_pool,我突然联想到上一个客户端一直在工作函数,那么是不是work函数是否加了锁,然而由于一直在工作,导致没有解锁,于是我去检查了work函数,发现果然是这个问题。work函数中,等待任务函数执行完成之后,才会进行解锁操作,就是这一点导致,只要前面的客户端任务没有结束,服务器端就无法为其他客户端添加任务。未收到连接,accept则阻塞,接受到连接,则添加到线程池任务队列中,任何进行下一个循环。
2023-12-20 11:31:01
386
1
转载 IOCP对比Epoll
当然你也可以说,也很有可能是,L店的打印机是时速30张/分钟,W店打印机时速120张/分钟,非常正确,但是这就属于硬件配置的范畴了,这就等于是i9处理器与二十年前的赛扬II处理器在比较了。你会发现,你节省了排队的时间,等到你能获得打印机资源的时候,告诉你来处理。2、告诉店小二说,我先排队,轮到我了帮打印下,好了通知我(也假定你来回路上不耗时);而W店的工作人员,工作任务巨多,慢慢悠悠,边工作边吃饭边聊天,很久才轮到你的打印。如果L店的工作人员,工作任务少,效率非常高,很快就轮到你打印了;
2023-12-19 22:47:16
387
1
原创 杂记12/17——讨论关于服务器实现并发的方式
socket套接字,当我们初始化一个套接字后,能得到一个文件描述符fd,通过管理文件描述符来管理这个抽象的socket,我们能对socket做这些操作:bind将socket绑定到一个端口上,sockaddr为包含ip和端口信息的一种数据结构,listen利用socket监听绑定的端口,accept接受监听到达请求信息并得到对方的信息,还有connect连接,读写收发,close关闭socket等。有了这些函数,我们便能实现最基础的通信。线程,多线程,线程池,锁,条件变量,线程状态(运行,就绪,阻塞)
2023-12-17 22:38:46
969
原创 网络——应用层
(这里解释一下DHCP代理服务器,假设在每个网络都搭建一个DHCP服务器,这样代价太大了,于是在每个网络都设一个DHCP中继代理relay agent,在客户端所属网络内,客户端以广播形式找到relay agent,然后relay以单播的方式与DHCP服务器通信),当这个网络的DHCP服务器或者DHCP代理服务器收到时,便会回复。而在在查询域名对应的ip时,主机第一个访问的是本地域名服务器,其存储的是用户当前这个小网络的域名-IP对应信息,若未查到则利用本地域名服务器从根域名服务器开始查询,
2023-12-11 21:38:39
955
1
原创 网络——网络层
我们还知道一点:想要发送数据,必须知道对方的IP地址与Mac地址这时就需要利用到ARP协议了,他的作用是在局域网内获得目标IP的Mac地址,而如果需要跨网段获取Mac地址时,就需要利用路由器,前面说到,路由器有许多端口,每个端口有ip地址和mac地址,跨网段的时候,由路由器作为代理,帮助我们在另一个网络中获得mac地址。
2023-12-11 21:37:54
2431
1
原创 杂记2023/12/10
例如这里,我在windows下利用其提供的socket接口实现网络通信(其实这个过程中,我就利用windows系统的端口,这个是在win提供的接口的帮助下才能实现的)。socket英文意思,插座插孔,这个插口的位置设置在应用程序的对外接口上,当通信时,其实不是简单的根据ip地址将数据从一台主机发送到另一台主机上。应用程序和主机的某个端口之间的接口。这里又引入两个新概念——
2023-12-10 18:33:10
369
原创 杂记2023/12/8
然后了解了三次握手的过程,以及可靠传输的实现(利用连续ARQ技术+滑动窗口,服务器端收到多个包,只用回复一个包,核心内容为ACK(标志位)+ack(确认号))。首先,了解了udp,tcp的报文格式,以及这两者的特点。tcp头部基础为20字节,可添加40字节的选项。依旧从网络开始,今天开始学习传输层。源端口号2字节,目标端口号2字节。udp总长度2字节,校验和2字节。开始学习socket网络编程技术。进一步理解了端口port的概念。新概念,字节序,大端,小端。
2023-12-08 17:46:54
342
原创 杂记2023/12/7(计网物理层,数据链路层,网络层)
源主机在他仅在所属网段广播arp,如果连接有目标主机的路由器收到后便会回复源主机,然后路由器将自己的mac地址回复给源主机,源主机便将数据包发送给路由器,再由路由器对应端口在其所属的网络进行广播,如此,一层一层的接力传送,整个传输过程中,源ip和目标ip一直不变,原mac和目标mac在变(为参加接力传输的端口的网卡的mac)实际上 网络分为公网和私网,公网相当于真正的所有主机IP都唯一且互联的网络,而私网是小型的网络,私网内的ip在公网是查询不到路径的。internet互联网,数台主机跨网段相连的网络。
2023-12-07 19:20:45
428
原创 c++11新特性
4, decltype(表达式) declare type 声明类型,根据括号里的表达式推导数据类型,编译器时期完成,只推导数据类型,不计算表达式的值。decltype(函数),这种情况下,若函数的返回值为const int/string 只能推导出int,string,因为返回的是一个字面量,纯右值。(正确,constexpr只有一层定义 1,常量,修改时需写上 constexpr+原来的数据类型)R"***(所需原始的原始字面量)***" * **可省略,但两端需一致,所以直接不写就可以了。
2023-12-06 22:08:31
797
原创 杂记2023/12/6
例如:ip:192.168.1.23,子网掩码:255.255.255.0,ip与子网掩码相与得到网段号,这里就是前三字节。计算机中用12个十六进制数表示(六组6字节,每组两位16进制,因为一位16进制为四位2进制数,两位16进制为一个字节)单词起手,18分钟完成,复习的单词基本都认识,新单词中不认识的词汇占比开始上升。当目标网段不在当前路由器直接相连的网段集合中时,需要让路由器连接其他路由器。ip四字节,网段号+主机号,每部分长度不一定,需通过子网掩码得出。),由厂商分配给它生产的网络设备;
2023-12-06 22:07:51
378
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人