自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

FlushHip

现在的自己不开心也不难过,只为寻求心灵上的一丝成就感。

原创 Windows下C++得到一个空闲的端口API

这个东西,并不太常用,客户端弄一个Tcp连接,也不需要你去指定端口,系统会自动找一个空闲的端口给你; 但是,如果在服务器端,手动得到一个空闲端口是很重要的,毕竟这个端口要固定,因此需要你自己指定一个空闲的端口。 那么在Windows下,如何利用C++得到一个空闲的端口呢,答案是Windows的AP...

2020-05-20 16:45:16 1441 0

原创 Windows下C++动态监测网络变化(对标Windows网络托盘图标)

背景 把Windows网络托盘小图标移植到应用程序中来。使得应用界面显示网络状态,状态包括无网络、有线网、无线网(需要显示WiFi信号强度) 方案 动态监测托盘图标变化(没有采用) 动态监测网络状态变化(利用Windows的API和COM接口,也可以采用轮询) 问题点 获取Windows网络...

2020-05-20 16:44:56 1006 0

原创 Windows中文件和文件夹的链接类型(快捷方式、软链接、硬链接、符号链接)

链接四大类型 There are three types of file links supported in the NTFS file system: hard links, junctions, and symbolic links. 快捷方式 软链接 硬链接 符号链接 快捷方式(S...

2020-05-20 16:44:28 547 1

原创 Windows获取本地安装软件详细信息(对标卸载程序控制面板)

背景 在做C++客户端的一些业务时,需要采集本地计算机上已经安装的软件,上传至云端,供后台做数据分析,数据展示等功能,这里需要对标控制面板中的卸载程序列表,做到采集到的软件列表中的信息和控制面板中的保持一致。 控制面板中的信息结构 名称 发布者 安装时间 版本 大小 获取信息的方式 注册表 ...

2020-03-02 18:23:00 368 0

原创 C++中操控器Manipulator控制IO格式浅析
原力计划

背景 对于从C语言过渡到C++的筒子来说,输出流的格式控制是个头痛的事,printf的字符串格式控制不香吗?确实香,很多C++的开源类库都实现了printf的格式控制,函数签名大概类似Format(const std::string &, ...),甚至其他语言都借鉴了printf这种格式...

2020-02-26 12:46:21 155 1

原创 Visual Studio远程调试Windows上C++程序的几种方式

背景 远程调试(Remote Debugging)的原理可以见下图: 可以看到,远程调试是通过网络进行通信(使用TCP协议)的,将远程程序的运行信息和Visual Studio的控制信息通过网络互传。如果一些特殊的BUG发生在没有网络的情况下,那么远程调试就派不上用场了。 其次,远程调试需要在被...

2020-01-19 10:10:17 1482 1

原创 IsDebuggerPresent和DebugBreak在Windows项目中的应用

首先要从一篇文档说起,https://docs.microsoft.com/zh-cn/windows/win32/debug/basic-debugging,这篇文档介绍了Windows调试的相关内容,比如相关的调试术语Debugging Terminology,可以看一下,举个例子,为什么调试...

2019-12-03 18:45:31 179 0

原创 LoadLibrary下错误返回126错误码排查过程

在开发一些Windows下的应用程序过程中,经常会手动加载一些DLL,使用的就是LoadLibrary这个函数,而这个函数一旦失败,返回的错误码基本都是126,126错误码的意思是找不到指定的模块,这不,我就遇到了这个问题,而且挺诡异的,就是Debug模式下一点问题没有,Release模式下就必出...

2019-07-21 13:02:26 3635 0

原创 线段树浅析及其指针式C/C++写法

hihocoder 19 - 22 线段树节点的数据结构 typedef struct Node { int data; Node *lchs, *rchs; Node (int data = 0, Node *lchs = nullptr, Node *rchs ...

2019-04-23 16:33:40 309 0

原创 C++实现URL的UTF8转码

urlurlurl不能出现中文,导致不能传输中文数据,解决方法有下面两个: 统一使用base64base64base64转换一下; 把中文用UTF-8存储,然后对其进行可视化编码,这也是浏览器的做法。 先来看下,一条urlurlurl在浏览器中会被转化成什么样,可以用在线的网址转一下。 be...

2019-03-15 17:11:26 899 1

原创 从一道多线程题来看C++11中条件变量std::condition_variable的使用和原理

现在有一道笔试题是下面这样子的。 有两个线程,一个线程循环输出A,另一个线程循环输出B,如何让这两个线程在控制台稳定输出ABABAB…。 不用思考太多,我们肯定会定义一个标志变量isTurnA,isTurnA为true输出A,同理输出B,这是一种最简单的有限状态机,只要按照这个状态机进行,那么...

2019-03-07 17:26:01 247 0

原创 利用googletest命令行参数简化单元测试

首先看看gtest如何写: #include <gtest/gtest.h> int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); return ...

2019-02-26 18:05:35 1361 0

原创 小米OJ - 灯 - 仔细分析找规律

题目描述 链接:Here。 一个屋子有 nnn 个开关控制着 nnn 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n−1n-1n−1 盏灯,每次按下这个开关,其对应的 n−1n-1n−1 盏灯就会由亮变灭,或者由灭变亮。保证不会有两个开关控制同样的 n−1n-1n−1 盏灯。 现在刘同学想把...

2019-02-15 16:22:35 397 1

原创 小米OJ - 找到第 N 个数字 II - 等差数列求和及其通项然后二分

题目描述 链接:Here。 假如有一组字符串符合如下规律: S1=1S2=12S3=123S4=1234⋯S9=123456789S10=12345678910⋯S18=123456789101112131415161718 \begin{array}{} S_{1} =1\\ S_{2} =1...

2019-01-25 12:19:48 634 1

原创 聊聊C++标准库中优先队列priority_queue的源码

C++标准库提供了优先队列priority_queue,顾名思义,就是可以按照优先级出队的队列,而且时间复杂度为O(logn)O(logn)O(logn),算法中有很多优化项就是用优先队列来优化的。 C++11的标准库是怎么构造出优先队列的呢?优先队列是用堆来构造的。所以,优先队列其实并不能叫队列...

2019-01-02 20:47:33 725 0

原创 聊聊C++11标准库中堆(heap)算法的源码

STL中支持堆操作,对外暴露了`std::make_heap`,`std::push_heap`,`std::pop_heap`,`std::sort_heap`,`std::is_heap`,`std::is_heap_until`这6个函数,详细的使用方法可以参见[图解STL中算法的分类、简介...

2018-12-29 16:25:21 858 0

原创 2019年全国研究生入学考试计算机学科专业基础综合(408)数据结构编码题

有一个带头节点的单向链表(a1,a2,…,an−1,an)(a_1, a_2,\dots,a_{n-1},a_n)(a1​,a2​,…,an−1​,an​),nnn为偶数,使用空间复杂度为O(1)O(1)O(1)的算法使其变成(a1,an,a3,an−2,…,a4,an−1,a2)(a_1, a_...

2018-12-25 14:15:37 6829 9

原创 Windows/Linux下C++对于UUID的跨平台封装

Universally Unique Identifier,UUID,通用唯一识别码。是用于计算机体系中以识别信息数目的一个128位标识符,这个东西很有用,在分布式系统中经常用于标识一个结点。根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性,这与其他大多数编号方案不同。重复UUID...

2018-12-19 16:29:28 1838 1

原创 Windows下C++程序实现单例运行

在Windows下,有些程序是需要单例运行的,比如QQ和Wechat吧。 QQ可以打开多个 Wechat只能打开一个 可以自己在Windows下点一点就知道了。 那么在Windows下如何实现单例运行呢?这个单例运行和代码的单例设计模式是不是一个东西呢?一一来回答。 首先单例模式和这个肯定是不...

2018-12-17 19:36:38 1073 0

原创 Go利用windres.exe和.rc文件在Windows下生成的程序带有版本、版权、产品名称、图标等属性信息

用Go在Windows下写了一个.exe的程序,这个程序默认是不带版本,版权,产品名称以及图标的,因此,这些东西我们要自己去生成。 Go对于程序版本这方面已经有了开源的包,见GitHub - https://github.com/josephspurrier/goversioninfo。 你可以自...

2018-12-13 12:22:18 1962 1

原创 C++中实现HMAC单向散列类

HMAC的维基百科解释是:hash-based message authentication code,其实就是加了盐的单向散列算法。而HMAC的重点就是如何给要散列的数据加盐。 加盐公式如下: 解释一下上面的符号: ⊕\oplus⊕表示异或运算; mmm表示要散列的数据; a∣∣ba || ...

2018-12-05 14:34:28 735 0

原创 Windows关机重启API封装

这纯属记录下代码,Windows系统在程序中关机和重启电脑。 大体上就是两个步骤: - 拿关机权限 - 关机 需要注意的点,一定要在`ExitWindowsEx`中加上`EWX_FORCE`参数,不然,在Windows锁屏界面下是关不了机或者重启不了的。

2018-11-30 16:15:40 671 0

原创 C++中std::string与C-String字符数组的互相转换

C语言中只有字符数组这一说法,没有C++专门封装的字符串类std::string。而字符数组C-String以\0作为结束符。std::string其实还是存储了C-String这个指针,只不过不同的编译期对std::string中的存储结构都做了不同的处理,这里我们不讨论std::string的...

2018-11-27 14:30:00 3486 0

原创 招商银行信用卡中心2019秋招IT笔试(AI、开发、测试开发方向)第二批

X游戏 题目 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。 如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对...

2018-11-19 22:32:07 2338 0

原创 招商银行信用卡中心2019秋招IT笔试(AI、开发、测试开发方向)第三批

员工考勤记录 题目 给定一个字符串来代表一个员工的考勤纪录,这个纪录仅包含以下两个字符: ‘A’ : Absent,缺勤 ‘P’ : Present,到场 如果一个员工的考勤纪录中不超过两个’A’(缺勤),那么这个员工会被奖赏。 如果你作为一个员工,想在连续N天的考勤周期中获得奖赏,请问有多少种考...

2018-11-19 12:09:41 4097 2

原创 招商银行信用卡中心2019秋招IT笔试(AI、开发、测试开发方向)第一批

鸡鸭分类问题 题目 农场有n只鸡鸭排为一个队伍,鸡用“C”表示,鸭用“D”表示。当鸡鸭挨着时会产生矛盾。需要对所排的队伍进行调整,使鸡鸭各在一边。每次调整只能让相邻的鸡和鸭交换位置,现在需要尽快完成队伍调整,你需要计算出最少需要调整多少次可以让上述情况最少。例如:CCDCC-&am...

2018-11-19 00:10:17 4138 2

原创 聊聊实现C++跨平台ping函数及ICMP请求回显数据包解析

ping我们经常使用,大多数的时候是在命令行ping下IP地址,然后一堆输出。 程序中有时候也会用ping函数,那么ping是如何实现的呢。 计算机网络告诉我们,ping函数是基于ICMP协议实现的,而ICMP协议又是基于IP协议弄的(ICMP作为IP协议的数据部分传输)。 ping通过ICMP协...

2018-11-12 17:26:59 1056 0

原创 Windows/Linux中C++对于系统函数发生错误时的调试方法(调试Windows/Linux下创建原始socket失败返回-1)

调用系统API时,经常会由于操作不当导致系统函数调用发生错误,而系统API也是比较友好的,会给你一些特殊的返回值,普遍返回-1,同时,会设置一些变量,表示错误类型。在Windows中,调用GetLastError,可以得到最近的调用失败的错误码;在Linux中,“全局变量”errno记录了最近调用...

2018-11-12 16:02:57 590 0

原创 快手2019秋季校园招聘算法笔试B卷编程题 - 题解

快手算法笔试题,一个签到题,一个动态规划,一个二分答案。其中二分答案有个数据有问题。 题目链接:点这儿。 字符串排序 题目 月神拿到一个新的数据集,其中每个样本都是一个字符串(长度小于100),样本的的后六位是纯数字,月神需要将所有样本的后六位数字提出来,转换成数字,并排序输出。 月神要实现这样一...

2018-11-07 20:31:12 2712 1

原创 快手2019秋季校园招聘算法笔试A卷编程题 - 题解

快手算法笔试题,两个动态规划,一个签到题。数据太恶心了,魔法深渊那题,没给模,后来是我自己根据结果猜出来的,模是100000000310000000031000000003,居然还不是常规的100000000710000000071000000007;善变的同伴那题,应该是卡常数了,而且代码一会过...

2018-11-07 14:31:01 6313 1

原创 聊聊C++跨类通信机制之消息总线及其实现

如果没有怎么写过项目,更确切地说是没有用面向对象的语言写过项目。就不会明白跨类通信这个需求是多么刚需。 为什么要跨类通信?把所有的逻辑都写在一个类中,都是一家人,那就不需要通信了啊。是,确实是这样,当功能不是很多的时候,这样做确实好。但是,随着项目的规模增大,各种功能堆积,各种模块的增加,会使得这...

2018-11-06 18:02:53 1166 2

原创 360公司2017春季招聘编程题 - 题解

做了这么多的笔试编程题,觉得这次的笔试题很有质量,两个动态规划,其中一个还是一个简单的区间动态规划(笔试几乎不考,不是说”最难不过二叉树”吗)。 原题链接:点这儿. 第一题:分金子 题目: A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,但各自的实力都不足以吞下...

2018-11-03 23:07:23 650 1

原创 聊聊C++任务定时器的设计与具体实现

在项目中,经常会遇到这种场景:在特定的时间点去执行一些任务,这就是定时任务。 如何实现定时任务呢?如果不用任何技巧,我们可以把当前线程睡一睡,睡到特定的时间点再起来执行特定任务。看起来是解决了这个问题,但是,如果在睡一睡的这个过程,我还想执行一些其他的任务,怎么办?好像也可以解决,开一条新的线程去...

2018-11-03 22:29:10 4318 11

原创 Windows利用WTS API获取锁屏状态

下面的这个函数可以获取Windows是否处于锁屏状态: 代码来自stackoverflow,C++: check if computer is locked。 #include <Windows.h> #include <WtsApi32.h&gt...

2018-10-18 09:21:48 1599 1

原创 数据结构经典例题解析C/C++代码实现(二)

第一题 题目 编一C程序,它能把读入的整数依次插入到一个初始为空的二叉排序树中,一直读到-9999为止(-9999不插入该二叉排序树)。输出该二叉排序树的前序序列、后序序列及叶结点的个数。(输入时,两个相邻的整数用空格隔开)。 解析 C语言 C++ 第二题 题目 编一C程序,它能对输...

2018-10-13 11:08:24 480 0

原创 数据结构经典例题解析C/C++代码实现(一)

考研需要吧,虽然挺基础的,但是还是要练习下的,而且,还可以帮助一些其他同样需要这些代码的朋友。 第一题 题目 编一C程序,它能根据读入的数据构造有向图G,并输出G的邻接矩阵及G的拓扑序列。图的输入形式为 i0  j0&...

2018-10-13 09:13:27 1178 0

原创 Linux/Windows下C++设置线程名字方便多线程调试

C++多线程编程,调试是一个大问题,原因之一就是,线程名字继承了父进程的名字,因此导致同一段代码的不同线程名字一样;而且还会导致线程的名字怪怪的,不好看。 因此,如果在代码中可以设置线程的名字就好了,这样在调试中就可以看到期望的线程名字,这样便于调试。 由于编写跨平台代码,因此,线程设置名字对Wi...

2018-10-12 11:12:51 2512 0

原创 Windows下C++调用系统软键盘及其需要注意的点

Windows下系统软键盘的程序名是osk.exe,系统软键盘在有键盘的时候一点用都没有,但是没有键盘的时候想要输入点东西,系统软键盘就至关重要了。 osk.exe为微软系统自带的虚拟键盘程序,功能与真的键盘差不多.只需要在运行中输入"osk"即可启动虚拟键盘。 Windo...

2018-10-11 13:07:57 4198 0

原创 细说C++11中ratio编译期分数(一)

对于分数,C++的标准库并没有提供这样的一个类,如果需要完全可以自己去实现,但是C++11提供了一个编译期常量分数类std::ratio,这个类定义于<ratio>头文件中。 这个类允许你具体指定编译期分数,并允许对它们执行编译期运算(可以化简为最简式)...

2018-10-10 14:08:24 465 2

原创 C++11中type_traits中的基石 - integral_constant

C++标准库的的编写方法是基于模板元来编程的,既然是用模板,那么就少不了与类型打交道,而C++11标准库中新加入了<type_traits>头文件,这个里面新加入了很多与类型特性有关的模板元,在编译期间这些东西就是利器,非常好用。 而打开...

2018-10-10 12:28:40 1805 0

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