自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 资源 (1)
  • 收藏
  • 关注

原创 app加固&apk文件防止反编译&apk打包流程

文章目录【1】Android上apk【2】直接放上原理图:(加壳原理)【3】后续时间充足 我会整理一篇app加固文章【1】Android上apkAndroid上可直接运行的文件类型是apk文件,它其实是一种zip文件。就好比windows上的exe文件。通过反编译apk可以获得dex文件和一些res文件,也可获得相应的java文件,从而也可以达到自定义apk,或者汉化等效果。但同时这也对某些apk来说是不安全的。所以有时会用到app加固技术。【2】直接放上原理图:(加壳原理)【3】后续时间

2021-11-30 15:59:11 8762 1

原创 Java中Synchronized和Lock的底层实现到底有什么区别

【1】synchronizedsynchronized通过monitor和mutex lock实现了互斥synchronized是通过每个对象与之相关的一个叫做监视器(monitor)来实现的监视器内有个组件是计数器,默认值为0,当计数器为0,尝试加锁,加锁成功,计数器加1(本线程可以多次获取这个锁,可重入)其他线程发现计数器不为0,加锁失败进入阻塞监视器锁本质是依赖于底层的操作系统的Mutex Lock是互斥锁来实现的Mutex Lock指令的调用需要从用户态转换到核心态成本非常高,造

2021-10-16 20:17:07 540

原创 Java进阶—— volatile 、JMM、双重检查以及创建单例对象的时候为什么要加volatile关键字?

文章目录【1】volatile的原理是什么?【2】关于JMM(清楚volatile的前提)【3】volatile变量的特性【4】doublecheck创建单例为什么需要加volatile?【1】volatile的原理是什么?volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个lock前缀指令,lock

2021-10-16 17:04:05 313

原创 JVM之内存结构

文章目录【1】JDK、JRE、JVM的区别和联系【2】我们写的`.java`文件是怎么执行的 `JVM `扮演了什么角色?【3】JVM的内存划分一、Java虚拟机栈二、本地方法栈三、方法区四、堆【1】JDK、JRE、JVM的区别和联系JRE(Java Runtime Environment, Java运行环境)是Java平台,所有的程序都要在JRE下才能够运行。包括JVM和Java核心类库和支持文件。JDK(Java Development Kit,Java开发工具包)是用来编译、调试Java

2021-09-07 22:57:33 624 7

原创 RxJava核心思想(看懂再学RxJava)

文章目录【1】背景知识(异步与观察者模式)【2】RxJava有什么作用?【3】RxJava使用的模式:观察者模式【4】 RxJava的核心思想(流的思想)【5】最简单的使用:【6】 推荐阅读学习的RxJava好文【1】背景知识(异步与观察者模式)官网地址:https://github.com/ReactiveX/RxJava在很多软件编程任务中,或多或少你都会期望你写的代码能按照编写的顺序,一次一个的顺序执行和完成。但是在ReactiveX(RX)中,很多指令可能是并行执行的,之后他们的执行结果才会

2021-08-11 17:11:05 383

原创 十分钟深刻理解Java高级特性——反射

文章目录【0】在学习反射之前我们必须知道的一些知识(前言)①什么是class类?有什么用?②“一个类(而不是一个对象)在 JVM 中只会有一个Class实例”是什么意思【1】反射是什么?【2】反射有什么作用?一、我们直接来上一张图给出反射的作用!二、Java提供反射主要有那些用处?【3】我们如何使用反射?①获取Class对象(使用反射就必须要先获取Class对象)②利用反射创建实例③获取构造器信息④获取成员变量信息⑤调用实体类中的方法1. 首先需要获取类中的方法——4中方法(同上述获取构造器和属性类似):2

2021-07-13 22:41:07 237 3

原创 10分钟深刻理解 Java高级—— 注解

文章目录【1】什么是注解?【2】注解有什么用?【3】如何使用注解?一、如何声明注解?二、什么是元注解?①`@Target`作用②`@Retention`作用(特别重要)`RetentionPolicy.SOURCE``RetentionPolicy.CLASS``RetentionPolicy.RUNTIME`③`@Documented `作用④`@Inherited `作用有4个元注解,但我们平时通常使用两个元注解:`Target`,`Retention`【1】什么是注解?Java 注解(Anno

2021-07-11 22:39:34 108 2

原创 Android 必懂系列 —— handler机制【由浅及深到源码分析】(含ThreadLocal原理)

【1】handler在Android 开发中到底有什么用?首先我们要先搞懂handler到底被设计出来有什么用。——一种东西被设计出来肯定就有它存在的意义,而Handler的意义就是切换线程。(线程间通信) 常用的场景就是:网络交互后切换到主线程进行UI更新。(1) 为什么不直接在子线程更新UI?Android的UI是线程不安全的,肯定不能同时多个线程操作UI线程。如果加锁又会降低UI的效率,所以通常不能在子线程更新UI。【2】handler的简单使用如下:public class MainAc

2021-05-06 18:18:03 856 32

原创 Android 进阶系列———由浅及深的理解和使用RecyclerView+吸顶效果实战

【1】什么是RecyclerView?我们为什么要是用RecyclerView?

2021-04-07 15:28:19 466

原创 Android --- 实现自定义View绘制动画——游动的小鱼

【Android自定义游动的锦鲤】自定义绘制一条可以游动的锦鲤,手指点击时,产生水波纹扩散效果,锦鲤可以游动到手指点击的位置,并且游动时摆动加快,效果逼真GitHub资源地址: Smart_Koi

2021-04-05 17:11:29 418

原创 Android 自定义View之文本绘制及文字颜色渐变效果

【1】聊到自定义View的文本绘制,首先看看如何自定义View①继承View类,重写构造方法(通常是三个)②重写onMeasure和onDraw方法例如:public class MyTextView extends View { public MyTextView(Context context) { super(context); } public MyTextView(Context context, @Nullable AttributeSet .

2021-03-25 14:54:50 1107

原创 Android ViewPager2+Fragment+TabLayout的简单使用

【1】ViewPager的简单使用来看个ViewPager的简单使用的例子(使用Androidx包下的ViewPager,不是ViewPager2)看看主界面中的布局:<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns.

2021-03-23 17:34:57 5692 5

原创 Android 必懂系列 —— 事件冲突及解决方案(源码分析)

还不知道事件分发的朋友可以先去看看我的另一篇事件分发后再来看时间冲突——事件分发【1】什么是时间冲突?简单来说就是,一个动作(down,move等)只能由一个View或者ViewGroup处理,而有时我们希望ViewA处理这个事件,但是却是ViewB处理的这个事件,这时我们就说产生了时间冲突。【2】解决事件冲突的常用方案注意:解决事件冲突只能在Move动作的时候①外部处理外部处理就是在希望处理的子View的父容器中处理②内部处理直接在希望处理的容器中处理【3】先来过一遍Move的

2021-03-22 19:47:53 3254

原创 Android 必懂系列 —— 事件分发(源码分析)

【1】什么是事件分发?所谓事件分发,就是将一次完整的点击所包含的点击事件传递到某个具体的View或ViewGroup,让该View或该ViewGroup处理它(消费它)。分发是从上往下依次传递的,其中可能经过的对象有最上层Activity,中间层ViewGroup,最下层View。例如在屏幕中有一个Button控件,点击它时该次点击事件就会从Activity传到Button所在的ViewGroup,最后传到该Button控件去处理它。即事件分发就是从上往下依次遍历,直到找到能够处理消费这次点击事件的V.

2021-03-22 15:30:01 455 1

原创 Android 必懂系列 Activity的布局层次 加载流程 详解(源码分析)

首先来看到下面的图片可以帮助我么更好地理解层次下面我们根据这个图的顺序来源码分析:【1】Activity 的创建原理我们activity的创建是需要了解AMS的(ActivityManagerService 简称AMS,是Android内核的核心功能之一,在系统启动SystemServer时启动此服务。),此篇文章先跳过AMS部分讲解更好理解,可以把AMS看成一个黑盒子。1 activity的创建从ActivityThread开始,在里面的performLaunchAc...

2021-03-18 15:29:58 559 1

原创 Android bitmap压缩 性能优化

Android中bitmap压缩,性能优化。后续有时间整理

2023-02-21 16:21:44 235 1

原创 Gradle相关的知识学习

Gradle快速学习

2023-02-17 14:59:51 233

原创 OKHttp五大拦截器

文章目录【1】五大拦截器总体概述一、责任链设计模式①定义:②为什么要使用责任链模式【2】拦截器的工作流程一、默认的5大拦截器有哪些?【3】RetryAndFollowUpInterceptor拦截器一、重试二、重定向【4】BridgeInterceptor 桥接拦截器【5】CacheInterceptor缓存拦截器【6】ConnectInterceptor连接拦截器【7】CallServerInterceptor请求服务连接器【8】总结【1】五大拦截器总体概述OkHttp最核心的工作是在 getResp

2022-05-30 19:58:35 5976

原创 OKHttp分发器源码分析(两个版本)

OkHttp【1】使用方式(流程)【2】异步两个队列 等待队列和running队列readyAsyncCallrunningAsynCall放入running条件running当前任务数小于规定的max值(默认64)(考虑到手机压力)且running队列里面正在访问的host和当前host相同的任务不能超过5个(减少服务器压力)...

2022-05-30 11:32:45 577

原创 智慧食堂项目简介

智慧食堂App【1】智慧食堂app是为了学生方便用餐而设计的一款app,目前正在开发中包括以下功能:堂食就餐、预约取餐 、外卖送餐【2】软件剪影:进入软件主页面:点菜页面【4】我做的部分页面:个人信息的相关页面:信息全部从后端获取(个人信息、地址列表等等)...

2022-02-23 11:01:46 1806

原创 关于recyclerView中ViewHolder中的几种不同方式获取position有什么区别

推荐:「RecyclerView中的位置」你真的会正确获取Item的位置么?https://www.jianshu.com/p/49f1a9934aa5

2022-02-12 16:07:19 2128

原创 Git reset的三种模式 傻傻分不清楚

文章目录【1】关于Git reset有三种模式【2】实例手把手讲解2.1 首先我们新建一个项目2.2 然后创建Git进行管理2.3 两次提交方便等会回滚2.4 soft模式讲解:2.5 mixed模式讲解:2.6 hard模式讲解:【1】关于Git reset有三种模式①soft:将版本回滚,工作区不动,暂存区=原来的+回滚后和回滚前的版本差异②mixed:将版本回滚,回滚到了所有 git add 和 git commit 的命令执行之前。暂存区变为空,全部到了工作区③hard:将版本回滚,将所

2021-11-30 13:07:25 1724

原创 Android中如何进行组件化、模块化开发

推荐一篇写的不错的Android模块化开发 博客,很详细:Android模块化知识分享https://juejin.cn/post/6993951889410752519#heading-7

2021-11-26 17:04:46 2136 2

原创 Java 驼峰命名转下划线命名(能正确处理连续HTTP等大写)

程序员快乐的一天?加班还是不加班?

2021-10-24 09:43:58 736

原创 JVM 对象分配流程 & GC机制

在这里我推荐一位朋友写的不错的文章:对象的分配及垃圾回收机制——JVM(2):https://blog.csdn.net/afdafvdaa/article/details/119778385

2021-10-16 21:02:13 139

原创 深入了解Java内存模型——JMM

这篇文章可能有点长,但是他想的非常详细从多核CPU+多线程引发的缓存一致性问题等来引出JMM的必要性,个人认为是一篇高质量的博客终于有人把Java内存模型(JMM)说清楚了https://www.jianshu.com/p/8420ade6ff76...

2021-10-16 19:56:09 126

原创 Java中任何一个对象(包括类对象)什么时候与一个Monitor对象相关联

本人没有验证过:这个monitor是用c++实现的叫objectmonitor。java实例对象里面记录了指向这个monitor的地址,这个c++的monitor对象里面记录了当前持有这个锁的线程id。

2021-10-16 19:39:37 297

原创 项目经验-

【1】项目一:一、软件设计大赛 —— 打卡软件(队长)效果图:项目地址:https://gitee.com/zjcoming/SWU_signIn时间及背景:大二上学期参加这个项目的时候,知识体系不完善,很多必修课程都没有学习,如计算机网络。所以这个项目来之不易,是一次次碰壁摸索出来的。任务分工:我主要负责:全部Android端和部分后端开发项目要求:开发Android APP,主要实现签到功能。包括用户注册;用户登录;用户签到(签到时用户需要填写相关信息如健康信息,位

2021-10-15 09:46:05 374

原创 JetPack 使用推荐

关于Android中JetPack之AAC架构的相关知识推荐 胡飞洋的blog:链接:https://juejin.cn/post/6915012483421831175

2021-10-12 14:45:43 114

原创 关于Java中的接口回调和retrofit中的反射

文章目录【前言】【1】情景假定一、最容易想到的方式二、接口回调①不定义接口②定义接口③为什么retrofit中大量用到反射和动态代理?【前言】以前总是碰到Java接口回调这个东西,每次都半懂不懂的,然后以为自己懂了,就放在旁边不管了,Android中现在用JetPack中的ViewMode后,接口回调用得少。过了很久让我来回答什么是接口回调的时候我又想不起来了。那今天就把他通透的梳理一遍,以免以后又要花半天时间来搞懂这个问题。【1】情景假定我们假定有这样一个情景,B类中有一个int类型的数据,C

2021-10-12 13:29:28 192

原创 算法——分治、递归解决汉诺塔问题

package algorithm.HanoiTower;public class HanoiTower { public static void main(String[] args) { hanoiTower(3,'A','B','C'); } /** * 分治,递归处理汉诺塔问题 * @param n 圆盘的个数 * @param a A柱子 * @param b B柱子 * @param c C柱子

2021-10-10 19:03:21 249

原创 算法——二叉排序树的建立中序遍历

文章目录【1】代码:①Node节点②BST binarySortTree二叉排序树:③ 测试代码:【2】测试结果:【1】代码:①Node节点package algorithm.tree.binarySortTree_BST;public class Node { int val; Node left; Node right; public Node(int val) { this.val = val; } @Override

2021-10-10 16:26:45 299

原创 算法——堆排序(大根堆--升序)

文章目录【1】堆排序基本介绍【2】堆排序重难点①如何由一个无序序列建成一个堆?②如何在输出堆顶元素后,调整剩余元素成为一个新的堆【3】代码:【4】测试结果:【1】堆排序基本介绍升序采用大顶堆、降序采用小顶堆【2】堆排序重难点①如何由一个无序序列建成一个堆?②如何在输出堆顶元素后,调整剩余元素成为一个新的堆【3】代码:package algorithm.sort.heapSort;import java.util.Arrays;/** * 大根堆,升序排序 */publ

2021-10-09 11:48:00 1533

原创 算法——建立线索二叉树

文章目录【0】建立线索二叉树和遍历线索二叉树基本上是一样的【1】代码:一、`TreeNode`节点:二、`BinaryTree`二叉树三、线索二叉树【2】测试【0】建立线索二叉树和遍历线索二叉树基本上是一样的建立如图二叉树:黑色的箭头表示线索!!!【1】代码:一、TreeNode节点:public class TreeNode { int no; String name; TreeNode left; TreeNode right; //用0表示指向左

2021-10-08 19:47:32 242

原创 算法——后序遍历二叉树(递归)

【1】正确序列:应该为2-4-3-1【2】代码:树节点:public class TreeNode { int no; String name; TreeNode left; TreeNode right; public TreeNode(int no, String name) { this.no = no; this.name = name; } @Override public St.

2021-10-08 15:15:38 966

原创 算法——中序遍历二叉树(递归)

【1】正确序列:应该为2-1-3-4【2】代码:树节点:public class TreeNode { int no; String name; TreeNode left; TreeNode right; public TreeNode(int no, String name) { this.no = no; this.name = name; } @Override public S..

2021-10-08 15:13:35 2641

原创 算法——前序遍历二叉树(递归)

【1】正确序列:应该为1-2-3-4【2】代码:树节点:public class TreeNode { int no; String name; TreeNode left; TreeNode right; public TreeNode(int no, String name) { this.no = no; this.name = name; } @Override public St.

2021-10-08 15:09:37 518

原创 数据结构——自写简易哈希表(Java)

【1】HashTable原理【2】说明通过数组加链表的方式实现只实现了添加和打印方法,其余方法类似【3】代码: package algorithm.hashTable;/** * 使用数组加链表的方式实现 */public class MyHashTable { public static void main(String[] args) { Hash hashTable = new Hash(5); Element e1 = new

2021-10-08 13:16:56 88

原创 算法——插值查找

【1】引子当数组为【0,1,2,3,4,5......100】时,查找100使用二分查找需要查多少次呢?要经过多次的查找才能查找到100,对于这种分布均匀的数组,能不能改善一下查找的次数呢?—— 插值查找算法。对于数据量较大,关键字分布比较均匀的查找表来说,采用插值查找, 速度较快.关键字分布不均匀的情况下,该方法不一定比折半查找要好这样算出的mid值,考虑了真实数值的大小,将要查找的数在整个数组中的占比算了出来。自适应算法。/** 插值查找 * 自适应算法 * @

2021-10-07 17:06:01 97

原创 算法——二分查找

二分查找算法(递归方式): /** * 二分查找法(递归) * * @param arr * @param val */ public static int binary(int[] arr, int left, int right, int val) { if (right < left) return -1; int mid = (left + right) / 2;

2021-10-07 15:58:01 58

SmartKoi.zip

【Android自定义游动的锦鲤】自定义绘制一条可以游动的锦鲤,手指点击时,产生水波纹扩散效果,锦鲤可以游动到手指点击的位置,并且游动时摆动加快,效果逼真

2021-04-05

空空如也

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

TA关注的人

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