- 博客(202)
- 收藏
- 关注
原创 HTTP 协议的演进
HTTP协议演进历程从1991年的HTTP/0.9到2022年的HTTP/3,经历了五次重大版本迭代:HTTP/0.9仅支持GET方法;HTTP/1.0引入头部、状态码等基础特性;HTTP/1.1通过持久连接、Host头部等改进统治互联网20年;HTTP/2采用二进制分帧和多路复用提升性能;HTTP/3则基于QUIC/UDP协议,彻底解决队头阻塞问题。每个版本都在解决前代的性能瓶颈,核心演进方向是提高传输效率、降低延迟,最终实现了从TCP到UDP的底层协议变革。当前HTTP/3通过QUIC协议内置TLS1.
2026-08-18 23:23:15
329
原创 HTTP 与 HTTPS 详解
HTTP 与 HTTPS 核心区别与安全机制 HTTP协议以明文传输数据,存在窃听、篡改和劫持风险。HTTPS通过引入TLS/SSL加密层实现安全传输,具有三大核心保障:通过对称加密确保机密性、MAC校验保证数据完整性、数字证书验证服务器身份。TLS握手过程(1.2版本需1-RTT)建立安全连接,1.3版本进一步优化性能。HTTPS依赖CA机构颁发的数字证书进行身份认证,有效防御中间人攻击。虽然HTTPS因加密带来轻微性能损耗,但通过TLS 1.3、会话复用等技术可显著优化。现代互联网中,HTTPS已成为安
2026-08-18 23:18:03
501
原创 网络传输模型
本文对比了两种主流网络传输模型:理论导向的OSI七层模型和工程导向的TCP/IP四层/五层模型。OSI模型包含物理层(比特流传输)、数据链路层(帧组织)、网络层(路由寻址)、传输层(端到端通信)、会话层(会话管理)、表示层(数据转换)和应用层(用户接口);TCP/IP模型则将OSI的上三层合并为应用层,下两层合并为网络接口层。文章详细解析了各层功能、核心协议(如TCP/IP、HTTP、DNS等)和关键设备(交换机、路由器),并阐述了数据封装/解封装过程。两种模型中,TCP/IP因更贴近实际应用而成为互联网标
2026-08-18 23:03:06
367
原创 QUIC 协议详解
QUIC协议解析:下一代互联网传输核心 QUIC(快速UDP网络连接)是基于UDP的新型传输协议,现已成为HTTP/3的底层标准。它通过在用户态重新实现TCP的可靠传输机制,并内置TLS加密,解决了传统TCP/TLS/HTTP2协议栈的三大痛点:高延迟握手、TCP层队头阻塞和协议升级困难。 核心优势: 极速握手:1-RTT首次连接,0-RTT重连 多路复用:独立Stream设计彻底解决队头阻塞 连接迁移:通过Connection ID实现网络切换不中断 灵活升级:用户态实现便于算法更新 应用现状: 已获主流
2026-08-18 22:50:08
333
原创 TCP VS UDP
TCP与UDP是传输层两大核心协议,设计理念迥异:TCP通过复杂机制(三次握手/四次挥手、序列号确认、流量控制等)实现可靠传输,面向连接;UDP则保持极简设计(8字节头部),提供无连接不可靠服务,保留报文边界。两者在协议栈中位于网络层之上,TCP增强IP的可靠性,UDP则直接暴露IP特性。TCP头部至少20字节含丰富控制字段,UDP仅含端口和校验信息。三次握手确保连接可靠建立,四次挥手实现全双工连接有序关闭。
2026-08-18 22:39:45
453
原创 Android随笔-LiveData
LiveData 是 Android Jetpack 提供的生命周期感知数据持有类,能自动跟踪 Activity/Fragment 状态,仅在活跃时推送数据,避免内存泄漏。它具有自动清理、数据粘性、线程安全等特性,常与 ViewModel 配合使用。通过 MutableLiveData 封装数据,配合 Transformations 进行数据转换,简化 UI 层逻辑。内部通过 LifecycleBoundObserver 实现生命周期绑定,自动管理观察者注册与销毁。相比传统回调更安全高效,是 Android
2026-08-15 22:44:12
347
原创 Android随笔-MVI
MVI架构模式实现用户状态管理页面的文章摘要: MVI(Model-View-Intent)是一种基于单向数据流的架构模式,核心包含四个要素:用户意图(Intent)、状态处理(ViewModel)、不可变状态(State)和视图渲染(View)。本文通过一个用户信息管理页面的Android实现案例,展示了MVI的完整开发流程:首先定义User数据模型,然后构建包含所有UI信息的不可变UserState,接着用密封类抽象用户操作意图UserIntent,最后通过ViewModel处理业务逻辑并输出新状态。该
2026-08-15 22:17:14
202
原创 Android随笔-MVVM
MVVM 架构模式实践摘要 MVVM(Model-View-ViewModel)是一种将UI逻辑与业务逻辑分离的架构模式。核心组件包括: Model:数据层(如User实体类和UserRepository数据仓库) ViewModel:业务逻辑处理层(UserViewModel管理数据和状态) View:UI展示层(DataBinding实现自动数据绑定) 示例实现了一个用户信息展示功能: 使用LiveData实现数据观察 通过Repository模拟网络请求 ViewModel处理加载状态和数据更新 Da
2026-08-15 17:34:22
197
原创 Android随笔-kotlin 高阶函数
Kotlin 高阶函数是指以函数作为参数或返回函数的函数,包括两种形式:函数作为参数(如calculate(a, b, operation))和函数作为返回值(如multiplier(factor))。高阶函数的优势在于代码复用与抽象,例如标准库中的let/run/apply等内联函数通过inline关键字优化性能,消除Lambda对象的创建开销。非内联高阶函数会产生匿名类对象和虚方法调用的性能损耗,而内联函数通过编译期代码替换避免了这些开销,但会增加代码体积。高阶函数提升了代码简洁性和复用性,但也可能降低
2026-08-14 17:32:41
325
原创 Android随笔-Fragment
Fragment 是 Android 中可复用的 UI 组件片段,必须依附于 Activity 存在,具有独立生命周期和视图层级。核心特性包括依附性(需嵌入宿主)、生命周期(比 Activity 更复杂)和复用性(跨 Activity 共享)。 Fragment 解决了大屏适配、Activity 臃肿、切换开销等问题,通过FragmentManager动态管理事务(add/replace)。与宿主通信推荐ViewModel或Result API,传统接口回调需注意内存泄漏。 关键注意: 生命周期分视图层级(
2026-08-14 16:58:47
328
原创 Android随笔-kotlin withContext
文章摘要: withContext是Kotlin协程的核心上下文切换工具,通过挂起协程在指定线程执行代码并自动恢复原线程。其原理是通过suspendCoroutineUninterceptedOrReturn挂起当前协程,合并新旧上下文后在新线程执行任务,最终通过Continuation回调结果。相比launch它同步返回值,相比runBlocking它非阻塞线程。最佳实践包括:IO密集型任务切换、组合多上下文元素、异常捕获等。关键优势是自动线程切换与结构化并发,需避免冗余切换(如已在目标线程时重复调用)。
2026-08-14 15:43:52
509
原创 Android随笔-kotlin Dispatchers
Kotlin Dispatchers 核心原理与最佳实践 Dispatchers 是协程的线程调度器,通过拦截 Continuation 实现线程切换。核心要点: 原理:继承 CoroutineContext.Element,拦截协程恢复时包装为 Runnable 提交到指定线程池 四大调度器: Default:CPU密集型计算(线程数=CPU核心数) IO:阻塞IO操作(共享Default线程池但允许64线程) Main:主线程UI更新 Unconfined:无约束线程(慎用) 关键优化:Default与
2026-08-13 23:59:39
434
原创 Android随笔-kotlin suspend
Kotlin的suspend函数通过编译器进行CPS变换和状态机实现,将函数分割为可挂起片段。核心原理是:1) 编译器添加隐藏的Continuation参数实现回调;2) 用状态机管理挂起点和恢复逻辑;3) 函数挂起时返回COROUTINE_SUSPENDED并释放线程。相比阻塞操作,挂起函数更节省资源,支持高并发。典型应用包括网络请求、数据库操作和IO任务,需在协程内调用。其本质是语法糖,而非后台线程魔法。
2026-08-13 21:57:01
309
原创 Android随笔-Kotlin CoroutineScope
Kotlin协程作用域(CoroutineScope)是结构化并发的核心载体,定义了协程的生命周期边界,通过Job树结构管理协程间的父子关系。文章深入解析了CoroutineScope的核心原理、常见类型及使用场景: 核心原理:CoroutineScope本质是一个CoroutineContext容器,通过Job树实现父子协程的自动取消和异常传播机制,体现结构化并发思想。 常见作用域: GlobalScope(不推荐):生命周期不可控 自定义Scope:需手动管理生命周期 Android内置Scope:li
2026-08-13 18:16:49
320
原创 Android随笔-kotlin Flow
Kotlin Flow 是 Kotlin 协程生态中的响应式数据流实现,用于异步、顺序、可组合地发射多个值。它采用冷流模式,具有轻量级、低学习成本的特点,天然支持结构化并发和背压处理。核心优势包括丰富的操作符、线程切换(flowOn)以及简洁的异常处理机制(catch)。与 RxJava 相比,Flow 基于挂起函数,代码更直观;与 LiveData 相比,它支持多平台和复杂数据流处理。StateFlow 和 SharedFlow 分别适用于状态管理和事件分发。Flow 的背压默认通过挂起实现,也可通过 b
2026-08-13 17:37:14
338
原创 Android随笔-kotlin扩展函数
Kotlin扩展函数本质是静态工具方法的语法糖,编译后转为接收者对象作为首参数的静态方法,而非动态修改类结构。其核心特点是编译期静态分派(根据变量声明类型而非运行时类型确定调用),无法访问类的私有成员,也不支持多态重写。扩展函数常用于替代工具类、构建DSL、增强第三方类等场景,提供更自然的调用方式,但成员函数同名时优先调用成员函数。扩展属性则没有字段存储,只能定义访问器。
2026-08-13 16:56:36
503
原创 Android随笔-kotlin空安全
Kotlin 空安全机制通过类型系统重构,将可空性(String?)与非空类型(String)设计为互斥类型,在编译期强制处理null分支。核心特性包括安全调用操作符(?.)、Elvis操作符(?:)、非空断言(!!)以及智能转换,通过编译器静态检查和运行时验证将NPE风险降至最低。虽然与Java互操作时存在平台类型(T!)的潜在风险,但结合注解和显式处理,Kotlin实现了比Java更可靠的null安全,使绝大多数NPE在编译阶段即可被发现。该机制不是语法糖,而是深度集成的类型系统特性。
2026-08-13 16:15:05
378
原创 Android随笔-RecyclerView
RecyclerView 架构解析与性能优化核心 摘要:RecyclerView 通过解耦设计将布局、动画、数据绑定与回收复用分离,由四大组件协同工作: LayoutManager 负责动态布局策略(线性/网格/瀑布流等),支持任意方向滚动; 四级缓存体系(屏幕内缓存、变更缓存、离屏缓存、共享池)实现高效复用,mCachedViews 直接复用避免重绑,RecycledViewPool 兜底但需重新绑定数据; 布局流程分三阶段:测量填充→二次测量(可选)→动画处理,通过锚点机制动态回收不可见项并填充新项;
2026-08-12 21:22:57
292
原创 Android随笔-Framework
**文章摘要:Android Framework 是 Android 系统的核心架构,为应用提供 API 并连接底层系统服务。主要包含四大组件管理(Activity、Service、BroadcastReceiver、ContentProvider)、系统服务(如 AMS、WMS、PMS)、窗口与图形系统(SurfaceFlinger、View 体系)、Binder IPC 跨进程通信、资源管理、输入系统及多媒体框架。它协调硬件与软件交互,确保应用高效运行,是 Android 生态的基石。
2026-08-12 17:27:20
415
原创 Android随笔-SurfaceFlinger
摘要: SurfaceFlinger是Android图形系统的核心合成引擎,负责将各应用的图形缓冲区合成为最终帧并输出到屏幕。它采用生产者-消费者模型,通过BufferQueue解耦绘制与合成流程,支持GPU和硬件(HWC)两种合成方式以优化性能。关键机制包括三重缓冲(Triple Buffer)减少卡顿、VSync信号同步刷新周期,以及SurfaceControl实现流畅动画。SurfaceFlinger作为"后期合成师",不生成内容,而是协调Layer的收集、合成与显示,其效率直接影响系统流畅度,尤其在
2026-08-12 17:08:03
345
原创 Socket与WebSocket
Socket 与 WebSocket 的核心区别在于层次和功能。Socket 是操作系统提供的底层网络通信 API,工作在传输层,直接操作 TCP/UDP 数据流,需要自行处理粘包、协议解析等问题。WebSocket 则是基于 TCP 的应用层协议,在 HTTP 握手后升级为全双工通信,内置消息边界、心跳机制和安全特性,浏览器可直接使用。 WebSocket 通过帧结构封装数据(含文本/二进制帧类型、分片支持等),而 Socket 仅传输原始字节流。WebSocket 适合 Web 实时应用(如聊天、推送)
2026-08-12 00:24:58
316
原创 Java随笔-红黑树
红黑树是一种自平衡二叉搜索树,通过节点着色(红/黑)和旋转操作保持近似平衡,确保查找、插入、删除操作的时间复杂度均为O(log n)。其核心特性包括:根节点和叶子节点必须为黑色、红节点不能相邻、所有路径黑高相同。相比AVL树,红黑树插入/删除效率更高但查找稍慢,适用于频繁修改的场景(如Java的TreeMap、Linux进程调度)。红黑树通过"旋转+变色"机制自动调整,维持树高不超过2log(n),在工程实践中广泛应用。
2026-08-11 23:13:39
137
原创 Java随笔-JDK7 HashMap头插法为何能导致死循环?
摘要:JDK7 HashMap在并发扩容时可能因头插法导致死循环。当两个线程同时迁移同一链表时,头插法会反转链表指针(如A→B变成B→A),若执行时序交错可能形成A↔B闭环,使后续get()遍历陷入死循环。JDK8改用尾插法避免了该问题,但仍存在数据丢失等线程安全问题。解决方案包括:①单线程使用HashMap;②多线程使用Collections.synchronizedMap;③推荐使用ConcurrentHashMap(JDK8采用CAS+synchronized实现高效并发)。核心结论:HashMap非
2026-08-11 22:15:22
161
原创 那些开源协议?
本文系统梳理了常见的开源协议类型及其核心差异,主要分为四大类:1)宽松型协议(MIT/BSD/Unlicense)允许自由使用修改且无需开源衍生作品;2)商业友好型(Apache 2.0)额外提供专利授权保护;3)Copyleft协议(GPL/LGPL/MPL/AGPL)要求衍生作品不同程度开源;4)内容创作协议(CC系列)。文章通过对比表格清晰呈现各协议在商用、修改、专利、传染性等维度的区别,并给出选型建议,指出MIT适合广泛传播、Apache适合企业项目、GPL适合核心工具、AGPL针对SaaS场景等。
2026-08-11 17:09:52
605
原创 Android随笔-序列化
Android 序列化场景可分为四大类:IPC跨进程、持久化存储、网络传输和内存缓存。针对IPC跨进程,推荐使用高性能的Parcelable,避免使用反射慢的Serializable;持久化存储可根据需求选择SharedPreferences、DataStore或Room数据库;网络传输推荐JSON或Protocol Buffers,前者人类可读但体积大,后者紧凑高效但需预定义结构。不同场景需选择适合的序列化方案以优化性能和兼容性。
2026-08-11 16:39:15
243
原创 Android随笔-Serializable与Parcelable
摘要 Java 原生序列化(Serializable)与 Android 专用序列化(Parcelable)的核心区别在于实现机制和性能表现。Serializable 是 Java 标准接口,通过反射自动序列化对象,使用简单但性能较低;Parcelable 是 Android 专为 IPC 设计的高效序列化方案,需要手动实现读写逻辑,直接进行内存操作,速度更快且体积更小。关键差异体现在 Serializable 适合存储和网络传输,而 Parcelable 专为 Android 进程间通信优化,在 Inte
2026-08-11 15:58:32
499
原创 Android随笔-AIDL
摘要(150字): AIDL是Android实现跨进程通信(IPC)的核心机制,通过定义接口规范解决进程间无法直接共享内存的问题。其使用步骤包括:1)定义AIDL接口文件并声明方法;2)实现Parcelable序列化自定义数据类型;3)服务端继承Stub类实现具体逻辑;4)客户端通过asInterface转换IBinder为代理对象调用远程方法。编译后生成的代码通过Binder驱动完成数据封装与传输,底层采用代理模式(同进程直接调用,跨进程走Proxy代理)。关键点包括线程安全、异常处理及in/out/in
2026-08-11 15:24:35
184
原创 Android随笔-静态代理
静态代理在Android中的应用与特点 静态代理是一种在编译期确定代理关系的模式,通过显式编写代理类实现对目标对象的增强。其核心结构包括抽象接口、目标对象和代理对象(持有目标引用)。 典型应用场景: 功能扩展:如代理图片加载器,添加日志、缓存等逻辑(示例代码展示了对Glide的封装)。 Android系统源码:Binder机制中的AIDL生成Proxy类(如ActivityManagerProxy),将本地调用转为跨进程通信,是静态代理的精密实践。 对比动态代理: 优势:性能高(无反射)、编译期检查、类型安
2026-08-11 14:54:47
422
原创 Java随笔-动态代理
Java 动态代理是一种在运行时生成代理类的技术,分为 JDK 动态代理和 CGLIB 动态代理。JDK 代理基于接口,要求目标类必须实现接口,通过 Proxy 和 InvocationHandler 实现;CGLIB 代理基于继承,通过 ASM 字节码生成目标类的子类,无需接口。两者各有优劣:JDK 代理是 JDK 内置的,但只能代理接口方法;CGLIB 代理更灵活但无法代理 final 类和方法。动态代理广泛应用于 AOP、事务管理、日志记录等场景,能解耦业务逻辑与横切关注点,但存在性能开销和调试困难等
2026-08-11 14:35:18
165
原创 Java随笔-反射
Java反射机制允许程序在运行时动态获取类的完整结构信息(如字段、方法、构造器等)并操作对象成员。核心思想是将类成员映射为Java对象(Class、Method、Field等),实现代码自省和动态调用。 核心特点: 动态性:运行时才确定操作目标 通过Class对象访问类元数据 可突破封装访问私有成员 典型应用: 框架开发(Spring依赖注入) Android插件化/热修复 序列化/反序列化 单元测试 优缺点: ✅ 灵活解耦,支持动态编程 ❌ 性能较低(比直接调用慢10-100倍),破坏封装性,维护困难 优
2026-08-10 17:44:48
170
原创 Java随笔-锁
Java 锁机制可分为隐式锁(synchronized)和显式锁(JUC锁),其演进核心是synchronized从纯重量级锁优化为锁升级体系,以及JUC显式锁的完善。synchronized通过偏向锁、轻量级锁、重量级锁的三级升级机制提升性能,利用Mark Word存储锁状态,但升级不可逆。JUC提供的ReentrantLock等显式锁则通过AQS实现更灵活的锁控制,支持公平/非公平、可重入等特性。两种锁机制互补,共同构建了Java高效的并发体系。
2026-08-05 14:49:17
334
原创 Java随笔-synchronized
Java同步机制原理分析 摘要:本文深入分析了Java中synchronized关键字的实现原理,涵盖从字节码到JVM再到操作系统内核的全链路机制。在字节码层面,同步代码块通过monitorenter/monitorexit指令实现,而同步方法则通过ACC_SYNCHRONIZED标志实现。锁状态信息存储在对象头中,JDK 1.6引入的锁升级机制(无锁→偏向锁→轻量级锁→重量级锁)显著提升了性能。重量级锁底层通过ObjectMonitor实现线程排队和唤醒,其中包含_EntryList(阻塞队列)和_Wai
2026-08-04 17:27:02
308
原创 Android随笔-JNI
本文深入解析了JNI(Java Native Interface)的双向调用机制,从Java调用Native和Native调用Java两个方向展开。首先通过示例代码展示Java层加载so库、声明和调用native方法的流程,详细拆解底层执行步骤,包括动态库加载、符号解析和线程状态转换等关键环节。其次分析了Native层回调Java方法的实现方式,重点讲解方法签名规则和参数传递机制。最后对比了静态注册(基于命名规则)和动态注册(JNI_OnLoad)两种方式的优缺点,指出动态注册在性能和灵活性上的优势。全文通
2026-07-28 18:19:19
188
原创 Android随笔-平台架构
Android系统采用五层架构设计:最底层是Linux内核层,负责硬件资源管理;第二层为硬件抽象层(HAL),提供标准化硬件接口;第三层包含系统运行库(Native库)和Android运行时(ART);第四层是应用框架层,包含各种系统服务(如AMS、WMS);最上层为应用层。各层之间通过明确接口进行通信,下层为上层提供支持,这种分层设计实现了硬件无关性和模块化开发。
2026-07-25 17:12:44
429
原创 Android随笔-Activity启动流程深度分析
文章摘要: 本文详细分析了Android中startActivity()到onCreate()的完整调用链路,拆解为6大阶段。首先在应用进程内通过Instrumentation.execStartActivity()发起跨进程调用,将请求传递给system_server。然后ActivityTaskManagerService处理启动请求,ActivityStarter负责解析Intent、检查权限并决策启动模式。核心流程包括获取调用者信息、解析目标Activity、权限校验、计算启动标志,最终决定复用已有
2026-07-25 00:19:30
313
1
原创 Android随笔-Activity
本文系统介绍了Android开发中的Activity组件。首先指出Activity是Android四大组件中唯一负责用户交互的组件,解释了其继承体系和核心职责(UI容器、生命周期管理、任务栈管理等)。重点剖析了Activity生命周期的7个核心回调方法:onCreate()、onStart()、onResume()、onPause()、onStop()、onRestart()和onDestroy(),详细说明了每个方法的触发时机、典型操作和调用次数,并通过生命周期流程图直观展示了状态转换关系。最后定义了Ac
2026-07-24 22:52:33
814
原创 Android随笔-Handler的Message是什么结构
摘要:Message是Android Handler机制中的普通Java类,通过静态消息池(单链表实现)优化性能。其核心机制包括:1) obtain()优先从池中复用对象;2) recycle()重置字段后回收到池;3) 池最大容量50。MessageQueue同样使用Message.next构成时间排序的单链表。相比直接new,obtain()能避免频繁GC,提升高频消息场景(如UI刷新)性能。最佳实践是始终使用obtain()而非构造函数创建Message。整个Handler机制高效性的关键就在于这套消
2026-07-23 21:18:53
201
原创 Android随笔-Choreographer
Android Choreographer 核心机制解析 Android Choreographer 是连接应用层与屏幕刷新率的关键桥梁,负责协调绘制节奏与 VSync 信号。它通过接收硬件 VSync 信号(60Hz=16.67ms/帧,120Hz=8.33ms/帧),统一调度输入、动画和绘制任务,避免画面撕裂和掉帧。 核心架构流程为:VSync信号→Choreographer.doFrame()→依次执行输入处理、动画计算、视图绘制(measure/layout/draw)→提交到SurfaceFlin
2026-07-23 20:46:45
178
原创 Java随笔-Set家族
Java Set家族:HashSet,LinkedHashSet,TreeSet,CopyOnWriteArraySet,ConcurrentSkipListSet。介绍其特点和机制。
2026-07-23 14:51:57
414
原创 Android随笔-ArrayMap
ArrayMap是Android专为优化内存设计的数据结构,用于替代HashMap。它采用双数组结构(mHashes存储有序哈希值,mArray交替存储键值对),通过二分查找实现O(log n)的查询性能,牺牲部分时间效率换取更低内存开销。核心特点包括:1)自动扩容(1.5倍增长)与收缩机制;2)缓存复用减少GC;3)针对小数据量(<1000项)优化。相比HashMap,ArrayMap节省了Entry对象、链表节点和哈希表空槽的内存,特别适合移动端内存敏感场景。源码通过System.arraycopy实现
2026-07-23 00:02:37
573
Android-MVI-demo
2026-08-15
Android:Room的深度使用,包含完整的 Kotlin + Room + ViewModel + LiveData + RecyclerView 实现
2026-07-09
Android Jetpack组件深度使用
2026-07-08
Kotlin跨平台开发与Android架构,Jetpack Compose UI项目、协程与Flow实战、MVVM+Repository架构模板
2026-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅