- 博客(61)
- 收藏
- 关注
原创 【项目收获】web服务器的收获2:tcp、IO
目录nc:tcp连接的正确关闭方式:服务器tcp端口设置三连:为什么IO多路复用要搭配非阻塞IO为什么non-blocking网络编程中应用层buffer是必须的linux最大打开文件描述符数目:此版本与先前版本的区别之处:写脚本监控进程的内存占用、cpu占用tcp的keepalivenc:netcat 简称 nc,安全界叫它瑞士军刀。ncat 也会顺...
2019-05-28 22:32:04 705
原创 【项目收获】web服务器源码、gdb调试、压测
目录makefile的编写gdb程序调试记录调试记录1:调试记录2:调试记录3:webserver的压测之前最近总结:之前写的那个简单聊天室真的太简陋了,毫无技术含量呀。。写一个epoll+线程池实现的webserver,加入了对http请求的处理,还有定时器,用来处理长时间不活跃的连接。代码不好放,还是github好管理一些,这里就写一点心得吧。。...
2019-05-26 15:49:28 1498 1
原创 【项目收获】web服务器的系统架构解析
目录modelhttp请求解析:1.开启线程池和事件循环2.主线程处理连接事件3.IO线程处理读写事件4.timerNode和HttpData5.日志6.其他一些问题:modelhttp请求解析:这个层层调用还是有些复杂,要好好捋一捋1.开启线程池和事件循环Main函数开始运行,首先创建EventLoop mai...
2019-05-13 15:35:05 2165 5
原创 【项目收获】web服务器的收获
目录eventfd 介绍接口提供的方法_ _thread右值引用与move用法:std::move 的函数原型定义emplace_backSIGPIPE限制服务器的最大并发连接数为什么要限制并发连接数?优雅关闭连接关闭tcpnagle算法将线程锁封装为一个类C++11 中std::function和std::bind的用法线程的栈...
2019-05-07 17:00:00 1973
原创 【学习点滴】网络相关理解与http协议
目录http的连接:http报文格式:http请求方法cookie和sessionreferer:长连接和短连接http状态码https建立连接的过程:http缓存1. 优点2. 实现方法3. Cache-Control4. 缓存验证DNS那么我们的DNS是怎么解析一个域名的呢?HTTP协议与内容压缩:http协议的发展过程t...
2019-04-04 09:11:54 1391
原创 【学习点滴】linux调试工具、cmake和网络抓包
目录gdb多进程调试多线程调试:gdb底层原理Linux下查看服务器端的并发连接个数:ValgrindmemcheckstraceLinux下,绑定1024以下的端口需要root权限!webbench压测工具wireshark 网络抓包记录tcpdumptracerouteiftopperflinux下各种日志makefile...
2019-03-23 20:00:37 3730
转载 【学习点滴】pulsar
本文为转载 原文链接https://www.cnblogs.com/czx1/p/9981504.html消息传递模型(Messaging model)是用户在选择流式消息传递系统时应首先考虑的事情。消息传递模型应涵盖以下3个方面:Message consumption(消息消费):如何发送和消费消息 Message Acknowledgement(消息确认):如何确认消息 Message Retention(消息保留):消息要保留多久、出发消息删除的原因以及删除方式Pulsal Model
2020-06-02 17:19:06 3071
原创 【学习点滴】终端复用利器-tmux
平时在用终端连接linux机器时,常出现因为太长时间没有操作或网络问题导致连接断开,之前的操作和打开的路径丢失的现象,在知乎上看到这个介绍:常用操作:新建会话:tmux new -s <name>查看当前所有会话:tmux ls //ls即 list-session分离会话:tmux detach ...
2020-05-04 17:47:26 368
转载 【学习点滴】callback
回调函数的概念开发中经常遇到等待其他模块事件通知的情况,例如:用户点击UI上button的事件,通知给相关函数处理逻辑 Model中数据改变的事件,通知给相关View模块刷新界面 异步IO完成的事件,通知给处理函数确认成功还是失败 客户端向服务器发N种不同请求,服务器为每种请求准备好处理函数 这些等待通知的函数被执行的过程就是回调的过程,所以回调是一个很常见很简单的事情。回调...
2020-04-29 11:03:22 323
原创 【题目记录】一些设计题
目录实现LRULFU设计简化版推特https://www.cnblogs.com/cpselvis/p/6272096.html实现LRU对于web开发而言,缓存必不可少,也是提高性能最常用的方式。无论是浏览器缓存(如果是chrome浏览器,可以通过chrome:://cache查看),还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用...
2020-04-13 10:33:06 319
原创 【学习点滴】c++手写常用排序算法:堆排序、快排、归并
目录堆排序:归并排序:快排:插入排序:冒泡排序:选择排序:实现LRULRU的c++实现堆排序:void heap_adjust(vector<int> &a, int i,int len) { int lc = 2 * i + 1; int rc = 2 * i + 2; int maxindex = i, tmp; i...
2020-04-05 11:10:46 1676
原创 【book】跟开涛学搭建高可用高并发系统
来自书籍《亿级流量网站架构核心技术》高可用负载均衡与反向代理隔离术限流降级超时与重试回滚压测与预案高并发应用级缓存HTTP缓存多级缓存连接池线程池扩容队列术...
2020-03-02 21:41:13 197
原创 【项目学习】brpc
小菜learning这些内容全部摘自https://github.com/apache/incubator-brpc/1.bvar bvar是多线程环境下的计数器类库,方便记录和查看用户程序中的各类数值,它利用了thread local存储减少了cache bouncing,相比UbMonitor(百度内的老计数器库)几乎不会给程序增加性能开销,也快于竞争频繁的原子操作。brpc...
2020-02-13 13:09:37 2467
原创 【book】深入理解计算机系统
记录下一些收获第二章 信息的表示和处理补码概念的理解:我们知道,补码的表示中,最高位为1表示该数为负,为0表示该数为正。之前一直死记硬背,要求一个负数的十进制大小,就采取求补码操作的逆过程,比如求1010,先减1得1001,再将符号位不变,其余位取反得1110,即-6。在本书上看到的概念是:将字的最高位解释为负权。例如求1010的十进制值,可以这样求:-8 + 0 + 2 +...
2020-02-04 11:14:48 1359
原创 【book】计算机组成原理
查缺补漏目录存储器指令中央处理器IO控制方式存储器 内存是半导体触发器结构,外存是磁盘存储,所以速度有差别 常见的三级存储结构:1.快速缓冲存储器,它是计算机系统中的一个高速小容量存储器,存放指令和数据。一般由双极型半导体存储器组成。2.主存储器,一般就是内存,用来存放计算机运行期间的大量程序和数据,一般由MOS半导体存储器组成3.外存储器...
2019-11-18 17:22:17 3163
原创 【book】linux内核设计与实现
目录1.进程2.系统调用3.中断处理4.描述一下缺页中断5.signal:6.内核态与用户态的切换7.定时器和时间管理8.文件系统《linux内核设计与实现》学习笔记1.进程 内核把进程的列表存放在叫做任务队列的双向循环链表中,链表的每一个节点都是类型为task_struct(称为进程描述符)的结构。在32位机器上,一个task_struct约...
2019-11-03 19:58:43 2355
原创 【学习点滴】游戏后台开发-tx
目录1.战团匹配算法自己的思考2.服务器内存优化3.高时效的UDP4.弱联网优化之道移动网络的特点原因解决方式:1.快链路2.轻往复强监控多异步5.服务端其他优化手段:游戏同步6.DOS攻击和DDOS攻击7.网络编程中的粘包问题1.战团匹配算法原文:https://www.gameres.com/827195.html其...
2019-10-17 09:47:52 3728
原创 【题目记录】dfs与bfs
目录岛屿数量检查二叉树是否是镜像对称的。图的基础知识:邻接列表:邻接矩阵:十字链表邻接多重表岛屿数量给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出:...
2019-10-10 21:40:56 350
原创 【book】程序员的自我修养
目录.c程序编译的全过程预处理:编译:汇编:链接:编译器做了什么目标文件(ELF)目标文件是什么样的用一个实际例子挖掘目标文件ELF文件结构描述文件头段表重定位表字符串表链接的接口-符号静态链接空间与地址分配重定位表c++的相关问题-静态链接时可执行文件的装载与进程动态链接动态链接的步骤与实现库与运行库...
2019-10-05 15:56:24 1503
转载 【项目学习】nginx
目录架构:Nginx进程处理模型锁的争用与负载均衡(HTTP服务情景)负载均衡(反向代理情景)RR权重ip_hashfair(第三方)url_hash(第三方)平滑升级看一下大名鼎鼎的nginx,学学别人是怎么设计一个服务器的Nginx设计时重视的几个关键点:性能:包括网络性能,单词请求的延迟性,网络效率;(名词就不解释了~) 可伸缩性:可通...
2019-09-29 11:24:22 479
原创 【学习点滴】线程进程安全性的一些问题
目录1.++i和i++是线程安全的吗2.无锁队列的实现一、kfifo概述二、kfifo内存分配和初始化三、kfifo并发无锁奥秘---内存屏障四、kfifo的入队__kfifo_put和出队__kfifo_get操作五、扩展3.进程间加锁1.++i和i++是线程安全的吗i++ 先赋值再+1, ++i是先+1再赋值, 例如:int i = 0;int ...
2019-09-27 12:08:59 668 2
转载 【学习点滴】kafka
目录Kafka 简介为何使用消息系统Kafka 架构Kafka 拓扑结构Topic & PartitionProducer 消息路由Consumer GroupKafka High Available为何需要 Replication为何需要 Leader ElectionKafka HA 设计解析如何将所有 Replica 均匀分布到整个集...
2019-09-15 20:16:02 1015
原创 【book】深入探索c++对象模型
目录c++对象模型成员变量继承情况下的内存占用和分布:继承且有多态情况下:多重继承情况:虚继承的情况:成员函数非静态成员函数:名称的特殊处理(namemangling)虚拟成员函数虚函数与inline的pk:静态成员函数:再说虚函数:构造、析构与拷贝继承体系下的对象构造:构造函数做的工作步骤:析构函数做的工作步骤:一些注意点...
2019-09-14 12:54:14 646
原创 【题目记录】二叉树的遍历
前序中序后序层次递归非递归class binarytree {public: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; void preOrder(TreeNode *he...
2019-09-10 08:38:38 186
原创 【book】mysql技术内幕
目录1.mysql体系结构2.innodb引擎后台线程内存:checkpoint技术innodb关键特性3.文件参数文件日志文件4.索引与算法b+树:5.锁和事务InnoDB行锁实现方式间隙锁(Next-Key锁)1.mysql体系结构mysql由以下几个部分组成:连接池组件 管理服务和工具组件 sql接口组件 查询分析...
2019-08-30 15:32:45 426
原创 【book】apue和unp
目录unix 网络编程unix进程间通信信号量:条件变量pipeFIFO共享内存套接字消息队列RPC:1.本地过程调用2.远程过程调用-同一台主机两个进程中3.远程过程调用-不同主机的两个进程中常见RPC框架:unix 环境编程unix 网络编程1.从TCP套接字读取数字时,我们总是需要把read编写在某个循环中,当read返回...
2019-08-12 10:18:13 1127
原创 【项目收获】自己动手实现一个宏log功能
目录一些零碎知识点1.fwrite2.__FILE__, __LINE__3.ostringstream4.c语言打开文件的方式一个简单版本的log有点疑惑webserver程序里的log临时变量的析构在程序中我们常常要打印出当前函数、代码的执行情况或者错误码,以便调试。若只是简单地cout+重定向其实也能实现,但是总觉得不好用,而且不规范。一般在程序里都...
2019-08-03 20:19:49 683
原创 【book】redis的底层实现和使用
目录数据结构与对象a.简单动态字符串(SDS)b.链表c.字典d.跳跃表e.整数集合f.压缩列表g.对象字符串对象列表对象哈希对象集合对象有序集合对象单机数据库的实现redis过期时间 1.redis过期时间介绍2.redis过期时间相关命令3.redis如何清理过期key redis的持久化RDB持久化AOF持久...
2019-08-01 11:33:18 1050
原创 【学习点滴】c++ 三个线程循环打印ABC
用上了实验室新买的服务器,美滋滋小试牛刀一番#include<iostream>#include<pthread.h>using namespace std;pthread_mutex_t mutex;int k=0; //全局区变量是共享的哦pthread_cond_t cond = PTHREAD_COND_INITIALIZER;v...
2019-07-29 20:24:45 1366
转载 【学习点滴】boost库的一点知识
boost::thread_specific_ptr今天看代码发现用到了boost库的thread_specific_ptr,就在网上搜了下 线程私有变量(Thread Local Storage)之于线程相当于静态变量之于进程,与进程变量相比是每个线程都有一份, 也就是所谓的“私有”。也可以把线程私有变量理解为key-value对,其中key是线程ID。它的主要作用是在多线程编程中...
2019-06-30 10:27:02 656
原创 【学习点滴】cpp遇到的一些疑问和积累
目录1.虚函数的问题2.多种构造函数问题3.全局变量和局部变量重名的问题:4.有符号数溢出问题5.自己实现c的字符串库函数6.栈破坏问题7.右值引用移动构造和移动赋值8.字符串作为hash的key9.size_type和size_t10.同步异步、阻塞非阻塞11.stl::sort的实现12.线程数应该定为多少比较合适13.如何判断一个soc...
2019-06-23 09:39:01 1304
原创 【学习点滴】linux下的线程池相关知识
-_- 首先,线程池是什么?顾名思义,就是把一堆开辟好的线程放在一个池子里统一管理,就是一个线程池。 其次,为什么要用线程池,难道来一个请求给它申请一个线程,请求处理完了释放线程不行么?也行,但是如果创建线程和销毁线程的时间比线程处理请求的时间长,而且请求很多的情况下,我们的CPU资源都浪费在了创建和销毁线程上了,所以这种方法的效率比较低,于是,我们可以将若干已经创建完成的线程放在一起统...
2019-05-24 20:36:39 160
原创 【学习点滴】STL,山寨一个String类
目录STL为什么需要空间配置器STL空间配置器alloc实现的原理迭代器失效:迭代器的详细介绍:map的排序问题函数对象函数对象应用实例2:在sort算法中的应用STL 中的函数对象类模板explicitstl之string一 整体框架二 具体实现deque其他:stackqueuepriority_queuesetmap...
2019-04-24 11:31:50 860
原创 【学习点滴】c语言用malloc开辟二维数组
#include<stdio.h>#include<stdlib.h>int main(){ int **a; //用二级指针动态申请二维数组 int i,j; int m,n; printf("请输入行数\n"); scanf("%d",&m); printf...
2019-04-19 20:47:17 7207 8
原创 【学习点滴】c++类中虚表的内存分配,菱形继承
目录虚函数表早期实验2019.9.3又做了一次:总结:重载、继承、隐藏一点实验遇到了c++钻石继承(菱形继承)的问题,看看类继承中的内存分布情况吧,有助于理解https://www.jianshu.com/p/02183498a2c2虚函数表早期实验我们来观察一下类的内存分布,大部分编译器都提供了查看C++代码中类内存分布的工具,在Visual S...
2019-04-18 16:09:31 528
原创 【题目记录】链表环的问题
1.判断链表是否有环: bool hasCycle(ListNode *head) { if(head==nullptr) return false; ListNode *slow=head; ListNode *fast=head; while(fast && fast->n...
2019-04-18 11:48:07 159
转载 转载:c++实现线程安全的单例模式
https://www.cnblogs.com/myd620/p/6133420.html原博主的水平非常高。在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式。单例模式分为懒汉模式,跟饿汉模式两种。首先给出饿汉模式的实现template <class T>class singleton{protected: singleton(){...
2019-04-16 11:19:00 167
原创 【题目记录】字符串题目
目录两个数组的最长公共子数组字符串模式反转字符串中的单词顺序最长回文子串大数相乘kmp算法流程next数组是如何求出的最长上升子序列字符串的全组合和全排列两个数组的最长公共子数组1.暴力破解,显然是个O(n3)的解法 int findLength(vector<int>& A, vector<int>&am...
2019-04-09 15:33:49 628
原创 【项目收获】epoll实现一个简单的聊天室
客户端功能 a.支持用户输入聊天消息 b.显示其他用户输入的信息 c.使用fork创建两个进程子进程有两个功能: 等待用户输入聊天信息 将聊天信息写到管道(pipe),并发送给父进程父进程有两个功能 使用epoll机制接受服务端发来的信息,并显示给用户,使用户看到其他用户的聊天信息 将子进程发给的聊天信息从管道(pipe)中读取, 并发送...
2019-04-05 09:45:30 992
原创 【学习点滴】linux下网络编程的函数socket、read、io复用
目录几个函数socket:bindlisten,connectacceptio复用机制muduo几个函数socket:socket()用于创建一个socket描述符(socket descriptor),它唯一标识一个socket。这个socket描述字跟文件描述字一样,后续的操作都有用到它,把它作为参数,通过它来进行一些读写操作。int soc...
2019-04-04 21:11:43 924
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人