自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 项目——C++协程库-

当你有很多协程时,如何把这些协程都消耗掉,这就是协程调度。未实现协程调度,对于每个协程,都需要用户手动调用协程的resume方法将协程运行起来,然后等协程运行结束并返回,再运行下一个协程。这种运行协程的方式其实是用户自己在挑选协程执行,相当于用户在充当调度器,显然不够灵活.引入协程调度后,则可以先创建一个协程调度器,然后把这些要调度的协程传递给调度器,由调度器负责把这些协程一个一个消耗掉。1. 继承自协程调度器Scheduler,支持协程调度的全部功能。除了协程调度,IO协程调度还增加了IO事件调度。

2024-04-20 17:20:37 127

原创 互联网面经

基类指针指向派生类对象,若基类析构函数不是虚函数,则调用基类析构函数,不会调用派生类析构函数。这样一定会导致内存泄漏吗?不一定。

2024-04-06 21:40:59 591

原创 基于raft的kvdb面试问题

当大多数节点成功复制后,该log提交,leader会告知follower最新提交的日志index。raft可以保证各个节点日志的一致性,但想要实现状态机(kvdb)的一致性,用户可以自由实现。状态机安全性:如果一个服务器应用了一条日志,那么其它服务器应用的相同条目的日志的内容就是一样的。想要应用某一条日志,必须保证该日志已经提交,需要leader将其成功复制到大多数节点。raft是一种强leader模型,leader有权管理所有的日志,所有的日志都是从leader流向follower的。

2024-03-16 12:02:04 425

原创 RPC 和 序列化

包含kvserver功能的一对映射:Get/PutAppend包含一个,raftKVRpcProctoc::kvServerRpc_Stub *stub,用于实现rpc通信。针对raft节点之间的通信,设计了类型,包含raft节点功能:,因此接下来会调用MprpcChannel::CallMethod():,建立和服务端的连接,发送rpc请求,和接收rpc回复所有通过stub代理调用的rpc方法,都会走到。

2024-03-15 12:27:07 714

原创 基于raft的kvDB

raft是,通过。leader从客户端获取日志条目,复制到其他的服务器中,告诉他们什么时候应用这个日志到状态机是安全的。leader这个角色简化了复制日志的管理。leader可以在的前提下添加新的日志条目,。如果一个leader宕机或者失联了,一个新的leader就会被选举。如果一个服务器应用了一条日志,那么其他的服务器应用的相同条目的日志内容就是一样的。这样的话,follower已经应用的日志和leader相同,follower的snapshot也不会和leader冲突。

2024-03-10 20:18:02 408

原创 计算机网络——面试问题

1 从输⼊ URL 到⻚⾯展示到底发⽣了什么?1 从输⼊ URL 到⻚⾯展示到底发⽣了什么?1.先检查⾥是否有缓存该资源,如果有直接返回;如果没有进⼊下⼀ 步。2.⽹络请求前,进⾏,以获取请求域名的。3.浏览器与服务器IP。如果请求协议是HTTPS,那么还需要建⽴TLS连接。连接建⽴后,向服务器。4.服务器。5. 浏览器解析响应头。6. 如果是HTML文件,解析HTML⽂件,构建渲染树并渲染。2 DNS域名解析DNS服务器保存域名与IP地址的对应关系。

2024-01-21 19:25:10 547

原创 MySQL——锁

上锁后,释放:应用:用于缺点:如果数据量很大,备份会花很多时间,只能读数据,造成业务停滞如果引擎支持的隔离级别,备份之前可以先开启事务,且由于MVCC的支持,备份期间数据库仍然可以更新。

2024-01-13 12:04:35 1500

原创 webserver面试

调大套接字缓冲区的大小,从而减少缓冲区满的情况,加快传输速度。但是缓冲求并非不是越大越好,套接字维护在内核中,缓冲区越大,占用资源越多,要根据情况设置一个合理的值。查询资料,这个错误表示 正在使用一个非阻塞的套接字,但是请求的操作会阻塞。对应到项目中,就是用于通信的套接字使非阻塞的,但向套接字传输文件的操作会阻塞。使用strerror(errno)输出错误,错误为Resource temporarily unavailable。因此,大文件使用传统的传输方式,图片使用sendfile()

2024-01-07 18:04:19 438

原创 帝迈生物、先临三维 c++

简历上写的一定要熟悉,面试官会根据简历问很多东西。面试制造业,面试官不懂网络编程,所以web服务器项目问的都是优化部分。

2024-01-05 16:43:22 1317

原创 webserver整理

webserver相关理论

2023-12-08 14:14:54 460

原创 背包问题

问题:物品重量weight[i], 价值value[i], 求容量为bagweight的背包,能装物品的最大价值?

2023-11-25 13:53:39 778

原创 计算机网络基础

只需要专注于为⽤户提供应⽤功能,不⽤去关⼼数据是如何传输的协议:HTTPFTPTelnetDNSSMTP1.2 传输层传输应用层的数据。传输层的报⽂中会携带,因此接收⽅可以识别出该报⽂是发送给哪个应⽤协议:TCP、UDP当传输层的数据包⼤⼩超过,就要将数据包分块.1.3 网络层在网络中做实际的传输工作,将数据从⼀个设备传输到另⼀个设备,而传输层专注服务于应用层。协议:IPip协议作用寻址:找到⽬标地址的⼦⽹路由:通过路由算法决定下⼀步⾛哪条路径IP。

2023-11-24 12:12:50 390

原创 C++11新特性

【代码】C++11新特性。

2023-11-22 12:42:47 30

原创 C++ ——左值和右值

非常量左值引用 只能引用 非常量左值常量左值引用 可以引用 非常量左值、常量左值、右值非常量右值引用 只能引用 非常量右值常量右值引用 可以引用 常量右值、非常量右值。

2023-11-22 10:36:42 89

原创 Linux ——内存管理

操作系统基于空间局部性原理(当前访问的数据附近的数据,在不久的将来很大概率会被访问到),读取数据时,会把附近的数据也读取进缓存;这样,在访问附近的数据的时候,可以直接在Page Cache中读取,减少了磁盘IO次数。当批量读取数据的时候,数据被访问一次,就会被从inactive list移动到active list头部,从而淘汰active list原有的数据。如果这些大量数据长时间不被访问,那么active list就被污染了。如果再次读取热数据,就需要访问磁盘,系统效率急剧下降。

2023-11-18 16:59:10 78

原创 C++ - STL

标准模板库(Standard Template Library,简称STL),就是一些常用数据结构和算法的模板的集合。 广义上讲,STL分为3类:Algorithm(算法)、Container(容器)和Iterator(迭代器),容器和算法通过迭代器可以进行无缝地连接。 详细的说,STL由6部分组成:容器(Container)、算法(Algorithm)、 迭代器(Iterator)、仿函数(Function object)、适配器(Adaptor)、空间配制器(Allocator)。容器(Co

2023-10-28 16:58:43 64

原创 C++面向对象

当通过基类的指针或引用指向派生类对象时,如果基类析构函数不是虚函数,那么不会触发动态绑定,只会执行基类的析构函数,派生类部分不会被析构,造成内存泄漏。通过指针调用非虚函数,并不会触发动态绑定,实际调用是根据指针的类型来进行的。c++析构函数默认是非虚函数,因为定义虚函数需要额外的虚表和虚表指针,会浪费内存。如果不作为基类,就不需要定义虚析构函数。

2023-10-25 15:37:07 43

原创 C++——内存分配和static

如上图,存放程序执行代码的一块内存区域。只读,代码段的头部还会包含一些只读的。存放程序中已初始化的全局变量和静态变量的一块内存区域。段:存放程序中未初始化的和初始化为0的全局变量和静态变量的一块内存区域。程序执行前BSS段会自动清零。可执行程序在运行时又会多出两个区域:堆区和栈区。动态申请内存用。堆从低地址向高地址增长。存储局部变量、函数参数值。栈从高地址向低地址增长。是一块连续的空间。最后还有一个,位于堆和栈之间。

2023-10-17 16:33:08 66

原创 Linux——线程

不同的操作系统,pthread_t类型的实现不一样,有的是无符号的长整型,有的。- thread:传出参数,线程创建成功后,子线程的。一般在主线程中使用,别的线程也可以调用。1.不能多次分离,会产生不可预料的行为。- attr : 设置线程的属性,- 功能:和一个已经终止的线程进行连接。- thread:需要回收的。非0 : 失败,返回的错误号。- 参数:需要分离的线程的ID。程序中默认只有一个进程,程序中默认只有一个线程,,在哪个线程中调用,就表示终止哪个线程。,如果没有结束的子线程,进程会被阻塞;

2023-07-25 16:44:06 108

原创 共享内存、守护进程

共享内存:进程退出,共享内存还在。标记删除(且关联的进程数为0),或者关机,共享内存块消失。只有删除共享内存,共享内存才会消失,创建共享内存的进程被销毁了对共享内存是没有任何影响。如果一个进程和共享内存取消关联,那么这个进程就不能继续操作这个共享内存,也不能进行关联。内存映射区的数据 ,由于磁盘文件中的数据还在,所以内存映射区的数据还存在。- key : key_t类型是一个整形,通过这个找到或者创建一个共享内存。- proj_id: int类型的值,但是这系统调用只会使用其中的1个字节。

2023-07-23 23:05:35 116

原创 Linux —— 信号

-1 : 这个pid=某个进程组的ID取反 (-12345)= -1 : 将信号发送给每一个有权限接收这个信号的进程。执行a,出现段错误,有core文件生成(但我测试的时候没有生成core文件)= 0 : 将信号发送给当前的进程组。alarm(10);seconds: 倒计时的时长,单位:秒。取消一个定时器,通过alarm(0)。- sig : 需要发送的信号的。- sig : 要发送的信号。- SIGALARM :默认终止当前的进程,定时器与进程的状态无关(自然定时法)。- 之前没有定时器,

2023-07-20 16:33:56 56

原创 Linux - 进程

命令:ps aux/ajx top kill -sigkill/-9 name kill -l 函数:pid_t getpid(void);一、进程概述1.程序和进程(1)程序(2)进程2.进程控制块PCB二、进程状态转换1.进程的状态(1)三态(2)五态2.进程相关命令(1)ps aux/ajx(2)STAT参数(3)top 实时显示进程动态(4)kill

2023-07-15 15:12:57 89 1

原创 Linux基础 ——文件IO

标准c库函数调用系统底层API;标准c库函数有缓冲区,效率高。

2023-07-13 14:45:22 61 1

原创 GDB调试

.cpp文件要使用g++编译,否则会出错

2023-07-12 15:02:35 60 1

原创 Makefile

vim Makefile 如果没有,自动创建文件。命名规则:Makefile 或 makefile。命令(自动寻找当前目录下的Makefile文件)编辑Makefile;

2023-07-11 16:04:20 33

原创 静态库和动态库

o。

2023-07-08 17:32:18 99 1

原创 Linux基础命令

gcc test.c -E -o test.i //-E预处理 ,不编译 -o生成文件。gcc test.c -o -test -D DEBUG //编译的时候指定一个宏。gcc test.c -o -test -D DEBUG //生成所有警告信息。gcc test.s -c -o test.o //-c编译、汇编,但不链接。gcc test.i -S -o test.s //-S 编译,但不汇编。输入“wq”:保存退出。

2023-06-30 18:50:24 29

原创 2023.6.16

s.top() //获取元素。

2023-06-16 22:23:30 34

原创 opengl帧缓冲(framebuffer)

由于渲染缓冲对象通常都是只写的,它们会经常用于深度和模板附件,因为大部分时间我们都不需要从深度和模板缓冲中读取值,只关心深度和模板测试。渲染缓冲对象附加的好处是,它会将数据储存为OpenGL原生的渲染格式,它是为离屏渲染到帧缓冲优化过的。:是一个内存位置,它能作为帧缓冲的一个缓冲。当把一个纹理附加到帧缓冲的时候,所有的渲染指令将会写入到这个纹理中,就像它是一个普通的颜色/深度或模板缓冲一样。将深度或模板附件附加到帧缓冲上:(这里使用纹理,最好使用渲染缓冲对象)帧缓冲组成:颜色缓冲、深度缓冲、模板缓冲。

2023-03-20 22:41:43 677

原创 opengl面剔除

/逆时针顺序定义的三角形为背向面,顺时针定义的三角形为正向面。//面剔除,默认剔除背向面。//默认逆时针顺序为正向面。默认情况逆时针定义的三角形为正向面。

2023-03-20 20:12:25 38

原创 混合(Blending)

透明纹理的加载:当环绕方式设置为GL_REPEAT时,opengl会对边缘的值和纹理下一个重复的值进行插值。使用透明纹理时,图像顶部会与底部颜色插值,若底部不是透明的,则会出现一个半透明的有色边框环绕纹理。要想避免这个,每当你alpha纹理的时候,请将纹理的环绕方式设置为GL_CLAMP_TO_EDGE。alpha = 1.0,完全不透明;alpha = 0.0,完全透明。有些图片透明的部分是完全透明的,完全透明的部分可以直接丢弃。3.按由远及近的顺序绘制不透明物体。2.对所有不透明的物体排序;

2023-03-20 16:26:28 74

原创 OPENGL模板缓冲(Stencil Testing)

GL_NEVER、GL_LESS、GL_LEQUAL、GL_GREATER、GL_GEQUAL、GL_EQUAL、GL_NOTEQUAL和GL_ALWAYS。mask:设置一个掩码,它将会与参考值和储存的模板值在测试比较它们之前进行与(AND)运算。设置掩码为ox00,写入全为0,不影响测试通过区域的模板值;设置掩码为ox00,写入全为0,不影响模板值。dpfail:模板测试通过,但深度测试失败时采取的行为。模板值8位,每个片段有256个不同的模板值。模板缓冲的模板值进行与(AND)运算。

2023-03-20 14:51:33 262

原创 opengl深度测试

屏幕空间坐标与glViewport所定义的视口密切相关,并且可以直接使用GLSL内建变量gl_FragCoord从片段着色器中直接访问。gl_FragCoord的x和y分量代表了片段的屏幕空间坐标(其中(0, 0)位于左下角)。gl_FragCoord中也包含了一个z分量,它包含了片段真正的深度值。深度缓冲是在片段着色器运行之后(以及模板测试(Stencil Testing)运行之后)在屏幕空间中运行的。禁用深度缓冲的写入,需要将深度掩码(Depth Mask)设置为。离近平面越近,值越小。

2023-03-20 13:49:22 75

原创 光照——颜色

光照颜色学习笔记

2023-01-12 11:35:56 52

原创 opengl纹理

纹理

2022-12-02 11:02:15 613

原创 opengl坐标系统

opengl坐标系统

2022-11-30 15:49:29 178

原创 Phong光照模型

Phong光照模型

2022-11-25 23:49:02 391

原创 VAO,VBO

VAO

2022-11-25 16:48:02 103

原创 first triangle

渲染三角形

2022-11-25 16:42:04 47

原创 第一个窗口

opengl

2022-11-25 16:23:34 55

空空如也

空空如也

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

TA关注的人

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