- 博客(50)
- 资源 (5)
- 收藏
- 关注
原创 PL2303驱动不支持Win11及以上版本解决方案
官方新版的PL2303驱动不支持win11及以上版本,可以下载有一些老一点的版本即可支持。官方下载链接需要先卸载不兼容的版本然后安装好即可,checkChipvVersion程序可以查看驱动芯片的版本。
2021-12-17 00:29:43
58676
12
原创 Windows未检测到的第二台显示器,电脑只能支持一台显示器显示,解决方法
操作以 Windows11为例1、原因分析两台显示器能够单独工作,但是同时接上就只能一台工作,排除显示器的问题,是显卡或者驱动出了问题。2、打开设置 --> 系统 --> 设备管理器3、转到显示适配器可以看到,有两个显卡,一个是CPU集成的显卡,一个是独立显卡。禁用集成的Intel显卡,第二台显示器的屏幕立马亮起。 Over了, 哈哈4、如果未解决,可以尝试更新显示器的驱动 或 禁用然后启用...
2021-10-07 11:16:05
45979
1
原创 多线程之间共享的资源有哪些
教材的说法:进程是资源分配的基本单位;线程是系统调度的基本单位。平时我们写的程序都是作为线程运行的;进程可以看做是包括一系列线程和资源的统称;一个进程至少包括一个线程(主线程,进入main函数时产生的);在其中可以创建其它线程,也可以不创建。同一进程间的线程究竟共享哪些资源呢,而又各自独享哪些资源呢?共享的资源有:a. 堆 由于堆是在进程空间中开辟出来的,所以它是理所当然地被共享的;因此new出来的都是共享的(16位平台上分全局堆和局部堆,局部堆是独享的)b. 全局变量 它是与具体某一函数无
2021-10-02 16:23:32
1825
原创 C++四种强制类型转换总结
一、C强制转换与C++强制转换c语言强制类型转换主要用于基础的数据类型间的转换,语法为:(type-id)expression//转换格式1type-id(expression)//转换格式2c++除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast,主要运用于继承关系类间的强制转化,语法为:static_cast<new_type> (expression)d
2021-10-02 00:51:48
2856
原创 路由器的功能
路由的概念: 是指把数据从一个地方传送到另一个地方的行为和动作,而路由器,正是执行这种行为动作的机器,它的英文名称为Router。路由器的主要功能:第一,网络互连,路由器支持各种局域网和广域网接口,主要用于互连局域网和广域网,实现不同网络互相通信;第二,数据处理,提供包括分组过滤、分组转发、优先级、复用、加密、压缩和防火墙等功能;第三,网络管理,路由器提供包括配置管理、性能管理、容错管理和流量控制等功能。路由表(Routing Table): 为了完成“路由”的工作,在路由器中保存着各种传输路径的
2021-10-02 00:00:01
2612
原创 malloc底层原理
参考博文:https://www.cnblogs.com/zpcoding/p/10808969.html1、brk是将数据段(.data)的最高地址指针_edata往高地址推;2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。在标准C库中,提供了malloc/free函数分配释放内存,
2021-09-04 14:49:02
199
原创 高频算法面试题,TopK问题
描述:如从海量数字中寻找最大的第 k 个数,这类问题我们称为 TOPK 问题,主要有如下解决方法:一、基于堆来实现求前 k 大,用最小堆求前 k 小,用最大堆 求最大的第 K个数思路:1、先放入元素前 k 个建立一个最小堆。2、迭代剩余元素:如果当前元素小于堆顶元素,跳过该元素(肯定不是前 k 大)否则替换堆顶元素为当前元素,并重新调整堆。3、最后获取 最小堆 中的值,即为 topk。力扣对应的题目:LeetCode125C++ 代码实现:1、利用 Priority_queue
2021-08-29 21:38:24
527
原创 高频算法面试题,LRU缓存机制,详解
一、LRU算法简介LRU即 Least Latest Used最近最少使用的, 该算法是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法。该算法的思路是,发生缺页中断时,选择未使用时间最长的页面置换出去。从程序运行的原理来看,最近最少使用算法是比较接近理想的一种页面置换算法,这种算法既充分利用了内存中页面调用的历史信息,又正确反映了程序的局部问题。二、LRU算法描述LRU 算法实际上是让你设计数据结构:首先要接收一个 capacity 参数作为缓存的最大容量,然后实现两个 API,一个是
2021-08-29 00:01:31
706
原创 面试官:我们写一道排序 —— 八大排序C++实现,详解
排序作为算法的基础,是很多面试官喜欢考察的重点之一,排序的种类繁多,但是有规可循,本文分析了常见的八大排序。术语解释:1、稳定排序: 如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序。2、非稳定排序: 如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。3、原地排序: 原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储空间进行比较和交换的数据排序。4、非原地排序: 需要利用额外.
2021-08-25 22:32:38
462
2
原创 HTTPS建立连接的详细过程 (HTTPS的握手过程)
简介HTTPS是在HTTP的基础上和 ssl/tls 证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了http的三个缺点(被监听、被篡改、被伪装)对称加密和非对称加密对称加密即加密的密钥和解密的密钥相同非对称加密非对称加密将密钥分为公钥和私钥,公钥可以公开,私钥需要保密,客户端公钥加密的数据,服务端可以通过私钥来解密建立连接HTTP和HTTPS都需要在建立连接的基础上来进行数据传输,是基本操作当客户在浏览器中输入网址的并且按下回车
2021-08-21 11:36:48
2494
原创 线程上下文切换和进程上下文切换的区别
进程切换分两步1.切换页目录以使用新的地址空间 2.切换内核栈和硬件上下文。 对于linux来说,线程和进程的最大区别就在于地址空间。对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。所以明显是进程切换代价大线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是将寄存器中的内容切换出。另外一个隐藏的损耗是上下文的切换会扰乱处理器的缓存机制
2021-08-16 16:22:27
754
原创 C语言双向升序单向链表的创建,插入删除操作,代码经过验证
#include <stdio.h>#include <stdlib.h>typedef struct n { int data; struct n* pre; struct n* next; }*node;node create_node();void print(node head);node insert(node head, int i);node deleteNode(node head, int i);int main(
2021-08-14 23:18:01
337
原创 gdb常用调试命令入门
gdb调试命令1>. 启动gdb gdb 可执行程序的名字2>. 查看代码 l – 查看当前文件 – 默认main函数 2. 查看其它文件: l 文件名:行号, 显示指定行号的上下文 l 函数名 – 当前文件 l 文件名:函数名 – 指定文件 3. 查看默认显示的行数: show listsize 4. 设置: set listsize 行数3>. 断点操作 1. 当前文件设置断点: b(break) 行号 2. 指定文件: b 文件名
2021-08-09 18:23:46
428
原创 C++中Static关键字的作用
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、全局静态变量• 变量在全局数据区分配内存;• 未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);• 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;2、局部静态变量• 变量在全局数据区分配内存;• 静态局部变量在程序执行
2021-08-08 13:55:41
3637
1
原创 STL迭代器失效的场景总结
STL迭代器失效的场景总结一、序列式容器迭代器失效的场景序列式容器以vector为例。分别有以下情况会失效:1、push_back() 使迭代器失效。 在容器末尾添加一个元素。如果容器有剩余空间(capacity() > size()),则直接添加新元素到容器尾部。此时,原迭代器中end()会失效,其他的都不会失效。如果容器有剩余空间(capacity() < size()),会导致容器重新分配内存,然后将数据从原内存复制到新内存,再在尾部添加新元素。此时,由于内存重新分配,原迭代器
2021-08-07 00:25:10
759
转载 如何定义一个只在堆上创建对象的类,如何定义一个只在栈上创建对象的类
1、只能建立在堆上类对象只能建立在堆上,就是不能静态建立类对象,即不能直接调用类的构造函数。容易想到将构造函数设为私有。在构造函数私有之后,无法在类外部调用构造函数来构造类对象,只能使用new运算符来建立对象。然而,前面已经说过,new运算符的执行过程分为两步,C++提供new运算符的重载,其实是只允许重载operator new()函数,而operator()函数用于分配内存,无法提供构造功能。因此,这种方法不可以。当对象建立在栈上面时,是由编译器分配内存空间的,调用构造函数来构造栈对象。当对象使用
2021-08-06 23:07:02
188
原创 MySQL的MVCC总结
MySQL的MVCC总结1、什么是MVCC MVCC,Multi-Version Concurrency Control,多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。读锁: 也叫共享锁、S锁,若事务T对数据对象A加上S锁,则事务
2021-07-17 15:56:12
195
原创 MySQL事务的四大特性和隔离级别
事务四大特性(ACID)如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:(1) 原子性(Atomicity): 强调事务的不可分割 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。(2) 一致性 (Consistency):事务的执行的前后数据的完整性保持一致一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状
2021-07-16 19:53:09
157
原创 处理哈希冲突的方法
处理哈希冲突的方法1、线性探测法概念:一旦发生了哈希冲突,就去寻找下一个空的存储地址,只要哈希表的足够大,总能找到空的存储地址,并存入哈希表中。其公式可表示为: fi(key)=(f(key)+di)%m (di=1,2,3,...,m-1)线性探测法的弊端是:若关键字的位置都聚集在一块儿,就需要不断处理冲突,导致存入效率、查找效率大大降低。进一步考虑另一种情况,若哈希表的长度为10,对应的下标位置为0~9,假设只有位置5是空的,现在利用除留
2021-07-12 17:46:57
782
原创 MySQL的索引为什么是B+树而不是B树或红黑树
MySQL的索引为什么是B+树,而不是B树或者红黑树一、为什么不是B树?1、B+树的中间节点没有卫星数据的。所以同样大小的磁盘页可以容纳更多的节点元素。(这就意味着B+会更加矮胖,查询的IO次数会更少)B树的卫星数据B+树的卫星数据2、B树查找性能是不稳定的(如果要查找的数据分别在根节点和叶子节点,他们的性能就会不同)。但B+树的每一次都是稳定的,为啥呢,看下面的范围查询。B+树相对于B树的优势:1.单一节点存储更多的元素,使得查询的IO次数更少。2.所有查询都要查找到叶子节点,查询性能
2021-07-12 17:10:54
1670
5
转载 strcpy() 函数的底层实现,一步步分析
strcpy 函数的实现已知strcpy函数的原型是:char *strcpy(char* dst, const char *src);1、实现strcpy函数2、解释为什么要返回 char*3、假如考虑dst和src内存重叠的情况,strcpy该怎么实现1、strcpy的实现代码char* strcpy( char* dst,const char *src ) //[1]{ assert(dst != NULL && src != NULL); //[2
2021-06-22 23:01:11
1136
原创 浏览器输入一个 url到显示对应页面的全过程
总的过程图1、DNS解析: 当用户输入一个网址并按下回车键的时候,浏览器得到一个域名,而在实际通信过程中,我们需要的是一个 IP地址,因此需要先把域名转换成相应的 IP地址。2、TCP连接: 浏览器通过 DNS获取到 Web服务器真正的 IP地址后,便向 Web服务器发起 TCP连接请求,通过 TCP三次握手建立好连接后,浏览器便可以将 HTTP请求数据发送给服务器了。3、发送 HTTP请求: 浏览器向 Web服务器发起一个 HTTP请求,HTTP协议是建立在 TCP协议之上的应用层协议,其本质是建
2021-06-20 23:31:58
1254
1
原创 select、poll、epoll的区别
select、poll、epoll的区别目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,pselect,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。与多
2021-06-20 23:05:07
299
原创 VScode C/C++更改编译后的 exe文件输出到一个指定的文件夹的方法
VScode配置C/C++开发环境输出 exe文件统一到一个文件的方法1、打开 Coderuner插件,点击 Extension Setting2、点击Edit in settings.json3、找到 c 和 cpp的字段,更改加上红框里的选项 .\build\ ,表示将 输出的exe文件输出到 当前目录的 build文件夹, 执行的时候从该目录找可执行文件。注意这样设置我们就需要在自己的需要编译的源文件的目录下新建一个 buile文件夹,否则编译输出的时候找不到 Build文件夹报错。
2021-06-19 17:07:27
5877
10
原创 常量指针 const int*与指针常量 int *const指向对象的类型与区分方法,用代码分析
const 的语法虽然变化多端,但并不是高深莫测。如果关键字 const出现在星号左边,表示被指之物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示所指物和指针两者都是常量。#include <iostream>using namespace std;int main(){ int a = 1; int b = 2; // non-const pointer,non-const data int* p1 = &a;
2021-06-03 20:59:19
141
原创 C++内存相关问题总结
1、以下为WindowsNT 32位C++程序,请计算下面sizeof的值 char str[] = "hello"; char* p = str; int n = 10; // 请计算 sizeof(str) = ? sizeof(p) = ? sizeof(n) = ? void Func(char str[100]) { // 请计算 sizeof(str) = ? } void* p = malloc(100); // 请计算 size
2021-05-22 14:51:57
864
原创 操作系统——文件系统
操作系统总结,系列4——文件系统操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版其他系列链接:操作系统总结,系列1——进程与线程操作系统总结,系列2——内存管理操作系统总结,系列3——死锁操作系统总结,系列4——文件系统文章目录操作系统总结,系列4——文件系统一、文件1、概念2、文件命名3、文件结构字节结构记录序列树4、文件类型5、文件访问**顺序访问**:随机访问文件6、文件属性概念举例7、文件操作二、目录1、概念2、一级目录系统3、层级目录
2021-05-12 21:08:34
918
原创 操作系统——死锁
操作系统总结,系列3——死锁操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版其他系列链接:操作系统总结,系列1——进程与线程操作系统总结,系列2——内存管理操作系统总结,系列3——死锁操作系统总结,系列4——文件系统文章目录操作系统总结,系列3——死锁一、资源1、可抢占资源2、不可抢占资源二、定义三、必要条件1、互斥2、可占和等待3、不可抢占4、环路等待四、处理方法1、鸵鸟算法2、死锁检测与死锁恢复每种类型一个资源的死锁检测每种类型多个资源的死
2021-05-12 21:01:30
568
原创 操作系统——内存管理
操作系统总结,系列2——内存管理操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版其他系列链接:操作系统总结,系列1——进程与线程操作系统总结,系列2——内存管理操作系统总结,系列3——死锁操作系统总结,系列4——文件系统文章目录操作系统总结,系列2——内存管理一、虚拟内存1、地址空间:2、虚拟内存的概念3、分页4、页表5、加速分页TLB加速分页6、针对大内存的页表二、页面置换算法1、最优页面置换算法(OPT)2、最近最久未使用页面置换算法(LR
2021-05-12 17:18:14
792
原创 操作系统——进程与线程
操作系统总结,系列1—— 进程与线程操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版其他系列链接:操作系统总结,系列2——虚拟内存操作系统总结,系列3——死锁操作系统总结,系列4——文件管理一、概念1、进程是资源分配的基本单位。2、线程是独立调度的基本单位。一个进程中可以有多个线程,它们共享进程资源。二、进程的实现1、进程表 为了实现进程模型,操作系统维护着一张表格(一个结构数组),即进程表。每个进程占有一个进程表项。(有些著作称
2021-05-11 22:38:57
364
原创 拓达TSDA-C21B, 通过单片机CAN通信发送命令控制电机转向
上篇博客中,我们用单片机的串口对驱动器进行了控制,串口控制的优点是控制相对简单。咨询过拓达的工程师这个问题之后我们,了解到 CAN通信的速度快很多。先来分析一下CAN通信为什么要快:1、从数据手册上我们知道 CAN通信,每帧数据之间不需要延时,基于缓存的收数据方式,每帧之间也不需要延时。2、CAN通信本身的速度就很快最快能 1000K (bit/s)是串口通信**最大传输速度的十倍左右**!!至于用 CAN通信进行控制的缺点,主要是 CAN通信控制的技术门槛相对高一些,CAN总线偏向工业控制,
2021-04-25 17:05:33
2930
6
原创 函数的调用过程,从汇编和内存的角度分析
函数的调用过程 —— 从反汇编和内存的角度分析程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(call stack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。一、汇编语言基础知识回顾1、X86汇编语言的差异X86 下常用的汇编有 AT&T 与 Intel 两种,二者在语法上有一定的差
2021-04-22 22:11:37
1660
原创 一文带你入门红黑树,从树到红黑树的进化
一文带你入门红黑树,从树到红黑树的进化 树是数据结构里十分基础又十分重要的结构,它的应用很广泛。同时它也是数据结构和算法中重要的部分。算法经常会考察二叉树的一些操作,在面试中平衡二叉搜索树、红黑树(RB-Tree)也是考核的重点,这类题大多考察我们对树这类数据结构的掌握程度。本文从树的导览出发,从 树到二叉树、平衡二叉搜索树一直到AVL树,AVL树的插入、AVL树的旋转、最后再到红黑树、红黑树的插入、旋转与变色,带你逐步掌握红黑树的这种数据结构。1.1树的导览1.2 二叉搜索树(binary s
2021-04-02 20:19:51
183
4
转载 在浏览器中输入URL(如www.baidu.com)到显示页面经历哪些过程,涉及到哪些协议?
原文链接:https://blog.youkuaiyun.com/ypshowm/article/details/89175907
2021-03-26 19:12:52
855
原创 常考算法面试题:字符串(大数)相加、字符串(大数)相减、字符串(大数)相乘,解题方法总结
常考算法面试题:字符串相加、字符串相减、字符串相乘笔者今年秋招,最近投了一些大厂的实习,某为的手撕代码题目为 字符串相乘,某讯的手撕代码题目为字符串相减。于是去LeetCode和网上搜索了一下,发现这类题目是面试的常考题。只要会四则运算这道题的思路就很清晰,主要字符串的处理,难点也在于字符串处理。 以下代码本人均在GCC编译器下运行过,没有问题。自己写上主函数、输入、调用算法函数即可编译运行验证,或者去leetCode找到原题直接粘贴上去。1、字符串相加LeetCode上的字符串相加题目如下所示:
2021-03-20 21:58:52
1914
原创 手写实现STL String类,深入理解类的底层实现原理(构造函数,拷贝构造函数,运算符重载,析构函数)
C++ String类的实现String类的实现是面向对象的应用,其中涉及大量的 C++ 语法,经常以面试题的形式出现,很能考察面试者的 C++ 功底。本文实现基本的 普通构造函数、拷贝构造函数、析构函数、赋值函数、输出运算符重载下面的 类的原型、类的实现和 main函数作者均在 g++编译器下实践过,编译运行没有问题。类的原型string.h#ifndef _STRING#define _STRINGusing namespace std; class String{publ
2021-03-13 19:44:44
421
原创 《TCP/IP网络编程》(韩 尹圣雨)学习系列2,课后习题解答
《TCP/IP网络编程》(韩 尹圣雨)学习系列之2,课后习题解答《TCP/IP网络编程》(韩 尹圣雨)学习系列之1,学习笔记.《TCP/IP网络编程》(韩 尹圣雨)学习系列之3,核心项目剖析.Exercise 1.5(1).套接字是网络数据传输用的软件设备。 我们把插头插到插座上就能从电网获得电力供给,同样,为了与远程计算机进行数据传输,需要连接互联网,而编程中的“套接字”就是用来连接该网络的工具。(2).listen函数将服务器端转换为可连接状态,等待客户端发送连接请求,而accept函数是处理
2021-02-25 18:03:59
1587
翻译 github stars最多轻量型 Web服务器项目,tinyhttpd
Tinyhttpd 是J. David Blackstone在1999年写的一个不到 500 行的超轻量型 Http Server,用来学习非常不错,可以帮助我们真正理解服务器程序的本质。官网:http://tinyhttpd.sourceforge.nettinyhttpd 是一个简易的 http 服务器,支持CGI。代码量少,非常容易阅读,十分适合网络编程初学者学习的项目。麻雀虽小,五脏俱全。在tinyhttpd中可以学到 linux 上进程的创建,管道的使用。linux 下 socket 编程基本
2021-02-18 12:25:33
449
原创 《TCP/IP网络编程》(韩 尹圣雨)学习系列之3,核心项目总结
本文是我复习《TCP/IP网络编程》时所整理的,复习书中的几个主要的项目,包括回声服务器、聊天服务器、Web服务器。由于书中没有注释,我在代码中做了比较详细的注释,有助于大家理解代码的逻辑,理解服务器的原理、服务器编程的步骤。各个项目复习的知识如下:1、回声服务器(echo_server.c、echo_client.c、echo_client2.c),复习套接字编程。2、多进程回声服务器(echo_mpserver.c、echo_mpclient.c),复习多进程相关知识、信号处理、I/O分割。3、聊
2021-02-18 11:14:43
864
最新SFML库,C++,2D、3D游戏开发SDK
2020-03-08
VS2010 卸载工具 Visual Studio 2010 Uninstall Utility
2020-03-08
最新的eigen库 eigen.rar
2020-02-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人