event

如何用perf工具

拟墨画扇 提交于 2020-02-14 17:03:40
Perf 简介 Perf 是用来进行软件性能分析的工具。 通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计。它不但可以分析指定应用程序的性能问题 (per thread),也可以用来分析内核的性能问题,当然也可以同时分析应用代码和内核,从而全面理解应用程序中的性能瓶颈。 最初的时候,它叫做 Performance counter,在 2.6.31 中第一次亮相。此后他成为内核开发最为活跃的一个领域。在 2.6.32 中它正式改名为 Performance Event,因为 perf 已不再仅仅作为 PMU 的抽象,而是能够处理所有的性能相关的事件。 使用 perf,您可以分析程序运行期间发生的硬件事件,比如 instructions retired ,processor clock cycles 等;您也可以分析软件事件,比如 Page Fault 和进程切换。 这使得 Perf 拥有了众多的性能分析能力,举例来说,使用 Perf 可以计算每个时钟周期内的指令数,称为 IPC,IPC 偏低表明代码没有很好地利用 CPU。Perf 还可以对程序进行函数级别的采样,从而了解程序的性能瓶颈究竟在哪里等等。Perf 还可以替代 strace,可以添加动态内核 probe 点,还可以做 benchmark 衡量调度器的好坏 perf 的基本使用

PWA组成技术-Service Worker

时光毁灭记忆、已成空白 提交于 2020-02-14 12:15:52
Service Worker Promise fetch cache API Notification API Service Worker服务工作线程 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Learn PWA</title> </head> <body> <h1>来了,老弟</h1> <script> // 注册ServerWorker, // ServerWorker有两个参数 参数一:外部脚本的地址 参数二:选项对象,其中 scope 代表可控制页面的路径,默认当前路径,根路径代表控制所有页面 navigator.serviceWorker.register('./sw.js',{scope:'/'}) // 返回一个Promise对象 .then(res => { console.log('===================================='); console.log(res);

(01)Flume简介

╄→гoц情女王★ 提交于 2020-02-13 12:41:46
  1、Flume简单介绍   Apache Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。   2、Flume体系结构   工作流程:   (1)外部数据源(web server)将Flume可识别的Event发送到Source;   (2)Source收到Event后存储到一个或多个Channel中;   (3)Channel保留Event直到Sink将其处理完毕;   (4)Sink从Channel中取出数据,并将其传输至外部存储(HDFS)   组件说明:   (1)Event:Flume处理数据元,可能是一条日志,一个Avro对象等,通常约4kb大小   (2)Agent:Flume运行实体,每台机器一份,可能包括多个Source或者Sink   (3)Client:产生Event,在单独线程中运行   (4)Source:接收Event,并送入Channel,在单独线程中运行并监控   (5)Sink:从Channel接收Event,可能进行下一步转发(如连与另外某Source通讯),在单独线程中运行并监控 来源: https://www.cnblogs.com/javasl/p

Flume基础学习

孤街醉人 提交于 2020-02-13 10:20:32
Flume是一款非常优秀的日志采集工具。支持多种形式的日志采集,作为apache的顶级开源项目,Flume再大数据方面具有广泛的应用 首先需要在Flume的解压目录中conf文件夹中将flume-env.sh.templete更改未flume.env.sh 并修改jdk的位置 Source 我们可以从Avro,NetCat。Http,TailDir。我们在Java开发中通常都是使用的log4j等日志工具进行日志按天存储,所以我们重点关注下tailDir Source Taildir Source 在Flume1.7之前如果想要监控一个文件新增的内容,我们一般采用的source 为 exec tail,但是这会有一个弊端,就是当你的服务器宕机重启后,此时数据读取还是从头开始,这显然不是我们想看到的! 在Flume1.7 没有出来之前我们一般的解决思路为:当读取一条记录后,就把当前的记录的行号记录到一个文件中,宕机重启时,我们可以先从文件中获取到最后一次读取文件的行数,然后继续监控读取下去。保证数据不丢失、不重复。 在Flume1.7时新增了一个source 的类型为taildir,它可以监控一个目录下的多个文件,并且实现了实时读取记录保存的断点续传功能。 但是Flume1.7中如果文件重命名,那么会被当成新文件而被重新采集。 Channel Memory Channel Memory

点击页面其它地方隐藏该div的两种思路

折月煮酒 提交于 2020-02-13 04:30:57
思路一 第一种思路分两步 第一步:对document的click事件绑定事件处理程序,使其隐藏该div 第二步:对div的click事件绑定事件处理程序,阻止事件冒泡,防止其冒泡到document,而调用document的onclick方法隐藏了该div。 复制代码 代码如下: <script type="text/javascript"> function stopPropagation(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; } $(document).bind('click',function(){ $('#test').css('display','none'); }); $('#test').bind('click',function(e){ stopPropagation(e); }); </script> 这样当点击页面非div区域的时候,直接或层层冒泡会调用document的onclick方法,隐藏该div,而点击div或其子元素的时候,事件总会冒泡的div本身,这时候会阻止事件继续冒泡,不会调用doument的onclick方法致使div被隐藏,从而完成了我们的需求。 思路二 我们之前提到,在触发DOM上的某个事件的时候会产生一个事件对象event

点击页面其它地方隐藏该div的方法

别说谁变了你拦得住时间么 提交于 2020-02-13 03:51:28
思路一 第一种思路分两步 第一步:对document的click事件绑定事件处理程序,使其隐藏该div 第二步:对div的click事件绑定事件处理程序,阻止事件冒泡,防止其冒泡到document,而调用document的onclick方法隐藏了该div。 <script type="text/javascript"> function stopPropagation(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; } $(document).bind('click',function(){ $('#test').css('display','none'); }); $('#test').bind('click',function(e){ stopPropagation(e); }); </script> 这样当点击页面非div区域的时候,直接或层层冒泡会调用document的onclick方法,隐藏该div,而点击div或其子元素的时候,事件总会冒泡的div本身,这时候会阻止事件继续冒泡,不会调用doument的onclick方法致使div被隐藏,从而完成了我们的需求。 思路二 我们之前提到,在触发DOM上的某个事件的时候会产生一个事件对象event

点击页面其它地方隐藏该div的两种思路

流过昼夜 提交于 2020-02-13 03:09:13
第一种思路分两步 第一步:对document的click事件绑定事件处理程序,使其隐藏该div 第二步:对div的click事件绑定事件处理程序,阻止事件冒泡,防止其冒泡到document,而调用document的onclick方法隐藏了该div。 $(document).bind('click',function(){ $('#test').css('display','none'); }); $('#test').bind('click',function(e){ stopPropagation(e); }); //阻止冒泡到document的click事件 这样当点击页面非div区域的时候,直接或层层冒泡会调用document的onclick方法,隐藏该div,而点击div或其子元素的时候,事件总会冒泡的div本身, 这时候会阻止事件继续冒泡,不会调用doument的onclick方法致使div被隐藏,从而完成了我们的需求。 思路二 我们之前提到,在触发DOM上的某个事件的时候会产生一个事件对象event,这个对象包含着所有与事件有关的信息,包括产生事件的元素、事件类型等相关信息, 思路一中div的click事件处理程序传入的参数就是这个event对象。访问IE中的event对象有几种不同的方式,取决于指定事件处理程序的方法。直接为DOM元素添 加事件处理程序时

事件委托

时光毁灭记忆、已成空白 提交于 2020-02-12 15:01:02
认真看,每个人都可以看懂的-_-也可以结合js高级程序设计第三版一起看哦~ 什么是事件委托--官方解释 对“事件处理程序过多”问题的解决方案就是事件委托。事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。例如,click 事件会一直冒泡到 document 层次。也就是说,我们可以为整个页面指定一个 onclick 事件处理程序,而不必给每个可单击的元素分别添加事件处理程序 下面一句话很重要!很重要!很重要! 只要进行了点击就是会有捕获阶段->目标阶段->冒泡阶段三个阶段,和你在哪个阶段去添加事件处理程序无关 意思就是只要有点击,都会有着三个阶段,不管是有没有绑定事件 事件委托主要是利用了冒泡,假如我用鼠标点击了box2,第三阶段是冒泡阶段 ,会从 id为box2的li标签-->ul-->body-->html-->window 说明我不管是点击box1,box2,还是box3 都会经历 boxn -->ul-->body-->html-->window的过程,所以我们可以在li的上一级ul添加一个事件处理程序,因为event里面会有一个target我们获取获取到目标元素 event.target 和 event.currentTarget有什么区别? event.target表示的目标元素,事件捕获到最底层的那个元素,event

本地文件加载

被刻印的时光 ゝ 提交于 2020-02-12 05:37:48
var fileRef:FileReference = new FileReference(); fileRef.addEventListener(Event.SELECT, selectHandler); //select 事件 当用户从文件浏览对话框选择要加载、保存、上载或下载的文件时调度。 //调用下列任一方法时将打开此对话框: //FileReference.browse() //FileReferenceList.browse() //FileReference.download() //FileReference.load() //FileReference.save() fileRef.addEventListener(Event.OPEN, openHandler); //open 事件 在文件加载、保存、上载或下载操作开始时调度。 fileRef.addEventListener(Event.COMPLETE, completeHandler); //complete 事件 在加载、保存或下载操作完成或上载操作生成 HTTP 状态代码 200 时调度。对于文件下载或保存操作,在 Flash Player 或 Adobe AIR 将整个文件下载到磁盘上时调度此事件。 fileRef.browse(); function selectHandler(event

Spring Event事件驱动

混江龙づ霸主 提交于 2020-02-10 19:32:18
Spring事件驱动模型,简单来说类似于Message-Queue消息队列中的Pub/Sub发布/订阅模式,也类似于Java设计模式中的观察者模式。 自定义事件 Spring的事件接口位于 org.springframework.context.ApplicationEvent ,源码如下: public abstract class ApplicationEvent extends EventObject { private static final long serialVersionUID = 7099057708183571937L; private final long timestamp; public ApplicationEvent(Object source) { super(source); this.timestamp = System.currentTimeMillis(); } public final long getTimestamp() { return this.timestamp; } } 继承了Java的事件对象 EventObject ,所以可以使用 getSource() 方法来获取到事件传播对象。 自定义Spring事件 public class CustomSpringEvent extends ApplicationEvent {