handler

中断与异常

筅森魡賤 提交于 2020-02-08 16:06:02
arm对异常(中断)处理过程 1 初始化: :: a 设置中断源,让它可以产生中断 :: b 设置中断控制器(可以屏蔽某个中断,优先级) :: c 设置CPU总开关,(使能中断) 2 执行其他程序:正常程序 3 产生中断:按下按键--->中断控制器--->CPU 4 cpu每执行完一条指令都会检查有无中断/异常产生 5 发现有中断/异常产生,开始处理。对于不同的异常,跳去不同的地址执行程序。这地址上,只是一条跳转指令,跳去执行某个函数(地址),这个就是异常向量。如下就是异常向量表,对于不同的异常都有一条跳转指令。 (3-5都是硬件强制做的) 6 这些函数做什么事情? :: 软件做的: :: a 保存现场(各种寄存器) :: b 处理异常(中断): :::: 分辨中断源 :::: 再调用不同的处理函数 :: c 恢复现场 --------------------------------------异常向量表------------------------------------- .globl _start _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr

Java进阶学习(5)之设计原则(下)

不想你离开。 提交于 2020-02-07 23:18:08
框架加数据 把数据的硬编码尽可能解成框架加数据的结构 城堡游戏修改后的代码   Room类 1 package com.castle; 2 3 import java.util.HashMap; 4 5 public class Room { 6 private String description; 7 private HashMap<String, Room> exits=new HashMap<String, Room>(); 8 9 10 public Room(String description) 11 { 12 this.description = description; 13 } 14 15 public String getEixtDesc() 16 { 17 StringBuffer sb=new StringBuffer(); 18 for (String dir : exits.keySet()) 19 { 20 sb.append(dir+" "); 21 } 22 return sb.toString(); 23 } 24 25 public void setExit(String dir,Room room) 26 { 27 exits.put(dir, room); 28 } 29 30 31 public Room getExit(String

Js中的函数

ⅰ亾dé卋堺 提交于 2020-02-07 03:12:24
函数柯里化 柯里化概念:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数 看一个例子: var add = function(x) { return function(y) { return x + y; }; }; var increment = add(1); var addTen = add(10); increment(2); // 3 addTen(2); // 12 我们定义了一个 add 函数,它接受一个参数并返回一个新的函数。调用了 add 之后,返回的函数就通过闭包的方式记住了 add 的第一个参数。 因为一次性地调用它有点繁琐,所以使用一个特殊的 curry 帮助函数使得这类函数的定义和调用更加容易。 curry的封装 // 初步封装 var currying = function(fn) { // args 获取第一个方法内的全部参数 var args = Array.prototype.slice.call(arguments, 1) return function() { // 将后面方法里的全部参数和args进行合并 var newArgs = args.concat(Array.prototype.slice.call(arguments)) // 把合并后的参数通过apply作为fn的参数并执行 return fn.apply

SpringMVC 入门

空扰寡人 提交于 2020-02-06 23:53:09
SpringMVC 框架概述 Spring Web MVC是基于Servlet API构建的传统Web框架,并且从一开始就已包含在Spring框架中 与Spring Web MVC并行,Spring Framework 5.0引入了一个新的反应式Web框架,其名称“ Spring WebFlux; 理解: 首先SpringMVC 是一个MVC构架模式的web框架,是基于Servlet的,从Spring第一个版本就一起推出了, 传统web框架,指的是SpringMVC依然使用多线程同步并发的方式来处理请求,现如今大家都在鼓吹异步并发多么多么好,从测试数据来看异步并发效率的确更好,但是其并不成熟,极大多数公司项目还没有更新到异步技术,盲目的进行重构可能会引发更多的问题, 并且异步编程在代码结构上会产生较大的变化,对于初学者而言,掌握难度是较大的; 构架图: Spring-MVC在系统中的位置 可以看出 SpringMVC 并没有代替Servlet,它只是在Servlet上提供了一套封装好的组件,提高开发效率; 还使得开发出的项目更加规范;否则每个人可能有每个人不同的MVC; SpringMVC核心组件 思考: 若没有SpringMVC框架,我们该如何去编写一个较大的web项目呢,可以发现在选课系统中出现了大量的Servlet,因为一个请求地址就需要一个Servlet,使得项目体积变大

Handler内存泄漏简析实践

被刻印的时光 ゝ 提交于 2020-02-06 16:50:14
1.反编译工具javap javap -help javap class // 查看类变量与方法 javap -c //查看反汇编代码 javap -v //查看附加信息 2.window不识别java命令 path // jdk 绝对路径\bin; jre绝对路径\bin C:\Program Files\Java\jdk7\bin;C:\Program Files\Java\jre7\bin java_home //jdk path classpath //;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 3.外部类和内部类 public class Outer { public class Inner { } } javac Outer.java 编译生成两个字解码文件Outer$Inner.class和Outer.class javap -v Outer$Inner.class Outer$Inner.class存在一个成员变量Outer this$0,这个就是外部类的实例. 修改Inner为静态类,发现Outer$Inner.class,没有外部类的实例。这说明非静态内部类实际上会持有外部类对象的引用。 4.Handler内存泄漏场景解析 public class MainActivity extends

Prometheus 介绍

梦想的初衷 提交于 2020-02-06 16:46:23
我们知道zabbix在监控界占有不可撼动的地位,功能强大。但是对容器监控显得力不从心。为解决监控容器的问题,引入了prometheus技术。prometheus号称是下一代监控。接下来的文章打算围绕prometheus做一个系列的介绍,顺便帮自己理清知识点。 一、简介   prometheus是由谷歌研发的一款开源的监控软件,目前已经被云计算本地基金会托管,是继k8s托管的第二个项目。 二、优势   易于管理   轻易获取服务内部状态   高效灵活的查询语句   支持本地和远程存储   采用http协议,默认pull模式拉取数据,也可以通过中间网关push数据   支持自动发现   可扩展   易集成 三、prometheus运行流程 prometheus根据配置定时去拉取各个节点的数据,默认使用的拉取方式是pull,也可以使用pushgateway提供的push方式获取各个监控节点的数据。将获取到的数据存入TSDB,一款时序型数据库。此时prometheus已经获取到了监控数据,可以使用内置的PromQL进行查询。它的报警功能使用Alertmanager提供,Alertmanager是prometheus的告警管理和发送报警的一个组件。prometheus原生的图标功能过于简单,可将prometheus数据接入grafana,由grafana进行统一管理。 四、监控的目的  

ContentResolver

為{幸葍}努か 提交于 2020-02-06 07:37:33
ContentResolver获取手机联系人 添加权限 < uses - permission android : name = "android.permission.WRITE_CONTACTS" > < / uses - permission > < uses - permission android : name = "android.permission.READ_CONTACTS" > < / uses - permission > package com . example . day10 ; import androidx . annotation . NonNull ; import androidx . appcompat . app . AppCompatActivity ; import android . Manifest ; import android . content . ContentResolver ; import android . content . pm . PackageManager ; import android . database . Cursor ; import android . net . Uri ; import android . os . Build ; import android . os . Bundle

C语言 NOTE31

岁酱吖の 提交于 2020-02-06 04:26:47
系统编程之管道 系统编程之信号 信号响应特点 1.同时响应时,实时信号存在优先级,数值越大的先响应,非实时信号随机响应 如何验证:使用sigprocmask将所有信号阻塞后,发送所有信号给该进程,然后解除阻塞就可以观察信号响应顺序。 2.信号存在先后响应,先响应的响应,后来的信号可以嵌套响应, 注意 :非实时信号仅能嵌套一次,实时信号可以嵌套多次,因为实时信号内核会保存多次的差异。 使用kill -l:查看信号编号 自定义信号处理方式函数带传参数和不带参数形式: 不带参数形式: signal ( 设置信号处理方式 ) 头文件 #include <signal.h> 定义函数 void ( * signal ( int signum , void ( * handler ) ( int ) ) ) ( int ) ; 函数说明 signal()会依参数 signum 指定的信号编号来设置该信号的处理函数. 当指定的信号到达时就会跳转到参数 handler 指定的函数执行. 如果参数 handler 不是函数指针, 则必须是下列两个常数之一: SIG_IGN 忽略参数 signum 指定的信号. SIG_DFL 将参数 signum 指定的信号重设为核心预设的信号处理方式. 关于信号的编号和说明, 请参考附录 D 返回值 返 回先前的信号处理函数指针, 如果有错误则返回 SIG_ERR

WTL学习记(二):WTL的消息处理链

ε祈祈猫儿з 提交于 2020-02-05 16:03:18
前小节简单介绍了WTL安装注意的一点小的细节并举例简述如何对自己的窗口类添加对消息的响应,这一节主要就WTL如何实现对windows窗口过程函数的封装陈述些自己的理解。 一、ATL对Windows窗口的封装 WTL的基础是ATL。WTL的框架窗口是ATL窗口类的继承。因此,先介绍一下ATL对Windows窗口的封装。 由win32 API 中创建Windows应用程序可以知道创建窗口和窗口工作的逻辑是: 1 定义一个窗口类 2 注册窗口类 3 创建该类窗口并显示和激活该窗口 4 窗口的消息处理逻辑在窗口函数中。(该函数在注册窗口类时指定) 可以得知,对于窗口的封装关键在于怎样封装窗口消息处理机制。怎样将消息传递给相应的类的实例。通常的办法是采用虚函数:将每个消息对应生成一个虚函数,这样,在窗口处理函数中,对于每个消息,都调用其对应的虚函数即可。但带来的问题是类的虚函数表过于庞大。ATL的处理机制是只定义了一个虚函数(ProcessWindowMessage())。 图示ATL封装的类的继承关系图。从图中可以看到有两个最基本的类。一个是CWindow,另一个是CMessageMap。 在ATL类中对窗口过程的实现是CWindowImpl。它派生自CWindow、CMessageMap,CWindows是对Windows的窗口API的一个封装。它把一个Windows句柄封装了起来

drf_jwt

回眸只為那壹抹淺笑 提交于 2020-02-05 08:40:18
JWT:1、组成: header.payload.signature 头.载荷.签名 2、示例: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6Im93ZW4iLCJleHAiOjE1NTgzMDM1NDR9.4j5QypLwufjpqoScwUB9LYiuhYcTw1y4dPrvnv7DUyo 3:介绍: header:一般存放如何处理token的方式:加密的算法、是否有签名等 payload:数据的主体部分:用户信息、发行者、过期时间等 signature:签名:将header、payload再结合密码盐整体处理一下 工作原理: 1) jwt = base64(头部).base64(载荷).hash256(base64(头部).base(载荷).密钥) 2) base64是可逆的算法、hash256是不可逆的算法 3) 密钥是固定的字符串,保存在服务器 官网:https://github.com/jpadilla/django-rest-framework-jwt 安装:pip install djangorestframework-jwt 使用:一般是搭配xadmin去实现后台管理 获得token: 在user/url.py里: from django.urls import path