自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 资源 (4)
  • 收藏
  • 关注

原创 CheckBox/RadioButton切换动效实现

文章基于对CompoundButton组件的分析,并结合Lottie动画来完成CheckBox/RadioButton的动画过渡。另外也附上了Switch组件自定义动画的思路

2023-06-11 15:11:55 1607 1

原创 kotlin 消除!!强制非空

kotlin 消除强制非空!!的基本方法介绍

2022-09-09 11:41:38 1106

原创 Android 实现嵌套滑动

前言Android实现简易滑动上次文章中实现了简易的ScrollerView滑动,但实际使用中许多场景都会涉及到嵌套滑动,在今天的博文中我们基于上次的ScrollLayout来进一步实现嵌套滑动。嵌套滑动预备知识:Android实现简易滑动整体页面结构<?xml version="1.0" encoding="utf-8"?><com.example.nestedscroll.ScrollParentLayout xmlns:android="http://

2022-03-07 11:02:32 4609

原创 Android 实现简易版ScrollView

前言学习过view内容滑动相关知识,想实践下view内容的滑动以及惯性滑动如何实现。实现完整实现:https://github.com/18839779221/test/blob/main/app/src/main/java/com/example/scroll/ScrollLayout.ktScrollView控件的高度和内容的高度前提:View只有当其内容高度大于控件高度的情况下,才能够竖直滑动。使用过ScrollView的朋友应该会清楚,ScrollView只能有一个子控件..

2022-03-07 10:46:02 2794

原创 Android 滑动方向整理

view滑动滑动后不支持在 Docs 外粘贴 blockView向下flingfling前(ACTION_UP的时机)不支持在 Docs 外粘贴 blockView向下fling(computeScroll时机)不支持在 Docs 外粘贴 block总结与实际的scroll相关的方向都是以向上为正方向,包括:scrollY canScrollVertically(dicection: Int) direction的值 scroll..

2022-03-07 10:37:59 2658

原创 offsetLeftAndRight()和setTranslationX()的区别

前言view的最终展示效果由view.x和view.y来决定view.x = mLeft + translationXview.y = mRight + tranlationY异同相同点:两种方式都可以移动view。不同点:offsetLeftAndRight(offset: Int)修改的是view的mLeft或mRight,其内部传入的是相对值。 setTranslationX(translation: Int)修改的是view的translation值,传入的是tra

2021-08-16 11:06:23 1004

原创 Android简单日志封装,类名+方法名为Tag

前言Android的日志类使用方式一般为Log.e(TAG,msg)Tag值的命名一般都让人头疼,常见的做法是将Tag设为类名,但每次要打log都得给类设置一个TAG变量,写着很烦人。此篇的目的便是解决此问题,将TAG的命名抽取出来,我们只需要关心Log的msg即可。直接上代码/** * @desc: 通用的日志类,包装了Tag 格式:[类名].[方法名]:[代码行] */object LogUtil { private const val BASE_CLASS.

2020-11-17 14:02:46 800

原创 Lifecycle + LiveData + ViewModel源码解析

一 简介Lifecycle 是 Jetpack 整个家族体系内最为基础的内容之一,为上层的LiveData、ViewModel等等更上层的组件提供监听 Activity、Fragment、Service、甚至 Process 的生命周期变化的统一方式。LiveData 是 Jetpack 家族的一种响应式开发框架,类似框架有还RxJava等。以数据驱动的方式更新UI,并且由于其基于Livecycle,能够感知组件生命周期变化,只会更新活跃的组件的状态,并在组件销毁时能自动解除对该组件的监听。ViewM

2020-10-18 12:35:16 379

原创 Handler -- 为什么Looper的loop()不会导致主线程卡死

结论初始化后,所有主线程做的事情都是在looper.loop()中完成的,因为主线程不做其他事,所以不会卡死基于linux的epoll模型,当主线程没有message消费时,会进入睡眠状态(简单理解),等到有新的可消费的Message时,再转为活跃状态处理Message(类似一个事件回调)。主线程在睡眠状态会让出CPU,并不是一直不停在执行循环。要了解下epoll机制可以看看这篇文章:NIO相关基础篇产生此疑问的前提怎么执行到looper.loop()首先得分析下ActivityThread

2020-10-16 13:51:51 1068

原创 239. 滑动窗口最大值

题目给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释: 滑动窗口的位置 最大值--------------- ...

2020-09-04 18:36:48 107

原创 二叉搜索树 根据前序序列求中序序列

代码 public int[] getMidTravel(int[] a){ int[] result = new int[a.length]; getMidTravel(a,0,a.length-1,result,0); return result; } public void getMidTravel(int[] a,int begin,int end,int[] result,int offset){ if(

2020-08-24 18:26:04 947

原创 148. 排序链表

在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路由于时间复杂度在O(nlogn),容易想到归并排序和堆排序,由于堆排序需要能够按index访问,并不适合链表,递归的归并排序空间复杂度O(logn),不满足常数空间复杂度要求,...

2020-07-19 20:37:16 138

原创 143. 重排链表

题目给定一个单链表L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.思路正常的想法是,找到第n个节点插入0和..

2020-07-04 23:04:19 158

原创 剑指 Offer 45. 把数组排成最小的数

题目输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。示例 1:输入: [10,2]输出: "102"示例2:输入: [3,30,34,5,9]输出: "3033459"思路每两个数逐个比较,如果两个数共有的高位能比较出大小,则比较成功,如23和221比较。否则得试着将两个数字拼接为相等长度。比较的方法:举例,320和32比较,应该解析为32032和32323比较(即不断循环原数字,直到两个数字长度之和)代码class.

2020-06-30 21:35:18 94

原创 79. 单词搜索

题目给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给定 word = "ABCCED", 返回 true给定 word = "SEE", 返回 true给定 word = "AB...

2020-06-28 23:24:01 140

原创 Java后端开发面试笔记总结(超详细,不看后悔hh)

前言 刚刚经历了3-4两个月的找Java实习的经历,虽然结果并不算完美(只收获几个小厂的offer),但复习准备的经历也算是收获颇丰,更加深刻的理解了Java相关的源码知识,能够静下心来研究平常不会去考虑的JVM,并发编程等知识,经历过这样的复习后能够更加认识到理论知识的重要性。分类Java面试题大体有如下几大类:JDK源码 数据库 JVM Java并发编程 Spring框架 计算机网络 算法 Linux命令(个人没怎么复习,所以本文不考虑) Redis(可选)...

2020-05-12 00:33:17 2216

原创 深入理解Java虚拟机 笔记

基于《深入理解Java虚拟机第二版》周志明 一书整理的笔记注:使用Sublime Text编辑的,博客显示效果并不理想,可粘贴到本地使用Sublime Text打开阅读。运行时数据区: 程序计数器(Program Counter Register):当前线程执行字节码的行号指示器,通过修改指示器位置来取下一条指令。 如果执行的是Native方法,则计数器指为Undefined Java虚拟机栈(Java Virtual Machine Stacks):基本单...

2020-05-11 23:53:47 317

原创 mysql数据库(InnoDB引擎)笔记

基于《MySQL技术内幕(InnoDB存储引擎)第2版》一书整理的笔记存储引擎是基于表的,而不是基于数据库的。MyISAM引擎不支持事务,不支持行级锁,支持全文索引,主要面向一些OLAP数据库应用。MyISAM的缓冲池只缓存索引文件,不缓存数据文件。InnoDB后台线程: Master Thread: 日志缓冲刷新到磁盘,刷新脏页到磁盘,合并插入缓冲,UNDO页的回收。 IO Thread: InnoDB大量使用AIO来处理I/O请求。Inn...

2020-05-11 23:43:32 334

原创 703. 数据流中的第K大元素

题目设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的KthLargest类需要一个同时接收整数k 和整数数组nums的构造器,它包含数据流中的初始元素。每次调用KthLargest.add,返回当前数据流中第K大的元素。示例:int k = 3;int[] arr = [4,5,8,2];KthLargest kt...

2020-04-21 18:46:29 284

原创 202.快乐数

题目:编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:12 + 92 =...

2020-04-16 16:27:29 195

原创 非递归实现二叉树的前中后序遍历和层次遍历

前中后序遍历的非递归实现均采用栈结构实现,层次遍历采用队列实现。先序遍历:思路:1最开始根节点入栈2循环中每次向栈中取一个节点,访问该节点。将其左右子树入栈,直至栈为空为止。注意:由于栈是先进后出的数据结构,先将右子树入栈,再将左子树入栈,才能得到中左右的访问顺序。代码: //先序遍历 public static void travelFirst(Tre...

2020-04-11 21:16:40 478

原创 面试题52. 两个链表的第一个公共节点《剑指offer 第二版》

题目:输入两个链表,找出它们的第一个公共节点。如下面的两个链表:在节点 c1 开始相交。思路:将链表按尾端来对齐,从前向后遍历找到第一个公共节点。具体实现:计算出两个链表的长度,分别为lenA,lenB。哪个长就将哪个链表向后遍历|lenA-lenB|的长度,然后两个链表同时向后遍历找到第一个公共节点。代码:/** * Definition for sing...

2020-04-09 14:38:16 223

原创 面试题38. 字符串的排列《剑指offer(第二版)》

题目输入一个字符串,打印出该字符串中字符的所有排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。示例:输入:s = "abc"输出:["abc","acb","bac","bca","cab","cba"]题解1:基于选择的排列思路:多次对字符串进行遍历,用StringBuffer来存储选择的字符,每次对于每个字符都可以选择加入或者不加入St...

2020-03-23 18:20:49 298

原创 面试题09. 用两个栈实现队列《剑指offer(第二版)》

问题描述用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输...

2020-03-20 19:36:42 263

原创 字符串匹配--使用KMP算法求解

仅记录下代码,可求出所有匹配字符串的首字符下标public class Main3 { public static void main(String[] args) { char[] s = new String("AABAACAADAABAABA").toCharArray(); char[] t = new String("AABA").toCh...

2019-11-30 17:09:43 154

原创 64. 最小路径和

题目:给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。代码:动态规划法:class Solution { public i...

2019-11-22 20:55:09 152

原创 最长公共子序列--动态规划法求解

题目:Description给定两个字符串,返回两个字符串的最长公共子序列(不是最长公共子字符串),可能是多个。Sample Input 11A2BD3G4H56JK23EFG4I5J6K7Sample Output 123G456K23G45JK思路:先通过动态规划法求出每个位置的最长公共子序列长度的dp数组(从开始位置到当前位置)。再根据dp数组求解具...

2019-11-14 16:38:21 317

原创 27. 移除元素

题目:给定一个数组 nums和一个值 val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums...

2019-10-18 13:24:12 134

原创 26. 删除排序数组中的重复项

题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例...

2019-10-18 13:06:14 127

原创 25. K 个一组翻转链表

题目:给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当k= 2 时,应当返回: 2->1->4->3->5当k= 3 时,应当返回: 3...

2019-10-18 12:39:59 126

原创 24. 两两交换链表中的节点

题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.思路:考察链表的节点交换操作,具体交换如下图代码:/** * Definition for singly-linked l...

2019-10-18 10:51:30 159

原创 23. 合并K个排序链表

题目:合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6思路1:和普通的两个有序数组排序的方法类似,每次选出n个链表当前所指元素中的最小值加入新的链表,直到...

2019-10-18 10:29:47 158

原创 22. 括号生成

题目:给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]思路:核心思想是 组合算法的应用。首先介绍组合算法。从m个元素取n个元素,不考虑取出顺序。一种代码实现:(基于深度遍...

2019-10-16 23:57:01 123

原创 21. 合并两个有序链表

题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4思路:整体思路类似归并排序,选择两个链表 l1,l2 中较小的元素加入新的链表l3,最后若l1,l2中一个遍历完,另一个链表还有元素未遍历,则...

2019-10-15 19:16:30 121

原创 20. 有效的括号

题目:给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false思路...

2019-10-15 18:45:52 128

原创 19. 删除链表的倒数第N个节点

题目:给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?思路:设置一个指针q,指向当前扫描元素p的第前n+1个元...

2019-10-15 14:37:38 132

原创 18. 四数之和

题目:给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四...

2019-10-15 14:21:44 141

原创 17. 电话号码的字母组合

题目:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].代码:class Solution { public List&l...

2019-10-15 13:50:53 149

原创 16. 最接近的三数之和

题目:给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).思路:延续第15题的双指针...

2019-10-15 10:38:58 125

原创 15. 三数之和

多的不说,各种特殊情况加超时,恶心到了,头疼参考博客:https://blog.csdn.net/God_Mood/article/details/87081242

2019-10-15 10:17:05 148

Java反汇编工具集.zip

Java反汇编工具集,包括apktool1.4.1,dex2jar-2.0和jd-gui-windows-1.6.3。可用于反汇编Java项目或Android项目。Android项目可根据apk生成对应反汇编源码(和原先源码不一定完全相同),可还原项目依赖的各种资源文件(src/main/res文件夹下的资源)

2020-05-17

图解设计模式(结城浩)23种设计模式 示例代码

图解设计模式(结城浩)一书中,所有23种设计模式代码

2019-04-29

jnetpcap源码和完整API文档

网上找到的源码大多不全,只是提供了org.jnetpcap中的部分包,本API文档是根据jnetpcap源码手动生成的

2019-04-09

jnetpcap.jar

jnetpcap.jar java抓包工具, JNetPcap是由Sly Technologies开发的开源DPI(Deep Packet Inspection)SDK。 Java平台底层不支持底层网络操作,需要通过JNI封装不同系统提供的C库提供Java访问方法。JnetPcap主要有下面四个特点: 提供几乎所有libpcap类的封装 实时解码抓取到的数据包 提供多种类的网络协议解析库 通过使用SDK用户可以轻松的扩展网络协议 通过native和Java实现,来优化解码过程

2019-04-09

空空如也

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

TA关注的人

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