草庐IT

手写笔

全部标签

手写 instanceof

配图源自Freepik开始之前,先了解一些基本背景...一、前言我们知道,在ECMAScript标准中,当前数据类型分为两类(共8种):原始类型(Primitives):包含Undefined、Null、Boolean、String、Number、Symbol、BigInt共7种基本数据类型。引用类型(Objects):除原始类型之外,其余均属于引用类型,归为一大类,比如Object、Array、Map等内置方法及其实例对象。其中,原始值都是不可改变的,且不含任何属性或方法。平时看到类似的'string'.length写法,本质上是发生了隐式类型转换,先将'string'转换为Object('

手写Android-Handler

Handler机制,是Android系统的消息队列,一般用于处理主线程的页面绘制等消息处理。前言Handler除了Java层外,还有Native的部分,但我能力有限,只能仿写一个Java层的Handler,并且支持延时消息。项目地址:MiniHandler注:由于消息机制需要使用一个while死循环来让线程不能结束,所以直接将MiniHandler在Android主线程中使用会卡住主线程,所以需要用一个子线程来运行MiniHandler,一般使用HandlerThread,对应到MiniHandler的MiniHandlerThread简单介绍延时消息功能:使用DelayQueue实现,它需要

手写Android-Handler

Handler机制,是Android系统的消息队列,一般用于处理主线程的页面绘制等消息处理。前言Handler除了Java层外,还有Native的部分,但我能力有限,只能仿写一个Java层的Handler,并且支持延时消息。项目地址:MiniHandler注:由于消息机制需要使用一个while死循环来让线程不能结束,所以直接将MiniHandler在Android主线程中使用会卡住主线程,所以需要用一个子线程来运行MiniHandler,一般使用HandlerThread,对应到MiniHandler的MiniHandlerThread简单介绍延时消息功能:使用DelayQueue实现,它需要

什么?还在傻傻地手写Parcelable实现?

缘起序列化已经是Android司空见惯的东西了,场景太多了。就拿Intent来说吧,extra能放的数据,除了基本类型外,就是序列化的数据了,有两种:Serializable:Java世界自带的序列化工具,大道至简,是一个无方法接口Parcelable:Android的官配序列化工具这二者在性能、用法乃至适用场景上均有不同,网上的讨论已经很多了,这里不再赘述。下面来看看官配正品怎么用的。Android的Parcelable首先看看官方示例:publicclassMyParcelableimplementsParcelable{privateintmData;publicintdescribeC

什么?还在傻傻地手写Parcelable实现?

缘起序列化已经是Android司空见惯的东西了,场景太多了。就拿Intent来说吧,extra能放的数据,除了基本类型外,就是序列化的数据了,有两种:Serializable:Java世界自带的序列化工具,大道至简,是一个无方法接口Parcelable:Android的官配序列化工具这二者在性能、用法乃至适用场景上均有不同,网上的讨论已经很多了,这里不再赘述。下面来看看官配正品怎么用的。Android的Parcelable首先看看官方示例:publicclassMyParcelableimplementsParcelable{privateintmData;publicintdescribeC

手写插件化

插件化技术也就是说用户只需安装宿主apk,其它业务模块打包成独立的插件apk动态下发,然后通过宿主app加载运行。其天然的就解决了部分包体积大小的问题,毕竟只需将核心业务模块打包到宿主app,随之附带的还有插件apk的热更新能力,通过网络可以随时下载更新插件apk,避免宿主APP的频繁发版。市面上的框架原理都差不多,构建插件apk路径的DexClassLoader,后续通过DexClassLoader加载插件类即可。普通类相对来说容易解决,加载即用。像四大组件比如Acitvity这种具有生命周期的组件则需要通过站桩方案转发生命周期,当然还有插件apk资源加载的问题。插件化是一个听起来很厉害、很

手写插件化

插件化技术也就是说用户只需安装宿主apk,其它业务模块打包成独立的插件apk动态下发,然后通过宿主app加载运行。其天然的就解决了部分包体积大小的问题,毕竟只需将核心业务模块打包到宿主app,随之附带的还有插件apk的热更新能力,通过网络可以随时下载更新插件apk,避免宿主APP的频繁发版。市面上的框架原理都差不多,构建插件apk路径的DexClassLoader,后续通过DexClassLoader加载插件类即可。普通类相对来说容易解决,加载即用。像四大组件比如Acitvity这种具有生命周期的组件则需要通过站桩方案转发生命周期,当然还有插件apk资源加载的问题。插件化是一个听起来很厉害、很

手把手教你手写一个 Vite Server(一)

之前写过几篇Vite的文章,对Vite的概念也有一定的理解了,但理解归理解,仍然觉得很虚,也不知怎么的,这几个概念突然就变成一个这么强大的工具。。。于是,我决定自己手写一遍Vite,这样才有实在感,而且为了往往要考虑兼容各种情况,源码往往会非常复杂,不利于理解。那么这时候,手写一遍,去掉这些兼容逻辑、边界判断等,只关注核心逻辑,就能进一步地加深理解。本文是这个系列的第一篇文章,在本篇文章中,我们先不关注Vite的架构,因为我们得先有个东西出来,对于很多人来说,空谈架构是不行的。因此,我们首先把Vite开发环境的部分功能模仿出来:实现ViteDevServer,并能够对请求的ts文件做编译。下篇

手把手教你手写一个 Vite Server(一)

之前写过几篇Vite的文章,对Vite的概念也有一定的理解了,但理解归理解,仍然觉得很虚,也不知怎么的,这几个概念突然就变成一个这么强大的工具。。。于是,我决定自己手写一遍Vite,这样才有实在感,而且为了往往要考虑兼容各种情况,源码往往会非常复杂,不利于理解。那么这时候,手写一遍,去掉这些兼容逻辑、边界判断等,只关注核心逻辑,就能进一步地加深理解。本文是这个系列的第一篇文章,在本篇文章中,我们先不关注Vite的架构,因为我们得先有个东西出来,对于很多人来说,空谈架构是不行的。因此,我们首先把Vite开发环境的部分功能模仿出来:实现ViteDevServer,并能够对请求的ts文件做编译。下篇

手写Dubbo SPI机制和源码解析

版本2.7.8SPI机制官方文档介绍如下SPI全称为ServiceProviderInterface,是一种服务发现机制。SPI的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过SPI机制为我们的程序提供拓展功能。说白了,SPI是一种第三方框架常用的扩展手段:第三方框架定义接口,使用者来写实现类,通过SPI机制框架运行时可以获取到这个实现类,通过反射创建对象,并使用这个对象来继续完成业务SPI机制所以通过SPI机制,第三方框架可以将某一段业务逻辑交由使用者自定义实现比如Dubbo的负载均衡