自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C/C++相关知识点储备

1.c++虚函数原理智能指针c语言如何实现c++对象以及私有成员c++多态实现new和malloc的区别以及底层实现原理STL中的vector怎么扩容虚函数指针的初始化过程c++11原子变量介绍c++11特性有哪些,说用过的怎么理解重载与重写怎么理解c++中的static关键字vector和list 的区别c++的内存分配map与set的底层实现类静态变量的初始化析构...

2020-05-27 15:58:25 7512 1

原创 软开知识点查漏补缺

1.软件设计原则?七大原则:1. 开闭原则, 每个类或者模块函数都应具备对外可以扩展,对内关闭修改权限的原则。2. 依赖倒置原则, 高层模块不应依赖底层模块,二者都应该依赖于各个抽象类。将各个模块之间的耦合性降到最低,以求实现彼此独立,互不干扰的效果,提高后期的维护性,可靠性。3. 单一职责原则, 保证一个类只实现一种功能,而不是多个功能。4. 接口隔离原则, 使用多个专门的接口而不是用单一的总接口,总体上符合我们对于高内聚低耦合的设计思想。5. 迪米特原则, 又叫最少知道原则,各个类保持无联系

2020-10-29 14:43:56 233

原创 算法1:贪心思想

贪心

2020-08-21 19:11:52 223

原创 shell 学习 if /while / for 语法格式

语法特点总结在大多数情况不需要 ;结尾shell脚本编程的空格非常重要,这和Linux的语法也有一定的关系。if 语句示例:if 判断目录、文件#/bin/bash#auto testfile#by authors guoqi 2020DIR=/tmp/20200714if [ ! -d $DIR ];then mkdir -p $DIR echo"this $DIR creat success!"else echo -e "\033

2020-08-14 11:27:37 289

原创 C/C++开发 面经合集 —— c++ 强化

(1) 多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载)编译时的多态(静态) 主要体现在函数重载上和函数模板上。运行时的多态(动态)主要通过虚函数来实现,体现在子类重写父类所定义的 virtual 函数。重载、重写、重定义。在类继承中,重定义,重载。重定义函数名相同,返回类型必须相同,参数列表可以相同,可以不同;重载,函数名相同,返回类型和参数列表至少一个不同。只要子类出现与父类同名的函数,子类就不会继承父类同名函数(隐藏)。当该同名函数在父类声明为虚函数时(virtual),称

2020-08-06 18:52:18 1420

转载 内存对齐原理

偶然间看到这片博文,觉得非常生动形象,于是转载:原文链接内存对齐带你深入理解内存对齐最底层原理公众号:开发内功修炼相信绝大多数的人都了解内存对齐,对齐后性能高。但是其最最底层的原理是啥呢? 有的人可能会说,因为高速缓存的工作机制。读者你很聪明,这是原因之一。但我今天想挖的是更底层一点的原理,让我们去内存的物理构成里找找答案!内存物理结构我们来了解一下内存的物理构造,一般内存的外形图片如下图:图1 内存外形图一个内存是由若干个黑色的内存颗粒构成的。每一个内存颗粒叫做一个chip。每个chip内部,是由8个

2020-08-04 15:41:25 349

原创 算法3:动态规划简单学习

动态规划

2020-08-03 16:25:39 276

转载 Linux 常用命令合集

常用命令艿艿:这一小节会非常非常非常长,当做温故知新吧。另外,面试官也可能会问,你熟悉 Linux 么?你平时使用哪些 Linux 命令。酱紫的连环炮~当...

2020-07-30 17:01:22 3436

原创 算法5:回溯算法

1.回溯算法

2020-07-29 18:50:54 1169

原创 Linux 条件变量,互斥量详解

C++ 解决线程同步的问题主要通过 互斥锁 mutex 与 条件变量 condition_varible 来完成。Linux 封装的多线程库中封装了一系列的函数用于互斥和条件变量。互斥量:mutexLinux 主要函数:pthread_mutex_t ;本质上是一个结构体类型的变量。pthread_mutex_t mutex; mutex 只有两种取值 0 、 1;常用函数:#include<pthread.h>pthread_mutex_init(pthread_mutex_

2020-07-27 15:26:00 587

原创 操作系统基础知识储备

进程与线程的区别多进程与多线程区别,应用场景volatile和原子变量的区别proc文件系统自旋锁与普通锁的区别虚拟内存进程的内存分布栈内存为什么由系统自动分配和释放守护进程如何创建进程间的通信方式及其区别,应用场景死锁条件和解除进程调度方式对编译连接的理解共享内存实现原理僵尸进程是什么,如何处理自旋锁在单cpu与多cpu下的使用用户态与内核态...

2020-07-22 21:41:44 2097

原创 数据结构相关知识储备

hash处理冲突的方法二分查找及其变种数组与链表的区别redis数据结构用过哪些,了解跳表?红黑树比平衡二叉树有哪些优点二叉树,b+树,hash,二叉查找树区别说说红黑树的特性各种树,排序的时间复杂度数据库索引,事务,事务级别不考虑事务的隔离性会出现什么问题事务隔离级别索引的类型AC自动机时间复杂度...

2020-07-22 19:50:33 1170

原创 GuoQi_HttpServe 设计问题笔记

too many open files

2020-07-22 11:17:09 584

转载 makefile 编写原理 + 示范

文章目录一、概述二、编写1)文件的命名规则2)用途3)基本规则4)工作原理5)执行6)变量7)函数三、实操第一版makefile第二版makefile第三版makefile第四版makefile第五版makef...

2020-07-19 15:28:06 954

原创 数据库知识储备

如何提高查询速度?加了索引就快了?数据库索引底层结构mysql与memcache的区别mysql常见三种存储引擎的MySQL B+Tree索引和Hash索引的区别?B+树索引和哈希索引的明显区别是:非关系型数据库和关系型数据库区别,优势比较?mysql常见查询优化方案...

2020-07-14 10:25:46 1663

原创 Linux Http服务器 epoll + threadpool 实现

Http服务器中包含了http协议、TCP/IP协议,同时该项目又包含了I/O复用技术、多进程多线程、线程池管理以及Linux gdb多线程多进程调试等一系列基本操作,所以通过该项目可以把以上的技术点一一掌握,博主也是本着这样的初心来进行本 HttpServe 的开发设计。首先,亮出 github地址:https://github.com/GUOQIFU/GuoQi_HttpServe 传送门首先,分为三大部分:1. Http 报文解析 2. epoll反应堆 3.线程池的设计1. Http 报文解析

2020-07-13 19:47:25 1757

原创 Linux基础知识及应用编程

如何查看进程打开的文件介绍下nm与ldd命令shell命令查内存,端口 ,io访问量,读写速率awk grep具体应用硬链接与软连接,目录可不可以用硬链接常见命令netstat iptable tcpdump topmakefile介绍下(cmake介绍下)gdb查看堆栈中所有遍历gdb查看shared_ptr指向的内容gdb如何调试多进程多线程g++和gcc编译出来有什么区...

2020-07-06 11:37:01 3098

原创 服务器开发之 Nginx 学习笔记

1.Nginx简介Nginx 是一个高性能的HTTP和反向代理服务器,特点是占内存少,并发能力强。Nginx转为性能优化而开发,性能是器最重要的考量,实现上非常注重效率,能经受住高负载的考验,有报告表明能支持的高达50000个并发连接数。百度,腾讯,网易,淘宝等都在使用Nginx.2.反向代理将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器的地址,隐藏了真实服务器的地址。3.负载均衡将原来

2020-06-30 19:13:47 665 1

原创 计算机网络知识储备

介绍下proactor和reactorreactor的组成TIME_WAIT危害TIME_WAIT时长,为什么?IP为什么要分片项目中说用到线程池,开多大,为什么运用线程池?select和epoll区别select什么情况返回0epoll可读情况有哪些什么时候需要TCP四次挥手?如何设置非阻塞什么是零拷贝?tcp与udp的区别以及应用场景如何设计一个可靠的udp粘包如何...

2020-06-28 15:47:45 8047 3

原创 tiinyhttp思路解析

1.main 函数准备 socket创建,bind绑定,listen监听,accept等待接收过程。2.创建线程处理http请求报文3.字符串处理,http协议的格式,按照每个字段的含义提取相应的方法,URL等信息出来。4.判断请求,静态页面请求还是动态请求,判断是否执行CGI程序5.CGI程序,父子进程之间创建管道进行通信,最后又父进程将CGI程序的结果发送给客户端,至此,最复杂的一种请求情况结束。6.以下为完整流程图,字有点小,请放大细看。...

2020-06-24 15:59:00 590

原创 LRU——缓存管理算法

1.页面缓存管理算法,即LRU算法是运用过去预测未来的一种算法,将过去访问量最高的页面资源保存到缓冲区的最前面,将最不常用的资源放在缓冲区最后面或者将之删除。2.缓冲区的结构为了更好的在后期查找,遍历最好使用键值对,哈希表等结构,查找时间复杂度为O(1),所以本文采用map + list的数据结构来当做数据缓冲区。LRUCzche.h//LRU算法 map+循环链表实现class LRUCache {public: LRUCache(int size); ~LRUCache(); voi

2020-06-18 09:54:29 4229

原创 面试8——手撕算法

链表有无环判断实现一个单例模式给一个字符串判断单词数开方算法青蛙跳台阶常用排序(快排和归并要写吐)反转链表两个链表,寻找公共节点查找字符串中不重复的最长子串LRU手写求树的深度的代码手写生产者消费者编程实现string类两个数组A,B,A有的B都有,求B-A;输入一个字符串,输出它的全排列统计完全二叉树多少个节点memcpy实现...

2020-06-16 20:24:19 4643

原创 C++生产者消费者设计模式+多线程基础扫盲

1.mutex互斥量、锁mutex互斥量是一个类,这个类有有一个lock()方法,和一个unlock()方法。如果第一次运行了lock()这个方法,而没有运行unlock()这个方法,第二次再运行lock()这个方法时,程序就会卡停在这里,只有当运行了unlock()这个方法运行后,第二个lock()方法才会运行通过。就是运用这种“锁”的机制就可以保证两段代码独立运行。lock()和unlock()必须同时成对出现,不可以多写,也不可以少写,要不认会出现不知名的错误。std::lock_guard

2020-06-11 20:41:05 3820

原创 I/O 模式 + Reactor/Proactor笔记

1.同步、非同步 、阻塞、非阻塞 I/O 模式的操作理解同步、异步:主要针对的对象是进程与内核之间的交互过程。同步在进程触发I/O操作的时候,会主动以等待或者轮询的方式去查看内核中的I/O操作是否就绪。异步就是进程触发I/O操作之后就不管这个操作了,可以去干其他的事,反而内核完成这个I/O操作之后,内核会给异步进程一个I/O完成的通知。异步主要特点就是会得到一个通知。阻塞、非阻塞:主要针对的对象是进程访问数据的过程。当I/O操作就绪之后,阻塞方式下的读取或者写入函数会抑制等待数据缓冲区中的数据状态(有数

2020-06-07 19:57:16 2224 1

转载 从内存布局看C++虚继承的实现原理

原创作品,转载请标明:http://blog.csdn.net/xiejingfa/article/details/48028491准备工作1、VS2012使用命令行选项查看对象的内存布局微软的Visual Studio提供给用户显示C++对象在内存中的布局的选项:/d1reportSingleClassLayout。使用方法很简单,直接在[工具...

2020-05-31 15:02:25 310

转载 在github 创建第一个自己的托管项目

在GitHub中上传自己的托管项目主要需要以下几个步骤:1.注册一个GitHub账号,这很简单,到官网注册就行了。github网址:https://github.com/2.在本地安装git bash工具,它是一个Windows下的命令行工具,应用于后期上传我们的项目文件,git下载地址 : https://git-scm.com/downloads (下载速度感人,可以去第三方下载,注意版本)3.GitHub上建立自己的项目...

2020-05-28 19:26:01 355

原创 红黑树的特性简单记

7.说说红黑树的特性红黑树:属于不严格平衡二叉树,主要解决了平衡二叉树每次插入、删除节点后需要立马操作保证平衡的特性,从而减低了开销。红黑树不是高度平衡的,算是一种折中,插入最多两次旋转,删除最多三次旋转。红黑树主要用红黑两种颜色改变了平衡二叉树左右子树高度差必须小于或等于1的规定,红黑树的特点主要如下:记住:黑根黑叶路同黑,红黑二色红生黑。1.(二色)节点只有两种颜色,红色和黑色2.(黑根)根节点只能是黑色3.(黑叶)每个叶子节点也都是黑色4.(路同黑)每一个节点到该节点的叶子节点的每条路

2020-05-27 16:43:06 4227

原创 C++ 查找算法学习合集

1.顺序查找全局遍历搜索匹配,暴力检索,不提倡。2.二分查找常见的二分查找就是二叉树的性质,每次都查找剩余的一半。所以它的事件复杂度也即是O(logN)。虽然二分查找算法的效率很高(这也是二分查找算法被广泛应用的原因),但是前提就是说查找的序列:有序。在需要频繁进行插入或者删除操作的数据记录中使用二分查找算法效率不是很高,因为还要维持数据的有序还需要额外的排序开销。3.二分查找变种1.插值查找算法变种的地方主要在于mid值的计算方法。在有序序列当中,当我们所要查找的value偏小或者偏大,如果再

2020-05-20 20:39:30 2476

原创 C++ 智能指针相关

5.智能指针C++程序设计中的内存管理通常会有程序员申请+及时释放,但是在实际情况中会有很多指针频繁的申请和释放,容易出现一些疏忽大意的问题(内存泄漏)。C++11中引入智能指针的概念,智能指针能够更好的管理内存。4.1 智能指针:1.实质:对普通指针的进一步封装,实质是一个类对象,行为表现和指针一样。2.作用:防止程序员忘记调用delete释放内存,以及其他程序内存异常情况造成的程序崩溃。3.功能: 当智能指针(类对象)被使用过之后,会被自动删除,指向的内存也会自动的释放。4.2 四种智能指针

2020-05-20 09:05:52 1860

原创 C++ 虚函数基础知识储备

1.c++虚函数原理作用:C++中的虚函数的作用主要是实现了多态的机制。当基类中的成员函数定义了虚函数,其子类可以重新改写该函数。也即是允许派生类调用父类的同名函数而实现不同的功能,也叫动态联编。在主函数调用时,只需要定义一个基类指针就可以进行派生类的分别操作。底层原理:虚函数表+虚函数表指针。每一个类都会对应一个虚函数表,一个存放虚函数地址的虚函数表,并创建虚函数指针(vptr)来指向表。如果基类有3个虚函数,那么基类的虚表中就有三项(虚函数地址),同时虚表可以继承,派生类也会有虚表,至少有三项,

2020-05-14 22:16:08 1925

原创 排序算法学习笔记 C/C++

排序算法学习,记录之。1.冒泡排序最佳情况:T(n) = O(n)最差情况:T(n) = O(n2)平均情况:T(n) = O(n2)int Bubble_Sort(int *array,int len){ if (len == 0) return 0; int i, j; for (i = 0; i < len; i++) { for (j = i+1; j &lt...

2020-05-07 15:23:09 5732

原创 跨平台事件驱动 libevent 库从安装到简单使用

1.libevent 库的下载和安装1.打开网址:http://libevent.org/ 下载最新版即可2.源码包拷贝到Linux系统,解压之后执行以下操作:2.1 ./config (安装环境检测) 生成makefile 文件2.2 make 执行Makefile文件,2.3 sudo make install 将数据拷贝到对应的目录当中3.sample 示例在libe...

2020-04-28 10:31:54 4904

原创 Linux epoll两种触发模式——LT/ET

epoll 两种触发模式epoll有两种触发模式,分别为LT水平触发,ET边沿触发。 event.events = EPOLLIN | EPOLLET;//ET 边沿触发模式 event.events = EPOLLIN; //默认 LT触发模式 epoll的两种触发模式会在epoll_wait()函数处对读取缓冲区有不用的处理方式。1.LT水平触发(默认):当缓存区...

2020-04-16 20:33:35 3330

原创 Linux 高并发服务器—— epoll 实现

1.epoll 原理epoll 相对于select和poll来说,没有描述符限制,所以在高并发处理当中是真正意义上的高并发。select和poll采用的是轮询的方式监听事件以及文件描述符,为了避免因为访问量过大导致轮询机制的低效率,设定了1024的描述符监听上限。epoll采用的是客户端注册、事件监听分别独立的管理方式,分别用了一颗存储监听文件描述符的红黑树和一个存储相关读、写、异常等事件的链表...

2020-04-16 14:44:06 3507

原创 Linux 高并发服务器 select/poll实现

1.select实现相对于#include <sys/socket.h>#include<arpa/inet.h>#include<ctype.h>#include<unistd.h>#include<stdio.h>#include<sys/types.h>#include<strings.h>...

2020-04-08 19:49:40 2721

原创 Linux 高并发服务器--fork/pthread实现

1.多进程并发服务器子进程来源于父进程,通俗的来讲,它是父进程的一个复制品。子进程完全复制了父进程的资源,包括进程上下文、内存信息、工作目录等信息。同时操作系统也会给子进程分配内存空间和调度资源。父进程和子进程的区分主要是靠fork()函数的返回值来进行。1.return 0 ;成功创建子进程,进入到子进程中相关操作2.return-1;创建子进程失败3.return (子进程...

2020-04-04 23:43:22 1688

原创 Linux网络编程--错误处理函数

错误处理函数在网络编程中,一些函数的属于慢速调用,对其作异常处理的时候需要避免其在正常进程阻塞的过程中被异常处理,需要对其作一些相关的信号判断。1.int Accept(int fd,struct sockaddr *sock,socklen_t *sock_len)accept 是慢速调用处理函数,在错误管理中,在通信阻塞期间可能会存在异常断开,所以需要另外的处理。int Accept(...

2020-04-04 16:14:22 1314

原创 hexo 相关错误

@[TinyHttp 自我学习]作为在校的一枚萌新,没有项目经验的支撑,研究一下开源项目既可以获得前辈的经验,还可以作为自己经验的补充(这也是不得已为为知)。花了几天的时间研究了一下tinyhttp这个火的一塌糊涂的开源项目,对于想要学习服务器开发,网络编程,http协议的同学还是大有裨益。话不多说,从撸代码开始。1.整个项目的结构在这里插入代码片我们对Markdown编辑器进行了一些功...

2020-04-04 10:25:00 786 1

空空如也

空空如也

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

TA关注的人

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