自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CSDN_dzh的博客

点滴记录

  • 博客(62)
  • 资源 (15)
  • 收藏
  • 关注

原创 C\C++面试知识点总结(超全)

指针和数组在访问内存方面,指针和内存几乎是相同的。不同点是:指针是以地址作为值的变量,而数组名的值是一个特殊的固定地址(可看作是指针常量 ),不能改变其值联合体union当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体union对联合体而言:1)联合体是一个结构;2)它的所有成员相对于基地址的偏移量都为0,即所有成员的首地址都是一样的3)此结构空间要大到...

2018-11-08 10:25:15 4899 1

原创 gdb入门实例1——单步执行和跟踪函数调用分析实战

测试代码#include <stdio.h>int add_range(int low, int high) { int i, sum; for (i = low; i <= high; ++i) { sum += i; } return sum;}int main (int argc, char *argv[]) { int result[100...

2018-11-30 10:09:57 1072

原创 gdb观察点相关2——设置读观察点和读写观察点

一、设置读观察点1.1 设置读观察点测试代码#include <stdio.h>#include <pthread.h>#include <unistd.h>int a = 0;void *thread1_func(void *p_arg) { while (1) { printf(&am

2018-11-29 13:20:38 973

原创 gdb观察点相关1——设置观察点以及设置观察点只对特定线程生效

一、设置观察点1.1 设置观察点测试代码#include <stdio.h>#include <pthread.h>#include <unistd.h>int a = 0;void *thread1_func(void *p_arg) { while (1) { a++; slee

2018-11-29 13:05:59 709

原创 gdb断点相关3——临时断点、条件断点、忽略断点

一、临时断点1.1临时断点测试代码#include <stdio.h>#include <pthread.h>typedef struct { int a; int b; int c; int d; pthread_mutex_t mutex;}ex_st;int main (int argc, char *argv[]) { ex_st ...

2018-11-29 12:26:54 4730 1

原创 gdb断点相关——在行号打上断点以及保存设置的断点

测试代码#include <stdio.h>int func() { return 3;}int main (int argc, char *argv[]) { int a = 0; a = func(); printf("%d\n", a); return 0;}测试过程在打完一

2018-11-29 11:52:28 794

原创 gdb函数相关8——向上或向下切换函数堆栈帧

测试代码#include <stdio.h>int func1(int a) { return 2 * a;}int func2(int a) { int c = 0; c = 2 * func1(a); return c;}int func3(int a) { int c = 0; c = 2 * func2(a); return c;}int ...

2018-11-28 21:20:34 2622

原创 gdb函数相关7——选择函数堆栈帧

测试代码#include <stdio.h>int func1(int a) { return 2 * a;}int func2(int a) { int c = 0; c = 2 * func1(a); return c;}int func3(int a) { int c = 0; c = 2 * func2(a); return c;}int ...

2018-11-28 21:12:29 420

原创 gdb函数相关6——打印尾调用堆栈帧信息

测试代码#include <stdio.h>void a() { printf("Tail call frame\n");}void b() { a();}void c() { b();}int main (int argc, char *argv[]) { c(); return 0;}测试过程当一个函数最后一条指令

2018-11-28 20:52:21 435

原创 gdb函数相关5——打印函数堆栈帧信息

测试代码#include <stdio.h>void func(int a, int b) { int c = a * b; printf("c = %d\n", c);}int main (int argc, char *argv[]) { func(1, 2); return 0;}测试过程使用gdb调试程序时,可以使用info ...

2018-11-28 20:36:25 1099

原创 gdb函数相关4——直接执行函数

测试代码#include <stdio.h>int global = 1;int func() { return (++global);}int main (int argc, char *argv[]) { printf("%d\n", global); return 0;}测试过程调试程序时,可以使用call或者print命令直...

2018-11-28 20:28:12 4059

原创 gdb函数相关3——退出正在调试的函数

测试代码#include <stdio.h>int func() { int i = 0; i += 2; i *= 10; return i;}int main (int argc, char *argv[]) { int a = 0; a = func(); printf("%d\n", a); re...

2018-11-28 20:22:52 6068

原创 gdb函数相关2——是否进入带调试信息的函数

测试代码#include <stdio.h>int func() { return 3;}int main (int argc, char *argv[]) { int a = 0; a = func(); printf("%d\n", a); return 0;}测试过程使用ne

2018-11-28 20:01:38 361

原创 gdb函数相关1——列出函数的名字

测试代码#include <stdio.h>#include <pthread.h>#include <unistd.h>void *thread_func(void *p_arg) { while (1) { sleep(10); }}int main (int argc, char *argv[]) { pthread_t

2018-11-28 19:49:23 4538

原创 刷题笔记15——二叉树的镜像(递归与非递归)

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。方法1:递归/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {pub...

2018-11-27 09:33:29 175

原创 刷题笔记14——树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析要查找树A中是否存在和树B结构一样的子树,可分成两步:第一步在树A中找到和B的根节点的值一样的结点N,其实就是树的遍历第二步再判断树A中以N为根结点的子树是不是包含和树B一样的结构/*struct TreeNode { int val; struct TreeNode *le...

2018-11-26 19:51:53 178

原创 二叉搜索树代码实现——查找、插入和删除

二叉搜索树的基本性质二叉搜索树是一棵二叉树,可以为空,如果不为空,有如下的性质(1)非空左子树的所有键值小于其根结点的键值(2)非空右子树的所有键值大于其根结点的键值(3)左右子树都是二叉搜索树基本子函数1)树的节点定义2)创建二叉搜索树3)二叉搜索树关键字的查找(递归与非递归)基本思想:如果元素的值大于要查找的值,就到左子树中查找如果元素的值小于要查找的...

2018-11-23 10:25:47 3822 1

原创 二叉树代码实现——创建、先序,中序和后序遍历(递归和非递归方式),层序遍历及有关的特性

基本子函数1)树的节点定义2)创建二叉树3)二叉树的递归遍历3.1 先序遍历(根->左子树->右子树)3.2 中序遍历(左子树->根->右子树)3.3 后序遍历(左子树->根->右子树)4)二叉树的非递归遍历

2018-11-22 19:44:15 1238

原创 C++小知识——tuple的使用

一、为什么使用tupletuple可以存放多个不同类型的数据,是对pair的泛化可以作为函数的返回值,实现函数返回多个值总的来说和pair的使用差不多,只不过pair访问元素时是通过.first和.second来访问二、使用tuple1)头文件和命名空间使用tuple需要包含头文件tuple,使用命名空间std2)创建tuple这里给出三种方式:3)tie拆开tu...

2018-11-15 22:41:09 831

原创 Linux下gdb调试

一、Part11.1 测试代码#include <stdio.h>int g_var = 0;int add(int a, int b) { printf("add callad, a: %d, b: %d \n", a, b); return a + b;}int main(int argc, char *argv[]) { int n = ...

2018-11-15 17:09:14 271

原创 网络编程——19. 制作HTTP服务器端

19.1 HTTP概要HTTP(Hypertext Transfer Protocol,超文本传输协议)服务器端,即Web服务器端理解Web服务器端基于HTTP协议,将网页对应文件传输给客户端的服务器端Hypertext(超文本传输协议)是可以根据客户端请求而跳转的结构化信息例如通过浏览器访问某主页时,首页文件将传输到浏览器并展现给大家,点击鼠标跳转到任意页面。这种可跳转的文本称为...

2018-11-14 22:33:47 493

原创 网络编程——18. 多线程服务器端的实现(2)

服务器端#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <signal.h>#include <sys/wait.h&am

2018-11-14 21:30:19 247

原创 网络编程——18. 多线程服务器端的实现(1)

由于Web服务器端协议本身具有的特点,经常需要同时向多个客户端提供服务。因此,人们逐渐舍弃进程,转而开始利用更高效的线程实现Web服务器端18.1 理解线程的概念引入线程的背景多进程模型与select或epoll相比的确有自身的优点,但同时也有问题:1。创建进程的过程会带来一定的开销2。为了完成进程间数据交换,需要特殊的IPC技术3。经常发生“上下文切换”:运行程序前需要将相应进...

2018-11-14 21:24:50 598

原创 网络编程——17. 优于select的epoll

select函数实现IO复用,但不适合以Web服务器端开发为主流的现代开发环境17.1 epoll理解及其应用基于select的IO复用技术速度慢的原因不合理的两点:1。调用select函数后常见的针对所有文件描述符的循环语句2。每次调用select函数时都需要向该函数传递监视对象信息——致命弱点。select函数的优点有两点:1。服务器端接入者少2。程序应具有兼容性...

2018-11-14 15:33:00 164

原创 网络编程——16. 关于IO流分离的其他内容

流,指数据的流动。比如调用fopen函数打开文件后可以与文件交换数据,就说fopen函数调用后创建了“流”16.1 分离IO流2次IO流分离第一种是TCP IO过程分离。它调用fork函数复制出1个文件描述符,以区分输入和输出中使用的文件描述符,分开了2个分拣描述符的用途。好处是:通过分开输入过程和输出过程降低实现难度与输入无关的输出操作可以提高速度第二种是通过2次fdo...

2018-11-14 11:28:57 204

原创 网络编程——15. 套接字和标准IO

15.1 标准IO函数的优点1。 标准IO函数具有良好的移植性,这些函数都是按照ANSI C标准定义的2。标准IO函数可以利用缓冲提高性能创建套接字时操作系统会准备IO缓冲,此缓冲在执行TCP协议时发挥着重要的作用。若使用标准IO函数,将得到额外的另一缓冲的支持可以看到,使用标准IO函数传输数据时,经过两个缓冲。例如通过fputs函数传输字符串“hello”,首先将数据传递到标准...

2018-11-14 10:05:54 440

原创 软件安装——Ubuntu14.04安装MySQL及其基本使用

安装sudo apt-get install mysql-server然后出现这里我就设置我的Ubuntu登录密码了sudo apt-get install mysql-clientsudo apt-get install libmysqlclient-dev检查是否安装成功sudo netstat -tap | grep mysql使用1)登录mysql数据库mys...

2018-11-13 23:30:15 211

原创 网络编程——14. 多播与广播

假如要向1w名用户发送数据:如果基于TCP提供服务,则需要维护1w个套接字连接即使基于UDP提供服务,也需要1w次数据传输像这样向大量客户端发送相同数据时,也会对服务器端和网络流量产生负面影响。14.1 多播多播方式的数据传输是基于UDP完成的,可以向多个主机传递数据多播的数据传输方式及流量方面的优点特点如下:多播服务器端针对特定多播组,只发送1次数据即使只发送1次数...

2018-11-13 22:55:53 340

原创 网络编程——13. 多种IO函数

13.1 Linux中的send & recvsendrecv这两个函数的最后一个参数是收发数据时的可选项。可以利用位或运算(|)同时传递多个信息。MSG_OOB用于发送“带外数据”紧急消息。优先处理。发送例子接收例子编译并运行上面的send和recv(./send 127.0.0.1 9190 ./recv 9190)结果...

2018-11-13 22:05:15 189

原创 刷题笔记13——合并两个排序的链表(图文说明)

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。方法1:使用vector保存,再将元素存到新链表中① 首先有几种特殊情况,需要返回对应的值思路:考虑一般的情况这里为了避免去创建结点,想了一个办法:就是让新链表的表头指向pHead1,然后链表1到头后再将pHead2连接上去,这样,在后面赋值的时候就可以一一对应起来。② 取...

2018-11-13 19:33:53 327

原创 刷题笔记12——单链表反转(三种方法,图文说明)

题目描述输入一个链表,反转链表后,输出新链表的表头。方法1:就地反转链表思路如下:初始化好的,假如我们要让q指向p,那么q的下一个结点就没办法找到了,就会出现断链的情况,如图所以,在每次循环的时候,都额外需要一个指针r,去指向q的下一个结点此时开始反转,让后一节点链接前一结点开始第二次循环,此时r又可以指向q的下一结点。/*struct ListNode ...

2018-11-13 13:06:39 300 1

原创 刷题笔记11——输出链表倒数第k个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。方法1:两次遍历链表首先把头结点赋值给P,如果头结点不为零,则从0开始计算链表的长度,不断让其指向下一个结点。进而得到链表的表长。可能链表长度会小于K,所以要判断一下然后用表长得到倒数第k个数,再遍历一次链表即可/*struct ListNode { int val; struct ListNode *next; L...

2018-11-12 19:54:45 224

原创 网络编程——12. IO复用

讨论并发服务器的第二种实现方法——基于IO复用的服务器端构建。12.1 基于IO复用的服务器端多进程服务器端的缺点和解决方法为构建并发服务器,只要有客户端连接请求就会创建新进程。。但并非十全十美,这需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所以相互间的数据交换也要求采用相对复杂的方法。能不能不创建进程的同时向多个客户端提供服务呢可以,就IO复用复用技术在...

2018-11-12 15:05:57 171

原创 网络编程——11. 进程间通信

11.1 进程间通信的基本概念进程间通信意味着两个不同进程间可以交换数据,为了完成这一点,操作系统中应提供两个进程可以同时访问的内存空间。对进程间通信的基本理解只要有两个进程可以同时访问的内存空间,就可以通过此空间交换数据。但是,进程具有完全独立的内存结构。就连通过fork函数创建的子进程也不会与父进程共享内存空间。此时,进程间通信只能通过其他特殊方法完成。通过管道实现进程间通信...

2018-11-12 09:07:56 267

原创 网络编程——10. 多进程服务器端(2)

10.3信号处理现在,已经知道了子进程如何创建和销毁。那么,有一个问题:子进程究竟什么时候销毁?父进程往往很忙,因此不能只调用waitpid以等待子进程的终止呀。向操作系统求助子进程终止的识别主体是操作系统,若操作系统能告知父进程说它的子进程终止了。那么父进程就能放下暂时的工作,处理子进程终止的事情。引入信号机制:在特定事件发生时由操作系统向进程发送的消息,另外,为了响应该消息...

2018-11-11 23:49:38 207

原创 网络编程——10. 多进程服务器端(1)

10.1 进程概念及其应用可以构建按序向第一个客户端到第一百个客户端提供服务的服务器端。当然,第一个客户端不会去抱怨,但是如果每个客户端的服务时间都要0.5s,那第100个客户端就会疯狂抱怨了。并发服务器端的实现方法即使有可能延长服务时间,也有必要改进服务器端,使其同时向所有发起请求的客户端提供服务,以提高平均满意度。向多个客户端提供服务是一种有效利用CPU的方式接下来讨论...

2018-11-11 20:32:48 333

原创 网络编程——9. 套接字的多种可选项

9.1 套接字可选项和IO缓冲大小套接字除了数据通信以外,还有其他不同的特性可以根据实际需要进行更改。套接字多种可选项1)套接字多种可选项2)getsockopt & setsockopt比如想用SOL_SOCKET、名为SO_TYPE的可选项查看套接字类型int tcp_sock = socket(PF_INET, SOCK_STREAM, 0); int sock...

2018-11-11 10:42:49 193

原创 网络编程——8. 域名(Domain Name System)及网络地址

8.1 域名系统DNSDNS是对IP地址和域名进行相互转换的系统,其核心是DNS服务器。什么是域名提供网络服务的服务器端也是通过IP地址区分的。但这么一来会以非常难记的IP地址形式交换服务器端地址信息。因此,将容易记、易描述的域名分配并取代IP地址。DNS服务器我们常输入网址而非IP地址,就像访问Naver网站,输入www.naver.com和222.122.195.5...

2018-11-09 22:58:23 458

原创 网络编程——7. 优雅地断开套接字连接

之前的方法不够优雅是因为,我们直接调用了close或closesocket函数单方面断开连接。7.1 基于TCP的半关闭TCP中的断开连接过程比建立连接过程更重要,因为连接过程一般不会出现变数,但断开过程有可能发生预想不到的结果。单方面断开连接带来的问题假如两台主机正在双向通信。当主机A发送完最后的数据后,调用close函数断开了连接,之后主机A再也无法接收主机B的传输数据。断...

2018-11-09 21:57:54 339

原创 网络编程——6. 基于UDP的服务器端/客户端

6.1 理解UDPUDP套接字的特点跟寄信一样,我写好名字和地址,贴上邮票寄出去就好了。邮寄过程的丢失或者损坏我都没办法保证,是一种不可靠的传输方式。但相比TCP,虽然可靠性差一些,但比TCP简洁一些,速度也更快一些(在每次交换的数据量越小的情况下)。。TCP和UDP的差异只在于流控制机制:TCP在不可靠的IP层进行流控制,而UDP缺少这种流控制机制。6.2 实现基于UDP的...

2018-11-09 21:29:27 360

OpenCV3 + contrib + ippicv

OpenCV3 + contrib + ippicv OpenCV3 + contrib + ippicv

2018-11-12

数据库系统概念(原书第六版)——原整版带书签

数据库系统概念(原书第六版)——原整版带书签

2018-11-12

图解HTTP\TCPIP

图解HTTP,图解TCPIP

2018-11-12

effective_C++、STL源码剖析(中文完整版)、深度探索C++对象模型

effective_C++、STL源码剖析(中文完整版)、深度探索C++对象模型 effective_C++、STL源码剖析(中文完整版)、深度探索C++对象模型

2018-11-12

directshow

directshow+opencv双摄像头directshow+opencv双摄像头

2018-07-22

opencv相机标定程序

opencv相机标定opencv相机标定opencv相机标定opencv相机标定

2018-05-04

opencv调用摄像头并截图保存

opencv调用摄像头并截图保存opencv调用摄像头并截图保存opencv调用摄像头并截图保存

2018-05-04

cmake-3.4.0-rc3-win32-x86.exe

cmake-3.4.0-rc3-win32-x86.exe cmake-3.4.0-rc3-win32-x86.exe ) cmake-3.4.0-rc3-win32-x86.exe ) cmake-3.4.0-rc3-win32-x86.exe )

2018-05-03

基于opencv的SVM分类,三类

基于opencv的SVM分类,三类。基于opencv的SVM分类,三类。

2018-01-05

利用面积或周长进行轮廓筛选

opencv利用面积或周长进行轮廓筛选利用面积或周长进行轮廓筛选

2017-12-03

opencv_findcontours函数测试

opencv_findcontours函数父子,层级测试,opencv_findcontours函数父子,层级测试

2017-12-03

opencv3.1 ubuntu下安装包

opencv3.1 ubuntu下安装包opencv3.1 ubuntu下安装包opencv3.1 ubuntu下安装包

2017-12-02

ubuntu下opencv安装包

linux下opencv安装包安装包安装包安装包安装包安装包安装包安装包

2017-12-02

32x32的icon图标

32x32的icon图标,用于MFC按钮美化,包含灯泡\方向好多等等icon图标

2017-12-01

CButtonST类 按钮美化需要的BCMenu和BtnST

CButtonST类 按钮美化需要的BCMenu和BtnST,按钮美化需要的BCMenu和BtnST,帮助你美化你的MFC程序

2017-12-01

空空如也

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

TA关注的人

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