自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 资源 (2)
  • 问答 (7)
  • 收藏
  • 关注

原创 TLS

TLS:线程本地存储参考资料:http://www.360doc.com/content/16/1231/14/19227797_619101378.shtmlhttp://androidxref.com/9.0.0_r3/xref/bionic/libc/bionic/__libc_init_main_thread.cpp#main_threadhttp://androidxref.com/9.0.0_r3/xref/bionic/libc/bionic/pthread_create.cp

2020-08-19 12:01:41 64

原创 服务器架构的演进

服务器端的架构随着公司以及业务的发展,它不断演进,其演进的过程如下:https://www.cnblogs.com/joelan0927/p/10425530.htmlhttps://blog.csdn.net/daogla/article/details/72877153

2020-07-01 12:34:22 147

原创 tcp、udp、分包粘包

MTUUDP和TCP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535。动态端口的范围是从1024到65535。每个以太网帧都有最小的大小64Bytes最大不能超过1518Bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的MAC地址48bits=6Bytes+SMAC源MAC地址48bits=6Bytes+Ty...

2020-05-27 16:23:31 626

原创 Android中opengles,egl库的结构

目录egl,opengl es的软硬件实现需要的库库的分工加载模块软件实现模块硬件实现模块egl,opengl es的软硬件实现需要的库//算是android中的egl库,用来加载具体的实现(软件实现或者硬件实现)system\lib\libEGL.so//opengl具体实现的wrapper,无论软件硬件实现时,均需加载这2个调用转发库system\lib\libGLESv1_CM.so // opengl es 1.0调用的wrapper壳,对应..

2020-05-15 00:17:18 1450

原创 thread in android ndk

android 高版本加入了c++2.0,和2.0+的标准库的一些东西,例如:std::thread,当然低版本使用还是Thread,不过他们都封装了pthread。我在9.0的Thread源码中发现了如下一段话:39// DO NOT USE: please use std::thread4041class Thread : virtual public RefBase42{。。...

2020-05-09 15:26:40 688

原创 lvm,根目录扩容

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次。它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。然后基于卷组划分逻辑...

2020-04-22 19:22:53 539

原创 android的Gralloc模块

Gralloc模块是一个HAL模块,所以他有自定义的module:gralloc_module_t,和自定义的gralloc设备(alloc_device_t来描述) 和自定义的fb设备(framebuffer_device_t 来描述)。gralloc_module_t有一个子类private_module_t ,使用模块的时候,我们使用private_module_t这个结构。str...

2020-04-20 20:37:43 747

原创 进程间同步

/*****************************************************************************/202203/*204 * Simple mutex class. The implementation is system-dependent.205 *206 * The mutex must be unlocked by ...

2020-04-19 08:45:21 112

原创 android开机动画

有三次动画过程。Linux内核启动显示第一动画这里和linux的2个设备有关,一个是控制台设备(ttyx),一个是fb设备(显卡和显示器),内核启动的时候会初始化这两个设备,其中fb设备注册的时候会通知控制台设备,然后控制台设备处理响应://fb_info代表注册过的fb设备信息,idx是fb设备的设备编号//con2fb_map_boot存储控制台和帧缓冲区硬件设备的初始对应关系...

2020-04-15 14:38:23 182

原创 相机预览大致过程

应用界面数据,相机采集的数据,视频播放数据等,要想把数据画到屏幕上,就要和SF通信,SF使用HW管理屏幕,并把数据合成到屏幕上。通信走Binder,ISurface接口是通信接口,相机采集的数据在Camera进程通过Bp端的Surface和远在SF的SurfaceLayerBuffer通信。应用在远端SF对应的Surface是SurfaceLayer,Camera在远端SF对应的是Surf...

2020-04-13 20:56:28 402

原创 匿名内存映射

java中的MemoryFile,c++中的MemoryHeapBase都是使用了匿名内存映射,才可以进程间通信。但是,它能进程间通信,首先是基于binder通信之上,为什么?后面再讲。它的原理是,先注册一个设备路径为“/dev/ashmem”的混杂设备,无论哪个进程,只open一次后获得一个fd,然后把这个fd通过binder驱动传递给另一方进程,另一方进程获得自己的fd之后,双方都mm...

2020-04-08 02:32:49 480

原创 init and zygote

“翻翻剩菜,看有什么没吃过。”,这是无赖,也是悔悟,不愿听到的人会觉得恶俗。韩语说:圣人无常师。孔子师郯子、苌弘、师襄、老聃。郯子之徒,其贤不及孔子。孔子曰:三人行,则必有我师。是故弟子不必不如师,师不必贤于弟子,闻道有先后,术业有专攻,如是而已。韩语说你不要太纠结于“年事过高”。现在来写这篇博文,不知道下午还能去跑步吗。Android手机加电之后,cpu首先会加载固化在ROM中的一小...

2020-04-05 13:16:53 94

原创 Binder in Java and in C++

世界发展这么快,养尊处优的你跟的上吗?我们知道android中有很多服务进程,在面向对象的今天,如果我们想和服务进程通过Binder来通信,那么我们要持有一些类,抛开业务层的通信不讲,基础的通信层的类有在客户端这边的BpBinder,服务这边的BBinder,当然这是C++层的代码,我们还知道jni把java程序员和c++程序员聚集在了一个圆桌上,我想今天试着把它们之间的“福利合照”公开一下。...

2020-04-04 19:18:11 139

原创 android Binder

Service添加服务的大致流程:获取服务的大致流程:参考:老罗的博客。

2020-04-02 20:38:27 84

原创 双重检测单例的正确写法

目录问题根源解决方案不允许2和3重排序使用同步监视器允许2和3重排序,但不允许其他线程“看到”这个重排序问题根源public class DoubleCheckedLocking { // 1private static Instance instance; // 2public static Instance getInstance() { // 3if (ins...

2020-03-25 17:05:26 317

原创 android中apk文件的签名认证

目录基础签名和校验的大体过程安全性签名相关命令Apk签名机制的两种选择基础Android提供了两种对Apk的签名方式,一种是基于JAR的签名机制,另一种是基于Apk的签名机制,它们的主要区别在于使用的签名文件不一样:jarsigner工具使用keystore文件进行签名;apksigner工具除了支持使用keystore文件进行签名外,还支持直接指定pem证书文件和私钥...

2020-03-17 12:47:00 344

原创 Kotlin学习笔记

基本类型在 Kotlin 中,所有东西都是对象,在这个意义上讲我们可以在任何变量上调用成员函数与属性。 一些类型可以有特殊的内部表示——例如,数字、字符以及布尔值可以在运行时表示为原生类型值,但是对于用户来说,它们看起来就像普通的类。 在本节中,我们会描述 Kotlin中使用的基本类型:数字、字符、布尔值、数组与字符串。1.nullableKotlin是null安全的语言,因此Byte...

2020-03-01 17:34:30 87

原创 Haskell杂记

目录构造代数类型Record Syntax类型参数构造类型类自动派生二三函数haskell的一等公民是function(函数,体现形式就是method),还有一个核心的概念是type(类型),所以haskell是用方法联系着类型,据说一心想干翻范畴论。我觉得可以这样讲:haskell是“面向函数编程”,而函数的形参类型是haskell中的各种强类型,例如:Int这种代数...

2019-05-18 15:58:24 294

翻译 Java函数式编程

目录函数式编程基础函数作为头等对象纯粹的函数高阶函数没有状态无副作用函数接口函数式编程基础函数式编程包含以下关键概念:作为第一类对象的功能 纯粹的功能 高阶函数纯函数式编程也有一套遵循的规则:没有状态No State 无副作用 不可变的变量 支持递归胜过循环即使您不是一直遵循所有这些规则,您仍然可以从应用程序中的函数式编程思想中受益。正如您...

2019-05-15 17:04:27 317

原创 java的Lambda、groovy的closure、Kotlin的Lambda和c++2.0的Lambda

目录java的Lambda文法:举例:详情链接:groovy的closure文法:举例:详情链接:c++2.0的Lambda文法:举例:详情链接:java的Lambda文法:(arg1, arg2...) -> { body }(type1 arg1, type2 arg2...) -> { body }举例:...

2019-05-14 18:21:11 241

原创 Gradle,让你放不下的一些语法

目录Gradle中的属性和方法真的来自于Groovy中的Delegate吗?Gradle不同于Groovy的特定语法生活中的一些事,你耿耿于怀。他们说:你要懂得放下。于是你做了,忧伤没了,对“幸福”也有了认识。有一天,事又发生了,无论是亲身还是心里,你才知道这叫“选择性忘记”。Gradle是在软件开发过程中管理软件项目的一个工具类软件,其功能主要围绕软件项目的开发和管理。Gra...

2019-05-11 15:05:32 723 4

翻译 java8新特性

目录Interface improvements为什么default方法不能覆盖equals,hashCode和toString?Functional interfacesLambdasCapturing versus non-capturing lambdasWhat lambdas don't doWhy abstract classes can't be inst...

2019-05-10 23:09:45 165

翻译 gradle(Settings)

声明实例化和配置要参与构建的Project实例的层次结构所需的配置。 Settings实例与settings.gradle设置文件之间存在一对一的对应关系。在Gradle组装构建项目之前,它会创建一个Settings实例并对其执行设置文件。组装多项目构建Settings对象的一个​​目的是允许您声明要包含在构建中的项目。您可以使用Settings.include(java.lang.Str...

2019-03-31 16:40:00 524

翻译 gradle(Task)

目录Task Actions任务的依赖关系和任务排序在构建文件中使用任务Dynamic PropertiesDynamic MethodsParallel ExecutionProperties、Methods、Script blocks列表PropertiesMethodsScript blocks每个任务都属于一个项目。您可以使用TaskContai...

2019-03-31 16:39:32 228

翻译 gradle(Project)

目录LifecycleTasksDependenciesMulti-project 构建PluginsPropertiesExtra PropertiesDynamic Methods属性、方法、Script blocks列举PropertiesMethodsScript blocks所有新的Gradle API都声明一个Action参数类型而不...

2019-03-31 16:38:37 704

翻译 groovy面向对象

目录1.类型1.1原始类型1.2 类1.2.1普通类1.2.2内部类1.2.3抽象类1.3接口1.4构造方法1.4.1位置参数1.4.2命名参数1.5方法1.5.1. 方法定义1.5.2. Named parameters1.5.3. 默认参数1.5.4. 可变参数1.5.5. 重载方法选择算法1.5.6. 异常声明1.6字...

2019-03-21 18:41:38 482 2

翻译 groovy闭包

目录1.语法1.1闭包定义1.2. 闭包作为对象2. 参数2.1. 普通参数2.2. 隐式参数2.3. 可变参数3.委托策略3.1Groovy闭包 VS lambda表达式3.2. Owner, delegate(委托) and this3.2.1. this的含义3.2.2. 闭包的Owner3.2.3. 闭包的委托3.2.4. 委托策...

2019-03-21 17:33:49 606

转载 groovy操作符

目录数学运算符对象运算符空对象安全引用运算符直接字段访问操作符方法指针操作符正则表达式运算符其他操作符扩展操作符解包方法参数、列表元素、键值对范围操作符比较操作符索引操作符成员操作符== 和is操作符类型转换操作符钻石操作符调用操作符操作符优先级表操作符重载数学运算符#乘方assert 2 ** 3 ==...

2019-03-19 17:50:31 243

转载 groovy程序结构

定义包包的定义和在 Java 中一样:// defining a package named com.yoursitepackage com.yoursite导入包1.导入包将包里的类名导入后就可以直接使用类名,而不用再加限定名// importing the class MarkupBuilderimport groovy.xml.MarkupBuilder// ...

2019-03-19 17:49:29 196

转载 groovy语法

目录标识符中的引号标识符字符串插值字符串闭包插值表达式groovy中的groovy.lang.GString与java中的java.lang.String互转字符串总结表格字符数字整数字面量非 10 进制数小数下划线数字后缀数学运算中的转型表除法运算和幂运算的情况集合列表、数组键值对本章介绍Groovy编程语言的语法。语言...

2019-03-19 16:01:58 388

原创 git(2)

目录远程仓库远程分支VS远程跟踪分支VS本地分支跟踪分支推送本地分支拉取或抓取删除远程分支git服务器安全地管理代码reset和checkout可以胜任撤销工作“三棵树”例程总结你的打赏是我奋笔疾书的动力!远程仓库查看所有的远程仓库:git remote -v$ git remote -vbakkdoor https://gi...

2019-03-13 18:15:16 64

原创 git(1)

目录git工作目录下文件的状态提交git commit删除文件git rm查看提交信息撤销操作git tagGit 别名分支删除分支整合分支清理工作目录中的文件储藏你的打赏是我奋笔疾书的动力!​git工作目录下文件的状态git工作目录下的文件的状态变化周期,如下图:你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪...

2019-03-08 18:13:04 368

原创 michael&scott算法

目录1 介绍2 算法3 正确性4 进一步实现你的打赏是我奋笔疾书的动力!​1 介绍 回顾以往研究者的各种blocking算法、non-blocking算法、lock-free算法,它们要么基于并发的FIFO队列,要么基于单向循环链表,要么基于compare_and_swap原语,甚至基于double_compare_and_swap原语。然而,简单...

2019-02-28 19:45:46 1387

翻译 百度翻译vs谷歌翻译

开放给广大用户的在线翻译是百亿市值和千亿市值的一个体现:原文:Figure 1 presents commented pseudo-code for the nonblocking queue data structure and operations. The algorithm implements the queue as a singly-linked list with Head a...

2019-02-28 12:32:40 1488 1

翻译 Happens-Before

目录Happens-Before 关系Ahappens-beforeB 并不意味着 A happening before BA happening before B 并不意味着 Ahappens-beforeBHappens-Before 关系Happens-before是一个现代计算机科学术语,它有助于描述C ++ 11,Java,Go甚至LLVM背后的软件内存模型。...

2019-02-27 18:36:46 124

原创 java中的Volatile

目录Volatilehappens-before你的打赏是我奋笔疾书的动力!​Volatile 掌握好Volatile的概念是理解Doug Lea的AQS的前提,如果你学习AQS的时候,不想一脸茫然和胸塞虚竹的话,还是先来看一下JMM(java内存模型)对volatile的写和读的内存语义的描述。 volatile写和锁的释放有相同的内存语义...

2019-02-19 19:05:21 109

原创 虚拟机字节码执行引擎(深入理解java虚拟机笔记)

目录概述运行时栈帧结构局部变量表操作数栈动态链接方法返回地址附加信息方法调用解析分派动态类型语言支持基于栈的字节码执行引擎解释执行基于栈的指令集和基于寄存器的指令集基于栈的解释器执行过程举例字节码生成与动态代理ClassModifier概述         无论是虚拟机还是物理机都会有执行引擎这一概念,执行引擎有代码执行能...

2019-02-16 18:41:40 162

原创 虚拟机加载机制(深入理解java虚拟机笔记)

目录加载验证文件格式验证元数据验证方法的字节码验证符号引用验证准备解析初始化类加载器双亲委派双亲委派的创新线程上下文加载器(SPI类加载模式)OSGI你的打赏是我奋笔疾书的动力!​ 类从被加载到虚拟机所管辖的内存中,再到卸载出内存,包括:加载开始于需要加载该类的地方。 而对类的初始化“有且仅有...

2019-01-15 17:00:41 127

原创 类文件结构(深入理解Java虚拟机笔记)

目录魔术(0-3)、主(6-7)、次(4-5)版本号常量池访问标志类索引,父类索引和接口索引集合字段表集合方法表集合属性表集合示例将我们编写的程序编译成机器码已不再是唯一的选择,越来越多的语言选择了与操作系统和机器指令集无关的、平台中立的存储格式作为程序编译后的存储格式。ByteCode就是一种与平台无关的存储格式。然而产生ByteCode的java虚拟机可以编...

2019-01-11 20:20:07 103

原创 java运行时和对象的内存布局(深入理解Java虚拟机笔记)

目录程序计数器(PC寄存器)Java虚拟机栈本地方法栈Java堆方法区直接内存对象内存布局对象访问定位有的人写博客给他人看,有的人写博客给自己看,有的人写博客只是记录,有的人写博客为了展示,我都有。写博客还有其他的目的和作用,看客可以自己用心体验。写博客特别累,不是码字类,而是看书动脑子累。今天打破下长时间的沉默,发表点大家常常挂在嘴边的东西。程序计...

2019-01-07 18:15:23 158

ServiceManager底下的binder驱动干了什么.xlsx

ServiceManager如何成为守护进程。文档中把binder驱动的一些代码集中在一起注释,方便阅读和理解。

2020-04-02

Binder协议基本格式.xlsx

Binder协议基本格式,和一些binder驱动代码的走读。文档中把多块代码集中起来进行注释,方便阅读和理解。

2020-04-02

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除