自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (5)
  • 收藏
  • 关注

原创 Windows编程——网络概念(二):传输层协议、TCP/UDP

文章目录简介UDP(用户数据报文协议)TCP(传输控制协议)TCP简介TCP选项滑动窗口TCP连接的建立和终止三次握手三次握手状态转换过程与对应函数TCP连接终止TCP的状态转换图三次握手时的状态转换四次挥手的状态转换被动关闭端read到EOF的处理TIME_WAIT状态对已经调用close函数之后的描述符进行读写操作SO_REUSEADDR——套接字端口重用TCP_NODELAY选项端口套接字对(socketpair)TCP发送数据TCP消息丢失问题简介传输层包括:TCP、UDP和SCTP(stre

2020-09-29 18:07:25 516

原创 Windows编程——网络概念(一):网络分层

PS:这些文字是参考的UNP写的,但是网络分层的原理都是一样的,并且懒得专门去写一个关于Windows的了,所以就这样~~网络分层网络是分层的,程序员关心的是以下4层:以太网层:帧,frameIP层:分组,packageTCP:节,segment应用层:消息,message在谈论网络数据的时候,如果说到帧,则应该知道是以太网层。我们一般关心的是TCP——分节,应用层——消息。TCP/IP协议不仅仅指的是TCP协议和IP协议,它泛指那些为应用层提供服务的网络协议。其中典型的TCP

2020-09-29 17:51:21 432

原创 Windows编程——线程篇(二):线程同步

文章目录Windows编程——线程篇(二):线程同步为什么需要同步资源竞争高速缓存行用户空间线程同步原子访问临界区线程同步临界区临界区与循环锁临界区的错误处理临界区技巧内核对象线程同步等待内核对象等待函数等待线程等待多个进程等待成功的副作用事件内核对象线程同步可等待的定时器内核对象线程同步等待定时器给APC(异步过程调用)进行排队定时器的松散特性信号量线程同步互斥体线程同步互斥体与临界区比较Windows编程——线程篇(二):线程同步为什么需要同步资源竞争假如存在2个线程A、B,和资源T,A需要对

2020-09-29 17:24:45 527

原创 Windows编程——线程篇(一):线程简介

文章目录Windows编程——线程篇(一):线程简介线程的启动线程的终止线程终止时发生的事情线程的调度查看内核线程的状态线程 优先级设置进程优先级设置线程优先级Windows编程——线程篇(一):线程简介线程由2部分构成:线程的内核对象和线程堆栈。操作系统使用内核对象对线程进行管理,堆栈则用于维护线程在执行代码时需要的所有函数参数和局部变量。一个进程中的多个线程之间共享这个进程的代码段、地址空间、内核对象句柄等。线程的启动可以使用createthread、__beginthread函数来创建一

2020-09-29 14:32:35 654

原创 Windows编程——进程篇(一):进程简介

文章目录进程简介创建进程main函数参数说明程序的退出CreateProcess函数lpApplicationNamelpCommandLinelpProcessAttributes、lpThreadAttributes和bInheritHandles进程简介所谓进程,就是一个包含了一定的资源的集合体。进程拥有独立的地址空间,可执行模块、DLL、代码段和数据段等。进程不执行任何任务,所有的事情都由线程来完成。当启动一个进程的时候,一个主线程也随之启动。创建进程创建进程的方法有2中,一种是直接运

2020-09-29 13:49:58 462

原创 LeetCode之递归——递归的记忆化(斐波那契数、爬楼梯)

在递归中由于需要调用自身可能会导致一些重复的计算,函数的调用不仅需要时间,而且也会暂用栈上的空间。有时候如果调用的深度太深,还会导致无限循环的问题(实际上是深度太深,要长时间的调用,导致无法在预期的时间内返回)。要解决这个问题,可以使用“记忆化”的方式,将需要的数据缓存,以减少重复的计算。斐波那契数链接:斐波那契数描述:斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。...

2020-03-05 22:27:50 781

原创 LeetCode之递归——杨辉三角2(获取杨辉三角的第N行)

链接:获取杨辉三角的第N行描述:给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。例如,输入: 3,输出: [1,3,3,1]。你可以优化你的算法到 O(k) 空间复杂度吗?思路:参考杨辉三角很容易解决该问题,但是要求O(K)空间复杂度,那么肯定是不满足要求的。接着上一篇最后说道的优化来说,既然求f(n)时可以将只计算结果的一半,然后复制到另一半,那么以前的f(0)...

2020-02-29 00:31:42 1408

原创 LeetCode之递归——杨辉三角

链接:杨辉三角描述:给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。比如给定5,则生成以下数组。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1...

2020-02-28 02:41:09 535

原创 LeetCode之递归——两两交换链表中的节点

链接: 两两交换链表中的节点描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.注意这里需要交换的是节点本身的顺序,而不是节点的val值,因此如果是有2个节点的链表first->last,则应该返...

2020-02-26 06:00:15 387

原创 02 C#截图操作(几种截图方法)

公共函数获取屏幕截图图片灰度化截图方法的具体实现使用像素替换的方法在原图上画图的方法使用蒙板的方法公共函数获取屏幕截图private Bitmap GetScreenCapture(){ Rectangle tScreenRect = new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.W...

2018-03-04 00:35:21 17976 2

原创 01 C#截图操作(一、基本操作)

前言:截图的几种实现思路图片的基本操作获取屏区域获取屏幕截图将指定图片灰度化在图片的指定区域绘图bitmap 和 image 转换Bitmap 和 byte[] 转换前言: 最近学习C#,想找个练手的项目实践一下,回想到一款比较好用的截图工具GreenShot是C#开源的,于是想自己试着实现一下简单的截图功能,于是就有了这几篇文章作为总结。...

2018-03-03 13:54:35 919

原创 十三张/十三水 最优组合

十三水规则: 二到四人对局,,一副牌,除去大王,小王,剩下总共52张牌;游戏中每人获得13张牌;游戏规则 每位玩家需将手上的13张牌分成头、中、尾三墩牌,头墩三张,中尾墩各五张。2) 普通牌型(3、5张牌) 同花顺:同门花色中之五张连续牌。若别家也有同花顺时,比顺子大小如牌型全部相同,则平局。 在底墩,按5道计;在中墩,则记10道; 铁支(四条):4张相同的牌。在

2017-09-28 19:30:36 32631

原创 C++数据结构与算法——单向循环链表

单向循环链表:相对于单向链表的最后一个节点的next指针指向nullptr,单向循环链表的最后一个节点的next指针指向链表头。此处主要实现了单向循环链表的插入、删除、构造、析构、输出操作符等简单功能。注意:单向循环链表最主要关心的是插入、删除时头节点的更新问题。如,在链表头删除时需要将链表头指向下一个节点或者置为nullptr。

2017-05-27 00:48:15 1255

原创 C++数据结构与算法——麻将胡牌算法(二:完全胡牌算法)

虽然单花色胡牌算法面试时写出来了,但是完整的胡牌算法却没有写,既然遇到了,秉着不抛弃不放弃的精神,当然不能原谅懒惰的自己了。下面这篇为一个完整的胡牌实现。胡牌规则除了以下几点,其余与单花色胡牌规则一致: 1.东南西北中发白,只能三个相同的牌才能进行组合,不允许与不同的牌进行组合 2.牌的花色可能有多种

2017-05-20 15:58:51 3860 1

原创 C++数据结构与算法——麻将胡牌算法(一:单花色胡牌)

前段时间面试,遇到2个游戏公司,都要求写胡牌算法,第一个连面试官都没见着,前台给了份面试题,除了三个算法题,还有一堆填空选择题,其中一题要求出完整的胡牌算法(也就是有饼、万、条及东西南北中发白的情况),直接无视然后走了(太没脑了,居然不给上机!!!!!!)。下午又到一家面试,还是要求写胡牌算法,当时真后悔为啥中午不查下资料(本来打算晚上回来再查的)。不过面试官很nice,当面用扑克演示怎样可以胡牌,

2017-05-20 14:23:16 5661 2

原创 C++数据结构与算法——第八章:二叉树

注意:1.成员函数指针的声明及定义() 2. destroy时不能进行前序/中序遍历,最好使用非递归的层次遍历进行删除 3.在类外部不能使用含有模板的typedef,但是在类内部可以(为什么?未知!) 4.实现参考的是《C++数据结构与算法分析》第八章,但有所修改(size实现源代码使用的是static int作为计数器)#pragma once#include <queue>#includ

2017-05-16 23:27:06 491

原创 effective STL 读书笔记——第五章:算法

条款30:确保目标区间足够大STL容器在被添加时(通过insert、push_front、push_back等)自动扩展它们自己来容纳新对象。但是标准STL并不总是为你进行区间的扩充——当你是用了错误的迭代器时,下面这段代码存在致命的错误:int transmogrify(int x); // 这个函数从x// 产生一些新值vector<int> values;... // 把数据放入valu

2017-05-14 19:06:27 443

原创 effective STL 读书笔记——第四章:迭代器

条款26:尽量用iterator代替const_iterator,reverse_iterator和const_reverse_iterator1.四个迭代器的转换关系iterator可以转换为其他三个迭代器,const的迭代器之间可以相互转换,但const的迭代器不能转换为非const的迭代器反向迭代器可以通过调用base来获取对应的正向迭代器2.尽量使用iterator的理由insert和e

2017-05-13 20:59:34 357

原创 windows下使用WSAEVENTSELECT实现同步发送异步接收

windows下使用WSAEVENTSELECT实现同步发送异步接收

2017-05-11 23:36:37 669

原创 effective STL 读书笔记——第三章:关联容器

条款19:了解相等和等价的区别相等:一般表示operator==操作符返回true 等价:一般用于关联容器,表示两个对象x和y如果在关联容器c的排序顺序中没有哪个排在另一个之前,一般以Operator<实现,如过x和y是关联容器c,其比较函数为key_comp,则表示x和y等价的表达式如下:!c.key_comp()(x, y) && !c.key_comp()(y, x);//在c的排序顺序中如

2017-05-11 00:18:09 396

原创 effective STL 读书笔记——第二章:vector和string

条款13:尽量使用vector和string来代替动态分配的数组理由如下:通过vector、string代替动态分配的数组,你可以享受标准stl算法库的好处你不需要考虑何时放内存,不会存在麻烦的内存泄露问题你不需要考虑到底是用delete还是delete[],也不需要顾虑资源重复释放的问题使用容器代替动态分配的数组可能在以下2个地方存在问题:由于STL实现的string可能存在引用计数,在

2017-05-09 00:24:45 489

原创 effective STL 读书笔记——第一章:容器

条款1:仔细选择你的容器常见容器:标准STL序列容器:vector、string、deque和list标准STL关联容器:set、multiset、map和multimap非标准序列容器:slist和rope非标准关联容器:hash_set、hash_multiset、hash_map和hash_multimap标准非STL容器:bitset、valarray、stack、queue和pri

2017-05-08 22:21:30 474

原创 [C++杂谈]——C++指针

1.何为指针:   程序运行时,任何变量都是存放在内存中的,通过将内存以字节的大小划分,为每个字节增添索引,某一变量的地址就是该变量在内存中所占的第一个字节的索引。此时,定义一变量用来存放开始第一个字节的索引,这个变量就被称为指针,通过该变量的值可以间接的访问该指针所指向的变量。在32位系统中,指针的大小都是4字节,可以索引最大4G的内存。  2.指针定义  int a = 10;int *p

2017-05-06 20:12:02 378

原创 effective C++——限制类所能产生的对象数量

第一章:效率Item M19:理解临时对象的来源    1.C++临时变量指的是匿名变量,匿名变量带来了构造和析构的开销     2.如果要返回一个对象,最好不要返回局部变量,它会带来两次的构造和一次的析构,可以通过调用构造函数构造一个匿名变量进行返回Item M21:通过重载避免隐式类型转换    1.通过单参构造函数可以隐式的将其参数转换为该类的对象,此时会发生构造的开销,为避免这种隐式转换,

2017-05-06 20:08:14 461

原创 more effective c++使用条款(一)—— 基础议题/运算符

第一章:基础议题   Item M1:指针与引用的区别     1.指针可以不初始化,引用必须初始化     2.指针可以为空指针,引用不可以为空     3.指针可以改变指向,引用初始化后就不能改变指向的对象     4.指针占用4个字节,引用只是别名,理论上是不占用空间的,但是这个别名本身是要占用空间的,因此也可以说引用时占用空间的     5.引用比指针效率高,因为引用直接操作

2017-05-06 20:05:47 420

原创 effective C++ 使用条款(二)——item34~item46总结

第六章 继承和面向对象设计条款35: 使公有继承体现 “是一个” 的含义    1.子类对象一定“是一个”基类对象,基类对象不一定是子类对象 条款36: 区分接口继承和实现继承    1.希望派生类只继承成员函数的接口——将函数声明为纯虚函数     2.希望派生类同时继承函数的接口和实现,但允许派生类改写实现——将函数声明为虚函数     3.希望同时继承接口和实现,并且不允许派生类改写任何东

2017-05-06 20:02:44 746

原创 effective C++ 使用条款(一)——item1~item33总结

从c转向c++条款

2017-05-06 17:48:44 393

原创 more effective c++——Item M30 代理类(三)隐式类型转换与代理类

代理类的缺点: 1.作为函数返回值,代理类的临时对象(比如proxychar)会带来构造与析构的开销 2.代理类存在类型转换的问题,如果原始类A可以隐式转换为类B,则代理类即使存在隐式转换为A的方法,也不能直接转换为B 3.如果要像操作原始类一样操作代理类,则必须为代理类提供相同的接口根据第二点的特性,我们可以设计一个转换的代理类来防止隐式类型(另一种方式是将单参构造函

2017-05-06 17:18:18 413

原创 more effective c++——Item M30 代理类(二)通过代理类识别operator[]的读写操作

通过代理类延后对引用计数类string的下标索引返回值得操作,识别operator[]的读写操作

2017-05-06 02:17:29 519 1

原创 more effective c++——Item M30 代理类(一)多维数组的实现

代理类:用一个类来实现我们所需要的而 C++语言中并没有提供的东西,用户并不需要该类的具体实现总结: 1.模板类中,输入输出操作符重载不能在模板类外部实现 2.数组类需要提供基本的操作:单参构造,拷贝构造,赋值操作,输出操作符 3.n维数组类持有n-1维数组的二级指针 4.多维数组可以看作n-1维数组的叠加,构造时需要先构造row个n-1个维数组的指针,然后再

2017-05-05 01:03:47 398

原创 more effective c++——Item M29 引用计数(三)带引用计数的基类的实现

带引用计数的基类实现:Cstring类的实现与通过增加中间层来为不可修改源代码的实现引用计数功能

2017-05-05 00:44:50 641

原创 more effective c++——Item M29 引用计数(二)带静态成员变量的rfstring类实现

more effective c++——Item M29 引用计数(一)简略的rfstring类设计和写时拷贝 这篇博客中所实现的引用计数还存在未解决的问题——如何通过相同的值多次构造rfstring对象时,防止多次在堆上分配内存?可以通过在rfstring类中添加一个static list

2017-05-03 23:32:17 544

原创 more effective c++——Item M29 引用计数(一)简略的rfstring类设计和写时拷贝

引用计数的特点及作用 1. 引用计数允许多个相同值得对象共享这个值得实现 2. 引用计数可以节省空间、拷贝及析构的开销 3. 引用计数可以简化对象的追踪过程,比如在垃圾体系回收中引用计数的简单实现

2017-05-03 00:50:24 453

翻译 Unix网络编程——Mongoose开源项目源码解读(1):概述

参考资料:https://docs.cesanta.com/mongoose/master/  源码下载地址:https://github.com/cesanta/mongoose 当前最新版本号:Mongoose 6.7 简述: Mongoose前身为shttpd,使用标准C/C++编写而成,转为嵌入式设备设计的,支持跨平台的网络服务器库。Mongoose实现了非阻塞式事件驱动API,支持

2017-03-12 15:16:19 6194 1

原创 双向链表的宏实现——解析shttpd的链表实现

shttpd中双向链表的宏实现

2017-03-08 23:03:55 678

原创 Unix网络编程——常见服务器模型

**常见服务器模型:** - 循环服务器 - 并发服务器简单的并发服务器模型使用线程池或进程池的服务器模型使用I/O复用的并发服务器模块

2017-03-05 23:56:44 499

原创 Unix网络编程——常见辅助函数总结

网络编程接口中网络字节序与主机字节序的转换、主机信息与套接字信息的解析、点分十进制字符串与十进制整数的转换等。

2017-03-05 19:51:47 422

原创 Unix网络编程—— shutdown与close

shutdown与close的区别及示例

2017-03-05 01:35:39 615 1

原创 Unix网络编程—— I/O复用之select

多路复用之select

2017-03-04 14:06:08 456

转载 [Linux编程]VIMTUTOR

vim tutor

2016-11-06 16:09:13 360

Linux设备驱动开发.pdf

《Linux设备驱动开发.pdf》

2018-04-06

Linux教程之MakeFile教程.doc

Linux教程之MakeFile教程.doc

2018-04-06

ubuntu_vim命令.pdf

ubuntu_vim命令.pdf

2018-04-06

Visual C++.NET高级编程技术与范例

《Visual C++.NET高级编程技术与范例.pdf》 更多资源免费下载 C++经典收集: https://fishlove.ctfile.com/dir/1801698-27851333-9b80b4/

2018-04-06

MFC 读写 excel

建立MFC工程,导入Application Range Workbook Worksheet Workbooks Worksheets等excel服务,读去输入的excel,生成新的excel文件。代码应某人要求而写,在debug目录下有使用应用自动生成的excel示例。

2016-10-16

空空如也

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

TA关注的人

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