自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

puppy的博客

给你的世界套上马鞍,看它会变成什么样

  • 博客(32)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 进程间通信机制Binder

binder 是什么?进程间通信机制也是一个驱动Binder.java --> 实现 Ibinder — 跨进程的能力什么时候用到多进程?自己创建的进程:webVIew 视频播放、音乐、大图浏览、推送系统服务:打电话,闹钟等等多进程优点在哪里?内存 : 一个app ,6G,8G,16G (使用更多)风险隔离 : 每一个进程,单独的一个appLinux进程间通信机制有哪些?管道、信号量、socket 、共享内存等等Android为什么要增加Binder?Bind

2021-02-22 09:44:02 385 1

原创 Handler

数据通信会带来什么开发中的问题?线程间如何通讯Handler通信实现的方案实际上是内存共享的方案为什么线程间不会干扰加了锁内存管理设计思路优秀为什么 wait/notify用武之地不大因为handler已经将需要这部分功能进行了Linux层的封装源于生活高于生活handler: 地下 - 地上《 消息管理机制:消息-》事物java main()jvm(一个应用挂掉不影响其他的应用)功能机:FATAL error,所有的代码,都是handlerlancher (app):zygote

2021-02-22 09:42:28 180 1

原创 Java原生网络编程

编程中的Socket是什么?Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,其实就是一个门面模式。TCP用主机的 IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)。短连接建立连接,发送报文,拆除连接 (http1.0)(web服务器要服务大量客户,维护太多连接很累,慢慢转移长连接)长连接传送完并不拆除,多用于点对点操作频繁...

2021-02-22 09:38:36 168 2

原创 网络协议

计算机网络是什么?利用通信线路将地理上分散的、具有独立功 能的计算机系统和通信设备按不同的形式连 接起来,以功能完善的网络软件及协议实现 资源共享和信息传递的系统。主要网络有哪些?1、局域网 2、城域网 3、广域网 (覆盖范围) …分类计算机网络发展概史1、诞生阶段,单个计算机为中心的远程联机系统2、ARPANET,多个主机通过通信线路互联起来3、开放性的标准化体系结构,OSI(Open System Interconnection Reference Model )开放式系统互联通信参考模

2021-02-22 09:35:58 296 1

原创 Android虚拟机与ClassLoader类加载

JVM与DalvikAndroid应用程序运行在Dalvik/ART虚拟机,并且每一个应用程序对应有一个单独的Dalvik虚拟机实例。Dalvik虚拟机实则也算是一个Java虚拟机,只不过它执行的不是class文件,而是dex文件。Dalvik虚拟机与Java虚拟机共享有差不多的特性,差别在于两者执行的指令集是不一样的,前者的指令集是基本寄存器的,而后者的指令集是基于堆栈的。基于栈的虚拟机对于基于栈的虚拟机来说,每一个运行时的线程,都有一个独立的栈。栈中记录了方法调用的历史,每有一次方法调用,栈中

2021-02-18 14:57:03 1226 6

原创 垃圾回收机制

分代收集理论1.绝大部分的对象都是朝生夕死 —新生代2.对象熬过多次垃圾回收,越难回收 —老年代应该这两类对象分开cms 才会单独收集老年代其他很多时候收集老年代是Full GC(新生代、老年代、方法区)复制算法(Copying)特点:实现简单、运行高效内存复制、没有内存碎片利用率只有一半Eden区的来源:Appel式回收提高空间利用率和空间分配担保...

2021-02-14 11:12:47 2266 1

原创 对象与垃圾回收机制

一般的对象狭义的对象类加载:把class加载到内存中去检查 有没有加载进来 等等检查遇到new 第一步是检查 能不能在 常量池方法区的常量池定位到类的符号引用检查加载成功后 分配内存分配内存有两种方式,两种方式划分内存:指针碰撞、空闲链表指针指向最后一个空间,只能在堆空间很规整的办事(指针碰撞) ,垃圾回收后就不规整了零散的不规整的怎么办空闲的和占用的交替的话用不了指针碰撞 所以用空闲链表。堆空间的规整程度决定的用两种方式中的哪个垃圾回收器带有整理(压缩)功能带整理功能的就会使得内存

2021-02-11 11:12:01 344 2

原创 JVM内存管理剖析

一.JVM与操作系统的关系1.Java Virtual MachineJVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。2.翻译Java 程序不一样,使用 javac 编译成 .class 文件之后,还需要使用 Java 命令去主动执行它,操作系统并不认识这些 .class 文件。所以JVM就是一个翻译。从图中可以看到,有了 JVM 这个抽象层之后,

2021-02-09 17:43:12 175 2

原创 RxJava原理与自定义操作符-----自定义RxView操作符

自定义操作符写一个防抖操作符public class RxView { private final static String TAG = RxView.class.getSimpleName(); // 我们自己的操作符 == 函数 public static Observable<Object> clicks(View view) { return new ViewClickObservable(view); } }pub

2021-02-08 13:56:45 176 1

原创 RxJava原理与自定义操作符-----线程切换原理

subscribeOn 给上面代码分配线程 .subscribeOn( Schedulers.io() // 耗时读取的异步 )先分析Schedulers.io(): @NonNull public static Scheduler io() { return RxJavaPlugins.onIoScheduler(IO); }

2021-02-08 10:27:20 263 1

原创 RxJava模式与原理-----map变换操作符原理

map示意图: // ObseravbleCreate 自定义source传递进去了 == source Observable.create( // 自定义source new ObservableOnSubscribe<String>() { @Override public void subscribe(Obse

2021-02-06 12:27:52 301 1

原创 RxJava模式与原理-----标准观察者与RxJava观察者

模式标准的观察者设计模式一个被观察者,多个观察者绿色区域是被观察者红色区域是观察者被观察者的抽象(抽象类或者接口)…蓝色区域 把观察者丢给被观察者被观察者会有容器,把被观察者丢到容器里面I/System.out: 更新了消息:消息:以后Android程序员必须要学习Kotlin A 收到了推送消息:消息:以后Android程序员必须要学习Kotlin B 收到了推送消息:消息:以后Android程序员必须要学习Kotlin C 收到了推送消息:消息:以后And

2021-02-06 12:26:34 316 1

原创 RxJava之doOnNext运用

完成需求异步线程------UI线程--------异步线程-------UI线程 频繁切换// 请求接口 APIpublic interface IRequestNetwor { // 请求注册 功能 todo 耗时操作 ---> OkHttp public io.reactivex.Observable<RegisterResponse> registerAction(@Body RegisterRequest registerRequest);

2021-02-04 07:05:33 646 2

原创 RxJava配合Retrofit,RxJava之防抖与网络嵌套

RxJava配合Retrofit:Retrofit请求服务器(通过okhttp)拿到响应码给RxJava,RxJava处理回来的数据,Retrofit是典型的封装框架Retrofit是一个封装框架,Retrofit不是网络请求框架防抖自动化脚本一秒点button百次只响应一次(不抖动)RxBinding 防抖...

2021-02-04 07:04:01 410 4

原创 RxJava核心思想

为什么学习RxJava ?改变思维来提升效率RxJava核心思想起点(被观察者)(Observable)终点(观察者)(Observer)

2021-02-04 07:02:22 256 2

原创 synchronized的实现原理

synchronized在底层是如何实现加锁的呢?使用monitorenter和monitorexit指令实现的 //count进行累加 public void incCount(){ synchronized (this){ count = count + 1;//count++; } }synchronized关键字包围的同步块,查看.class public void incCount(); descriptor

2021-01-29 20:30:26 117 3

原创 JMM(JAVA Memory Model) Java内存模型 和 volatile

JMM基础-计算机原理计算 a+bCPU读取一次内存 100ns,读取a,b花费200nsCPU计算只用0.6ns执行a+b绝大部分的时间是在等待读取内存所以引入了高速缓存(一级、二级、三级)多核CPU共享L3L1速度最快 容量最小为了提高运行速度 引入了cache为了充分利用cache就提出了JMMJava内存模型(JMM)工作内存,主内存,两个抽象概念工作内存:包括cpu内部的寄存器,高速缓存,还包括主内存(RAM)的一部分,很小一部分在主内存主内存:也有小部分可能在寄存

2021-01-29 14:05:19 162 2

原创 AQS(AbstractQueuedSynchronizer)抽象队列同步器

AQS(AbstractQueuedSynchronizer)抽象队列同步器AQS是并发编程包里面的一个抽象类实现的子类有哪些,基于AQS实现了,线程池里面用到了,显示锁用到了,读写锁用到了,信号量用到了…JDK并发里面的同步组件的一个基础的构件,用来构建同步组件...

2021-01-29 14:02:19 198 1

原创 线程池原理

1.使用线程池的好处(为什么使用线程池)1.减少资源消耗Thread线程,是操作系统的资源,创建和销毁是要有资源消耗的,如果有线程池事先准备好一批线程,创建线程和销毁线程的资源就没有了2.使用线程池缩短任务的执行时间。有一个新的任务就new 一个线程,那么时间消耗为:New Thread() T1:线程的创建时间,T2:任务的执行时间 ,T3:线程的销毁时间准备好一堆的线程准备好 就不需要T1 T33.线程是稀缺而昂贵的资源,因为线程创建出来消耗CPU,消耗内存(一定消耗内存),线程执行太多,

2021-01-28 21:21:08 618 1

原创 阻塞队列

阻塞队列有两种阻塞队列是空的,拿的时候拿不到,阻塞了队列是满的,放的时候放不进,阻塞了阻塞队列在JDK里面有一个专门的接口BlockingQueue并不是所有的方法都是阻塞的方法插入元素和拿取元素成对出现的两种操作非阻塞类的方法add()插入元素,往满的队列插入时元素时插不进会抛出异常remove()拿取元素,从空的队列拿元素时拿不出来会抛出异常非阻塞类的方法offer()插入元素,往满的队列插入时元素时插不进会返回falsepoll()拿取元素,从空的队列拿元素时拿不出来会返回nu

2021-01-28 09:50:47 90 1

原创 CAS基本原理

CAS(Compare And Swap)Atomic开头的类都被称为原子变量类原子操作:不可再分的操作,这个操作要么全部完成,要么全不完成。synchronized关键字包围的代码块就是一个原子操作synchronized可以实现原子操作,但这个机制太重CAS的原理利用了现代处理器都支持的CAS的指令,循环这个指令,直到成功为止悲观锁和乐观锁:Synchronized 是悲观锁 ,抢到锁后安安心心的做。CAS 是乐观锁,先取出来再去改 ,用CAS指令去比较和交换(比较没人改过就交换,

2021-01-27 15:36:00 144 1

原创 线程与进程理论知识入门05-(新启线程,线程的生命周期,死锁,ThreadLocal)

新启线程- 只有两种之前认为有3种派生自Thread 这个类实现一个Runnable接口,把接口实例化后交给一个线程去执行实现一个Callable接口,把接口实例化后交给一个线程去执行新启线程- 只有两种方式Callable这一种严格意义上讲不能算是Thread源码: 1. There are two ways to create a new thread of execution. One is to 2. declare a class to be a subclass of &l

2021-01-27 10:37:09 169 1

原创 线程与进程理论知识入门04-等待唤醒机制(wait与notify)与ThreadLocal

锁.wait() 与 锁.notify()wait 或者 notify 必须要有锁包裹着等待区域: wait();获取对象的锁????synchronized(持有的锁 对象的锁){  //因为被锁住了,你没法获取this锁    wait();   //内部会释放this锁,这样通知区域才能拿到锁}通知区域: notify();获取对象的锁????synchronized(持有的锁 对象的锁){&nbsp

2021-01-26 13:17:23 179 1

原创 线程与进程理论知识入门03(类锁,对象锁,显示锁)

synchronized(隐士锁,内置锁)synchronized 隐士锁(内置锁)(锁定 解锁 看不到)(被JDK封装到内部里面去 原理调用native层跟操作系统交互 完成…)/** * synchronized 隐士锁(内置锁)(锁定 解锁 看不到)(被JDK封装到内部里面去 原理调用native层跟操作系统交互 完成....) */public class GpsEngine { private static GpsEngine gpsEngine; //单例 p

2021-01-26 07:35:24 117 2

原创 线程与进程理论知识入门02

运行状态到死亡中的stop()方法过时了。setDeamon()守护线程:public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(){ @Override public void run() { for(int i = 0; i<50; i++){ .

2021-01-25 10:11:33 80 1

原创 线程与进程理论知识入门01

1.App线程概念main_thread: 主线程专门用来处理用户的操作(处理UI)。work_thread: 做下载等工作。2.CPU核心数和线程数的关系核心数、线程数: 目前主流 CPU 都是多核的。增加核心数目就是为了增加线程数,因为操作系统是通过线程来执行任务的,一般情况下它们是 1:1 对应关系,也 就是说四核 CPU 一般拥有四个线程。但Intel 引入超线程技术后,使核心数与线程 数形成 1:2 的关系3.CPU时间片轮转机制进程是程序运行资源分配的最小单位:进程是操作系统进行资

2021-01-24 18:24:05 148 1

原创 反射与Type体系

1.反射一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的,并且能够获得此类的引用。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的反射 API 进行反射调用。反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。 是Java被视为动态语言的关键。反射都是基于class的

2021-01-23 23:05:00 182 3

原创 注解(Annotation)

1.注解的定义Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的一种注释机制。是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。注解本身没有任何意义,单独的注解就是一种注释,他需要结合其他如反射、插桩等技术才有意义。@Target({ElementType.TYPE,ElementType.METHOD})@Retention(RetentionPolicy.SOURCE)public @interface Pupp

2021-01-22 00:00:04 122 1

原创 泛型,继承和子类型,PECS

1.协变Apple extends FruitApple[] 父类是 Fruit[] (数组的协变)给定两种更具体的类型A和B(例如Fruit和Apple)无论A和B是否相关MyClass<A> 与MyClass<B> 都没半毛钱关系他们的公共父对象是Object只要T不变以下继承关系就存在B extends AC extends B D exstends C那么B<Apple> 继承自A<Apple>那么C<Apple&g

2021-01-21 17:09:03 107 1

原创 使用泛型以及泛型擦除带来的影响(副作用)

1. 泛型类型变量不能使用基本数据类型比如没有ArrayList,只有ArrayList.当类型擦除后,ArrayList的原始类中的类型变量(T)替换成Object,但Object类型不能存放int值。public static void scene02() { ArrayList<int> ints = new ArrayList<>();//不可以,会报错 ArrayList<Integer> integers = new Arr

2021-01-21 08:26:13 862 5

原创 泛型擦除机制

探究泛型类的本质public class Test { public static void main(String[] args) { scene01(); } public static void scene01() { ArrayList<Apple> apples = new ArrayList<>(); ArrayList<Banana> bananas = new ArrayList

2021-01-20 23:25:27 247 1

原创 Java泛型的定义与三种使用情况

什么是泛型?泛型,即“参数化类型”。顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。泛型类引入一个类型变量T(其他大写字母都可以,不过常用的就是T,E

2021-01-20 22:29:37 298 1

《Tensorflow:实战Google深度学习框架》高清完整PDF版,珍惜

《Tensorflow:实战Google深度学习框架》为使用TensorFlow深度学习框架的入门参考书,旨在帮助读者以最快、最有效的方式上手TensorFlow和深度学习。书中省略了深度学习繁琐的数学模型推导,从实际应用问题出发,通过具体的TensorFlow样例程序介绍如何使用深度学习解决这些问题。《Tensorflow:实战Google深度学习框架》包含了深度学习的入门知识和大量实践经验,是走进这个最新、最火的人工智能领域的首选参考书。

2018-11-06

深度学习算法实践源码-吴岸城

深度学习算法实践-电子工业出版社-吴岸城-2017年1月-随书源码

2018-10-20

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

TA关注的人

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