自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Ubuntu系统设置记录

取消开机密码首先进入系统设置-用户账户打开自动登录关闭休眠模式首先,进入系统设置: 选择Brihtness and Lock然后修改成如下形式:——未完待续——

2021-09-20 14:24:54 211

原创 Ubuntu16.04下网卡DHCP配置

Ubuntu16.04有时会出现网卡未被激活、网卡没有自动分配ipv4地址的情况解决办法:激活网卡 # ifconfig eth0 up打开 vim /etc/network/interfaces文件进行配置保存退出,重启网络:sudo /etc/init.d/networking restart配置成功下面介绍ifconfig的使用方法,通常可以用它来查看、修改网卡信息Linux命令--ifconfig进行网卡配置  语 法:ifconfig [网络设备]...

2021-09-12 17:51:39 2174

原创 UDP可靠传输的实现(KCP)

1. 如何做可靠性传输?ack机制、重传机制、序号机制、重排机制(网络包乱序)、窗口机制2. 如何选择TCP和UDP?当实时性要求高,选择UDP:直播、音视频通话、游戏......使用短连接时:物联网传感器上报数据,采集完就休眠,采用UDP可以省电 大规模服务器心跳包设计,集中服务器监测,用来监控十万台服务器3. UDP如何可靠?KCP协议的优势是什么?可靠性UDP为了解决延迟问题 流量 = 带宽,流速 = 延迟 可靠+兼容速率——加序号TCP的超时重传间隔RT...

2021-07-18 21:19:46 1324 4

转载 C++线程池的原理与实现

线程池是一种多线程处理形式,将任务添加到队列,创建线程后自动启动这些任务降低资源消耗。线程池可以避免频繁的创建线程和销毁线程,线程池中线程可以重复使用 提高响应速度。线程池省去线程创建的这段时间 提高线程的可管理性。线程池可以对线程进行统一分配、调优和监控线程池主要分为三个部分:任务队列:存储需要处理的任务,由工作的线程来处理这些任务(函数地址)通过线程池提供的 API 函数,将一个待处理的任务添加到任务队列,或者从任务队列中删除 已处理的任务会被从任务队列中删除 线程池的使用者,调用

2021-07-18 16:49:05 754

原创 阿里云被攻击了>>>>>>>工作记录

太伤心了,我的测试服务器居然被挖矿程序攻击了贫穷的我哪有什么矿??挖矿程序,我恨你不仅掏空了我的钱包,hai'tao'kong'le

2021-06-14 12:46:11 176

原创 Redis原理及实现细节(2)Redis协议和异步方式

1. Redis的网络层Reactor【并发】处理连接,线程【串行】处理命令 (串行、并发:一个处理器 并行:多个处理器)单Reactor:一个线程同时处理所有连接的数据:【命令】+【网络IO】(MySQL :一个线程对应一条连接 【并发】处理连接,【并发】处理命令)Redis pipeline(客户端的技术)先把多个请求(request)都发送过去,再按顺序依次处理响应(response)(避免阻塞,提升效率)send:把request数据写到该连接的fd写缓冲区,协...

2021-06-13 23:12:08 489

原创 Redis原理及实现细节(1)命令和数据结构

Redis(Remote Dictionary Service)远程字典服务,内存数据库,kv数据库,数据结构数据库http://redis.cn/commands.html1. 应用:朋友圈点赞数、评论、点击数(hash)记录朋友圈说说列表(排序)、快速显示(list)记录文章的标题、摘要、作者和封面,列表页显示(hash)朋友圈点赞用户ID、评论ID、显示去重计数(zset)缓存热点数据,减少数据库压力(hash)朋友圈说说id(计数器string)集合交并差记录好友

2021-06-03 11:32:55 152

原创 知识点总结笔记

1. Linux的运行级别Linux下有7个运行级别: 0 系统停机模式,系统默认运行级别不能设置为0,否则不能正常启动,机器关闭。 1 单用户模式,root权限,用于系统维护,禁止远程登陆,就像Windows下的安全模式登录。 2 多用户模式,没有NFS网络支持。 3 完整的多用户文本模式,有NFS,登陆后进入控制台命令行模式。 4 系统未使用,保留一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些 设置。 5 图形化模式,登陆后进入图形GUI模式,

2021-03-17 11:22:09 154

原创 MySQL——什么是事务?四大特性ACID?隔离级别?

什么是事务(ACID)?事务的作用是什么?MySQL中,事务其实是一个最小的不可分割的工作单元,事务能够保证一个业务的完整性。UPDATE user SET money=money-100 where name = 'a';UPDATE user SET money=money+100 where name ='b';多条SQL语句,可能会有同时成功的要求,要么就同时失败如何控制事务?MySQL默认开启事务(自动提交) SELECT@@autocommit;默认事务开启的..

2021-02-15 13:48:41 232 1

原创 Linux网络编程和TCP服务器的多种实现

TCP客户端:bind(addr) connect() send() recv() close()服务端:fd=socket() bind(addr) listen() clientfd = accept() recv() close()listen只做迎接客户端的操作,不会影响后续工作(三次握手是在listen时确定的)UDP客户端:sendto() recvfrom()服务端:socket() recvfrom(fd,addr,buffer,...

2021-02-04 16:38:45 158

原创 select/poll/epoll多路IO复用

#include <sys/select.h>select()函数用于监视文件描述符的变化情况——读写或是异常,使用select可以完成非阻塞的IO操作。(select本身是阻塞的)关键:利用select把文件描述符的监视工作交给内核态进行处理。...

2021-02-01 14:07:42 206

原创 2020-12-23高性能网络编程笔记

网速一直在提升,但单机网络IO的能力有限,传统的网络业务(IP层以下)需要一套软件架构的高性能IO开发框架网卡IO和内核的瓶颈传统的收发报文方式都必须采用硬中断来做通讯,每次硬中断大约消耗100微秒,这还不算因为终止上下文所带来的Cache Miss。 数据必须从内核态用户态之间切换拷贝带来大量CPU消耗,全局锁竞争。 收发包都有系统调用的开销。 内核工作在多核上,为可全局一致,即使采用Lock Free,也避免不了锁总线、内存屏障带来的性能损耗。 从网卡到业务进程,经过的路径太长,有些其实

2020-12-26 17:22:17 196

原创 设计模式编程基础——发布订阅者模式

设计模式:是指在软件开发中,经过验证的,用于解决在特定环境下、重复重现的,特定问题的解决方案。在开发过程中,设计模式不是套用的模板,而是遇到问题时自然而然想到的解决方案,避免了重复造轮子的工作。模式的基本四要素:模式名称 pattern name 问题 problem 解决方案 solution 效果 consequences模式的最终目的:高内聚,低耦合发布订阅者模式目的:解耦合...

2020-12-19 12:10:29 388

原创 Linux网络编程——UDP Socket

UDP socket编程的知识点总结Udp是无连接的、不可靠的传输协议,面向消息的数据传输协议 与TCP相比,有两个致命的缺点,一是数据包容易丢失,二是数据包无序 建立在udp上层的协议,需要自己定义流控制、超时、重传等。 进行udp传输有两个问题,一个是数据包大小,一个是发数据时间间隔,这两个因素是发送端影响udp丢包率的主要因素,而丢包率直接影响了传输效率 UDP没有真正的发送缓冲区,因为它是不可靠无连接的,不需要保存应用进程的数据备份,应用进程的数据沿着协议栈往下传递,拷贝到内核...

2020-12-04 17:27:39 663

原创 2020-11-24 八大排序的原理和实现(C++)

八大排序直接插入排序:【插入有序表】将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。希尔排序: 【分组+插入】将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。直接选择排序:【比较+交换】从待排序序列中,找到关键字最小的元素;如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;从余下的 N - 1 个元...

2020-11-24 10:11:33 142

原创 布隆过滤器的原理和实现

1. 布隆过滤器 VS hashmap布隆过滤器是一种巧妙的概率型数据结构(probabilistic datastructure),特点是高效地插入和查询。和传统的数据结构相比,布隆过滤器占用空间小且高效,但有一定的概率性,结果存在误差。hashmap的元素超过表的一半需要扩容hash冲突:太严重,退化为链表2. 应用场景判断一个字符串是否存在,记录的数据量很大且要求查询效率高的情况下会采用布隆过滤器。...

2020-11-10 17:34:23 522

原创 Ubuntu16.04下JRTPLIB库的安装编译与使用

下载JRTPLIB3 和 JTHREAD &&编译安装http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib下载完成后,放在/usr/local/src/路径下,并执行tar -xvfxxx.tar.bz2解压分别进入jthread和JRTPLIB执行以下操作:cmake CMakeListsmakemake install会在/usr/local/include/路径下生成两个文..

2020-10-24 09:29:29 654

原创 【实时音视频传输/流媒体通信】FEC前向纠错的原理和实现

TCP协议的重传机制对实时音视频传输而言,如果网络质量很差,丢包率很高,重传机制导致传输延迟急剧增加,传输质量严重下滑。实时音视频传输协议一般采用UDP(应用层基于UDP的RTP协议,为视频传输提供序号和音视频同步服务),UDP具有高吞吐和低延时的特点。然而,基于UDP的RTP传输在复杂的公网环境下,特别是3G、4G、WIFI网络时面临丢包、乱序、重复、抖动等问题,严重影响实时音视频的传输效果。应用层的 FEC (Forward Error Correction,前向纠错)是一项有效防止丢包的技术,是一种实

2020-10-19 21:54:29 3791 1

原创 CPU体系结构——cache总结

CPU Cache何为cache:cache是内存数据的高速缓存,如果cpu要访问的数据在cache中,称为“命中”,否则称为“缺失”。cache分为L1 cache、L2 cache、L3 cache,读写延迟依次增加,实现成本依次降低,这样设计是根据性能和价格的折中考虑。程序的数据和指令分别存储在两片cache中,对应数据缓存(D-cache)和指令缓存(L-cache)程序局部性原理:最近被CPU访问的数据短期内还要访问(时间局部性),被访问数据附近的数据短期内也会被CPU访问(空间局部性).

2020-10-19 15:36:12 1817

原创 无锁CAS/无锁队列

高并发,读写十分频繁,会使用CAS1 互斥锁 自旋锁 原子操作锁住的代码耗时短:counter++操作,自旋锁有优势锁住的代码耗时长:for_add操作,自旋锁无优势【因为在等待的时候消耗的CPU资源比较多,做的无用功比较多】如何选择不同的锁?共享区域的粒度:线程切换会耗时,如果粒度小,spinlock时间小于CPU线程切换时间损耗,则有优势mutex 共享区域运行时间比较长(如果获取不到锁,会让出CPU)spinlock 执行的语句少,非阻塞(获取不到锁,就一直检...

2020-10-18 10:26:09 861 1

原创 C++并发编程 线程间的数据共享

1. 为什么要并发?分离关注点、提升性能2. 何时不用并发?收益比不上成本。启动线程存在固有开销 线程需要独立的堆栈空间 运行线程时,操作系统每次上下文切换都需要耗费时间3. C++11支持的并发:全新的线程感知内存模型,以及管理线程、保护共享数据、线程同步和原子操作等4. 线程:启动线程 、等待线程结束join() 或自主运行detached() (当线程退出时, 相关资源的能够正确回收)5. 线程间共享数据条件竞争(race condition):不变量遭到破坏(比如双向...

2020-10-15 21:17:23 491

原创 B树与B+树的基础知识

B树包括:B-Tree,B+Tree,B*Tree多叉树与B树的区别在于:B树的所有叶子结点,都在统一的高度上B-Tree和B+Tree常在磁盘中做索引一颗M阶B树T,满足以下条件:每个结点至多拥有M棵子树 根结点至少拥有两棵子树 除了根结点以外,其余每个分支结点至少拥有M/2棵子树 所有的叶结点都在同一层上 有k棵子树的分支结点则存在k-1个关键字,关键字按照递增顺序进行排序 关键字数量满足ceil(M/2)-1 <= n <= M-1 (ceil:向上取整)M阶:

2020-10-03 09:51:57 657

原创 红黑树和B+树的应用场景

查找算法:遍历、二分(有序序列,二叉查找树)、哈希(最高效)、插值(二分的优化)、索引(搜索引擎、lucene)、BFS/DFS(图论的遍历)、平衡树、B树、B+树、红黑树(高效的查找算法)、二叉搜索树哈希:O(1) 查找、哈希冲突(即一个hash值下挂了很多点)、JDK1.8里的HashMap:链表+红黑树(处理哈希冲突,一个key对应一个计算出来的hash值,多个key对应了同一个hash值,则需要用链表来存储这多个key...

2020-09-28 11:20:54 681

原创 红黑树的基础知识

红黑树是一颗二叉搜索树,它是平衡搜索树的一种,能够保证最坏情况下基本动态集合操作的时间复杂度为O(lgn)红黑树的性质: 每个结点都是红色或黑色 根结点是黑色 叶结点(nil)是黑色 如果一个结点是红色,则它的两个子结点是黑色(说明红色结点不相邻) 对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点 红黑树的结论:一颗有n个内部结点的红黑树的高度最多为2lg(n+1)注意:讨论红黑树时,一般都忽略黑色的叶结点,root的根

2020-09-26 22:16:43 401

原创 VScode远程调试linux——请求被拒绝的解决办法

1. 确保本机能够ssh远程连接linux2. 确保本机和linux均安装并开启了ssh服务Windows:应用-应用和功能-可选功能-OpenSSH客户端安装 Linux:ssh服务器安装sudo apt-get install openssh-server(被远程控制A) ssh客户端安装 sudo apt-get install openssh-client(远程控制B) 查看ssh服务:service ssh status...

2020-08-06 11:09:52 3240

原创 误删除/var/lib/dpkg的解决方案

上一篇介绍了apt-get update更新出错的解决方案当List终于Done了以后...我们在下载需要的软件时,可能会出现找不到/var/lib/dpkg的情况E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)E: Unable to lock the administration directory (/var/lib/dpkg/), is another proces

2020-06-21 16:40:53 1689

原创 Ubuntu16.04之sudo apt-get update报错终极解决方案

错误起源想要为新建的ubuntu16.04虚拟机安装一个VLC播放器,于是有了如下操作: sudo add-apt-repository ppa:n-muench/vlc sudo apt-get update sudo apt-get install vlc一顿操作猛如虎,apt-get update就报了超多错,出现了如下字样:Reading package lists... Error!解决方案我在网上找到很多解决办法,统统尝试了一遍:方法1:更新软件源----

2020-06-21 16:15:10 5860 3

原创 QT学习之路——添加资源、对话框、界面布局

今天学习了QT,利用拖拽方法进行UI界面设计资源文件添加到项目中:将图片文件拷贝到项目位置下(右键mainwindow.cpp显示包含的目录)右键项目->添加新文件->QT->QT Resourse File->给资源文件起名为res自动生成res.grc->open in editor 编辑资源->添加前缀、添加文件使用方法: “:+前缀名+文...

2020-05-04 18:59:12 646

原创 QT学习之路——菜单栏、工具栏、状态栏、锚接部件、核心部件

菜单栏最多有一个:QMenuBar * bar = MenuBar(); //创建菜单栏setMenuBar(bar) //显示菜单栏QMenu * fileMenu = bar->addMenu("文件") //创建菜单QAction *newAction = fileMenu0>addAction("新建"); //创建菜单项fileMenu->ad...

2020-05-03 20:08:20 663

原创 QT的学习之路——新建打开关闭窗口、按钮控件、lambda表达式、信号与槽

新建窗口:QWidget *newwidget = new QWidget;新建按钮:#include <QPushButton> QPushButton *btn = new QPushButton("open", this);设置按钮的父母:btn->setParent(this); 这一步必须有,这样才能正常显示、析构给按钮设置名字和样式: ...

2020-05-03 18:36:59 910

原创 2020/4/18多线程写链表时的报错

报错内容:double free or corruption这个报错的原因是:1、多次释放同一内存区,需要检查代码,是否出现了对同以内存区释放两次以上的地方。2、内存区溢出,malloc申请的内存区大小有限,如果操作不当,要存储的数据大于内存区大小,在free的时候也会检测出来,报这个错误*** Error in `/tmp/server/cmake-build-debug/ser...

2020-04-20 09:18:01 444

转载 2020/3/16 内存溢出和内存泄漏

内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。此时程序运行不了,系统会提示内存溢出,有时候会自动关闭件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件,而由系统配置、数据流和用户代码等原因而导致的内存溢出错误,即使用户重新执行任务依然无法避免内存泄漏(Memory Leak),是指程...

2020-03-16 13:40:53 344

原创 2020/03/09 基于UDP的自定义协议 调试笔记

1. UDP的发送、接收函数UDP是一个无连接的协议,不需要像TCP协议一样的accept()等建立连接的操作但UDP也可以使用connect(),用于指定目标地址,用法如下:connect(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr));使用UDP协议的基本方法想要获取发送端地址,采用recv(...

2020-03-11 23:32:48 723

原创 2020/03/09 基于UDP的自定义协议

笔记11. ./include/msg.h 头文件 声明函数2. ./src/msg.c 包含"msg.h"文件,然后给出函数的定义3. 编译msg.c 并生成msg.o文件 gcc -o obj/msg.o -Iinclude -c src/msg.c4. 修改echo_udp_client,客户端发送和接收改用自定义函数,并设定发送信息的头部5. 编译gcc -...

2020-03-09 22:45:22 1280

原创 2020/03/08 GDB调试笔记

进入调试 gdb hello运行: 没有参数 run 有参数 run【参数】或

2020-03-08 23:07:35 396

原创 2020/03/08 VMware常见问题

解决PUTTY连不上虚拟机Ubuntu64的问题查看虚拟机的ip地址:ifconfig -a这里的网卡是ens33,为自动备援模式eno1:表示主板BIOS内置的网卡ens1:表示主板BIOS中内置的PCI-E网卡enp2s0:PCI-E独立网卡eth0:如果没有使用以上任何一个,则将返回默认的网卡名添加虚拟网卡方法1✌添加:sudo ifconfig en...

2020-03-08 11:23:09 299

原创 2020/03/07 关于size_t、关键字、字符串操作函数

size_t定义在<stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>, <wchar.h>, <sys/types.h>size_t是一个类型定义,定义了无符号整形,包括unsigned int、unsigned long、unsigned lon...

2020-03-07 22:35:58 538

原创 2020/03/01 浅谈各种存储器及其区别

每当我看到各种芯片手册的时候,总是对各种存储器的名字感到疑惑——似曾相识又似懂非懂。为了让自己真正搞懂存储器,特地写一篇关于存储器的文章,以加深理解。存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。计算机中全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。有了存储器,计算机才有记忆功能,才能保证正常工...

2020-03-02 16:04:09 1364

原创 2020/2/26 Linux Socket编程 高级篇——守护进程

守护进程是linux后台执行的一种服务进程,特点是独立于控制终端、周期性地执行某种任务或等待处理某些发生事件,不会随终端关闭而停止,直到接受停止信息才会结束,且一般采用以d结尾的名字。 守护进程(daemon)是一种生存期长的进程,常常在系统引导装入时启动,在系统关闭时终止。 所有守护进程都以超级用户(用户ID为0)的优先权运行。 守护进程没有控制终端 守护...

2020-02-26 21:31:27 430

原创 2020/2/22 Linux Socket编程 高级篇——IO多路复用

前面介绍的函数,如:recv、send、read、write都是阻塞性函数,如果资源没有准备好,调用该函数的进程将进入阻塞状态。本节将介绍两种多路复用的解决方案。1 IO多路复用(多路转换)(1)利用fcntl函数实现(非阻塞方式)用来操作文件描述符(如套接字,套接字是抽象出来的概念,本质上也是文件描述符)的一些(2)利用select函数实现...

2020-02-26 16:34:33 346

空空如也

空空如也

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

TA关注的人

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