3 Android_马伟

尚未进行身份认证

暂无相关简介

等级
TA的排名 8w+

二叉树基本概念,前中后序遍历,删除!

二叉树为什么需要树这种数据结构1) 数组存储方式的分析优点: 通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点: 如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低2) 链式存储方式的分析优点: 在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)。缺点: 在进行检索时,效率仍然较...

2020-01-16 16:55:27

Android系统启动过程分析

主要流程init进程启动过程init进程是Android系统中用户空间的第一个进程。进程号为1。第一步:启动电源当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后执行。第二步:执行引导程序(Boot Loader)通常在运行Android系统之前会先执行Boot Loader引导程序,它不属于Android系统,常见的引导程序有:redb...

2020-01-15 18:03:41

HashMap源码解析

HashMap: 数据结构如下:put方法:需要注意的是什么时候转红黑树:链表长度 >= 7 && 数组长度 >= 64 才会转红黑树public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } /** ...

2020-01-14 14:28:53

查找算法总结:线性查找、二分查找、插值查找

查找算法介绍在 java 中,我们常用的查找有四种:1) 顺序(线性)查找2) 二分查找/折半查找3) 插值查找4) 斐波那契查找1、线性查找算法有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提 示找到,并给出下标值 /*** 这里我们实现的线性查找是找到一个满足条件的值,就返回*/ pub...

2019-12-21 14:37:27

快速排序、归并排序、基数排序(桶排序)!

快速排序分析推导图class Untitled { public static void main(String[] args) { System.out.println("hello https://tool.lu/"); int[] array = {6,1,2,7,9,3,4,5,10,8}; quick(array, 0...

2019-12-03 21:16:37

冒泡排序、选择排序、插入排序、希尔排序(推导过程~!)

常见的排序算法:一、冒泡排序:演示冒泡过程的例子冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化:因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志 fl...

2019-11-20 21:54:40

一篇文章让你彻底了解算法的时间复杂度O(n)!!!

一、时间频度基本介绍:时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间 就多。一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。[举例说明]比如计算 1-100 所有数字之和, 我们设计两种算法:举例说明-忽略常数项结论:1) 2n+20 和 2n 随着 n 变大,执行曲线无限接近, 20 可以忽略2) 3n+10 ...

2019-11-19 15:39:20

数组实现栈、中缀计算器、逆波兰后缀计算器、 中缀转后缀完整版本!

栈的介绍:栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后...

2019-11-15 17:37:46

java 实现单链表、双链表增删改查、排序、约瑟夫等功能实现

总结:1、链表中每个结点的next引用都相当于一个指针指向另一个结点2、在单链表中通常使用head引用指向单链表的首结点,由head引用完成对整个链表中所有结点的访问3、单链表的一个重要特性就是只能通过前驱结点找到后续结点,不能从后续结点找到前驱结点单链表的增、删、改、查实现:// 根据条件排序添加/*** 单链表的实现*/public class SingleLinkdL...

2019-11-06 15:46:54

java 数组实现单项队列和环形队列!

数组实现队列:普通单项队列环形队列一、实现普通队列1) 将尾指针往后移:rear+1 , 当 front == rear 【空】2) 若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear 所指的数组元素中,否则无法存入数据。rear == maxSize - 1[队列满]public static void main(String[] ar...

2019-11-05 14:22:17

EventBus实现原理(手写核心逻辑)

EventBus核心流程图总结:发布者post发送一个事件,处理器根据发布的数据类型,然后分配给订阅者方法回调里面。先注册通过反射拿到所有的这个类的方法判断这个类有没有注解,然后存起来。然后获取到注解的值来判断需不需要转换线程在post方法里面通过反射,调用这个类方法。第一步: 声明Subscribe注解第二步:创建注解里面的类型,也就是线程类型第三步: 订阅者先进行注册...

2019-08-19 08:42:20

TCP为什么三次握手,四次挥手?(权威版)

为什么三次挥手?TCP 协议的双方通信(客户端/服务端), 为了实现可靠数据传输,有序性,都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认,序号没有同步,数据就会乱序...

2019-08-18 19:03:15

Android hook原理及APP安全

Xposed原理如何保证APP最安全。这篇文章不对逆向和hook进行分析,如有不知道的,请看我之前的文章。原理: 通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持Zygote启动进程时1、都会将这个D...

2019-08-18 13:34:29

Android 线程池介绍

线程池的好处线程池的参数详解线程池种类介绍线程的工作原理 + 策略线程池的Api细节为什么使用线程池?每个线程的创建、消亡是有开销的,线程池可以重用处在的线程,避免这些开销可以控制最大线程的并发数量,提高系统资源的使用率提供强大API线程池参数详解corePoolSize: 核心线程的数量。 当提交一个任务到线程池时,线程池会创建一个核心线程来执行任务,即使其他空...

2019-08-18 11:02:29

线程安全、线程间的通信这一篇就够了。

线程安全解释:我画了一张图来解释:下面代码是一个例子:public class ThreadUnSecurity { static int tickets = 10; class SellTickets implements Runnable{ @Override public void run() { // 未加同...

2019-08-17 13:25:19

Coco2dx - lua 实现连连看,很全的一篇,需要的可以直接用!!

大家先看效果我把代码粘贴进来,大家可以直接看,注释写的很清楚的require "app/views/newScene"local MainScene = class("MainScene", cc.load("mvc").ViewBase)-- numbersTable[string.format("%d", i), int转换字符转-- 保存view的集合local list =...

2019-08-14 16:36:38

一篇文章让你清楚DVM、JVM、ART、JIT、ODEX、VDEX、DEX、oat

DVM 和 JVM的区别 1、DVM基于寄存器,JVM基于栈。 DVM效率要更高 解释为什么寄存器效率更高? a、 因为寄存器是CPU中的一部分, 堆栈是内存的一种结构。 内存是CPU和硬盘之间的通道。 寄存器是CPU的储存器,速度快。 b、 一个是直接对CPU进行操作,一个是对内存操作,然后在转化成CPU指令操作。所以寄存器效率更...

2019-08-12 12:01:54

ARouter路由实现原理(手写核心原理,实现通信一目了然)

组件化通信,跳转有两种实现方案:核心:编译时生成文件,运行时执行文件第一种方案: 使用Intent 隐士跳转方式。 /***隐士跳转首页 清空现有栈,创建新栈*/public static void newTaskMainActivity(Activity activity){Intent intent = new Intent();...

2019-08-08 15:02:26

Android 静态代理和动态代理 看这一篇就够了

静态代理和动态代理根据加载被代理类的时机不同,将代理分为静态代理和动态代理。编译时就确定了被代理的类是哪一个,那么就可以直接使用静态代理;运行时才确定被代理的类是哪个,那么可以使用类动态代理。1、静态代理public interface Subject { public void sayGoodBye(); public void sayHello(String st...

2019-08-08 11:24:13

Android 签名机制原理解析和V1 、V2签名区别

一、什么是签名? 是确保消息来源的真实性 是确保消息不会被第三方篡改 1.基本信息基础必备1.1 消息摘要消息摘要,又称数字摘要 或 数字指纹. 简单来说,消息摘要就是在消息数据上,执行一个单向的 Hash 函数,生成一个固定长度的Hash值,这个Hash值即是消息摘要。正是由于以上特点,消息摘要算法被广泛应用在“数字签名”领域,作为对明文的...

2019-08-06 14:16:18

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。