行走的Geek

Thinking will not overcome fear but action will.

编译插桩

编译插桩的应用场景 代码生成。除了 Dagger、ButterKnife 这些常用的注解生成框架,Protocol Buffers、数据库 ORM 框架也都会在编译过程生成代码。代码生成隔离了复杂的内部实现,让开发更加简单高效,而且也减少了手工重复的劳动量,降低了出错的可能性。 代码监控。除了网络监控和耗电监控,我们可以利用编译插桩技术实现各种各样的性能监控。为什么不直接在源码中实...

WMRouter使用&原理分析

WMRouter使用 路由节点分析 路由协议 定义路由协议 scheme + host + path 按照定义的协议,通过注解的方式唯一确定一个路由跳转的页面 @RouterUri(scheme = "test", host = "channel1", path = "test_a") public class TestAActivi...

SPI&注解

SPI JavaPoet Java/Android框架经常会使用编译期注解,其中的关键一步就是如何生成Java文件。JavaPoet是用来生成java代码的一个Java Library。 核心的几个类: JavaFile 对应的Java文件,包名直接用一个字符串表示。 TypeSpec 表示一个class定义。 FieldSpec...

Activity启动后流程分析

启动流程 App发起进程:从桌面启动应用,则发起的进程即为Launcher所在的进程。从某App应用内启动远程的进程,则发送的进程即为该App所在的进程。发送进程先通过binder发送消息给system_server进程。 system_server进程:调用Process.Start()方法,通过socket向Zygote进程发送创建新进程的请求。 zygote进程:在执行Z...

Chrome性能分析工具研究

性能分析(参考:https://zhuanlan.zhihu.com/p/29879682) https://developers.google.com/web/fundamentals/performance/why-performance-matters 接下来以该demo为例来分析性能:https://googlechrome.github.io/devtools-sample...

跨进程通信

Binder Binder是一种进程间的通信机制,即IPC。

深度学习

神经网络

激活函数 对于线性不可分的二分类问题该如何解决? 如果采用不带激活函数的单层感知机,则是一个线性分类器,线性不可分的问题无法解决 不带激活函数的多层感知机(增加了一个隐藏层):但是合并之后会发现本质上还是一个线性分类器。(线性函数无论怎么复合结果都是线性的) 作用:保证神经网络的非线性。最基本的要求就非线性函数。

进程&线程

进程&线程(Read The Fucking Source Code) http://gityuan.com/android/ 通用进程&线程的概念 进程(Process),即过程的意思,是一个抽象的概念。计算机中的描述语言是“程序在操作系统中运行的实例”。实例的意思即意味着可以在操作系统中存在多个同时运行。 In computing, a pr...

机器学习之GBDT

GBDT

集成学习概念 集成学习(Ensemble Learning)是使用一系列学习器进行学习,并使用某种规则将各个学习结果进行整合从而获得比单个学习器效果更好的一种机器学习方法。 简单来说,就是找到一系列性能较差的分类器,将它们集成起来得到一个性能较强的分类器 选择上有要求:

并发编程

并发编程 原子性问题如何解决 源头:线程切换。解决方式:禁用线程切换。操作系统做线程切换是依赖CPU中断的,所以只需要禁止中断即可。 在单核 CPU 场景下,同一时刻只有一个线程执行,禁止 CPU 中断,意味着操作系统不会重新调度线程,也就是禁止了线程切换,获得 CPU 使用权的线程就可以不间断地执行,所以两次写操作一定是:要么都被执行,要么都没有被...