- 博客(248)
- 资源 (4)
- 收藏
- 关注
原创 RecycleView item显示与xml中显示不一样解决方案
理想效果:实际效果:item布局:<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools...
2019-08-13 11:29:28
368
1
转载 UDP稳定传输讲解(简单理解)
用户数据报协议UDPUDP主要特点 : 无连接 尽最大努力交付 面向报文 : 应用层交下来的报文直接加上UDP头部就往IP层扔, 不合并也不拆分 没有拥塞控制 支持一对一, 一对多, 多对一和多对多的交互通信 首部开销小, 只有8个字节 UDP首部格式 源端口 : 源端口号. 在需要对方回信时选用, 不需要则全0 目的...
2019-08-09 14:32:29
3551
原创 Binder机制最简单易懂的讲解
一、引言Android系统已经有其他的IPC方式,管道,Socket等,为什么还要使用Binder呢?1.1 性能方面Binder数据拷贝只需要一次,管道,消息队列,Socket都需要两次共享内存实现方式较复杂1.2 安全方面传统通信方面对身份并没有做出严格的验证,比如Socket通过IP通信很容易伪造Binder支持双方身份的验证,安全性高二、Binder概述...
2019-08-05 15:06:57
514
转载 App安全之网络传输安全
移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全。所以当我们谈论App安全问题的时候一般来说在以下三类范畴当中。App代码安全,包括代码混淆,加密或者app加壳。 App数据存储安全,主要指在磁盘做数据持久化的时候所做的加密。 App网络传输安全,指对数据从客户端传输到Server中间...
2019-08-01 16:40:03
632
原创 为什么HashMap链表长度超过8会转成树结构
首先红黑树的插入、删除和遍历的最坏时间复杂度都是log(n),TreeNodes的大小是常规Nodes的两倍,所以只有桶中包含足够多的元素以供使用时,我们才会使用树。那为什么这个数字是8呢?进入HashMap源码我发现了这个权衡依据是以上情况符合泊松分布(一种统计与概率学里常见到的离散概率分布,适合于描述单位时间(或空间)内随机事件发生的次数),用0.75作为加载因子,每个碰撞位...
2019-08-01 14:01:06
1369
3
转载 史上最详细的HashMap红黑树解析
HashMap红黑树解析 红黑树介绍 TreeNode结构 树化的过程 红黑树的左旋和右旋 TreeNode的左旋和右旋 红黑树的插入 TreeNode的插入 红黑树的删除 TreeNode的删除节点 本篇主要从以下几个方面介绍: 讲解红黑树的部分算是理论部分,讲解TreeNode的部分则是代码实践部分,配合服用效果更加。 保守估计,仔细食用本篇...
2019-08-01 11:10:12
1125
转载 Android runOnUiThread()源码详解以及实现
在Android开发的过程中,主线程主要来完成UI绘制和响应用户的操作,默认情况下,我们大部分的代码都是在主线程中执行的,因此我们时刻要考虑主线程的情况。我们都知道要开启一个子线程来完成一个耗时操作,以避免阻塞主线程影响用户体验,甚至ANR。但是子线程执行完要更新UI的时候,我们又必须回到主线程来更新,实现这一功能常用的方法是执行Activity的runOnUiThread()方法:r...
2019-08-01 10:25:22
1275
转载 Handler内存泄漏详解(包含Java内部类详解)
内部类详解传送门:https://blog.csdn.net/hacker_zhidian/article/details/82193100handler是我们在更新UI时经常使用到的类,但是不注意的话,很容易就导致内存泄露,最后导致OOM,故现在探究下handler导致内存泄露的原因及有哪些常用的解决办法。先看下面一段代码:可以看到这段代码编辑器为我们标出了黄色,并且提示如下:...
2019-08-01 10:15:36
236
转载 常见的进程调度算法
原文链接:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/6279804.html调度算法是指:根据系统的资源分配策略所规定的资源分配算法。常见的进程调度算法有: 1.先来先去服务 2.时间片轮转法 3.多级反馈队列算法 4.最短进程优先 5.最短剩余时间优先 6.最高响应比优先 7.多级反馈队列调度算...
2019-07-29 11:09:44
1685
转载 从concurrentHashMap看CAS的基础原理
原文地址:https://blog.csdn.net/weixin_42636552/article/details/82383272本篇的思路是先阐明无锁执行者CAS的核心算法原理然后分析Java执行CAS的实践者Unsafe类,该类中的方法都是native修饰的,因此我们会以说明方法作用为主介绍Unsafe类,最后再介绍并发包中的Atomic系统使用CAS原理实现的并发类。无锁的概念...
2019-07-26 16:15:46
573
转载 ReentrantLock重入锁最通俗易懂的讲解(故事说明)
通过一个故事理解可重入锁的机制1、听故事把知识掌握了在一个村子里面,有一口井水,水质非常的好,村民们都想打井里的水。这井只有一口,村里的人那么多,所以得出个打水的规则才行。村长绞尽脑汁,最终想出了一个比较合理的方案,咱们来仔细的看看聪明的村长大人的智慧。井边安排一个看井人,维护打水的秩序。打水时,以家庭为单位,哪个家庭任何人先到井边,就可以先打水,而且如果一个家庭占到了打水权,其家...
2019-07-24 15:29:25
505
转载 解决Hash冲突的方法总结
Hash碰撞冲突我们知道,对象Hash的前提是实现equals()和hashCode()两个方法,那么HashCode()的作用就是保证对象返回唯一hash值,但当两个对象计算值一样时,这就发生了碰撞冲突。如下将介绍如何处理冲突,当然其前提是一致性hash。1.开放地址法开放地执法有一个公式:Hi=(H(key)+di) MOD m i=1,2,…,k(k<=m-1)其中,m为哈希...
2019-07-24 11:10:57
695
转载 HashSet集合是如何保证元素的唯一性的?
HashSet集合的特点是元素无序和不重复。首先,HashSet的底层数据结构是哈希表。哈希表就是存储一系列哈希值的表,而哈希值是由对象的hashCode()方法生成的。确保元素唯一性的两个方法,hashCode()和equals()方法。当调用add()方法向集合中存入对象的时候,先比较此对象与原有对象的哈希值有没有一样的,如果都不一样就直接存入;如果有与之相同的哈希值,则要继续比...
2019-07-24 11:08:07
869
原创 Android 8.1版本广播发送问题
今天在写通知栏自定义RemoteView事件时,用了广播处理点击事件,发送一个广播,接收时收不到,出现了这个log我的写法:使用的隐式方式发送广播。查资料后发现,Android O版本对后台进程做了限制广播的发送,对隐式广播也做了限制;优先使用动态注册Receiver的方式,能动态注册绝不使用Manifest注册IntentFilter intentFilter = ne...
2019-07-19 10:24:42
1276
原创 Android Notification 通知的使用以及自定义通知
如何发送一个通知?Android 8版本之前:第一步:获取NotificationManagermNotificationManager = (NotificationManager)activity.getSystemService(NOTIFICATION_SERVICE);第二步:构建一个Notification的builder用于构建NotificationNoti...
2019-07-17 16:52:32
772
转载 ViewStub标签懒加载
什么是ViewStub?ViewStub其实本质上也是一个View,其继承关系如图所示:为什么ViewStub可以提高加载性能?ViewStub使用的是惰性加载的方式,即使将其放置于布局文件中,如果没有进行加载那就为空,不像其它控件一样只要布局文件中声明就会存在。那ViewStub适用于场景呢?通常用于网络请求页面失败的显示。一般情况下若要实现一个网络请求失败的页面,我们是不是...
2019-07-16 15:44:40
214
转载 最通俗易懂的Android热修复技术原理详解
本文框架什么是热修复? 热修复框架分类 技术原理及特点 Tinker框架解析 各框架对比图 总结 通过阅读本文,你会对热修复技术有更深的认知,本文会列出各类框架的优缺点以及技术原理,文章末尾简单描述一下Tinker的框架结构。一、什么是热修复?正常开发流程热修复开发流程热修复优势修复什么?二、热修复框架分类现状:百花齐放百家争鸣...
2019-07-11 16:48:12
221
转载 java使用省略号代替多参数(参数类型... 参数名)
原文链接:https://www.cnblogs.com/fnlingnzb-learner/p/5952716.htmlJ2SE 1.5提供了“Varargs”机制。借助这一机制,可以定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。本文介绍这一机制的使用方法,以及这一机制与数组、泛型、重载之间的相互作用时的若干问题。到J2SE 1.4为止,一直无法...
2019-07-08 10:49:35
599
转载 Android 常用 adb 命令总结
原始链接:https://www.cnblogs.com/bravesnail/articles/5850335.htmlAndroid 常用 adb 命令总结针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中。Android Debug Brid...
2019-05-24 15:50:32
249
转载 linux常用命令
目录1、ls命令(显示文件(夹))2、cd命令(进入目录)3、pwd命令(查看当前路径)4、mkdir命令(创建文件夹)5、rm命令(删除文件或文件夹)6、rmdir命令(删除子目录)7、mv命令(移动文件)8、cp命令(拷贝文件)9、cat命令(创建、显示、合并文件)10、more命令(类似cat,逐页阅读只能向前移动)11、less命令(随意浏...
2019-05-16 11:15:29
152
转载 网络分层模型TCP/IP
OSI七层模型与TCP/IP五层模型一、OSI参考模型今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。1、OSI的来源OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司...
2019-03-11 19:41:40
328
原创 Java四种引用
1.强引用是指创建一个对象并把这个对象赋给一个引用变量。比如:Object object =newObject();String str ="hello word";强引用有引用变量指向时永远不会被垃圾回收,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。2.软引用(SoftReference)如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收...
2019-03-11 19:26:37
200
转载 Java WeakReference学习和使用
前言: 看到篇帖子, 国外一个技术面试官在面试senior java developer的时候, 问到一个weak reference相关的问题. 他没有期望有人能够完整解释清楚weak reference是什么, 怎么用, 只是期望有人能够提到这个concept和java的GC相关. 很可惜的是, 20多个拥有5年以上java开发经验的面试者中, 只有两人知道weak reference的存在,...
2019-01-14 17:54:43
300
原创 Java关键字Synchronized
首先我们来看一下这个代码:public class Main implements Runnable { private static int count = 0; public static void main(String[] args) { for (int i = 0; i < 10; i++) { Thread thr...
2019-01-03 16:34:22
260
转载 构建模式(Builder模式)
了解了单例模式,接下来介绍另一个常见的模式——Builder模式。那么什么是Builder模式呢。你通过搜索,会发现大部分网上的定义都是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示但是看完这个定义,并没有什么卵用,你依然不知道什么是Builder设计模式。在此个人的态度是学习设计模式这种东西,不要过度在意其定义,定义往往是比较抽象的,学习它最好的例子就是...
2019-01-03 15:36:16
784
原创 Flutter环境配开发遇到的坑
坑一:项目卡在这里Initializing gradle原因:这个事在android开发过程中也遇到过,估计是下载gradle,然后网不给力就会出现,一个最简单的方法是挂代理,这个我没实践,具体可以参考其他资料。第二就是手动下载后放到gradle_dir目录下,我创建项目的时候,工程使用的gradle版本是3.1.2,ubuntu系统gradle默认目录是~/.gradle/,下载后放...
2019-01-03 14:38:43
402
转载 单例模式
单例模式首先了解一些单例模式的概念。确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这样做有以下几个优点对于那些比较耗内存的类,只实例化一次可以大大提高性能,尤其是在移动开发中。 保持程序运行的时候该中始终只有一个实例存在内存中其实单例有很多种实现方式,但是个人比较倾向于其中1种。代码如下public class Singleton { pr...
2018-12-02 17:56:46
218
转载 Java中Volatile关键字详解
一、基本概念先补充一下概念:Java 内存模型中的可见性、原子性和有序性。可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线...
2018-12-02 17:01:32
172
原创 编译原理词法分析+语法分析(LL1分析表实现)
词法分析识别C语言格式:{int a;int b;int i;a = 0;b = 1;for (i=1; i <= 10; i=i+1){a=a+i;b=b*i;}}语法分析:(注意C语言语法规则,先定义后操作,所有定义必须写在前面)语法分析格式了一下词法分析输出文本便于语义分析操作。语法分析采用LL1分析表完成LL1分析表如下: ...
2018-11-23 11:04:53
5850
4
原创 Flutter 导入 import 'package:english_words/english_words.dart'报错
1,在项目根目录下打开 pubspec.yaml 文件,找到如下代码,添加高亮处代码dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for i...
2018-11-19 20:21:23
5201
原创 Python获取熊猫TVLOL栏所有主播信息以及人气排名
今天爬取的网页为:熊猫TV LOL栏 一,分析网页:一共6页,我们要想办法获取所有页的信息,所以F12查看网络请求,点击第二页:发现了这个请求这就是我们需要的东西所以推测pageno参数为第几页所以代码就好写了二,代码实现将需要的东西封装成类class InfoClass: def __init__(self, id,...
2018-11-18 17:41:55
540
原创 Python爬取二级页面(页面分析很重要)
今天收到老师的一个题目:于是我打开了图片网址:发现并没有发现所有城市的天气情况只有一个搜索栏于是我输入成都按下F12查看网络请求发现了这个请求:一共返回了四条数据对应提示框的四条数据,暂时不知道返回的数据有什么用,先点击搜索试一下然后发现跳转到了另一个网页,如下:我们需要的数据刚好在这里,那么问题来了我怎么知道第二个网页的地址是什么,怎么请求,我...
2018-11-17 23:16:44
9108
2
原创 Android逆向之模拟器连接
一、andorid Killer 连接 夜神模拟器1)进入到夜神安装目录:我的安装目录为D:\lishaoshu\software_installdCMD下进入路径: D:\lishaoshu\software_installd\Nox\bin>执行:nox_adb.exe connect 127.0.0.1:620012)、任务管理器找到夜神adb的PID3)、CMD...
2018-11-14 23:30:35
926
转载 Python操作Excel之读与写
python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。可从这里下载https://pypi.python.org/pypi。下面分别记录python读和写excel. python读excel——xlrd这个过程有几个比较麻烦的问题,比如读取日期、读合并单元格内容。下面先看看基本的操作:首先读一个excel文件,有两个s...
2018-11-11 16:47:17
705
原创 Python实现小猪佩奇
# coding:utf-8import timeimport turtle as tt.pensize(4) # 设置画笔的大小t.colormode(255) # 设置GBK颜色范围为0-255t.color((255,155,192),"pink") # 设置画笔颜色和填充颜色(pink)t.setup(840,500) # 设置主窗口的大小为840*500t.speed(...
2018-09-19 21:02:52
1121
转载 Android中Serializable和Parcelable序列化对象详解
学习内容:1.序列化的目的2.Android中序列化的两种方式3.Parcelable与Serializable的性能比较4.Android中如何使用Parcelable进行序列化操作5.Parcelable的工作原理6.相关实例 1.序列化的目的 (1).永久的保存对象数据(将对象数据保存在文件当中,或者是磁盘中 (2).通过序列化操作将对象数据在网络...
2018-09-18 17:48:50
329
转载 Android:图解四种启动模式 及 实际应用场景解说
在一个项目中会包括着多个Activity,系统中使用任务栈来存储创建的Activity实例,任务栈是一种“后进先出”的栈结构。举个栗子,若我们多次启动同一个Activity。系统会创建多个实例依次放入任务栈中。当按back键返回时,每按一次,一个Activity出栈,直到栈空为止。当栈中无不论什么Activity。系统就会回收此任务栈。上面这个样例中的Activity并没有设置启动模式,你会发...
2018-09-14 15:41:49
700
3
转载 Android中图片的三级缓存
为什么要使用三级缓存如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响 特别是,当我们想要重复浏览一些图片时,如果每一次浏览都需要通过网络获取,流量的浪费可想而知 所以提出三级缓存策略,通过...
2018-09-14 15:30:41
140
转载 Navaicat远程连接腾讯云Mysql
今天在用远程连接Mysql服务器的数据库,不管怎么弄都是连接不到。错误代码是1130,ERROR 1130: Host X.X.X.X is not allowed to connect to this MySQL server猜想是无法给远程连接的用户权限问题。结果这样子操作mysql库,即可解决。在服务器登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 ...
2018-08-23 22:55:53
777
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人