- 博客(68)
- 资源 (1)
- 收藏
- 关注
原创 深入理解Android屏幕刷新机制与View三大流程关系
深入理解Android屏幕刷新机制与View三大流程关系博客仅作为个人学习使用,不定期更新,方便以后复习时能够快速拾回这段遗忘的知识。如果有读者无意搜索到这篇文章,阅读后觉得对你有所帮助,希望您能点个赞,感谢支持。requestLayout与invalidate 众所周知,View三大流程是Measure、Layout、Draw,在SDK中我们在View中只能找到 requestLayout (包括Measure与L
2021-05-05 11:18:42
588
原创 深入理解Kotlin协程SafeCoroutine
由于写完的文章也不会有太多人阅读,所以之后博客仅作为个人学习笔记使用,不定期更新,方便以后再复习时能够快速拾回这段遗忘的知识。如果有读者无意搜索到这篇文章,阅读后觉得对你有所帮助,希望您能点个赞,感谢支持。SafeCoroutine作用SafeCoroutine在suspendCoroutine中创建,主要有两个作用。保证suspendCoroutine的挂起点(也就是传入lambda的continuation参数)只会被resume一次保证suspend lambda参数直接resume时,.
2021-05-01 18:29:35
493
1
原创 【Corda学习】区块链概念与技术的理解
1. 点对点记账(去中心化) 去中心化是区块链最为显著的特征,账本由权益者自己进行记录。在权益交割时,通过共识算法来保证每个人记录的账本是一致性。2. 区块链与分布式账本的异同点相同点:都是点对点记账不同点:持有账本的节点数不同区块链是所有参与共识的节点各自都持有一份完全相同的账本。全局账本的弊端是随着参与节点的数量增多,记录交易也会增多,达成全局共识耗时也会越来越大,记账效率也会大大降低,仅仅只适合记录重要且涉及全局的交易。分布式账本没有实现全局共享账本,而是仅在一定范围内实现共识(仅在交易
2020-09-29 14:41:41
385
原创 简单描述ELF动态链接重定位的延迟绑定以及GOT表、PLT表的意义
GOT表 GOT表(Global Offset Table) ,又称全局偏移表,位于.data节首,记录着外部符号动态加载后的首地址信息。在静态链接时,每一个外部符号都会在GOT表对应一个表项,静态链接器并每一个表项生成一个对应的重定位项(数据位于.rel.data节,函数位于.rel.text节)。在动态加载时,动态链接器将根据重定位项,修改对应的GOT表中信息,完成重定位。  
2020-07-01 15:01:29
1022
原创 逆向分析XX校园,手把手带你云返校!
背景目前很多地区的大学都已经在有条不紊的开学了,其他学校的同学们都忙着拍毕业照片,按期参加毕业典礼,享受着最后的大学时光。然而我的大学却因为卫生不合格,不能开学,眼瞅着就要毕业了,想想在家云毕业心里就很憋屈。从疫情爆发开始,学校就让我们每天都使用XX校园app打卡登记健康情况与位置信息,既然学校不让我们回去,我就在想能不能通过修改位置信息来实现云返校。这确实是一个很奇怪的动机,可能是逆反心理作祟吧。尝试抓包既然是位置信息差不多应该是使用了第三方网络接口来获取的,最后再提交到服务端。既然如此,我就先尝
2020-06-10 09:40:31
1542
1
原创 Apk应用安全加固所需了解的Application启动流程
本文使用Android Q(API 29)版本源代码进行讲解 很多人认为Android应用加载入口是Application的onCreate,实则不然。当点击进入应用时,Zygote进程会fork出一个独立进程, 通过RuntimeInit#findStaticMain找到ActivityThread#main并在ZygoteInit#main中进行调用// ZygoteInit#mainpublic static void main(String argv[]) { ......
2020-05-12 20:51:41
860
原创 Kotlin高阶面向对象
高级部分抽象类主要作为多个类的模板,而接口则定义了多个类应该遵守的规范拓展Kotlin的拓展是一个很独特的功能(Java中是不存在的)基类拓展的方法,子类对象也是可以使用的。 拓展方法的this和成员方法的this一样是该对象的引用。import java.util.*;fun String.say() { println("Hello MCM!");}fun main(a...
2019-04-20 17:28:53
233
原创 类委托与属性委托
类委托类委托就是 现在有一个类需要实现某接口,发现有一个对于这个接口已经实现好的类,可以直接将这个现成的类拿来使用,也就是说本类继承某接口的任务委托了一个现成已经实现好的类的实例。interface BASE{ fun say();}interface BASE2{ fun say2();}class SUB: BASE, BASE2{ override fu...
2019-04-20 14:11:29
1015
原创 setter与getter的幕后字段Field
幕后字段Kotlin生成幕后字段的条件:重写getter、setter方法,否则回味该属性生成幕后字段field重写getter、setter方法时使用field关键字显示引用幕后字段field在Kotlin中定义一个普通属性,要么在定义时指定初始值要么在构造器中指定初始值。Kotlin为每个普通属性都生成了幕后字段用于存值。通过点方法进行属性赋值只不过调用该属性的setter方法...
2019-04-14 21:59:31
482
原创 Kotlin 高阶函数与尾随闭包
单表达式函数某种情况函数只返回单个表达式,此时可省略花括号并在等号后指定函数体fun area(x: Double, y: Double): Double = x * y;fun area(x: Double, y: Double) = x * y; //编译器可自动判断返回值类型参数个数可变的形参列表Kotlin允许个数可变的形参可以处于形参列表的任意位置,但一个函数最多只能有一个个...
2019-04-13 20:16:06
1050
原创 Kotlin when语句的学习
when语句When语句取代 java中的 case语句default语句变成了有意义的 else语句特征每个分支的判断条件不一定是常量,可以是表达式一个分支可以有多个判断条件对于 条件表达式的类型没有要求不用break也会跳出var str = "Hello World";var code = 'o';when (code) { str[4] -> ...
2019-04-12 16:58:54
384
原创 Kotlin数据类型
Kotlin 是强类型语言var:变量,根据初始值来自动分配类型val:常量,对于局部常量,可在使用前对其进行赋值(声明与赋值分离)整数类型ByteShortIntLong1248Kotlin是null安全的语言普通类型变量是不接受null值的,如果需要存储null值,需要使用包装类型Byte?、Short?、Int?、Long?普通类型会映射到ja...
2019-04-10 21:59:05
226
原创 Android持久化的学习
文件存储openFileOutput()方法两个参数:文件名(不可包含路径,默认为 /data/data/包名/files/ )操作模式(MODE_APPEND,MODE_PRIVATE)MODE_PRIVATE(默认):覆盖写入MODE_APPEND:追加返回值: FileOutputStream对象,使用Java流将数据写入到文件例子:public void ...
2019-03-31 21:51:03
201
原创 LayoutInflater中Inflater方法的学习
在初学Android过程中,我对LayoutInflater的Inflater方法的参数产生了困惑,这个函数到底做了什么呢?在网上查阅了大量文档后还是一脸懵逼。今天从_江南一点雨的博客学习到了Inflater方法中的各参数意义。这篇博客主要是为了记录并总结概述参数不同情况下Inflater所表现出含义的解释。三个参数的Inflater方法函数原型public View inflate(in...
2019-03-30 12:36:35
274
原创 红黑树原理分析
红黑树红黑树的规则:每个节点非黑即红。根结点是黑色。叶结点 (NIL) 是黑色。如果一个结点是红色, 则它的两个子节点都是黑色的。从根结点出发到所有叶结点的路径上, 均包含相同。调整策略:插入调整站到祖父节点观察。删除调整站在父节点观察。插入和删除的情况一共五种。优势:最短路径 与 最长路径 长度至多差一倍。插入操作:首先我们明确插入节点 xxx 必将预先设置...
2018-10-12 17:27:13
289
原创 Morris遍历 - 二叉树神级遍历
时间复杂度O(1),额外空间复杂度O(1)的遍历方法。morris算法流程:当前节点记为 cur(引用)如果cur无左孩子,cur向右移动(cur = cur.right)如果cur有左孩子,找到cur左子树最右的节点,记为mostRight如果mostRight的右指针指向NULL,则让其指向cur,cur向左移动(cur = cur.left)//这里并不矛盾,往后看如果most...
2018-10-10 16:10:59
265
原创 Manacher算法
学习Manacher算法需要建立三个概念。三个概念:回文半径数组回文右边界右边界的最早中心位置算法流程:若 i 不在右边界内部: 可能性:暴力向两边扩展若 i 在右边界内部: 可能性1:如若i对应的i’的半径包括在大的回文半径,i的回文半径等于i‘的回文半径。 t 【F [a b a] k t k [a b a] F】s 可能性2:如...
2018-10-04 22:44:28
238
原创 函数指针与虚方法分析与实践
函数指针与虚方法分析与实践需要具备的基础知识:32位编译器中任意类型指针均占4字节,64位编译器任意类型指针均占8字节。当我们创建一个对象时,仅为其成员变量空间。_vptr(虚方法表ptr): 我们创建的每个类对象,类中提供的所有虚方法均存储在一张虚方法表中。而对象仅保存着一个指向虚方法表的指针。我们通过一个简单的例子来验证这个观点:代码演示:#include<io...
2018-09-30 19:16:18
178
原创 设计模式学习笔记 - 1
设计模式应遵循以下几种原则:单一职责原则开放-封闭原则依赖倒置原则单一职责原则 就一个类而言,应仅有一个因其他变化的原因如果一个类承担的职责过多,就相当于这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。依赖倒置原则 抽象不应该依赖细节,细节应该...
2018-09-03 15:29:46
182
原创 字符串模式匹配
字符串模式匹配有以下几种算法:BF算法KMP算法Sunday算法Shift-And算法BF算法:我们常用的暴力算法,时间复杂度log&nbsp;n2log&nbsp;n2log\ {n^{2}} 代码演示:int BF(const char *text, const char *pattern) { int len1 = strlen(text); i...
2018-08-19 19:18:40
339
原创 哈希表与哈希函数
哈希表我们将任意类型元素转换为整型的过程叫作哈希。 所谓哈希,实质上是高维空间向低维空间的映射。高维度空间元素数量多,低维空间元素数量少,必定会出现多对一的映射,所以必然出现哈希冲突。在设计哈希函数的过程要针对状态数来进行分析。哈希函数的本质在做哈希,处理哈希碰撞。 设计哈希表应当注重以下两点:设计哈希函数处理冲突设计哈希有以下几种方法:开放地址法多重哈希...
2018-08-19 17:59:15
355
原创 二分法与三分法
二分查找 基于分治策略的一种查找方法, 时间复杂度 O(log2n)O(log2n) O(log_{2}{n}) 是用于解决单调有序问题,缩小问题规模算法步骤:将左指针指向序列首元素,右指针指向队尾元素中间指针左指针右指针中间指针=左指针+右指针2中间指针左指针右指针中间指针=左指针+右指针2中间指针左指针右指针中间指针 = \frac{左指针 + 右指针}{2}...
2018-08-19 17:41:47
1737
原创 排序方法与策略
排序方法种类:冒泡排序插入排序选择排序归并排序堆排序快速排序基数排序分类方法:稳定排序与非稳定排序:两个大小一样的值,在排序后相对位置不变。内部排序与外部排序:是否需要开辟额外存储空间。稳定排序:冒泡排序 2. 插入排序 3. 归并排序 4. 基数排序非稳定排序:选择排序 2. 堆排序 3. 快速排序 稳定排序:冒泡排序...
2018-08-16 10:43:43
739
原创 堆与优先队列
分析与思考数组是完全二叉树的存储结构,完全二叉树是数组的逻辑结构,这样我们就可以使用树形结构来解决线性问题。堆大顶堆(用于升序排序,根节点大于等于两个子节点)小顶堆(用于降序排序,根节点小于等于两个子节点)堆的插入与删除:尾部插入,头部弹出(联想到了队列) 不同编程语言在实现优先队列时底层90%是由堆构成的。 通过代码本身来提高编程能力是错误的,应注重思维逻...
2018-08-16 09:46:57
209
原创 树与二叉树
树形结构是计算机最重要的数据结构,链表示特殊的树.特点:节点抽象为集合,边抽象为关系。树由节点与边构成。子节点之间是没有交集的。每个节点的指针域两个至多个(N叉树)。节点数 = 边数 + 1。图的度 = 出度 + 入度, 树的度 = 出度。定理: 二叉树中度数为零的节点比度数为2的节点多一个。满二叉树:没有度数为1的节点。完全二叉树:除了最后一层的所...
2018-08-15 22:31:14
349
原创 栈与队列
队列性质:先进先出(队尾入队,队头出队)分类: 单向队列循环队列单调队列优先队列(存储结构为队列,逻辑结构为堆)栈性质:先进后出(队尾入栈,队尾出栈)分类: 单项队列单调栈 栈适合解决所有完全包含关系的问题单调队列 : 均摊时间复杂度O(1), 适用于解决查询区间最值问题(线段树也适用)问题:在一个序列中需要一个五位的字串,排序后保证每一个数字...
2018-08-15 14:44:41
328
原创 顺序表与链表
线性表:顺序表(Vector) 链表(LinkList)时间复杂度比较:顺序表: 适合随机访问 O(1)。 插入、删除节点 O(N)。 链表: 不适合随机访问 O(N)。 插入、删除节点 O(1)。 链表:单向链表 双向链表 循环链表循环链表:插入删除过程要注意,初始指针应指向链表尾节点(若当插入到头前时,找不到前驱节点) 当在更新尾节点时需要更新...
2018-08-15 14:18:57
253
原创 哈夫曼编码与二叉字典树存储中文语料(AC自动机实现多模查询)
前言: 在做这个项目之前,我有很大的抵触情绪,因为我认为这个任务已经完全超出了我的能力和认知范围,这个时候突然想到胡船长的一句话:当我们的生活遇到困难时,不应该总是抱怨生活有多么不公,而是应该想办法去改变这一现状。随着对问题的不断剖析,我逐渐地摸索出了一种解决方案.Day1: 在做这个项目之前我参阅了很多有关中文编码的资料,当今计算机主要采用的还是UTF-8编码,虽...
2018-08-08 10:49:11
753
2
原创 Bash Shell 命令练习
1 2 3 4 5 6 7 8 9 a v 你好 . /8 求以上字符串中所有数字之和echo $[`cat test1 | tr -s -c "1234567890" " " | tr " " "+"` 0]echo “ABCefg” >> test2 将字符串中的所有小写变大写cat test2 | tr "ABCDEFG" “abcdefg"找到PATH 变量中的最
2018-05-25 13:17:19
607
原创 Problem 13 : Large sum
Problem 13Large sumWork out the first ten digits of the sum of the following one-hundred 50-digit numbers.3710728753390210279879799822083759024651013574025046376937677490009712648124896970078050417018...
2018-05-19 16:13:08
339
原创 Problem 12 : Highly divisible triangular number
Problem 12Highly divisible triangular numberThe sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first t...
2018-05-19 16:07:20
297
原创 花式玩转线性筛(线性筛法 + 算术基本定理)
利用(线性筛法O(n) + 算数基本定理) 基本上可以解决所有因子问题。本文提供的方法:1.计算任意数字的最小素因子2.计算任意数字的最大素因子3.计算任意数字的素因子种类数量4.计算任意数字的素因子个数5.计算任意数字的因子和1.计算任意数字的最小质因子#include <stdio.h>#define MAX_N 1000000#define MIN(a,b) (a) >...
2018-05-08 21:38:25
720
原创 等比数列求和公式的推导
==>==> 因为 所以 你可能机智发现为什么我的是n+1次幂,这和传统的求和公式不太一样,毕竟我们程序员是从0开始计数的((lll¬ω¬))...
2018-05-01 21:04:00
13062
原创 Problem 11 : Largest product in a grid
Problem 11Largest product in a gridIn the 20×20 grid below, four numbers along a diagonal line have been marked in red.08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 0849 49 99 40 17 81 18 5...
2018-05-01 19:28:52
401
原创 Problem 10 :Summation of primes
Problem 10Summation of primesThe sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.Find the sum of all the primes below two million.素数的和所有小于10的素数的和是2 + 3 + 5 + 7 = 17。求所有小于两百万的素数的和。题目解答朴素解法:暴力枚举优化算法:素数...
2018-05-01 19:24:04
217
原创 Problem 9 : Special Pythagorean triplet
Problem 9Special Pythagorean tripletA Pythagorean triplet is a set of three natural numbers, a < b < c, for which,a2 + b2 = c2For example, 32 + 42 = 9 + 16 = 25 = 52.There exists exactly one Pyt...
2018-04-25 16:52:56
254
原创 Problem 8 : Largest product in a series
Problem 8Largest product in a seriesThe four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.7316717653133062491922511967442657474235534919493496983520...
2018-04-24 21:56:55
318
原创 Problem 7 : 10001st prime
Problem 710001st primeBy listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.What is the 10 001st prime number?第10001个素数列出前6个素数,它们分别是2、3、5、7、11和13。我们可以看出,第...
2018-04-23 16:09:02
353
原创 Problem 6 : Sum square difference
Problem 6Sum square differenceThe sum of the squares of the first ten natural numbers is,12 + 22 + … + 102 = 385The square of the sum of the first ten natural numbers is,(1 + 2 + … + 10)2 = 552 = 3025...
2018-04-22 08:57:23
724
公交查询系统的数据库设计
2018-01-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人