- 博客(166)
- 收藏
- 关注
原创 【Python基础】Python异常介绍
程序开发时,很难将 所有的特殊情况 都处理的面面俱到,通过 异常捕获 可以针对突发事件做集中的处理,从而保证程序的 稳定性和健壮性、• 在程序执行时,可能会遇到 不同类型的异常,并且需要 针对不同类型的异常,做出不同的响应,这个时候,就需要捕获错误类型了。• 程序在运行时,如果Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常。• 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的 异常捕获 中。
2023-11-07 11:03:30
144
原创 【Python基础】 Python设计模式之单例模式介绍
• 使用 类名() 创建对象时,Python 的解释器 首先 会调用 new 方法为对象分配空间。• 否则Python 的解释器 得不到 分配了空间的 对象引用,就不会调用对象的初始化方法。2 在 init 方法中,判断init_flag,如果为False 就执行初始化动作。4 这样,再次 自动 调用 init 方法时,初始化动作就不会被再次执行 了。• Python 的解释器获得对象的 引用 后,将引用作为 第一个参数,传递给。定义一个 类属性,初始值是None,用于记录 单例对象的引用。
2023-11-07 10:36:37
651
原创 【Python基础】史上最全||一篇博客搞懂Python面向对象编程(封装、继承、多态)
1.1 过程和函数(科普)• 过程 是早期的一个编程概念• 过程 类似于函数,只能执行,但是没有返回值• 函数 不仅能执行,还可以返回结果1.2 面相过程 和 面相对象 基本概念应用场景• 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而不希望在外部被访问到• 私有属性 就是 对象 不希望公开的 属性• 私有方法 就是 对象 不希望公开的 方法定义方式• 在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线,定义的就是私有 属性或方法。
2023-11-07 08:44:06
772
原创 【Python基础】Python函数介绍(超全面、缺省参数、多值传参、可变参数等)
问题 1:在函数内部,针对参数使用 赋值语句,会不会影响调用函数时传递的 实参变量?• 有时可能需要 一个函数 能够处理的参数 个数 是 不确定的,这个时候,就可以使用 多值参数。• 函数内部的代码保持不变,针对 不同的参数 处理 不同的数据,并且 返回期望的处理结果。• 采集数据,例如 温度计,返回结果就是当前的温度,而不需要传递任何的参数。• 函数内部的代码保持不变,针对 不同的参数 处理 不同的数据。• 一般在给多值参数命名时, 习惯使用以下两个名字。• 在参数后使用赋值语句,可以指定参数的缺省值。
2023-11-06 09:21:27
585
原创 【Python基础】Python容器中公共方法介绍(元组、字典、字符串、列表)
• 在 迭代遍历 嵌套的数据类型时,例如 一个列表包含了多个字典。– 如果 不存在,在 循环整体结束 后,希望 得到一个统一的提示。没有通过 break 退出循环,循环结束后,会执行的代码。• 需求:要判断 某一个字典中 是否存在 指定的 值。– 如果 存在,提示并且退出循环。
2023-11-06 08:39:49
335
原创 【算法训练营】最近公共祖先+求最大连续bit数
根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加,如果不连。续,则从0开始计数。
2023-11-05 20:44:07
185
原创 【Python基础】IF、Else判断以及Whlie、for循环介绍符实例
• 但是,如果希望 再增加一些条件, 条件不同,需要执行的代码也不同 时,就可以使用 elif。• continue 某一条件满足时,不执行后续循环内部的代码,开始下一轮循环。• break 某一条件满足时,退出循环,循环结束啦,不再执行后续重复的代码。• 只有多个条件都满足,才能够执行后续代码,这个时候需要使用到 逻辑运算符。在程序开发中,通常 在判断条件时,会需要同时判断多个条件。条件 1 满足 并且 条件 2 满足 执行的代码。条件 2 满足时,执行的代码。条件 3 满足时,执行的代码。
2023-11-02 16:38:32
291
1
原创 【Python基础】变量基本使用
变量定义• 在 Python 中,每个变量 在使用前都必须赋值 在使用前都必须赋值,变量 赋值以后 该变量 才会被创建• 等号(=)用来给变量赋值– = 左边是一个变量名– = 右边是存储在变量中的值名 变量名 = 值变量定义之后,后续就可以直接使用了变量演练 1 —— iPython定义 qq_number 的变量用来保存 qq 号码定义 qq_password 的变量用来保存 qq 密码。
2023-11-02 16:17:21
200
原创 【Linux命令】Linux常见命令介绍(最强超详细版本)
方式 3 3: : t cat > > t c.txt 按 按 c ctrl+c 组合键退出;gzip –dv main.c.gz,或者 bzip2 –dv main.c.bz2。-h:–human-readable,以人们易读的 GB、MB、KB 等格式显示,例如 要显示“/home/user/0718/”目录下的 main.cc 文件的最。则就会将 main.c 压缩成 main.c.gz 或者 main.c.bz2。 >出 重定向输出 、 >>出 添加输出 、 2>错误重定。
2023-10-31 08:58:24
1315
原创 【C++项目】高并发内存池项目第八讲 项目总结和面试问题分享
增加动态申请的效率减少陷入内核的次数减少系统内存碎片提升内存使用率尽量减少锁竞争应用于多核多线程场景。
2023-10-30 09:39:44
1377
原创 【C++项目】高并发内存池项目第七讲多线程并发执行情况下的性能分析以及复杂问题的调试技巧
条件断点是调试复杂应用程序时的强大工具,因为它们可以帮助 仅在特定情况下中断程序,而不是每次执行都中断。使用条件断点可以显著提高调试的效率,因为它允许 仅在特定条件下中断程序,而不是每次执行都中断。条件断点是一种在代码调试过程中使用的调试工具,它允许在满足特定条件时中断程序的执行,而不仅仅是在达到特定代码行时中断。忽略计数: 可以设置条件断点,使其在满足条件时连续中断多次,或者在满足条件后中断一次后自动忽略后续的满足条件。条件断点的位置:条件断点可以设置在代码的特定行或特定函数的入口处。
2023-10-30 09:12:29
285
原创 【C++项目】高并发内存池性能测试
这段代码是一个 C++ 程序,主要用于比较并评估使用不同内存分配和释放方式的性能。它包括了两个主要函数 BenchmarkConcurrentMalloc 和 BenchmarkMalloc 以及 main 函数来执行这些性能测试。BenchmarkConcurrentMalloc 函数这个函数用于执行并比较使用并发内存分配(ConcurrentAlloc 和 ConcurrentFree)的性能。它创建了一定数量的线程,每个线程会执行一定轮次的内存分配和释放操作。
2023-10-28 15:46:45
262
原创 【C++项目】高并发内存池第五讲内存回收释放过程介绍
PageCache需要将一页一一页的小块内存何合并成一张大页的内存,来解决内存碎片问题,因为大的可以切成小的,而当申请的内存大于小块的内存碎片时,就会向堆中申请,造成内存浪费。CentralCache回收回来还需要做前后页的合并,合成一个大的内存块,然后继续交给PageCache处理。当闲置的内存超过一个批量单位大小的时候就开始回收,首先要计算出要回收到哪个桶的的内存,然后逐级往上回收。
2023-10-28 11:15:02
522
原创 【C++项目】高并发内存池第四讲 申请内存过程介绍流程介绍
一样的道理,仔细分析代码不难推断其逻辑,核心功能就是:当CentralCache向它申请内存时,它要是有空闲的内存就分配给CentralCache,要是没有,就想系统申请,然后会多申请一些,挂到相应的桶(挂桶规则之前介绍框架设计的时候介绍过)方便下一次分配。这里要计算对齐函数和相应的桶的下标,这个之前介绍ThreadCache的框架设计的时候有说明,这里不多赘述,计算完对齐数和桶下标之后,如果当前的桶下面有内存对象就直接返回给上级,如果没有,就去中中心调度器CentralCache中申请。
2023-10-26 11:00:48
529
原创 【C++项目】高并发内存池第三讲PageCache框架涉及+核心实现(上)
GetOneSpan//查看一下当前spanlists是否span未分配的while (it!else//先把centralCache的桶解掉 ,这样如果其他的线程释放对象回来,不会阻塞//走到这里说明没有空闲的span了,再往下找PageCache要//加锁 这是一个大锁//到这一步程序就已经申请到一个span了//对span进行切分 此过程不需要加锁 因为其他的线程访问不到这个span。
2023-10-23 15:47:56
586
原创 【C++项目】高并发内存池第二讲中心缓存CentralCache框架+核心实现
回顾一下ThreadCache的设计:如图所示,ThreadCache设计是一个哈希桶结构,每一个桶挂的是一块切分好的小块内存块,每个线程独享一个ThreadCache。CentralCache也是一个哈希桶结构,跟ThreadCache的结构类似,只不过ThreadCache挂的是切分好的小对象内存块,而CentralCache挂的是一个spanlist 是一个连续的大块内存链表,链接着很多个span(大块内存)
2023-10-23 10:58:56
1145
原创 【Bug处理】E0265 函数 “SizeClass::RoundUp“ (已声明 所在行数:62)不可访问
错误(活动) E0265 函数 “SizeClass::RoundUp” (已声明 所在行数:62,所属文件:“D:\C++STUDY\项目\高并发内存池\CONCURRENT_MEMORY_POOL\Common.h”) 不可访问 Concurrent_Memory_Pool D:\C++Study\项目\高并发内存池\Concurrent_Memory_Pool\ThreadCache.cpp 7。在C++类中,不加修饰符默认类的成员函数权限是私有,吃一堑长一智吧~
2023-10-13 12:59:51
901
2
原创 【C++项目】高并发内存池第一讲(项目整体框架介绍、哈系统结构设计)
本项目参考了谷歌 tcmalloc 设计模式,设计实现了高并发的内存池。基于 win10 环境 VS2013,采用 C++进行编程,池化技术、多线程、TLS、单例模式、互斥锁、链表、哈希等数据结构。该项目利用了 thread cache、central、cache、page cache 三级缓存结构,基于多线程申请释放内存的场景,最大程度提高了效率,解决了绝大部分内存碎片问题。
2023-10-13 10:33:00
420
原创 【编程技巧】用size_t定义数量有什么好处
因为它是无符号的,所以不会有负数问题,并且可以容纳足够大的正数,以应对大多数情况。平台无关性:size_t 是一个无符号整数类型,其大小适应当前编译环境的体系结构,通常是足够大以容纳目标平台上的最大对象大小。统一标准:C++标准库和许多其他库函数通常使用 size_t 来表示容器大小、索引和内存分配的大小。因此,使用 size_t 使您的代码与这些标准库和函数更兼容。总之,使用 size_t 来定义数量在 C++ 中是一种良好的实践,可以提高代码的可移植性、可读性,同时有助于避免一些潜在的问题。
2023-10-11 16:25:49
254
原创 【C++项目】手动实现一个定长内存池(了解内存分配机制、定长内存提高效率 附源码)
这是一个 C++ 中的对象池(Object Pool)的简单实现,用于更有效地管理对象的内存分配和回收。对象池是一种内存管理技术,旨在减少频繁分配和释放对象的开销,从而提高程序的性能。以下是该对象池的一些关键部分和功能:New() 函数:用于获取一个新的对象。它首先检查是否有已归还的内存块,如果有,则使用归还的内存,否则从内存池中分配一个新的对象。它使用 malloc 来分配内存,然后使用定位 new 来调用对象的构造函数,初始化对象。Delete() 函数:用于回收一个对象。
2023-10-11 16:23:21
593
原创 【算法训练营】 井字棋
可以通过遍历棋盘并检查每一行、每一列以及两个对角线是否有连续的当前玩家的棋子来实现这个函数。如果找到任何一行、一列或者一条对角线有连续的3个1(表示当前玩家的棋子),那么当前玩家获胜,返回true。否则,返回false;没有什么难度,主要是考察对二维数组的理解。
2023-09-28 16:36:57
324
原创 【计算机组成原理】一文搞懂原码、反码、补码和位运算符(左移右移按位与异或等)
在计算机当中都是使用补码来进行计算和存储的。补码很好的解决了反码负数不能跨零计算的弊端,并且补码还可以记录一个特殊的值 -128,这个数据在 1 个字节下是没有原码和反码学习了原码、反码和补码的知识之后,我们就可以了解到,Java 当中所有的基本数据类型。比如整数类型的数据类型,存储的数都是同样的,区别是在于什么地方,假设存储的值都是 10在C语言中除了算数操作符、关系操作符、逻辑操作符外还有一类操作符 “ 位操作符 ”。
2023-09-28 15:14:39
7059
5
原创 【计算机网络】第三讲网络相关协议讲解(DNS、NAT、ICMP、总结)
数据链路层数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据以太网是一种技术标准;既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;以太网帧格式理解mac地址理解arp协议理解MTU网络层网络层的作用: 在复杂的网络环境中确定一个合适的路径.理解IP地址, 理解IP地址和MAC地址的区别.理解IP协议格式.了解网段划分方法理解如何解决IP数目不足的问题, 掌握网段划分的两种方案.
2023-09-22 11:51:33
657
原创 【计算机网络】IP协议第二讲(Mac帧、IP地址、碰撞检测、ARP协议介绍)
碰撞检测是一种网络通信中的冲突检测机制,它用于检测在以太网等共享介质网络中的数据包碰撞。在早期的以太网中,多台设备共享同一物理传输介质,当两个或更多设备尝试同时发送数据包时,数据包可能会在传输介质上发生碰撞,从而损坏数据包。为了检测这些碰撞并采取适当的措施,采用了碰撞检测机制。碰撞域是一个物理或逻辑区域,在这个区域内的设备在发送数据包时可能会发生碰撞。通常,碰撞域与局域网的物理边界有关。设备在同一碰撞域内,它们之间的数据包冲突会导致碰撞。
2023-09-21 13:23:45
2554
原创 【计算机网络】IP协议第一讲(协议格式介绍)
4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0).
2023-09-14 14:30:00
382
原创 【计算机网络】深入理解TCP协议二(连接管理机制、WAIT_TIME、滑动窗口、流量控制、拥塞控制)
exit(3);在这里的2表示什么?当服务器在处理其他请求时来不及处理新的链接请求,监听套接字所维护的最大链接数为:2+1,相当于排队listen底层有个backlog来维护:backlog 是 TCP 套接字选项之一,它用于指定操作系统中已完成连接队列的最大长度。在网络编程中,当服务器接受到客户端的连接请求时,操作系统会将这些请求存储在一个已完成连接队列中,等待服务器进程调用 accept 来接受这些连接。backlog 参数控制了这个队列的最大长度。
2023-09-13 15:21:09
652
原创 【计算机网络】深入理解TCP协议一(三次握手四次挥手、标记位、确认应答机制、超时重传机制)
SYN(Synchronize): SYN 标记位用于建立一个新的 TCP 连接。当客户端希望与服务器建立连接时,它会向服务器发送一个带有 SYN 标记位的 TCP 报文,这个过程称为 TCP 三次握手。SYN 标记位的序列号用于初始化连接的起始序列号。ACK(Acknowledgment): ACK 标记位用于确认接收到的数据。当这个标记位被设置时,它表示该报文包含一个有效的确认号字段,确认了前面收到的数据。通常,除了在连接建立时的初始 SYN 报文外,其他 TCP 报文都会设置 ACK 标记位。
2023-09-13 09:10:08
545
原创 【Mysql】数据库第四讲(表的增删改查操作 超全面 附实操案例)
孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80。注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序。数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩。AND:多个条件必须都为 TRUE(1),结果才是 TRUE(1);OR:任意一个条件为 TRUE(1), 结果为 TRUE(1)NOT:条件为 TRUE(1),结果为 FALSE(0)语文成绩在 [80, 90] 分的同学及语文成绩。
2023-09-12 16:12:20
794
原创 【Mysql】数据库第三讲(表的约束、基本查询语句)
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。比如在公司,我们需要一个员工管理系统,系统中有一个员工表,员工表中有两列信息,一个身份证号码,一个是员工工号,我们可以选择身份号码作为主键。默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整。
2023-09-11 16:17:28
468
原创 【Mysql】数据库第二讲(数据库中数据类型的介绍)
数值越界测试:说明:在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。可以通过UNSIGNED来说明某个字段是无符号的无符号案例:-- 无符号,范围是: 0 - 255+------+| num |+------+| 255 |+------+注意注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。基本语法。
2023-09-09 16:03:21
845
原创 【Mysql】数据库第一讲(服务器数据库的安装和基础操作介绍)
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci。这时,可以打开看看 mytest.sql 文件里的内容,其实把我们整个创建数据库,建表,导入数据的语句都装载这个文件中。如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原。数据库内部看不到对应的数据库对应的数据库文件夹被删除,级联删除,里面的数据表全部被删.对数据库的修改主要指的是修改数据库的字符集,校验规则。
2023-09-09 15:16:28
583
原创 【网络编程】C++实现网络通信服务器程序||计算机网络课设||Linux系统编程||TCP协议(附源码)
在ServerTcp函数定义定义了一个init函数,用于配置服务器的网络监听套接字,绑定IP地址和端口,并开始监听来自客户端的连接请求。①首先创建套接字:使用 函数创建一个套接字,这里使用的是IPv4()和TCP()协议。如果创建失败,会记录错误信息并退出程序。②绑定地址和端口:创建一个 结构体变量 ,它用于保存服务器的本地地址信息。
2023-09-06 08:22:26
1427
原创 【网络编程】万字详解||一个简单TCP服务器(TCP、线程池、守护进程)源码+介绍
这段代码实现了一个简单的互斥锁(Mutex)和锁保护(LockGuard)机制,用于在多线程环境中保护共享资源的安全访问。Mutex 类:Mutex 类是一个封装了 pthread 互斥锁的简单类。它的构造函数用于初始化互斥锁,lock() 方法用于获取锁,阻塞其他尝试获取锁的线程,unlock() 方法用于释放锁,允许其他线程获取锁,析构函数用于销毁互斥锁。
2023-08-09 15:08:06
906
原创 【网络编程】实现一个简单多线程版本TCP服务器(附源码)
通过监听连接请求,服务端可以在一个循环中接受多个连接,为每个连接创建对应的套接字,从而实现并发处理多个客户端。在网络编程中,字节序问题很重要,因为不同的计算机体系结构可能使用不同的字节序,这可能导致在通信过程中的数据解释错误。accept 函数是在服务器端用于接受客户端连接请求的函数,它在监听套接字上等待客户端的连接,并在有新的连接请求到来时创建一个新的套接字用于与该客户端通信。当服务器的监听套接字接收到一个新的连接请求时,accept 函数会创建一个新的套接字用于与该客户端通信。
2023-08-08 13:42:36
924
原创 【网络编程】利用套接字实现一个简单的网络通信(UDP实现聊天室 附上源码)
网络字节序是一种在计算机网络中使用的固定字节顺序,用于在不同计算机体系结构和操作系统之间传递数据。在计算机内部,不同的体系结构(例如x86、ARM、SPARC等)和操作系统(例如Windows、Linux、iOS等)可能使用不同的字节顺序,这可能导致在网络通信中出现问题。为了解决这个问题,网络通信中使用了统一的字节顺序,即网络字节序。网络字节序采用大端字节序(Big-Endian)表示法,其中较高的字节位于较低的内存地址上,较低的字节位于较高的内存地址上。
2023-08-07 13:16:52
928
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅