handler

nginx http模块11个阶段驱动模式详解

佐手、 提交于 2020-04-07 09:50:07
在nginx调用 ngx_http_process_request_headers() 方法读取完所有的header数据之后,就调用 ngx_http_process_request() 方法开始了请求的处理过程,这也就是nginx http模块开始处理请求的11个阶段的入口,本文则主要讲解nginx是如驱动http模块的11个阶段。 1. 处理入口 ngx_http_process_request() 关于 ngx_http_process_request() 方法,这里首先有两点需要读者理解的: nginx是在接收完header数据之后就开始进入http模块的11个阶段进行处理的,这主要是因为,相对于多变的body数据,nginx更关注如何控制header数据的处理; ngx_http_process_request() 方法只是一个入口方法,最终这个方法将会进入执行http模块11个阶段的调用中,而这个部分是会读取请求的body数据的。由于TCP是流式数据,也就是说一次接收并不一定能够完整的接收所有数据,而且http模块的11个阶段中有部分阶段也可能会要求再次进行当前阶段的调用,这就还是回归到事件框架中了,这个时候会把事件的回调函数设置为 ngx_http_request_handler() 方法,根据请求需要,其是可以不断的将控制权交给该方法,以进行再次调用。也就是说这里的

【zepto学习笔记03】事件机制

馋奶兔 提交于 2020-04-07 05:51:17
前言 我们今天直接进入事件相关的学习,因为近期可能会改到里面的代码 就zepto来说,我认为最重要的就是选择器与事件相关了,随着浏览器升级,选择器简单了,而事件相关仍然是核心,今天我们就来学习学习 zepto事件处理部分篇幅不大,不到400行,前面篇幅也很小,所以真的很适合移动开发 变量定义 1 var $$ = $.zepto.qsa,2 handlers = {}, _zid = 1,3 specialEvents = {},4 hover = {5 mouseenter: 'mouseover',6 mouseleave: 'mouseout'7 } 事件部分首先定义了几个变量,$$为zepto选择器的方法,暂时不管他(据观察,好像也没有地方用到了,所以无意义) handlers为一个对象,与_zid息息相关,暂时不知道干什么的(据猜测两个应该是保存函数句柄,为removeEvent做准备) hover应该会同时触发两个事件才会触发,我们这里先不管,继续往下看 这里提供一个zid飞方法,该方法用于保证-zid的唯一性 1 function zid(element) {2 return element._zid || (element._zid = _zid++)3 } 算了,我们这里还是用一个实际点的方法跟进来吧,首先说一个关键的 $.Event(type,

DBUtils的handler

|▌冷眼眸甩不掉的悲伤 提交于 2020-04-06 23:54:35
ArrayHandler : 将ResultSet中第一行的数据转化成对象数组 ArrayListHandler 将ResultSet中所有的数据转化成List,List中存放的是Object[] BeanHandler : 将ResultSet中第一行的数据转化成类对象 BeanListHandler : 将ResultSet中所有的数据转化成List,List中存放的是类对象 ColumnListHandler : 将ResultSet中某一列的数据存成List,List中存放的是Object对象 KeyedHandler : 将ResultSet中存成映射,key为某一列对应为Map。Map中存放的是数据 MapHandler : 将ResultSet中第一行的数据存成Map映射 MapListHandler : 将ResultSet中所有的数据存成List。List中存放的是Map ScalarHandler : 将ResultSet中一条记录的其中某一列的数据存成Object 来源: oschina 链接: https://my.oschina.net/u/30362/blog/3595

不会这年头还有人不知道OPPO Android 开发技术面吧,年薪百万的大牛都在看了

旧巷老猫 提交于 2020-04-06 23:49:34
今天早上参加了深圳 OPPO 开发工程师的技术面试,总的来说面试过程不是很顺利。面试官并没有问一些很深奥的底层原理,基本都是一些 Java 基础以及 Android 四大组件内的基础,但是我自身在开发过程中并没有很重视这些理论基础,导致很多知识点都忘记了。整个面试过程耗时一小时,感谢两位面试官不厌其烦地给我提示,一方面让我能够回想起来那些遗忘的知识点,另一方面也缓解了尴尬的气氛。。。 顺便一说,OPPO 的保密工作还是做得比较严格的,进去后海卓越中心大楼前需要申请临时通行证才能进去。而在面试前还需要登记,并且把手机的前后摄像头都给用胶带封起来才能进行面试。废话少说,下面分成两部分汇总一下这次技术面试的知识点。 Java 1. 如何理解Java的多态?其中,重载和重写有什么区别? 多态是同一个行为具有多个不同表现形式或形态的能力,多态是同一个接口,使用不同的实例而执行不同操作,多态就是程序运行期间才确定,一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法。多态存在的三个必要条件是:继承,重写,父类引用指向子类引用。多态的三个实现方式是:重写,接口,抽象类和抽象方法。 重写(Override)和重载(Overload)的区别 区别点重载重写参数列表必须修改不能修改返回类型可以修改不能修改异常可以修改可以减少或删除

Android知识体系总结2020之Android部分Handler篇

江枫思渺然 提交于 2020-04-06 22:02:22
1.什么是Handler?   Handler是可以通过发送和处理Message和Runnable对象来关联相应线程的MessageQueue。通常我们认为它是一种异步机制。   a.可以让对应的Message和Runnable在未来的某个时间点进行相应的处理。   b.让自己想要的耗时操作在子线程中完成,让更新UI的操作在主线程中完成,而子线程与主线程之间的通信就是靠Handler来完成。 2.Handler的使用方法   Handler提供了很多异步机制的方法,只不过我们常用就只有post和sendMessage系列方法,我们先来看看Handler提供的构造器吧: Handler():默认构造函数将此处理程序与Looper用于当前线程。 Handler(Handler.Callback callback):构造函数将此处理程序与Looper对于当前线程,并接受一个回调接口,您可以在其中处理消息。 Handler(Looper looper):使用所提供的Looper而不是默认的。 Handler(Looper looper, Handler.Callback callback):使用所提供的Looper而不是默认的,而是接受一个回调接口来处理消息。   接下来我们就来看看Handler提供的各种方法吧: post(Runnable r):导致将Runnable

dubbo消费者调用流程

有些话、适合烂在心里 提交于 2020-04-06 19:44:41
dubbo相关 说明 (官方): 在RPC中,Protocol是核心层,也就是只要有Protocol + Invoker + Exporter就可以完成非透明的RPC调用,然后在Invoker的主过程上Filter拦截点。 图中的Consumer和Provider是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用Client和Server的原因是Dubbo在很多场景下都使用Provider, Consumer, Registry, Monitor划分逻辑拓普节点,保持统一概念。 而Cluster是外围概念,所以Cluster的目的是将多个Invoker伪装成一个Invoker,这样其它人只要关注Protocol层Invoker即可,加上Cluster或者去掉Cluster对其它层都不会造成影响,因为只有一个提供者时,是不需要Cluster的。 Proxy层封装了所有接口的透明化代理,而在其它层都以Invoker为中心,只有到了暴露给用户使用时,才用Proxy将Invoker转成接口,或将接口实现转成Invoker,也就是去掉Proxy层RPC是可以Run的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。 而Remoting实现是Dubbo协议的实现,如果你选择RMI协议,整个Remoting都不会用上

中断触发流程

自古美人都是妖i 提交于 2020-04-06 19:31:16
在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupt handler)或中断服务例程(interrupt service routine ,ISP).产生中断的每个设备都有一个相应的中断处理程序,中断处理程序通常不和特定的设备关联,而是和特定的中断关联的,也就是说,如果一个设备可以 产生多种不同的中断,那么该就可以对应多个中断处理程序,相应的,该设备的驱动程序也就要准备多个这样的函数。在Linux内核中处理中断是分为上半部 (top half),和下半部(bottom half)之分的。上半部只做有严格时限的工作,例如对接收到的中断进行应答或复位硬件,这些工作是在所有的中断被禁止的情况下完成的,能够被允许稍后完 成的工作会推迟到下半部去。 其实中断的整个过程分为2个部分: 1 注册 2 执行或者叫触发 如上图:首先中断触发,cpu响应,去执行IRQ中断总的服务子程序(就是所有的IRQ中断都经过这一步),去读两个寄存器,确定中断号,再根据中断号,在子程序链表中找到对应的中断服务子程序,结束了。为了达到这样的目的,把中断号与中断子程序联系起来。request_irq()做的就只是这个工作。而GPIO与中断号的联系是定死的,或者这两个中断号还不一样。后面讲吧。 先说说request_irq(),就是把中断例程添加到中断子程序链表中去。 request

Handlers与Controls

Deadly 提交于 2020-04-05 15:46:26
本教程假设您已经阅读了Leaflet Class Theory 在leaflet中, 一个layer是跟随map移动的任何东西 。 与之相反, 一个control是对于map容器相对静态的HTML元素 (例如,缩放、全屏的按钮都是control); 一个handler是一段用来改变map操作的不可见代码 。 Handlers Map Handler 是Leaflet 1.0中的一个新概念,其功能是 处理来自浏览器的DOM事件 (如click、dblclick或mousewheel)并改变map的状态(map状态改变一般使用setView、setZoom此类方法)。 Handler相对简单:它们只需要addHooks()方法(在map中handler是enable时addHooks就会加载)和removeHooks()方法(handler被disabled时removeHooks会触发)。handler框架: L.CustomHandler = L.Handler.extend({ addHooks: function() { L.DomEvent.on(document, 'eventname', this._doSomething, this); }, removeHooks: function() { L.DomEvent.off(document, 'eventname',

if...else代码优化

余生长醉 提交于 2020-04-04 15:19:13
在编码中难免遇到if else过多情况,一方面是当初设计没有在意,另一方面可能是因为需求的不断变化。但代码中出现大量if else都知道这种情况不太好,那么我们就聊一下这种情况应该如何优化 if(条件1){ .... }else if(条件2){ .... }else if(条件3){ .... }else{ .... } 1.表驱动 表驱动是指用查表的方式获取值 private static Map<Status, Function<Integer, Integer>> conditions; static { conditions = new HashMap<>(); conditions.put(Status.CONDITION1,(t)->{ return t+1; }); conditions.put(Status.CONDITION2,(t)->{ return t+2; }); } @Test public void test(){ Integer apply = conditions.get(Status.CONDITION1).apply(1); System.out.println(apply); } enum Status{ CONDITION1,CONDITION2; } 2.责任链模式 当判断条件复杂多变时,就无法使用上述的驱动表了。

事件流,事件处理程序,事件对象

此生再无相见时 提交于 2020-04-03 23:02:10
1.事件流 事件流描述的是从页面接收事件的顺序。 1.1 事件冒泡:即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。 1.2 事件捕获:事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件,事件捕获的用意在于在时间到达预定目标之前捕获它。 1.3 DOM事件流 DOM2级事件规定的事件流包括三个阶段:事件捕获阶段,处理目标程序阶段和事件冒泡阶段。 IE9,Opera,Firefox,Chorme和Safari都支持DOM事件流;IE8及更早版本不支持DOM事件流。 2.事件处理程序 事件就是用户或浏览器自身执行的某种动作。 而响应某个时间的函数就叫做事件处理程序(或事件侦听器)。 2.1 HTML事件处理程序 某个元素支持的每种事件,都可以使用一个与相应事件处理程序同名的HTML特性来指定。这个特性的值应该是能够执行的JavaScript代码。 1 <!--Clicked不能用双引号--> 2 <input type="button" value="Click Me" onclick="alert('Clicked')"></input> 在HTML中定义的事件处理程序可以包含要执行的具体动作,也可以调用在页面其他地方定义的脚本,如下代码所示: 1 <script type="text