- 博客(82)
- 收藏
- 关注
原创 数组系列面试题
以下是我总结的关于高频率数组系列的面试题,如有不足之处,希望大家指出#include<iostream>#include<windows.h>#include<vector>using namespace std;#include<string.h>#include<sstream>#include <algorithm>/************************求数组中出现次
2017-09-01 20:58:21 1010
翻译 qsort和sort的区别
qsort和sort的区别 First qsort基本快速排序的方法,每次把数组分成两分和中间的一个划分值,而对于有多个重复值的数组来说,基本排序的效率较低。集成在C语言库函数里面的的qsort函数,使用 三 路划分的方法解决这个问题。所谓三路划分,是指把数组划分成小于划分值,等于划分值和大于划分值的三个部分。函数对buf 指向的数据按升序排序。使用方法:void qsort( void
2017-08-28 09:32:00 584
原创 快速排序的三种实现以及应用场景
好了,废话不多说,直接上干货。 1、快速排序的概念: 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Horno在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 2快速排序
2017-08-27 10:41:54 12565 1
翻译 HTTP长连接与短连接
1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的所有包,并且顺序与发出顺序一致。TCP有可靠,面向连接的特点。 2. 如何理解HTTP协议是无状态的 HTT
2017-08-22 11:59:25 290 1
原创 深入浅出HTTP
1、 概念:http是面向事物的应用层协议。 注释:事物指的是一系列的信息(包括文本,声音,图像等各种多媒体文件) 交换,注意:这一系列的信息交换是一个不可分割的整体,要么所有的信息交换都完成,要么一次交换都不执行。 2、 万维网(浏览器)的工作流程: 用户在浏览器的地址栏输入了:http://www.tsinghua.edu.cn/yxsz/index.h
2017-08-22 11:42:48 690
原创 快速排序的点点滴滴
好了,废话不多说,直接来干货。首先说下快速排序的思想,一般网上说的都是Horno(Horno这个人提出来的算法)法,我这里除此之外还介绍另外的两种方法。//way1:Horno 法1、找一个基准值key(一般三数取中法),本题中基准值为数组中最右的元素,再定义两个指针begin(指向首元素)和end(指向尾元素)2、begin从前往后走找比基准值key大的元素(找到后停下),end从后往前走
2017-08-06 17:41:51 235
原创 深入理解单例模式
1、介绍:是软件开发过程中面临的一般问题的解决方案,也就是一套被反复使用,经过分类,代码设计总结出来的经验.2、特点:(1)保证全局只有一个唯一的实例对象(2)单例类提供获取这个唯一获取实例的接口3、分类:分为饿汉模式和懒汉模式4、代码实现:class Singleton //懒汉模式{public: static Singleton *GetInstance()
2017-07-30 19:57:58 341
原创 求单链表的差集
“` //并将结果保存在集合A的单链表中。例如,若集合A = { 5, 10, 20, 15, 25, 30 },集合B = { 5, 15, 35, 25 }, //完成计算后A = { 10, 20, 30 }。 //解题思路:一个链表中的每个节点去另一个链表中找,删除相同的结点,留下的则是 不同的结点 /* 本题的解法思路较简单: 因为要求集合A和集合B的差集(A - B),结果保
2017-07-26 23:19:14 1357 1
原创 二叉树的各种遍历
// 前序:访问根节点--->访问根节点的左子树--->访问根节点的右子树 void _PreOrder(Node* pRoot) { if (pRoot) { cout << pRoot->_value << " "; _PreOrder(pRoot->_pLeft); _P
2017-07-26 23:12:58 246
原创 NAT和代理服务器原理
NAT技术在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。这种技术被普遍使用在有多台主机但只通过一个公有IP地址访问因特网的私有网络中。根据规范,路由器是不能这样工作的,但它的确是一个方便并得到了广泛应用的技术
2017-07-19 21:06:33 1083
原创 判断链表是否带环?若带环求环的长度?若带环求环的入口点?
//判断链表是否带环思路://定义两个指针,一个快指针(快指针一次走两步),一个慢指针(慢指针一次走一步),快慢指针同时//出发,若快慢两指针相遇,则链表带环,否则,不带环//求带环求环的长度思路://若链表带环,则快慢指针有相遇点,求得相遇点,在定义一个指针,从相遇点出发再回到相遇点所走的路程就是环的长度//求单链表中环的入口点//思路:根据推到出来的公式://结论:快慢指针碰撞点到
2017-07-16 22:31:55 417
原创 对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间。原数组为:A,B,C,D,E, 现给定新的位置为3, 0, 1, 4, 2那么排序为D,A,B,E,C
题目描述:对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间。例如:原数组为:A, B, C, D, E, 现给定新的位置为:3, 0, 1, 4, 2,那么排序后为D, A, B, E, C。问题分析:为什么分类为数据结构,因为其实这个题就是快排的挖坑法的变形。解决思路:保存第一个位置的数据后,把第一个位置设为坑,如果给定的新位置与现在ind
2017-07-16 18:06:16 926
原创 归并排序的点点滴滴
一、归并排序:是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1;
2017-07-12 21:41:44 276
原创 细说循环冗余校验码
初识循环冗余校验码: 为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检验措施,目前广泛使用的是循环冗余(CRC)检验的检错技术。 CRC检验原理: 在发送端,先把数据划分为组,假定每个组k个比特。现假定待传送的数据M=101001(k=6)。CRC运算就是在数据M后面添加供差错检验用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。在要发送的数据后面加n位的冗
2017-07-12 20:01:08 26995 12
原创 详述网络端口
一、端口简介 随着电脑网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,TCP/IP协议作为网络通信的标准协议就解决了这个通信难题。TCP/IP协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在TCP/IP协议中引入了一种称之为”Socket(套接字)”应用程序接口。有了这样一种接口技术,一台电脑就
2017-07-08 17:31:00 386
翻译 C++之单例模式
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。应用场景:比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。其他还有如系统的日志输出、MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台P
2017-07-01 23:52:54 268
原创 深入理解线性安全与重入函数
“` 一、什么是线程安全? 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。(也就是说如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。) 举例理解: 比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步
2017-06-25 20:40:23 264
原创 浅谈死锁
一、 死锁的概念: 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生
2017-06-10 16:44:27 317
原创 进程与线程的区别与联系
进程与线程的区别与联系一、 进程:1、概念:程序的运行实例,是应用程序的一次动态执行,可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体(但是并不代表所有的进程都在运⾏行,进程在内存中因策略或调度需求,会处于各种状态)。2、进程的特征:动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。并发性:任何进程都可以同其他进程一起并发执行。独立性:进程是一个能独立运行的
2017-06-04 17:48:14 353
原创 模拟实现atoi
//注意到细节问题:/*一、函数参数1、形参虚const修饰2、注意对形参指针判空二、需要考虑到的细节1、负数和0(注意区别传入字符‘0’和异常时返回值)2、空字符串3、溢出问题4、输入字符串非非数字字符*/int G_flag =0;//区别空串long long strToDig(const char*digit, bool minus){ long long
2017-06-03 22:00:02 302
原创 不用加减乘除写一个加法函数(位运算)
//way1int add1(int num1,int num2){ if (num2== 0) return num1; int a = num1^num2; int b = (num1&&num2 )>> 1; return add1(a, b);}//way2int add2(int num1, int num2){ int
2017-06-03 21:51:06 351
原创 让你彻底理解红黑树
/*首先呢,按照套路,介绍一下什么是红黑树?一、定义:红黑树是一棵二叉搜索树,它在每个结点上增加了一个存储位来表示结点的颜色,可以是red或者black,通过对任何一条从根节点到叶子结点上的简单路径来约束,红黑树保证最长路径不超过最短路径的两倍,因而近视平衡。然后呢,我么就看一下红黑树有哪些性质呢?二、性质:1. 每个结点不是红色就是黑色2. 根节点是黑色的3. 如果一个根节点是
2017-05-27 17:20:31 348
原创 二叉树常见的面试题(1)
#pragma once#include<iostream>#include<windows.h>#include<string.h>#include<queue>#include<stack>using namespace std;// 孩子表示法template<class T>struct BinaryTreeNode{ BinaryTreeNode(const T&
2017-05-18 02:25:23 242
原创 给定N张扑克牌和一个随机函数,设计一个洗牌算法
void shuffle(char cards[], size_t size){ int count = 0; if (size <= 1) return; for (size_t i = 0; i< size; i++) { //交换第i张和另外一张第i到size随机牌的两张牌 int idx = rand() %
2017-05-18 02:22:07 774
原创 求100W个数中的前K个最大的数
#include<iostream>#include<windows.h>using namespace std;//求100W个数中的前K个最大的数//挨个遍历排序:100w个数太多,内存不够,而且遍历排序效率太低//建大堆:只能选出最大的那个数//可选方案:建K个数的小堆//首先取这100w个数中的前K个数建立最小堆,即长度为K的数组的首元素为最小的元素//然后依次取剩下的元素,
2017-05-12 12:45:43 680 1
原创 详解僵尸进程和孤儿进程
一、僵尸进程:如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了。那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还需要保留这些信息呢?一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号、进程的退出状态、进程运行的CPU时间等。因此进程在终止时,回收所有内核分配给它的内存、关闭它打开的所有文件等等,但是还会保
2017-05-05 23:27:19 269
原创 详解僵尸进程与孤儿进程
一、僵尸进程:如果一个进程在其终止的时候,自己就回收所有分配给它的资源,系统就不会产生所谓的僵尸进程了。那么我们说一个进程终止之后,还保留哪些信息?为什么终止之后还需要保留这些信息呢?一个进程终止的方法很多,进程终止后有些信息对于父进程和内核还是很有用的,例如进程的ID号、进程的退出状态、进程运行的CPU时间等。因此进程在终止时,回收所有内核分配给它的内存、关闭它打开的所有文件等等,但是还会保留
2017-05-01 17:06:55 464
原创 模拟实现循环队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。进行插入操作的一端称为队尾,通常称为入队列;进行删除操作的一端称为队头,通常称为出队列。队列具有先进先出的特性(FIFO)。循环队列:将头尾相接的顺序存储队列称为循环队列。![这里写图片描述](http://img.blog.csdn.net/20170426231225088?watermark/2/text/aHR
2017-04-26 23:13:32 551
翻译 函数fork与vfork的区别与联系详解
函数fork与vfork的区别与联系详解 来源: ChinaUnix博客 日期: 2009.07.16 15:36 (共有条评论) 我要评论创建一个新进程的方法只有由某个已存在的进程调用fork()或vfork(),当然某些进程如init等是作为系统启动的一部风而被内核创建的。 1.fork函数介绍include sys/types.h>include unistd.h>pid_t fork
2017-04-25 10:12:30 255
原创 求一个数组中的和为任意一个数的两个元素
求一个数组中的和为任意一个数的两个元素void Find_Sum(int *arr, int size, int sum){ for (int i = 0; i < size; i++) { for (int j = i+1; j < size; j++) { if (arr[i] + arr[j] == sum)
2017-04-25 02:23:24 891
原创 求数组子数组之和最大值
//给定一个数组,如何找出连续下标所对应的元素相加之和最大的一组下标 //求数组子数组之和最大值(way1) int Max_sum(int *arr, size_t size) { int max_sum = 0; for (int i = 0; i < size; i++) { int sum = 0; for (int j
2017-04-25 01:44:24 347
原创 模拟实现栈
**模拟实现栈**#include<iostream>#include<windows.h>#include<stack>using namespace std;template<class T>class Stack{public: Stack(size_t capacity = 5) { _capacity = capacity+3;//防止传NU
2017-04-23 13:53:06 234
转载 strtok
函数原型:char *strtok(char *s, const char *delim);Function:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。Description:strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时 则
2017-04-23 01:15:26 609
原创 C语言可变参数列表详述及实现printf函数
函数原型:char *strtok(char *s, const char *delim); Function:分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。 Description:strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时 则会将该
2017-04-23 01:10:27 338
原创 对称矩阵压缩存储
压缩矩阵:对称矩阵存储时只需要存储上三角或下三角的数据,所以最多存储n*(n+1)/2个数据。对称矩阵和对称压缩存储的对应关系:下三角存储i>=j,SymmetricMatrix[i][j] == Array[i*(i+1)/2+j]//压缩存储矩阵templateclass Square{public:Square(T *arr,size_t N):_row(N)
2017-04-22 20:46:17 1154
原创 如何在一个相邻元素差的绝对都是1的数组中快速查找一个数?
#include#include#includeusing namespace std;/*有这样一个数组A,大小为n,相邻元素差的绝对& 20540;都是1。如:arr={4,5,6,5,6,7,8,9,10,9}。现在,给定arr和目标整数num,请找到num在arr中的位置。除了依次遍历,还有更好的方法么?*/int Find_Value(int *arr, si
2017-04-22 00:39:36 631
原创 递归和尾递归
递归和尾递归一、递归:若一个对象部分地包含它自己或者用它自己给自己定义,则称这个对象是递归的;若一个过程直接地或者间接地调用自己,则称这个过程是递归的过程。1、递归的思想:把问题分解成规模更小的具有与原问题具有相同解法的问题。2、递归条件:(1)缩小问题规模,使新问题与原问题具有相同的解决形式。(3)设置递归的出口(存在简单场景,可以使递归在简单场景下退出)。例
2017-04-15 16:58:41 441
原创 C++的单例模式
C++的单例模式一、要点: 二、实现://way(1)class singleton{public: static bool flag; static singleton*great() { if (flag== 1) { flag =0; //创建
2017-04-10 16:08:40 229
翻译 进程的task_struct结构描述
进程:正在执行的一个程序或者命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占有一定的系统资源,(查看进程:ps aux)。每一个进程都有一个PCB(程序控制块),它包含了一个进程的所有信息。而PCB又是一个task_struct结构体,那么,接下来我们看看task_struct里都有哪些内容?1. 进程状态(State)进程执行时,它会根据具体情况改变状态。进程状态是调度和对换
2017-04-09 15:52:39 369
原创 如何回答C++面试中关于智能指针的问题?
如何回答C++面试中关于智能指针的问题?1、 什么是智能指针?2、 分析下常见的智能指针有哪些?3、实现一个智能指针呗?(没具体说写哪个,建议默认写:unique_ptr)1、答:智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保自动正确的销毁动态分配的对象,防止内存泄露(利用自动调用类的析构函数来释放内存)。它的一种通用实现技
2017-04-03 11:54:20 8603 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人