自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(191)
  • 资源 (7)
  • 问答 (4)
  • 收藏
  • 关注

原创 shell基础知识

shell基础知识       脚本语言:脚本是短小的、用来让计算机完成一系列工作的程序,这类程序可以用文本编辑器修改,不需要编译,通常是解释运行的。       #!是一个约定的标记,告诉系统其后路径所指定的程序即是解释此脚本文件的shell程序。shell变量使用变量  &nb...

2018-02-08 19:40:16 440

原创 C++面试题(~10)

C++中忘记用delete释放内存,如何防止内存溢出使用智能指针使用RAII方法Kill -9 pid 直接杀死进程。。。

2017-09-18 16:20:17 603

原创 Linux中的文件描述符与打开文件之间的关系

概论在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件、设备文件等。文件描述符(file descriptor)是内核为了高效管理已打开文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序在刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符是3。PO

2017-09-07 17:34:48 438

原创 TCP发送缓冲区

每一个TCP套接字都有一个发送缓冲区,可以使用SO_SNDBUF套接字选项来更改缓冲区的大小。当某个进程调用write时,内核从该应用进程的缓冲区复制所有数据到套接字的发送缓冲区中,如果该套接字的发送缓冲区容不下该应用进程的所有数据(或是应用进程的缓冲区大于套接字的发送缓冲区,或是套接字的发送缓冲区中已有其他数据),该应用进程将被投入睡眠,这里假设该套接字是阻塞的,它通常是默认设置。内核将不从wri

2017-09-07 11:00:41 2138

原创 常见缓存算法和LRU的C++实现

对于web开发而言,缓存必不可少,也是提高性能最常用的方式。无论是浏览器缓存(如果是chrome浏览器,可以通过chrome:://cache查看),还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用户的访问,同时也可以降低服务器的负载和压力。那么,了解常见的缓存淘汰算法的策略和原理就显得特别重要。常见的缓存算法LRU (Least recently used

2017-09-04 10:56:36 770

原创 C++面试知识点

strcpy函数实现char* strcpy(char* dest, const char* src){ assert((dest != NULL) && (src != NULL)); //检查指针的有效性 char* res = dest; while((*dest++ = *src++) != '\0'); return res; //返回res的原始值使函数能够支持链式表

2017-09-02 21:12:19 341

原创 Segmentation Fault错误原因总结

一、 什么是“Segmentation fault in Linux”所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的32位是保存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序的在cpu中的运行级别,指向的gdt是由以64位为一个单位的表,在这张表中就保存着程序运行的代码段以及数据

2017-09-01 17:24:52 585785 11

原创 linux硬链接与软链接

链接概念Linux链接分两种,一种称为硬链接(Hard Link),另一种称为符号链接(Symbolic Link),默认情况下,ln命令产生硬链接;硬链接硬链接指通过索引节点来进行链接,在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一个索引节点是存在的,一般这种链接就是硬链接,硬链接的作用

2017-08-30 22:06:52 456

原创 多进程 or 多线程

什么是多线程?多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。 使用线程的好处有以下几点: 使用线程可以把占据长时间的程序中的任务放到后台去处理 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度 程序的运行速度可能加快 在一些等待的任务实现上如用户输入、文件读写和网络

2017-08-29 22:54:52 415

原创 函数对象和函数指针

C++的函数调用语法实体有函数、类似于函数的宏、函数指针、仿函数(函数对象)。函数调用方式有:直接调用:通过函数名直接调用函数,函数起始地址成为指令的一部分,因此编译器就能确定调用了哪个函数;间接调用:通过函数指针来调用函数,函数起始地址位于内存或寄存器的某处,因此,到运行期才能确定调用哪个函数。所以仿函数比函数指针快,仿函数在编译器就确定好了;内联调用:直接在调用处展开函数代码,在编译期进行

2017-08-29 15:54:21 575

原创 索引

索引数据库索引,是数据库管理系统中的一个排序的数据结构,以协助快速查询,更新数据库表中数据。索引的实现通常使用B树及其变种B+树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构,就是索引;为表设置索引是要付出代价的:增加了数据库的存储空间;在插入和修改数据是要花费较多的时间(因为索引也随之

2017-08-23 22:20:29 250

原创 数据库事务的隔离等级

数据库的事务隔离级别有4个,由低到高依次是Read uncommitted,Read Committed,Repeatable read,Serializable,这四个级别可以逐个解决脏读,不可重复读,幻读等问题。 Tables 脏读 不可重复读 幻读 Read uncommitted √ √ √ Read Committed × √ √ Repe

2017-08-23 17:52:05 1177 2

原创 多线程编程

Linux线程概述内核线程和用户线程线程是程序中完成独立任务的完整执行序列。即一个可调度的实体,根据运行环境和调度者身份,线程分为内核线程和用户线程:内核线程:在有的系统上也称为LWP(轻量级进程),运行在内核空间,由内核调度;用户线程:运行在用户空间,由线程库调度;当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程,可见,内核线程相当于用户线程运行的“容器”。一个进程可以拥

2017-08-19 17:35:55 248

原创 管道

管道(pipe)管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系的进程间通信;实现机制管道是由内核管理的一个缓冲区,相当于放入内存的一个纸条。管道的一端连接一个进程的输出,这个进程会向管道中放入信息。管道的另一端连接一个进程的输入,这个进程取出被放入管道的信息。一个缓冲区不需要很大,它被设计成为环形的数据结构,以便管道可以被循环

2017-08-18 23:17:44 414

原创 多进程编程

fork()系统调用#include<sys/types.h>#include<unistd.h>pid_t fork(void);返回值:在父进程中返回子进程的pid,在子进程中返回零;fork函数复制当前进程,在内核进程表创建一个新的进程表项,新的进程表项有很多属性与原进程相同,比如堆指针、栈指针和标志寄存器的值。但也有许多属性被赋予了新的值,比如该进程的PPID被设置为原进程的PID,信号

2017-08-18 21:56:24 203

原创 定时器

定时器概述网络程序需要处理的第三类事件是定时事件,比如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,因此有效的组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此,我们要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,比如链表、排序链表和时间轮,将所有定时器串联起来,以实现对定时事件的统一管理。定时是指在一段时间

2017-08-18 11:46:40 233

原创 sigaction()之sa_mask

sigset_t sa_mask是一个信号集,在调用该信号捕捉函数之前,将需要block的信号加入这个sa_mask,仅当信号捕捉函数正在执行时,才阻塞sa_mask中的信号,当从信号捕捉函数返回时进程的信号屏蔽字复位为原先值;这个复位动作是sigaction函数内部处理,还是由调用者自己处理呢?由sigaction函数自动复位,不用自己处理。 设置sa_mask的目的在调用信号处理函数时就能阻塞某

2017-08-17 23:03:09 2700 2

原创 I/O复用

I/O复用虽然能同时监听多个fd,但它本身是阻塞的,并且当多个文件描述符同时阻塞时,如果不采取额外的措施,程序就只能顺序依次处理其中每一个fd,这使得服务器程序看起来像是串行工作的。如果要实现并发,只能使用多进程或多线程等编程手段。select系统调用函数原型#include <sys/select.h>int select(int nfds, //指定被监听的文件描述符总数

2017-08-17 17:43:52 217

原创 守护进程

概念守护进程(daemon)是一种运行在后台的特殊进程,它独立于控制终端并周期的执行某种任务或等待处理某些发生的事件。在Linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程能突破这种限制,它脱离于终端在后台运行,并且它脱离终端的目的是为了避免进程在运行过程中的信

2017-08-17 11:42:44 368

原创 网络编程问题

数据发送假设应用程序要发送40KB数据,但是OS的TCP发送缓冲区只有25KB剩余空间,那么剩下的15KB数据怎么办? 如果等待OS缓冲区可用,会阻塞当前线程,因为不知道对方什么时候收到并读取数据,因此网络库应该把这个15KB数据缓存起来,放到这个TCP链接的应用层发送缓冲区中,等socket变得可写的时候立刻发送数据,这样“发送”操作不会阻塞。如果应用程序随后又发送50KB数据,而此时发送缓冲区中

2017-08-17 09:59:49 145

原创 15. 3Sum

Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set must not contain duplic

2017-08-14 22:14:25 172

原创 14. Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.string subCommon(string& s1, string& s2){ int idx = 0, len = min(s1.size(), s2.size()); while ((s1[idx] ==

2017-08-14 21:50:01 193

原创 文章标题

Given an integer, convert it to a roman numeral.Input is guaranteed to be within the range from 1 to 3999.由上图可知,数字都可由1,4,5,9,10,40,50,90,100,400,500,900,1000构成;string intToRoman(int num) { string s

2017-08-14 21:18:38 135

原创 9. Palindrome Number

Determine whether an integer is a palindrome. Do this without extra space.click to show spoilers.Some hints: Could negative integers be palindromes? (ie, -1)If you are thinking of converting the integ

2017-08-13 22:56:24 154

原创 8. String to Integer (atoi)

Implement atoi to convert a string to an integer.Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.N

2017-08-13 22:46:33 154

原创 7. Reverse Integer

Reverse digits of an integer.Example1: x = 123, return 321 Example2: x = -123, return -321click to show spoilers.Have you thought about this? Here are some good questions to ask before coding. Bonus

2017-08-13 22:39:10 149

原创 Shared_ptr详解

shared_ptr在boost库中已经有多年了,C++11又为其正名,把他引入了STL库,放到了std的下面,可见其颇有用武之地;但是shared_ptr是万能的吗?有没有什么样的问题呢?本文并不说明shared_ptr的设计原理,也不是为了说明如何使用,只说一下在使用过程中的几点注意事项。用法shared_ptr<int> sp(new int(10)); //一

2017-08-13 21:12:20 1337

原创 6. ZigZag Conversion

The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)P A H NA P L S I I GY

2017-08-11 23:20:18 139

原创 Linux下各种最大数目

ulimit命令查看和更改系统限制ulimit命令详解ulimit用于shell启动进程所占用的资源,可以用来设置系统的限制;语法格式:ulimit [-acdfHlmnpsStvw] [size]在/etc/security/limits.conf文件中定义 可以使用ulimit -a查看系统的所有限制Linux大部分的命令设置都是临时生效的,而且ulimit命令只对当前终端有效。如果需要永久有效

2017-08-11 17:45:52 620

原创 Linux(C/C++)下的文件操作open,fopen

open是Linux下的底层系统调用函数,fopen是C/C++下的标准I/O库函数,带输入/输出缓冲。Linux下的fopen是open的封装函数,fopen最终还是要调用底层的系统调用open。所以在Linux下如果对设备进行明确的控制,最好使用底层系统调用(open)。open对应的文件操作有:close, read, write,ioctl 等。 fopen 对应的文件操作有:fclose

2017-08-11 16:03:23 1611

原创 x86架构下,页面大小为什么是4K?

前提:32位逻辑空间的计算机OS,两级页表,每个页中每个条目占4bytes,即32位的数据 以上前提是目前X86架构的32为系统的真实情况;设页大小为X(byte),则X/4为每个页可以存取的条目的个数,两级页表的地址转换关系如下图所示:假设在一个32位的条目中存放此内存的地址,则2*log2(X/4)就是图1中,p1+p2的位数;2^(p1 + p2):系统可以寻址多少个页面 (X / 4)^

2017-08-11 15:37:41 6464 2

原创 struct/class等内存字节对齐问题详解

问题引入定义一个结构体的一般形式为:struct 结构体名{ // 类型说明符 成员名;};例如下面的结构体:struct Stu{ int id; char sex; float hight;};那么一个这样的结构体变量占多大内存呢?也就是cout<<sizeof(Stu)<<endl;输出时多少呢? 在了解字节对齐之前会想当然的认为:sizeof(Stu

2017-08-11 10:00:54 595

原创 布隆过滤器及其实现

简介(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。loom Filter是一种空间效率很高的随机数据结构,它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于可以快速且空间效率高的判断一个元素是否属于一个集合;用来实现数据字典,或者集合求交集:优点: 空间效率和查询时间都远远超过一般算法;缺点: 有一定的误识别率(假

2017-08-10 18:22:08 740

原创 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?

题目:给定一个函数rand()能产生1到n之间的等概率随机数,问如何产生1到m之间等概率的随机数?先把问题特殊化,例如原题变为给定一个函数rand5(),该函数可以随机生成1-5的整数,且生成概率一样。现要求使用该函数构造函数rand7(),使函数rand7()可以随机等概率的生成1-7的整数。很多人的第一反应是利用rand5() + rand()%3来实现rand7()函数,这个方法确实可以产生1

2017-08-09 22:52:38 3473

原创 蓄水池抽样算法 (Reservoir Sampling Algorithm)

蓄水池抽样算法简介蓄水池抽样算法是随机算法的一种,用来从N个样本中随机选择K个样本,其中N非常大(以至于N个样本不能同时放入内存)或者N是一个未知数。其时间复杂度为O(N),包含下列步骤 (假设有一维数组 S, 长度未知,需要从中随机选择 k 个元素, 数组下标从 1 开始), 伪代码如下:array R[k]; // resultinteger i, j;// fill the reser

2017-08-09 21:16:19 995 2

原创 100层楼2个鸡蛋,如何得知鸡蛋能承受几层的撞击

有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。 我们先假设最坏情况下,鸡蛋下落次数为x,即我们为了找出N,一共用鸡蛋做了x次试验,那么,我们第一次应该从哪层楼往下扔鸡蛋呢?先让我们假设第一次是在第y层楼扔的鸡蛋,如果第一个鸡蛋第一次扔的时候就摔碎了,我们就剩下一个鸡蛋,要用它

2017-08-09 17:57:05 522

原创 如何定义一个只能在堆上(栈上)生成对象的类?

在C++中,类的对象建立分为两种:一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。静态建立一个类对象,是由编译器为对象在栈空间分配内存,通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。动态建立类对象,是使用new 运算符将对象建立在堆空间中。这个过程分为两步:执行opera

2017-08-08 17:53:22 327

原创 Linux中的五种I/O模型

概念说明用户空间和内核空间现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,一部分是内核空间,一部分是用户空间。针对Linux OS而言,将最

2017-08-08 16:45:29 675

原创 Linux服务器程序规范

Linux服务器程序规范Linux服务器程序一般都是以后台进程形式运行,后台进程又称为守护进程(daemon),其没有控制终端,不会意外接收到用户输入。守护进程的父进程通常是init进程(PID为1的进程);Linux服务器程序通常有一套日志系统,其至少能输出日志到文件,有的高级服务器还能输出日志到专门的UDP服务器;Linux服务器程序一般以某个专门的非root身份运行;Linux服务器程

2017-08-08 10:56:50 600

原创 C++面试题(~01)

冯诺依曼体系结构冯诺依曼体系结构用于存储程序方式,指令和数据不加区别混合存储在同一存储器中。有如下特点:一律用二进制数表示数据和指令;顺序执行程序。执行前,将需要的程序和数据先放入存储器(PC为内存),当执行时把要执行的程序和要处理的数据按顺序从存储器中取出指令并一条一条执行,称作顺序执行程序;计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成;编程测试机器大小端存储请写一个

2017-08-07 22:38:39 458

学生成绩管理系统用C语言实现

学生信息管理系统 学生信息从文件读取,写入文件,增删改查学生信息 学生信息管理系统 学生信息从文件读取,写入文件,增删改查学生信息 学生信息管理系统 学生信息从文件读取,写入文件,增删改查学生信息

2020-01-08

离散数学-关系,集合,求自反闭包,对称闭包,传递闭包

离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包

2020-01-08

校园网课程设计计算机网络

校园网课程设计计算机网络

2014-01-07

学生信息管理系统java课设

学生信息管理系统java课设

2014-01-07

操作系统课设模拟UNIX文件管理

操作系统课设模拟UNIX文件管理

2014-01-07

模拟UNIX文件管理

是描述关于UNIX文件管理的一个小程序,很实用,同时很容易上手

2013-12-23

美赛论文资料

该类是美赛2012年的特等奖的论文,主要是描述水资源的一篇论文

2013-12-19

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

TA关注的人

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