互联网小熊猫
码龄4年
  • 228,683
    被访问
  • 308
    原创
  • 7,720
    排名
  • 19
    粉丝
关注
提问 私信

个人简介:互联网大厂开发人员,曾就职于腾讯、快手,目前就职于完美世界,有内推需求或者想咨询面试准备、offer选择,公司选择等问题的小伙伴可以关注我的微信公众号:互联网小熊猫

  • 目前就职: 完美世界
  • 加入CSDN时间: 2018-07-03
博客简介:

weixin_42600398的博客

查看详细资料
  • 5
    领奖
    总分 1,546 当月 221
个人成就
  • 获得61次点赞
  • 内容获得49次评论
  • 获得219次收藏
创作历程
  • 51篇
    2022年
  • 159篇
    2021年
  • 77篇
    2020年
  • 18篇
    2019年
  • 4篇
    2018年
成就勋章
TA的专栏
  • Android 知识总结
    12篇
  • 客户端日常工作总结
    285篇
  • 服务端
    3篇
  • 工具
    2篇
  • 云计算与大数据
    3篇
兴趣领域 设置
  • 移动开发
    kotlinflutterandroid studio
  • Android
    gradleandroid jetpackrxjava
  • 软件工程
    性能优化
  • 最近
  • 文章
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

排序算法总结

一、比较在冒泡排序之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²)。在归并排序、快速排序之类的排序中,问题规模通过分治法消减为logN次,所以时间复杂度平均O(nlogn)。二、冒泡排序(Bubble Sort)冒泡排序 是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。2.
原创
发布博客 2022.05.17 ·
34 阅读 ·
0 点赞 ·
0 评论

Android应用加固原理

一、前言Android开发者常常面临的一个问题就是防破解、 防二次打包。现如今安全问题越来越重要,越来越多的Android开发者也开始寻求安全的保护方案。二、什么是加壳?移动平台攻防技术的发展基本是沿着PC端发展轨迹在进行,从windows平台的加壳脱壳反调试到Andriod的平台apk加固,反调试代码混淆等。加壳是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。PC EXE文件加壳的过程如下:三、加壳作用和分类作用:加壳的程序可以
原创
发布博客 2022.05.11 ·
38 阅读 ·
0 点赞 ·
0 评论

BIO与NIO、AIO的区别

一、BIO同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。二、NIO同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。三、AIO异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。四、使用场景B
原创
发布博客 2022.05.11 ·
129 阅读 ·
0 点赞 ·
0 评论

volatile总结

一、volatile保证可见性的原理1.可见性问题可见性问题指的是一个线程在访问一个共享变量的时候,其他线程对该共享变量的修改对于第一个线程来说是不可见的,下面通过一个例子可以发现可见性问题。public class Visable { private static boolean flag = true; public static void main(String[] args) throws InterruptedException { new Thread(
原创
发布博客 2022.05.10 ·
39 阅读 ·
0 点赞 ·
0 评论

Java 虚拟机内存回收

一、原理java虚拟机内存回收主要就两个步骤,首先是找出要回收的对象,然后是清除掉标记的对象。二、标记算法1.引用计数算法给对象添加一个引用计数器,每被引用一次,计数器加一,引用失效时,计数器减一,计数器为0时对象不再可用。缺点:难以解决循环引用问题2.可达性分析算法(主流)从GC Root对象作为起点开始向下搜索,走过的路径称为引用链,从GC Root开始,不可达的对象被判为不可用。(1)可作为GC Root的对象栈中:虚拟机栈中,栈帧中的本地变量表引用的对象本地方法栈中,JNI引
原创
发布博客 2022.05.09 ·
52 阅读 ·
0 点赞 ·
0 评论

Android单例内存泄漏解决方案

一、背景项目中经常会出现一个ActivityManager来管理所有的activity,当Activity生命周期结束时,作为单例的ActivityManager还持有Activity的这个实例,因此引发了内存泄漏。二、解决方案这个时候,只能想到谷歌推荐使用的弱引用WeakReference,也比较简单,修改好的单例写法如下:package com.chaoxing.email.utils; import android.app.Activity;import android.content.
原创
发布博客 2022.05.07 ·
544 阅读 ·
0 点赞 ·
0 评论

Android Studio上运行Java的main函数

一、背景在Android studio中如果觉得运行apk慢想快速跑一下java代码可以在Android工程中写一个main函数,运行main函数要比运行apk快很多。二、实现方案1.在 .idea 的 gradle.xml 中标注的位置增加下面的内容即可<option name="delegatedBuild" value="false" />2.现在可以运行 MainJava 的 main 方法了,按照下图指示的方式,指定运行的 main 函数即可...
原创
发布博客 2022.05.07 ·
675 阅读 ·
0 点赞 ·
0 评论

Java内存区域

一、简介JVM运行时将数据分区域存储,强调对内存空间的划分。二、程序计数器(Program Counter Register)一块较小内存空间,可看作当前线程所执行的字节码行号指示器多线程实际上是通过线程轮流切换并分配处理器执行时间的方式来实现,即任一确定时间,一个处理器内核都只会执行一条线程中的指令,只不过切换得很快,不易察觉线程私有:切换后能恢复到正确执行位置,每个线程都要有一个独立额程序计数器若正在执行Native方法,则计数器数值为空三、Java虚拟机栈线程私有描述J
原创
发布博客 2022.04.21 ·
45 阅读 ·
0 点赞 ·
0 评论

Java内存模型总结

一、为什么要有内存模型?要想回答这个问题,我们需要先弄懂传统计算机硬件内存架构。1.硬件内存架构CPU去过机房的同学都知道,一般在大型服务器上会配置多个CPU,每个CPU还会有多个核,这就意味着多个CPU或者多个核可以同时(并发)工作。如果使用Java 起了一个多线程的任务,很有可能每个 CPU 都会跑一个线程,那么你的任务在某一刻就是真正并发执行了。CPU RegisterCPU Register也就是 CPU 寄存器。CPU 寄存器是 CPU 内部集成的,在寄存器上执行操作的效率要比
原创
发布博客 2022.04.20 ·
16 阅读 ·
0 点赞 ·
0 评论

kotlin中使用软引用

一、Java方式实现var str = String("asdf")val strSoftRef = SoftReference<String>(str)str = 二、kotlin委托实现委托属性,虽然常用by lazy,没看到别人的文章还想没想到这东西。看lazy大致可以了解委托的实现方式,结合一些文章差不多可以写成这样fun <T> weak(initializer: () -> T) = Weak(initializer.invoke())class
原创
发布博客 2022.03.31 ·
2516 阅读 ·
0 点赞 ·
0 评论

Android区分高低端机型

一、背景某些APP项目中需要针对高中低端安卓机型做不同的适配,例如:特效的开关、动画效果的调整等。怎么在项目中对Android进行高低端机型的区分?接下来的内容会进行分析。二、区分标准区分的标准最直观的就是跑分数据。参考现在最主流的跑分软件安兔兔,数据主要由4部分构成,内存(RAM)、CPU、GPU、IO(数据库、SD读写),其中内存、CPU、GPU性能构成主要占比,IO性能次要。内存和CPU是所有功能的根本,而GPU则是对游戏类应用影响更大些,因此在非游戏类的普通应用,更注重内存和CPU。三、技术
原创
发布博客 2022.03.30 ·
2273 阅读 ·
0 点赞 ·
0 评论

Android中设置org.gradle.jvmargs

一、配置文件gradle.properties文件二、作用Specifies the JVM arguments used for the daemon process.The setting is particularly useful for tweaking memory settings.org.gradle.jvmargs=-Xmx1536m上面的那两行是对这句话的解释:用于指定守护进程的JVM参数。这个设置呢,对于调整内存设置特别有用。1.那平常开发中它有什么用呢?主
原创
发布博客 2022.03.29 ·
1726 阅读 ·
0 点赞 ·
0 评论

Gradle中implementation、api、compileOnly区别详解

一、implementation和api的区别1.implementation:只能在内部使用此模块,比如我在一个libiary中使用implementation依赖了gson库,然后我的主项目依赖了libiary,那么,我的主项目就无法访问gson库中的方法。这样的好处是编译速度会加快,推荐使用implementation的方式去依赖,该依赖方式所依赖的库不会传递,只会在当前module中生效。2.api该依赖方式会传递所依赖的库,当其他module依赖了该module时,可以使用该module下
原创
发布博客 2022.03.29 ·
1377 阅读 ·
0 点赞 ·
0 评论

SSL协议总结

一、概念SSL协议位于TCP/IP协议与各应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol)、SSL握手协议(SSL Handshake Protocol)SSL握手协议:在SSL记录协议之上,会话层之下,在实际的数据传输开始前,协商加密算法、交换密钥、身份认证二、握手协议开始加密通信之前,客户端和服务器首先必须建立连接和交换参数,这个过程叫做握手(handshake)。假定客户端叫做爱丽丝,服务器叫做鲍勃,整个握手过程可以用下
原创
发布博客 2022.03.27 ·
73 阅读 ·
0 点赞 ·
0 评论

Android CheckBox与Spanned双重响应

一、问题描述客户端注册账号,需要用户确认用户协议及可以查看协议。选择使用单CheckBox控件配合SpannableString。但是遇到了一个问题,点击链接后CheckBox也响应了Click导致CheckBox勾选状态改变,这是不期望发生的。二、问题原因点击事件,从TextView的onTouchEvent入手@Override@Overridepublic boolean onTouchEvent(TextView widget, Spannable buffer, Mo
原创
发布博客 2022.03.24 ·
1294 阅读 ·
0 点赞 ·
0 评论

Android Service解析

一、简介Service是Android提供给开发者的一个组件,主要用于后台一些耗时任务的处理。其实Android系统中已经存在了很多这样在后台执行一些特定任务的系统级Service,比方说与我们开发中打交道最多的ActivityManager,WindowManager,PackageManager和InputManager等等。今天我们依然从具体使用场景来对Android中Service的具体功能进行分析。二、Service生命周期从图中可以看出Service的生命周期会根据启动方式的不同有不同的
原创
发布博客 2022.03.23 ·
143 阅读 ·
0 点赞 ·
0 评论

红黑树解析

一、二叉查找树和AVL树1.二叉查找树任意节点左子树不为空,则左子树的值均小于根节点的值.任意节点右子树不为空,则右子树的值均大于于根节点的值.任意节点的左右子树也分别是二叉查找树没有键值相等的节点.由二叉查找树的性质可知,构成二叉树的结构和插入数据的顺序有关,存在不稳定性。最好情况可以构建成平衡二叉树查找效率O(lgn),最坏情况也有可能构造成线性树(查找效率O(n))2.AVL树AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡。左右子树树
原创
发布博客 2022.03.23 ·
30 阅读 ·
0 点赞 ·
0 评论

Android RecyclerView总结

一、缓存机制由于ListView也是由它的缓存机制,并且比RecyclerView简单很多。而且RecyclerView缓存的本质和ListView的是差不多的,所以我先从简单的ListView看起。二、ListView的缓存机制每当要找一个目标 convertView时,ListView先会去找 RecycleBin(回收站)第一步:RecycleBin在ActiveView(即在屏幕上显示的、活跃的View)中寻找有没有目标View第二步:如果第一步没有找到,则取 Scrap View(即废
原创
发布博客 2022.03.19 ·
29 阅读 ·
0 点赞 ·
0 评论

Android事件分发原理

一、事件分发机制流程图当点击view的时候,最先响应的是它的父容器viewGroup,执行事件分发dispatchTouchEvent(MotionEvent e),在这个方法的内部会走它自身的onInterceptTouchEvent(MotionEvent e)进行事件拦截判断,如果该方法返回值为true(进行拦截),则该事件不会传递给它的子view,会走到viewGroup的onTouchEvent(MotionEvent e)事件;如果该方法返回为false(不进行拦截),则会传递给子view,子
原创
发布博客 2022.03.19 ·
24 阅读 ·
0 点赞 ·
0 评论

Android 点击短信链接打开App

一、背景随着APP产品的迭代,运营的过程中往往会有一些活动希望通知到用户,或者唤起沉睡用户,就我们Android而言,当然有推送,长连接一类的方法,但是,基于国内的推送环境,只能APP自己启动长连接,没有统一的系统级别的推送支持,导致沉睡用户无法送达的,除非你是微信这样的大佬才行,所以,此时通用一点方式就是通过短信发送一条活动链接,通过点击这条链接可以直接跳转到我们的APP。二、实现思路要唤起我们的App大致工作流程如下:所以,一共有三条线路可以到达我们的APP,在任何安卓版本中,我们走或者中间右
原创
发布博客 2022.03.13 ·
2414 阅读 ·
1 点赞 ·
0 评论
加载更多