自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

u014023993的专栏

学习C++过程中遇到的一些问题及解决方法,记录学习C++路上的点点滴滴

  • 博客(172)
  • 资源 (13)
  • 收藏
  • 关注

原创 fork的坑:文件描述符继承

​最近遇到一个神奇的fork问题,坑了我2天半的时间,最后在另一个小伙伴的帮助下,找到问题根源,然后修改。此时,对于前人说的,fork的坑,也终于有点认识了。基本的软件图如下:主进程A收到云端B的命令,fork出子进程A1、A2、….、An,然后执行execv函数,打开新的可执行文件。Execv执行完成后,子进程Ai就拥有了和主进程A不同的镜像文件,这是Linux下创建新进程的典型方式。主进程A收到云端的控制信令后,通过socket与子进程Ai通信:控制Ai,收集Ai...

2020-11-15 13:27:08 2659

原创 _snprintf_s 的正确使用方式

​这次遇到的奔溃问题,和从一次奔溃谈谈strncpy_s中有异曲同工之处:程序在执行到某个点后,瞬间干干净净的退出,也没有dmp文件生成。根据环境确定了怀疑点后,在TerminateProcess函数上加断点,然后运行程序,程序在TerminateProcess上中断下来,堆栈如下(简化模型):问题出在_snprintf_s上,奔溃原因是_invalid_parameter_noinfo函数中调用了TerminateProcess函数,看意思是参数有问题。_snprintf_s的有两..

2020-09-20 18:01:34 9397 1

原创 strncpy_s 的正确打开方式

​最近遇到了一个奔溃问题,程序在执行到某个点后,瞬间干干净净的退出,也没有dmp文件生成。这个奔溃在指定场景下出现,于是用Windbg执行程序,准备在奔溃点进行分析。想法很好,但是在奔溃点,看不到堆栈信息。于是通过日志及问题出现场景,确定了怀疑点。但是在怀疑点,并没有看出问题。因为,我先入为主的以为,strncpy_s会做边界检测,不会越界访问及复制。根据Windbg给出的诊断信息以及咨询同事,在TerminateProcess函数上加断点,运行程序,程序在TerminateProces..

2020-09-20 17:58:57 6169

原创 尽管HTTP/3已经来了,HTTP/2也得了解啊

目录源起协议格式分帧层帧类型首部压缩交互流程Curl 查看HTTP/2浏览器查看HTTP/2其他优化HTTP/2使用率参考资料因为HTTP/1.1性能以及速度方面的问题,人们想了一系列的优化措施。当优化措施依然不能满足要求时,就需要对协议进行升级。于是,有了HTTP/2。源起HTTP/2基于SPDY。SPDY 音同SPEEDY,也就是快,如果你看过手把手带你体验 HTTP/3或者【技术】QUIC的那些事 | QUIC为什么那么快,...

2020-05-17 16:32:29 712 2

原创 手把手带你体验 HTTP/3

HTTP/3 是在 QUIC 基础上发展出来的,并于 2019 年发布。QUIC 存在两个版本,早期 Google 打头阵的 QUIC 称之为 gQUIC,IETF 标准化后称之为 IQUIC。gQUIC 使用 UDP 进行数据传输,但上层仍然使用HTTP/2, HTTP/2 与 UDP 之前存在一个 QUIC 层,TLS 加密过程在此层处理;而 IQUIC,直接将 TLS 集成到 QUIC 内部。之前我写了QUIC相关文章,具体见如下链接:【技术】QUIC的那些事 | QUIC为什么那么.

2020-05-14 23:11:46 3501

原创 C++程序员学习Java初感

看了一个多月的 Java 了,涉及的书籍有:《On Java 8》、《深入理解 Java 虚拟机》、《Java 并发编程的艺术》、《Manning Spring in Action 5-th Edition》以及极客时间上的《Java 并发编程实战》、《设计模式之美》两门课程,同时,也正在看《Effective Java》。从当前获取的信息来看,真的是体会到什么叫生态,什么叫 Java 的类库...

2020-05-04 17:21:32 351

原创 Linux GDB分析死锁

Linux下通过GDB分析程序死锁问题

2019-11-09 20:54:57 1070

原创 Linux下通过valgrind定位程序内存问题

内存泄露、重复释放、异常释放的检测与分析

2019-11-09 12:00:52 1613

原创 Windbg调试死锁

死锁的定位方法

2019-11-09 09:39:34 734

原创 Linux CPU分析常用工具

本文内容是学习极客时间课程 如何“如何迅速分析出系统CPU的瓶颈在哪里? 的总结。如果想更有效学习,推荐极客时间的课程:Linux性能优化实战如果想更系统学习,可以阅读《性能之巅:洞悉系统、企业与云计算》以及其作者Brendan D. Gregg的网站:http://www.brendangregg.com/,Linux Performance的链接为:http://www.brendangr...

2019-10-20 11:16:09 569

原创 Linux内存分析常用工具

如何快速找到Linux系统问题

2019-10-20 11:06:23 796

原创 Linux系统IO分析常用工具

本文内容是学习极客时间课程 如何迅速分析出系统I/O的瓶颈在哪里? 的总结。IO性能指标指标-工具映射图工具-指标映射图使用较多的工具分析的基本思路a. 先用 iostat 发现磁盘 I/O 性能瓶颈;b. 借助pidstat,定位出导致瓶颈的进程c. 分析进行的I/O行为:trace、perf等工具d. 结合应用程序原理,分析IO来源...

2019-10-20 10:54:24 632

原创 Golang火焰图

文章目录火焰图1 原生 PProf 工具2 安装FlameGraph3 安装graphviz4 安装go-torch5 结果火焰图火焰图(Flame Graph)是 Bredan Gregg 创建的一种性能分析图表,因为它的样子近似火而得名。上面的 profiling 结果也转换成火焰图。Uber开源工具 go-torch可以直接读取 golang profiling 数据,并生成一个火焰图的...

2019-08-02 07:09:48 6564 2

原创 Golang pprof

Go tool pprof1. 简介Golang 是一个对性能特别看重的语言,因此语言中自带了 一些性能分析工具。可以生成相应的Profile(概要文件),譬如CPU Profile、Memory Profile、Block Profile、Mutex Profile、Goroutine Profile等等CPU Profile:报告程序的 CPU 使用情况,按照一定频率采集应用程序在 CP...

2019-08-02 07:05:14 986

原创 Ubuntu安装MySQL成功后,普通用户无权访问:ERROR 1045 (28000): Access denied

Ubuntu安装Mysql很简单,但是也会遇到一些问题。我的Ubuntu版本是18.04.1,安装mysql版本是5.7。Ubuntu安装MySQL的步骤如下:1.sudo apt-get install mysql-server2.apt-get install mysql-client3. sudo apt-get install libmysqlclient-de...

2019-07-01 22:27:36 2765 2

原创 C++从控制台连续读取数组:while(std::cin)终止

​从控制台输入一个数组,有多难?为什么会有这个问题呢?因为在刷题时,需要测试不同的输入。程序应该能够根据输入进行相应的输出,直至按下输入结束键(Windows下为Ctrl + Z,Linux下为Ctrl + D),程序结束。这里,有两个要求: 能够获取到控制台输入的不定长数组 能够一直进行操作,直至按下输入结束键 这个问题应该是刚接触编程时就应该搞清楚的。鉴于当前的工...

2019-06-25 22:01:23 3073

原创 又踩到字符串的坑了

今天,又一次被C/C++中的字符串给坑了。当然,是自己挖的坑。听到字符串,学习C/C++的小伙伴们的第一想法是不含特殊字符的字符数组,譬如包含0-9/a-zA-Z的字符数组。维基百科对字符串的定义是:字符串(英语:string),是由零个或多个字符组成的有限序列。它是编程语言中表示文本的数据类型。而字符,维基百科是这么定义的:在计算机和电信领域中,字符(Character)是一个...

2019-05-31 22:25:02 2159

原创 CryptAcquireContext返回NTE_BAD_KEY_STATE

我们知道,通过rand函数产生的随机数安全性不高,为了保证随机数的安全性,我们一般会选择一个随机数种子,通过该种子增加破解随机数的难度。C/C++下是如下代码:#include <stdlib.h>#include <time.h>int main(){ srand((unsigned)time(NULL)); printf("%d\n",ran...

2019-05-25 14:40:33 3103

原创 Windows下动态库符号命名规则

C的名称修饰规则1. 对于使用C调用协议(__cdecl)的函数,在函数名称前加一下划线,不考虑参数和返回值2. 对于使用快速调用协议(__fastcall)的函数,在函数名称前后各加一@符号,后跟参数的长度,不考虑返回值。例如extern "C" int __fastcall Test(int n)的修饰名称为@Test@43. 对于使用标准调用协议(__stdcall)d的函数,在...

2019-05-09 21:31:27 928

原创 听说,有些网站明文存储用户密码?

前段时间爆出 Facebook 明文存储用户密码,多达 6 亿用户,而它的用户总数是 27 亿,占比 22 % 。看到这个消息,是不是很震惊?无独有偶,之前有听过很多银行系统的密码也是明文(真假没有验证)。在读书时,忘记学校网站密码后,直接打电话给 IT 人员,IT 人员让我说出可能的密码,然后他会告诉我是否正确。那时候我怀疑密码是明文存储的,虽然也没能验证。为什么怀疑是明文,怎么可能...

2019-05-06 21:13:28 2018

原创 Linux下减小动态库大小的方法

在一些业务场景下,需要对动态库的大小进行限制,主要有如下几种方法:1. 编译选项使用-Os,表示以最小化大小为优化方向2. 去除-g选项,进而去除调试信息3. 通过strip裁剪符号及调试信息4. 只导出必要符号Linux默认导出所有符号,并不仅仅导出你开放的接口!定义如下宏:#define SYMBOL_EXPORT __attribute__ ((visibilit...

2019-04-29 19:07:49 4527

原创 GDB常用调试指令

编译程序时需要加上-g,之后才能用gdb进行调试:gcc -g main.c -o main常用命令回车键:重复上一命令(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r(gdb)start:单步执行,运行程序,停在第一执行语句...

2019-04-06 10:13:23 6634

原创 栈上分配内存函数Alloca

对于堆上内存分配函数,大家都比较熟悉。对于C而言,有calloc、malloc、realloc函数;对于C++而言,有new、new[]。之前一直以为alloca函数也是堆上分配内存的函数,因为它和calloc及malloc太像了。并且,在STL源码及其他内存分配器中,都是用Alloc表示堆上内存分配,于是就习惯性的认为alloca函数也是堆上分配内存的函数。今天,问一个同事有没有栈上分配...

2019-03-21 18:49:28 2884

原创 Golang 获取执行文件所在目录

有如下几种方法:func getExecutePath1() string { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { fmt.Println(err) } fmt.Println(dir) return dir}func getExecutePath2() string {...

2019-03-17 19:28:07 5903

原创 Golang遍历目录下的文件

package mainimport ( "fmt" "io/ioutil" "log" "path/filepath")func ListDir(folder string) { files, errDir := ioutil.ReadDir(folder) if errDir != nil { log.Fatal(errDir) } for _, file :...

2019-03-17 19:18:18 1439

原创 Golang 文件读写操作

package mainimport ( "fmt" "io" "log" "os" "path/filepath" "strconv")func main() { // 获取程序目录 strDir, errDir := filepath.Abs(filepath.Dir(os.Args[0])) if errDir != nil { log.Fatal(e

2019-03-17 18:50:05 463

原创 代码中的那些偷懒

在开发新功能,维护老功能,或者重构优化前人的代码时,不知有没有踩过坑,或者觉得前人为了偷懒而使用了很多不可持续的方法。业务逐渐丰富后,代码也日益复杂。复杂的代码维护成本很高:看的时候很费时间,改的时候也战战兢兢的。所以,为了少犯错,就很有可能偷懒。看别人的代码,会发现偷懒的代码;回过头看自己的代码,也有偷懒的地方。譬如,需要对现有接口进行扩展,为了不破坏先前的功能,直接将先前接口的的代码全...

2019-03-16 22:24:54 177

原创 谈谈测试和代码质量

毕业找工作那会,有个开发的同学被分配去做测试,当时很不理解。为什么他平时都是用 Java,怎么去做测试呢?当时对测试的认知就是点点点。在工作一段时间后,对于测试依然有一定程度的偏见。为什么有偏见,还不是因为无知!人类对于不了解的东西,很容易形成偏见。当时觉得开发的功能,进行一下简单的测试就可以了,功能正常就 OK 了。也一直是这么做的,也没有出什么大问题。毕竟框架都是现成的,写写业务代码没...

2019-03-11 22:43:34 524

原创 Linux下tar.xz文件解压方法

对于tar.xz文件,有如下两种方法(假设文件是a.tar.xz):方法1:1.xz -d a.tar.xz,得到a.tar文件2. tar -xvf a.tar:对a.tar文件进行解压方法2:tar xvJf a.tar.xz其中,“.xz”是一种压缩文件格式;tar是文件打包格式。...

2019-03-07 19:07:55 389

原创 DHCP 原理及抓包分析

目录1. DHCP 简介1.1 DHCP 作用1.2 DHCP 工作机制2.  DHCP 交互流程2.1 正常交互流程2.2 租约2.3 客户端状态机2.4 参数配置3.  DHCP 报文3.1 报文类型3.2 报文格式3.3 抓包4. DHCP 中继代理1. DHCP 简介1.1 DHCP 作用DHCP(Dynamic Host C...

2019-02-26 22:44:14 4041 1

原创 通过Git更新代码到GitHub

第一步:查看当前的git仓库状态git status第二步:更新全部git add *第三步:Commitgit commit -m "更新说明"第四步:拉取当前分支最新代码git pull第五步:push到远程master分支上git push origin master 扫描二维码,关注“清远的梦呓”公众号,在手机端查看文章 ...

2019-02-11 23:28:34 209

原创 通过Git上传本地文件到GitHub

1. 安装Git2. 打开Git-Bash3. 配置用户名及邮箱4. 设置SSH key先查看是否有SSH key如果没有,那么生成一个(邮箱为github账户对应的邮箱)5. 为github账号配置ssh key将 C:\Users\Administrator\.ssh\id_rsa.pub中内容填写到Key中6. 对本地项目进行git...

2019-02-11 23:21:11 186

原创 对称加密非对称加密简介

在密码学领域,有两种基本的加密方式:对称加密及非对称加密。对称加密,顾名思义,就是解密的密钥和加密的密钥相同(单钥密码学);非对称加密,顾名思义,解密密钥与加密密钥不同。对称加密对称密码学的典型算法有:AES、Twofish, Serpent, Blowfish, CAST5, Kuznyechik, RC4, DES, 3DES, Skipjack, Safer+/++ (Bluetoo...

2019-02-01 10:01:07 528

原创 数字证书原理

证书,也叫做数字证书,是网络世界中的“身份证”。证书将持有者的身份信息和公钥关联到一起,保证公钥确实是这个证书持有者的,通过证书就可以确认持有者的身份。证书由权威的、公正的、可信任的第三方机构颁发,我们把证书的颁发机构称为CA(Certificate Authority),相当于现实生活中的公安局。为什么会有证书这个概念呢?主要是在非对称加密中,客户端需要获取服务端的公钥信息,但是如果请求...

2019-02-01 09:46:50 10444 3

原创 字符集与字符编码

目录1.  概述1.1 基本概念1.2 映射关系2.  ASCII字符集及编码3.  GBXXXX字符集及编码3.1 GB23123.2 GBK3.3 GB 180303.4 代码页4.  Big5字符集&amp;编码5.  Unicode字符集6.  UTF编码6.1. UTF-32编码6.2. UTF-16编码6.3. UTF-8编码...

2019-01-29 23:11:02 1657

转载 UDP Flood攻击

本文转载自华为企业互动社区大家好,强叔又来了!上一期,强叔给大家介绍了SYN Flood的攻击和防御,本期强叔将带领大家一起来学习一下另一种常见的流量型攻击:UDP Flood。讲UDP Flood之前,强叔还是先从UDP协议讲起。在讲SYN Flood的时候,我们知道了TCP协议是一种面向连接的传输协议。但是UDP协议与TCP协议不同, UDP是一个无连接协议。使用UDP协议传输数据之前...

2019-01-29 15:01:30 25768

转载 TCP SYN-Flood攻击

本文转载自华为企业互动社区大家好,强叔和你们又见面了!上一期强叔带着大家一起了解了单包攻击的基本防御知识,知道了单包攻击的几大类型,以及防火墙支持防御的攻击种类。但是,在现网中单包攻击只占了很小一部分比例,更多的攻击还是集中在流量型攻击和应用层攻击。本期强叔将继续为大家讲解一下现网上常见的流量型攻击。 过去,攻击者所面临的主要问题是网络带宽,由于较小的网络规模和较慢的网络速度的限制,攻击...

2019-01-29 14:46:03 7062

原创 TCP 的那些事 | RTO

文章《TCP 的那些事 | 快速重传》、《TCP 的那些事 | SACK》及《TCP的那些事 | D-SACK》讲解了TCP的快速重传机制、SACK机制以及D-SACK机制。TCP超时与重传中最重要的部分就是对一个给定连接的往返时间RTT(Round-Trip Time)的测量。由于路由器和网络流量均会变化,RTT这个时间可能经常会发生变化,如果测量出来RTT,那么发送端大致就知道需要多久进行重传...

2019-01-27 10:15:52 869

原创 NAT-T:IPsec穿越NAT之道

目录1. IPsec与NAT矛盾2.  身份确认3.  NAT-T3.1 NAT-T流程3.2 报文格式4.  地址复用4.1. 隧道模式下的冲突4.2. 传输模式下的冲突 4.3. 同一个NAT下的冲突Q And A参考资料1. IPsec与NAT矛盾在文章《IPsec》及《NAT》中介绍了IPsec及NAT的基本知识。我们知道IPsec的协议...

2019-01-24 22:28:07 19739 3

原创 IPsec介绍

目录1. IPsec概述2. 安全体系2.1 Authentication Header(AH)2.2 Encapsulating Security Payload(ESP)2.3 Security association(SA)3. 运行模式3.1 传输模式3.2 隧道模式4 Security Association(SA)4.1 SA概述4.2 SA...

2019-01-21 22:25:37 2133

golang生成的火焰图torch.svg

svg格式的火焰图,通过go-torch生成。文件可以通过浏览器打开,它对于调用图的最优点是它是动态的:可以通过点击每个方块来 zoom in 分析它上面的内容。 火焰图的调用顺序从下到上,每个方块代表一个函数,它上面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用的长短,火焰图的配色并没有特殊的意义。

2019-08-02

Building Machine Learning Projects with TensorFlow

Building Machine Learning Projects with TensorFlow,tensorflow入门书籍

2017-08-08

TensorFlow Python API documentation.pdf

TensorFlow Python API documentation,tensorflow python API接口文档

2017-08-08

OpenGL所需dll、lib以及头文件

以VS2010为例,说明如何配置OpenGl所需的环境

2015-07-03

修改过得WinHttp头文件

修改过的winhttp.h,不会和VS2010的一些都文件相冲突

2015-01-15

操作MsChart控件需要的类

这个资源包含了操作MsChart控件的几乎所有的类,使用MsChart必须的类

2014-11-27

Visual C++ 串口通信技术详解 源代码

《Visual C++ 串口通信技术详解》所有源代码,但源代码的质量很有问题

2014-11-12

CSerialPort-master

最新的串口通信类CSerialPort 类,经过不断的完善,以逐渐解决了很多问题

2014-11-12

Visual C++_Turbo+C串口通信编程实践 源代码

《Visual C++_Turbo+C串口通信编程实践》书本上所有实例的源代码,免费分享

2014-11-12

The Design and Evolution of C++简体中文版

The Design and Evolution of C++简体中文版

2014-06-26

深入浅出MFC_简体中文版_侯捷

深入浅出MFC_简体中文版_侯捷,经典的MFC教程

2014-06-26

FTP数据传输类

这个ftp数据传输类封装了ftp打开,链接,及上传下载功能

2014-05-28

空空如也

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

TA关注的人

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