奋斗的小菜鸟!
码龄4年
  • 263,237
    被访问
  • 42
    原创
  • 57,058
    排名
  • 71
    粉丝
关注
提问 私信
  • 加入CSDN时间: 2018-01-16
博客简介:

qianyayun19921028的博客

查看详细资料
  • 3
    领奖
    总分 402 当月 11
个人成就
  • 获得402次点赞
  • 内容获得69次评论
  • 获得1,226次收藏
创作历程
  • 2篇
    2021年
  • 3篇
    2019年
  • 45篇
    2018年
成就勋章
TA的专栏
  • 笔记
    1篇
  • 代码
    1篇
兴趣领域 设置
  • 移动开发
    android studio
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

浅析函数栈

函数调用大家都很熟悉了,写代码的人每天都在各种调用,那这个函数调用怎么实现的呢,通过栈实现的,但并不是说只能用栈实现,只是正好栈的先入后出,后入先出的特性正好满足函数调用的特性。如果感兴趣的可以研究研究其他的方式。下面就介绍一下函数栈。 ...
原创
发布博客 2021.12.20 ·
48 阅读 ·
0 点赞 ·
0 评论

2021-06-18

我已经两年没有更新我的博客啦,平时工作实在太忙了,996的福报我受不了了,所以有一点点想换份工作,所以我又要开始我的博客之旅了,此次博客会按照算法-leetcode题目-设计模式-sql-然后就是一些书的学习笔记!希望能坚持下去,看到的亲记得催更,不然木有动力!明天开始啦!!!...
原创
发布博客 2021.06.18 ·
57 阅读 ·
1 点赞 ·
5 评论

buffer和cache的区别

作者:知乎用户链接:https://www.zhihu.com/question/26190832/answer/32387918来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。cache 是为了弥补高速设备和低速设备的鸿沟而引入的中间层,最终起到**加快访问速度**的作用。而 buffer 的主要目的进行流量整形,把突发的大数量较小规模的 I/O 整理成平...
转载
发布博客 2019.08.18 ·
180 阅读 ·
0 点赞 ·
0 评论

GPU与CPU的区别

转载自:https://www.cnblogs.com/biglucky/p/4223565.html如介意请联系我。我觉得这个是我看到的比较清晰的介绍了CPU与GPU区别的了,关于文章中cache、buffer等概念的解释,我会另开一篇,如已经了解可直接看这篇。1.2CPU和GPU的设计区别CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。C...
转载
发布博客 2019.08.18 ·
11087 阅读 ·
6 点赞 ·
0 评论

中缀表达式转后缀表达式

自从找完工作人就废了,幡然醒悟不行不行,得把忘记的都记下来。。。。。。中缀表达式就是我们正常使用的那种,例如:a+b*c后缀表达式就是abc*+;为什么要有中缀表达式和后缀表达式呢?因为中缀表达式便于人们的理解与计算,但是后缀表达式更方便计算机的运算(如二叉树、堆栈的方法计算),因此在读取一个中缀表达式后,我们得办法将他转化为后缀表达式。转化方式有三种:首先假设我们需要转化...
原创
发布博客 2019.04.12 ·
86830 阅读 ·
261 点赞 ·
34 评论

打开jupyter notebook时打不开网页,网页不显示等情况

python小白为了学习爬虫,在第一步就遇到了问题,记录一下解决办法在windows下打开jupyter notebook时,首先是win+r打开控制台然后输入ipython notebook打开时会默认使用IE浏览器,但是只显示一个home不能打开使用,这是因为不支持该浏览器的原因。1、win+r   然后输入jupyter notebook --generate-config2...
原创
发布博客 2018.11.30 ·
13375 阅读 ·
10 点赞 ·
10 评论

二十六进制加法

二十六进制加法#include<iostream>#include<string>#include<vector>#include<stdio.h>using namespace std;vector<char> add(string str1, string str2){    vector<char>...
原创
发布博客 2018.09.08 ·
443 阅读 ·
0 点赞 ·
2 评论

PCB的信号集

      每一个进程都有一个PCB(进程控制块),在PCB中有两个信号集,分别是未决信号集和阻塞信号集。       其中未决信号集是记录有没有信号来临,一旦有信号来临则该信号位置1,如下图中有2号信号来临,则将2号未决信号集置1,然后未决信号集再将该信号像阻塞信号集传递,如果对应2号信号集的位是1,则表示阻塞,该信号被阻塞在了阻塞信号集上无法到达句柄,该信号处于未决态。若阻塞信号集的2号信...
原创
发布博客 2018.08.24 ·
448 阅读 ·
0 点赞 ·
0 评论

pipe管道通信原理

每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信管道是一种最基本的IPC机制,由pipe函数创建:#include <unistd.h>int pipe(int filedes...
原创
发布博客 2018.08.03 ·
21768 阅读 ·
25 点赞 ·
3 评论

僵尸进程和孤儿进程

每个进程都是由用户空间和系统空间组成,pcb在系统空间。一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则保存着导致该进程终止的信号是哪个。这个进程的父进程可以调用wait或waitpid获取这些信息,然后彻底清除掉这个进程。我们知道一个进程的退出状态可以在Shell中用特殊...
原创
发布博客 2018.08.03 ·
395 阅读 ·
0 点赞 ·
0 评论

cpu如何运行进程

     cpu主要是由运算器、寄存器、控制器和译码器组成,当我们运行一段代码的时候,代码被加载进寄存器中,(单cpu单核的情况)当有另一个进程需要运行的时候,第一个进程就会被存入pcb的栈中,等到一定的时间在重新加载到寄存器中运行。      一般情况下,cpu处理数据能力有1Ghz=1ns,多进程的时候cpu采取分时复用的方式进行,每个进程10ms或者其他时间的进行交换,由于运行速度很快所...
原创
发布博客 2018.08.02 ·
1703 阅读 ·
0 点赞 ·
0 评论

虚拟内存

         每一个进程在打开时,都各自有自己的pcb(进程控制块),pcb相当于一个指针,指向文件描述符表,假如一个进程要打开一个文件就会产生一个句柄(文件描述符),该句柄通过pcb指向文件描述符表,通过文件描述符表的内容在磁盘中找到你想打开的文件。pcb在内核中,每一个进程打开时都会有内核层和用户层,其中内核层是不对用户开放的,其中包含命令行参数和环境变量。用户层就是我们常见的堆栈常量...
原创
发布博客 2018.08.02 ·
3532 阅读 ·
1 点赞 ·
0 评论

linux下IO工作机制

        每一个FILE文件流(输出流、输入流、错误流)都有一个缓冲区buffer,默认大小8192Byte。        每一个文件流都有三个部分组成:文件描述符 、位置指针、缓冲区buffer。如下图右边所示        我们平时写程序用到的都是c标准函数,我们并不清楚在操作系统中怎么处理我们的输入的,下面就以printf来距离说明:假如现在有程序A需要向屏幕输出hell...
原创
发布博客 2018.07.31 ·
705 阅读 ·
0 点赞 ·
0 评论

树的非递归调用遍历(中序遍历)

本文讲的是非递归调用的中序遍历,如果想知道递归调用的中序遍历可以看我的另一篇博文分析:1、访问顺序     中序遍历是当左子树为空或者左子树已经访问完毕以后,在访问根节点。访问完根节点在访问右子树。2、选择什么类型的数据结构(栈?队列?)     因为先走到的后访问,后走到的先访问,所以很显然是栈结构。3、节点所有路径的情况     步骤1、如果节点有左子树,该节点入栈...
原创
发布博客 2018.07.22 ·
344 阅读 ·
0 点赞 ·
0 评论

拷贝二叉树

拷贝二叉树,就是要拷贝根节点,叶子节点,第一步得先分配一个空间给根节点, BiTNode* newnode = (BiTNode*)malloc(sizeof(BiTNode));将其叶子节点指向NULL,在判断原树的根节点的左节点和右节点是否为空,不为空就得复制过去,利用迭代就很容易做到。最后将新的子节点和根节点链接起来。typedef struct BiTNode{    int da...
原创
发布博客 2018.07.22 ·
1712 阅读 ·
2 点赞 ·
0 评论

计算树的高度

树的高度就是数的层数。那怎么计算树的高度呢?我们可以分贝将左节点的高度计算出来和右节点的高度计算出来,在比较大小。大的就是树的高度。 其实不管是求树的高度还是叶子节点个数,都是在遍历整个树,只不过在遍历的过程中满足了某种条件就做出一定的处理,所以树的遍历是最基本的。typedef struct BiTNode{    int data;    struct BiTNode* ...
原创
发布博客 2018.07.22 ·
10720 阅读 ·
1 点赞 ·
3 评论

求树的叶子节点个数

首先我们得知道什么事叶子节点,叶子节点就是只有根节点没有子节点的节点。下面我们就根据这个特性来写一下这个程序typedef struct BiTNode{    int data;    struct BiTNode* lchild, *rchild;}BiTNode;int sum = 0;//用来存放叶子节点个数void CountLef(BiTNode *root){ ...
原创
发布博客 2018.07.22 ·
10191 阅读 ·
6 点赞 ·
0 评论

树的遍历的本质

树的遍历分为前序中序后序,这三种遍历的本质是什么呢?其实不管哪种遍历方式遍历的路径都是一样的,为什么结果不一样,就在于是第几次遍历的时候输出。下面我们来看一下遍历的图如上图可以看出每一个节点都会经过三次,就像一个邮递员在寄信的时候,可以选择是第一次经过你家的时候给你投信还是回来再经过你家的时候给你投信。第一次经过一个节点的时候就输出就是前序遍历,第二次经过的时候输出就是中序遍历,最后一次经...
原创
发布博客 2018.07.22 ·
333 阅读 ·
1 点赞 ·
0 评论

树的遍历(前序、中序、后序)

前序遍历的思想:先遍历根节点,在遍历左节点,最后遍历右节点。中序遍历的思想:先遍历左节点,在遍历根节点,最后遍历右节点后序遍历的思想:先遍历左节点,在遍历右节点,最后遍历根节点光这么说太过于抽象,就举个例子说一下。前序遍历:首先遍历根节点所以输出1,然后左节点,发现左节点也是一个根节点就输出2,在遍历2的左节点,输出4,然后就到右节点了,此时以2为根节点,所以右节点是5,以...
原创
发布博客 2018.07.21 ·
169 阅读 ·
1 点赞 ·
0 评论

计算机如何计算我们的表达式的

计算机的工作本质就是做数学运算,计算机喜欢做后缀运算,而我们自己却是喜欢做中缀运算,所以计算机就会自动将我们的中缀运算转化成后缀运算,现在我们自己通过栈的应用来实现以下这个功能。例如:5+4=>54+1+2*3=>123*+ 在转化之前我们得知道计算机是如何做的转化,下面我们就来看一下这个算法1遍历中缀表达式的数字的符号,对于数字,直接输出。2对于符号:左括...
原创
发布博客 2018.07.21 ·
2384 阅读 ·
0 点赞 ·
0 评论
加载更多