堆栈

1022课堂小结

泪湿孤枕 提交于 2019-12-01 23:05:28
目录 进程互斥锁 队列 堆栈 IPC(进程间通信) 生产者与消费者 线程 什么是线程 为什么要使用线程 开启进程 开启线程 线程互斥锁 进程互斥锁 让并发变成了串行,牺牲了执行效率,保证了数据安全 在程序并发执行时,需要修改数据时使用 队列 队列是先进先出 相当于内存中产生一个队列空间,可以存放多个数据,先进去的数据排在前面 堆栈 堆栈是先进后出 IPC(进程间通信) 进程间数据时相互隔离的,若想实现进程间通信,可以利用队列 生产者与消费者 生产者:生产数据的 消费者:使用数据的 在程序中:通过队列,生产者把数据添加队列中,消费者从队列中获取数据 线程 什么是线程 线程和进程都是虚拟单位,目的是为了更好的描述某件事物 进程:资源单位 线程:执行单位 为什么要使用线程 节省内存资源 开启进程 开辟一个名称空间, 每开启一个进程都会占用一份内存资源 会自带一个主线程 开启线程 一个进程可以开启多个线程 线程的开销远小于进程 注意:线程不能实现并行,线程只能实现并发,进程可以实现并行 线程互斥锁 线程之间数据是共享的 来源: https://www.cnblogs.com/faye12/p/11720276.html

CVE-2012-0158 漏洞分析报告

有些话、适合烂在心里 提交于 2019-12-01 22:28:24
北京蓝森科技有限公司 Office 2003 sp3( CVE-2012-0158 )漏洞分析报告 软件名称 : Office 2003 sp3 软件版本 :2.0 漏洞模块 :MSCOMCTL.ocx 模块版本 :2.0.0.0 编译日期 :2003 操作系统 :Windows XP/2003/7/8.1/10 漏洞编号 :CVE-2012-0158 危害等级 :超危 or 高危 or 中危 or 低危 漏洞类型 :栈溢出 威胁类型 :本地 分析人:缪甜 2019年9月13日 软件简介 Microsoft Office 2003 是微软公司针对Windows操作系统所推出的办公室套装软件,包含WORD、EXCEL、PowerPoint等三大组件,用处广泛,多以普及办公室、行政等。与办公室应用程序一样,它包括联合的服务器和基于互联网的服务。 漏洞成因 2.1漏洞介绍 CVE-2012-0158漏洞是一个栈溢出漏洞,该漏洞是微软Office办公软件中的MSCOMCTL.oce中MSCOMCTL.ListView控件时检查错误造成的,攻击者可以通过精心构造的数据控制程序EIP实现任意代码执行 CVE-2012-0158漏洞的微软编号是ms02-027 2.2复现漏洞 准备:获取造成漏洞的 poc, 安装 office 2003 sp3 使用 winworld直接执行poc效果: 2

线上服务器CPU100%排查

时光总嘲笑我的痴心妄想 提交于 2019-12-01 20:36:23
某服务器上部署了若干 tomcat 实例,即若干垂直切分的 Java 站点服务,以及若干 Java 微服务,突然收到运维的 CPU 异常告警。 问:如何定位是 哪个服务进程 导致 CPU 过载, 哪个线程 导致 CPU 过载, 哪段代码 导致 CPU 过载? 步骤一、找到最耗 CPU 的进程PID 工具 : top 方法 : · 执行 top -c ,显示进程运行信息列表 · 键入 P ( 大写 p) ,进程按照 CPU 使用率排序 步骤二:找到该进程内最耗 CPU 的线程PID 工具 : top 方法 : · top -Hp 10765 ,显示一个进程的线程运行信息列表 · 键入 P ( 大写 p) ,线程按照 CPU 使用率排序 步骤三:将线程 PID 转化为 16 进制 工具 : printf 方法 : printf “%x\n” 10804 这一步 可以用计算器 。 之所以要转化为 16 进制,是因为堆栈里,线程 id 是用 16 进制表示的。 步骤四:查看堆栈,找到线程在干嘛 工具 : pstack/jstack/grep 方法 : jstack 10765 | grep ‘0x2a34’ -C5 --color · 打印进程堆栈 · 通过线程 id ,过滤得到线程堆栈 找到了耗 CPU 高的线程对应的线程名称“ AsyncLogger-1 ”

C语言---堆栈(链表实现)

拈花ヽ惹草 提交于 2019-12-01 17:13:01
一:堆栈的引入 堆栈可以比较好的解决后缀表达式的问题。 拓展一: 中缀表达式:运算符号位于两个运算数之间;例如a + b * c - d/c; 后缀表达式:运算符号位于两个运算数之后;例如ab * + de -; 这个时候就需要一种存储办法,能够顺序存储运算数,并在需要的时候倒序输出,这就需要堆栈。 二、堆栈的概念 堆栈是一个特定的存储区或 寄存器 ,它的一端是固定的,另一端是浮动的 。对这个存储区存入的数据,是一种特殊的数据结构。所有的数据存入或取出,只能在浮动的一端(称栈顶)进行,严格按照“先进后出”的原则存取,位于其中间的元素,必须在其栈上部(后进栈者)诸元素逐个移出后才能取出。 堆栈的存储过程像一个堆碟子的过程,旧的碟子堆在下面,新碟子堆在上面,拿碟子的过程,也是先拿新碟子,最后才能拿到旧碟子。 三、堆栈的链表实现 #include<stdio.h> #include<stdlib.h> typedef int Elementtype; //定义节点 typedef struct Node{ Elementtype Element; struct Node *next; }NODE,*PNODE; //定义栈的结构体 typedef struct Stack{ PNODE PTOP; PNODE PBOOTOM; }STACK,* PSTACK; void

Java中如何获取到线程dump文件

可紊 提交于 2019-12-01 12:47:24
死循环、死锁、阻塞、页面打开慢等问题,打线程dump是最好的解决问题的途径。所谓线程dump也就是线程堆栈,获取到线程堆栈有两步: (1)获取到线程的pid,可以通过使用jps命令,在Linux环境下还可以使用ps -ef | grep java (2)打印线程堆栈,可以通过使用jstack pid命令,在Linux环境下还可以使用kill -3 pid 另外提一点,Thread类提供了一个getStackTrace()方法也可以用于获取线程堆栈。这是一个实例方法,因此此方法是和具体线程实例绑定的,每次获取获取到的是具体某个线程当前运行的堆栈 来源: https://www.cnblogs.com/Yanss/p/11686816.html

(转载)堆栈、BSS段、代码段、数据段、RO、RW、ZI等概念区分

两盒软妹~` 提交于 2019-12-01 12:10:52
最前言 如有任何表述不对的地方,欢迎及时指正。 技术小白,主要写个博客帮助自己总结和梳理知识,基本上都是拷贝的别人家的文字,根据自己的理解和逻辑重新梳理顺序的。 一 预备知识 在区分一个程序的堆栈、bss、text段、RO、RW、ZI等概念时,首先区分一下程序进程和程序文件,然后了解一下哈弗结构和冯诺依曼结构。 程序进程就是程序运行时的程序,程序文件是编译后生成的可执行文件,比如.bin文件等,这两个概念很好区分,特别强调一下,分开表达主要是怕读者在阅读过程中混淆了。 哈佛结构和冯诺依曼结构的主要区别就是处理器能不能实现取指令和取数据的并发进行。嵌入式芯片中主要是哈佛结构,PC机上是冯诺依曼结构。 经典的哈佛结构 : 程序存储器和数据存储器是各自独立的存储器。处理器应该有两套总线,一套是程序存储器的数据和地址总线,一套是数据存储器的数据和地址总线。取指令和取数据能并发进行。51的程序进程的逻辑代码段放在ROM中,而变量部分则放在RAM中,取ROM中的指令和RAM中的变量是两套总线。 改进型哈佛结构 : 程序存储器和数据存储器是各自独立的存储器。处理器只有一套总线,分时访问程序存储器和数据存储器,但是在处理器中有icache和dcache将程序和数据分开,所以处理器仍然可以并步执行取指令和取数据。从ARM9开始以后所有的ARM处理器内核都是改进型的哈佛结构

从0开始学FreeRTOS-1

若如初见. 提交于 2019-12-01 10:20:18
我们知道,(单核)单片机某一时刻只能干一件事,会造成单片机资源的浪费,而且还有可能响应不够及时,所以,在比较庞大的程序或者是要求实时性比较高的情况下,我们可以移植操作系统。因为这种情况下操作系统比裸机方便很多,效率也高。下面,杰杰将带你们走进FreeRTOS的世界随便看看。 下面正式开始本文内容。 在没有用到操作系统之前,单片机的运行是顺序执行,就是说,很多时候,单片机在执行这件事的时候,无法切换到另一件事。这就造成了资源的浪费,以及错过了突发的信号。那么,用上了操作系统的时候,很容易避免了这样的问题。 很简单,从感觉上,单片机像是同时在干多件事,为什么说像呢,因为单片机的执行速度很快,快到我们根本没办法感觉出来,但是同时做两件事是不可能的,在(单核)单片机中,因为它的硬件结构决定了CPU只能在一个时间段做一件事如: 如这张图,都是按照顺序来执行这些事的,假设每个任务(事件)的time无限小,小到我们根本没法分辨出来,那么我们也会感觉单片机在同时做这六件事。 真相就是:所有任务都好像在执行,但实际上在任何一个时刻都只有一个任务在执行 如是加上了中断系统的话,就可以将上图理解为下图: 通常把程序分为两部分:前台系统和后台系统。 简单的小系统通常是前后台系统,这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API函数完成所需的操作

从0开始学FreeRTOS-1

好久不见. 提交于 2019-12-01 10:19:26
我们知道,(单核)单片机某一时刻只能干一件事,会造成单片机资源的浪费,而且还有可能响应不够及时,所以,在比较庞大的程序或者是要求实时性比较高的情况下,我们可以移植操作系统。因为这种情况下操作系统比裸机方便很多,效率也高。下面,杰杰将带你们走进FreeRTOS的世界随便看看。 下面正式开始本文内容。 在没有用到操作系统之前,单片机的运行是顺序执行,就是说,很多时候,单片机在执行这件事的时候,无法切换到另一件事。这就造成了资源的浪费,以及错过了突发的信号。那么,用上了操作系统的时候,很容易避免了这样的问题。 很简单,从感觉上,单片机像是同时在干多件事,为什么说像呢,因为单片机的执行速度很快,快到我们根本没办法感觉出来,但是同时做两件事是不可能的,在(单核)单片机中,因为它的硬件结构决定了CPU只能在一个时间段做一件事如: ![not os](https://img2018.cnblogs.com/blog/1834930/201910/1834930-20191015203731368-1727999152.jpg) 如这张图,都是按照顺序来执行这些事的,假设每个任务(事件)的time无限小,小到我们根本没法分辨出来,那么我们也会感觉单片机在同时做这六件事。 真相就是:所有任务都好像在执行,但实际上在任何一个时刻都只有一个任务在执行 如是加上了中断系统的话,就可以将上图理解为下图: !

20182309 2019-2020-1 《数据结构与面向对象程序设计》第6周学习总结

陌路散爱 提交于 2019-12-01 10:12:55
20182309 2019-2020-1 《数据结构与面向对象程序设计》第6周学习总结 教材学习内容总结 多态引用再不同时候可以指向不同类型的对象 通过继承实现多态 接口可以多继承,实现多态 异常不捕获会让程序终止 try-catch语句可以捕获异常,让程序继续 finally子句无论如何都要执行 异常传播,类的层次 I/O异常 教材学习中的问题和解决过程 问题1:try-catch语句 问题1解决方案:如果代码没有产生异常,将继续执行try语句后的语句块,所有catch子句后的语句。如果有异常,则控制立刻转移到相应的catch子句处理异常。 问题2:可检测异常与不可检测异常的差异 问题2解决方案:可检测异常必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来。throws子句用在方法头。throw子句用在方法中。java中唯一的不可检测异常是RuntimeException类的对象或该类的后代类对象。 代码调试中的问题和解决过程 问题1:试图捕获字符串越界的异常,但是没有出现 问题1解决方案:字符串有自动扩充的功能,容量为2X+2 代码托管 上周考试错题总结 1.What does the following code do? Assume list is an array of int values, temp is some previously

20182333 2019-2020-1 《数据结构与面向对象程序设计》第6周学习总结

微笑、不失礼 提交于 2019-12-01 10:07:01
20182333 2019-2020-1 《数据结构与面向对象程序设计》第6周学习总结 教材学习内容总结 第九章 多态 1.后绑定。效率低于编译阶段的绑定效率。 2.学习练习如何利用继承方式来实现多态性。 3.学习练习如何利用接口来实现多态性。 4.多态性设计(多个不同对象执行相同的基本行为,并且行为的不同实现方式取决于对象的具体类型。) 第十章 异常 1.异常处理(异常抛出的问题和处理异常的方法) 2.未捕获的异常。 3.try-catch语句与finally子句。 4.异常传播。(就与传递性一样,举个例子:程序一存在异常,程序二调用程序一,程序二就会存在与程序一相同的异常。) 5.异常类层次结构。(许多类型的异常类都由Exception类派生,但定义各种异常的子类却分散定义在其他几个包中,继承关系可以跨越包边界。) 6.自定义异常与必检异常与免检异常。 7.初步学习I/O流的部分内容和I/O异常。(三种标准I/O流(in、out、err))可检测的IOExceptions异常 教材学习中的问题和解决过程 问题1:继承如何支持多态 问题1解决方案:在Java中,使用父类声明的引用变量可以指向子类的对象。如何俩个类包含相同签名的方法时,父类引用是多态的。 问题2:类与接口有什么不同 问题2解决方案:类可被实例化,接口不能被实例化。接口可以只包含抽象方法和常量。类提供了接口的实现