2018年2月23日

八大排序算法图文讲解

摘要: 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 本文将依次介绍上述八大排序算法。 算法 阅读全文

posted @ 2018-02-23 09:52 AlanTu 阅读(430) 评论(0) 推荐(0)

链表问题集锦

摘要: 链表问题在面试过程中也是很重要也很基础的一部分,链表本身很灵活,很考查编程功底,所以是很值得考的地方。我将复习过程中觉得比较好的链表问题整理了下。 下面是本文所要用到链表节点的定义: 1. 在O(1)时间删除链表节点 题目描述:给定链表的头指针和一个节点指针,在O(1)时间删除该节点。[Google 阅读全文

posted @ 2018-02-23 09:50 AlanTu 阅读(332) 评论(0) 推荐(0)

最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和

摘要: 最长公共子序列 1、动态规划解决过程 1)描述一个最长公共子序列 如果序列比较短,可以采用蛮力法枚举出X的所有子序列,然后检查是否是Y的子序列,并记录所发现的最长子序列。如果序列比较长,这种方法需要指数级时间,不切实际。 LCS的最优子结构定理:设X={x1,x2,……,xm}和Y={y1,y2,… 阅读全文

posted @ 2018-02-23 09:49 AlanTu 阅读(652) 评论(0) 推荐(0)

高并发网络编程之epoll详解

摘要: select、poll和epoll的区别 在linux没有实现epoll事件驱动机制之前,我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在大数据、高并发、集群等一些名词唱的火热之年代,select和poll的用武之地越来越有限了,风头已经被epoll占尽。 selec 阅读全文

posted @ 2018-02-23 09:46 AlanTu 阅读(1532) 评论(0) 推荐(0)

位操作实现加减乘除四则运算

摘要: 解决方案 需要熟练掌握一些常见的位操作实现,具体为: 1)常用的等式:-n=~(n-1)=~n+1 2)获取整数n的二进制中最后一个1:n&(-n)或者n&~(n-1)如:n=010100,则-n=101100,n&(-n)=000100 3)去掉整数n的二进制中最后一个1:n&(n-1),如:n= 阅读全文

posted @ 2018-02-23 09:44 AlanTu 阅读(1113) 评论(0) 推荐(0)

堆和栈的区别

摘要: 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。 阅读全文

posted @ 2018-02-23 09:42 AlanTu 阅读(174) 评论(0) 推荐(0)

IT思想类智力题

摘要: 1、 台阶问题 题目:一个人上台阶可以一次上一个或两个,问这个人上n层的台阶,一共有多少种走法。 本题可以采用递归的方法来设计模型,先从数字的规律入手:假设共有i阶台阶,走完所有的台阶有n种走法,则存在如表6- 3所示。 表6- 3组合情况 i n 组合情况 1 1 {1} 2 2 {1, 1}{2 阅读全文

posted @ 2018-02-23 09:35 AlanTu 阅读(452) 评论(0) 推荐(0)

C/C++基础总结

摘要: 1 static(静态)变量有什么作用 3个体明显的作用:1)在函数体内,静态变量具有“记忆”功能,即一个被声明为静态变量在一个函数被调用的过程中其值维持不变2)在模块内,它的作用域范围是有限制的,即如果一个变量被声明为静态的,那么该变量可以被模块内所有函数访问,但不能被模块外其他函数访问。3)内部 阅读全文

posted @ 2018-02-23 09:33 AlanTu 阅读(545) 评论(0) 推荐(0)

数据库总结

摘要: 1 关系数据库系统与文件数据库系统有什么区别? 2 SQL语言的功能有哪些 基本SQL语句有select、insert、update、delete、create、drop、grant、revoke等。 3 内连接与外连接的区别? 4 什么是事务? 事务是数据库中一个单独的执行单元,它通常由高级数据库 阅读全文

posted @ 2018-02-23 09:32 AlanTu 阅读(230) 评论(0) 推荐(0)

Windows内存管理和linux内存管理

摘要: windows内存管理 windows 内存管理方式主要分为:页式管理,段式管理,段页式管理。 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页;页式管理把内存空间按照页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应的页表;并用相应的硬件地址变换机构来解决离散地址变换 阅读全文

posted @ 2018-02-23 09:31 AlanTu 阅读(8513) 评论(0) 推荐(0)

面试网络总结

摘要: 1 OSI七层模型和TCP/IP 2 B/S与C/S有什么区别? C/S是客户端/服务器的缩写,在C/S架构中,服务器通常采用高性能的PC、工作站或者小型机,而且采用大型数据库系统,如SQL server 、DB2、Oracle和Sybase等。客户端需要安装专用的客户端软件。 B/S是浏览器/服务 阅读全文

posted @ 2018-02-23 09:31 AlanTu 阅读(263) 评论(0) 推荐(0)

面试操作系统总结

摘要: 1 进程和线程的区别 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配的一个独立单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等,然后该进程被放入到进程的就绪队列,进程调度程序选中它,为它分配CPU及 阅读全文

posted @ 2018-02-23 09:29 AlanTu 阅读(2657) 评论(0) 推荐(0)

数据结构与算法 - 字符串

摘要: 题型1:如何统计字符中有多少个单词? 方法1:使用空格作为分隔。如果测出某一个字符为非空格,而它前面的单词是空格,则表示“新的单词开始了”此时单词数count累加1.如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然是原来那个单词的继续,count不应再累加1. 方法2:使用sstream中 阅读全文

posted @ 2018-02-23 09:28 AlanTu 阅读(551) 评论(0) 推荐(0)

数据结构与算法 - 图论

摘要: 题型1:拓扑排序 1)使用一个入度数组indegree来记录每个顶点的入度数,并使用一个变量来记录已经访问的顶点数 2)将入度为0的顶点压入栈中 3)将栈顶的元素删除。访问的顶点数加1.并将入该顶点相邻的所有顶点的入度数减1,如果减1之后的入度数为0,则将其压入栈中; 4)重复上面的过程,直到栈中的 阅读全文

posted @ 2018-02-23 09:28 AlanTu 阅读(248) 评论(0) 推荐(0)

数据结构与算法 - 链表

摘要: 链表 题型1:数组和链表的区别是什么? 数组和链表的区别主要表现在以下几个方面: 1)逻辑结构。数组必须事先定义固定的长度,不能适应数据动态地增减。当数组中插入、删除数据项时,需要移动其他数据项。而链表采用动态分配内存的形式实现,可以适应数据动态第增减的情况,需要时可以用new/malloc分配内存 阅读全文

posted @ 2018-02-23 09:26 AlanTu 阅读(296) 评论(0) 推荐(0)

数据结构与算法 - 数组

摘要: 题型1:如何用递归实现数组求和 方法1: 题型2:如何用一个for循环打印一个二维数组 方法1:array在二维数组中的行号和列号分别为[i/MAXY],[i%MAXY] 题型3:用递归和非递归的方法实现二分查找 题型4:如何在排序数组中,找出给定数字出现的次数 方法1:二分查找,分别找出左边界和右 阅读全文

posted @ 2018-02-23 09:25 AlanTu 阅读(300) 评论(0) 推荐(0)

open和fopen的区别

摘要: open和fopen的区别: 1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写 阅读全文

posted @ 2018-02-23 09:23 AlanTu 阅读(2781) 评论(0) 推荐(1)

malloc的内存分配原理

摘要: 0 堆内存的在计算机内存中的形式 根据《The C Programming language》推测得到堆内存,图中的Heap区域即为堆内存块(Heap区域的数目不代表计算机堆内存的真实数目)。 [1] 堆内存不连续。只有标识为Heap的才是堆内存。 [2] 在malloc()/free()看来,每个 阅读全文

posted @ 2018-02-23 09:18 AlanTu 阅读(13131) 评论(1) 推荐(2)

if else和switch的效率

摘要: switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true. 说实话 我也没有深入研究过这个问题的根源 只是在实际开发中 没有人会去用很多很多else if的 都是用 switch case 的 后者比较清 阅读全文

posted @ 2018-02-23 09:15 AlanTu 阅读(805) 评论(0) 推荐(0)

关于结构体占用空间大小总结

摘要: 关于C/C++中结构体变量占用内存大小的问题,之前一直以为把这个问题搞清楚了,今天看到一道题,发现之前的想法完全是错误的。这道题是这样的: 在32位机器上,下面的代码中 class A { public: int i; union U { char buff[13]; int i; }u; void 阅读全文

posted @ 2018-02-23 08:56 AlanTu 阅读(14377) 评论(0) 推荐(1)

2018年2月22日

关于c语言内存分配,malloc,free,和段错误,内存泄露

摘要: 1. C语言的函数malloc和free (1) 函数malloc和free在头文件<stdlib.h>中的原型及参数 void * malloc(size_t size) 动态配置内存,大小有size决定,返回值成功时为任意类型指针,失败时为NULL。 void free(void *ptr) 释 阅读全文

posted @ 2018-02-22 23:23 AlanTu 阅读(994) 评论(0) 推荐(0)

HR面 - 十大经典提问

摘要: 1、HR:你希望通过这份工作获得什么? 1)、自杀式回答:我希望自己为之工作的企业能够重视质量,而且会给做得好的员工予以奖励。我希望通过这份工作锻炼自己,提升自己的能力,能让公司更加重视我。 a、“我希望通过这份工作锻炼自己,提升自己的能力。”同学,公司又不是学校,是希望你过来干活的,学习的目的也是 阅读全文

posted @ 2018-02-22 23:20 AlanTu 阅读(791) 评论(0) 推荐(0)

一些面试题(一)

摘要: 语言相关 什么是displacement new? placement new是重载operator new的一个标准、全局的版本,它不能被自定义的版本代替(不像普通的operator new和operator delete能够被替换成用户自定义的版本)。它的原型如下:void *operator 阅读全文

posted @ 2018-02-22 23:19 AlanTu 阅读(249) 评论(0) 推荐(0)

轻松搞定面试中的“虚"

摘要: 提要 今天要整理的知识点是C++中有关虚的一切。 包括:虚函数,纯虚函数,虚基类,虚继承... 1.什么是虚函数,有什么作用? 在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。在类外定义虚函数时,不必再加virtual。该函数就是虚 阅读全文

posted @ 2018-02-22 23:17 AlanTu 阅读(179) 评论(0) 推荐(0)

轻松搞定面试中的红黑树问题

摘要: 没有学习过红黑树的同学请参考: <<Introduction to Algorithms>> Chapter 13 Red-Black Trees Chapter 14 Augmenting Data Structures 教你透彻了解红黑树 一、红黑树的介绍 先来看下算法导论对R-B Tree的介 阅读全文

posted @ 2018-02-22 23:17 AlanTu 阅读(824) 评论(0) 推荐(0)

static成员函数不能调用non-static成员函数

摘要: 1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-static成员的,包括成员函数和成员变量。 由于构造函数特殊性,它从无到有构造一个对象,因此调用它不需要 阅读全文

posted @ 2018-02-22 23:06 AlanTu 阅读(2610) 评论(0) 推荐(0)

Linux常见的进程调度算法

摘要: 进程调度:在操作系统中调度是指一种资源分配。 调度算法是指: 根据系统的资源分配策略所规定的资源分配算法。 操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取 阅读全文

posted @ 2018-02-22 22:59 AlanTu 阅读(17588) 评论(0) 推荐(1)

linux page buffer cache深入理解

摘要: Linux上free命令的输出。 下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1 2 3 4 5 61 total u 阅读全文

posted @ 2018-02-22 22:39 AlanTu 阅读(1084) 评论(0) 推荐(0)

linux write系统调用如何实现

摘要: 在Linux下我们在使用设备的时候,都会用到write这个函数,通过这个函数我们可以象使用文件那样向设备传送数据。可是为什么用户使用write函数就可以把数据写到设备里面去,这个过程到底是怎么实现的呢? 这个奥秘就在于设备驱动程序的write实现中,这里我结合一些源代码来解释如何使得一个简简单单的w 阅读全文

posted @ 2018-02-22 22:33 AlanTu 阅读(5912) 评论(0) 推荐(0)

BIO与NIO、AIO的区别

摘要: IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待 阅读全文

posted @ 2018-02-22 22:19 AlanTu 阅读(398) 评论(0) 推荐(0)

Unix域套接字简介

摘要: 在Linux系统中,有很多进程间通信方式,套接字(Socket)就是其中的一种。但传统的套接字的用法都是基于TCP/IP协议栈的,需要指定IP地址。如果不同主机上的两个进程进行通信,当然这样做没什么问题。但是,如果只需要在一台机器上的两个不同进程间通信,还要用到IP地址就有点大材小用了。 其实很多人 阅读全文

posted @ 2018-02-22 21:58 AlanTu 阅读(8047) 评论(0) 推荐(3)

漫谈linux文件IO

摘要: 在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO。本篇文件打算详细全面,深入浅出。剖析文件IO的细节。从多个角度探索如何提高IO性能。本文尽量用通俗易懂的视角去阐述。不copy内核代码。 阐述之前,要先有个大视角,让我们站在万米高空,鸟瞰我们的 阅读全文

posted @ 2018-02-22 20:46 AlanTu 阅读(12033) 评论(0) 推荐(0)

LRU Cache

摘要: 一、什么是Cache 1 概念 Cache,即高速缓存,是介于CPU和内存之间的高速小容量存储器。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近CPU的频率。 当CPU发出内存访问请求时,会先查看 Cache 内是否有请求数据。 如果存在(命中), 阅读全文

posted @ 2018-02-22 20:20 AlanTu 阅读(858) 评论(0) 推荐(0)

网络编程中的read,write函数

摘要: 关于TCP/IP协议,建议参考Richard Stevens的《TCP/IP Illustrated,vol1》(TCP/IP详解卷1)。 关于第二层面,依然建议Richard Stevens的《Unix network proggramming,vol1》(Unix网络编程卷1),这两本书公认是U 阅读全文

posted @ 2018-02-22 19:43 AlanTu 阅读(832) 评论(0) 推荐(0)

进程间通信

摘要: 在用户应用程序在经常用到C库的进程间通信函数,实际上,这些进程间通信函数在内核中是通过系统调用好文件系统的机制实现的。 1 管道 管道是只用于连接读进程和写进程,以实现它们之间通信的共享文件。因而它又称共享文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入管道。而接 阅读全文

posted @ 2018-02-22 19:42 AlanTu 阅读(273) 评论(0) 推荐(0)

系统调用

摘要: Linux内核中设置了一组用于实现各种系统功能的子程序,称为系统调用。系统调用实际上是内核中的一些C函数,它们都以sys开头的,如sys_mkdir()。它们通过一个指令int 0x80(软中断)把控制权交给内核,即进入特权级执行。int 0x80指令会使“执行”跳转到系统调用在内核中定义的入口地址 阅读全文

posted @ 2018-02-22 19:40 AlanTu 阅读(316) 评论(0) 推荐(0)

模块机制

摘要: 模块是内核的一部分(通常是设备驱动程序),按需动态装入模块可以保证内核达到最小并且使内核非常灵活。一旦装入一个Linux内核模块,那么它就像任何标准的内核代码一样成为内核的一部分,具有相同的权限和职责。一方面凡是由内核“移出”的所有符号都可以在模块中引用;另一方面,除了这个特意移出的符号及系统调用外 阅读全文

posted @ 2018-02-22 19:38 AlanTu 阅读(442) 评论(0) 推荐(1)

其他文件系统

摘要: ramfs内存文件系统 ramfs是一个利用VFS自身结构而形成的内存文件系统。ranfs没有自己的文件存储结构,它的文件存储于page cache中,目录结构由dentry链表本身描述,文件则由VFS的inode结构本身描述。 /proc文件系统 /proc文件系统是个虚拟文件系统,它通过文件系统 阅读全文

posted @ 2018-02-22 19:37 AlanTu 阅读(216) 评论(0) 推荐(0)

EXT2 文件系统

摘要: 对文件系统而言,文件仅是一系列可读写的数据块。文件系统并不需要了解数据块应该放到物理介质上什么位置。这些都是设备驱动的任务。无论何时,只要文件系统需要从包含它的块设备中读取信息或数据,它就将请求底层的设备驱动读取一个基本块大小整数倍的数据块。EXT2文件系统将它所使用的逻辑分区划分成数据块组。每个数 阅读全文

posted @ 2018-02-22 19:36 AlanTu 阅读(2722) 评论(0) 推荐(0)

虚拟文件系统

摘要: Linux内核中的虚拟文件系统用来管理挂接各种具体文件系统。具体的文件系统可设计成可加载模块,在系统需要时进行加载。 挂载具体文件系统时,VFS读取它的超级块,得到具体文件系统的拓扑结构,并将这些信息映射到VFS超级块结构中。 当进程或shell命令访问目录和文件时,shell命令及应用程序分解成系 阅读全文

posted @ 2018-02-22 19:35 AlanTu 阅读(1069) 评论(0) 推荐(0)

导航