自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 nginx下TCP负载均衡配置

负载均衡基础与nginx下TCP负载均衡配置安装nginx在服务器快速集群环境搭建中,都迫切需要一个能拿来即用的负载均衡器,nginx在1.9版本之前,只支持http协议web服务器的负载均衡,从1.9版本开始以后,nginx开始支持tcp的长连接负载均衡,但是nginx默认并没有编译tcp负载均衡模块,编写它时,需要加入--with-stream参数来激活这个模块。nginx编译安装需要先安装pcre、openssl、zlib等库,也可以直接编译执行下面的configure命令,根据错误提示信息

2022-03-22 13:36:25 7440

原创 安装和使用JMeter

安装JMeter安装Java8下载安装包解压缩sudo tar -zxvf jdk-8u321-linux-x64.tar.gz修改环境变量sudo gedit /etc/profile#set oracle jdk environmentexport JAVA_HOME=/home/ccc/jdk1.8.0_321export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/li

2022-03-21 23:36:48 721

原创 设计模式之单例模式

单例模式单例模式( Singleton ) , 保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问, 但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建, 井且它可以提供一个访问该实例的方法。单例模式的好处单例模式因为Singleton 类封装它的唯一实例,这样它可以严格地控制客户怎样访问它以及何时访问它。简单地说就是对唯一实例的受控访问。静态初始化C#与公共语

2022-03-20 23:51:03 232

原创 面向对象编程(C# 集合、泛型、委托和事件)

面向对象编程类与实例对象是一个自包含的实体, 用一组可识别的特性和行为来标识。类就是具有相同属性和功能的对象的抽象的集合类名称首字母大写、对外公开方法需要用‘public’修饰符实例,就是一个真实的对象,实例化就是创建对象的过程,使用new关键字来创建构造方法构造方法,又叫构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,也不需要void,在new时候调用所有类都有构造方法,若不编码则系统默认生成空的构造方法。方法重载方法重载提供了创建同名的多个方法的能力,但这些

2022-03-20 23:08:45 370

原创 c++智能指针

c++智能指针构造函数可以抛出异常吗,有什么问题?初始化列表的异常怎么捕获?析构函数可以抛出异常吗,有什么问题?析构函数如何处理异常智能指针内存泄漏野指针强制转换RTTIRAIICPP11新特性仿函数构造函数可以抛出异常吗,有什么问题?构造函数中应该避免抛出异常。构造函数中抛出异常后,对象的析构函数将不会被执行构造函数抛出异常时,本应该在析构函数中被delete的对象没有被delete,会导致内存泄露当对象发生部分构造时,已经构造完毕的子对象(非动态分配)将会

2022-03-16 14:44:25 416

原创 c++ STL

c++ STLvector如何扩展内存和释放内存STL中各种容器对比STL中的swap函数STL中哈希表扩容STL迭代器失效的情况和原因vector删除元素后如何避免当前迭代器会失效vector的iterator和const_iterator和const iteratorvector如何扩展内存和释放内存内存增长1.5还是2倍扩容内存释放各种容器对比容器底层数据结构时间复杂度有无序可不可重复其他array数组随机读改 O(1)无序

2022-03-16 14:44:19 177

原创 socket网络编程

socket网络编程网络编程的步骤常用APITCP中的accept和connect和listen的关系UDP中的connect广播和组播过程服务端大量TIMEWAIT或CLOSEWAIT状态复位报文段RST优雅关闭和半关闭解决TCP粘包select可以判断网络断开吗send和read的阻塞和非阻塞情况网络字节序和主机序IP地址分类及转换select实现异步connect为什么忽略SIGPIPE信号如何设置非阻塞网络编程步骤TCP服务端:socket -&g

2022-03-16 14:44:14 634

原创 # linux系统编程及基本命令

linux系统编程及基本命令系统编程按下开机键Linux发生了什么进程退出方式及区别回收进程资源的方式和区别守护进程线程退出方式与线程回收共享内存信号量信号通知进程valgrind检查内存泄漏程序从main函数开始吗基本命令Linux基本目录结构文件操作命令磁盘及内存命令进程命令网络命令字符处理命令调试命令文本处理工具按下开机键Linux发生了什么BIOS -> MBR -> 引导加载程序 -> 内核 -> init pr

2022-03-16 14:44:06 299

原创 C/C++编译底层

C/C++编译底层C++内存管理LINUX进程区分段及存储数据GCC编译流程动态库静态库区别及LINUX加载库extern C的结果和CPP编译的区别重载的底层原理编译性语言和解释性语言的本质区别和优缺点C++内存管理栈 存储函数的返回地址、参数、局部变量、返回值,从高地址向低地址增长堆 malloc/free开辟内存的空间,从低地址向高地址增长自由存储区 new/delete开辟内存空间数据区数据区包含全局/静态存储区和常量存储区,存储已初始化的全局变量和静态变量、

2022-03-15 10:58:48 234

原创 c++面向对象

c++面向对象内存字节对齐面向对象三大特性双冒号、using和namespace内联函数和函数重载虚函数可以是内联函数吗构造函数/析构函数拷贝构造函数与深浅拷贝只在堆上/栈上创建对象this指针常函数和常对象delete this合法吗为什么空类大小不为0静态成员变量与静态成员函数能否通过初始化列表初始化静态成员变量初始化列表的好处和使用条件友元全局函数、友元类、友元成员函数运算符重载及++重载实现继承方式、对象模型、同名处理多继承和菱形继承静态函数可以是虚函数

2022-03-15 10:55:01 176

原创 海量数据处理思路

海量数据处理思路海量数据处理海量数据,不能一次加载到内存中海量数据topK(最大和最小k个数),第k大,第k小的数海量数据判断一个整数是否存在其中海量数据找出不重复的数字找出A,B两个海量url文件中共同的url海量数据topK最大K使用最小堆,最小K使用最大堆,这里以最大K为例海量数据hash分块维护最小堆的K个数据的数据容器堆中数据是topK大的数据,堆顶的数据是第K大数据先将海量数据hash再取模m,分成m个小文件,hash(num)%m,也可以直接取模在

2022-03-15 10:40:19 2642

原创 数据结构(红黑树、B/B+树、跳表、位图等)

数据结构查找算法二叉树基础最大堆和最小堆二分查找二叉排序树平衡二叉树多路查找树2-3树红黑树B/B+树哈希表跳表位图数组和链表数组和链表的区别赫夫曼编码赫夫曼树赫夫曼编码二叉树基础二叉树定义n个结点的有限集合,该集合为空集,或者一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成满二叉树一棵二叉树中所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上完全二叉树一棵有n个结点的二叉树按层序编号,编

2022-03-15 10:38:29 1039

原创 LINUX系统中的锁

LINUX系统中的锁说一下LINUX系统中的锁互斥锁,读写锁,自旋锁互斥锁:mutex,用于保证在任何时刻,都只能有一个线程访问该对象。当获取锁操作失败时,线程会进入睡眠,等待锁释放时被唤醒读写锁:rwlock,分为读锁和写锁。处于读操作时,可以允许多个线程同时获得读操作。但是同一时刻只能有一个线程可以获得写锁。其它获取写锁失败的线程都会进入睡眠状态,直到写锁释放时被唤醒。 注意:写锁会阻塞其它读写锁。当有一个线程获得写锁在写时,读锁也不能被其它线程获取;写者优先于读者(一旦有写者,则

2022-03-15 10:35:45 762

原创 存储器层次结构

存储器层次结构存储器层次结构层次结构本地磁盘 -> 主存(DRAM) -> L3高速缓存(SRAM) -> L2高速缓存(SRAM) -> L1高速缓存(SRAM) -> L0寄存器缓存思想位于K层的更快更小的存储设备作为位于K+1层更大更慢的存储设备的缓存K+1层的存储器被划分成连续的数据对象组块,称为块,数据总是以块大小为传送单元在K和K+1层之间来回复制缓存命中当程序需要K+1层的某个数据对象d时,首先在当前存储在K层的块中查找d,若d刚好缓

2022-03-15 10:34:32 3006

原创 用户态和内核态

用户态和内核态用户态和内核态概念用户态和内核态是操作系统的两种运行级别,两者最大的区别就是特权级不同。用户态拥有最低的特权级,内核态拥有较高的特权级。运行在用户态的程序不能直接访问操作系统内核数据结构和程序操作系统的数据都是存放于系统空间的,用户进程的数据是存放于用户空间的。* 分开来存放,就让系统的数据和用户的数据互不干扰,保证系统的稳定性。* 分开存放,管理上很方便,而更重要的是,将用户的数据和系统的数据隔离开,就可以对两部分的数据的访问进行控制。这样就可以确保用户程序不能随便操作

2022-03-15 10:32:38 737

原创 TLB、程序计数器PC和指令指针寄存器IP

TLB、程序计数器PC和指令指针寄存器IPTLBTLB( Translation Look- aside buffer)专门用于缓存内存中的页表项,一般在MMU单元内部,页表一般存储在屋里内存中。当处理器要访问一个虚拟地址时,首先会在TLB中查询。如果TLB表项中没有相应的表项,称为TLB Miss,那么就需要访问页表来计算出相应的物理地址。如果TLB表项中有相应的表项,那么直接从TLB表项中获取物理地址,称为TLB命中。程序计数器PC和指令指针寄存器IP程序计数器PC用指令事先编好的程序连

2022-03-15 10:30:40 4359

原创 进程、线程和协程

进程、线程和协程僵尸进程和孤儿进程当父进程先结束,子进程此时就会变成孤儿进程,孤儿进程会自动向上被init进程收养,init进程完成对状态收集工作。而且这种过继的方式也是守护进程能够实现的因素。如果子进程先结束,父进程并未调用wait或者waitpid获取进程状态信息,回收进程资源,那么子进程描述符就会一直保存在系统中,这种进程称为僵尸进程。僵尸进程是每个子进程退出时必然经历的过程僵尸进程的危害在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留

2022-03-15 10:26:55 1218

原创 进程调度知识

进程调度进程调度算法批处理系统批处理系统没有太多的用户操作,在该系统中,调度算法目标是保证吞吐量和周转时间(从提交到终止的时间)。先来先服务 first-come first-serverd(FCFS)非抢占式的调度算法,按照请求的顺序进行调度。有利于长作业,但不利于短作业,因为短作业必须一直等待前面的长作业执行完毕才能执行,而长作业又需要执行很长时间,造成了短作业等待时间过长。短作业优先 shortest job first(SJF)非抢占式的调度算法,按估计运行时间

2022-03-15 09:37:06 149

原创 win10远程连接ubuntu18.04 xrdp+xfce4+fcitx+terminal

第 1 步 - 下载脚本要下载脚本,您有多种选择。您可以从终端发出以下命令wget https://www.c-nergy.be/downloads/xRDP/xrdp-installer-1.3.zip您也可以简单地使用浏览器并单击链接下载脚本:xrdp-installer-1.3.zip第 2 步 - 解压缩文件下载包含该文件的 zip 包后,您需要先将其解压缩。要解压缩包,您可以使用终端控制台并发出以下命令unzip xrdp-installer-1.3.zip您还可以使用 GUI 和

2022-03-14 18:07:27 2461

原创 共享内存底层原理

进程间通信进程间通信主要包括管道、系统IPC(包括消息队列、信号、共享内存等)、本地套接字socket。管道(缓冲区有限)无名管道PIPE一种半双工的通信方式,只能在具有亲缘关系的进程间使用(父子进程或兄弟进程)有名管道FIFO一种半双工的通信方式,可以在非亲缘关系的进程间使用消息队列消息队列是消息的链接表,存放在内核中并由消息队列标识符标识消息队列克服了信号传递信息少,管道缓冲区大小受限的缺点一个消息队列由一个标识符(即队列ID)来标记信号信号是一

2022-03-11 09:54:56 713

原创 fork() vfork() clone()

进程间同步信号量fork() vfork() clone()进程的四要素: (1)有一段程序供其执行(不一定是一个进程所专有的),就像一场戏必须有自己的剧本。 (2)有自己的专用系统堆栈空间(私有财产) (3)有进程控制块(task_struct)(“有身份证,PID”) (4)有独立的存储空间。 缺少第四条的称为线程,如果完全没有用户空间称为内核线程,共享用户空间的称为用户线程。fork、v_fork、clone底层都是do_fork,追踪发现底层使用的是sy

2022-03-11 09:47:18 216

原创 进程与PCB

进程与PCB进程进程是操作系统的资源分配单位,实现操作系统的并发,对于一个进程,它在被执行前其实是一个可执行程序。这个程序是被放在磁盘上的,当它要被执行的时候,它先被加载到内存当中,然后再放入到寄存器中,最后再让cpu执行该程序,这个时候一个静态的程序就变成了进程进程创建时会分配4G的内存,其中0-3G是用户空间,3-4G是内核空间,PCB存在于内核空间进程的用户空间是不同的,内核空间也是不同的。比如每个进程的不同系统调用,是陷入自己独立的内核空间里面,所以每个进程内核的堆栈肯定是不一样的P

2022-03-11 09:42:21 4033

原创 并行和并发

并行和并发并发在同一时刻只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。并行在同一时刻,有多条指令在多个处理器上同时执行。计算密集任务和IO密集任务计算密集型任务特点是要进行大量的计算,消耗CPU资源,比如计算圆周率、对视频进行高清解码等等,全靠CPU的运算能力。虽然可以用多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执行任务的效率就越低,所以,要最高效地利用CPU,计算密集型任务同时进行的数量应当等于CPU的核

2022-03-11 09:38:52 912 1

原创 跨平台技术实现原理

跨平台技术实现原理现有跨平台技术就是通过库函数调用实现的,不使用系统函数调用。Qt如何识别不同系统Qt各个操作系统都有特定的宏,然后代码里面根据不同的宏调用不同平台的API对于程序或框架如何判断自己在什么系统或版本(相同的系统版本不同Api也是有所不同的)下,这个很简单,不同的系统或版本都有自己的特征,可能是独特的宏定义,特定的标志位,或者直接有对应的函数获取。当然,目前平台虽然看似差别很大,但是逐渐已经形成了大家共同承认的一些规范,比如Windows、Linux、Unix目前都已经遵循

2022-03-11 09:34:44 712

原创 库函数和系统调用的区别

库函数和系统调用的区别概念库函数调用是语言或应用程序的一部分,而系统调用是操作系统的一部分,跨平台技术的原理就是通过库函数实现的,库函数可以理解为是对系统调用的一层封装,但库函数不是必须包含系统调用。库函数有可能包含有一个系统调用,有可能有好几个系统调用,当然也有可能没有系统调用,比如有些操作不需要涉及内核的功能。区别所有 C 函数库是相同的,而各个操作系统的系统调用是不同的。函数库调用是调用函数库中的一个程序,而系统调用是调用系统内核的服务。函数库调用是与用户程序相联系,而系统调用是

2022-03-11 09:32:13 2198

原创 程序的局部性原理

程序的局部性原理基本概念程序倾向于引用临近于其他最近引用过的数据项的数据项,或最近引用过的数据项本身,这种倾向性被称为局部性原理。时间局部性良好时间局部性的程序中,被引用过一次的内存位置很可能在不远的将来再被多次引用空间局部性良好空间局部性的程序中,一个内存位置被引用,程序很可能在不远的将来引用其附近的一个内存位置从硬件和操作系统层面看如何利用局部性硬件层局部性原理允许硬件引入高速缓存存储器这种小而快速的存储器来存储最近被引用的指令和数据,从而提高对主存的访问速度

2022-03-11 09:22:35 1628

原创 Win10连接远程桌面失败

Win10连接远程桌面失败两台内外连接的电脑A、B,均无线连接,A、B的网络是通的。开始时两台电脑均可以正常上网。此时用A电脑启动远程桌面连接B电脑。B电脑wifi自动断开,导致远程桌面连接失败。解决办法步骤如下:1、适配器选项2、找到无线网卡并右击3、选择【状态】下的【无线属性】4、勾选【即使网络未广播其名称也连接…】5、点击【安全】标签下的【高级设置】6、勾选【为此网络启用单一登录】并选择用户登录前立即执行...

2022-03-11 08:41:18 1233

原创 windows10+vscode进行linux远程开发与调试

windows10+vscode进行linux远程开发与调试远程主机安装ssh-server在这里使用虚拟机作为远程:192.168.231.31Ubuntu安装ssh-serversudo apt-get updatesudo apt-get install openssh-server安装好后查看SSH是否启动打开”终端窗口”,输入:sudo ps -e |grep ssh–>回车–>有sshd,说明ssh服务已经启动,如果没有启动,输入sudo service ssh

2022-03-10 10:55:16 2105

原创 Ubuntu18.04下安装boost和muduo库

Ubuntu18.04下安装boost和muduo库

2022-03-10 09:48:04 1147

原创 Ubuntu18.04安装Json库

Ubuntu18.04安装Json库前言关于gcc、make和cmake的区别cmake 是一种跨平台编译工具,比make更为高级。cmake主要是编写cmakelists.txt文件,然后用cmake命令将cmakelists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序。当你的程序有多个源文件时,用gcc逐个编译时容易出现混乱并且工作量大。因此出现了make工具。make工具可以看成是智能的批处理工具,它本身没有编译和链接的功能,而是用类似批

2022-03-10 00:04:56 5270

原创 ubuntu18.04安装redis

ubuntu18.04安装redisUbuntu apt 命令安装在Ubuntu 系统安装 Redis 可以使用以下命令:# sudo apt update# sudo apt install redis-server启动 Redis# redis-server查看 redis 启动状态# redis-cli以上命令将打开以下终端:redis 127.0.0.1:6379>127.0.0.1 是本机 IP ,6379 是 redis 服务端口。现在我们输入 PING 命

2022-03-09 23:43:44 775

转载 Ubuntu18.04下安装MySQL

Ubuntu18.04下安装MySQL提示:以下操作均在root用户下进行,如在普通用户,请自行加上sudo!查看有没有安装MySQL:dpkg -l | grep mysql安装MySQL:apt install mysql-server安装完成之后可以使用如下命令来检查是否安装成功:netstat -tap | grep mysql通过上述命令检查之后,如果看到有 mysql 的socket处于 LISTEN 状态则表示安装成功。登录mysql数据库可以通过如下命令:mysql

2022-03-09 23:37:44 1958

转载 Ubuntu18.04安装Web服务nginx

一、NginxNginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。三大WEB服务器:apache, Nginx, lighttpd之一。在高连接并发的情况下,Nginx是Apache服务器不错的替代品。nginx应用场合静态服务器。(图片,视频服务)另一个是lighttpd。并发几万,html,js,css,flv,jpg,gif等。动态服务,nginx——fastc

2022-03-09 23:22:44 778

原创 Ubuntu18.04安装指南和基本配置

Ubuntu18.04安装指南和基本配置制作启动U盘下载镜像清华大学镜像站下载https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/18.04/下载启动盘制作软件官网下载(比较慢)https://rufus.ie/制作启动U盘(如图) 双击直接运行rufuns。 设置分区类型MBR,文件系统FAT32,簇大小8192字节。点击开始,制作启动盘。等待状态进度条满了后点击关闭,启动盘制作完成。进入bios安装重启电脑,开机快

2022-03-09 23:03:41 531

空空如也

空空如也

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

TA关注的人

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