- 博客(683)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 数组元素从左向右移动
本文探讨了数组循环右移的两种实现方法。第一种方法采用从右向左遍历,将前一个元素赋值给后一个元素,最后处理首位;第二种方法创新性地从左向右遍历,通过临时变量保存并传递元素值。两种方法都能实现数组右移效果,如将[1,2,3,4]变为[4,1,2,3]。第二种方法突破了常规思维,证明循环移动可以从任意方向实现,关键在于正确处理元素间的传递关系和边界条件。这为数组操作提供了更灵活的编程思路。
2026-04-18 19:08:48
11
原创 Android绘制流程
摘要:Android视图布局流程遵循先测量(measure)后布局(layout)的顺序,因为视图坐标(right/bottom)依赖于宽度/高度测量结果。从Activity创建到View绘制需经历完整生命周期和视图树遍历流程,在onCreate/onResume阶段直接获取视图宽高会得到0值。正确获取方式是使用View.post(),该方法会将Runnable添加到消息队列尾部,待视图完成measure/layout后执行,此时可获取准确宽高值。这种机制涉及同步屏障技术,确保在合适时机获取视图尺寸。
2026-01-29 14:06:31
277
原创 java线程的阻塞和等待的区别
本文介绍了Java线程的阻塞(BLOCKED)和等待(WAITING)状态的区别。阻塞状态发生在线程无法获取监视器锁时,而等待状态是线程等待被唤醒。文章还分析了sleep()和wait()方法的不同,前者不释放锁,后者会释放锁。通过表格总结了常见方法调用后的线程状态变化,并提供了相关官方文档参考。线程状态转换图清晰展示了阻塞和等待状态的关系。
2026-01-27 13:33:20
945
原创 Activity的启动模式:singleInstance与singleTask
singleTask启动模式的Activity,上方可能还有别的Activity,当这个Activity再次被启动时,上方别的Activity都会被清理掉,这里存在风险。相反,它要么由OutgoingCallBroadcaster启动(用于拨出电话),要么作为通知的全屏意图启动(用于来电)这使得这个Activity适合在锁屏上方显示,这样用户就只具备有限的能力,使已过期的计时器静音,而不能进行其他操作。我复现了,singleTask启动模式下,销毁上方Activity的情况。(Android 7.1源码)
2025-12-27 01:14:27
302
原创 Activity 之间跳转时,生命周期的变化
当在 Activity A 里面激活 Activity B,A 会调用 onPause()方法,然后 B 调用 onCreate(),onStart(),onResume()。A → B 的生命周期见第一条。B 点击返回,再次回到 A 时,B 调用 onPause 方法,A 被重启,调用 onRestart 方法,然后 onStart、onResume,B 被覆盖后,B 调用 onStop、onDestory。值得注意的点:C 覆盖住 A 和 B 后,先执行 A 的 onStop 方法,再执行 B 的。
2025-09-19 16:03:42
381
原创 leetcode108.把升序数组转换成二叉搜索树
解题的核心原理是:二叉搜索树的中序遍历结果是一个升序数组,所以根节点的数值,也位于数组的中部。
2024-08-19 00:12:21
638
1
原创 Typora mac版本激活
重新打开typora,右下角会显示未激活,如下图,叉掉就好。叉掉后,弹出弹窗,看到成功激活!选择mac版本下载安装。用记事本打开这个文件,按。
2024-08-08 16:25:42
3802
3
原创 Go sdk下载和配置环境变量
打开命令行,如果命令行已经打开,先关闭命令行,再重新打开。我的电脑 -> 属性 -> 高级系统设置 -> 环境变量。我是win10 64位的,我找到这个下载。下载之后解压,可以看到bin文件夹。更多版本,找到1.9.2。环境变量就配置完成了。修改path环境变量。
2024-08-06 14:18:57
1587
原创 python2.7 下载安装配置教程
安装Python的目的:* Android多渠道打包工具,需要Python启动脚本。* Android使用systrace分析app卡顿,要用python 2.7.x执行`systrace.py`文件。* 用IAR编译CC2640 OAD文件时执行合并文件的脚本,所以我们一起来看看Python2.7版本的安装方法。
2024-07-30 11:56:53
3475
原创 HashMap扩容为什么是2倍?
另外,HashMap的初始容量是2的n次幂,扩容也是2倍的形式进行扩容,是因为容量是2的n次幂,可以使得添加的元素均匀分布在HashMap中的数组上,减少hash碰撞,避免形成链表的结构,使得查询速度降低!可以看出,与运算后得出不同的值,使得添加的元素能够均匀分布在集合中不同的位置上,避免hash碰撞。的意思是将每个元素的key的hash值,与最大索引值-1进行相与操作,得出该元素在集合中的位置。综上所述,HashMap计算添加元素的位置时,使用的位运算,这是高效的运算;两个同时为1,结果才是1。
2024-07-29 17:33:59
655
原创 天翼光猫实物图片
读音类似于猫,国内经常叫“光猫”。中国电信是国企,本身不生产光猫,采购中兴通讯的。下图显示了中兴标志:ZTE。GPON天翼网关,蓝色插头就是光纤。光猫负责把光纤信号转换成数字信号。调制解调器英文单词是。
2024-07-29 13:42:52
2625
原创 Leetcode141.判断单链表中是否存在环
思路:遍历整个单链表,把所有节点放到HashSet中,如果有重复项,则说明有环。的做法,这个做法不容易想到,就不写了。
2024-07-27 15:42:42
418
原创 Leetcode700.二叉搜索树中搜索具体值
根据二叉搜索树的定义,如果目标值比节点值大,则搜索右子树,如果目标值比节点值小,则搜索左子树。二叉树不一定是平衡树。
2024-07-24 10:36:02
548
原创 从AMS与Zygote通信理解Android系统的启动过程
这个问题的答案本身没有多大意义,Socket也好,Binder也好,功能实现,没有bug就行了。Socke可以优化,Binder也可以优化,不一定哪种方式就绝对的好。不过,分析不同的说法的理论依据,倒是可以增长见识。这些说法是否靠谱,有待研究。可以看到,在Launcher启动其他APP的过程中,AMS发送创建进程的请求和Zygote进程fork新进程,都是用的Socket方式。这种说法的依据是,Binder驱动属于内核层,Android系统启动时,先加载内核,然后才创建init进程。
2024-07-21 00:21:29
607
原创 IntelliJ IDEA 直接在软件中更新为最新版
当我们的 IDEA 工具许久没有更新,已经拖了好几个版本,想跨大版本更新,比如从2020.2.1 -> 2023.x.x。,打开的更新弹窗可能不是我们想要的最新版,例如检查出的为 2020.2.2 版本,并不能直接升级为当前最新版。此时,我们菜单栏点击 Help -> Check for Updates…然后重复 Help -> Check for Updates…操作,直至扫描为最新版时,点击。此时可以点开升级页面,点击。
2024-07-20 00:30:24
10406
原创 Postman下载安装使用
Username/Password:这是针对Basic Auth类型的认证的用户名/密码,并非我们认为的系统登录的用户名密码。Basic Auth:最基本的一种认证类型,还有OAuth 1.0/2.0、Digest Auth等认证类型。”:请求的URL点击蓝色“Send”按钮,获取返回值。Authorization:用于需要认证的接口。注: GET请求的参数在url后面拼接,如:“POST:HTTP的常用请求方法。Body:设置POST请求的参数。GET:HTTP的常用请求方法。2、简单的POST请求。
2024-07-18 11:29:30
971
原创 彩电上自带的推箱子游戏是什么编程语言开发的?
1964年,两位美国数学家兼计算机科学家约翰·克米尼和Thomas E. Kurtz在。2000年左右的厦新彩电上,自带了推箱子、华容道游戏。语言的基础上创造了一种新的语言——BASIC。,含义是初学者通用符号指令代码。
2024-07-16 18:23:16
563
转载 Windows系统安装MySQL8.0.38及卸载
注意:这里端口号默认是3306 如果你的电脑3306端口被占用需要修改一下端口号。Windows + R 键然后输入regedit 打开你的注册表。删除你的安装目录 里面有的内容不允许删除进行强制删除即可。到这一步我们的MySQL 8.0.38已经安装完成了。Windows + R 键然后输入cmd。选择下图我们下载的文件右键点击选择安装。同样的步骤选择mysql工具的安装目录。到此为止你的MySQL已经完全卸载掉了。然后Ctrl+F键进行搜索。我们需要选择对应的资源。如果你要停止mysql。
2024-07-11 22:30:00
310
转载 MySQL8.0.28下载安装教程
第一个是强密码校验,mysql推荐使用最新的数据库和相关客户端,MySQL8换了加密插件,所以如果选第一种方式,很可能你的navicat等客户端连不上mysql8。7.多次点击next (直到出现以下页面),默认选第一个,点击“next”继续。2.下图是选择安装类型,选择默认安装就可以,然后点击“next”。
2024-07-11 22:20:25
1474
原创 leetcode中的数组是怎么转成二叉树的?
数字2的左子树的下标应该是5,但是很明显,给出的数组总共才4个元素。这个示例在多道题目中,重复出现。在Leetcode中,经常有数组表示的二叉树。但是leetcode中的表示方法,并不符合上面的规律。现在的关键问题是,怎么通过Integer数组。上代码,每行的注释写的很清楚了。得到上图所示的二叉树了?数字2的下标是2,按照。
2024-07-10 01:55:48
500
原创 用SurfaceView实现落花动画效果
上篇文章中可以看出子线程更新main线程创建的View,会抛出异常。SurfaceView不依赖main线程,可以直接使用自己的线程控制绘制逻辑。具体代码怎么实现了?这篇文章用SurfaceView实现落花动画效果。
2024-07-09 10:43:20
553
原创 JD-GUI下载和使用
用JD-GUI可以直接把上面看到的.class文件,转为.java文件。操作是:File —> Save All Sources —> 选择路径和设置文件名 —> 点击保存,就得到了.zip的压缩包,解压后里面都是.java文件。解压后,点击里面的.exe文件直接运行。可以看出这个工具还是非常好用的。
2024-07-08 01:54:03
4786
原创 用HttpURLConnection复现http响应码405
405原因:不知道后端接口的定义,或者没有沟通彻底,或者后端开发人员失误,本应该是GET定义成了POST。会把原有的GET方法改为POST方法,用POST方法访问GET接口,就报错405。发生场景:接口文档显示接口为GET接口,实际上后端人员写的是POST接口,文档没同步。错误场景:后端开发定义失误,本该是POST接口,写成了GET。复制的POST请求代码,手动修改为GET,没有修改彻底,导致错误。405原因: 接口只接受GET方法,请求是POST方法。发生场景:代码失误,本该写GET,写成了POST。
2024-07-07 13:29:02
994
原创 事件分发机制:demo复现自定义ViewGroup点击事件不起作用
后,布局中的RelativeLayout消费了点击事件,但是这个RelativeLayout又没有onClickListener,所以没有日志。外层的MyRelativeLayout虽然可以点击,也设置了点击事件,但是点击事件已经被RelativeLayout消费了。很容易想到,自定义一个Layout,左边一个图标,中间文字说明,右侧一个箭头,底部一条分割线。动手写的时候,就遇到bug了,点击事件不起作用。,也就是说MyRelativeLayout可以点击,可以点击,又有点击事件,为啥就不起作用了?
2024-07-05 13:16:11
538
《Software Architecture Design Patterns in Java》原版PDF 下载
2017-12-08
在公司做android源码开发,怎么解决编译一次耗时,太久的问题?
2018-11-01
Android:逐帧动画里面,能不能使图片的位置移动?
2016-08-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅