自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

全栈工程师

【移动端】Android丨Kotlin丨Flutter丨Cordova 【前端】Vue丨Js丨Css丨Html 【后端】Java丨Kotlin丨Node 【各厂小程序】微信丨百度丨other

  • 博客(107)
  • 资源 (1)
  • 收藏
  • 关注

原创 深深的码丨Java HashMap 源码透析

HashMap 相关概念HashTab、HashMap、TreeMap 均以键值对像是存储或操作数据元素。HashTab继承自Dictionary,HashMap、TreeMap继承自AbstractMap,三者均实现Map接口**HashTab:**同步哈希表,不支持null键或值,因为同步导致性能影响,很少被使用**HashMap:**应用较多的非同步哈希表,支持null键或值,是键值对...

2019-11-07 17:37:15 19714 26

原创 一句话讲清楚 Java【封装丨继承丨多态】三大特性很难吗!?

这句话就是...

2020-07-17 14:33:53 1332 2

原创 深深的码丨Java ArrayList 源码透析

本文将基于 JDK8 对 ArrayList 源码中的构造ArrayList()、存储add()、删除remove()、扩容grow()、序列化(writeObject()、readObject()) 等过程中所涉及 JDK 源码做行级解释

2020-07-13 09:08:03 3190 4

原创 还有脸睡?微信小程序与智能硬件终端蓝牙BLE通讯,实现WIFI配网这么简单都不会,周公都得踹醒你!

当下各种支持WIFI模块的硬件终端越来越普遍,但要想与之进行数据交互需要先给终端连接上周边WIFI,这样才可正常通过互联网接收与发送数据,这种终端一般分为 3 类,即:可视化操作配网(窗口) 、WIFI连接配网(Socket) 和 蓝牙通讯配网(BLE)可视化配网非常简单,终端提供触摸屏与系统手动即可完成配网(一般是基于Android系统的二次开发)。还有一种无触摸屏需要通过蓝牙与终端连接,发送约定格式的十六进制数据,内含配网需要的相关数据,如:WIFI名称、密码、服务器地址、端口,等等信息,终端解析数据

2020-07-06 13:39:13 1427 3

原创 微信小程序 live-player 竟然不支持全屏播放?造个轮子,拿走不谢!

截止发文为止,微信官网尚未支持 live-player 全屏播放,鉴于项目中较多场景需要实现全屏播放,封装了一下这个小组件,需要就拿走,下载链接在文末

2020-06-07 00:50:29 4157 3

原创 不吹不擂,APP/WEB/WAP/小程序均可根据外壳颜色调整应用内主题色!产品白挨揍了!

去年那出产品经理提出"根据手机壳适配应用主题色",攻城狮怒不可遏奋起暴打的闹剧还记得吧!?同为攻城狮的我本应同仇敌忾一起口诛笔伐,但嬉笑过后转念一想,不对呀,这产品经理看似无理的要求,经过我缜密的计算后发现完全可以实现,且有希望推动产品和设计行业来一次小小进步要练此功,必先**… 别多想,是必先完整的看完此文!我将整个过程分为三个阶段,主要是鉴于时间成本的考量及满足灰度测试的需求:初期、中期、...

2020-05-01 22:41:28 708 7

原创 ES6 var / let / const 的区别:作用域、变量提升

变量提升:JS执行前先要进行编译,编译时就将变量收集并提前声明var 声明变量,作用域全局。 会发生变量提升,值为undefinedlet 声明变量,作用域块内。不会提升,声明后可用,否则抛ReferenceErrorconst 声明只读常量,作用域块内。声明后不赋值或改值均会报错,SyntaxError/TypeError。不会提升,声明后可用...

2020-04-23 22:25:57 431

原创 Vue Cli 环境搭建及 Vue Element 环境搭建

Vue Cli 环境搭建Node 安装https://nodejs.org/en/cmd node -v 查看安装结果及版本号NPM 依赖NPM,Node Package Manage,cmd npm -v 查看安装结果及版本号https://www.npmjs.com/ 查看更多插件Vue Cli 安装https://cli.vuejs.org/zh/guide/install...

2020-04-02 19:26:05 624

原创 Vue Error / warning

若您有遇到其它相关问题,非常欢迎在评论中留言,我和其他读者小伙伴们将帮助解决并持续更新至此文,达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧!

2020-04-02 19:25:21 862

原创 除 Java 外,还有哪些编程语言蹭了 JVM 的车票?

实际软件项目的需求日益增多,而不同语言拥有不同的特性和擅长解决的问题,那么针对不同的需求场景,选用符合需求的编程语言来解决实际问题急不可待。当然了,这就要求在同一平台上支持至少两种或 N 种编程语言的运行,且不同语言之间需要支持高度互操作以下几种语言都具备这两种特性,即:擅长的方向和与Java高度互操作,混合编程的模式可使这些问题迎刃而解。除了即将介绍的这几种语言,还存在更多若您有遇到其它相关...

2020-02-01 17:41:52 3768 5

原创 五分钟认清三款主流 Java Virtual Machine丨HotSpot、JRockit、J9

可运行由 Java 语言编写出的程序的虚拟机可不仅仅只有 HotSpot 一款!包括本文内所介绍的 HotSpot、JRockit、J9 三款虚拟机也非全部!只不过文内的三款是我们一直在使用或者之后极有可能会接触到的其它厂商提供的特定虚拟机有兴趣可以再去找找更多介绍资料,可以讲各领风骚,但本篇暂不扩展更多,比如:Dalvik VM(Google)、Microsoft VM(微软)、Harmony...

2020-01-31 17:32:09 7301 2

原创 两分钟搞懂 JDK 与 JRE 的关系

一张图即可诠释!

2020-01-15 00:53:14 1449

原创 不会找对象?教你两招再试试【适用于Java攻城狮】

速看慢!删

2020-01-10 15:25:24 4388

原创 Flutter跨平台移动端开发丨持续更新的常用效果集锦

获取 TextField 输入值 // 设置 Controller TextEditingController textEditingController_Name = new TextEditingController(); TextField( controller: textEditingController_Name, // 绑定 Controller ...

2019-12-09 20:08:26 1116

原创 Android TextView maxWidth、maxLines、maxLength、maxEms

maxWidth限制当前view的宽度,若此时高度设置为wrap_content,文字长度超过view的宽度时会自动换行 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#3E8...

2019-12-05 12:22:20 2357 1

原创 深深的码丨Java NIO 透析

Java 中传统的 IO 包基于流模型实现,交互方式为同步、阻塞,当发生读取或写入操作时,线程会阻塞在此,直到操作完成。编码时采用这种方式虽然源码较直观易维护,但容易产生应用性能下降问题,且 IO 效率及其拓展性存在较大局限Java 1.4 开始引入 NIO 框架,提供了 Channel(通道)、Selector(IO复用器/选择器)、Buffer(缓冲区),可构建多路复用、同步非阻塞的 IO...

2019-12-03 18:02:10 2117 2

原创 Flutter跨平台移动端开发丨Android Studio 四步即可打包出 apk

生成 .jks 文件Studio Terminal 内输入 keytool 命令keytool -genkey -v -keystore E:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key填写密码及其它详细信息,确认时输入字母 y输入密钥库口令:(设置密码)再次输入新口令:(重复密码)您的名字与姓氏是什么?...

2019-12-02 18:11:48 1371 3

原创 Kotlin 变量、常量、构造方法、函数、协程、非阻塞式挂起、单例、顶层声明

声明变量Kotlin 空安全机制会限制你在定义变量时不及时赋值,但若此时你还无法及时赋值,可使用 lateinit 关键字修饰,编译器将暂时放弃校验它,但之后的空判断都需要自己检测了lateinit var someStr : String当然了,你同样可以通过先赋初始值,之后更新的方式var someIndex : Int = 0若有些变量不可避免的会出现赋值为 null 的情况是...

2019-11-20 13:08:33 1029 1

原创 Flutter跨平台移动端开发丨Container + FlatButton 实现背景色渐变的圆角Button

Container 是各种我们已知的 widget 的组合,使用它可以实现装饰、变换、限制等各种效果 Container({ Key key, this.alignment, this.padding, Color color, Decoration decoration, this.foregroundDecoration, dou...

2019-11-16 17:11:28 1470 1

原创 Flutter跨平台移动端开发丨TextField 添加背景色

TextField - decoration打开 TextField 部件源码可见支持修改属性 decoration ,说明其支持样式会很丰富。本例演示怎样添加背景色const TextField({ // ··· 省略 // 此对象可实现修改样式 this.decoration = const InputDecoration(), /...

2019-11-16 17:11:12 2007 1

原创 Android 四大组件丨Activity

Activity 生命周期onCreate():表示Activity正在被创建,常用来初始化工作,比如调用setContentView加载界面布局资源,初始化Activity所需数据等;onRestart():表示Activity正在重新启动,一般情况下,当前Acitivty从不可见重新变为可见时,OnRestart就会被调用;onStart():表示Activity正在被启动,此时Acti...

2019-11-08 18:11:58 905

原创 Android 四大组件丨Service

Service 生命周期onCreateonStartonBindonUnbindonRebindonDestroy普通启动onCreateonStartruning···onDestroy绑定启动onCreateonBindonUnbindonRebindonDestroyService的两种启动方式?区别在哪?startService():首先创...

2019-11-08 18:11:44 815

原创 Android 四大组件丨BroadcastReceiver

BroadcastReceiver 有几种形式及特点BroadcastReceiver 可分为无序广播和有序广播无序广播:通过sendBroadcast()方式发送,接收器接收顺序随机。特点是效率高,但不可停止广播或修改数据有序广播:通过sendOrderedBroadcast()方式发送,接收器按优先级顺序接收(同级时随机)。特点是可对广播进行处理,可以修改数据BroadcastRec...

2019-11-08 18:11:29 854

原创 Android 四大组件丨ContentProvider

ContentProvider 采用 Binder 机制,实现不同进程间共享数据与通信。本文模拟场景为:我拥有一张银行卡,家里收入归我统一管理!媳妇的收益转账给我,媳妇的零花钱由我转出,啧啧啧,我再做会儿梦!应用 A创建 ContentProvider/** * @des ContentProvider 事件接收类 * @author liyongli 20191108 * */p...

2019-11-08 18:11:12 815

原创 深深的码丨Java OOM 召唤

oom指的是 JVM 内存不够用了,并且垃圾收集器也无法提供更多内存,举个最简单的例子:执行 public static void main(String[] args) { int data[] = new int[Integer.MAX_VALUE]; }输出Exception in thread "main" java.lang.OutOfMemoryError: Req...

2019-10-24 10:19:28 932 2

原创 Android Studio 3.0 实现 WIFI 真机调试 / AS 3.0 实现无线真机调试

WIFI 调试环境搭建步骤目前可选插件有多款,但问题是升级 AS 到 3.0 后,好几款都不能连接到手机,以下推荐这款是笔者新配置的,完全可用么得问题,运行速度给力!AS工具栏 → File → Settings → plugins → Browse repositories → WIFI → Android WiFi ADB怎样使用无线调试首先使用USB线连接手机 →然后启动插件...

2019-10-11 12:00:06 1535 5

原创 Android Spannable 千变 TextView

Spannable / 富文本的用途是丰富 Android TextView 的表现形式,如修改同一主体中某一部分文字的颜色、大小、样式、添加超链接以及添加图标,使得 TextView 功能与表现形式更强大!以下为笔者部分实现,更多请移步Google官方资料Spannable / 富文本的实现ForegroundColorSpan 修改前景色RelativeSizeSpan 修改文...

2019-10-11 11:46:38 1188 1

原创 Android 动态权限申请三步即可实现

Android 6.0 / Android M发布后,手机权限被分为两种,即:Normal Permission / 正常权限 和Dangerous Permission / 危险权限,更好的保护了用户的隐私,极大提升了系统安全性!危险级别权限都有哪些日历 READ_CALENDAR、日历 WRITE_CALENDAR、相机 CAMERA、联系人 EAD_CONTACTS、联系人 WRIT...

2019-10-11 11:10:36 914 1

原创 当Kotlin遇见数据结构丨哈夫曼编码

哈夫曼编码定义哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。哈夫曼编码的码字是异前置码字,任一码字不会是另一码字的前面部分,这样各种码字可以连在一起传输,中间无需空格分离但又不会混淆。Kotlin 中对字符串进行哈夫...

2019-10-08 08:50:40 805

原创 当Kotlin遇见数据结构丨使用哈夫曼编码解压文件

哈夫曼编码定义哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。哈夫曼编码的码字是异前置码字,任一码字不会是另一码字的前面部分,这样各种码字可以连在一起传输,中间无需空格分离但又不会混淆。Kotlin 中如何实现哈夫曼解...

2019-10-08 08:46:44 798

原创 当Kotlin遇见数据结构丨使用哈夫曼编码压缩文件

哈夫曼编码定义哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。哈夫曼编码的码字是异前置码字,任一码字不会是另一码字的前面部分,这样各种码字可以连在一起传输,中间无需空格分离但又不会混淆。Kotlin 中如何实现哈夫曼压...

2019-10-08 08:44:12 838

原创 当Kotlin遇见数据结构丨哈夫曼解码

哈夫曼编码定义哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。哈夫曼编码的码字是异前置码字,任一码字不会是另一码字的前面部分,这样各种码字可以连在一起传输,中间无需空格分离但又不会混淆。Kotlin 中对字符串进行哈夫...

2019-10-08 08:42:39 799

原创 当Kotlin遇见数据结构丨哈夫曼树的实现

哈夫曼树定义给定N个数值作为N个叶子结点的权值,构造一颗二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也叫哈夫曼树。哈夫曼树是带权路径长度最小的树,权值越大的节点距离根节点越近。带权路径:根结点到第L层结点路径的长度,长度为 L-1。树的带权路径长度:树的所有叶子节点带权路径总和,简称 WPL(Weighted Path Length of Tree)。Kotli...

2019-10-08 08:41:13 782

原创 当Kotlin遇见数据结构丨实现中序线索化二叉树并遍历

线索二叉树n个节点的二叉树含有n+1个空指针域。利用这些空指针域,存放指向节点的在某种遍历次序下的前驱节点及后继节点的指针,这种附加的指针称为"线索",加上了线索的二叉树就是"线索二叉树"。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。线索化二叉树的本质是将一个复杂的非线性结构转换为线性结构,使每一个节点都有了唯一的前驱节点和后续节点(第一个节点无前...

2019-10-07 11:55:14 807

原创 当Kotlin遇见数据结构丨实现顺序存储的二叉树并遍历

本例中树结构、节点权如下图所示顺序存储是指将二叉树存储在一个数组中,通过存储元素的下标反映元素之间的父子关系。任何一个二叉树都可以转换为数组,同理,任何一个数组都可以转换为二叉树。顺序存储的二叉树通常只考虑完全二叉树(满二叉树其实也是一个完全二叉树)第N个元素的左子节点为:2*N+1第N个元素的右子节点为:2*N+1第N个元素的父节点为:(N-1)/ 2(整数相除得整数)1. ...

2019-10-07 11:53:41 822

原创 当Kotlin遇见数据结构丨实现链式存储的二叉树中删除子树(直接删除篇)

本例中树结构、节点权如下图所示删除节点、子树代码本例实现逻辑为直接删除节点及其子节点,未处理存在有左右子节点并需移动逻辑,故将标题命名为为直接删除篇存在左节点或者右节点,删除后需要对子节点移动将在善后删除篇中更新同时存在左右子节点,不能简单的删除,但是可以通过和后继节点交换后转换为前两种情况将在善后删除篇中更新 /** * 删除节点、子树 */...

2019-10-07 11:52:12 812

原创 当Kotlin遇见数据结构丨实现链式存储的二叉树中查找节点

1. 查找方法链式存储的二叉树中查找节点的方法可分为三种:前序查找、中序查找、后序查找,下面使用 Kotlin 语言编码实现查找函数,已创建的树结构、节点权如下图所示:1.1 前序查找函数 /** * 前序查找 * */ fun frontSearch(index: Int):TreeNode?{ var node:TreeNode? =...

2019-10-07 11:48:16 809

原创 当Kotlin遇见数据结构丨实现链式存储的二叉树并遍历

本例中节点权结构图1. Kotlin 中二叉树的创建简单二叉树的创建分为三部分: 新建节点、新建树、给节点和树赋值并关联,下面进入编码阶段:1.1 新建节点 Bean:TreeNode.kt注意:在 Kotlin 中使用 data class 声明类时,可以直接创建一个包含 getters、 setters、 equals()、 hashCode()、 toString() 以及 co...

2019-10-07 11:46:12 865

原创 当Kotlin遇见数据结构丨数据结构之树结构概述(含满二叉树、完全二叉树、平衡二叉树、二叉搜索树、红黑树、B-树、B+树、B*树)

1. 树结构示意图补充:兄弟节点:具有相同父节点的节点互称为兄弟节点。树的深度:从根节点开始(其深度为0)自顶向下逐层累加的。上图中,3的深度是1,6的深度是2,10的深度是3。节点高度:从叶子节点开始(其高度为0)自底向上逐层累加的。6的高度是1,根节点1的高度是3。2. 二叉树(Binary Tree)任何一个节点的子节点数量不超过2(子节点分为左节点与右节点)。2...

2019-10-07 11:43:27 898

原创 当Kotlin遇见数据结构丨认识 Kotlin 语言

Kotlin 的背景Kotlin 是一门基于 JVM 且与 JAVA 可 100% 互通的编程语言,用 JetBrains 的话来说 Kotlin 是更『现代化、更强大』的编程语言。Kotlin 由 JetBrains 在 2010 年开发,2011 年开源至 GitHub ,2016 年发布 1.0 版。 源码地址:https://github.com/JetBrains/kotli...

2019-10-07 11:39:07 1107 3

微信小程序 live-player 全屏播放

微信小程序 live-player 直播全屏播放工具类,对加载状态做了相应判断,并做了相应提示,附件内涵整个模块的全部文件。实际效果参考:https://blog.csdn.net/qq_15609303/article/details/106596459

2020-06-07

空空如也

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

TA关注的人

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