源码

Android事件分发机制源码解析

你离开我真会死。 提交于 2019-12-11 19:41:57
当手指触摸屏幕的时候,系统就会接收到触摸事件,经过一些列调用以后最终触摸事件会被消费掉。 Motion Event 从触摸屏到应用程序的每个触摸动作都会包装成 MotionEvent 。 MotionEvent 提供了每个触摸事件的信息:触摸动作和相关的元数据(触摸位置,触摸点的手指数以及触摸事件时间)。 MotionEvent 根据动作代码和一组坐标轴的值来描述动作。动作代码指定发生的状态更改,比如手指按下或抬起。坐标轴值描述了位置和其他动作属性。 Pointers 多点触控屏幕会为每一个手指发出一个动作跟踪。产生动作的每个手指或其他对象(鼠标,触摸笔,轨迹球)称为指针。MotionEvent包含了当前处于活动状态的所有指针的信息,即使自上一个事件传递以来其中一些指针未移动也是如此。当用手指触摸屏幕的特定点时,生成的信息由X,Y坐标以及其他信息(如索引,ID等)组成。由于Android支持多点触控,因此指针用于标识在同一时间产生动作的所有对象。 ACTIONS 动作类型及其名称表示作用。可用的动作有: ACTION_DOWN :对象(鼠标,触摸笔,轨迹球)或手指与屏幕接触的第一个点。当手指触摸到屏幕时,触发ACTION_DOWN事件 ACTION_UP :对象(鼠标,触摸笔,轨迹球)或手指释放屏幕的点。当手指从屏幕上拿开时,触发ACTION_UP事件 ACTION_MOVE

spark源码分析之任务本地化

一世执手 提交于 2019-12-11 19:23:42
Spark也有数据本地化的概念(Data Locality),这和MapReduce的Local Task差不多,如果读取HDFS文件,Spark则会根据数据的存储位置,分配离数据存储最近的Executor去执行任务。 这么理解没错,我搭建的Spark集群情况是这样: 每台DataNode节点的HDFS集群,我在每个DataNode上都部署了一个Spark Worker,并且,启动Spark Application的时候,每个Worker都有一个Executor,这样理论上来说,只要读取HDFS文件,Spark都可以使用本地任务来读取(NODE_LOCAL)。 其中任务本地化后再器spark 提交任务界面存在。 通过分析源码 :spark 再sparkcontext 阶段已经再对应的wokers 上启动了excuter (里面指定了具体的内存和cpu ) 但通过源码分析都没有根据数据的具体位置去选择性的启动excutor 具体代码为 spark 1.3.1 spark 1.6.1 的excutor 资源分配为: 没有找到具体的执行代码 推测 为: 两种任务shuffleTask 和 resultTask 出现新的日志任务调度 (源码查看) 来源: CSDN 作者: lianchaozhao 链接: https://blog.csdn.net/weixin_40809627

spark主流程源码分析

 ̄綄美尐妖づ 提交于 2019-12-11 18:55:13
1、spark 任务提交过程首先调用sprark-submit函数 例子为 : bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://node-1.itcast.cn:7077 --executor-memory 2g --total-executor-cores 4 该命令主要调用相应脚本下着 这个主类 然后再源码的bin 中调用命令 exec “ R U N N E R " − c p " RUNNER" -cp " R U N N E R " − c p " CLASSPATH” J A V A O P T S " JAVA_OPTS " J A V A O ​ P T S " @" 启动源码中的 org.apache.spark.deploy.SparkSubmit 类中 -》submit -》 doRunMain (args class cn.itcast.spark.WordCount …) 通过反射的方式启动 启动传给程序的主类然后启动( Class.forName通过反射调用自定义类的main方法 org.apache.spark.examples.SparkPi 程序) 2、程序进入主程序后 此时进入主程序代码 (1)sparkcontext 初始化运行所需的所有环境

HashMap源码分析

与世无争的帅哥 提交于 2019-12-11 18:24:10
HashMap HashMap采用key-value的存储结构,每个唯一key对应一个唯一的value,通常情况下HashMap的查询和修改时间复杂度为O(1),因为是散列存储,HashMap不能保证元素存储的顺序,且线程不安全。 public class HashMap < K , V > extends AbstractMap < K , V > implements Map < K , V > , Cloneable , Serializable { (1)继承了AbstractMap,实现了Map接口,具备Map的所有功能 (2)实现了Cloneable,可以被克隆 (3)实现了Serializable,可以被序列化 属性 /** * 默认初始容量为16 * 容量必须指定为2的n次方, 目的是为了使hash函数能够更加有效的获取散列值 * index = hashCode & (capacity - 1) */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4 ; // aka 16 /** * 最大容量 = 2^30 */ static final int MAXIMUM_CAPACITY = 1 << 30 ; /** * 默认负载因子 * 意味着当HashMap的容量被使用75%的时候会进行扩容 */ static

netty源码分析之揭开reactor线程的面纱(三)

笑着哭i 提交于 2019-12-11 17:50:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 上两篇博文( netty源码分析之揭开reactor线程的面纱(一) , netty源码分析之揭开reactor线程的面纱(二) )已经描述了netty的reactor线程前两个步骤所处理的工作,在这里,我们用这张图片来回顾一下: 简单总结一下reactor线程三部曲 1.轮询出IO事件 2.处理IO事件 3.处理任务队列 今天,我们要进行的是三部曲中的最后一曲【处理任务队列】,也就是上面图中的紫色部分。 读完本篇文章,你将了解到netty的异步task机制,定时任务的处理逻辑,这些细节可以更好地帮助你写出netty应用 netty中的task的常见使用场景 我们取三种典型的task使用场景来分析 一. 用户自定义普通任务 ctx.channel().eventLoop().execute(new Runnable() { @Override public void run() { } }); 我们跟进 execute 方法,看重点 @Override public void execute(Runnable task) { // addTask(task); ... } execute方法调用addTask方法 protected void addTask(Runnable task) { if (task

GDB调试入门

余生长醉 提交于 2019-12-11 16:30:11
首先在编译时,必须把调试信息加到可执行文件中,使用gcc/g++的-g参数可以做到这点 指令介绍 help 查询指令,查看其它指令的用法,如help print shell 启动标准shell执行command string,如shell ps,直接shell也可,输入quit退出shell print 用于打印的指令,搭配参数使用,类似print/x(或p/x),[x/d/u/o/t/a/c/f/s] set 用于设置gdb内部的一些环境与运行时的参数 set logging on 保存当前调试信息到gdb.txt set args xxx 传递参数到程序(也可以通过r xxx传递参数) show 描述GDB本身状态 info(缩写i) 描述程序的状态 info args info registers info breakpoints info thread -cd/directory 用于指定源码路径(当前gdb的位置不在源码目录下或二进制不在源码目录下,否则会自动查找) file 用于加载调试用的二进制文件 backtrace(缩写bt) 查看调用栈,[full详细信息|n打印n层调用栈] next 控制程序向下执行 list(缩写为l) 用于列出源码 thread(缩写为t) 用于切换线程 thread apply all + 指令,对所有线程执行指令 x

( 二 ) Volley 源码深入了解之 Dispatcher

て烟熏妆下的殇ゞ 提交于 2019-12-11 14:39:12
一、概述 从上一篇博客中我们已经了解了 RequestQueue ,如果对 RequestQueue 不是很了解那么不妨先看看上篇博客 ( 一 ) Volley 源码深入了解之 RequestQueue ,本篇博客将会接着上篇的分析继续从源码的角度深入了解 CacheDispatcher 和 NetworkDispatcher 是如何工作的 二、 深入了解 CacheDispatcher 在分析之前,照列先看官方给的流程图 经过上篇的分析创建 request 添加到 RequestQueue 过程我们已经很清楚了,而两个 Dispatcher 内部的工作流程我们还没有很深入的了解,这一节我们先看看 CacheDispatcher 上一篇我们说过,当调用 RequestQueue 的 start 方法时会创建 CacheDispatcher 和 NetworkDispatcher 对象 ,现在我们来回顾一下 public class RequestQueue { /** 启动所有 dispatcher */ public void start() { stop(); // 启动之前先停止所有 dispathcer // 在这里创建了缓存调度器并启动 mCacheDispatcher = new CacheDispatcher(mCacheQueue, mNetworkQueue,

Mask RCNN目标检测源码运行笔记(Demo模式)

╄→尐↘猪︶ㄣ 提交于 2019-12-11 14:32:41
1. 论文基本信息 论文标题:Mask R-CNN 论文作者:Kaiming He(Facebook AI Research (FAIR))等人 论文出处:ICCV 2017 在线阅读: https://arxiv.org/pdf/1703.06870.pdf 源码链接: https://github.com/facebookresearch/maskrcnn-benchmark 2. 运行环境 NVIDIA GTX 1070 Ubuntu 18.04 x64 gcc/g++ 7.4.0 CUDA 10.0 (cuda_10.0.130_410.48_linux.run) Anaconda 3 Python 3.7 PyTorch 1.3.0 for CUDA 10.0 只需要预先安装好gcc/g++ 7.4.0、CUDA 10.0和Anaconda即可 ,其他依赖包(包括PyTorch)会在下一节会的详细环境搭建步骤进行安装。 3. 准备 S1. 运行如下命令安装matplotlib后端: sudo apt-get install tcl-dev tk-dev python-tk python3-tk S2. 在自己的工作区目录中,运行如下命令下载源码包,也可以手工复制链接在浏览器下载: git clone https://github.com/facebookresearch

聚宽源码08

拈花ヽ惹草 提交于 2019-12-11 14:04:20
原文策略源码如下: #MACD多因子选股 from kuanke.wizard import * from jqdata import * import numpy as np import pandas as pd import talib import datetime 初始化函数,设定要操作的股票、基准等等 def initialize(context): # 设定基准 set_benchmark(‘000905.XSHG’) # 设定滑点 set_slippage(FixedSlippage(0.02)) # True为开启动态复权模式,使用真实价格交易 set_option(‘use_real_price’, True) # 设定成交量比例 set_option(‘order_volume_ratio’, 1) # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type=‘stock’) # 个股最大持仓比重 g.security_max_proportion = 1 #

聚宽源码34

一个人想着一个人 提交于 2019-12-11 14:02:11
原文策略源码如下: #多因子选股策略 from kuanke.wizard import * from jqdata import * import numpy as np import pandas as pd import talib import datetime 初始化函数,设定要操作的股票、基准等等 def initialize(context): # 设定基准 set_benchmark(‘000300.XSHG’) # 设定滑点 set_slippage(FixedSlippage(0.02)) # True为开启动态复权模式,使用真实价格交易 set_option(‘use_real_price’, True) # 设定成交量比例 set_option(‘order_volume_ratio’, 1) # 股票类交易手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type=‘stock’) # 个股最大持仓比重 g.security_max_proportion = 1 #