自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 收藏
  • 关注

转载 海量数据处理:经典实例分析

有关海量数据处理的问题,主要有以下3类:top K问题、重复问题、排序问题top K 问题例子有1亿个浮点数找出其中最大的10000个解决方案将数据全部排序局部淘汰法分治法Hash法最小堆不同应用场景的解决方案单机单核足够大内存单机多核足够大内存单机单核受限内存多机受限内存小结重复问题排序问题数据库排序法分治法位图法

2017-09-21 21:36:57 679

转载 海量数据处理:算法

海量信息即大规模数据,随着互联网技术的发展,互联网上的信息越来越多,如何从海量信息中提取有用信息成为当前互联网技术发展必须面对的问题。在海量数据中提取信息,不同于常规量级数据中提取信息,在海量信息中提取有用数据,会存在以下几个方面的问题: (1)数据量过大,数据中什么情况都可能存在,如果信息数量只有20条,人工可以逐条进行查找、比对,可是当数据规模扩展到上百条、数千条、数亿条,甚至更多

2017-09-16 22:18:10 717

转载 数据结构与算法:图

图论是计算机研究的一个重要分支,有关图论的内容可以写很多,但正是因为图论的这种复杂性,在程序员面试笔试中,有关图论的问题并不多见,考察的也并不深奥。本节内容涉及一些经常出现的图论问题,并给予详细的解答。拓扑排序DFS BFSDFSBFS关键路径最短路径拓扑排序从数学的角度来讲,拓扑排序就是由任意集合上的一个偏序关系得到一个该集合的

2017-09-14 20:25:33 781

转载 数据结构与算法:二叉树

二叉树是一种非常常见并且实用的数据结构,它结合了有序数组与链表的优点。在二叉树中查找数据与在数组中查找数据一样快,在二叉树中添加、删除数据的速度也和在链表中一样高效,所以有关二叉树的相关技术一直是程序员面试笔试中必考的知识点。基础知识基本概念性质有关二叉树的例题题目解析递归实现二叉树的遍历已知先序遍历和中序遍历如何求后序遍历引申已知中序遍历和

2017-09-12 21:23:41 496

转载 数据结构与算法:排序

排序问题一直是计算机技术研究的重要问题,排序算法的好坏直接影响程序的执行速度和辅助存储空间的占有量,所以各大IT企业在笔试面试中也经常出现有关排序的题目。本节详细分析常见的各种排序算法,并从时间复杂度、空间复杂度、适用情况等多个方面对它们进行综合比较。选择排序插入排序冒泡排序双向冒泡排序如何进行归并排序快速排序希尔排序堆排序各种排序算法有什么优劣

2017-09-10 21:01:01 312

转载 数据结构与算法:STL容器

STL(Standard Template Library)是一个C++领域中,用模板技术实现的数据结构和算法库,其中的vector、list、stack、queue等结构不仅拥有更强大的功能,还有了更高的安全性。它体现了泛型编程的思想,具有高度的可重用行、高性能、高移植性。什么是泛化编程vector与list使用两个栈模拟队列操作引申如何使用两个队列实现栈

2017-09-06 22:31:39 370

转载 数据结构与算法:字符串

将字符串逆序普通逆序原地逆序不允许临时变量的原地逆序按单词逆序如何实现逆序打印找出一个字符串中第一个只出现一次的字符输出字符串的所有组合将字符串逆序给定一个字符串s,将s中的字符顺序颠倒过来,如 s=’abcd’,逆序后变成 s=’dcba’。可以采用多种方法对字符串进行逆序,一下将对其中的一些方法进行分析普通逆序直接分配一个与原

2017-09-04 23:16:47 383

转载 数据结构与算法:链表

数组和链表的区别是什么找出单链表中的倒数第k个元素如何检测一个较大的单链表是否有环判断两个单链表无环是否交叉删除单链表中的重复结点如何在不知道头指针的情况下将结点删除数组和链表的区别是什么数组与链表是两种不同的数据存储方式。链表的特性是在中间任意位置添加元素、删除元素都非常地快,不需要移动其他的元素。通常对于单链表而言,链表中每一个元素都要保存一个指向下一个元素的指针;

2017-09-02 19:41:32 333

转载 数据结构与算法:数组(二)

数据结构与算法是计算机发展的基石,现代计算机的起源是数学,数学的核心是算法,计算机历史上每一次大的变革都离不开算法的推动。纵然“条条大路通罗马”,但好的算法永远比提高硬件设备管用。如何判断一个数组中的数值是否是连续相邻找出数组中出现奇数次的元素引申由n个元素组成的数组n-2个数出现了偶数次两个数出现了奇数次这两个数不相等如何用O1的空间复杂度找出这两个数找出数列

2017-08-30 22:12:18 745

转载 数据结构与算法:数组(一)

数据结构与算法是计算机发展的基石,现代计算机的起源是数学,数学的核心是算法,计算机历史上每一次大的变革都离不开算法的推动。纵然“条条大路通罗马”,但好的算法永远比提高硬件设备管用。在排序数组中找出给定数字出现的次数计算两个有序整型数组的交集如何找出数组中重复次数最多的数在On的时间复杂度内找出数组中出现次数超过了一半的数找出数组中唯一的重复元素解题方法引申一没有要求

2017-08-28 20:13:28 548

转载 操作系统:用户编程接口(概念)

对于计算机系统而言,操作系统充当着基石的作用,它是连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统相关资源,同时提供配套的系统软件支持。对于专业的程序员而言,掌握一定的操作系统知识比不可少,因为不管面对的是底层嵌入式开发,还是上层的云计算开发,都需要使用到一定的操作系统相关知识。库函数与系统调用有什么不同静态链接与动态链接有什么区别静态链接库与动态链

2017-08-26 23:08:19 2182

转载 操作系统:内存管理(概念)

对于计算机系统而言,操作系统充当着基石的作用,它是连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统相关资源,同时提供配套的系统软件支持。对于专业的程序员而言,掌握一定的操作系统知识比不可少,因为不管面对的是底层嵌入式开发,还是上层的云计算开发,都需要使用到一定的操作系统相关知识。内存管理有哪几种方式分段和分页的区别是什么什么是虚拟内存什么是内存碎片什么是

2017-08-24 13:34:31 568

转载 操作系统:进程管理(概念)

对于计算机系统而言,操作系统充当着基石的作用,它是连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统相关资源,同时提供配套的系统软件支持。对于专业的程序员而言,掌握一定的操作系统知识比不可少,因为不管面对的是底层嵌入式开发,还是上层的云计算开发,都需要使用到一定的操作系统相关知识。进程与线程有什么区别程序进程与线程的区别是什么线程同步有哪些机制内核线程和用

2017-08-21 21:09:13 2496

转载 网络与通信:网络其他问题

计算机网络技术是互联网发展的基础。它是计算机技术与通信技术结合的产物,是现在信息技术的一个重要组成部分,而且正朝着数字化、高速化、智能化的方向迅速发展。随着3G、4G技术的兴起,越来越多的企业参与到了网络与通信相关的行业的角逐,网络与通信相关的行业的角逐,网络与通信成为信息化浪潮的先锋。而对于网络相关技术的考察也越来越受到各大IT企业的重视。常用的网络安全防护措施有哪些什么

2017-08-18 00:04:13 332

转载 网络与通信:网络模型(概念)

计算机网络技术是互联网发展的基础。它是计算机技术与通信技术结合的产物,是现在信息技术的一个重要组成部分,而且正朝着数字化、高速化、智能化的方向迅速发展。随着3G、4G技术的兴起,越来越多的企业参与到了网络与通信相关的行业的角逐,网络与通信相关的行业的角逐,网络与通信成为信息化浪潮的先锋。而对于网络相关技术的考察也越来越受到各大IT企业的重视。OSI七层模型是什么TCPIP模

2017-08-15 22:00:41 1284

转载 数据库的应用(概念)

在同一个数据集合中,不同的选择条件对应了不同的输出结果,数据库就是这样一种按数据结构来组织、存储和管理数据的仓库。程序或用户可以通过它来进行数据的访问与修改,它是数据存储的灵魂。数据管理经历了人工管理、文件系统到数据库系统3个阶段。数据库是具有逻辑关系和确定意义的数据结合,它能克服传统文件组织所产生的一系列问题,数据冗余小,由于关系型数据库管理系统对于信息查询具有很大的灵活性,并且设计简单

2017-08-13 23:31:18 2758

转载 数据库中的基本概念

在同一个数据集合中,不同的选择条件对应了不同的输出结果,数据库就是这样一种按数据结构来组织、存储和管理数据的仓库。程序或用户可以通过它来进行数据的访问与修改,它是数据存储的灵魂。数据管理经历了人工管理、文件系统到数据库系统3个阶段。数据库是具有逻辑关系和确定意义的数据结合,它能克服传统文件组织所产生的一系列问题,数据冗余小,由于关系型数据库管理系统对于信息查询具有很大的灵活性,并且设计简单

2017-08-10 22:13:16 2499

转载 C++:public继承、protected 继承、private继承

C++中常见的3种继承方式:public 继承、protected 继承和private继承public 当采用公有继承时,基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员课件,其他成员不可见。基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员可见;基类的公有成员和保护成员作为派生类的成员时,它们都维持原有的状态;基类的私有成员不可见;基类的私有成

2017-08-08 23:39:27 455

转载 C++:面向对象的基本特征

面向对象方法首先对需求进行合理分层,然后构建相对独立的业务模块,最后通过整合各模块,达到高内聚、低耦合的效果,从而满足客户要求。具体而言,有三个基本特征:封装、继承和多态。封装:将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。C++中类是一种封装手段,采用类来描述客观事物的过程就是封装,本质上是对客观事物的

2017-08-06 19:37:20 242

转载 C++:内存分配

系统蓝屏,很大原因都是系统自身代码有缺陷引起的,而系统代码缺陷很大程度上与内存分配不当有关。由于内存分配不当引起的堆栈溢出、缓冲区溢出等问题,常常会导致系统瘫痪甚至崩溃,所以理解内存分配对于一名合格的程序媛而言非常有必要。内存分配的形式内存泄露缓冲区溢出内存分配的形式一个由C/C++编译的程序所占用的系统内存一般分为以下几个部分的内容:

2017-08-05 23:18:42 232

转载 C++:重载、覆盖与隐藏

C++之中的重载、覆盖、隐藏重载覆盖重载与覆盖的区别相关代码隐藏重载重载是指函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。在同一可访问区域内被声明的几个具有不同参数列表(参数类型、个数、顺序不同)的同名函数,程序会根据不同的参数列来确定具体调用哪个函数。对于重载函数的调用,在编译期间就已经确定,是静态的,它们的地址在编译

2017-08-03 20:50:55 162

转载 C++: 位操作

使用位操作加快运行位运算的知识有效的计算2乘以8的方法快速求取一个整数的7倍实现位操作求两个数的平均值引申利用位运算计算数的绝对值不用除法操作符实现两个正整数的除法方法一方法二递归求解方法三移位操作引申1用逻辑运算实现加法运算引申2如何只用逻辑运算实现乘法运算位运算的知识(1)常用的等式: -n = ~(n-1) = ~n+1

2017-08-01 23:46:13 764

转载 c++方向笔面试推荐书籍

C++方向推荐书籍:MFC:深入浅出MFC,window程序设计,MFC六大仿真。这个问得很少,基本上不用看。先看C++,再看STL,最后看设计模式。C++:C++ Primer,C++高级编程。有时间主要看C++Primer,这本书讲得很详细了,可以多看几遍,后面那本书,想了解得更多,可以看看。STL:STL源码剖析。这个问得有点多,主要把各种容器的底层实现机制以

2017-07-30 23:58:25 4036

转载 多线程笔试面试题(1)

第一篇    多线程笔试面试题汇总一.概念性问答题第一题:线程的基本概念、线程的基本状态及状态之间的关系? 第二题:线程与进程的区别?       这个题目问到的概率相当大,计算机专业考研中也常常考到。要想全部答出比较难。 第三题:多线程有几种实现方法,都是什么? 第四题:多线程同步和互斥有几种实现方法,都是什么?

2017-07-28 00:46:44 429

转载 Linux系统编程——I/O多路复用select、poll、epoll的区别使用

I/O 多路复用技术是为了解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调用。select(),poll(),epoll()都是I/O多路复用的机制。I/O多路复用通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪,就是这个文件描述符进行读写操作之前),能够通知程序进行相应的读写操作。但select(),

2017-07-26 00:10:42 675

转载 浅谈标准I/O缓冲区

标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数。它也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I/O库最令人迷惑的也是它的缓冲。标准I/O提供了三种类型的缓冲:1、全缓冲:在填满标准I/O缓冲区后才进行实际I/O操作。常规文件(如普通文本文件)通常是全缓冲的。

2017-07-24 23:26:33 197

转载 浅谈可重入函数与不可重入函数

在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果有一个函数不幸被设计成为这样:那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。这样的函数是不安全的函数,也叫不可重入函数。相反,肯定有一个安全的函数,这个安全的函数又叫可重入函数。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会

2017-07-23 23:56:13 206

转载 Linux 信号列表

在 Linux 下,每个信号的名字都以字符 SIG 开头,每个信号和一个数字编码相对应,在头文件 signum.h 中,这些信号都被定义为正整数。信号名定义路径:/usr/include/i386-linux-gnu/bits/signum.h要想查看这些信号和编码的对应关系,可使用命令:kill -l列表中,编号为 1 ~ 31 的信号为传统

2017-07-22 22:20:52 302

转载 Linux 线程浅析

进程和线程的区别与联系在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。为了让进程完成一定的工作,进程必须至少包含一个线程。进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操

2017-07-21 20:20:02 230

转载 浅谈进程地址空间与虚拟存储空间

早期的内存分配机制在早期的计算机中,要运行一个程序,会把这些程序全都装入内存,程序都是直接运行在内存上的,也就是说程序中访问的内存地址都是实际的物理内存地址。当计算机同时运行多个程序时,必须保证这些程序用到的内存总量要小于计算机实际物理内存的大小。那当程序同时运行多个程序时,操作系统是如何为这些程序分配内存 的呢?下面通过实例来说明当时的内存分配方法:

2017-07-20 20:27:19 336

转载 Linux 进程调度浅析

概述操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说“某某函数比某某函数效率高XX倍”一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对 TASK_RUNNING 状态的进程进行调度。如果进程不可执行(正在睡眠或其他),那么它

2017-07-19 22:52:58 265

转载 Linux 进程管理

引言:       在Linux的内核的五大组成模块中,进程管理模块时非常重要的一部分,它虽然不像内存管理、虚拟文件系统等模块那样复杂,也不像进程间通信模块那样条理化,但作为五大内核模块之一,进程管理对我们理解内核的运作、对于我们以后的编程非常重要。同时,作为五大组成模块中的核心模块,它与其他四个模块都有联系。下面就对进程模块进行想写的介绍,首先要了解进程及其相关的概念。其次介

2017-07-18 22:50:18 293

转载 Linux系统编程——进程同步与互斥:System V 信号量

信号量概述信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。在实际应用中两个进程间通信可能会使用

2017-07-17 20:54:36 466

转载 Linux系统编程——进程同步与互斥:POSIX有名信号量

在 POSIX 标准中,信号量分两种,一种是无名信号量,一种是有名信号量。无名信号量一般用于线程间同步或互斥,而有名信号量一般用于进程间同步或互斥。它们的区别和管道及命名管道的区别类似,无名信号量则直接保存在内存中,而有名信号量要求创建一个文件。前面我们学习了无名信号量的使用(详情请看《无名信号量》),这里我们学习有名信号量的使用。1)创建一个有名信号量所需头文件:

2017-07-15 23:25:37 368

转载 Linux系统编程——线程同步与互斥:POSIX无名信号量

信号量概述信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。信号量主要用于进程或线程间的同步和互

2017-07-14 23:18:01 382

转载 Linux系统编程——线程同步与互斥:读写锁

读写锁基本原理当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程同时读访问共享资源并不会导致问题。在对数据的读写操作中,更多的是读操作,写操作较少,例如对

2017-07-13 23:00:41 395

转载 Linux系统编程——线程同步与互斥:互斥锁

为什么需要互斥锁?在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在此刻使用打印机打印东西,如果不做任何处理的话,打印出来的东西肯定是错乱的。下面我们用程序模拟一下这个过程,线程一需要打印“ hello ”,线程二需要打印“ world ”,不加任何处理的话,打印出

2017-07-12 22:24:44 322

转载 Linux系统编程——多任务的同步与互斥

现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:都需要访问/使用同一种资源多个任务之间有依赖关系,某个任务的运行依赖于另一个任务这两种情形是多任务编程中遇到的最基本的问题,也是多任务编程中的核心问题,同步和互斥就是用于解决这两个问题的。互斥:是指散步在不同任务之间的若干

2017-07-11 23:25:03 348

原创 C++整理(1)

一.命名空间在C++中,名称(name)可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),可以更好地控制标识符的作用域。例:#include  using namespace std;     

2017-07-10 23:19:14 205

转载 Linux系统编程——线程池

线程池基本原理在传统服务器结构中,常是有一个总的监听线程监听有没有新的用户连接服务器,每当有一个新的用户进入,服务器就开启一个新的线程用户处理这 个用户的数据包。这个线程只服务于这个用户,当用户与服务器端关闭连接以后,服务器端销毁这个线程。(关于并发服务器更多详情,请看《并发服务器》)。然而频繁地开辟与销毁线程极大地占用了系统的资源,而且在大量用户的情况下,系统为了开辟

2017-07-10 00:29:31 182

空空如也

空空如也

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

TA关注的人

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