自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 资源 (3)
  • 收藏
  • 关注

原创 虚拟内存分配

需要注意的,这里申请的内存都是虚拟内存,并且这个时候并不会分配真正的物理内存,只有当我们真正要往这块虚拟内存区域写入数据时,操作系统检查到对应的虚拟内存没有映射到物理内存,便会发生缺页中断,然后分配一块同样大小的物理内存,并建立映射关系。开发 Android 应用时,并不需要我们自己去分配内存,直接 new 一个对象,声明一个变量或者常量即可,也不需要我们自己去做释放,但所有的数据都需要内存,这些都是虚拟机帮我们做。虚拟机分配申请内存主要使用的是 malloc() 函数,它是 C 语言库的一个标准函数。

2022-11-27 10:46:25 989

原创 Android FrameWork Input触控事件处理流程 笔记

input 是最常见的事件之一,用户的点击、滑动、长按等操作,都属于 input 事件驱动。标识 Input 事件区域,这里可以看到一个 Input_Down 事件 + 若干个 Input_Move 事件 + 一个 Input_Up 事件的处理阶段都被算到了这里。队列(“aq”)中记录的是应用需要处理的Input事件,这里可以看到input事件已经传递到了应用进程。队列里面记录的是已经派发给 App(“wq”),但是 App还在处理没有返回处理成功的事件。

2022-11-02 11:44:35 1684

原创 Kotlin 3种单例优缺点和原理

Lazy是接受一个 lambda 并返回一个 Lazy 实例的函数,返回的实例可以作为实现延迟属性的委托: 第一次调用 get() 会执行已传递给 lazy() 的 lambda 表达式并记录结果, 后续调用 get() 只是返回记录的结果。Kotlin中的object就声明了一个类为饿汉模式的单例,经过object修饰过得类就是一个静态类,默认实现了饿汉模式。还有 静态内部类式(线程安全,调用效率高,可以延时加载)和枚举等单例模式 ,枚举单例我是用的很少,大家做个了解。我来看看lazy内部源码。

2022-10-12 10:36:57 2029 1

原创 Android Java 多线程常见问题

对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态 方法或者一个类的 class 对象上的。我们知道,类的对象实例可以有很多个,但 是每个类只有一个 class 对象,所以不同对象实例的对象锁是互不干扰的,但是 每个类只有一个类锁。但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存 在的,类锁其实锁的是每个类的对应的 class 对象。类锁和对象锁之间也是互不 干扰的。可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

2022-09-14 15:12:28 657

原创 Android java synchronized原理

顾名思义,它会偏向于第一个访问锁的线程,如果在运行过程中, 同步锁只有一个线程访问,不存在多线程争用的情况,则线程是不需要触发同步 的,减少加锁/解锁的一些 CAS 操作(比如等待队列的一些 CAS 操作),这种 情况下,就会给线程加一个偏向锁。如果在运行过程中,遇到了其他线程抢占 锁,则持有偏向锁的线程会被挂起,JVM 会消除它身上的偏向锁,将锁恢复到标 准的轻量级锁。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的 运行性能。

2022-09-09 15:45:30 747

原创 Android 之 Java 基础 泛型笔记

是为了参数化类型(在不创建新的类型的情况下,通过泛型指定 的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的 数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被 称为泛型类、泛型接口、泛型方法。泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参 数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时 传入具体的类型(类型实参)。......

2022-08-16 11:27:16 567

原创 Android setContentView源码笔记

1. PhoneWindow 的创建ActivityThread.performLaunchActivity-->activity.attach --> new PhoneWindow()-->mInstrumentation.callActivityOnCreatePhoneWindow —》分为3类,哪些地方会创建1.Activity2.Dialog3.PopupWindow4.Toast2.继承 Activity 的流程PhoneWindow.setCont

2022-05-31 11:53:31 195

原创 事件分发,事件到底是先到DecorView还是先到Window的?

这里的window可以理解为PhoneWindow,事件分发在Activity、DecorView、PhoneWindow中的顺序。当屏幕被触摸,首先会通过硬件产生触摸事件传入内核,然后走到FrameWork层(具体流程感兴趣的可以看看参考链接),最后经过一系列事件处理到达ViewRootImpl的processPointerEvent方法,接下来就是我们要分析的内容了://ViewRootImpl.java private int processPointerEvent(QueuedInputEve

2021-08-02 23:30:53 990

原创 Activity、PhoneWindow、DecorView、ViewRootImpl 之间的关系

Activity、PhoneWindow、DecorView、ViewRootImpl 之间的关系PhoneWindow:是Activity和View交互的中间层,帮助Activity管理View。DecorView:是所有View的最顶层View,是所有View的parent。ViewRootImpl:用于处理View相关的事件,比如绘制,事件分发,也是DecorView的parent。四者的创建时机?Activity创建于performLaunchActivity方法中,在startActiv

2021-07-26 23:00:11 522

原创 HandlerThread原理与应用

一 原理public class HandlerThread extends Thread { @Override public void run() { Looper.prepare(); synchronized (this) { mLooper = Looper.myLooper(); notifyAll(); } Process.setThreadPriority(mPr

2021-07-23 10:09:09 207

原创 Android 编译打包的过程中有哪些task会执行

//aidl 转换aidl文件为java文件Task :app:compileDebugAidl//生成BuildConfig文件Task :app:generateDebugBuildConfig//获取gradle中配置的资源文件Task :app:generateDebugResValues// merge资源文件Task :app:mergeDebugResources// merge assets文件Task :app:mergeDebugAssetsTask

2021-07-21 12:58:35 718 1

原创 算法 约瑟夫环

约瑟夫环是一个数学的应用问题,具体为,已知 n 个人(以编号 1,2,3…n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。这个问题的输入变量就是 n 和 m,即 n 个人和数到 m 的出列的人。输出的结果,就是 n 个人出列的顺序。这个问题,用队列的方法实现是个不错的选择。它的结果就是出列的顺序,恰好满足队列对处理顺序敏感的前提。因此,求解方式也是基于队列的先进先出原

2021-07-17 09:51:29 320

原创 字节面试题-谈谈对 java 多态的理解

字节面试题-谈谈对 java 多态的理解多态是指父类的某个方法被子类重写时,可以产生自己的功能行为,同一个操作 作用于不同对象,可以有不同的解释,产生不同的执行结果。多态的三个必要条件:继承父类。重写父类的方法。父类的引用指向子类对象。什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都 是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发 送对象的不同而采用多种不同的行为方式。(

2020-11-04 11:34:28 1903

原创 Flutter更新widget

一 Android和Flutter 更新View对比在Android中,您可以通过直接对view进行改变来更新视图。在Flutter中Widget是不可变的,不会直接更新,而必须使用Widget的状态。二 StatelessWidgets 和 StatelessWidget这是Stateful和Stateless widget的概念的来源。一个Stateless Widget就像它的名字,是一个没有状态信息的widget。当您所需要的用户界面不依赖于对象配置信息以外的其他任何内容时,Stat

2020-06-06 15:04:39 932

原创 Flutter和Android中的View区别

一 简单介绍在Android中,View是屏幕上显示的所有内容的基础, 按钮、工具栏、输入框等一切都是View。在Flutter中,View相当于是Widget。二 对比与View相比,Widget有一些不同之处。首先,Widget仅支持一帧,并且在每一帧上,Flutter的框架都会创建一个Widget实例树(译者语:相当于一次性绘制整个界面)。相比之下,在Android上View绘制结束后,就不会重绘,直到调用invalidate时才会重绘。与Android的视图层次系统不同(在fra

2020-06-06 10:22:40 364

原创 Android 第三方总结

1 ViewPager2:打造Banner控件ViewPager2:打造Banner控件

2020-02-19 12:00:12 221

原创 机器学习中的常用超参数

steps:训练迭代的总次数。一步计算一批样本产生的损失,然后使用该值修改一次模型的权重。batch size:单步的样本数量(随机选择)。例如,SGD 的批次大小为 1。以下公式成立:periods:控制报告的粒度。例如,如果 periods 设为 7 且 steps 设为 70,则练习将每 10 步输出一次损失值(即 7 次)。与超参数不同,我们不希望您修改 periods 的值。请注...

2018-11-15 18:30:25 1639

原创 深入了解机器学习之使用 TensorFlow 的起始步骤 (First Steps with TensorFlow):工具包

下图显示了 TensorFlow 工具包的当前层次结构:图 1. TensorFlow 工具包层次结构。下表总结了不同层的用途:TensorFlow 由以下两个组件组成:图协议缓冲区执行(分布式)图的运行时这两个组件类似于 Java 编译器和 JVM。正如 JVM 会实施在多个硬件平台(CPU 和 GPU)上一样,TensorFlow 也是如此。您应该使用哪个 API?您应该...

2018-11-14 18:22:52 361

原创 深入了解机器学习之降低损失 (Reducing Loss):随机梯度下降法

在梯度下降法中,批量指的是用于在单次迭代中计算梯度的样本总数。到目前为止,我们一直假定批量是指整个数据集。就 Google 的规模而言,数据集通常包含数十亿甚至数千亿个样本。此外,Google 数据集通常包含海量特征。因此,一个批量可能相当巨大。如果是超大批量,则单次迭代就可能要花费很长时间进行计算。包含随机抽样样本的大型数据集可能包含冗余数据。实际上,批量大小越大,出现冗余的可能性就越高。一些...

2018-11-13 13:53:15 620

原创 深入了解机器学习之降低损失 (Reducing Loss):学习速率

梯度矢量具有方向和大小。梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。例如,如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习速率。如果您选择的学习速率过小,就会花费太长的学习时间:图 6....

2018-11-12 18:42:26 956

原创 深入了解机器学习之降低损失 (Reducing Loss):梯度下降法

迭代方法图(图 1)包含一个标题为“计算参数更新”的华而不实的绿框。现在,我们将用更实质的方法代替这种华而不实的算法。假设我们有时间和计算资源来计算 的所有可能值的损失。对于我们一直在研究的回归问题,所产生的损失与 的图形始终是凸形。换言之,图形始终是碗状图,如下所示:图 2. 回归问题产生的损失与权重图为凸形。凸形问题只有一个最低点;即只存在一个斜率正好为 0 的位置。这个最小值就是...

2018-11-10 16:48:05 1416

原创 深入了解机器学习之降低损失:迭代方法

迭代学习可能会让您想到“Hot and Cold”这种寻找隐藏物品(如顶针)的儿童游戏。在我们的游戏中,“隐藏的物品”就是最佳模型。刚开始,您会胡乱猜测(“w1 的值为 0。”),等待系统告诉您损失是多少。然后,您再尝试另一种猜测(“ 的值为 0.5。”),看看损失是多少。哎呀,这次更接近目标了。实际上,如果您以正确方式玩这个游戏,通常会越来越接近目标。这个游戏真正棘手的地方在于尽可能高效地找到最...

2018-11-10 16:12:24 1656

原创 深入了解机器学习 (Descending into ML):训练与损失

简单来说,训练模型表示通过有标签样本来学习(确定)所有权重和偏差的理想值。在监督式学习中,机器学习算法通过以下方式构建模型:检查多个样本并尝试找出可最大限度地减少损失的模型;这一过程称为经验风险最小化。损失是对糟糕预测的惩罚。也就是说,损失是一个数值,表示对于单个样本而言模型预测的准确程度。如果模型的预测完全准确,则损失为零,否则损失会较大。训练模型的目标是从所有样本中找到一组平均损失“较小”的...

2018-11-10 14:54:38 609

原创 深入了解机器学习 (Descending into ML):线性回归

人们早就知晓,相比凉爽的天气,蟋蟀在较为炎热的天气里鸣叫更为频繁。数十年来,专业和业余昆虫学者已将每分钟的鸣叫声和温度方面的数据编入目录。Ruth 阿姨将她喜爱的蟋蟀数据库作为生日礼物送给您,并邀请您自己利用该数据库训练一个模型,从而预测鸣叫声与温度的关系。首先建议您将数据绘制成图表,了解下数据的分布情况:图 1. 每分钟的鸣叫声与温度(摄氏度)的关系。毫无疑问,此曲线图表明温度随着鸣叫声...

2018-11-10 14:07:31 553 1

原创 深入了解机器学习主要术语

1 什么是(监督式)机器学习?简单来说,它的定义如下:机器学习系统通过学习如何组合输入信息来对从未见过的数据做出有用的预测。下面我们来了解一下机器学习的基本术语。2 标签标签是我们要预测的事物,即简单线性回归中的 y 变量。标签可以是小麦未来的价格、图片中显示的动物品种、音频剪辑的含义或任何事物。3 特征特征是输入变量,即简单线性回归中的 x 变量。简单的机器学习项目可能会使用单个特...

2018-11-10 12:04:09 384

原创 深入了解机器学习-tensorflow创建和操控张量

学习目标:初始化 TensorFlow Variable 并赋值创建和操控张量回忆线性代数中的加法和乘法知识(如果这些内容对您来说很陌生,请参阅矩阵加法和乘法简介)熟悉基本的 TensorFlow 数学和数组运算from __future__ import print_functionimport tensorflow as tftry: tf.contrib.eager....

2018-11-09 18:38:49 420

原创 深入了解机器学习TensorFlow 编程概念

一 学习目标:学习 TensorFlow 编程模型的基础知识,重点了解以下概念:张量指令图会话构建一个简单的 TensorFlow 程序,使用该程序绘制一个默认图并创建一个运行该图的会话二 概念概览TensorFlow 的名称源自张量,张量是任意维度的数组。借助 TensorFlow,您可以操控具有大量维度的张量。即便如此,在大多数情况下,您会使用以下一个或多个低维张量:标...

2018-11-08 19:56:42 367

原创 深入了解机器学习-准备之主要概念

一 数学1 代数变量、系数和函数线性方程式,例如 y = b +w1x1 +w2x2对数和对数方程式,例如 y = In(1+ez)S 型函数前面几个知识点比较好理解,我们看一下 S 型函数S型函数(Sigmoid function)是BP神经网络中常用的非线性作用函数,即sigmoid函数,公式是f(x)=1/(1+e^-x)(-x是幂数)。Sigmoid函数又分为...

2018-11-08 14:42:20 373

原创 Java中 == 号与equals()方法区别详解

== 号与equals()方法区别这个问题在面试中经常被问到,如果你了解的不透彻,很容易被问蒙。下面我们来一起看看吧。1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.引用数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的...

2018-08-20 18:44:27 1095

原创 Android Studio 使用Lint检查并去除无用资源文件

在项目中会经常有一些无用的代码和资源,要一个个去查找删除太麻烦了,今天我们就来看在Android Studio 使用Lint检查并去除无用资源文件。一起来看看吧方法一1,选择你的项目2,点击AS上的Analyze菜单按钮,选择Run Inspection by Name 如下图3,会出现一个弹窗, 输入unused resources4,会弹出“inspactio...

2018-07-09 19:29:19 16621 6

原创 Java多线程——synchronized使用详解

一 前言Java多线程是面试必考的知识点,哈哈,说的有点太绝对了,题外话不说那么多了,今天我们就来了解一下Java多线程中的synchronized。synchronized相信大家都看过或者用过,synchronized是Java中的关键字,synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性,Java中每一个...

2018-06-12 17:58:58 43644 5

原创 Java集合——LinkedList源码分析

一 前言上一篇我们介绍了ArrayList源码解析有想看的同学可以点击这个链接ArrayList源码解析。平时我们或多或少都用过LinKedList,但是对其原理不是很了解,我们就来一起学习吧。二 源码解析1. LinkedList概述LinkedList是一个实现了List接口和Deque接口的双端链表。 有关索引的操作可能从链表头开始遍历到链表尾部,也可能从尾部遍历到链...

2018-05-27 18:46:10 494

原创 Java集合——ArrayList源码解析

一 前言最近去2家大厂面试被虐了,被虐也在意料之中,自己也没有怎么准备,决定回来好好学习,注重细节,多读源码,切勿眼高手低。给我最大感觉是大厂特别重视基础知识,对这些基础知识的深入理解,我们平时做项目的时候,都是会用一些容器,控件,框架,对源码有点了解,但是没有深入解读,半懂不懂,这样在面试官对知识点的层层深入时,就力不从心,结局你懂得,所以我们还是要多注重细节,多读源码。 不说那么多了,我...

2018-05-20 17:49:09 645 1

原创 Google I/O 2018 ——Android

2018-05-09 17:51:30 656

原创 Android OkHttp3源码详解——Dispatcher(任务调度器)

一 前言前一篇文章我们学习了Android OkHttp3源码详解——整体框架,今天我们来看一下Dispatcher(调度器)。首先我们来看看OkHttp的Wiki对Dispatcher`(调度器)介绍。For synchronous calls, you bring your own thread and are responsible for managing how many sim...

2018-05-03 20:18:47 1010

原创 Android OkHttp3源码详解——整体框架

一 前言之前写过一遍文章Android OkHttp3简介和使用详解,当时说要写 OkHttp3源码详解,由于各种原因,源码详解来的有点晚,下面我们先来来看一下流程图。二 源码整体架构 上图是OkHttp3的整体框架,大致可以分为以下几层:Interface——接口层:接收用户的网络访问请求(同步请求/异步请求),发起实际的网络访问Protocol——协议层:处理协议逻辑...

2018-05-02 19:43:19 5109

原创 点击应用图标-应用(Activity)的启动流程

一 前言点击应用图标后会去启动应用的LauncherActivity,如果LancerActivity所在的进程没有创建,还会创建新进程,整体的流程就是一个Activity的启动流程。Activity的启动流程是面试常客,也是高级工程师所必须了解的,本篇不涉及到源码的解读 ,主要是清楚了解Activity的启动流程,要看源码分析可以看这篇文章 Activity的启动流程源码解析二 A...

2018-04-29 18:58:22 1835

原创 Java集合——HashMap底层实现与原理源码分析——JDK1.8

一 概述HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现。HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap 允许 null 键和 null 值,在计算哈键的哈希值时,null 键哈希值为 0。HashMap 并不保证键值对的顺序,这意味着...

2018-04-24 20:06:01 947

原创 Java 集合详解

Java 集合详解1.集合了解集合类存放于java.util包中。集合类存放的都是对象的引用,而非对象本身。集合的长度可变。2.集合层次关系 观看上图需要注意一下 实线边框的是实现类 折线边框的是抽象类 点线边框的是接口2.1 Collection接口Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产...

2018-04-23 17:02:53 1890

原创 EditText 焦点控制,进入界面时不弹出键盘

EditText 焦点控制,进入界面时不弹出键盘 只需要在包含EditText的布局中加入 android:focusable="true" android:focusableInTouchMode="true"添加在最外层LinearLayout或RelativeLayout均可 就可解决进入界面就弹出键盘的问题...

2018-02-08 15:32:25 631

Android IPC AIDL

Android IPC AIDL 通信客户端和服务端代码。

2016-11-03

Android webView安全漏洞解决

Android webView安全漏洞解决 1. 解决CVE(通用漏洞与披露)中记录WebView的4个漏洞 2.解决 WebView File域同源策略绕过漏洞 3.解决 WebView 密码存储漏洞

2016-10-13

空空如也

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

TA关注的人

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