自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 有限状态机

随后,它顺序地读取字符串中的每一个字符,并根据当前状态和读入的字符,按照某个事先约定好的「转移规则」,从当前状态转移到下一个状态;根据题意,「初始状态」应当为状态 1,而「接受状态」的集合则为状态 3、状态 4、状态 6、状态 9 以及状态 10。换言之,字符串的末尾要么是空格,要么是数字,要么是小数点,但前提是小数点的前面有数字。其中,一个状态可能既是「初始状态」,也是「接受状态」。自动机驱动的编程,可以被看做一种暴力枚举方法的延伸:它穷尽了在任何一种情况下,对应任何的输入,需要做的事情。

2024-05-09 14:14:53 458

原创 HTTP协议及HTTPS

摘要算法用来实现完整性,能够为数据生成独一无二的「指纹」,用于校验数据的完整性,解决了篡改的风险。客户端在发送明文之前会通过摘要算法算出明文的「指纹」,发送的时候把「指纹 + 明文」一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的「指纹」和当前算出的「指纹」做比较,若「指纹」相同,说明数据是完整的。服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。

2024-04-29 21:25:55 579

原创 求逆序数的方法

树状数组可以求前缀和。

2024-04-16 19:41:41 184 1

原创 华为实习笔试0410

第2到n+1行表示云服务的计费日志,共4列,第1列表示时间戳(是一个数字字符串,长度为10) 、第2列表示客户标识(是一个字符串,长度为1-16),第3列表示计费因子 (是一个字符串,长度为1-16,计费因子查不到时认为计费因子单价是0),第四列表示计费时长时长(范围为0-100,当计费时长不在范围内要认为是计费日志有问题,当成计费为0处理),这4个字段使用迈号分隔。每个客户的话单总费用,共2列,第1列表示客户名,第2列表示话单费用,2列用逗号分割,输出按客户标识字典序升序排序。对输入的字符串进行拆分;

2024-04-11 23:18:18 2360

原创 多线程的竞争协作和互斥同步

接着,轮到生产者执行 P(emptyBuffers),表示减少 1 个空槽,如果当前没有其他生产者线程在临界区执行代码,那么该生产者线程就可以把数据放到缓冲区,放完后,执行 V(fullBuffers) ,信号量 fullBuffers 从 -1 变成 0,表明有「消费者」线程正在阻塞等待数据,于是阻塞等待的消费者线程会被唤醒。,当多线程相互竞争操作共享变量时,由于运气不好,即在执行过程中发生了上下文切换,我们得到了错误的结果,事实上,每次运行都可能得到不同的结果,因此输出的结果存在。

2024-04-11 20:07:37 889

原创 快速幂算法,时间复杂度logn

即计算 x 的 n 次幂函数(即,xn)。

2024-04-10 13:25:17 231 1

原创 计算二进制中1的个数

如1100&1011=1000.也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。输入一个整数,输出该数32位二进制表示中1的个数。

2024-04-09 14:42:48 253

原创 C++17 string_view

C++ 中的 string 类型在堆上存放自己的字符串数据,所以当你处理 string 类型的时候,很容易就会产生(堆)内存分配。在实际应用中,字符串操作会很频繁,频繁的内存分配会拖慢程序的运行速度。实际上在不同的编译器中结果似乎是不同的,在gcc中打出如上代码后并没有获得一样的结果,在gcc中PrintName函数中的引用并没有向堆申请内存,而vc编译器却向堆申请了内存。这是因为:gcc的string默认大小是32个字节,字符串小于等于15直接保存在栈上,超过之后才会使用new分配。

2024-04-09 14:38:18 305

原创 操作系统-进程和线程

线程是进程当中的一条执行流程。同一个进程内多个线程之间可以共享代码段、数据段、打开的文件等资源,但每个线程都有独立一套的寄存器和栈,这样可以确保线程的控制流是相对独立的。线程的优缺点?一个进程中可以同时存在多个线程;各个线程之间可以并发执行;各个线程之间可以共享地址空间和文件等资源;当进程中的一个线程奔溃时,会导致其所属进程的所有线程奔溃。举个例子,对于游戏的用户设计,则不应该使用多线程的方式,否则一个用户挂了,会影响其他同个进程的线程。为什么进程中的一个线程崩溃之后所有线程都会崩溃?

2024-03-26 23:05:48 860

原创 操作系统-操作系统结构

Windows和Linux是我们比较熟悉的两个操作系统,其中Windows系统不开源,在商业上取得了较大成就,而Linux系统开源,服务器所使用的的操作系统基本是Linux,任何人都可以下载Linux并增加自己的改动和功能。这两个系统各有特点,操作系统的核心是内核,可以从内核角度对它们进行比较。首先,我们要知道什么是内核。我们都知道,计算机是由各种外部硬件设备组成的,比如内存,CPU,硬盘等,如果我们使用的,系统性能也会受到很大的影响。那么,我们知道了内核的基本概念之后我们来了解内核是怎样工作的?

2024-03-25 21:09:08 860 1

原创 操作系统-硬件结构和内存管理

操作系统---图解系统(小林coding)_图解操作系统-CSDN博客20 张图揭开「内存管理」的迷雾,瞬间豁然开朗_20张图揭开内存-CSDN博客

2024-03-24 22:09:10 1825 1

原创 2024.3.20华为实习笔试题 安排座位

一列具有 m 个座位的火车,从起点到终点共停靠 n 个站点,站点编号从0到n-1。发车前有x名乘客预定了座位,因为预定数量可能超出座位数,为了保证效率最大化,请计算如何分配才能是座位利用率最大,并输出最大的座位利用数。说明:座位利用数定义为每个座位被使用的站数。例如有两个座位,第一个座位从第 0到 10 站有人坐(表示从0站上车,10站下车,第10站不占座,所以利用率是10-0=10),第二个座位从第1到9站有人坐,则座位利用率为(10-0)+(9-1)=18。

2024-03-21 23:08:25 420 1

原创 树状数组

创建BITree数组可以调用Updata函数。原理利用 负数 的补码。

2024-03-19 10:17:37 111 1

原创 json的序列化和反序列化

【代码】json的序列化和反序列化。

2024-03-17 13:54:32 258 1

原创 求二叉树深度 和 二叉树高度

求深度可以从上到下去查 所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中)求深度适合用前序遍历,而求高度适合用后序遍历。

2023-12-12 14:55:07 41

原创 常用排序方法

如使用快速排序。

2023-12-05 17:46:37 36 1

原创 priority_queue(优先级队列)

在C++中,priority_queue是一个容器适配器,它提供了常数时间的最大元素查找。它通常实现为堆。堆是一种数据结构,其中最大(或最小)元素始终位于顶部。priority_queue是一个模板类,定义在头文件中。它有三个模板参数:元素类型、容器类型和比较函数类型(可选)。默认情况下,它使用std::vector作为其底层容器。

2023-12-05 11:29:29 45 1

原创 滑动窗口问题

在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。窗口的起始位置如何移动:如果当前窗口的值大于s了,窗口就要向前移动了(也就是该缩小了)。窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。如果只用一个for循环来表示 滑动窗口的起始位置,那么如何遍历剩下的终止位置?所以 只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。只不过这种解法更像是一个窗口的移动,所以叫做滑。

2023-11-21 14:45:17 49

原创 vector容器删除元素

要移除目标元素,就没有库函数可以使用,那就需要对其他元素进行处理,进行覆盖和前移,比较暴力的思路是发现目标元素后,将后面的所有元素都前移覆盖原来的元素,这种方法需要两个for循环,时间复杂度为。,通过有两个指针和一个for循环将所有元素分为两个部分,,由于pop_back删除的是最后一个元素,所以先。如果从数组的角度理解,因为数组存储的内容。的角度思考,我们可以通过一次遍历。使用快慢指针删除所有目标元素。,这里不详细讲这种写法。(2) 使用快慢指针。

2023-11-21 12:35:17 483

原创 C++ Lambda表达式

c++11引入了Lambda表达式,使得开发人员可以更方便的创建匿名函数。

2023-11-20 19:58:33 52 1

原创 C++文件操作

C++文件操作,文本文件,二进制文件

2022-12-18 14:51:24 91 1

原创 C++多态案例:组装电脑

C++多态,新建和释放对象,内存,new用法

2022-12-17 14:41:00 1375 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除