- 博客(63)
- 资源 (1)
- 收藏
- 关注
原创 dy51:客户端跨平台移植
客户端// cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#define WIN32_LEAN_AND_MEAN#ifdef _WIN32#include<windows.h>#include<WinSock2.h>#pragma comment(lib,"ws2_32.lib")#define _WINSOCK_DEPRECATED_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#else
2022-04-03 16:08:45 262
原创 dy45:支持select模型的客户端
服务端// cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//32#define WIN32_LEAN_AND_MEAN#define _WINSOCK_DEPRECATED_NO_WARNINGS#include<windows.h>#include<WinSock2.h>#include<stdio.h>#include<vector>#pragma comment(lib,"ws2_32.lib")u
2022-04-01 18:23:07 290
原创 dy添加接收缓冲区37
// cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//32#define WIN32_LEAN_AND_MEAN#define _WINSOCK_DEPRECATED_NO_WARNINGS#include<windows.h>#include<WinSock2.h>#include<stdio.h>#pragma comment(lib,"ws2_32.lib")using namespace std;enum CM
2022-03-31 21:20:25 113
原创 dy36笔记
服务端// cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//32#define WIN32_LEAN_AND_MEAN#define _WINSOCK_DEPRECATED_NO_WARNINGS#include<windows.h>#include<WinSock2.h>#include<stdio.h>#pragma comment(lib,"ws2_32.lib")using namespace std;enu
2022-03-31 20:59:43 467
原创 代理Proxy模式
#include<iostream>#include<memory>using namespace std;/*代理Proxy模式:通过代理类,来控制实际对象的访问权限客户 助理Proxy 老板 委托类*/class VideoSite{public: virtual void freeMovie()=0; // 免费电影 virtual void vipMovie()=0; //vip 电影 virtual void ticketMovi
2022-03-29 19:57:49 192
原创 5-08 通讯代码精粹之epoll函数实战2-2
一:ET,LT模式深入分析及测试LT:水平触发/低速模式,这个事件没处理完,就会被 一直触发; ET:边缘触发/告诉模式,这个事件通知只会出现一次;普遍认为ET比LT效率高一些,但是 ET编程难度比LT大一些; ET模式下,如果没有数据可接收,则recv会返回-1思考:为什么ET模式事件只触发一次[事件被扔到双向链表中一次,被epoll_wait取出后就干掉]LT模式事件会触发多次呢?[事件如果没有处理完,那么事件会被多次往双向链表中扔]如何选择ET,还是LT 如果收发数据包有固定格式【后
2022-03-29 13:49:38 76
原创 4-01 服务器程序目录规划、makefile编写
一:信号高级认识范例ps -eo pid,ppid,sid,tty,pgrp,comm,stat,cmd | grep -E ‘bash|PID|nginx’用kill 发送 USR1信号给进程(1)执行信号处理函数被卡住了10秒,这个时候因为流程回不到main(),所以main中的语句无法得到执行;(2)在触发SIGUSR1信号并因此sleep了10秒种期间,就算你多次触发SIGUSR1信号,也不会重新执行SIGUSR1信号对应的信号处理函数,而是会等待上一个SIGUSR1信号处理函数执行完毕
2022-03-29 13:40:58 125
原创 4-02 读配置文件、查泄漏、设置标题实战
一:基础设施之配置文件读取(1.1)前提内容和修改 使用配置文件,使我们的服务器程序有了极大的灵活性,是我们作为服务器程序开发者,必须要首先搞定的问题;配置文件:文本文件,里边除了注释行之外不要用中文,只在配置文件中使用字母,数字下划线 以#号开头的行作为注释行(注释行可以有中文)我们这个框架(项目),第一个要解决的问题是读取配置文件中的配置项(读到内存中来);(1.2)配置文件读取功能实战代码 写代码要多顾及别人感受,让别人更容易读懂和理解,不要刻意去炫技;这种炫技的人特别讨厌;该缩
2022-03-29 13:38:31 122
原创 配置nginx可以访问当地文件夹
user www-data;worker_processes 2;pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf;events { worker_connections 768; # multi_accept on;}http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_time
2022-03-29 11:27:03 1672
原创 C++类型转换
理论C++语言级别提供的四种类型转换方式 int a = (int)b;const_cast : 去掉(指针或者引用)常量属性的一个类型转换static_cast : 提供编译器认为安全的类型转换(没有任何联系的类型之间的转换就被否定了)reinterpret_cast :类似于C风格的强制类型转换dynamic_cast : 主要用在继承结构中,可以支持RTTI类型识别的上下转换class Base{public: virtual void func() = 0;};class
2022-03-23 21:30:49 646
原创 智能指针概述
简单智能指针的实现#include<iostream>using namespace std;// 智能指针 保证能做到资源的自动释放!!!// 利用栈上的对象出作用域自动释放template<typename T>class CSmartPtr{public: CSmartPtr(T *ptr=nullptr) { mptr=ptr; } ~CSmartPtr() { delete mptr;
2022-03-16 20:19:36 190
原创 简单工厂和工厂方法
简单工厂#include<iostream>using namespace std;/*简单工厂工厂模式 :主要是封装了对象的创建抽象工厂*/class Car{public: Car(string name):_name(name){} virtual void show()=0;protected: string _name;};class BMW:public Car{public: BMW(string name):Car(n
2022-03-16 18:17:31 405
原创 21_大数据查重-位图
理论讲解代码实现#include <iostream>#include <vector>#include <stdlib.h>#include <time.h>#include <memory>using namespace std;/*有1亿个整数,最大值不超过1亿,问都有哪些元素重复了?谁是第一个重复的?谁是第一个不重复的(1个位保存数据的状态,2个位保存数据的状态)? 内存限制100M1亿 = 100M100M
2022-03-15 11:01:17 87
原创 22_布隆过滤器
##理论讲解##代码实现#include <iostream>#include <vector>#include "stringhash.h"#include <string>using namespace std;// 布隆过滤器实现class BloomFilter{public: BloomFilter(int bitSize = 1471) : bitSize_(bitSize) { bitM
2022-03-15 10:58:44 69
原创 09_链式队列
理论讲解代码实现#include <iostream>using namespace std;// 链式队列class LinkQueue{public: LinkQueue() { head_ = new Node(); head_->next_ = head_; head_->pre_ = head_; } ~LinkQueue() { Node* p = head_->next_; while (p != head_)
2022-03-14 16:32:38 59
原创 11_基础排序
理论讲解代码实现#include <iostream>#include <stdlib.h>#include <time.h>using namespace std;// 冒泡排序算法void BubbleSort(int arr[], int size){ for (int i = 0; i < size-1; i++) // 趟数 O(n) * O(n) = O(n^2) { bool flag = false; // 一趟
2022-03-14 16:30:14 1053
原创 19_链式哈希表
理论讲解代码实现#include <iostream>#include <vector>#include <list>#include <algorithm>using namespace std;// 链式哈希表class HashTable{public: HashTable(int size = primes_[0], double loadFactor = 0.75) : useBucketNum_(0) , loa
2022-03-14 16:28:22 110
原创 18_线性探测哈希表
理论讲解代码实现#include <iostream>using namespace std;// 桶的状态enum State{ STATE_UNUSE, // 从未使用过的桶 STATE_USING, // 正在使用的桶 STATE_DEL, // 元素被删除了的桶};// 桶的类型struct Bucket{ Bucket(int key = 0, State state = STATE_UNUSE) : key_(key) , state_
2022-03-14 16:26:54 105
原创 39图的代码实现
理论讲解代码实现#include <iostream>#include <string>#include <vector>#include <list>#include <queue>using namespace std;// 实现一个有向图的邻接表结构class Digraph{public: // 从配置文件读入顶点和边的信息,生成邻接表 void readFile(string filePath)
2022-03-14 15:51:10 60
原创 37倒排索引
// 37_倒排索引.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <string>#include <list>#include <vector>#include <unordered_map>#include <algorithm>using namespace std;#undef UNICODE#include &...
2022-03-14 15:46:06 79
原创 36字典树代码实现
理论讲解代码实现#include <iostream>#include <string>#include <map>#include <vector>#include <queue>using namespace std;// Trie字典树class TrieTree{public: TrieTree() { root_ = new TrieNode('\0', 0); } ~TrieTree() {
2022-03-14 15:35:49 77
原创 21大数查重位图法代码实现
// 21_大数据查重-位图.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <vector>#include <stdlib.h>#include <time.h>#include <memory>using namespace std;/*有1亿个整数,最大值不超过1亿,问都有哪些元素重复了?谁是第一个重复的?谁是第一个不重复的(1个位保.
2022-03-14 15:33:33 370
原创 04_双向链表
// 04_双向链表.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>using namespace std;// 定义双向链表的节点类型struct Node{ Node(int data = 0) : data_(data) , next_(nullptr) , pre_(nullptr) {} int data_; // 数据域 Node* next_; // 指向下一个节点 Nod
2022-03-14 15:31:55 2038
原创 线程池的代码实现
封装文件的代码#ifndef LOCKER_H#define LOCKER_H#include<pthread.h>#include<exception>#include<semaphore.h>// 线程同步机制封装类// 互斥锁类class locker{public: locker() { if(pthread_mutex_init(&m_mutex,NULL)!=0) {
2022-03-12 15:39:12 313
原创 两种高效的事件处理模式(Reactor模式和Proactor模式)
文章目录Reactor(反应堆)模式Proactor模式模拟Proactor模式Reactor(反应堆)模式Proactor模式模拟Proactor模式
2022-03-12 14:40:01 139
原创 epoll分析
epoll的调用过程epoll的代码实现#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <arpa/inet.h>#include <sys/epoll.h>#include <errno.h>#include <ctype.h>#include "wrap.h"#d
2022-03-12 11:42:23 63
原创 面试要看的文章1
C++基础知识部分深入掌握C++智能指针C++11 - 右值引用C++11 - thread多线程编程,线程互斥和同步通信,死锁问题分析解决C++迭代器iterator详解C++继承与多态 - 继承多态原理01C++智能指针的enable_shared_from_this和shared_from_this机制C++STL容器内容总结设计模式C++设计模式 - 单例模式C++设计模式 - 迭代器模式...
2022-03-12 11:04:38 805
原创 观察者模式
观察者模式行为型模式:主要关注地是对象之间地通信观察者-监听者模式(发布-订阅模式)设计模式:主要关注地是对象地一对多地关系,也就是多个对象都依赖一个对象当该对象地状态发生改变时,其他对象都能够接受到相应地通知当对象数据发生改变地时候,其依赖地对象成员应该及时收到相应地通知#include<iostream>#include<string>#include<unordered_map>#include<list>using namespac
2022-03-11 10:30:58 711
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人