- 博客(99)
- 资源 (1)
- 收藏
- 关注
原创 csdn博客
这个csdn账号已经很久没有使用了,今天登上来发现了好多留言,所以在此申明一下。我重新申请了csdn博客账号http://blog.youkuaiyun.com/ONEDAY_789,现在这个博客账号停止一切更新。如果有什仫疑问可以关注上面那个账号私信我。
2018-01-29 10:36:43
546
原创 数组中出现次数超过一半的数字
剑指offer面试题29~数组中出现次数超过一半的数字一.问题描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。二.问题分析刚开始看到这道问题的时候,我就想如果这个数组是有序的就好了,那仫在一个数组中出现次数超过数组长度一半的数字一定是中
2017-04-19 16:06:27
1093
原创 顺时针打印矩阵
今天在牛客网的剑指offer上刷了一道顺时针打印矩阵的题目,觉得很有意思,就写下来分享了,题目是这样描述的:一.题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。二.题目分析用左上和右
2017-04-18 20:57:31
1069
原创 进程间通信之消息队列
对于进程我们知道一个进程拥有独立的用户地址空间,在一个进程中的全局变量在另一个进程中是看不到的,那仫进程间是如何通信的呢?在进程与进程间的通信必须要经过内核,在内核中开辟一块缓冲区,其中的一个进程把数据从用户空间拷贝到内核缓冲区,另一个进程则从该内核缓冲区中把数据读走,内核提供的这种机制叫进程间通信(IPC)。在这篇文章中主要提到的是进程间通信的第一种方式-消息队列。 1.什仫是消息队列?
2017-03-10 23:16:33
2011
1
原创 路由表的建立算法和有关的刷新协议
在这篇文章中主要解决的就是路由表的建立和刷新机制,那仫什仫是路由表呢? 路由表就是路由器与其它互联网网络设备上存储的一张二维表,是用来反映网络结构的数据集,是数据在互联网上传输的关键。路由表的功能就是为数据包指明去往某信宿应该采用哪条路径。 一.路由表的结构 在了解了路由表的作用之后,那仫一张基本的路由表由哪些条目组成呢?如下图所示: 1).信宿地址:为目标网
2017-03-06 20:55:29
7913
1
原创 TCP协议学习总结
我们知道在TCP/IP模型中,有时也叫DoD(Department of Defense)模型,TCP/IP简化OSI的七层模型为四层,由下而上分别为:网络接口层,网际层,传输层和应用层。而今天我学习的就是传输层的TCP协议(传输控制协议)。 一.TCP协议简介 TCP是TCP/IP协议栈中的传输层的协议,TCP协议又叫传输控制协议(Transport Control Prot
2017-03-05 22:09:58
8753
1
原创 gdb调试多线程
下文参考以下链接:http://www.cnblogs.com/xuxm2007/archive/2011/04/01/2002162.html首先先介绍多线程调试的基本命令: 1.info threads,显示当前可调试的所有线程。每个线程会有gdb为其分配的ID,后面的操作会用到这个ID。前面带'*'号的是当前正在调试的线程。 2.thread ID,切换当前调试的线程为指定ID的
2017-03-03 17:30:48
21461
2
原创 gdb调试多进程
gdb是linux操作系统中常见的调试工具,在这篇文章中主要介绍gdb调试多进程的几种方法。 其实在Linux系统中并没有对多进程提供直接支持。例如,用gdb调试一个进程,如果该进程fork/vfork了子进程,gdb会继续调试该进程,子进程并不受任何影响。如果我们在子进程的代码处设置断点,子进程会收到SIGTRAP(5号信号,可以在linux系统中使用kill -l查询信号量)并终止,无
2017-03-03 15:16:06
3918
原创 读者_写者模型
一.读者_写者模型 我们知道在一些程序中存在读者写者问题,就是对某些资源的访问会存在两种可能的情况:一种就是写操作,写操作是可以独占资源的,也就是具有排他性;另一种情况就是读操作,在读操作中可以有多个资源并发的去访问某种资源,它的访问方式是共享的。这种模型是从对文件的读写操作中总结出的一种模型。 1.在读者和写者的这种模型中,存在3种关系,他们是: 1).读者和读者之间,读
2017-02-24 13:23:51
1149
原创 线程安全与不可重入函数
一.什仫是不可重入函数? 要理解什仫是不可重入函数,首先要了解什仫是重入,先假设这样一种情况:如果一个函数被不同的执行流程调用,就有可能在上一次调用还没有完成时再次进入该函数,这就叫重入。假设一下如果满足上述条件的函数具有全局变量或者是静态的局部变量,会出现什仫情况呢?下面来看一个关于全局链表头插的情况: 由上图可知当一个函数访问一个全局链表,就有可能因为重入而造成丢
2017-02-24 12:18:11
2465
原创 浅析linux下的条件变量
条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)
2017-02-20 15:38:37
9125
原创 linux下的静态库和动态库
linux下的库有两种:静态库和动态库(共享库),那仫他们的区别是什仫呢? 静态库和动态库的区别? 1.静态库:这类库的名字一般是"libxxx.a",利用静态库编译生成的文件比较大,因为在编译链接的时候所有使用到的函数库都会被加载到目标文件中。这种处理方式的优点是编译后的执行程序不需要外部函数库的支持,同样的这种处理方式既是它的优点,同时也是它的缺点,那就是如果静态函数库改变了此时
2017-02-17 23:03:21
766
原创 文件描述符&文件指针
一.文件描述符(file descriptors 简称fd) 在linux操作系统中打开或者创建一个文件就会获得文件描述符,那仫什仫是文件描述符呢?我们知道在linux下一切皆文件,文件描述符是OS为了高效的管理已经被打开的文件所创建的一个索引,它是一个很小的正整数,所有执行I/O操作的系统调用都是通过文件描述符来实现的。 我们知道一个进程的创建一定会产生对应的
2017-01-19 17:43:05
2072
原创 经典的大数据问题
随着信息的高速发展,越来越多的数据信息等待处理,如何快速的从这些海量数据中找到你所需要的数据呢?这就是大数据的处理问题,下面我对几个经典的大数据问题进行分析~~~~一. 设计算法找到每日访问百度出现次数最多的IP地址? 分析:将所有的IP逐个写入到一个大文件中,因为当IP地址采用点分十进制的方式表示的时候是32位的,所以最多存在2^32个IP。可以采用映射的方式,比如模1000,将
2017-01-17 19:10:38
3107
原创 linux中的PCB---task_struct
说起PCB相信学过操作系统的童鞋都知道这是进程控制块,是用来描述进程基本信息的数据结构,今天我就从linux下的task_struct这个类似PCB的概念来理解什仫是PCB?以及PCB存在什仫样的基本信息? 要了解PCB,首先需要了解什仫是进程?一.进程的概念 在之前学过的操作系统课本上是这样描述进程的,进程是程序的一次动态执行的过程,进程=程序+数据+PCB(这样官方的描述真的
2017-01-17 15:42:25
4776
原创 vim的几种模式&快捷键
一.vim的模式 基本上vim可以分为三种模式:命令模式,插入模式和底行模式,其实vim有多种模式,我们只需要掌握这三种即可。 1.命令模式 用vim 打开一个文件刚开始进入的就是命令模式,在这个模式下我们可以控制光标的移动,字符,字或者行的删除,移动复制某段区域,在该模式下可以进入插入模式也可以进入底行模式。 2.插入模式 在
2017-01-01 14:05:24
11215
原创 linux中实现一个简单的进度条
相信大家都用计算机或者手机下载过视屏或者游戏,那仫对于网速这个概念相信大家都不陌生,而我今天模拟实现的进度条就是来模拟实现类似加载或者拷贝文件时速度的显示。 要了解进度条首先需要了解的是缓冲区的原理,下面先来看一个简单的栗子(以下都是在linux操作系统下): sleep在linux下的时间量级为秒,sleep在window下的时间量级为秒,Sleep在window下的时间量级
2016-12-31 21:55:02
3417
转载 linux下的粘滞位
问:文件的粘滞位(sticky)位是作什么用的? 答: 普通文件的sticky位会被linux内核忽略,目录的sticky位表示这个目录里的文件只能被owner和root删除 粘滞位(Sticky bit) 如果用户对目录有写权限,则可以删除其中的文件和子目录,即使该用户不是这些文件的所有者,而且也没有读或写许可。粘滞位出现执行许可的位置上,用t表示,设置了该位后,
2016-12-31 11:54:41
589
原创 linux下的find命令
find命令 在linux操作系统中,find命令用于在目录文件中搜索文件,并执行指定的操作,也用于辨识文件类型,find命令提供了相当多的查找条件,功能很强大。在不指定查找目录的情况下,find会在对整个系统进行遍历,即使系统中含有网络文件系统,find命令在该文件系统中同样有效。 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花
2016-12-31 11:31:20
949
原创 linux下的stat命令查看文件系统的时间
文件系统的三个时间> 对于window操作系统相信大家都不陌生,如果我们在window下创建一个文件,window操作系统就会对这个文件产生相应的描述信息,这个文件存在创建时间,修改时间和访问时间.那仫在linux操作系统下新建一个文件是不是也会出现相应的描述信息呢? 答案是肯定的,只是在linux系统下是没有该文件的创建时间的,只有访问时间,修改时间和状态改动时间,具体情况分析
2016-12-25 14:33:10
2284
原创 一道关于下标排序的金山笔试题
有这样一道笔试题它是这样描述的:对一个数组按照给定下标排序,仅使用两两交换的方式,要求尽可能少的额外空间。栗子:原数组:A B C D E,假若它的排序下标为:3 0 1 4 2,那仫排序后为 D A B E C。 刚开始看到这道题,我想了一种最简单的实现方式就是重新开辟和数组pArr一样大的空间,通过遍历pPos将对应元素放入新开辟的数组空间中,最后再将新开辟数组中的内容放入数组pAr
2016-12-18 11:58:01
498
原创 一个简单的内存池
为什仫要使用内存池? 1.通常我们用new/delete和malloc/free来管理内存,可能会需要频繁的调用内存,减少运行时间,增加效率. 2.避免内存碎片传统的new/delete的弊端> 1.分配内存时要查看空闲分区表,根据一定的算法来分配,比如最佳适应算法,最差适应算法...,然后更新空闲分区表.释放的时候,也需要在空闲分区表中加入该释放的内存,如
2016-12-05 17:39:05
1041
原创 避免死锁的银行家算法
死锁的定义> 如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那仫该组进程就是死锁的.产生死锁的必要条件> 1).互斥条件:进程对所分配到的资源进行排它性使用,即在一段时间内,某资源只能被一个进程占用。如果此时还有其他进程请求该资源,则请求资源只能等待,直至占有该资源的进程用毕释放. 2).请求和保持条件:进程已经保持了至少一个资源,但又提
2016-12-04 17:17:03
23790
3
原创 排序算法之计数&基数排序
计数排序> 给定一组待排序的数据,找到这组数据中的最大值,然后开辟一个最大值加1的数组,用memset初始化为全0,然后再次遍历原数组,使得这个新开辟的数组中存储的是该数字出现的次数,此时只需要将新数组的内容写入原数组即可. 我们发现计数排序其实利用的是哈希的思想来统计次数,是一种非比较的排序,它的时间复杂度为O(N+范围),因为计数排序是一种以空间换取时间的
2016-12-03 10:52:32
849
原创 排序算法之归并排序
归并排序> 之前曾经实现过堆排序,它用到了完全二叉树,但是堆的设计本身就是比较复杂的,而今天要实现的归并排序同样的也用到了完全二叉树的思想,这种思想比堆排序较为简单. 归并排序是利用归并的思想实现的排序算法.它的思路是:我们将具有n个序列的无序的数组序列两两合并排序后再合并,最终获得了一个有序的数组.归并排序的实现也极其简单: 1).将这个数组分成两个区间.[st
2016-11-28 21:52:30
1042
原创 你到底有多少个朋友圈?
有这样一道面试题它是这样描述的:假设有n个人m对好友(存于二维数组r),如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈? 例:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1,2,3属于同一个朋友圈,4,5属于同一个朋友圈.结果为两个朋友圈
2016-11-28 20:30:37
781
原创 排序算法之快速排序的多种版本
快速排序 快速排序相对于其他的排序算法是较为快速的一种排序算法,主要体现在它的时间复杂度上.它的主要思想是:先选取一个值做关键字,通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录均比关键字小,另一部分记录均比关键字大,则可分别对这两部分记录继续进行排序,以达到整个有序的目的. 因此快速排序中最重要的就是划分区间,在下文的实现中我将介绍三种类型的单趟排序. 一.左
2016-11-27 22:28:02
695
原创 如何制作简易菜单?
实现一个菜单组件包括下拉菜单和弹出菜单,实现框图如下: 创建下拉菜单的基本过程: 1).新建一个JFrame框架.JFrame frame=new JFrame(); 2).新建一个菜单栏:菜单栏是窗口中的主菜单,用来包容一组菜单,只有一种构造方法:JMenuBar(). 3).把菜单栏放到新建框架frame的上方,在JFrame,JApplet和JDial
2016-11-22 18:27:28
4264
原创 排序算法之插入排序
插入排序> 对于排序相信大家都不陌生,就是将一组数据按照从大到小(降序)或者是从小到大(升序)进行排列,那仫常见的排序算法有哪些呢?我总结了以下几种常见的排序算法,在本篇文章中我只介绍插入排序中的直接插入排序和希尔排序. 直接插入排序> //升序void InsertSort(int *a,size_t size){ as
2016-11-17 16:24:57
590
原创 浅析B树的分裂过程
B-树> 最近一直在研究树的这种数据结构,今天实现了一颗适合外查找的平衡多叉树就是B树,有的地方也叫B-树(不要误读为"B减树"奥).当然了还存在B+树,B*树这里只实现B树 一.B树的性质> 一颗M阶(M>2)的B树,是一颗平衡的M路平衡搜索树,可以是空树或者满足下面几条性质> 1).根结点至少有两个孩子. 2).每个非根结点存在[M/2,M)
2016-11-12 13:02:50
10192
原创 位图的应用之海量数据查找
位图> 一.什仫是位图> 顾名思义位图就是用每一位来保存数的状态的结构.位图是bitMap的缩写,适用于大规模数据但是数据状态又不是很多的情况的,因为一个位只有0和1两种状态,所以位图就是只用每一位来保存数的状态的结构. 二.一道海量数据查找的题> 在了解了位图的概念之后我们发现位图通常用于大规模的数据而且用于判断某一个数是否在这个范围之内,在这里就引出了这样一道海量
2016-11-09 10:58:54
975
原创 关于哈希表的一点理解
哈希表> 哈希表也叫散列表,是依据关键码值(key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组叫散列表. 了解了什仫是哈希表之后,我们发现哈希表这种数据结构是类似于线性表的,只是表中的元素不是精密排列的,而是可能存在空间. 比如我们存储70个元素,但是我们
2016-11-02 21:12:21
1721
原创 Huffman的应用之文件压缩与解压缩
文件压缩与解压缩> 最近这段时间一直在学习树的这种数据结构,也接触到了Huffman树以及了解了什仫是Huffman编码,而我们常用的zip压缩也是利用的Huffman编码的特性,那仫是不是可以自己实现一个文件压缩呢?当然可以了.在文件压缩中我实现了Huffman树和建堆Heap的代码,下面开始介绍思路... 1).统计>读取一个文件统计这个文件中字符出现的次数.
2016-10-30 12:02:28
4690
原创 红黑树
红黑树> 在之前实现了AVL树,其实红黑树和AVL树都是高效且平衡的二叉搜索树,增删查改的时间复杂度都是O(lg N).但是在实际应用中红黑树的应用最多,比如C++STL库--map/set,java库,Linux内核以及其他的一些库里都用到了红黑树,这是因为红黑树是不追求完全平衡的是一种近似平衡的二叉树,保证最长路径不超过最短路径的二倍,相对于AVL树来说降低了旋转的要求,所以性能会优
2016-10-28 13:30:22
931
原创 排序算法之堆排序
堆排序> 在上一篇中提到了大小堆的问题,大小堆的一个应用就是堆排序,那仫什仫是堆排序呢?相对于我们经常使用的冒泡,选择以及直接插入排序,堆排序又存在什仫样不同的地方?我就从这几个问题开始着手解决堆排序的问题. 堆排序顾名思义就是利用堆(假设利用小堆)进行排序的方法,它的基本思想是:先将待排序的序列构成一个小堆,在这个时候堆顶结点就是整个系列的最小值;然后将堆顶元素与堆数组末尾的
2016-10-12 10:03:24
566
原创 数据结构之大小堆&&优先级队列
大小堆>一.什仫是堆? 堆这种数据结构说白了就是一颗完全二叉树,堆的含义说明这颗完全二叉树中的所有非终端结点的值均不大于(或不小于)其左,右孩子结点的值.若一维数组{k1,k2,k3,k4...kn}是堆,则堆顶元素必为序列中n个元素的最小值(或最大值) 最大堆:每个父结点的值都大于其孩子结点. 最小堆:每个父结点的值都小于其孩子结点.二.如何利用一维数
2016-10-11 19:34:10
1320
原创 数据结构之线索二叉树的前序,中序和后序遍历
BinaryTree线索化二叉树 二叉树是一种非线性结构,在之前实现的二叉树遍历中不管是递归还是非递归用二叉树作为存储结构时只能取到该结点的左孩子和右孩子,不能得到该结点的前驱和后继。为了保存这种在遍历中需要的信息,同时也为了充分利用结点中的空指针域,我们利用二叉树中指向左右子树的空指针来存放结点的前驱和后继.同时在有n个结点的二叉链表中必定存在n+1个空链域. 那仫问题来
2016-10-09 19:24:15
18421
7
计算机网络的一点使用技巧
2016-08-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人