- 博客(27)
- 资源 (3)
- 收藏
- 关注
原创 O(1)时间求栈中最小(大)元素
问题:对stack进行扩展,完成正常的push,pop操作,新增访问最小(大)元素的接口min(max),使得push,pop,Min的时间复杂度都是O(1)。难点在于怎么维持stack的最小(大)值,一切排序和查找都不可能实现O(1)的时间复杂度找到最小值。思路:如下图所示,以空间换取时间。通过增加一个最小值栈来存储上一个最小值,以维持目前的最小值。1、 入栈的元素比当
2014-09-06 09:53:28
1464
原创 链表面试笔试题目总结
链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就知道了。在此可以讨论一下与链表相关的练习题。(1)在单链表上插入一个元素,要求时间复杂度为O(1)解答:一般情况在链表中插入一元素是在末尾插入的,这样需要从头遍历一次链表,找到末尾,时间为O(n)。要在O(1)时间插入一个新节点,可以考虑每次在头节点后面插入,即每次插入的节点成
2014-08-30 22:04:33
1872
原创 Bitmap 海量数据处理
Bitmap:说明:采用一个bit来标记某个value,可以大大节省存储空间。优点是占用内存少,比如N为一亿(10000 0000),只需要N/8=1250 0000个byte,约等于12Mb。缺点为不能重复数据进行排序和查找 思想:利用一个byte中的8个bit来表示8个数。某数出现,利用映射将对应bit位置1。比如元素3,在8bit的映射为再来个元素5,在8
2014-08-28 20:12:02
934
原创 二叉查找树的概念以及实现 前序、中序和后序递归非递归遍历算法
本文主要介绍二叉查找树以及实现,另外实现前序、中序和后序递归非递归遍历算法。二叉查找树:概述: 《算法导论》第12章介绍了二叉查找树的主要性质。二叉查找树(Binary Search Tree),也称二叉搜索树、有序二叉树(orderedbinary tree),排序二叉树(sorted binary tree),具有以下性质:若任意节点的左子树不空,则
2014-08-26 22:36:38
1571
原创 栈与队列的实现__ 两个栈实现队列 vs 两个队列实现栈
栈与队列的实现两个栈实现队列 vs 两个队列实现栈 栈(stack)规定元素是先进后出(FILO),队列(queue)是先进先出(FIFO)。栈的实现(数组)实现#include #include #include using namespace std;const int SIZE=10;class stack{public: stac
2014-08-22 22:43:34
600
原创 排序算法全攻略 1
虽然排序算法是一个简单的问题,但绝对是笔试面试的基础考点,重重之重。来个排序问题都没回答出来,留给面试官的印象也就那样了。排序主要分为:比较排序:快速排序、堆排序、归并排序、插入排序、希尔排序、选择排序、冒泡排序非比较排序:基数排序、计数排序、桶排序性能比较点:时间复杂度:一般而言,好的性能是O(nlgn),且坏的性能是O(n^2)。对于一个排序理想的性能是O(n)稳定性:
2014-08-21 22:59:42
807
原创 Linux进程间通信 IPC
IPC:Inter-process Communication 进程间通信 缘由:1、数据传输:进程间有数据互相传输的需求2、通知事件:一个进程需要向另一个或一组进程发送消息,通知某种事件的发生(如进程终止时要通知父进程)。3、资源共享:多个进程之间共享同样的资源。对共享数据的修改,其他进程应该立刻看到,需要内核提供锁和同步机制。4、进程控制:有些进程希望完全控制另一个进程
2014-08-20 20:24:43
690
原创 TCP拥塞控制 2
解决传统TCP缺陷:1、窗口太小,最大65535。TCP利用了选项功能,其头部存在预留项,用于扩展等用途。窗口扩大选项增加了额外的16位来表示窗口大小,窗口的值由首部的16位大小和选项的16位值共同组成。不过不是用加法组成的,而是利用移位窗口值的幂来表示的,也就是说如果移位窗口值为 10,那么窗口的最大值就是65535*210,这个值就比较大了,足够表示窗口的大小了。2、数据包丢失
2014-08-19 11:45:33
828
原创 字符编码 ASCII UTF-8 UNICODE 的关系
豁然开朗,终于理顺了Unicode、utf-8等之间的关系,一直都是糊里糊涂的,知道今天看到了下面这篇文章!http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html弄计算机这一行,就必须懂得一点字符编码的知识。ASCII码:一个字节有8个二进制位,对应256种状态,每种状态对应一个符号,就有256个符号。
2014-08-18 22:11:21
738
原创 TCP拥塞控制 (1)
Basic: TCP,传输控制协议,是目前网络中应用最广泛的传输协议。SMTP、SSH、FTP、HTTP等因特网底层协议均是TCP。 TCP面向连接,提供端到端的数据可靠传输。连接时三次握手,断开是四次挥手。具体表现为:1、 TCP对传输的数据做了序号标记,其中序号标记安装字节数增长。TCP对端在接收到数据后发出一个ACK给对端(ACK中就包含序列号)。TC
2014-08-18 17:47:45
1048
转载 socket 长连接与短连接
短连接 连接->传输数据->关闭连接 HTTP是无状态的,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。 也可以这样说:短连接是指SOCKET连接后发送后接收完数据后马上断开连接。 长连接 连接->传输数据->保持连接 -> 传输数据-> 。。。 ->关闭连接。 长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。
2014-08-18 10:15:36
803
原创 页面置换算法
页面置换方法:起源操作系统给每个进程分配内存空间,即为每个进程分配多少个页框驻留进程。此时,分配到的页框称为驻留集。有两种方法:固定驻留策略和动态驻留策略。固定驻留策略指为每个进程分配固定的页框数,不能增减,也不能使用别的进程的空间动态驻留策略指在进程活跃期间,系统可以根据进程的缺页率进行动态调整,进程的页框数可以增减。这样就有两个问题:页框置换的范围,如何选择置换出内存的页框。
2014-08-15 21:31:48
961
原创 散列函数(哈希函数,Hash Function)
说明 散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。简单的说,hash函数就是把任意长的输入字符串变化成固定长的输出字符串的一种函数。输出字符串的长度称为hash函数的位数。(下图来源于维基百科)散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来,比如我们自定义密码的存储。一句话:散
2014-08-13 18:41:49
26718
3
原创 深入C++的拷贝构造和赋值函数 (深拷贝,浅拷贝)
参考了:点击打开链接以及《高质量程序设计指南C++/C语言》说明拷贝构造函数是一种特殊的构造函数。相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。函数的名称必须和类名称一致。它的参数是唯一的,该参数是const类型的引用变量。例如类X的拷贝构造函数的形式为X(X& x)。Q:为啥拷贝构造函数的参数必须是同类对象的引用,而不能是值传递?请看下面的例子:cl
2014-08-13 11:54:39
2480
原创 线程与进程,以及两者的联系与区别。
以前的博客都随便写的,水平比较低。得端正态度了,好好写博客可以深化理解,顺便可以组织语言。线程与进程,以及两者的联系与区别。这一直以来都是互联网面试笔试的基础点。一个程序至少有一个进程,一个进程至少有一个线程。这是我在网上找的一篇帖子,形象地介绍了两者的的关联,相当不错():http://www.ruanyifeng.com/blog/2013/04/processes_and
2014-08-12 12:12:59
758
原创 TCP vs UDP
Transmission Control Protocol (TCP) is a network transport Internet Protocol (IP) typically used for its bi-directional communications reliability. TCP is a protocol which first establishes a connec
2014-04-26 22:25:24
704
原创 UNIX study note(step1)
Source: UNIX Tutorial for Beginners http://www.ee.surrey.ac.uk/Teaching/Unix/ Key Point: Don't let goUseful source collection for linuxLearning :http://linux.cn/article-2890-1.htmlKernelKe
2014-04-25 16:58:19
623
原创 ubuntu环境下vsftpd服务器的搭建 以几个重要问题的解决
ubuntu环境下vsftpd服务器的搭建以及几个问题的解决参考资料:http://wiki.ubuntu.org.cn/Vsftpd[分享]菜鸟简单建立FTP的方法-查看主题•Ubuntu中文论坛.htmlwindows下用FileZilla客户端登录情况1、匿名登录2、用户及用户密码登录,连接21号端口home目录
2014-04-11 20:21:32
970
转载 Traceroute与Ping区别
1.Traceroute工具基本原理 Traceroute是探测网络端到端路由的小工具,它的实现主要利用了TCP/IP协议族中的两个特性: 1)路由器转发IP数据报时需要把TTL减1,当TTL减为0时路由器会向源端发送ICMP超时报文; 2)主机(或路由器)处理处理目的地址时本机的UDP报文时,当报文中目的端口字段指定的端口不可用时,将向UDP报文发送端发送ICMP端
2014-04-09 20:48:16
6154
转载 printk和printf的区别
内核使用printk()打印!应用层使用printf()打印!&&& 大部分常用的C库函数在Linux内核中都已经得到了实现。在所有没有实现的函数中,最著名的就数printf()函数了。内核代码虽然无法调用 printf()函数,但它可以调用printk()函数。printk()函数负责把格式化好的字符串拷贝到内核日志缓冲上,这样syslog程序就可 以通过读取该缓冲区来获
2014-04-08 12:24:55
1523
转载 折半查找的实现
折半查找法的两种实现折半查找法:在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现:1) 待查找数据值与中间元素值正好相等,则放回中间元素值的索引。2) 待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),直到找到相等的值。3) 待查找数据值比中间元素值大,则以整个查找范围的后半部
2014-04-03 15:45:32
623
转载 linux中文件压缩解压缩-----详解
linux 文件解压缩目前 Linux 下最常见的压缩包格式自然非 .tar.gz 莫属,但由于 bzip2 强大的压缩比率,目前 . tar.bz2 愈发有取代之势。还有单纯的 .tar 格式也很常见。它们目前的操作都主要是由 tar 程序 配合 gzip/bzip2 来完成的。下面来详细的说下tar 这个命令2tar-c: 建立压缩档案-x:解压
2014-04-01 22:56:31
541
转载 linux权限管理之su与 sudo详解___username is not in the sudoers file
概要:在linux上进行有关权限的操作时,往往会碰到这样的问题:1)为什么安装软件需要在apt-get之前加上sudo?刚刚安装完毕,再次运行apt-get却不需要再在前面加sudo?2)为何有时运行sudo command的时候显示user is not in the sudoers?3)su和sudo有什么不同?4)多人使用同一台主机,在授权很多用户具有root权限的时候如何保证安全性?本
2014-04-01 22:41:58
602
原创 详解su、sudo和root之间的区别
自己在用ubuntu时,用sudo su来切换root用户;在虚拟机centOS上,用命令su -来切换root用户;但不知道为何!参考资料:http://www.justwinit.cn/post/4461/http://blog.youkuaiyun.com/ithiker/article/details/12855569http://blog.youkuaiyun.com/trochilus
2014-04-01 22:39:35
3333
原创 循环链表
资料来源:http://student.zjzk.cn/course_ware/data_structure/web/xianxingbiao/xianxingbiao2.3.2.htm点击打开链接循环链表(Circular Linked List) 循环链表是一种首尾相接的链表。1、循环链表(1)单循环链表——在单链表中,将终端结点的指针域NULL
2014-04-01 10:20:47
580
原创 单链表长度未知,快速找到其中间节点----不错的解决方案
今天看小甲鱼数据结构的视频时,其中讲了腾讯的一道面试题目!相当经典,解法也相当不错。学习了!普通的方法:首先遍历一遍单链表以确定单链表的长度L。然后再次从头节点出发循环L/2次找到单链表的中间节点。算法复杂度为O(L+L/2)=O(3L/2)。能否再优化一下这个时间复杂度呢?巧妙方法:设置两个指针*search、*mid都指向单链表的头节点。其中* search的移动速度是*m
2014-03-31 15:39:43
583
原创 数据结构之单链表
单链表:详细就不写了,可以看下面这篇文章,特别详细!相关资源:点击打开链接定义:typedef struct Node{ ElemType data; struct Node* next;}Node, *LinkList;自己实践才知道,太容易出错了,动不动就报错!以后一定要实践实践,细心细心!以下为代码的粗糙实现,写得不好,见谅!(
2014-03-31 15:13:22
551
链表面试题目总结 全
2014-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人