自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 自定义注解

参考文章 https://blog.csdn.net/qq_20521573/article/details/82321755SOURCE 源码注解用来限制代码,配合IDE给开发者错误提示RUNTIME 运行时注解运行时通过反射获取对象的注解信息,然后处理。例如ButterKnife、EventBusCLASS 编译时注解在编译过程中通过AbstractProcessor处理注解信息,但是拿到的信息只在编译时有效,编译结束后会被释放,所以要通过代码生成框架来生成java文

2021-08-16 17:46:25 123

原创 volatile

CPU的处理速度远远大于存储设备的读写速度,为了充分利用CPU资源,引入了高速缓存。在多核系统中,每个CPU都有自己的高速缓存,而它们共享同一主内存。主内存的同一字段在不同高速缓存中的可能会不同,所以CPU访问缓存时需要遵循缓存一致性协议,例如MESI、MOSI、MSI等。此外,CPU会对输入的代码做乱序执行优化,与之类似的,JVM的即时编译器中有指令重排序优化JAVA内存模型(定义了主内存中变量的访问规则)所有“变量”都存储在主内存(这里的变量特指线程间可以共享的变量,不包括.

2021-08-16 17:37:40 124

原创 JNI native方法注册的两种方式

NDK native develop kit 原生开发工具集优点:复用、提高性能、防逆向缺点:开发复杂JNI java native interface用于java 和 c/c++的交互,jni是jvm的一部分,可以在所有java虚拟机中运行,实现跨平台复用JNI native方法注册的两种方式静态注册(jvm实现):1、编写带有native方法的Java类2、使用Javah命令生成.h头文件3、编写代码实现头文件中的方法动态注册(开发者实现):1..

2021-07-28 14:17:41 1489

原创 动态规划解法

1、划分阶段自顶向下分析,将问题不断简化,划分成若干个阶段,确保阶段的有序,即按阶段顺序,自下而上解决时,能一步步推导出最终结果2、确定状态从初始到结束,每个阶段都有自己的状态,用数组来记录每个状态下的解⚠️要确保无后效性(比如子序列问题一般都用dp[i]来表示以nums[i]结尾时的解)当需要频繁调用时,可以考虑用空间换时间来提高效率3、确定状态转移关系dp[i]与已求解状态之间的关系⚠️无法确定关系时,需要回到第一步,重新划分4、确定数组边界值循环终止

2021-07-28 14:16:11 192

原创 Java线程池

生命周期RUNNING 运行状态,能够接受新任务且能对已添加的任务进行处理。线程池一旦被创建就处于RUNNING状态。SHUTDOWN 关闭状态,不接受新任务,但可以处理已添加的任务。RUNNING状态的线程池调用shutdown()后会进入SHUTDOWN状态。STOP 停止状态,不接收新任务,清空已添加的任务,且会中断正在执行任务的线程。RUNNING状态的线程池调用了shutdownNow()后会进入STOP状态。TIDYING 当所有任务已终止,且任务数量为0时,线程池会

2021-07-28 14:13:10 812

原创 排序算法对比

2021-07-05 11:10:38 63

原创 Binder问答

1、Android为什么要采用Binder作为IPC机制?比传统ipc方式少了一次拷贝,使用方便,效率高2、Binder是如何做到一次拷贝的?发送方拷贝数据到内核,内核与接收方通过内存映射共享数据,减少了一次拷贝3、MMAP的原理?不同进程的虚拟内存映射到同一块物理内存4、Binder机制是如何跨进程的?由binder驱动来负责 client、server、ServerManager之间的通信,一般分3步:注册服务、获取服务、调用服务。原理还是内存映射5、AIDL生成的Java类细节

2021-07-03 09:03:48 63

原创 Synchronized

对象内存布局JOL类库可以用来打印对象内存布局Synchronized用法:修饰非静态方法,锁的是当前对象;修饰静态方法,锁的是当前类的Class对象;修饰代码块,锁的是括号里指定的对象(XX.class表示XX类的Class对象)原理:synchronized修饰代码块时,经过编译后,代码块对应的字节码指令前后会多出monitorenter和monitorexit指令,这两个指令是成对出现的,但是在发生异常的时候也要保证执行monitorexit指令来释放锁,所以monitorexi

2021-07-03 09:03:08 169

原创 targetSdkVersion

compileSdkVersion:告诉IDE你要使用哪个版本的api,根据不同版本,IDE会给出相应的编译警告、错误等。不会打到apk里,所以不影响运行时的表现行为。应该保持最新,这样能避免使用在新版本中被弃用的api,为适配新版本做准备。minSdkVersion:所支持的最低手机系统版本,app的minSdkVersion值应该尽可能低,但是要大于第三方库中的minSdkVersion的最大值。targetSdkVersion:要使用哪个版本的表现行为,当系统版本小于等于targetSdkVe

2021-07-03 09:02:54 531

原创 App打包、安装、启动

apk打包的7个步骤1、aapt打包资源文件,生成R.java文件:使用aapt来打包res资源文件,生成R.java、resources.arsc和res文件,R.java文件是所有res资源的id列表,R.java是我们在编写代码的时候会用到的,我们经常R.drawable.icon之类的来引用工程中的资源文件。R.java是我们在写代码时候引用res资源的id表,resources.arsc是程序在运行时候的用到的资源表。R.java是程序员读的,resources.arsc是机器读的

2021-07-03 09:02:30 467

原创 Handler问答

1、线程切换的原理上下文切换2、looper什么时候进入循环调用loop方法后3、handler内存泄露,最终是谁持有的activity?持有handler对应looper的那个线程4、handlethread 原理Start后自动调用looper的prepare、loop5、handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。runnable保存在msg的callback里msg.callback > handl

2021-07-02 14:09:13 380

原创 HashMap

HashMap JDK1.7内部是一个链表数组创建对象时,设置初始大小16,负载因子7.5f调用put时,先创建数组/数组扩容,然后添加元素二次哈希时,通过扰动函数(移位+异或),使hash值更加分散计算数组index时,巧妙使用length(2的幂)减去1得到结尾全是1的二进制数,再通过与运算得到均匀分布的index,0到length-1扩容和添加时,均采用头插法扩容条件是元素总数size大于等于阈值 且 当前要插入的数组index处的元素不为空有且只能存在一个key等于null的元素,h

2021-07-02 14:07:41 133

原创 Choreographer

Choreographer工作流程初始化WindowManagerGlobal.addView()root = new ViewRootImpl() —> mChoreographer = Choreographer.getInstance();调用postCallback()postCallbackDelayed()postCallbackDelayedInternal()Choreographer.CallbackQueue.addCallbackLocked()//添加到对应

2021-07-02 14:06:42 345

原创 CAS原理

CAS原理 Compare And Swap (比较、交换)轻量级锁、无锁、自旋锁先跟期望值比较,如果数据的真实值跟期望值不同,则说明数据已经被其他线程修改过,返回false。CAS是一条cpu指令cmpxchg,所以是原子操作(单cpu时 cmpxchg 多cpu时 lock cmpxchg)全称 lock-锁总线 compare and exchange无锁算法一般是把cas套在死循环里,一直重试,直到返回成功(乐观锁思想)AtomicStampedReference相比于Atomi.

2021-07-02 14:05:44 100

原创 ArrayList

ArrayList内部维护一个Object数组,初始容量为10。新增元素时,根据当前容量判断是否扩容,每次扩容增加当前容量的一半。删除元素时,把index+1及以后的元素,复制到index及以后元素的位置获取元素时,直接根据下标返回LinkedList内部是一个双向链表,维护first和last,Node类型,每个Node都有prev和next。新增元素时,直接给last添加next。删除元素时,先获取要删除的Node,再改变prev和next。获取元素时,根据index是否小于siz

2021-07-02 14:05:05 66

原创 Activity的绘制时机

PhoneWindow的创建ActivityThread.handleLaunchActivity()ActivityThread.performLaunchActivity()Activity.attach() -> mWindow = new PhoneWindow();WindowManager的创建Activity.attach()mWindow.setWindowManager() -> Window.mWindowManager = new WindowManagerI

2021-07-02 14:03:59 152

原创 用户空间和内核空间

用户空间和内核空间都是虚拟内存,但是从逻辑上由操作系统进行了划分,比如Linux 32位系统有4G虚拟内存,用户空间代表0-3G的内存地址,内核空间代表3-4G的内存地址。这样能够做到数据隔离,互不干扰,同时对访问进行控制,防止系统内核的数据被用户影响。用户态和内核态CPU将指令分为特权指令和非特权指令,按照特权等级,指令分为4级:Ring0-Ring3,由高到低。Linux系统只运用了Ring0和Ring3两个等级。每个进程在用户空间和内核空间各有一个栈,用来执行用户代码/内核代码。在内核

2021-07-02 14:00:35 799

原创 了解HarmonyOS

HarmonyOS = 原有的Android系统 - GMS + HMS + 分布式软总线 + 以Ability为核心的应用开发框架.hap文件 = js + entry + .apk在apk中,通过继承Application将系统产生的各种事件转发给鸿蒙应用,通过继承Activity将Activity的生命周期、Intent、触摸事件、按键时间、权限申请结果……转发给HarmonyOS的Ability,通过继承SurfaceView重新定义了一套UI「分布式软总线」实际上是一个私有的RPC协议

2021-07-02 13:58:54 200

原创 Java泛型

支持通过传参来动态指定参数类型,并在编译期进行类型检测(即当传入的参数类型与指定类型不符时,编译器会自动给出提示)本质是一种语法糖,只在编译期存在。好处是类型安全,且不需要手动转换类型。使用泛型前必须用 <T> 来声明泛型标识,其中 T 可以是任意字母开头+数字泛型类class Generic<E> { }Generic<String> stringGeneric = new Generic<>();//泛型类在创建对象的时候,来指定具体数据类型

2021-07-02 13:57:53 110

原创 Java动态代理原理

Proxy.newProxyInstance( classLoader, interfaces, invocationHandler );虚拟机动态生成了一个类$Proxy0(若有多个动态代理类,则为$Proxy1、$Proxy2…递增),继承自Proxy,并实现了interfaces中的接口方法,且在方法中都统一调用了invocationHandler的invoke方法。这种方式只能代理接口方法,为什么要设计成这样?猜测:避免父类带来的额外开销和实现复杂度...

2021-07-02 13:54:15 67

原创 http/https

ISO 国际标准化组织OSI 由ISO发布的网络互联模型,分7层应用层(应用层、表示层、会话层) http/https协议传输层 tcp协议-主要解决如何可靠的传递数据网络层 ip协议-主要解决网络路由和寻址问题数据链路层物理层http请求报文 = 请求行 + 请求头(header) + 请求体(body)http请求行详解①POST ②/users ③HTTP/1.1①是请求方法,HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE

2021-06-29 15:22:06 1141 2

原创 String、StringBuffer、StringBuilder全面比较

String、StringBuffer、StringBuilder比较一、查看官方文档 快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl + Q插入链接 Ctrl + L插入代码 Ctrl + K插入图片 Ctrl + G提升标题 Ctrl + H有序列表 Ctrl + O无序列表 ...

2018-05-11 10:24:15 179

空空如也

空空如也

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

TA关注的人

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