龙战于野渭南
码龄3年
关注
提问 私信
  • 博客:58,908
    问答:163
    59,071
    总访问量
  • 57
    原创
  • 41,576
    排名
  • 88
    粉丝
  • 学习成就

个人简介:天道酬勤

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2021-08-21
博客简介:

m0_61130325的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    4
    当前总分
    807
    当月
    2
个人成就
  • 获得166次点赞
  • 内容获得17次评论
  • 获得191次收藏
  • 代码片获得568次分享
创作历程
  • 5篇
    2024年
  • 32篇
    2023年
  • 19篇
    2022年
  • 1篇
    2021年
成就勋章
TA的专栏
  • android
    31篇
  • 操作系统
    2篇
  • 有意思的
    1篇
  • 计算机网络
    2篇
  • JVM
    3篇
  • 动态规划
    1篇
  • 网络编程
    1篇
兴趣领域 设置
  • 数据结构与算法
    动态规划leetcode
  • 移动开发
    android
  • 网络与通信
    网络安全tcp/ip5G
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

180人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Dalvik虚拟机

2:如果我们不使用这个Mark Stack显式堆栈的话,那么我们进行标记的时候,用递归的方式标记,如果链路太长(因为我们每次方法的调用都是一次栈帧的入栈),那么这个虚拟机栈就会装入太多栈帧,它的长度受到了操作系统的限制,如果太多,可能就会导致一个栈的溢出。在标记的时候,Mark Stack会将在可达性链路上的对象标记为1,表示不应该被回收,将不在可达性链路上的对象标记为0,表示应该被回收的对象,然后Mark Stack存储的是在可达性链路上的对象。并发 GC 允许应用程序继续运行,同时在后台执行垃圾回收。
原创
发布博客 2024.10.13 ·
758 阅读 ·
26 点赞 ·
0 评论 ·
6 收藏

汇编一:汇编语言前的基础知识

首先我们要分清楚,地址总线和数据总线的功能是不一样的,数据总线是传递数据用的,地址总线是找存储单元用的,我的一根地址总线可以代表0或者1两种状态,那么也就说明我的1根地址总线可以找到2个存储单元。首先是如果存在读操作,那么首先我们要找到要从哪一个存储器进行读,于是我们用到了地址总线,通过地址总线找到对应的存储器,然后为什么能判断它是读呢,这是因为控制总线发送了一个读的信号,之后通过数据总线将存储器中得到数据传递给cpu。计算机的工作原理就是取址执行,在哪儿执行呢,在cpu里面执行,从哪里面去取址呢?
原创
发布博客 2024.05.27 ·
324 阅读 ·
4 点赞 ·
0 评论 ·
3 收藏

x86的开机过程(上)

之前学习的时候,就仅仅针对于应用层面,但是在实习的时候,却发现,操作系统在工作中用到的也是挺多的,为此,最近就跟着bilibili上李治军老师的操作系统的课重新学一遍操作系统。
原创
发布博客 2024.05.04 ·
629 阅读 ·
15 点赞 ·
1 评论 ·
9 收藏

重看LeakCanary

LeakCanary是我很久之前看的东西了,我当时侯对它的印象就是它可以用来检测内存泄漏,具体原理就是将弱引用对象延迟个5s然后看是否被回收,如果没有被回收,那么就说明发生了内存泄漏,其他的也没有仔细地看。
原创
发布博客 2024.02.24 ·
1033 阅读 ·
14 点赞 ·
0 评论 ·
27 收藏

浅谈instant run

Instant Run 是 Android Studio 提供的一项功能,它允许开发者在修改应用代码后,无需完整重建和重新安装应用就能将改动推送到已运行在设备上的应用程序中。这意味着对于某些类型的代码更改,开发人员可以在不进行全量编译和安装的情况下,直接看到手机上运行的APP反映出代码变更的结果。然而,并非所有类型的修改都能通过Instant Run立即生效,有些复杂的改变仍需要进行完整的构建与部署流程。
原创
发布博客 2024.02.09 ·
998 阅读 ·
23 点赞 ·
0 评论 ·
20 收藏

从SystemServer处理过程到Launcher启动过程

我们回顾一下SystemServer的过程,首先我们是通过Zygote,当它调用方法的时候会遍历找到pid==0的函数然后执行。在里面主要进行了两个操作1.ZygoteInit.nativeZygoteInit()这个函数成功实现了调用native层的代码启动Binder线程池与其他进程进行通信,实现了SystemServer与其他进程通过Binder连接池进行进程间的通信2.RuntimeInit.applicationInit()通过这个函数,我们在它的内部通过反射找到那个名为main。
原创
发布博客 2023.07.13 ·
327 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

小米note3刷机-从miui12刷回miui9

3月份原本想买一部小米6回来刷机,结果发现小米6的二手价格有一点点high。然后就选了一个但是直到昨天才正式开启我的刷机之旅因为我的包是从这个网站上直接找的所以刷机步骤我分为2点,第一点是解除BL锁,第二点是导包进去。
原创
发布博客 2023.06.23 ·
2107 阅读 ·
2 点赞 ·
0 评论 ·
3 收藏

Android中线程池

阻塞队列常用于生产者消费者场景,生产端负责生产,生产的东西发往消费者端。其中生产者端就是往这个阻塞队列添加元素的线程,消费者端就是从队列中拿出元素的线程。
原创
发布博客 2023.06.22 ·
1944 阅读 ·
1 点赞 ·
0 评论 ·
6 收藏

Android常见设计模式

首先一个重点就是**类的初始化得在一开始就弄,并且是由static修饰**使用**static关键字创建类的静态变量时,这个变量会在类加载时被初始化**。**在java中,类加载只会发生1次**。因此,如果使用static关键字创建单例对象,那么在类加载时就会创建单例对象。但是饿汉模式是有一个缺点,就是这个变量会在类加载时被初始化,如果没用过这个实例的话,就容易造成内存的浪费。这就不符合**懒加载**的效果
原创
发布博客 2023.06.21 ·
4006 阅读 ·
5 点赞 ·
1 评论 ·
12 收藏

TCP的三次握手与四次挥手

原因主要有两个:1、主要原因是为了防止历史连接三次握手时,在网络拥堵等情况下,第一次握手的SYN包迟迟没能发送到服务端,那么客户端会连续发送多次 SYN 建立连接的报文,那么就可能出现一个「后发送SYN 报文」比「早发送的 SYN 报文」 早到达了服务端;那么此时服务端就会回一个 SYN + ACK 报文给客户端;如果是两次握手连接,就不能判断当前连接是否是历史连接,导致错误。
原创
发布博客 2023.06.21 ·
2607 阅读 ·
2 点赞 ·
1 评论 ·
6 收藏

EventBus

1、三个角色Event:事件,它可以是任意类型,EventBus会根据事件类型进行全局的通知。Subscriber:事件订阅者,在EventBus3.0之前我们必须定义以onEvent开头的那几个方法,分别是onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,而在3.0之后事件处理的方法名可以随意取,不过需要加上注解@subscribe,并且指定线程模型,默认是POSTING。
原创
发布博客 2023.06.21 ·
727 阅读 ·
1 点赞 ·
1 评论 ·
0 收藏

init与zygote的启动流程

init进程主要就是干了以下三点创建和挂载启动所需要的文件目录初始化和启动属性解析init.rc配置文件并启动zygote进程我们以它处于Native还是Java框架层为分界点,分为两个时期第一段是仍然处于Native层,我们先判断service的main函数在不在Zygote进程,如果在的话,给它相关的标志设置为true。如果不在,但是它在这个进程中,那么我们把这个的相关标志设置为true。在Zygote的相关标志为true的情况下,我们启动Zygote进程start的内部我们会。
原创
发布博客 2023.06.16 ·
829 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

HotSpot虚拟机对象探索与OutOfMemoryError异常

对象的创建主要是对象内存的分配与对象的引用对象内存的分配主要是两个方面,一个是虚拟机上我们给它分配内存,从堆内存分点空间给它分点空间,然后第二个是在java的无参构造或者有参构造把一些属性给它对象的引用也是两个方法,第一个是句柄访问对象,这个方法是堆内存给它分一部分空间成为句柄空间,然后一个指向类型数据的指针指向方法区的类型数据,一个指向实例数据的指针指向堆内存的实例池的实例数据第二个是直接访问对象,这个方法是类型数据指针就在实例数据里面,然后类型数据指针指向方法区的类型数据。
原创
发布博客 2023.06.16 ·
540 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Android协程

在Looper的死循环中,它会不断地从消息队列中取出消息,并将消息分发给对应的Handler处理。当消息队列为空时,Looper会一直循环等待新的消息到达。在等待消息期间,Looper的死循环会阻塞主线程,因为它会一直占用主线程的执行时间片。这意味着主线程无法继续执行其他任务或响应用户的输入事件或系统事件。只有当主线程长时间占用了 CPU 或其他系统资源,并且长时间无法响应用户输入事件或完成关键操作时,才会触发 ANR 错误。耗时操作本身并不会导致主线程卡死,导致主线程卡死的真正原因是。
原创
发布博客 2023.06.13 ·
3404 阅读 ·
1 点赞 ·
0 评论 ·
5 收藏

以下情况会出现ANR嘛

发布问题 2023.06.13 ·
4 回答

Looper长时间收不到消息会导致ANR出现吗

发布问题 2023.06.12 ·
3 回答

java中对象的创建数量的问题

发布问题 2023.06.12 ·
2 回答

Java内存区域

这篇博客我们主要讲述的是运行时数据区的这5个,其中画了斜杠的代表所有线程共享的,没有画斜杠的代表线程隔离得到数据区。
原创
发布博客 2023.06.08 ·
502 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java内存模型

我们说volatile可以保证操作的可见性,它可以少掉将变量放入工作内存再放到主内存而是直接放到主内存但是为什么无法保证原子性呢?我们还是举刚才的例子假设现在的i的值为0第一个线程执行i++,它先读取i的原始值,然后第一个线程被阻塞了。然后执行第二个线程,这时候第二个线程将所有操作执行完,i的值已经变成了1。第一个线程再去执行后面的操作的时候因为之前已经读取过i的值了,就不会继续去读取,进行**+1操作**,结果第1个线程最后执行完后的结果还是1。
原创
发布博客 2023.06.06 ·
464 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

详解Handler

post()传递的是一个runnable,然后进入方法,它会让你把runnable进行message化与一起传进去然后进入了方法,它会让你把message与一笔给传进去,后面的这个是什么呢?然后传递,把msg与三个参数一起传进去,进行的插入我们再进来看看enqueueMessage()是怎么把msg插入到MessageQueue里面的。
原创
发布博客 2023.06.02 ·
595 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏
加载更多