- 博客(116)
- 收藏
- 关注
原创 Linux多路复用之select/poll/epoll实现原理及优缺点对比
Linux多路复用之select/poll/epoll实现原理及优缺点对比
2016-08-02 11:29:57
2871
转载 fopen , fread fwrite 函数读写二进制文件 问题总结
最近在解析 png 数据文件, 发现一个文件操作中容易忽略的问题,问题描述如下:在使用 fread 读二进制文件(png 图片)的时候, 发现读取到内存中的数据和 二进制文件中的数据不一致, 同样, 在 使用 fwrite 写二进制文件(png 图片)的时候, 发现写入到内存中的数据和 二进制文件中的数据和内存中的数据也不一致。 这个问题头疼了两天, 结果发现了一个很低级的错误。就是在读写
2016-06-03 22:56:46
6008
1
转载 feof()和EOF的用法—— C中文件结尾的判断
昨天突然被一位朋友问到了关于文件结尾的程序问题。在用feof()判断文件时,复制会多产生一个字符。这个问题在大一的时候,老师上课就强调过,但那时只是模糊的记得个大概,记得这个函数如果用的不对就是会出现问题,解决是要先读一下,然后再判断,具体的什么还真实忘了。而且平常经常用的EOF,所以这个问题自己并没有一个特别好的概念。现在写的C语言多了,应该能理解这个问题存在的原因。所以
2016-06-03 22:35:46
1068
原创 【Linux】CentOS下vim的配置
前言: 对于vim的配置,本人也在网上看了很多的方法,碰了很多 壁,所以就知道痛了。所以在下面给大家分享一下我如何配置vim的方法。配置环境 首先给说明下我的环境为CentOS6.5的版本,对于CentOS的配置应该都没有问题,但是是其他系统的话,可以参考,可能因为环境原因可能会发生错误哦。其他 还有一个需要说明的是,我的操作基本上是在文件夹里操作的,虽然能够简单直观的实现vim的配置,
2016-05-30 15:04:54
341
原创 《将博客搬至优快云》
由于各种原因,本人决定将博客搬迁到优快云博客,以后有需要的可以来我的新博客地址来访问:优快云链接:http://blog.youkuaiyun.com/zangyuanan320本文出自 “滴水” 博客,请务必保留此出处http://10740329.blog.51cto.com/10730329/1783940
2016-05-30 15:04:54
327
原创 【linux】linux下find指令的用法总结
前言: 先阐述下find指令是干嘛的,为什么要来研究他呢?find指令是Linux下一个很重要的操作,因为linux是一个“一切皆文件”的操作系统,find(查找文件)指令就尤为重要了,在windows操作系统下,我们查找一个文件可以直接在计算机中搜索文件,但是linux操作系统的文件是不带后缀的,同样,Linux下的find功能相对与windows来说,强大了很多。 Linux下的查找指令有
2016-05-30 15:04:43
962
1
原创 【数据结构】位图BitMap与布隆过滤器BloomFilter
首先先看一下下面这个腾讯的面试题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。 【腾讯】思路一: 最容易想到的解法就是遍历所有的40多亿个整数,然后一个一个判断。但是这个需要花费的内存是多大呢? 大家可以去算一下,这里我就直接给出结果为16G,是不是需要的空间很大啊。如果面试官给出限制条件,要你使用的空间少于多少,遍历的方法就行不通啦。思路
2016-05-30 15:04:42
2457
原创 【数据结构】【面试题】找N个数据中最大的K个数据
如果不限定条件的话,这个问题还是很好解决的,但是当我们要求时间复杂度为O(N),空间复杂度为O(1)时,问题就没那么好解决了。 简单的思路就是,创建一个大小为K=100的小堆,调整好,然后从K开始拿十万个数据一个一个跟堆头比较,如果比堆头大,就入堆,然后调整成最小堆,一直循环到第N=100000个数据。void AdjustDown(int* _a, size_t size,int i){
2016-05-30 15:04:36
454
原创 【数据结构】用模版实现大小堆、实现优先级队列,以及堆排序
一、用模版实现大小堆 如果不用模版的话,写大小堆,就需要分别实现两次,但是应用模版的话问题就简单多了,我们只需要实现两个仿函数,Greater和Less就行了,仿函数就是用类实现一个()的重载就实现了仿函数。这个看下代码就能理解了。再设计参数的时候,需要把模版设计成模版的模版参数,因为要实现大小堆嘛!当我们实现好一个大堆或者小队的逻辑后只需要用模版接收的Greater或Less类定义一个变量
2016-05-30 15:04:33
342
原创 【数据结构】堆的实现以及简单的函数
堆是什么?刚接触到这个概念估计都摸不着头脑,不知道堆是什么样个东西。简单介绍下,堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。堆结构的二叉树存储有两种情况: (1).最大堆:每个父节点的都大于孩子节点。 (2).最小堆:每个父节点的都小于孩子节点。举个例子可能好理解些,看下面:int a[] = {10,11,13,12,16,18,15,17,14,19};650) this.w
2016-05-30 15:04:30
387
原创 【数据结构】线索化二叉树中序线索化的递归写法和非递归写法
二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。 为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。所以引入了线索化二叉树。下面我们讲一下线索化二叉树中序线索化的两种实现方法: (1).递归实现中序线索化
2016-05-30 15:04:27
1487
原创 【C++】智能指针的原始写法、scoped写法、shared写法
智能指针的三种常见写法: 一、最开始的原始写法,原始写法可以理解为指针转移的方法。templateclass AutoPtr{public: AutoPtr() :_ptr(NULL) {} AutoPtr(T* ptr) :_ptr(ptr) {} ~AutoPtr() { if (_pt
2016-05-30 15:04:24
303
转载 #ifndef 与 #program once 的区别
#ifndef 与 #program once 的区别 为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__
2016-05-30 15:04:21
345
原创 U盘装系统教程
对于没有接触过装系统的同学来说或许会觉得装个系统会很难,其实并不是这样的,其实就简单的分为两大步: 一、制作U盘 二、进入设置装机只是中间比较麻烦的过程在于下载镜像文件,由于比较大的缘故,所以比较费时间,下载完后放入U盘的GHO中进入电脑设置就可以开始装系统了。 因为图片比较多,我就不写入博客中了,具体过程见附件。有很详细的教程以及所需文件的下载地址。本文出自 “滴水” 博客,请务必保留此出处
2016-05-30 15:04:18
289
原创 【C++】日期类+日期万年历+日期计算器
对于日期类,我们主要实现一下日期类的基本函数,构造,拷贝构造,运算符的重载,析构。当然这里运算符的重载需要实现的还是挺多的,如:=、、=、等#include using namespace std;class Date{public: Date(int year = 1990, int month = 1, int day = 1) { _year = y
2016-05-30 15:04:15
763
原创 【C++】菱形继承与虚拟菱形继承的对比分析
在继承中经常会遇到这种情况:有一个超类A,子类B1,B2继承了A,而类D又继承了父类B1,B2。在这种情况下如果按照我们以前的正常的菱形继承的话会有一个问题是子类C会继承两次超类A中的成员,当在C中想访问继承来自B1,B2中A的元素会出现两个问题: 问题一、数据的冗余 问题二、访问的二意性出现了这种问题那么我们该如何解决呢? C++中为了解决这个问题引入了虚拟菱形继承,那么虚拟菱
2016-05-30 15:04:12
355
原创 【C++】模版的概念、使用方法和深入了解
模板是泛型编程的基础。所谓泛型编程就是编写与类型无关的逻辑代码,是一种复用的方式。模板分为模板函数和模板类。 模板函数假设现在要实现一个比较两个数是否相等的重载函数。bool IsEqual (int left, int right){ return left == right;}bool IsEqual (const string& left , const string
2016-05-30 15:04:09
212
原创 【C语言】String类的写时拷贝
有了引用计数器以后为什么还有写时拷贝呢? 因为当我有两个String类s1,s2都是指向同一块空间“helle”,当我想将s1修改成“hello”时,我只想将s1指向的空间修改,而不想将s2修改,显然引用计数器不能解决这个问题,所以就有了更完善的写法--写时拷贝。写时拷贝class String{public: String(char* str = "") :_s
2016-05-30 15:04:06
393
原创 【C语言】【面试题】C++中String类引用计数器的浅拷贝写法与深拷贝写法
Linux操作下String类的实现--引用计数器 1.引用计数器写法一写法一个人比较喜欢叫他双指针法,因为他是在类里面创建了两个指针来实现的一个是指针_str,另外一个是用来保存指向同一块空间个数的指针_pRefCount.class String{public: String(char* str = "") :_str(new char[strlen(str)
2016-05-30 15:04:03
323
原创 【C语言】【面试题】C++中String类浅拷贝,深拷贝的传统写法与现代写法
C++ 的一个常见面试题是让你实现一个 String 类,在这我把String类的各种写法写了一下 1.浅拷贝#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;//1.浅拷贝class String{public: String(char* str) :_str(str) {}
2016-05-30 15:03:58
401
原创 【C语言】【笔试题】使用回调函数编写冒泡排序,可以排序整形数组,也可以排序字符串
#define _CRT_SECURE_NO_WARNINGS 1#include #include #include void int_swap(const void *a, const void *b){ int tmp = *(int *)a; *(int *)a = *(int *)b; *(int *)b = tmp;}void char_swap
2016-05-30 15:03:57
359
原创 【C语言】【指针相关知识小结】
1.int *p = NULL 和 *p = NULL的区别 int *p = NULL指的是将一个指针初始化为NULL,具体过程为 int *p; p = NULL。2.&a与a的区别 int a[5]; int *p = &a;//?? int *q = a;//?? 这样的代码对吗?解释:&a得到数组的地址。a表示数组首元素的首地址。&a的a的值一样,两
2016-05-30 15:03:54
290
原创 【C语言】【笔试题】模拟实现memcmp
#include #include #include int my_memcmp1(const void *p1, const void *p2, size_t count)//方法1{ assert(p1); assert(p2); char *dest = (char *)p1; char *src = (char*)p2; while (cou
2016-05-30 15:03:51
473
2
原创 【C语言】【笔试题】模拟实现memset
#include #include #include void my_memset(void *str, char n, size_t count){ char *dest = (char *)str; size_t i = 0; for (i = 0; i < count; i++) { *(dest + i) = n; }}
2016-05-30 15:03:48
310
原创 【C语言】【面试题】【笔试题】模拟实现strncpy
#include #include #include char *my_strncpy(char *dest,const char *src, int len){ char *ret = dest; while (len--) { *dest++ = *src++; } *dest = '\0'; return ret;
2016-05-30 15:03:45
289
原创 【C语言】【面试题】【笔试题】模拟实现strncmp
#include #include #include int my_strncmp(const char *dest, const char *src, int len){ assert(dest); assert(src); while (len && (*dest == *src)) { dest++; src++;
2016-05-30 15:03:42
245
原创 【C语言】【笔试题】模拟实现strncat
#include #include #include char *my_strncat(char *dest, const char *src, int len){ char *ret = dest; while (*dest) { dest++; } while (len--) { *dest = *s
2016-05-30 15:03:39
214
原创 【C语言】编写一个函数reverse_string(char * string)(递归实现
#include #include void reverse_string(char * string){ string++; if (*string!='\0') { reverse_string(string); } string--; printf("%c", *string);}int main(){
2016-05-30 15:03:36
560
原创 【C语言】【面试题】【笔试题】写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
#include#includeint sumfun(int num){ int m = 0; int sum = 0; if (num!=0) { m = num % 10; num = num / 10; sum=sumfun(num)+m; } return sum;}int main(
2016-05-30 15:03:33
758
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人