自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

知道这个有什么用?

做一名优秀的程序员

  • 博客(646)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 排序算法-堆排序

堆排序的基本思路是什么?将待排序序列构造成一个大顶堆(任意节点都大于它的所有孩子),此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。堆排序具体是怎么回事?如下图:再看下面这个动图,就明白多了。如何用数组表示一个堆?从上图可以看出,堆是一颗完全二叉树,对于任意一个父节点的序号n来说(这里n从0算),它的子节点的序号一定是2n+1,2n+2,所以对于上图

2022-03-02 01:29:55 1595 4

原创 如何查看http版本是1.1还是2.0

FireFox浏览器地址栏输入:https://www.baidu.com/按F12,选择网络,再点击重新载入如下图:单击某一条http请求,在右侧会显示Http版本,如下图:IE浏览器IE浏览器比较直接,按F12,选择“网络”,就能看到。Edge浏览器按F12,取消勾选“已阻止Cookie",然后刷新一次。右键某一个http请求,选择”标题选项“,勾选“协议”,就可以看到了。Google浏览器谷歌浏览器网上介绍很多了,参考:https://www.zhihu.

2022-01-22 16:48:52 19850

原创 简述:如何解决HashMap线程不安全的问题?

jdk1.8中HashMap为什么线程不安全?会出现数据覆盖。JDK1.7和JDK1.8中HashMap为什么是线程不安全的?怎么解决HashMap线程不安全的问题?1.使用HashTable替代HashMapHashTable的put操作,有synchronized关键字修饰。2.使用Map map = Collections.synchronizedMap(new HashMap());这个方法实际上返回了一个SynchronizedMap。SynchronizedMap 实

2021-11-14 10:01:56 6167

原创 平衡二叉搜索树查找的时间复杂度为什么是O(log n)?

二叉搜索树的搜索的时间复杂度,会因为具体结构不同而不同,只有右子树的情况下,时间复杂度是O(n)。平衡的情况下,时间复杂度是O(logn)。这个O(logn)是怎么来的?n个结点的二叉搜索树的高度是多少?只有1个根节点的二叉搜索树,高度为1。log2(1)=0,0+1=1;2,3个结点的二叉搜索树,高度为2。log2(2)=1,1+1=2;4,5,6,7个结点的二叉搜索树,高度为3。log2(7) < 3,log2(7)取整+1为3。N个结点的二叉搜索树,高度是[log2(N)]+1.

2021-11-09 23:18:11 7357 2

原创 @Documented注解的作用

许多注解头部都有@Documented注解,例如jdk中自带的@Deprecated注解,路径是:java/lang/Deprecated.java,头部就含有这个注解。@Documented@Retention(RetentionPolicy.RUNTIME)@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})public @interface Deprecated {}那么

2021-10-10 16:16:19 47089 1

原创 EditText系列:android:editable=“false“弃用怎么办?

android:editable="false"弃用,如下图:解决办法:android:cursorVisible="false" android:focusable="false"原理分析在目录:D:\androidSDK\platforms\android-31\data\res\values\attrs.xml中确实看到@deprecated注解。注释中讲用inputType替代editable。inputType中使用“none”表示不可编辑。实测发现,即使使用androi.

2021-06-08 10:34:01 2355

原创 ViewPager系列:解决ViewPager内部,Fragment设置高度不起作用(二)

先上效果自定义ViewPager,CustomViewPager代码如下。public class CustomViewPager extends ViewPager { public CustomViewPager(Context context) { super(context); } public CustomViewPager(Context context, AttributeSet attrs) { s..

2021-04-12 20:35:49 2099 6

原创 解决Android studio 模拟器闪烁黑屏问题

首先,必须感谢csdn大神给我的启示,但是原文并没有解决我的问题。我在看《第一行代码》的时候,跟着郭霖大神的思路,想利用cmd命令查看虚拟机中的.db文件中的数据表。因为真机需要root才能查看系统内部文件,这时我用cmd 连接模拟器,执行命令:adb devices ,逍遥模拟器断线了,我用的是逍遥模拟器(国内的其他模拟器都不如逍遥稳定),很着急。无奈我就使用android studio自带...

2019-02-16 18:31:31 13432 8

原创 byte的范围为何是-128~127,而不是-127~128?

一、计算机该怎么做减法? 比如2-1=1,1-1=0.由于种种原因(精力有限,暂不深究),加法电路难度和成本已经很高了,当时的条件下,再去设计一个减法电路,费力又费钱,前辈们想用加法电路来解决减法运算问题。思路如下,熟悉的可以跳过。 假设当前时针指向8点,而准确时间是5点,调整时间可有以下两种拨法: 一是倒拨3小时:8-3=5 二是顺拨9小时:8+9=...

2018-07-29 20:26:36 10477 15

原创 android:gravity=“bottom|center_horizontal“的妙用

今天,上java课时,老师讲“|”表示短路或,我联想到Android布局中常见的 android:gravity="bottom|center_horizontal",根本就不是“或”的意思,于是仔细研究了一番,果然有了很大收获。 在这个语句中|不表示或,而是多选。即gravity的属性是可以多选的。与之相似的layout_gravity也是可以多选的,但是几乎没用,因为假

2016-09-02 10:47:43 8768 1

原创 leetcode二叉树相关题目

在leetcode94题中,上图用数组表示为[1,null,2,3],这种表示是不严谨的。不必要纠结这个点,理解根据数组创建二叉树的原理,能自己创建二叉树就好。要考虑某个节点为空的情况,如下图,数组表示为[1,null,2,null,null,3,null],就要使用Object数组。下面只是一个简单的示例,没考虑某个子树为空的情况。把{1, 2, 3, 21, 22, 31, 32} 转变为一个二叉树。

2024-03-30 17:12:15 456

原创 Leetcode链表相关题目

方法一:把第一个值最小的链表,当作被插入的链表,再把另外一个链表插入到这个链表。先看下面这个过渡解法,不完美,但是好理解。利用前后指针,前后指针的间隔就是n。方法二:新建一个链表,从两个链表中取值,谁小用谁的。

2024-02-29 14:20:59 398

原创 事件分发机制:从OnTouchListener开始,按钮变色的Demo

负责点击后执行的逻辑,无法响应按下、移动、抬起手指的具体变化,要想根据按下、移动、抬起、取消等信号,做出不同的效果,就要使用。可以看到,OnTouchListener就是View类中的一个public接口,接口里面只有一个。正常开发,我们一般用selector加载设计师给的图片。这里只是个简单的demo,就直接用。这个方法有什么用了?我们写一个有按压效果的Button,体验一下。方法复现子View点击不起作用的现象。要彻底弄清楚事件分发机制,先要明白。

2024-02-02 23:16:28 320

原创 事件分发机制:demo复现子View的点击事件不起作用

可以看到,只执行了onTouch方法,没有执行button的onClick方法。自定义一个MyLayout,继承自LinearLayout,重写。测试机系统是Android 7.1.2,api 25。相关疑问,我们后续博客再讲。demo使用的sdk是32。方法,返回true。

2024-02-02 20:09:12 331

原创 解决Android Studio gradle下载超时和缓慢问题(win10)

一般配置阿里云代理就可以解决。具体配置方法,参考:https://blog.csdn.net/zhangjin1120/article/details/121739782。

2024-01-24 22:00:00 1279 1

原创 免费旋转视频

平时解bug,测试同事拍的视频,方向可能是倒着的。怎么把视频旋转到正确的方向了?分享一种免费的方法。,打开,选择左上方的"开始“,找到”向左旋转“,直接播放就好了。(windows应用商店又卡又慢还打不开)如果想保存旋转后的视频,按Ctrl+S。分享了几个免费的视频链接。

2023-10-21 13:56:26 1549

原创 Unity 3D视频教程

App上,会有3D看车功能。最近发现一个Unity 3D的视频教程,分享下!

2023-10-15 23:00:25 1740

原创 设计模式8:代理模式-动态代理

动态代理的核心优势就在于,一个代理类,可以代理多个接口。动态代理只能把代理对象,赋值给接口,如上面的例子。不能把代理对象直接赋值一个普通类。而Cglib代理可以做到。具体怎么做的,下篇文章再讲。,其实就是用java或kotlin代码申请权限,而不是在AndroidManifest.xml文件里面。,静态代理中一个代理类只能代理一个接口,其他不同的接口,就需要再手写不同的代理类,这就很。都是我们手写的代理类。动态代理可以自动生成代理类。动态代理类似于在安卓里面,我们常说的。动态代理需要jdk中提供的两个类。

2023-09-04 00:22:27 2019

原创 Git Bash 和 Git GUI中文汉化

在Git Bash命令行界面,右键,选择。

2023-08-28 22:29:14 1276

原创 设计模式8:代理模式-静态代理

我尝试在JDK、Android SDK和一些出名的库中,寻找静态代理的源码,没能找到。如果有读者发现,欢迎评论或者私信我。

2023-08-20 23:15:17 1187

原创 C++中箭头运算符->的用法

也称为类成员访问运算符,是两个不同运算符的组合,即减号运算符 (-) 和大于运算符 (>)。它用于在指针变量的帮助下访问类、结构或联合成员的公共成员。C++中有不同类型的运算符,例如赋值运算符、算术运算符、关系运算符、逻辑运算符、按位运算符和许多其他运算符。

2023-08-15 23:02:29 375

原创 ipconfig显示的内容分析(二)子网掩码

路由器使用最长掩码匹配来确定最具体的路由表条目。它会与目标IP地址进行比较,选择最长掩码的ip地址。例如,如果目标IP地址是, 路由表中有两个ip地址:和,那么路由器将选择具有最长掩码的作为匹配项。

2023-08-12 12:14:23 398

原创 Android Studio下载

因为每个项目使用的gradle插件版本,是在根目录的build.gralde文件中统一定义的,这个文件在添加第三方库(例如GreenDao,Arouter等)或者远程仓库(例如jitpack.io)时,会修改,所以必须提交同步的。Android studio的版本要和项目正在使用的gradle插件版本匹配。如果确定不了具体版本,那就用最新版本,因为最新版本支持的gradle范围最广。支持的最高版本的gradle插件是7.1。每个Android studio的版本支持的gradle插件版本都有一个范围。

2023-07-23 09:47:55 325

原创 命令行系列:windows cmd官方文档

和java开发、Android开发一样。如下图,我们可以看到经典的。

2023-07-14 16:03:16 467

原创 为什么JDK安装时还会提示安装jre?

一样的。

2023-07-12 23:04:55 787

原创 推荐一个html在线转markdown的网站

https://tooltt.com/html2markdown/

2023-07-09 19:20:20 216

原创 Mac OS装Windows系统开启虚拟化

这将你的EFI目录结构映射到G盘,g也可以改成别的未使用盘符,这个盘在文件管理器里是找不到的,但可以在命令行里进入。先进入到windows系统,下面的步骤都是在windows系统下面进行的。就可以支持虚拟化了,但是这样麻烦,要同时装两个系统,并且每次都需要先进入。需要开启虚拟化,而有些苹果笔记本虚拟化是关闭的,需要手动开启,我们知道。需要对应你的电脑,不过几乎都是这个,然后重启电脑即可。输入账户的密码即可,然后重启电脑即可打开虚拟化。要开启虚拟化,首先需要查看电脑是否支持虚拟化。

2023-07-09 19:17:37 2227

原创 String的hashCode为什么选择31作为乘子?

因为101^5 = 10,510,100,501。这个计算结果太大了。如果用 int 类型表示哈希值,结果会溢出。单字节的话,最大值是255。unicode在BMP范围内采用双字节。数值是19968 到 40891。先看下String类的源码,31出现在hashCode()方法中。中已经明确,java中的char可以表示中文。31^5 = 28629151,不大不小。有讲,下面的内容我只是转述,没有验证过。31是实验得到的一个最优解之一。那到底为什么用31了?

2023-07-08 01:20:53 134

原创 彻底hashCode与hashCode()方法

写这篇文章,主要为分析String类的hashCode()方法做铺垫。

2023-07-07 17:17:24 121

原创 彻底搞懂:java中的char能表示中文吗?

Basic Multilingual Plane 基本多语言平面。它的码点范围是即0x0000-0xFFFF,包含了世界上最常用的字符。

2023-07-07 03:21:47 915

原创 《疯狂Android讲义》第2版 第3.5.2节关于Handler的代码

【代码】《疯狂Android讲义》第2版 第3.5.2节关于Handler的代码。

2023-07-06 17:57:38 117

原创 设计模式7:装饰者模式

个人理解:原始接口功能不足,需要添加新方法,但是别的地方已经实现了原始接口,所以原始接口又不能直接添加方法。这时候可以采用持有原始类对象,并且添加新方法的方式,实现新功能。并且继承原始类或者实现原始接口,达到可替换原始类的目的。官方说法:装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。例如原始类有裤子,但是没有鞋子,这个时候用装饰器模式。原始类有鞋子,但是鞋码大了,不合适,这个时候用适配器模式。适配器模式解决的是原始类有这个功能,但是功能不匹配的问题。

2023-07-06 12:57:34 407

原创 设计模式3:单例模式:静态内部类模式是怎么保证单例且线程安全的?

测试了静态内部类单例模式,确实只生成了一个实例。

2023-07-05 22:48:40 734

原创 对于Handler造成Activity内存泄漏的理解

写的很仓促。重新梳理一下。

2023-07-05 19:40:22 454

原创 采用匿名内部类形式定义Handler有什么不妥?

写这篇博客,是为分析Handler引起内存泄漏做准备。

2023-07-05 01:26:35 169

原创 Okhttp官方文档

https://square.github.io/okhttp/

2023-07-03 14:22:42 189

原创 ThreadLocal是如何实现线程隔离的?

程序有三个线程main,tA,tB,三个线程都修改了sharedName和sharedId(后面简称name和id),但是main线程设置的name和id,tA和tB并没有读取到,ta和tB一开始读取的是null。

2023-06-30 10:52:50 223

原创 Looper对象为什么要通过ThreadLocal来保存?

Thread+ThreadLocal+ThreadLocalMap是JDK提供的一种实现线程隔离的方式(具体怎么实现的,后面的博客会讲)。开发者也可以用别的方式实现线程隔离。有些博客讲,looper对象通过ThreadLocal存储是为了线程安全,个人认为这里并没有什么安不安全的问题,每个线程都有自己的Looper,线程不会去使用和修改别的线程的Looper,没有必要也没有意义。Looper对象,通过ThreadLocal来保存,是线程隔离的实现方式,最终达到一个线程只有一个Looper的目的。

2023-06-30 09:31:20 137

原创 MessageQueue中Message入队采用的是头插法还是尾插法?

MessageQueue内部实现,其实是一个单链表。从Message.java的源码中,可以看到类中有一个的成员变量,说明Message是单链表的一个节点。既然MessageQueue是由单链表实现的,那MessageQueue中的Message入队采用的是头插法还是尾插法?先说结论:有用到头插和尾插,但不是所有Message入队都用的头插法,也不是所有的Message入队都用尾插法。是根据成员变量when的数值大小来排序,找到合适的位置插入。

2023-06-29 13:12:53 129

原创 设计模式3:单例模式:volatile关键字能不能解决多线程计数问题?

先说结论不能:执行环境:jdk1.8.0_372 CPU:intel i7-4960 2.6GHz。

2023-06-28 11:50:14 491

《Software Architecture Design Patterns in Java》原版PDF 下载

《Software Architecture Design Patterns in Java》PDF 下载,本来是想0分的,但最低只能设置2分。

2017-12-08

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

TA关注的人

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