自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2 Setting Out to C++

【代码】2 Setting Out to C++

2024-03-11 19:34:47 781

原创 程序员的自我修养:链接、装载与库 6 可执行文件的装载与进程

省略 178182。

2024-01-25 13:59:20 413

原创 程序员的自我修养:链接、装载与库-4 静态链接

1 空间与地址分配1.1 按序叠加1.2 相似段合并

2023-12-22 13:52:53 512

原创 程序员的自我修养:链接、装载与库-3 目标文件里有什么

待补充 107。

2023-12-22 12:07:31 538

原创 程序的链接过程-2 编译和链接

1 被隐藏了的过程1.1 预编译1.2 编译1.3 汇编1.4 链接2 编译器做了什么2.1 词法分析2.2 词法分析2.3 语义分析2.4 中间语言生成2.5 目标代码生成与优化3 链接器年龄比编译器长4 模块拼装-静态链接

2023-12-22 11:12:36 391

原创 C++ todo

不过,通常创建枚举时会提供一个别名,这样做的优点是能简化代码,增强可读性,并且让类型名称更容易记忆和使用。注意,当直接使用枚举标签名时,你必须在变量声明时以及在类型转换时使用完整的枚举标签名(如上面代码所示的。枚举仍然是有效的,并且可以在代码中使用。在这种情况下,你需要使用其原始的枚举标签名。定义枚举变量时,c++编译器会给出warning,这是因为即使没有提供一个别名,来声明变量和进行类型转换。现在你就可以使用别名。

2023-12-21 10:43:01 415

原创 C++大型项目经验

在Visual Studio中,“附加包含目录”(Additional Include Directories)是一个编译器设置,它指示编译器在查找包含文件(通常是头文件,扩展名为.h或.hpp)时去哪些额外的文件夹路径查找。记住,"附加包含目录"只影响预处理器查找头文件的位置,它并不会告诉链接器在哪里查找库文件(.lib、.dll等)。链接库文件的路径需要在“链接器”->“常规”下的“附加库目录”中设置。

2023-12-11 14:37:42 247

原创 Redis 9 数据库

虽然有多种不同单位和不同形式的设置命令,但实际上EXPIRE、PEXPIRE、EXPIREAT三个命令都是使用PEXPIREAT命令来实现的:无论客户端执行的是以上四个命令中的哪个,经过转换之后,最终的执行效果都和执行PEXPIREAT命令一样。SETEX命令可以在设置一个字符串键的同时为键设置过期时间,因为这个命令是一个类型限定的命令(只能用于字符串键),所以本章不会对这个命令进行介绍,但SETEX命令设置过期时间的原理和本章介绍的EXPIRE命令设置过期时间的原理是完全一样的。

2023-11-18 19:16:36 406 1

原创 数据库的三范式

数据库的三范式是设计关系型数据库时的三个基本原则,主要目标是消除数据冗余和保证数据一致性。

2023-11-17 10:11:13 147

原创 Redis 19 事务

Redis通过MULTI、EXEC、WATCH等命令来实现事务(transaction)功能。事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。

2023-11-16 16:57:13 219

原创 redis复习

有序集合(Sorted sets): Redis sorted sets 和 set 一样也是 string 类型的集合,另外每个元素都会关联一个 double 类型的分数。字符串(String): 这是最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。这个字符串类型是二进制安全的。流(Streams): Redis Streams 是 Redis 5.0 引入的新特性,它是一个类似于日志系统的数据结构,支持存储多个键值对的时间戳,并且保持插入顺序。

2023-06-26 19:27:03 279

原创 数据库复习

请注意,上述锁定表的方式会影响整个表,这可能会导致性能问题。另外,如果你使用的存储引擎支持行级锁(如InnoDB),那么它将优先使用行级锁,而非表级锁。最后,当你完成了需要加锁进行的操作后,你应当尽快释放锁,以便其它线程能够访问数据。MySQL中的读写锁,也称为共享锁和排他锁,是一种在并发环境下控制多用户对同一资源访问的机制。

2023-06-26 18:58:55 154

原创 面试复习 设计模式

std::lock_guard 是 C++11 中引入的一个 RAII 风格的锁管理类,它在构造函数中接收一个 std::mutex 并立即对其进行上锁,然后在析构函数中自动解锁。所以我们通常会将其在需要进行线程同步的代码块之前创建,一旦超出其生存期(即离开这个作用域),它就会自动解锁,保证了锁必定会被释放,从而避免了死锁。也就是说,你不能创建一个新的Singleton对象作为旧的Singleton对象的复制。例如,假设s1和s2都是Singleton对象,以下代码是不合法的: s1 = s2;

2023-06-26 18:50:50 717

原创 C语言临时整理

在这个例子中,x 是静态局部变量,每次 func() 被调用时,x 的值都会递增,显示出它在函数调用期间保持状态。而 y 则是普通的局部变量,每次函数调用都会重新设为 1。const 是 C 语言中的一个关键字,用于声明一个恒定的量,也就是说,一旦定义了这个常量,你就不能再去改变它的值。这提供了一种封装方式,可以防止其他文件访问并可能更改特定的数据和函数。在结构体中,static关键字不能用作成员的修饰符,但可以用来定义一个全局的静态结构体。静态局部变量是定义在函数内部的静态变量。

2023-06-26 17:56:46 245

原创 C++复习

【代码】C++复习。

2023-06-05 20:39:58 60

原创 mysql 秋招总结

前置基础知识:Mysql连接介绍https://leetcode.cn/problems/combine-two-tables/

2023-05-31 15:38:01 78

原创 git 常用命令汇总

【代码】git 常用命令汇总。

2023-05-26 15:58:28 54

原创 docker常见命令

查看coker系统信息,镜像,容器数量等。

2023-05-26 11:04:01 60

原创 WSL(windows 下 Ubuntu 系统)使用

在wsl中,windows文件系统被挂载在/mnt目录下,可以直接访问。

2023-05-26 09:38:44 164

原创 Git 分支相关操作

We can delete a branch by calling the branch command and passing in the -d option, followed by the branch name. 如下的命令可以删除。由于我们尝试合并时发生的conflict,此时。分支上进行的修改并没有出现。此时可以看到,我们应用在。我们可以手动修改冲突,将。分支上的修改出现在了。

2023-05-25 17:04:20 1118

原创 linux常用命令

命令过滤查找特定进程,然后对特定进程进行操作。可以看到9095端口已经被nginx占用。,然后通过管道命令利用。

2023-05-22 13:48:55 80

原创 JUnit的使用

JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。它包括以下特性:1、用于测试期望结果的断言(Assertion)2、用于共享共同测试数据的测试工具3、用于方便的组织和运行测试的测试套件4、图形和文本的测试运行器。

2023-05-22 10:39:51 79

原创 频繁FullGC

1 原因原因一:系统承载高并发请求,或者处理数据量过大,导致Young GC很贫乏,而且每次Young GC过后存活对象太多,内存分配不合理,Survivor区过小,导致对象频繁进入老年代,频繁触发Full GC。原因二:系统一次性加载过多数据进内存,搞出来很多大对象,导致频繁有大对象进入老年带,必然频繁触发Full GC。原因三:系统发生了内存泄漏,莫名其妙创建大量的对象,始终无法回收,一直占用在老年代里,必然频繁触发Full GC。原因四:Metaspace(永久代)因为加载类过多触发Full

2023-05-22 10:22:17 894

原创 java 如何保证线程安全

CAS指令执行时,当且仅当V处的值符合旧预期值A时,处理器用B更新V处的值,否则它就不执行更新,但是无论是否更新了V处的值,都会返回V的旧值,上述的处理过程是一个原子操作。从处理问题的方式上说,互斥同步属于一种悲观的并发策略,总是认为只要不去做正确的同步措施(例如加锁),那就肯定会出现问题,无论共享数据是否真的会出现竞争,它都要进行加锁。同步只是保证共享数据争用时的正确性的手段,如果一个方法本来就不涉及共享数据,那它自然就无需任何同步操作去保证正确性,因此会有一些代码天生就是线程安全的。

2023-05-22 10:12:51 742

原创 tcp和udp的区别

MTU全称是Maximum Transmission Unit,即最大传输单元,这是链路层概念、MSS的英文全称叫Max Segment Size,是TCP最大段大小。MSS = MTU - IP header头大小 - TCP 头大小。

2023-05-22 09:13:56 669

原创 TCP可靠数据传输

拥塞窗口。

2023-05-22 09:05:09 929

原创 OSI分层

实际场景中的网络环节是错综复杂的,中间有各种各样的线路和分叉路口,如果一个设备的数据要传输给另一个设备,就需要在各种各样的路径和节点进行选择,而传输层的设计理念是简单、高效、专注,如果传输层还负责这一块功能就有点违背设计原则了。以太网就是一种在「局域网」内,把附近的设备连接起来,使它们之间可以进行通讯的技术。也就是说,我们不希望传输层协议处理太多的事情,只需要服务好应用即可,让其作为应用间数据传输的媒介,帮助实现应用到应用的通信,而实际的传输功能就交给下一层,也就是网络层(Internet Layer)。

2023-05-22 08:23:20 551

原创 什么是临界区

需要注意的是,合理设计和使用临界区是确保并发程序正确性的关键,过多的临界区可能导致性能问题和死锁,而过少的临界区可能导致数据不一致性。因此,在编写并发程序时,需要仔细考虑和设计临界区的范围和位置。一旦一个线程进入了临界区,其他线程就必须等待,直到当前线程退出临界区后才能进入。竞态条件(Race Condition):多个线程同时读取和写入共享资源,导致结果的正确性依赖于执行的时序,从而引发不确定的结果。数据不一致性:多个线程并发修改共享资源,使得资源的值在不同线程之间不一致,破坏了数据的一致性和正确性。

2023-05-22 02:21:59 2101

原创 进程调度策略

https://blog.51cto.com/u_13064014/5079546?b=totalstatistic

2023-05-22 02:20:31 310

原创 测试的分类

1 按照开发阶段(软件开发周期)单元测试是对软件的组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位——模块,故又称为模块测试。集成测试是将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试。集成测试主要目的是检查软件单元之间的接口是否正确。系统测试就是将已通过集成测试的软件系统与计算机硬件、外设、数据库、网络等其他元素结合在一起,在实际运行环境下,进行一系列的系统测试工作。包括对功能、性能及软件所运行的软硬件环境进行测试。回归测

2023-05-22 01:28:42 914

原创 linux查询日志命令

Linux查看命令有多种:tail,head,cat,tac,more。

2023-05-21 20:06:33 64

原创 mysql索引分类

我们可以按照四个角度来分类索引。

2023-05-21 20:01:21 2257

原创 服务器负载均衡

当一个服务器无法处理所有的请求或者在高负载情况下性能下降时,负载均衡可以将请求转发到其他可用的服务器上,以分摊负载并确保请求得到及时处理。这些方法和工具可以根据系统的需求和规模进行选择和配置,以确保服务器资源得到最优的利用和分配。服务器的负载均衡(Load Balancing)是一种技术和策略,用于将来自客户端的请求分配给多个服务器,以达到均衡地分担服务器负载的目的。基于响应时间(Response Time):根据服务器的响应时间来选择合适的服务器处理请求,以保证响应时间最短的服务器得到更多的请求。

2023-05-21 19:18:51 162

原创 python继承

在Python中,继承是一种面向对象编程的重要概念,它允许一个类(子类)继承另一个类(父类)的属性和方法。子类可以继承父类的特性,并且可以在此基础上添加新的属性和方法,或者修改父类已有的属性和方法。通过继承,子类可以继承父类的属性和方法,同时还可以根据需要添加新的属性和方法,实现代码的重用和扩展。在上述示例中,我们定义了一个父类。同时,我们还重写了父类的。的构造函数,以便初始化继承的。然后,我们定义了一个子类。方法,并添加了一个新的方法。在主程序中,我们创建了一个。对象,并调用它们的方法。

2023-05-21 17:15:16 902

原创 python多进程与多线程

如果blocked为False,有两种情况存在,如果Queue有一个值可用,则立即返回该值,否则,如果队列为空,则立即抛出Queue.Empty异常。当执行完p1 = Pool(5)这条代码后,5条进程已经被创建出来了,只是还没有为他们各自分配任务,也就是说,无论有多少任务,实际的进程数只有5条,计算机每次最多5条进程并行。并且由于GIL锁存在,Python里一个进程永远只能同时执行一个线程(拿到GIL的线程才能执行),这就是为什么在多核CPU上,Python 的多线程效率并不高的根本原因。

2023-05-21 17:11:21 911

原创 TCP 三次握手与四次挥手

三次握手的过程如下图:从上面的过程可以发现第三次握手是可以携带数据的,前两次握手是不可以携带数据的,这也是面试常问的题。一旦完成三次握手,双方都处于 状态,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。https://www.xiaolincoding.com/network/3_tcp/tcp_interview.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B-%E4%B8%8D%E6

2023-05-21 10:57:05 795

原创 python常见面试题

如果此时定义 a=10、b=10, 然后再对比 a is b 会发现返回的结果是 True,这是因为在 Python 中会实现创建一个小型的整形池,范围为 [-5,256],为这些整形开辟好内存空间,当代码中定义该范围内的整形时,不会再重新分配内存地址。在 Python 中,我们可以使用类(class)来定义一个对象,类可以包含属性(attribute)和方法(method),属性表示对象的数据,方法表示对象的行为。浅拷贝是一种浅层次的复制方式,它只复制对象的最外层,而不会复制对象中的子对象。

2023-05-19 13:44:50 506

原创 HTTP与HTTPS

https://www.xiaolincoding.com/network/2_http/http_interview.html#https-解决了-http-的哪些问题。可见,只要自身不做「恶」,SSL/TLS 协议是能保证通信是安全的。HTTPS 在 HTTP 与 TCP 层之间加入了。

2023-05-19 10:08:02 605

原创 进程与线程

我们编写的代码只是一个存储在硬盘的静态文件,通过编译后就会生成二进制可执行文件,当我们运行这个可执行文件后,它会被装载到内存中,接着 CPU 会执行程序中的每一条指令,那么这个运行中的程序,就被称为「进程」(Process)。现在我们考虑有一个会读取硬盘文件数据的程序被执行了,那么当运行到读取文件的指令时,就会去从硬盘读取数据,但是硬盘的读写速度是非常慢的,那么在这个时候,如果 CPU 傻傻的等硬盘返回数据的话,那 CPU 的利用率是非常低的。虽然单核的 CPU 在某一个瞬间,只能运行一个进程。

2023-05-17 09:13:23 216

原创 测试用例设计

如果登录功能启用了验证码功能,在用户名和密码正确的前提下,输入正确的验证码,是否可以成功登录。如果登录功能启用了验证码功能,在用户名和密码正确的前提下,输入错误的验证码,是否可以成功登录。如果登录功能需要验证码,点击验证码图片是否可以更换验证码,更换后的验证码是否可以正确验证。输入已注册的用户名和不正确的密码,验证是否登录失败,并且提示信息正确。不同级别的用户,比如管理员用户和普通用户,登录系统后的权限是否正确。输入未注册的用户名和任意密码,验证是否登录失败,并且提示信息正确。

2023-05-15 10:08:37 650

空空如也

空空如也

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

TA关注的人

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