- 博客(13)
- 收藏
- 关注
原创 C语言基础回顾-定义声明+关键字
一、关于定义和声明声明: 例: extern int i; extern int arr[ ];告诉编译器,已经定义了一个变量名,但是不分配空间,声明可以出现多次。定义: 例: int i const int i = 0(定义的同时初始化)创建一个对象或者变量并且给其分配内存,名字和内存匹配,并且内存的位置也不能改变,定义只能出现一次定义是一种特殊的声明。二、重要关键字:1.a
2017-07-18 00:30:45
577
原创 Linux下线程的同步与互斥以及死锁问题整理
前言:在同一个进程中的全局变量不同的线程是能够看到的。之前我们在进程中了解到#####二元信号量,是用来保护临界资源,代码上保护临界区,在两个不同的进程在访问公共资源的时候保证访问的互斥和同步。那么在线程中,不同的线程共享进程地址空间,为了保护公共的数据,我们也必须要保证线程的互斥和同步。测试用例:在一个进程中定义一个全局变量,让两个线程同时对這个公共资源进行累加(累加的次数很大为了看到明显的效果)
2017-07-15 01:58:58
484
原创 信号在内核中的状态
概念: 实际执行信号的处理动作叫做信号的递达(Delivery)(忽略、默认、自定义) 信号从产生到递达之间的状态叫做信号的未决(Pending) 进程可以选择阻塞(Block)某个信号,被阻塞的信号一直处于未决状态,直到进程解除对该信号的阻塞,信号才能递达。注意点: 1.信号的阻塞和忽略是两个概念,两者的区别:阻塞是让信号无法递达、但是忽略是信号递达之后执行的一种处理动作。 2.一个信号
2017-07-14 09:59:42
528
原创 聊聊时间复杂度和Fibonacci数列的优化
时间复杂度概念的核心点:时间复杂度就是函数走了多少次。在计算时间复杂度的时候只是考量最坏的情况。关注式子中增长最快的表达式,忽略其他。忽略常数。我们需要将时间复杂度的求解放在不同的情况下:1.简单情况,一些循环啊什么的。2.二分算法(分治法) 二分查找算法、堆算法 ,完全二叉搜索树和满二叉搜索树。 快速排序、归并排序 log2(N)。3.递归算法:递归的次数*每次递归里面的时间复杂度。主要讨
2017-07-12 18:49:36
442
原创 深夜聊一波栈内存和堆内存的区别
先总结一下:1 栈:为编译器自动分配和释放,如函数参数、局部变量、临时变量等等2 堆:为成员分配和释放,由程序员自己申请、自己释放。否则发生内存泄露。典型为使用new申请的堆内容。除了这两部分,还有一部分是:3 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。栈内存和堆内存的区别(一个笔试题的一部分)笔试题目:请解释一个栈内存与一
2017-07-12 01:49:54
644
原创 Linux中的软连接与硬链接
硬连接指通过索引节点来进行连接。在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号 (Inode Index) 。在 Linux 中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止 “ 误删 ” 的功能。其原因如上所述,因为对应该目录的索引节点有一个
2017-07-12 01:37:54
312
原创 了解ARP协议
ARP协议:地址解析协议所属层:ARP是介于网络层和数据链路层中间的一种协议。ARP作用:已知一台主机或者路由器的IP地址,如何知道它的硬件地址?這个时候就需要ARP完成一定的工作一、ARP数据报的格式:看看下面這张图其中的几个字段:帧类型能够表示在MAC帧中的数据是ARP还是RARP硬件类型:1为以太网协议类型:要将什么样的协议转化为ARP数据报。op表示是发送帧还是响应帧。注意:接收端接收到AR
2017-07-09 17:38:48
861
原创 总结linux下的线程
什么是线程?看一张简略的示意图线程概念:之前我们学习了进程,说进程是系统资源分配的基本单位,也是调度的基本单位,但是在发展中,出现了线程的概念,linux在POSIX标准中引入了线程库(用户线程库)。需要牢记的重点是线程是比进程粒度更细的执行流 liunx下没有真正的线程。1.线程是系统调度的基本单位,而进程是系统资源分配的基本单位。2.上图的意思是:线程是进程的一个执行分支,在进程的内部运行
2017-06-20 17:05:51
312
原创 浅谈Linux进程等待
首先我们要想到两个问题:1、进程为什么等待?2、进程怎么等待?为什么等待:首先要知道进程终止或者退出的时候会发生什么,进程会关闭所有文件描述符,释放在用户空间分配的内存,但是PCB却会暂时保留,里面存了一些信息,假如這个进程运行结束,不论结果正确与否,只要是正常终止(反正进程是把代码跑完了),PCB里面就放着进程的退出状态(退出码),如果是异常终止(肯定是收到信号了),那么PCB里面存放着导致该进程
2017-06-11 20:14:25
2070
原创 递归创建二叉树以及一些基本操作
递归创建二叉树以及一些基本操作基本内容二叉树的基本概念和遍历方式使用递归创建一个简单的二叉树二叉树使用递归遍历时的调用栈帧实现代码一些基本操作的递归实现一、一些基本的东西首先我们要明确,二叉树是一种数据结构,相比于之前的顺序表和链表,二叉树是一种非线性结构,比较特殊,刚开始入门二叉树,我们需要了解二叉树的基本结构框架,知道如何搭建一个简单的二叉树,当然在這篇笔记或者博客里面提到的基本都是
2017-05-27 20:08:58
9479
1
原创 模拟实现STL中的list
模拟实现std::listSTL中实现的链表是一种带头结点的双向循环链表 相比于之前我们在C++初级阶段实现和模板实现的链表或者双向链表更加的方便,比如更加方便的遍历。方便查找,方便各种操作,具体的在实现的时候能够体会到。实现代码:#define _CRT_SECURE_NO_WARNINGS 1#include#include#includeusing namespace
2017-05-26 10:57:26
439
原创 Linux环境下的文件权限管理
1.创建一个目录 我要进入一个目录我需要什么权限?进入用户目录:使用mkdir f1创建一个目录f1。查看该目录的权限: 由上面我们知道对于用户来说,该目录的权限属性(对于用户)为:可读可写可执行操作。如果用户想要进入一个新创建的目录,那么该目录的必须拥有可执行权限。再此情况下我们使用cd f1操作进入该目录:目录中为空。 那么我尝试修改
2017-04-01 16:43:25
437
原创 关于const和一级指针变量的种种
#define _CRT_SECURE_NO_WARNINGS 1//const修饰的变量拥有了常量的性质 ,他的值不能被修改,我们只能初始化//但是要记住的是 ,在C中 const修饰的变量本质还是变量,而不像C++中被修饰的变量就失去了变量的性质完全是一个常量/*const int i; int const i;*///用const申明常量的方式 两种都可以;
2017-03-30 00:08:09
236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人