自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AI编程新纪元:最新国内免费 使用 Claude Code , Codex 终极指南

国内免费AI编程助手推荐:Code88 AI(多语言代码生成)、OhMyGPT(智能补全)、DogeNet AI(代码调试)、GemAI(API调用)。注册即享免费额度,无需付费即可满足开发者日常需求。各平台特色鲜明,涵盖代码生成、优化、调试等核心功能,助力高效编程。

2025-12-23 16:53:37 513

原创 Android 组件化开源架构

Android 结合 mvi、mvvm 开源组件化项目框架搭建示例

2024-08-31 18:07:51 1935

原创 Okhttp delete 不可使用@body 解决方式

Okhttp delete 不可使用@body 解决方式 注解中增加 hasBody = true 开启body 支持 @HTTP(method = "DELETE", path = "devices/principal", hasBody = true) @Headers("service_name: accountservice") fun deletePrincipal(@Body maps: MutableMap<String, Any>): Call<Any> ...

2021-08-26 11:31:13 606

转载 Android 类加载原理

Android类加载器原理(一) 什么是类加载器 类加载器是一个用来加载类文件的类。Java源代码通过javac编译器编译成类文件。然后JVM来执行类文件中的字节码来执行程序。类加载器负责加载文件系统、网络或其他来源的类文件 image.png 类加载的过程可以分为以上的5步: 加载:加载指的是把class字节码文件从各个来源通过类加载器装载入内存中 验证:主要是为了保证加载进来的字节流符合虚拟机规范,不会造成安全错误。包括对于文件格式的验证,比如常量中是否有不被支持的常量?文件中是否有不规范的或者附加的其

2021-04-11 09:55:41 381

原创 JDK 国内下载链接

JDK华为国内镜像

2021-02-06 08:33:38 444

转载 android 基础环境问题 各版本SDK的安装

原文连接 :https://www.cnblogs.com/senior-engineer/p/11130757.html

2021-01-20 23:48:05 196

原创 jetpack room 数据库文件无法打开问题

1.创建的文的数据库文件必须以.db结尾 2.需要将生成的三个文件全部保存到桌面 3.将db文件放入Navicat 数据库工具即可正常预览修改

2021-01-12 20:14:01 587

转载 Android中service服务生命周期以及启动方式的区别

一、生命周期: startService启动方式:onCreate()—>onStartCommand() —>onDestroy(); bindService启动方式:onCreate()—>onBind() —>onUnbind()—>onDestroy(); 我们通过官方给出的一张图片来体会一下: 二、启动方式(基本使用方法): startService: Intent mIntent=new Intent(MainActivity.this,startServiceDe

2020-08-12 17:58:26 632

原创 android消息机制,源码解析说明

消息机制 Mseeage:消息 线程间通信的数据单元,通过message携带需要的数据 创建对象:Message.obtain(what) Message 源码解析

2020-08-12 02:25:29 220

原创 android事件分发源码总结

事件分发 用户通过屏幕与手机交互的时候,每一次点击、长按、移动等都是一个事件 事件分发机制:某一个事件从屏幕传递各个View,由View来使用这一个事件(消费事件)或者忽略这一事件(不消费事件),这整个过程的控制 事件传递层级 Activity->Window->DecorView->ViewGroup->View 首先再Activity上,传递给Activity持有的window,接着传递给window持有的DecorView,DecorView继承自ViewGroup然后

2020-08-02 00:05:28 297

原创 Fragment的生命周期与activity绑定关系

Fragment的生命周期与activity绑定关系 onAttach():Fragment和Activity相关联时调用 onCreate():系统创建Fragment时调用 onCreateView():创建Fragment的布局 onActivityCreated():当Activity中的onCreate()方法执行完后调用 onStart(): onResume(): onPause(): onStop(): onDestroyView():当Fragment的UI从视图结构中移除时调用 o.

2020-07-31 11:55:44 1236

原创 Activity生命周期的四种状态和七个钩子函数

四种状态 运行状态:可见可操作 暂停状态:可见但不可操作 停止状态:不可见,但对象存在 死亡状态:对象不存在 七个生命周期方法 onCreate():创建状态 onStart():启动: onResume():运行到停止经过–onRestart(暂停)——>onStop(停止) onPause():暂停:到运行经过–onResume(运行) onRestart():重启: onStop():停止:到运行经过–onRestart(重启)——>onStrat(启动)——>onRe.

2020-07-31 11:01:33 1836

原创 SpringBoot 自动配置源码解析

自动配置原理 源码千千万,总结一句话 启动的时候会获取标注了@EnableAotoConfigration注解的类,然后加载spring.factories的资源类,这些类是加了@Configuration的配置类代表他是个配置类,下面有个@EnableConfigurationProperties注解,加载___Properties.class类获取默认配置,如果要修改按照规则在配置文件中配置。 随便点一个进去即可 ...

2020-07-29 13:15:35 250

原创 读写锁案例说明

ReentrantReadWriteLock() 写锁是线程独享,同一时间只能有一个线程操作 读锁是线程共享:同一时间可以有多个线程操作 /** * Created by Last on 2020/7/28. * 读写锁 */ public class D { public static void main(String[] args) { MyCacheLock myCacheLock = new MyCacheLock(); for (int i = 1.

2020-07-28 11:59:16 172

原创 Callable和Runnable的区别使用

Callable 有返回值 Runnable 没有返回值 Callable使用 public class C { public static void main(String[] args) throws ExecutionException, InterruptedException { MyCallable myCallable = new MyCallable(); // 示例1 FutureTask future1 = new FutureTa.

2020-07-28 09:30:02 271

原创 生产者消费者步骤示例

生产者消费者代码示例synchronized /** * 线程之间通信 * 生产者消费者问题 * 四个步骤:判断,等待,业务,通知 */ public class A { public static void main(String[] args) { Data data = new Data(); new Thread(()->{ for (int i = 0; i < 10; i++) { .

2020-07-28 08:20:48 243

原创 数据库sql的基本优化守则,注意事项

三大范式 字段都是不可拆分的原子值(要求数据库获取的数据是可以直接使用的数据) 必须完全依赖主键(不允许联合主键) 除主键列的其他列之间不能有传递依赖 事务的四大特征 原子性:事务是最小的执行单位,不可在分割 一致性:sql 语境必须保证同时成功或失败 隔离性:事务1和事务2之间是具有隔离的 持久性:事务结束,就不可回退 隔离性即产生的问题 读未提交(read uncommitted):一个事务还没有提交时,它做的变更就能被别的事务看到。 产生问题:如个事务1执行失败,那么事务2可能.

2020-07-24 20:40:31 207

原创 线程池自定义的七大参数和四大策略

/** * 自定义线程池,七大参数和三大策略 */ public class ExecutorDome { public static void main(String[] args) { ExecutorService executors = new ThreadPoolExecutor( 2, 5,//线程池最大线程数量 /** * 多余的空闲线

2020-07-24 17:16:56 773

原创 java享原模式代码示例

//享元模式 public class Flyweight { public static void main(String[] args) { //创建享元工厂Crater flyweight factory WebSiteFactory factory = new WebSiteFactory(); WebSite webSite = factory.getWebSiteCategory("博客"); webSite.use(ne.

2020-07-24 01:35:06 129

原创 java动态代理演示代码

/** * JDK动态代理 */ public class Proxy1{ public static void main(String[] args) { Rent host = new Host(); WatchHostProxy watchHost = new WatchHostProxy(host); ContractProxy contract = new ContractProxy(watchHost); JDKProx

2020-07-24 01:23:45 218

原创 Java 静态代理演示代码

/** * 静态代理 */ public class Proxy { public static void main(String[] args) { Rent host = new Host(); WatchHostProxy watchHost = new WatchHostProxy(host); ContractProxy contractProxy = new ContractProxy(watchHost); con.

2020-07-24 01:22:40 191

原创 Redis缓存穿透、击穿、雪崩的解决方式

缓存穿透(同样的数据缓存中找不到,不断的访问底层数据) 用户想要查询一个数据,发现reids内存中没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都请求持久层数据库。给持久层数据库造成了压力,就是缓存穿透。 解决方案 缓存空对象:在缓存层方一个空对象返回给客户 布隆过滤器:是一种数据结构,对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃,避免对底层存储系统的查询增加压力 缓存击穿(一个Key访问量过大,当k

2020-07-24 01:14:04 141

原创 JVM运行时数据区

2020-07-24 00:53:28 93

空空如也

空空如也

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

TA关注的人

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