自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

iblade的博客

明年的某个时候,你会想着要是今天就行动了该多好。

  • 博客(340)
  • 资源 (9)
  • 收藏
  • 关注

原创 常用命令清单

获取签名文件MD5 :keytool -list -v -keystore lagoueducation.jks跳转至路由页adb shell am start -a android.intent.action.VIEW -d "lagou://lagou.com/edit?type=2\&id=1"

2020-08-28 18:17:38 144

原创 设计模式之美——20条编程技巧

如果在同一个项目中,不同的同事使用不同的缩进方式(空格缩进或 tab 键缩进),有可能会导致有的代码显示为两格缩进、有的代码显示为四格缩进。在类中,成员变量排在函数的前面。除此之外,成员变量之间或函数之间,还会按照作用域范围从大到小的顺序来排列,先写 public 成员变量或函数,然后是 protected 的,最后是 private 的。在类内部,成员变量与函数之间、静态成员变量与普通成员变量之间、函数之间,甚至成员变量之间,都可以通过添加空行的方式,让不同模块的代码之间的界限更加明确。

2022-11-24 23:29:33 32

原创 设计模式之美——解耦

除此之外,因为 open() 函数基于抽象而非具体的实现来定义,所以我们在改动 open() 函数的底层实现的时候,并不需要改动依赖它的上层代码,也符合我们前面提到的“高内聚、松耦合”代码的评判标准。不管是阅读代码还是修改代码,“高内聚、松耦合”的特性可以让我们聚焦在某一模块或类中,不需要了解太多其他模块或类的代码,让我们的焦点不至于过于发散,降低了阅读和修改代码的难度。而且,因为依赖关系简单,耦合小,修改代码不至于牵一发而动全身,代码改动比较集中,引入 bug 的风险也就减少了很多。

2022-11-24 23:00:41 223

原创 设计模式之美——单元测试和代码可测性

单元测试由研发工程师自己来编写,用来测试自己写的代码的正确性。我们常常将它跟集成测试放到一块来对比。单元测试相对于集成测试(Integration Testing)来说,测试的粒度更小一些。集成测试的测试对象是整个系统或者某个功能模块,比如测试用户注册、登录功能是否正常,是一种端到端(end to end)的测试。而单元测试的测试对象是类或者函数,用来测试一个类和函数是否都按照预期的逻辑执行。这是代码层级的测试。

2022-11-24 22:49:18 320

原创 设计模式之美——重构

一方面,重构代码对一个工程师能力的要求,要比单纯写代码高得多。重构需要你能洞察出代码存在的坏味道或者设计上的不足,并且能合理、熟练地利用设计思想、原则、模式、编程规范等理论知识解决这些问题。另一方面,很多工程师对为什么要重构、到底重构什么、什么时候重构、又该如何重构等相关问题理解不深,对重构没有系统性、全局性的认识,面对一堆烂代码,没有重构技巧的指导,只能想到哪改到哪,并不能全面地改善代码质量。

2022-11-24 20:45:07 38

原创 设计模式之美——实战MVC的意义

对于一个工程师来说,如果要追求长远发展,你就不能一直只把自己放在执行者的角色,不能只是一个代码实现者,你还要有独立负责一个系统的能力,能端到端(end to end)开发一个完整的系统。这其中的工作就包括:前期的需求沟通分析、中期的代码设计实现、后期的系统上线维护等。大部分工程师都是做业务开发的。很多工程师都觉得,做业务开发没啥技术含量,没有成长,就是简单的 CRUD,翻译业务逻辑,根本用不上专栏中讲的设计原则、思想、模式。技术人也要有一些产品思维。对于产品设计、需求分析,我们要学会“借鉴”,一定不要自己闷

2022-11-24 20:24:27 301

原创 设计模式之美——DRY原则 和 迪米特法则

尽管我们还是要往 DemoClass_1 的构造函数中,传入包含序列化和反序列化的 Serialization 实现类,但是,我们依赖的 Serializable 接口只包含序列化操作,DemoClass_1 无法使用 Serialization 类中的反序列化接口,对反序列化操作无感知,这也就符合了迪米特法则后半部分所说的“依赖有限接口”的要求。复用意识也非常重要。对于高度耦合的代码,当我们希望复用其中的一个功能,想把这个功能的代码抽取出来成为一个独立的模块、类或者函数的时候,往往会发现牵一发而动全身。

2022-11-24 16:57:33 240

原创 设计模式之美——KISS、YAGNI原则

KISS 原则算是一个万金油类型的设计原则,可以应用在很多场景中。它不仅经常用来指导软件开发,还经常用来指导更加广泛的系统设计、产品设计等,比如,冰箱、建筑、iPhone 手机的设计等等。我们知道,代码的是衡量代码质量非常重要的两个标准。而 KISS 原则就是保持代码可读和可维护的重要手段。代码足够简单,也就意味着很容易读懂,bug 比较难隐藏。即便出现 bug,修复起来也比较简单。下面这三段代码可以实现同样一个功能:检查输入的字符串 ipAddress 是否是合法的 IP 地址。

2022-11-24 11:49:25 279

原创 设计模式之美——依赖反转原则

依赖反转原则用起来比较简单,但概念理解起来比较难。

2022-11-23 23:58:27 59

原创 设计模式之美——里式替换原则 和 接口隔离原则

单一职责原则针对的是模块、类、接口的设计。但我们可以结合老师说的,判定职责是否单一,要懂得结合业务场景,业务需求,此方法,其实就是要通过JDK提供的CAS乐观自选锁(方法最终依赖硬件指令集原语,Compare And Swap)从“原语”这一词的含义看,其实也是同时、原子性地做了一件“完整”的事情,因此,考虑这一点,是可以判定它符合单一职责的。而这其实正是单一职责判定结果,往往见仁见智的原因:基于不同的角度,不同的立场,不同的业务理解,往往可以得到不同的判定结果,但不必纠结,判定过程中用到的思想才是精髓。

2022-11-23 23:21:59 204

原创 设计模式之美——单一职责原则和开闭原则

看懂”和“会用”是两回事,而“用好”更是难上加难。SOLID 原则:SRP单一职责原则(the single responsibility principle )OCP开闭原则(the open closed principle)LSP里氏替换原则(the liskov substitution principle)ISP接口独立原则(the interface segregation principle)

2022-11-23 22:06:27 273

原创 设计模式之美——DDD充血模式

领域驱动设计(Domain Driven Design,简称 DDD)基于贫血模型的传统开发模式,将数据与业务逻辑分离,违反了 OOP 的封装特性,实际上是一种面向过程的编程风格。但是,现在几乎所有的 Web 项目,都是基于这种贫血模型的开发模式,甚至连 Java Spring 框架的官方 demo,都是按照这种开发模式来编写的。面向过程编程风格有种种弊端,比如,数据和操作分离之后,数据本身的操作就不受限制了。任何代码都可以随意修改数据。

2022-11-23 18:14:26 97

原创 设计模式之美——多组合少继承

组合优于继承,多用组合少用继承。

2022-11-23 17:18:55 120

原创 设计模式之美——基于接口编程

将接口和实现相分离,**封装不稳定的实现,暴露稳定的接口**。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低代码间的耦合性,提高代码的扩展性。

2022-11-23 16:47:04 182

原创 设计模式之美——接口VS抽象类

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模式等等。

2022-11-23 16:27:13 25

原创 设计模式之美——看似面向对象,实则面向过程

常见的编程范式或者说编程风格有三种,面向过程编程、面向对象编程、函数式编程,而面向对象编程又是这其中最主流的编程范式。现如今,大部分编程语言都是面向对象编程语言,大部分软件都是基于面向对象编程这种编程范式来开发的。总以为把所有代码都塞到类里,自然就是在进行面向对象编程了。实际上,这样的认识是不正确的。有时候,从表面上看似是面向对象编程风格的代码,从本质上看却是面向过程编程风格的。定义完类的属性之后,就顺手把这些属性的 getter、setter 方法都定义上。它违反了面向对象编程的封装特性。面向对象封装的定

2022-11-23 15:55:52 240

原创 设计模式之美——面试对象与面向过程对比

实际上,面向过程编程和面向过程编程语言并没有严格的官方定义。理解这两个概念最好的方式是跟面向对象编程和面向对象编程语言进行对比。相较于面向对象编程以类为组织代码的基本单元,面向过程编程则是以过程(或方法)作为组织代码的基本单元。它最主要的特点就是数据和方法相分离。相较于面向对象编程语言,面向过程编程语言最大的特点就是不支持丰富的面向对象编程特性,比如继承、多态、封装。

2022-10-29 20:07:03 22

原创 设计模式之美——封装,继承,多态的意义

What:隐藏信息,保护数据访问。How:暴露有限接口和属性,需要编程语言提供访问控制的语法。Why:提高代码可维护性;降低接口复杂度,提高类的易用性。

2022-10-29 19:32:23 508

原创 设计模式之美【总结】

尽管代码结构相似,但这 4 种设计模式的用意完全不同,也就是说要解决的问题、应用场景不同,这也是它们的主要区别。这里我就简单说一下它们之间的区别。代理、桥接、装饰器、适配器 4 种设计模式的区别代理、桥接、装饰器、适配器,这 4 种模式是比较常用的结构型设计模式。它们的代码结构非常相似。笼统来说,它们都可以称为 Wrapper 模式,也就是通过 Wrapper 类二次封装原始类。

2022-10-27 21:29:49 73 1

原创 Java方法分派

总结下来:但在Groovy中会调用方法2,纯动态语言。取决于运行时的实际类型。

2022-06-24 17:08:40 162

原创 setOnClickListener(null)父控件依然拿不到点击

需求:评价星星 在评价页支持点击选中,在其他页面点击要跳转页面。//此方法无用。isEditable = false ,点击依然无法跳转 public void setEditable(boolean isEditable) { this.isEditable = isEditable; for (int i = 0; i < getChildCount(); i++) { getChildAt(i).setOnClickListene

2022-03-18 17:23:12 464

原创 算法学习-二分法基础

最基本的二分法查找因为我们初始化 right = nums.length - 1所以决定了我们的「搜索区间」是 [left, right]所以决定了while (left ‹= right)同时也决定了 left = mid+1 和 right = mid-1因为我们只需找到一个 target 的索引即可所以当 nums[mid] == target 时可以立即返回寻找左侧边界的二分查找:因为我们初始化 right = nums.length所以决定了我们的「搜索区间」是 [left

2022-03-12 20:46:03 136

原创 IDE刷算法插件LeetCode editor使用流程

最近报了帅张第三期21天算法训练营,上班看LeetCode不太符合摸鱼党的尿性。废话少说 直接上IDE插件–leetcode editorRestart IDE 之后配置配置路径:File->settings->tools->leetcode pluginURL可选项: leetcode.com与leetcode-cn.comCode Type: Java,Python,C++,Python3,C,C#,JavaScript,Ruby,Swift,Go ,Scala,Ko

2022-03-07 16:45:07 1034 2

原创 Binder学习笔记

三个方面回答:进程间通信机制,虚拟物理设备驱动;能发起通信的Java类;很多一线大厂的APP就是多进程在运行。推送就是一个单独进程,保持连接的稳定性。WebView退出不干净,单独进程,在退出WebView时直接杀掉该进程 就不会有内存泄漏了。Application 的onCreate 会执行多次,初始化第三方库 避免重复初始化。Linux本身是有进程间通信的,为何基于Linux的Android还要新搞出一个Binder呢?优势何在?共享内存,Socket,管道(如handler实现原.

2022-02-06 14:32:41 1613

原创 《网络协议》笔记-TCP/UDP

UDPTCP面向连接,UDP无连接,那何为连接?所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。TCP 提供可靠交付。通过 TCP :无差错、不丢失、不重复、并且按序到达。UDP:继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。IP 包可不是一个流,而是一个个的 IP 包。之所以变成了流,这也是 TCP 自己的状态维护做的事情。而 UDP 继承

2022-01-04 14:45:01 842

原创 《网络协议》笔记-IP是怎么来的,又是怎么没的?

例如,旁边的机器都是 192.168.1.x,我非得配置一个 16.158.23.6,会出现什么现象呢?包发不出去,这是因为 MAC 层还没填。目标 MAC 填什么呢?是不是填 192.168.1.6 这台机器的 MAC 地址呢?当然不是。Linux 首先会判断,要去的这个地址和我是一个网段的吗,或者和我的一个网卡是同一网段的吗?只有是一个网段的,它才会发送 ARP 请求,获取 MAC 地址。如果发现不是呢?Linux 默认的逻辑是,如果这是一个跨网段的调用,它便不会直接将包发送到网络上,而是企图将包

2021-12-31 19:06:29 71

原创 《网络协议》笔记-IP地址

**IP 地址是一个网卡在网络世界的通讯地址,**相当于我们现实世界的门牌号码。既然是门牌号码,不能大家都一样,不然就会起冲突。比方说,假如大家都叫六单元 1001 号,那快递就找不到地方了。所以,有时候咱们的电脑弹出网络地址冲突,出现上不去网的情况,多半是 IP 地址冲突了。如10.100.122.2 就是一个 IP 地址。这个地址被点分隔为四个部分,每个部分一个字节( 8 个 bit),所以 IP 地址总共是 32 位。这样产生的 IP 地址的数量很快就不够用了。因为当时设计 IP 地址的时候,并不知

2021-12-31 18:05:10 222

原创 《网络协议》笔记-网络分层

网络为什么要分层?因为,是个复杂的程序都要分层。程序是如何工作的?我们可以简单地想象“你”这个程序的工作过程。当一个网络包从一个网口经过的时候,你看到了,请进来,处理一把。(上图左下方)你调用 process_layer2(buffer)。从 Buffer 中,摘掉二层的头,看一看,应该根据头里面的内容做什么操作。如果该包携带的 MAC 地址和你的相符,那说明就是发给你的,于是需要调用 process_layer3(buffer)。此时,Buffer 里面往往就没有二层的头了,因为已经在上一个函数

2021-12-31 17:11:26 1128

原创 《网络协议》笔记-通关问答

协议三要素有哪些?语法:规则和格式语义:代表的意义顺序OSI七层协议有哪些?1、物理层。数据单位:bit2、链路层。数据单位:帧(ARP、VLAN)3、网络层。数据单位:数据包(IP)4、传输层。数据单位:数据段(TCP、UDP)5、会话层6、表示层7、应用层(HTTP、FTP、RPC、DHCP、DNS)浏览网页的流程是什么?1、应用层:输入URL,通过DNS获取URL的IP地址。使用HTTP协议封装2、传输层:TCP协议封装3、网络层:通过IP地址封装4

2021-12-31 12:19:14 79

原创 Android代码规约

Android代码规约写在前面的话对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率,高效协作即降低协同成本。所谓无规矩不成方圆,无规范不能协作。车同轨,书同文,规约是我们高效合作的基础。代码的字里行间流淌的是软件生命中的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升质量意识。工程师对于代码,一定要“精益求精”,不论从性能,还是简洁优雅,都要具备“精益求精”的工匠精神,认真打磨自己的作品。一个优秀的工程师和

2021-12-30 17:54:04 1173

原创 《网络协议》笔记-概述

计算机网络有一个显著的特点,就是这是一个不仅需要背诵,而且特别需要将原理烂熟于胸的学科。很多问题看起来懂了,但是就怕往细里问,一问就发现你懂得没有那么透彻。

2021-12-30 17:47:43 69 1

原创 Dialog空白区点击的监听

需求:底部弹窗上有输入框,如果显示键盘,点击空白仅消失键盘,键盘不在,消失弹窗。监听Dialog空白区域,最常见思路是空白区域也写上View,监听View点击即可。但是Dialog中有输入框时,键盘弹起时,会出现画面跳动,体验很差。需要从getDecorView层面入手。重写Dialog,然后加上如下代码: getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutPar

2021-09-06 15:19:09 718

原创 JVM内存管理笔记

郑重声明:本文属于个人学习笔记,严重参考姜新星大佬在拉勾教育平台的《Android工程师进阶34讲》。严重参考警告。星哥如觉不妥,微信我一下哈, 侵删。JVM 的运行时内存结构中一共有两个“栈”和一个“堆”,分别是:Java 虚拟机栈和本地方法栈,以及“GC堆”和方法区(两栈一器,一堆一区)。除此之外还有一个程序计数器,但是我们开发者几乎不会用到这一部分。JVM 内存中只有堆和方法区是线程共享的数据区域,其它区域都是线程私有的。并且程序计数器是唯一一个在 Java 虚拟机规范中没有规定任何 Ou

2021-08-17 20:15:54 80

原创 Leakcanary原理笔记

使用弱引用+引用队列的形式。1、监听Activity生命周期2、在Activity执行onDestory()后,创建一个WeakRefrence,该引用指向Activity,将其放入引用队列RefrenceQueue。3、过一段时间,判断引用是否存在,若存在,过一会儿执行GC,再判断是否存在,若还是存在,该视为内存发生泄漏。4、dump内存信息,分析泄漏原因...

2021-08-14 18:02:21 82

原创 Android split()特殊符号“.”、“|”、“^”等字符

需求:“求职神器|完美简历!”—>[求职神器,完美简历]①只要第一个判断可以进入,即line 138是可用的,但line 139不可用,②将line 142和line 145,再试试。结论:一、split 分割字符时,两种方法:方法①:\转义,单个\也是特殊符号,需要两个\,即split("\|");方法②:如果是在JDK(Java)用split(“|”);如果是ART(Android)中split(“[ | ]”)。二、contains 判断包含:不能加转义 \ 或者 [ ] ,需

2021-08-10 14:44:35 1535

原创 Mac版本EndNote基本用法

NoteExpress在Mac上并未覆盖,探索了下Mac版EndNote基本用法:以北京科技大学为例:一、下载安装:1.在校外访问学校VPN:http://n.ustb.edu.cn/。登录个人账号后,点击“电子资源数据导航”进入到学校图书馆。2.点击“工具与软件”—“文献管理软件Endnote X9”—“Mac版下载"3.待下载完成后,直接傻瓜式安装即可。二、导入文献:以知网为例。(哈?你不知道知网?这都天临5年了。点击上个步骤1中红款右侧"知网CNKI"即可。)1.获取文献题目:输入

2021-07-15 15:31:39 15922 10

原创 Endnote 参考文献输出格式

参考文献输出格式Author-YearJournal Article连续出版物中的析出文献(期刊)析出文献主要责任者. 析出文献题名[文献类型标志]. 连续出版物题名: 其他题名信息, 年, 卷(期): 页码.Author. Year. Title[J]. Journal|, Volume|(Issue)|: Pages|.Book专著(书籍)主要责任者. 题名: 其他题名信息[文献类型标志]. 其他责任者. 版本项. 出版地: 出版者, 出版年: 引文页码.Author. Year. Tit

2021-07-15 15:10:54 2723

原创 volatile可见性,指令重排

volatile的三大特性:共享变量可见性不保证原子性禁止指令重排后顺序性。CPU高速缓存和可见性问题程序运行时,数据是保存在内存当中的,但是执行程序这个工作却是由CPU完成的。那么当CPU正在执行着任务呢,突然需要用到某个数据,它就会从内存中去读取这个数据,得到了数据之后再继续向下执行任务。这是理论上理想的工作方式。然而实际上,CPU的发展是遵循摩尔定律的,每18个月左右集成电路上晶体管的数量就可以翻一倍,因此CPU的速度只会变得越来越快。但是光CPU快没有用呀,因为CPU再快还是要从内存

2021-05-25 14:35:05 215

原创 ItemDecoration实现stickyHeader效果

/** * 快速选择器章节装饰 */public class FastIndexSectionDecoration extends RecyclerView.ItemDecoration { private Context mContext; private List<FilterBean> mData; private int backgroundColor; private int textColor; private float text.

2021-05-21 12:01:56 69 1

原创 onDraw( )基础

View 三大模块:布局,绘制,触摸反馈绘制 四个层次:①Canvas,②Paint, Canvas辅助(范围剪切和几何变换),绘制顺序(通过绘制方法控制)重写绘制方法:onDraw( )onDraw主体内容的绘制绘制关键:Canvas【 翻译为 画布 但并不载体 就是个绘制工具】 Canvas的绘制方法:drawCircle,drawText等 关键参数Paint 颜料画笔 风格信息: 阴影, 空心,抗锯齿等。 Can...

2021-05-19 16:48:01 578

微信QQ登录分享-AndroidStudio

适用于微信和QQ第三方登录和分享使用,包含两个jar和指导文章链接。自己代码工具类。

2018-09-25

Spring从入门到精通(高清珍藏版)

Spring 从入门到开发,全书详细介绍了Spring开发的各个技术细节,该资源是高清的pdf版本,是学习Spring不可多得教材。

2018-09-19

汉字转换拼音的jar

汉字转换拼音的jar,可用于Android或者java开发中需要汉字转换拼音的场景,pinyin4j-2.5.0.jar,带声调,可更改大小写

2017-09-05

adb的压缩包

旧版adb压缩包

2017-06-24

Android弹窗ToastDemo源码

自定义了土司 显示大小 显示时间 显示位置 透明度 圆角与否 显示内容 等

2016-05-20

Android弹窗PopuWindowDemo源码

Android弹窗PopuWindowDemo源码,直接输入提示内容字符串和显示时间就行了

2016-05-20

Scrollview中嵌套ViewPager和ListView常出现的问题

Scrollview中嵌套ViewPager和ListView常出现的问题: ViewPager如果在Scrollview中使用,并且宽高指定为match_parent或者wrap_content则不会显示内容,但是如果将高度指定为200dp,则ViewPager则会将内容显示到屏幕上 ListView同ViewPager类似,必须指定固定高度之后,才可以显示相应的高度,否则只显示一个Item的内容高度,然后在ListView区域上下滑动时,Scrollview并没有效果,而是实现的是ListView的上下滚动事件。

2016-03-30

Android:ScrollView中嵌套ViewPager和ListView示例

2016-03-30

常用布局颜色

用于常规颜色的配置

2016-03-22

空空如也

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

TA关注的人

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