![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础知识
聪明的狐狸
北漂8年,来自河北,仍在一线编程。喜欢Coding,享受编程的乐趣,擅长C/C,Python,对Linux系统开发,网络编程,服务器开发有浓厚的兴趣
展开
-
性能优化杂谈
关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充。在开始这篇文章之前,大家可以移步去看一下以前发表的《代码优化概要》,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈!但是在转载 2013-11-24 16:42:14 · 1126 阅读 · 0 评论 -
iostream 继承结构
在刚开始学习C++,第一步就是 Include 头文件,使用cin和cout函数输入输出数据,可是你知道iostream的整个体系结构吗?下图展示iostream的继承结构。原创 2014-11-01 15:57:41 · 2537 阅读 · 1 评论 -
C文件读写函数介绍
1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。 参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下: 字符串 含义 "r" 以转载 2014-10-15 15:53:58 · 653 阅读 · 0 评论 -
std::function与std::bind 函数指针
std::function与std::bind 函数指针的用法原创 2014-12-28 11:18:26 · 790 阅读 · 0 评论 -
Python 解析xml文件
python有三种方法解析XML,分别是SAX,DOM,以及ElementTree,其中ElmentTree比较容易使用,其API比较方便友好。代码可用性好,速度快,消耗内存少。xml中的元素主要有:tag,value,attribute 一个简单的python 解析xml的例子如下:Xml文件为: auto_userone原创 2015-01-25 13:29:13 · 1140 阅读 · 0 评论 -
c++三种野指针
野指针,也就是指向不可用内存区域的指针。如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃。 野指针不是NULL指针,是指向“垃圾”内存的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是野指针是很危险的,也具有很强的掩蔽性,if语句对它不起作用。 造成野指针的常见原因有三种: 1、指针变量没有被转载 2015-07-17 21:03:16 · 2638 阅读 · 0 评论 -
new 对象加括号和不加括号的区别
在new对象的时候有加上(),有不加(),不知道这个到底是什么区别?比如:[cpp] view plaincopyprint?CBase *base = new CDerived(); CBase *base = new CDeviced; [cpp] view plaincopyprint?CBase *base转载 2015-07-17 21:30:31 · 1334 阅读 · 0 评论 -
linux下的头文件 及C/C++头文件 一览表
linux下编程常用头文件一览============================================================================================== 验证程序断言 cpio归档值 字符类型 目录项 出错码转载 2015-07-18 09:56:59 · 921 阅读 · 0 评论 -
linux启动基本流程
linux启动基本流程。原创 2015-08-13 12:13:58 · 808 阅读 · 0 评论 -
KMP算法中心思想
KMP是一种高效的字符串查找算法,主要用于在主串中查找一个特定字串(模板)出现的位置(或是否出现)。 朴素字符串查找算法主要是通过逐次比较来实现的,在主串中找到一个位置I和字串起始字符一样时,便顺次比较后续字符。若匹配成功,则输出相应结果。若不匹配,则从位置I的下一个位置I+1开始比较。若主串长度为M,字串长度为N的最多需要比较M*N次。 KMP比较主要的改进是,充分利用已经比较的结果和字符串原创 2015-08-13 17:22:18 · 1339 阅读 · 0 评论 -
linux文件流与文件描述符之间的转换
linux文件流与文件描述符之间的转换1、已知文件流指针,获取对应的文件描述符 int fileno(FILE *stream); 主要应用:如果程序先前用fopen打开了一个文件,但是又想对其进行锁定操作, 例如 int fcntl(int fildes, int command, struct flock *flo转载 2015-08-14 18:11:23 · 772 阅读 · 0 评论 -
正则表达式语法总结
正则表达式定义了一套完善而复杂的语法规则,用于匹配有特定模式的字符串。在正则表达式中,大部分字符串都匹配自己(即普通字符),只有少量的字符被用于定义特殊的匹配模式语法,他们是:.^$()*+?{}[]\|。1. 点号(.)可以匹配任意的单个字符,是单字符的通配符。2. ^匹配行的开头。3. $匹配行的末尾。4. ()用于定义一个正则表达式匹配子元素(子表达式),可以被引用或者重复。原创 2015-11-22 21:33:07 · 522 阅读 · 0 评论 -
利用模板巧妙实现二级接口
在面向接口的编程中,如果只有一级接口,那调用和实现都比较简单,但是如果存在二级接口,那么实现的形式就会复杂许多,作者经过研究,发现可以使用模板巧妙实现二级接口,并且实现方法比较简练。原创 2015-12-13 17:25:50 · 825 阅读 · 0 评论 -
自己写的内存分配算法
自己写的内存分配算法,即伙伴算法,尝试在网上搜索伙伴算法,发现要么找不到,要么写的看不懂,根据原理自己实现了一个。原创 2016-04-12 18:06:20 · 621 阅读 · 0 评论 -
iconv函数详细解释
最近在使用iconv函数,感觉iconv的函数参数很奇怪。仔细研究了一下,发现iconv实际上一个返回多个值的函数。此函数利用函数参数,同时返回了好几个值,每个函数参数既是入参,也是出参。详细解释如下:iconv的原型如下: size_t iconv(iconv_t cd,char **inbuf,size_t *inbytesleft,char **outbuf,size_t *o原创 2016-04-18 18:22:45 · 10874 阅读 · 6 评论 -
一个简单的监控网络流量的脚本
一个简单的监控网络流量的脚本原创 2017-02-28 15:34:31 · 3113 阅读 · 0 评论 -
Go语言 golang 语法详解笔记
go语法大全,学习Go语言过程中记录下来的语法详解笔记,可以帮助新接触的朋友快速熟悉理解Golang,也可以作为查询手册翻阅。转载 2017-07-28 11:12:50 · 6278 阅读 · 0 评论 -
各种窗口关系
1.Pop-up窗口: 一个弹出窗口是必须具有WS_POPUP属性的窗口,弹出窗口只能是一个Top-Level窗口,不能是子窗口,弹出窗口多用于对话框和消 息框,也可以用于应用程序的主窗口, 弹出窗口可以不必具有标题栏2.Overlapped窗口: 一个重叠窗口是一个必须具有WS_OVERLAPPED属性的窗口,也就是一个重叠窗口必须具有边框,标题栏,客户区域。重叠窗口可以是一个子转载 2014-10-09 16:34:10 · 833 阅读 · 0 评论 -
自己实现的文件独占锁
自己实现File锁,怎样避免应用程序同时打开一个文件。原创 2014-11-10 17:08:37 · 2144 阅读 · 0 评论 -
windows平台没有提供的两个字符串操作函数。
在看一些开源代码时,经常看到一些字符串操作函数,这些函数在Linux平台下是有的,但在windows平台上,MS没有提供。因此在软件中不得不自己实现.原创 2014-11-07 09:48:44 · 722 阅读 · 0 评论 -
虚数的意义
有人在 Stack Exchange 问了一个问题:"我一直觉得虚数(imaginary number)很难懂。中学老师说,虚数就是-1的平方根。可是,什么数的平方等于-1呢?计算器直接显示出错!直到今天,我也没有搞懂。谁能解释,虚数到底是什么?它有什么用?" 帖子的下面,很多人给出了自己的解释,还推荐了一篇非常棒的文章《虚数的图解》。我读后恍然大悟,醍醐转载 2013-12-07 22:26:58 · 3454 阅读 · 0 评论 -
多线程经典问题-----乘客做公交车问题解答2
问题描述:乘客乘坐公交车问题,司机,乘客,售票员协同工作,通过多线程模拟三者的工作。司机:开车,停车售票员:打开车门,关闭车门乘客:上车,下车解答:通过使用CEvent 事件类,模拟三者协同工作。在解答1(点击打开链接),没有考虑乘客下车的情况,解答2考虑了乘客下车的情况。代码如下:主类和主线程如下:#pragma once#include "afxmt.h"原创 2013-12-01 19:30:34 · 2287 阅读 · 3 评论 -
多线程经典问题----考试问题
1.问题描述:1个主考官,n个学生考官和学生陆续进入教室(没有先后之分)。等待所有学生进入教室后,考官开始发考卷考官把考卷发给所有学生后,学生才开始答题,学生可以提前交卷,交完卷后即可离开教室。老师等所有学生交完卷后才能离开教室。2.问题解答:本题和乘客乘公交车问题类似,主要考察多线程的同步和互斥。主类和主线程如下:#include "afxmt.h"#de原创 2013-12-01 22:56:28 · 1272 阅读 · 0 评论 -
多线程经典问题-----乘客做公交车问题解答1
1.问题描述://车辆行驶问题,司机,乘客售票员协同工作//司机:开车,停车//售票员:打开车门,关闭车门//乘客:上车,下车解答1:通过使用CEvent 事件类,模拟三者协同工作。下面的程序只模拟了乘客上车的情况。没有考虑乘客下车。主程序如下:#define PASSENGERCOUNT 20class CPassengerBusQuestion{p原创 2013-12-01 18:47:09 · 2314 阅读 · 0 评论 -
多线程编程的几个经典问题
在最近的面试时,考察多线程编程时,除了经典的生产者-消费者,图书馆借书等问题,还遇到了以下几个考察多线程编程的经典问题,希望有时间能用C++/Python代码实现. 理发师问题:一个理发店由一个有几张椅子的等待室和一个放有一张理发椅的理发室组成。1.若没有要理发的顾客,则理发师去睡觉;2.若一顾客进入理发店,理发师正在为别人理发,且等待室有空椅子,则该顾客就找张椅子按顺序坐下;原创 2013-11-19 18:56:06 · 2330 阅读 · 0 评论 -
python 的日志logging模块学习
目录(?)[-]简单的将日志打印到屏幕通过loggingbasicConfig函数对日志的输出格式及方式做相关配置将日志同时输出到文件和屏幕logging之日志回滚通过loggingconfig模块配置日志logging是线程安全的1.简单的将日志打印到屏幕 import logginglogging.debug('This转载 2014-01-01 21:48:35 · 738 阅读 · 0 评论 -
SSL与TLS的区别以及介绍
SSL与TLS的区别以及介绍 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。 TLS:(Transport Layer Secur转载 2014-01-14 19:37:03 · 3010 阅读 · 0 评论 -
PING不通你 我也知道你在不在线!
总结:当PING不通一个IP时,再通过arp -a查看是否有该IP的MAC,才能确认该Ip到底存不存在!原因:PING不通 ICMP包被拦截,但ARP包未被拦截。 PING命令要先发ARP包,再发ICMP包。做过网络管理员的同学应该都遇到过这种情况,当判断一台PC是不是处于开机在线状态时可能最先想到的就是PING一下那台PC的IP地址,能PING通表示在线,PING不通……可能在线转载 2014-03-09 10:51:55 · 1605 阅读 · 0 评论 -
TCPIP协议概览
TCPIP协议族各种协议格式原创 2014-03-09 11:52:58 · 1936 阅读 · 0 评论 -
C++ 面试题(一) this指针
有下面的一个简单的类:class CNullPointCall{public: static void Test1(); void Test2(); void Test3(int iTest); void Test4();private: static int m_iStatic; int m_iTest;};原创 2014-03-30 10:26:30 · 1464 阅读 · 0 评论 -
如何在遍历中使用 iterator/reverse_iterator 删除元素
众所周知,在使用迭代器遍历 STL 容器时,需要特别留意是否在循环中修改了迭代器而导致迭代器失效的情形。下面我来总结一下在对各种容器进行正向和反向遍历过程中删除元素时,正确更新迭代器的用法。本文完整源码:点此查看首先,要明白使用正向迭代器(iterator)进行反向遍历是错误的用法,要不干嘛要有反向迭代器呢(reverse_iterator)。其次,根据容器的特性,遍历删除操作的用法可以分原创 2014-04-26 22:37:22 · 1071 阅读 · 0 评论 -
C语言中的time函数
zia一般有两种表示时间的方式:第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的,以time_t 类型表示。第二种以结构体的形式表示即(struct tm),共有九个元素,分别表示,同一个时间戳的struct tm会因为时区不同而不同time_t 实际上是int64类型。原创 2014-05-25 17:41:07 · 2867 阅读 · 0 评论 -
理解程序内存
内存对很多人来说感觉是个很熟悉的东西,因为我们在用VC调试程序时,很多时候都会察看内存中变量的值。但是,很多时候我们的思维也就因此局限在有源码的模块,当遇到一些跨模块或是没有源代码的Bug,我们还是无从下手。因此,很有必要我们要对整个程序内存有个比较全局性的认识,这样遇到任何问题,你都能从容面对。我这里以32位的程序为例,我们知道32位程序总共有4G内存空间,其中低2G是用户地址空间,高2原创 2014-06-01 19:32:52 · 986 阅读 · 0 评论 -
理解数组
什么是数组? 简单来说数组代表一块连续的内存,内部包含连续的一排相同的对象, 因为内存分布连续且对象大小相同,所以我们可以高效的根据索引随机访问和赋值。数组是我们平时用的最多的数据结构, 因为它很符合我们程序运行时的平坦内存布局,使用起来简单而高效。可以这样说,只要恰当的使用,数组可以满足我们工作中的大部分需要。数组包括静态数组和动态数组, C/C++语言内置支持数组, 我转载 2014-06-02 16:52:44 · 648 阅读 · 0 评论 -
C++ friend 用法简单总结
在C++中,friend是破坏封装性的,friend 的在C++语法体系是一个比较小的知识点,在开发中用的也不是很多。friend 的用法有时很容易忘记,一些陷阱经常跳进去。本文做了一个简短总结。原创 2014-09-25 11:00:22 · 5224 阅读 · 0 评论 -
C语言内存分配calloc,malloc,alloc,realloc的区别
void *calloc(size_t nobj, size_t size);calloc函数为由nobj个长度为size的对象组成的数组分配内存,并返回指向分配区域的指针;若无法满足要求,则返回NULL。该空间的初始长度为0字节 void *malloc(size_t size);malloc函数为长度size的对象分配内存,并返回指向分配区域的指针;若无法满足原创 2014-09-25 15:36:31 · 8134 阅读 · 0 评论 -
linux中内存使用原理,swap,cache,buffer的含义
linux 内存使用原理,什么是swap,cache,buffer原创 2017-09-24 17:23:39 · 1002 阅读 · 0 评论