- 博客(57)
- 收藏
- 关注
转载 迭代(前、中、后)遍历二叉树
解题思路:前序遍历迭代算法后序遍历迭代算法第一种方法第二种方法中序遍历迭代算法前序遍历迭代算法:二叉树的前序遍历二叉树的遍历,整体上看都是好理解的。三种遍历的迭代写法中,数前序遍历最容易理解。递归思路:先树根,然后左子树,然后右子树。每棵子树递归。在迭代算法中,思路演变成,每到一个节点 A,就应该立即访问它。因为,每棵子树都先访问其根节点。对节点的左右子树来说,也一定是先访问根。在 A 的两棵子树中,遍历完左子树后,再遍历右子树。因此,在访问完根节点后,遍历左
2020-07-05 17:35:02 447
转载 TCP连接递增性能下降的真实原因?TCP、UDP的选择问题?
海量连接导致TCP性能急剧下降是因为:指针链表、指针链表、指针链表。遍历太慢。在接到网络软件开发项目的时候,首先要考虑到的一个大问题就是,究竟应该使用tcp还是udp,或者是采用混合的做连接来实现, 这是在搭建软件整体框架的时候考虑的最多的地方,也是最困难的选择,每一个新手基本都会在这里栽跟头,吃苦头,然后才能慢慢的成熟.什么时候选择tcp,什么时候选择udp,什么时候采用多连接,什么...
2019-08-05 22:59:20 756
转载 服务器端网络编程之I/O模型
基本概念:阻塞: 阻塞调用是指调用返回之前,当前线程会被挂起,只有当调用得到结果后才返回。 非阻塞:与阻塞相反,非阻塞调用是指在不能立即得到结果之前,该函数不会将当前线程阻塞,而是立即返回。 同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。等前一件做完了才能做下一件事。 异步:异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这...
2019-08-04 13:58:50 395
原创 I/O模型之BIO到NIO到select
socket:客户端请求与服务器端建立连接客户端通过socket发起连接请求,在服务器端由socket listen负责监听客户端请求,收到后通过bind和accept建立对应的通信套接字socket。(accept和read/write默认是会阻塞的)BIO(同步阻塞,单线程不并发,并发一定阻塞,多线程高并发但是有缺点):服务器需要监听端口号,客户端通过IP和端口与服务器建立TCP...
2019-08-01 21:12:20 183
转载 C++ #include <algorithm> 库函数算法大全
STL容器方法大全详看:https://www.cnblogs.com/barney-li/p/4186681.html部分截图:很详细的algorithm库函数:非修改性序列操作(12个) ________________________________________________________________________循环 对序列中的每个元素执行某操作 ...
2019-07-30 11:40:51 819
原创 C/C++实现经典排序算法
C/C++实现经典排序算法(重要性:快速排序 > 归并排序 > 选择排序)1、快速排序:采用分治思想,时间O(nlogn) 空间O(logn) 不稳定 交换位置的次数不恒定(次数受原序列是否有序的限制,越有序越快)void quick_sort(int arr[],int left,int right){ if(left > right) re...
2019-07-28 11:22:51 292
原创 I/O模型与I/O多路复用之select、poll 和 epoll 的区别
1、对于多进程或多线程I/O同步与异步:针对多个事件(线程或进程)来说的。如果事件A需要等待事件B的完成才能完成,这种串行执行的机制称为同步。这是可靠的任务序列,要么都成功要么都失败。如果事件A的执行不需要事件B的完成结果,这种并行的执行机制称为异步。事件AB相互不知道对方是否完成,是不可靠的任务序列。2、对于单进程或单线程I/O阻塞与非阻塞:针对单一事件(线程或进程)来说的。阻塞:如...
2019-07-26 22:20:07 326
原创 C++STL内部实现原理
STL包含:容器、算法、迭代器、仿函数和适配器本文只讲容器,实现原理也是我们常见的数据结构。1、序列式容器vector:也叫向量,尾部可变长数组。内部通过数组实现。空间不够时会重新分配内存,然后将原来的元素拷贝到新分配的数组中。queue:数组、单向队列。先入先出。能将任意类型的序列容器转换为队列,由deque支持。deque:数组、双向队列。分配中央控制器map(不是map容...
2019-07-26 22:04:11 3192
转载 DFS深度优先搜索遍历
转载:https://blog.csdn.net/qq_38442065/article/details/81634282超简单详细图的邻接表矩阵存储图,包含一位数组和指向节点的结构体,栈实现访问节点,递归实现dfs.深度优先搜索(DFS, Depth First Search)是一个针对图和树的遍历算法。早在19世纪就被用于解决迷宫问题。对于下面的树而言,DFS方法首先从根节点1开...
2019-07-24 21:18:09 225
原创 C结构体内存对齐细节
内存对齐的细节和编译器实现有关,一般有三个原则:1. 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;2. 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如果有需要,编译器会在成员之间加上填充字节;3. 结构体的总大小为结构体中最宽基本类型成员大小的整数倍,如果有需要,编译器会在最末一个成员之后加上填充字节。ex :struct st...
2019-06-19 13:09:10 184
转载 python关键字
python关键字一共有33个,分别是:python 33个关键字 and del from not while as elif global or with assert else if pass yield break except import print class e...
2019-05-05 14:15:04 463
转载 C++ STL容器库
C++ STL中最基本以及最常用的类或容器无非就是以下几个:string vector set list map下面就依次介绍它们,并给出一些最常见的最实用的使用方法,做到快速入门。string首先看看我们C语言一般怎么使用字符串的char* s1 = "Hello SYSU!"; //创建指针指向字符串常量,这段字符串我们是不能修改的//想要创建 可以修改的字符串...
2019-04-26 11:37:03 351
转载 eclipse 快捷键大全
存盘 Ctrl+s(肯定知道)注释代码 Ctrl+/ (//) Or Ctrl+Shift+/ (/* */)取消注释 取消单行注释:Ctrl+/ 取消多行注释:Ctrl+Shift+代码辅助 Alt+/ (提示相关方法等)快速修复 Ctrl+1 (关键字批量重命名)代码格式化 Ctrl+Shift+f整理导入 Ctrl+Shift+o切换窗口 Ctrl+f6<可改...
2019-04-09 21:49:38 186
原创 C语言 数字、字符串相互转换
1.将一个数字字符转换成数字:char ch='3';//'3'的ascii值是51int a;a=ch-'0'; //'0'的ascii值是48printf("%d",a);输出结果:32.将单个整型数字转换成字符:int a=6;char ch;ch=a+'0';//或者ch=a+48; '0'的ascii值是48printf("%c",ch);输出结果...
2019-04-07 12:03:17 1558
原创 SSDsim simulation function:process()
struct ssd_info *process(struct ssd_info *ssd): 1.这个函数的主要功能是主控读子请求和写子请求的状态变化处理。首先通过一个for循环来循环判断所有channel通道中是否有读子请求或者写子请求,没有子请求则令标识位flag=1,否则flag=0。若flag=1,说明此时没有子请求,则若gc_request>0的话那就紧接着调用...
2019-03-30 16:06:15 637
转载 进程-互斥-同步-临界资源-解决互斥的方法
转载地址:https://www.cnblogs.com/huangwentian/p/7487696.html进程互斥进程互斥:在多个程序中,有两个进程不可以同时进行(例如读,写操作)。竞争资源(临界资源) 当并发进程竞争使用同一资源时,他们之间就会发生冲突。如果操作系统将资源分配给其中的某一个进程使用,另一个进程就必须等待,直到申请的资源可用时,由操作系统分配给他们。...
2019-03-29 20:58:53 4541
转载 数组与链表的优缺点/效率问题
数组,在内存上给出了连续的空间.链表,内存地址上可以是不连续的,每个链表的节点包括原来的内存和下一个节点的信息(单向的一个,双向链表的话,会有两个).数组优于链表的:1.内存空间占用的少,因为链表节点会附加上一块或两块下一个节点的信息.但是数组在建立时就固定了.所以也有可能会因为建立的数组过大或不足引起内存上的问题.2.数组内的数据可随机访问.但链表不具备随机访问性.这个很容易理解.数...
2019-03-29 20:58:21 5246
原创 type* const p与 typer const * p和 const type * p的区别
1.概念char*constp:p为指向字符变量的指针,地址不变,地址内容可变constchar*p:p为指向字符变量的指针,地址可变,地址内容不变char const *p:p为指向字符变量的指针,地址可变,地址内容不变, 与const char *p等价2.进一步理解int main(){ char ch[]="hello world!"; ...
2019-03-28 15:37:39 805
原创 SSDsim simulation function:simulate()
struct ssd_info simulate(struct ssd_info ssd):simulate()是核心处理函数,主要实现的功能包括1,从trace文件中获取一条请求,挂到ssd->request2,根据ssd是否有dram分别处理读出来的请求,把这些请求处理成为读写子请求,挂到ssd->channel或者ssd上3,按照事件的先后来处理这些读写子请求。4,输出...
2019-03-27 21:51:10 1263
原创 SSDsim simulation function:get_ppn()
此函数是在所给的channel,chip,die,plane里面找到一个active_block然后再在这个block里面找到一个页,再利用find_ppn()函数找到ppn。(可能产生擦除节点挂载plane上,可能产生GC节点挂载channel上)。当要写入的页没有相应的映射关系时,直接为该写子请求利用find_ppn()函数找到一个空闲页获得ppn,并更新映射表。当要写入的页有相应的映射关...
2019-03-27 21:42:03 574 2
原创 C语言实现库函数memset
首先,memset函数来自于C语言的库文件函数 #inlcude<strings.h>,void *memset (void *dest, int n, unsigned int len);作用:将目标地址dest开始的连续整数个字节长度len的内容全部设置为指定的内容n。代码实现:void *memset(void *dest,int n,unsigned int len){...
2019-03-27 15:28:49 1020 1
转载 Java实现八大内部排序算法
参考:https://www.cnblogs.com/10158wsj/p/6782124.html?utm_source=tuicool&utm_medium=referralimport java.util.Arrays;public class HeapSort { int a[]={49,38,65,97,76,13,27,49,...
2019-03-26 20:24:06 489
原创 2017暨大考研复试C机试
刚复试完,今年的上机题比以往的难一点,但是总体差不多,前三题没啥难度,第四题稍微难点,差别也就在第四题吧,回忆下,方便以后的考研同学。1. 递归求n!2. 输入年月日求是这一年的第几天(给出了判断平年和闰年的方法和每个月的天数)3. 输入n个同学的成绩,输入i ,求第i名同学成绩4. 数塔问题,输入一座数塔,求从塔顶到塔底所有路线中的最大者,只需输出最大值。每个数只能连接下一层相邻...
2019-03-26 20:22:13 499
转载 几种常见的数据缓存管理算法(LRU / LFU / LRU-K / FIFO / 2Q)
1. 缓存相关概念缓存 : 凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为缓存(Cache)。因为内存相对于硬盘读写速度更快,内存可以作为硬盘的缓存;同样的,硬盘读写速度远高于网络数据的读写速度,也可以将硬盘作为网络数据的缓存。在内存和硬盘之间,硬盘与网络之间,都存在某种意义上的Cache。表现上,缓存载体与被缓存载体总是相对的,缓存设备成本高于被缓存设...
2019-03-26 20:21:41 3363
转载 时间复杂度和空间复杂度的计算方法
什么是算法算法的定义是这样的:解题方案的准确而完善的描述,是一系列解决问题的清晰指令。巴拉巴拉的,虽然是一小句但还是不想看(题外话:有时候吧专业名词记下来面试的时候还是挺有用的),其实就是解决一个问题的完整性描述。只不过这个描述就可能是用不同的方式或者说是“语言”了。算法的效率既然算法是解决问题的描述,那么就像一千个人眼中有一千个阿姆雷特他大姨夫一样,解决同一个问题的办法也是多种多样...
2019-03-25 16:17:16 47135 5
转载 Vimium for chrome keyboard shortcuts
Vimium for chrome keyboard shortcuts:页面导航Command Note ,,<c-e> 向下滚动 k,<c-y> 向上滚动 h 向左滚动 l 向右滚动 gg 滚动到页面顶部 G 滚动到页面底部 zH 滚动到页面最左边 zL 滚动到页面最右边...
2019-03-23 10:35:58 161
原创 C位运算,& | ^,异或运算交换变量的错误性原因
1.&与运算(只有1&1才为1,其他全为0)应用:可以实现指定位清零;应用:取出给出值的指定位;2.|或运算(只有0|0才为0,其他全为1)应用:结合|和&实现大小写字母转换?3.^异或(或者XOR)运算符(相同为0不同为1,支持逆运算,常用于加密算法)应用:特定位翻转:与0异或不变,与1异或则翻转。比如,使01111010前四位翻转,则跟...
2019-03-21 17:21:55 1697
原创 再读操作系统
1.并行:指的是两个或多个事件在同一时刻发生.。注意: 是同一时刻,瞬时性.。2.并发:指的是两个或多个事件在同一时间间隔内发生.。注意: 是同一时间间隔内,不具有瞬时性。在多个程序环境下,并发性指的是在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一刻只能有一道程序运行,所以微观上来说,这个时间间隔内的多个程序同时运行是在每一个很小的时间段内分别单独交替运行。3.进程:是指...
2019-03-04 09:51:56 134
转载 NAND Flash 和 NOR Flash原理和差异对比
非易失性存储元件有很多种,如EPROM、EEPROM、NOR FLASH和NAND FLASH,前两者已经基本被淘汰了,因此我仅关注后两者,本文对FLASH的基本存储单元结构、写操作、擦除操作和读操作的技术进行了简单介绍,对了NOR和NAND由存储结构决定的特性和应用场合的差异,对后续的硬件设计和驱动编程起到铺垫作用。1 FLASH基本存储单元---浮栅场效应管 NOR ...
2019-01-07 10:41:30 3470 7
转载 操作系统中文件句柄和文件FILE指针
当你读或写一个文件时,必须先通知系统,告诉他你的举动,这便是一个打开文件的过程。在这里说写一个文件(w方式),如果文件不存在,便创建一个文件,失败那就不用说拉,如果成功拉呢?系统将怎样管理你的文件(你的文件有可能不只有一个)。这时,文件将返回一个整数值,该值唯一标识这个文件,每个被创建的文件都会有一个唯一标识值,称为文件标识符。(注:r方式不必考虑,他必须通过创建过程) 在c语言中...
2018-10-22 14:18:07 618
原创 3D Xpoint技术与NAND Flash、3D NAND Flash及DRAM的比较
1.NAND颗粒:浮栅极物理结构单元,通过电压驱动电子,由电压值来判定bit位0或1。分为SLC、MLC、TLC三种flash颗粒,擦除次数分别为1万-10万、1千-1万、几百-1千次。寿命是NAND Flash的最大问题,其次是由于特殊的结构,擦除时延较大,在大量写的时候由于垃圾回收机制导致较大时延,但由于HDD的存在,NAND Flash在性能上完胜HDD,给用户带来更舒适的体验,这就是为什么...
2018-09-27 22:15:25 4542
原创 Linux CentOS安装图形界面
在字符界面输入命令:yum groupinstall “X Window System” (命令不需要任何改动直接键入即可) 然后,键入命令:yum grouplist 可能如下图: 可以看到Avilable Environment Groups: 中有图形界面GNOME Desktop(排序上可能存在一些出入) 3. 键入命令:yum groupinstall “GNOME Desktop...
2018-08-04 21:30:28 332
转载 关于C语言中内存分配问题(malloc函数)
malloc函数的原型:(void *)malloc(int size) malloc函数的返回值是一个void类型的指针,参数为int类型的数据,即申请分配的内存大小,单位是字节。内存分配成功之后,malloc函数返回这块内存的首地址,你需要一个指针来接受这个地址。但是由于函数的返回值是void *类型,所以必须强制转换成你所接收的类型。也就是说这块内存将来要用来存储什么类型的数据,比如...
2018-08-04 20:44:38 5064
转载 ROM、RAM、DRAM、SRAM和FLASH的区别以及内存工作原理
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在...
2018-07-18 21:50:12 1485
原创 三阶魔方解法
一,选好底面和对立面,底面和对立面是相对的。先定好对立面中除了中间块以外的另外颜色和底面颜色相同的十字架(在对立面做好底色块是十字架),然后对好对立面侧面中间块(每面歌两个相同颜色块)颜色,然后四面侧面分别旋转至底层,再排好底下第一层颜色,以及侧面T字型。二,对好第二层,口诀:远切回回,接孩子放学。详看下面视频网址。三,对好对立面十字架。四,对好对立面。五,对好四条棱,详看视频网址...
2018-07-16 22:28:02 2151
转载 Linux相关问题解决
Linux中文显示乱码?如何设置centos显示中文:https://jingyan.baidu.com/article/ab69b270de8b4f2ca7189f1d.html
2018-07-11 16:10:52 153
原创 计算机中的原码、反码和补码计算
计算机中的所有数据都是以数据的补码形式存储的(机器码)。这里涉及到原码、反码和补码的计算如下:1、原码:在计算机中的机器字长的最高位(最左边)表示正负,0为正数,1为负数,原码就是最高位是符号位,其余位表示数值(绝对值)大小。2、反码:正数的反码就是其本身(原码)不变,而负数的反码就是在负数原码的基础上符号位保持不变,其余位按位取反。3、补码:正数的补码就是其本身(原码),而负数的补码就是在原码的...
2018-07-02 22:13:19 23213
转载 eclipse常用快捷键大全
请看转载:https://blog.csdn.net/u010504185/article/details/53079810
2018-05-10 08:32:54 142
转载 ssd固态硬盘和传统机械硬盘的区别
1. 存取速度方面:SSD固态硬盘采用闪存作为存储介质,读取速度相对机械硬盘更快,而且 固态硬盘寻道时间几乎为0,这样的特质在作为系统盘时候,可以明显加快操作系统启动速度和软件启动速度。 2. 抗震性能方面:SSD固态硬盘由于完全没有机械结构,所以不怎么怕震动和冲击,不用担心因为震动造成无可避免的数据损失。 3. 发热功耗方面:SSD固态硬盘不同于传统硬盘,不存在盘片的高速旋转,所以发热...
2018-03-12 19:31:55 950
原创 Linux centos 查看该系统的位数的方法
Linux和Windows一样有位数的区分,64位或者是32位。查看Linux位数的方法有:方法一:在命令行输入:file /sbin/init 若显示:/sbin/init: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for G
2017-12-13 17:20:19 9798
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人