- 博客(25)
- 收藏
- 关注
原创 go垃圾回收机制(三色标记法)& 屏障机制
为了保证栈的速度,如果为栈上的对象增加插入屏障,会大幅度增加引用对象的性能,所以栈空间不触发插入屏障,堆空间会触发插入屏障,而在回收白色之前会重新遍历扫描一次栈空间,此时添加STW暂停来保护栈,防止外界干扰(有新的白色被黑色添加);在Go使用的混合写屏障中是不会对栈空间进行写屏障的,栈上的对象在一开始就全部标记为黑色,并且在GC过程中新创建的对象也是黑色的,可能错放但不错杀;删除屏障的不足:回收精度低,一个对象即使被删除了最后一个指向它的指针也依旧可以活过这一轮,在下一轮GC中被删除(宁可放过也不错删);
2023-03-20 10:52:29
882
原创 go语言的变量与常量
golang中string底层是通过byte数组实现的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而Go语言默认使用UTF-8编码),len()求的是。在多重赋值的时候,如果要想忽略某个值可以使用匿名变量接收要忽略的值,匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。iota是go的常量计数器,只能在常量的表达式中使用,在const关键字出现时将被置为0,const中。变量可以声明为全局变量和局部变量,在函数外声明为全局变量,函数内声明为局部变量;
2023-03-18 15:12:13
290
原创 Go语言的一点点东西
很久没更新了,主要原因还是自己比较习惯在本地写笔记,不太习惯上传(绝对不是因为懒得排版!),最近也要加快找暑期实习的进度啦,所以更新继续随缘,有空了会放一些自己的笔记上来,大家随缘看哈。go build:先编译了可执行文件,在编译过程中会将该程序依赖的库文件包含在可执行文件之中,所以可执行文件也会打了很多,我们可以将该.exe文件拷贝到没有go开发环境的机器上运行。go run:只能在具有go开发环境的机器上运行。go是一行行进行编译的,因此一行只能写一个语句。在go中每个文件必须归属于一个包。
2023-03-18 15:06:20
157
原创 链路层典型协议(简述)
没有MSS协商,只要数据封装报头后大小小于64K即可发送,但是若在网络层封装IP报头后大于MTU就会分片;,将目的端IP地址设置为全1(广播地址),包含了自己的IP与MAC地址,以及指定设备的IP地址;在三次握手阶段双方会协商MSS(最大数据段大小),取小的一方作为实际传输最大大小;:是物理硬件地址,是每一块网卡在出场时设定的地址,早期是固定不可修改的;,不一致则丢弃,一致则组织ARP响应填充自己的MAC地址进行回复;:描述的是以太网帧中数据所使用的协议,用于数据分用时协议选择;,以太网默认位1500;
2022-09-15 17:32:18
1794
原创 重载&覆盖&隐藏
关于隐藏的理解,在调用一个类的成员函数时,编译器会沿着类的继承链逐级向上查找函数的定义,如果找到了则停止查找;所以如果一个派生类和一个基类都有一个同名函数(不论函数参数是否相同),而编译器最终选择了在派生类中的函数,那么就说这个派生类的成员函数“隐藏”了基类的同名函数,即它阻止了编译器继续向上查找函数的定义。(所以同名函数,虽函数参数不同,但位于派生类和基类中时,基类函数会被屏蔽。即:派生类中函数隐藏(屏蔽)了基类中的同名函数。,(即与重载的区别是两个函数。(注意别与覆盖混淆);,此时,基类的函数被。
2022-09-15 17:14:21
135
原创 网络层IP协议基础知识
私网先发到路由器的网关,从路由表中寻找对端地址对应的网络是否被当前设备所连接,若已经连接,则用私网对外的地址从连接该目标网络的网卡进行对外发送;:3位优先权字段弃用,1位未用位,4位服务类型(最小成本,最高可靠性,最大吞吐率,最小延时);(相邻的私网之间网络号不能相同),不相邻的私网不可以直接通信需借助互联网;,私网对外通信使用私网对外的地址而不是私网内部的地址;:1位保留,1位禁止分片标志,1位分片结束标志;:用于校验接收到的数据是否与对方发送的数据一致;:数据分用时,选择当前数据所使用的解析协议;
2022-09-15 17:09:52
1310
原创 TCP/UDP协议格式&协议特性(简述)
FIN(表示关闭连接,只表示不再给对方发送数据),SYN(表示当前的数据是连接建立请求数据),RST(重置链接),PUSH,ACK(确认应答),URG(紧急指针有效位);:以4节为单位描述TCP报文头部长度,最长为60字节,最小为20字节(上图前五行的固定长度为20字节);:用于校验接收到的数据是否与对方发送的数据一致(二进制反码求和算法);:用于校验接收到的数据是否与对方发送的数据一致(二进制反码求和算法);:无连接,不可靠,有固定最大长度限度的传输方式(小于64K);无连接,不可靠,面向数据报;
2022-09-15 17:05:31
898
原创 HTTP协议基本格式
首行(请求行):请求方法 URL 协议版本 /r/n;请求方法:POST:主要用于向服务器提交数据,数据放在正文之中;GET:主要用于从服务器获取实体资源,也可以提交数据,但是数据放在了URL当中(但是会导致头部过大);HEAD:与GET类似,但是响应中不要实体数据只要头部;URL:统一资源定位符(网址);定位网络中的某个主机上的某个资源,并且定义如何请求;URL格式:http://user:pass@ip:port/path?query_string#idhttp:协议方案名称;user:pass:用户名
2022-09-12 16:36:37
636
原创 TCP/UDP协议操作流程及接口介绍
传输层的协议:TCP/UDP协议TCP:传输控制协议,面向连接,可靠传输,面向字节流;——应用于对安全性要求大于实时性的场景(文件传输等);UDP:用户数据报协议,无连接,不可靠,面向数据报;——应用于对实时性性要求大于安全性的场景(视频、音频等);①创建套接字:在内核中创建socket结构体,将进程与网卡关联起来;②为套接字绑定地址信息:给创建的socket结构体描述源端地址信息;③接收数据:从socket接收缓冲区中取出数据;④向服务器发送数据:将要发送的数据放入发送缓冲区;⑤关闭套接字;①创建套接字;
2022-09-12 16:35:05
1697
原创 网络的一些基础概念
在网络通信的每一条数据中,都会有两个信息—源端端口和对端端口,描述了数据从哪个端口来到哪个端口去,且一个端口只能被一个进程占用,但一个进程可以占据多个端口;:在网络通信的每一条数据中,都会有两 个信息—源端IP地址和对端IP地址,描述了数据从哪个主机来到哪个主机去;(以太网协议,包含了源端MAC地址和对端MAC地址),MAC地址(物理硬件地址),典型设备:交换机;——五元组(源端IP地址,对端IP地址,源端端口,对端端口,协议;应用层,表示层,会话层,传输层,网络层,链路层,物理层;
2022-09-12 16:31:43
1538
原创 MySQL中的索引
通常根据主键建立主键索引,一张表中只可以有一个主键索引,其他索引都是普通(辅助)索引,主键索引和数据在磁盘中都是顺序存储,这样可以在一次磁盘IO中可以读取更多的索引数据,在检索索引的时候可以提高检索效率;上效率更高,但是当遇到插入或删除数据时需要重新调整存储数据,因此常常会针对。,相当于通过辅助索引找到主键索引值再找到数据的存储位置;的索引和数据都是按序存储,查询时可以连续取出,在。索引顺序与数据的实际存储顺序不一定一致,引由于主键索引与普通索引相似,所以。主键索引与普通索引相似,①索引会单独创建一张表,
2022-09-12 16:28:00
268
原创 多路转接模型&多路复用模型
调用监控接口开始监控,将需要监控的数据拷贝到内核中进行监控(多次轮询遍历),监控调用返回前会将描述符实际就绪的事件填充到revents成员中,若没有就绪事件则置为0;系统在进行监控的时候为每个描述符都定义了一个回调函数,一旦描述符就绪了指定事件,则会由回调函数把描述符对应的事件结构体添加进。①针对不同的IO事件(可读事件,可写事件,异常事件),定义不同的描述符集合,把要监控的描述符添加到对应集合中;:监控调用前,会将集合中所有没有就绪的描述符从集合中移除掉(监控调用返回后,集合中只存在就绪的描述符)。
2022-09-12 16:26:04
298
原创 线程安全的单例模式
应用场景:一个类只能实例化一个对象的场景,向外提供统一访问接口;①有频繁实例化然后销毁的情况,也就是频繁的 new 对象,可以考虑单例模式;②创建对象时耗时过多或者耗资源过多,但又经常用到的对象;③频繁访问 IO 资源的对象,例如数据库连接池或访问本地文件;作用:对资源统一管理,避免数据在不同对象中的混淆;实现方式:饿汉&懒汉;实现注意:①一个类只能实例化一个对象;②提供统一访问接口;①对象(或指针)在程序起始阶段完成构造;②对象(指针)的静态化;③构造函数私有化;
2022-09-08 09:56:26
204
原创 生产者消费者模型
生产者生产数据放入缓冲区,消费者从缓冲区取出数据进行处理;生产者和消费者其实是两类线程,最关键是包含了。用户在判断是否满足资源获取条件时,需要使用。解耦合,支持忙闲不均,支持并发;在多角色线程的场景中,应。
2022-09-08 09:53:28
165
原创 多线程及其控制(Linux下)
并且这些pcb共享进程中的大部分资源(相较于传统pcb更为轻量化),而我们不能直接操作内核中的pcb而是通过用户态的线程来操作(通过tid来完成用户态线程与内核态pcb的一一对应),因此线程被称为。每个线程创建出来之后会在栈上开辟一段空间用于存储各项描述信息,创建线程时返回了tid,,在Linux下通过pcb实现(一个执行流对应内核态就是一个pcb),,处于该状态的线程不需要也不允许被等待,结束后直接自动释放资源;,处于该状态的线程不会自动释放资源需要被等待;),程序计数器,栈,信号阻塞集合(
2022-09-08 09:27:15
320
原创 信号的简介
是一种软件中断,是一种事件通知机制,与事件一一对应;每个信号对应的事件都不可以丢弃的信号是可靠信号否则为不可靠信号;优先处理的是实时信号否则为非实时信号;
2022-08-30 15:43:00
252
原创 进程间通信(IPC)
进程之间具有独立性,因为每个进程都有其独立的虚拟地址空间,虚拟地址空间的不同导致映射方式的不同,导致无法访问同样的物理空间所以无法直接通信;进程间通信的就是为进程之间提供一块;:管道、共享内存、消息队列、信号量等;ipcs用于查看进程间通信资源,-m共享内存,-s信号量,-q消息队列;ipcrm用于删除进程间通信资源;...
2022-08-30 15:27:20
267
原创 进程的退出、等待以及程序替换
当一个进程未调用exit、_exit()、exit()而异常退出时,会对该进程中的数据造成破坏;当调用vfork创建子进程后,如果子进程未调用exit或者_exit等正常退出,那么父进程可能不会被执行。
2022-08-20 12:32:46
194
1
原创 进程简介以及进程的创建(基于Linux,后附clone()和fork(),vfork()的区别)
进程简介以及子进程的创建(基于Linux,后附clone()和fork(),vfork()的区别);进程是操作系统对程序运行的(pcb—进程控制块),在Linux中是一个task_struck结构体
2022-08-11 09:02:30
259
1
转载 前置++和后置++运算符重载的区别(详细)
前置++和后置++的区别及原因详解返回类型不同、形参不同、代码不同、效率不同、返回值类型的区别等
2022-07-11 10:06:53
2118
2
原创 C++中struct与class的区别
C++中struct与class的区别首先struct本身来说为C语言里用于将多种数据、多个变量组织在一起,便于表达比较复杂的数据类型,本质上来说并不是用于构造类的关键字,由于c++对C语言的兼容性导致该关键字被保留下来。而class,则称作**“类”**,是C++新增来支持面向对象思想概念中“类”的概念的一个关键词,具有更加强大的功能,包括定义方法等。但是在c++程序中二者具有很多相似之处,大部分情况下可以互通,不同之处主要体现在以下三个方面:1)默认的继承访问权限不同,struct是publi
2022-05-30 09:40:42
3629
2
原创 C++关于类中成员函数未定义时编译器是否自动生成的问题
C++关于类中成员函数未定义时编译器是否自动生成答案显然是否定的,在C++中默认成员函数在未定义的情况下,编译器并不会自动生成(VS2019编译环境),而是会根据实际情况的需要来判断,如果需要生成则会自动生成,否则不会生成。拿构造函数来举例子,在代码中我们定义了一个Date类,类中并没有自定义构造函数,接下来我们在第16行处下一个断点。开始调试,我们可以看到虽然断点下在了第16行,但是却没有在第16行停下,最终函数停在了第17行。接下来我们转到函数汇编查看是否生成函数调用(也就是说查看编译器是否
2022-04-16 16:42:46
1074
原创 C语言知识点汇总
C语言——只看这一篇就够了!C语言知识点保姆级总结,这不得进你的收藏夹吃灰?!拖了很久的C语言所学知识的简单小结,内容有点多,第一次总结也可能有错误或者不全面,欢迎随时补充说明!数据类型 用不同数据类型所定义的变量所占空间大小不一样,定义的变量不是保存于数据类型中,而是因为只有定义了该数据类型的变量才能保存数据。一、整型 1、整型(int) 四字节,默认有符号(-231-231-1),无符号加unsigned(0-2^32-1)(十位数) 2、短整型(short int) ,两字节
2022-04-06 22:35:18
42493
18
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人