自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 19华为软件精英挑战赛止步复赛

2019年华为软件精英挑战赛,京津东北赛区初赛第13,复赛第18,呦车还没我跑的快。  历时一个多月的华为软件精英大赛落下帷幕,很遗憾的止步了三十二强,从初赛到复赛更改了大大小小的版本将近50多个,通过改进调度算法、发车策略、路权系数、架构等几方面对自己的算法进行了无数次的改进。终于抽出时间把自己的算法整理一下:算法大致流程图:调度算法:  调度算法的选择是我们刚开始遇到最大的难题,最开...

2019-05-11 10:27:47 568

转载 《git学习》——分支创建与合并

本学习来自廖雪峰git教程git分支创建分支的创建就是在当前分支的基础上,在创建一个新的分支,并通过指针HEAD进行指针的切换。# 分支dev的创建git branch dev# 将分支从master切换到新建的分支上git checkout dev# 以上两句等同于如下一句:git checkout -b dev //-b代表分支的创建# 类似于git status ...

2020-02-09 10:38:30 224

转载 Maxout网络学习

原文地址:http://blog.csdn.net/hjimce/article/details/50414467Maxout算法流程1. 算法概述开始前我们先对maxout networks有一个简单的了解。Maxout是深度学习网络中一层网络,就像池化层、卷积层一样等,我们可以把maxout层看作是网络的激活函数层。我们假设某一层输入的特征向量为:X=(x1,x2,…,xd),也就是我...

2019-12-09 20:58:36 379

原创 SDL调用:无法解析的外部符号

问题当你创建一个新控制台程序,想调用SDL时,编译时发现如下出错:解决办法首先确定当前的VS版本,如果是VS2017 要去下载最新的 SDL library,下载地址如下:http://www.libsdl.org/download-2.0.phpSDL库中的mian函数定义是:int main(int argc, char *argv[])如果编写程序时使用的是:int m...

2019-08-17 12:57:22 663

原创 多线程编程之读写锁

多线程编程之读写锁读写问题是一个经典的同步问题,主要针对保护很少更新的数据结构这种同步情况。具体的例子:假设有一个用于存储DNS条目缓存的表,它用来将域名解析为相应的IP地址。通常,一个给定的DNS条目将在很长一段时间里保持不变——在许多情况下,DNS条目会保持数年不变。虽然随着用户访问不同的网站,新的条目可能会被不时地添加到表中,但这一数据却将在其真个生命中保持不变。定期检查缓存条目的有效...

2019-08-12 20:14:44 227

转载 怎么限制一个类的对象实例,只能在"堆"上分配,或者只能在"栈"上分配

原文地址:https://blog.csdn.net/szchtx/article/details/12000867在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种...

2019-07-22 16:56:28 270

原创 LRU的实现

闲来无聊,这几天疯狂面试,被各大厂商疯狂输出,然后今天下午字节一面过了,为应对面试写了LRU的c++实现,使用的是双向链表+map。LRU.h#ifndef _LRU_H#define _LRU_H#include <map>class CatchLRU{public: CatchLRU(int size); ~CatchLRU(); struct Catch...

2019-07-14 17:28:25 304

原创 让事件飞——Linux eventfd 原理与实战

1. eventfd/timerfd 简介目前越来越多的应用程序采用事件驱动的方式实现功能,如何高效的利用系统资源实现通知的管理的送达就愈发变得重要起来。在Linux系统中,eventfd是一个用来通知事件的文件描述符,timerfd是定时器事件的文件描述符。二者都是内核向用户空间的应用发送通知的机制,可以有效地被用来实现用户空间的事件/通知驱动的应用程序。简而言之,就是eventfd用来触发...

2019-07-08 11:14:04 595

原创 无法为有抽象类型‘EventLoopThread’的对象分配内存

无法为有抽象类型‘EventLoopThread’的对象分配内存问题背景:今天在写服务器的时候遇到了这样一个问题,一个子类对象无法分配内存,它继承的基类有两个纯虚函数图如下:IRun.h:class IRun0{ public: virtual void run0() = 0; virtual void run1() = 0;};可以看到,r...

2019-07-07 11:19:20 1633 1

原创 c++面试常见问题汇总

c++面试常见问题汇总1. 指针和引用的区别2. 堆栈的区别:3. new 和 delete 是如何实现的,与 malloc 和 free有什么异同?4. struct 和 class 的区别:5. define 和 const 的区别: 1. 指针和引用的区别(1)指针有自己的一块空间,而引用只是一个别名;(2)使用 sizeof 看一个指针的大小为4字节(32位,如果要是64...

2019-07-01 21:41:34 31374 2

原创 类模板泛化编译错误的问题

问题出现的背景今天在写代码的时候,使用模板泛化,为了让类的代码封装更好,便将类的声明都放在了一个名为 heap.h 的头文件中,将实现的方法写到了 heap.cpp 文件中。代码是一个大顶堆的数据结构。问题说明如下:heap.h#pragma once#include <vector>template <typename T>class heap{...

2019-07-01 20:42:08 239

原创 操作系统:内存管理

内存管理1 虚拟内存 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。 为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多块,每一块成为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存...

2019-06-30 22:16:33 349

转载 c++:前向声明问题

今天在写http服务器的时候遇到了一个前向声明的问题,我把所有的类都放到了一个“Declear.h”头文件中了,当我使用头文件声明的类时,出错了,具体内容就是这个类不能使用,后来找了半天发现是前向声明的类不能直接拿来用,只能使用他们的引用和指针。看看下面这位大佬的博客吧,非常感谢此人。前向声明...

2019-06-28 21:55:50 308

原创 操作系统:死锁

死锁1 死锁的定义 到底什么是死锁?(下面是从《操作系统概念》所摘录的)在多道程序环境中,多个进程可以竞争有限数量的资源。当一个进程申请资源时,如果这时没有可用资源,那么这个进程进入等待状态。有时,如果所申请的资源被其他等待进程占有,那么该等待进程有可能再也无法改变状态。这种状态称为死锁。说实际一点就是,当一组进程内的每个进程都在等待一个事件,而这一个事件只能由这一组进程的另一个进程所引起...

2019-06-28 15:23:59 157

原创 后台核心编程(十九):网络编程-HTTP协议

HTTP协议浏览器背后的故事1 HTTP协议的工作流程2 HTTP协议结构2.1 HTTP请求报文 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。HTTP(超文本传输协议) 是一种详细规定了浏览器和万维网(WWW)服务器之间相互通信的规则,通过因特网传送万维网文档的数据传送协议。HTTP协议可以使浏览器更加高效地运行,使网络传输效率更高。它不仅保证计算机正...

2019-06-27 23:03:05 188

原创 操作系统:进程调度

进程调度算法CPU进程的生命周期可以分为五个阶段:创建、就绪、运行、等待、终止。其中就绪、运行、等待是进程最集中的几个阶段,有的进程在就绪环节就形成了进程的就绪队列;有的进程进行I/O请求就从运行状态切换为等待状态,形成了等待队列;有的进程因为中断从运行状态切换为就绪状态,从而加入就绪队列;有的进程 I/O 完成后从等待状态切换为就绪状态,从而加入就绪队列。而CPU调度处理的问题是:从就绪队列...

2019-06-26 22:01:11 261

原创 排序:多线程版本的归并排序

多线程版本的归并排序这里的TR和TR2都无需加锁,因为每个Msort处理的数据段都是不一样的。#include <iostream>#include <thread>#include <vector>using namespace std;void merge(vector<int> TR2, vector<int>&a...

2019-06-26 20:57:00 764

转载 c++:四大类型转换

四大类型转换前言dynamic_cast:static_cast:const_cast:reinterpret_cast:总结 前言C语言的类型转换比较自由,但也带来了一些问题,这些问题大多由程序员自行控制和解决。对于庞大的C++语言机制而言,这种简单粗暴的类型转换方式显然是个巨大的负担,因此C++引入4种类型转换运算符,更加严格的限制允许的类型转换,使转换过程更加规范:dyn...

2019-06-25 16:48:22 1650

原创 VM虚拟机Ubuntu系统偶尔黑屏无响应的解决

在网上找到一种解决方法,实测可以解决问题:以管理员身份运行cmd控制台程序,输入命令netsh winsock reset,作用是重置winsock网络规范,然后重启系统,在打开VMware就可以了。为什么重置winsock就可以了没有深究·········...

2019-06-21 20:45:16 2305 2

原创 muduo网络库:Reactor模型的介绍

首先我们先了解几个问题:多线程能提高并发度吗?如果指的是“并发连接数”,那么不能。假如单纯采用 thread per connection 的模型,对于32位 linux,一个进程的地址空间是4G,其中用户态能访问3G左右,而一个线程的默认栈大小为10M,心算可以得到,一个进程大约最多能同时启动300个线程左右,这远远低于基于事件单线程程序所能轻松达到的并发连接数(几千上万,甚至几万)。所谓...

2019-06-19 13:23:22 1066

原创 muduo网络库:线程池的实现

线程池问题本质上也是一个生产者-消费者问题外部线程可以向线程池中的任务队列添加任务,相当于“生产者”;一旦任务队列中有任务,就唤醒线程队列中的线程来执行这些任务,这些线程就相当于“消费者”。模型如下图。muduo ThreadPool类图:任务队列的实现用到了STL的deque容器deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高...

2019-06-19 09:15:39 1206

原创 muduo网络库:使用无界缓冲区 BlockingQueue<T>设计生产者消费者模式

BlockingQueue 和 BoundedBlockingQueue 是 muduo 库设计的两个类,其中BlockingQueue 作为无界缓冲区,BoundedBlockingQueue作为有界缓冲区。陈硕的muduo库是开源的,感兴趣的可以自己找找代码看一下,下面对二者进行简单的介绍。BlockingQueue 是一种加锁的 deque不知道我这么评价陈硕写的 BlockingQue...

2019-06-18 21:39:30 434

原创 后台核心编程(十八):进程间通信方式总结

进程间通信方式总结1 进程间通信(IPC)介绍2进程间通信方式2.1 管道2.2 FIFO(有名管道) 1 进程间通信(IPC)介绍进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Stream...

2019-06-17 12:20:53 280

原创 后台核心编程(十七):进程相关的基本概念

多线程服务器端的实现1 进程的创建与结束2 进程的结束——exit()函数2 僵尸进程 1 进程的创建与结束#include<unistd.h>pid_t fork(void);在讨论 fork() 函数之前,有必要先明确父进程和子进程两个概念。除了。号进程(该进程是系统自举时由系统创建的)以外,Linux 系统中的任何一个进程都是由其他进程创建的。创建新进程的进...

2019-06-17 10:28:07 121

原创 后台核心编程(十六):网络编程-多线程服务器端的实现

多线程服务器端的实现1 理解线程的概念1.1 引入线程的背景1.2 线程和进程的差异2 线程创建及运行2.1 线程的创建和执行流程2.2 可在临界区内调用的函数2.3 工作(Worker)线程模型3 线程存在的问题和临界区3.1 多个线程访问同一变量是问题3.2 临界区位置4 线程同步4.1 同步的两面性4.2 互斥量4.3 信号量5 线程的销毁和多线程并发服务器端的实现5.1 销毁线程的 3 种...

2019-06-16 21:46:40 355

原创 后台核心编程(十五):网络编程-网络分析工具

网络分析工具1 ping1.1 ping的使用2 tcpdump2.1 tcpdump介绍2.2 tcpdump使用2.3 tcpdump表达式2.4 tcpdump示例3 netstat 1 pingping ( Packet Internet Groper ,因特网包探索器)是Windows 、UNIX 和Linux 系统下的一个命令。ping 也属于一个通信协议,是TCP/I...

2019-06-16 19:20:12 286

原创 后台核心编程(十四):网络编程-网络 I/O 模型

网络 I/O 模型1 4种网络 I/O 模型1.1 阻塞 I/O 模型1.2 非阻塞 I/O 模型1.3 多路10 复用模型1.4 异步10 模型 IO ( Input/Output ,输入/输出)是计算机体系中重要的一部分。IO 类外设有打印机、键盘、复印机等;存储类型的设备则有硬盘、磁盘、U 盘等;通信设备有网卡、路由器等。不同的IO 设备有着不同的特点:数据率不一样、传送单位不...

2019-06-16 16:05:50 163

原创 后台核心编程(十三):网络编程-优于select的epoll

终于看到了epoll 这个伟大的I/O复用的方法了!!!激动!!!!!!!!!!!!!1 epoll的理解及应用select 复用方法由来已久,因此利用该技术后,无论如何优化程序性能也无法同时介入上百个客户端。这种select 方式并不适合以 web 服务器端开发为主流的现代开发环境,所以需要学习 Linux 环境下的 epoll。1.1 基于 select 的 I/O 复用速度慢的原因前...

2019-06-15 17:10:51 234

原创 后台核心编程(十二):网络编程-多播与广播

1 多播多播(Multicast)⽅式的数据传输是基于 UDP 完成的。因此 ,与 UDP 服务器端/客⼾端的实现⽅式⾮常接近。区别在于,UDP 数据传输以单⼀⽬标进⾏,而多播数据同时传递到加⼊(注册)特定组的⼤量主机。换⾔之,采⽤多播⽅式时,可以同时向多个主机传递数据。1.1 多播的数据传输方式以及流量方面的优点多播的数据传输特点可整理如下:多播服务器端针对特定多播组,只发送 1 次数...

2019-06-15 11:02:43 242

原创 后台核心编程(十一):网络编程-多种I/O函数

1 send & recv 函数1.1 Linux 中的 send & recv⾸先看 send 函数定义:#include <sys/socket.h>ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags);/*成功时返回发送的字节数,失败时返回 -1sockfd: 表⽰与数...

2019-06-15 10:05:24 228

原创 后台核心编程(十):网络编程-I/O复用之select

1 基于 I/O 复用的服务器端1.1 多进程服务端的缺点和解决方法为了构建并发服务器,只要有客户端连接请求就会创建新进程。这的确是实际操作中采用的一种方案,但并非十全十美,因为创建进程要付出很大的代价。这需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所以相互间的数据交换也要采用相对复杂的方法(IPC 属于相对复杂的通信方法)而I/O 复用技术可以解决这个问题。1.2 理解复...

2019-06-14 14:24:57 298

原创 后台核心编程(九):网络编程-域名及网络地址

域名系统DNS是对IP地址和域名进行互相转换的系统,其核心是DNS服务器。提供网络服务的服务端也是通过IP地址来区分的,但由于IP地址难于记忆,因此通过容易记忆并表述的域名来取代IP地址在浏览器地址栏输入www.baidu.com,或如图1-1用ping命令获取其IP地址,便可访问百度主页,那么通用域名访问和通过IP访问这二者有何区别?实际上,域名是赋予服务端的虚拟地址,而非实际地址。因此...

2019-06-14 09:50:22 418

原创 后台核心编程(八):网络编程-套接字的断开连接

套接字的断开连接1 基于TCP的半关闭1.1 单方面断开连接带来的问题1.2 套接字和流(Stream)1.3 优雅断开的 shutdown 函数1.4 为何要半关闭1.5 基于半关闭的文件传输程序1 基于TCP的半关闭TCP的断开连接过程比建立连接更重要,因为连接过程一般不会出现大问题,但是断开过程可能发生预想不到的情况。1.1 单方面断开连接带来的问题Linux 和 Windows 的...

2019-06-14 09:33:32 681

原创 后台核心编程(七):网络编程-基于UDP的服务端/客户端

第 6 章 基于 UDP 的服务端/客户端本章代码,在TCP-IP-NetworkNote中可以找到。TCP 是内容较多的一个协议,而本章中的 UDP 内容较少,但是也很重要。6.1 理解 UDP6.1.1 UDP 套接字的特点通过寄信来说明 UDP 的工作原理,这是讲解 UDP 时使用的传统示例,它与 UDP 的特点完全相同。寄信前应现在信封上填好寄信人和收信人的地址,之后贴上邮票放进...

2019-06-13 21:38:06 324

原创 后台核心编程(六):网络编程-基于TCP客户/服务端编程

TCP/IP网络编程之基于TCP的服务端/客户端(一) 理解TCP和UDP根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字。因为TCP套接字是面向连接的,因此又称为基于流(stream)的套接字。TCP是Transmission Control Protocol(传输控制协议)的简写,意为“对数据传输过程的控制”。因此,学习...

2019-06-13 21:24:12 315

原创 全排列问题

全排列问题输入一个字符串,打印出该字符串中字符的所有排列。例如:输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。解题思路:把一个字符串看成两部分组成:第一部分为第一个字符,第二部分为后面的所有字符。求整个字符串的排列,可以看出两步:首先求所有可能出现在第一个位置的字符,即把第一个字符和后面的所有字符交换;然后固定第一个字...

2019-06-13 16:44:17 221

原创 后台核心编程(五):网络编程-地址族与数据序列

地址族与数据序列1 分配给套接字的IP地址与端口号1.1 网络地址1.2 网络地址分类与主机地址边界1.3 用于区分套接字的端口号2 地址信息的表示2.1 表示IPV4地址的结构体2.2 结构体 sockaddr_in 的成员分析3 网络字节序与地址转换3.1 字节序(Order)与网络字节序3.2 字节序转换4 网络地址的初始化与分配4.1 将字符串信息转换为⽹络字节序的整数型4.2 将网络字节...

2019-06-12 15:21:17 235

原创 后台核心编程(四):网络编程-套接字类型与协议设置

套接字类型与协议设置1 套接字协议及数据传输特性1.1 套接字的创建1.2 协议族(Protocol Family)1.3 套接字类型(Type)1.4 协议的最终选择(Type) 1 套接字协议及数据传输特性本章仅需了解创建套接字时的 socket 函数。1.1 套接字的创建套接字创建接口函数:#include <sys/socket.h>int socket...

2019-06-12 14:28:39 234

原创 后台核心编程(三):网络编程-TCP协议

TCP协议目录TCP协议一、网络模型二、TCP头部二、TCP状态流转三、超时重传四、滑动窗口五、拥塞处理TCP协议一、网络模型七层(IOS)五层四层(TCP/IP)应用层表示层会话层应用层应用层传输层运输层传输层网络层网络层网间层数据链路层数据链路层网络接口(链路层)应用层物理层 ISO七层网络模型及其...

2019-06-11 16:43:02 328

转载 CSDN Markdown使用教程

[CSDN markdown写博客技巧](https://blog.csdn.net/qq_35208390/article/details/78340006)

2019-06-11 15:06:29 94

空空如也

空空如也

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

TA关注的人

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