- 博客(62)
- 收藏
- 关注
原创 安卓过度绘制
1.概述 UI渲染操作通常依赖于两个核心组件:CPU与GPU。CPU负责包括Measure,Layout,Record,Execute的计算操作,GPU负责Rasterization(栅格化)操作。 所谓栅格化,就是将那些UI控件(如Button,Bitmap)拆分到不同的像素上进行显示。这是一个很费时的操作,GPU能够加快栅格化的操作。 为了能够使得App流畅,在Android中我...
2019-11-18 11:39:21
351
原创 安卓内存相关
一、内存泄露的定义:内存泄露是指不再使用的内存仍然占用着内存空间,因为程序中仍然保存着对它的引用,而使得GC无法将它回收或得到及时释放,从而造成的内存空间浪费的问题,称为内存泄露。二、内存泄露的根本原因:长生命周期的对象持有短生命周期对应的引用,因为短生命周期对象可能不再使用,而因为长生命周期对象持有着对其的引用,因此GC无法将其进行回收。三、内存泄露(Memory Le...
2019-11-18 10:51:49
367
原创 知识总结------ListView
ListView的使用使用ArrayAdapter:使用SimpleAdapter:继承BaseAdapter实现其中的getCount() 、getItem()、getItemId()、getView()实现自定义AdapterListView的刷新可以使用adapter.notifyDataSetChanged()进行刷新。Li...
2019-09-09 12:17:25
269
原创 知识总结------RecyclerView
RecyclerView的使用:1、在Activity中获取RecyclerView,并设置LayoutManager以及Adapter:这里LayoutManager是RecyclerView的布局管理器,用以实现Item不同布局排列方式,RecyclerView必须调用setLayoutManager设置布局管理器。RecyclerView中默认带有三个布局管理器:Linea...
2019-09-09 12:08:30
249
原创 知识总结----Handler&HandlerThread
1、一个Thread可以有几个Looper?几个Handler?答:只能有一个Looper,不然调用Looper.prepare()会抛出运行时异常,提示“Only one Looper may be created per thread”可以创建无数个Handler,但是他们使用的消息队列都是同一个,也就是同一个Looper2、Handler导致内存泄漏一般在一个耗时...
2019-09-08 19:10:33
332
原创 知识总结------Broadcast
一、广播种类普通广播:Context.sendBroadcast。系统广播(有序广播):Context.sendOrderedBroadcast。本地广播:只在自身App内传播。</br>二、实现广播1.静态注册:在Manifest.xml中注册完成就一直运行,App关闭了也不受影响。<receiver android: name =“Receiver1”...
2019-09-08 18:33:20
116
原创 知识总结------Service
多线程的应用在Android开发中是非常常见的,常用方法主要有:继承Thread类 实现Runnable接口 AsyncTask Handler HandlerThread IntentServiceService生命周期:只是用startService()启动服务:onCreate() -> onStartCommand() -> onDestory...
2019-09-08 18:32:08
201
原创 知识总结------contentProvider与contentResolver
ContentProvider需要自定义一个Class去继承(有的公司API可能会把ContentProvider改成一个abstract,此时就需要使用者灵活改变了),假设这个自定义的类名为myContentProvider,这个定义的类的作用就是为了向其他应用提供信息的类。类似于给BroadCastReciver发送广播通知的系统广播,myContentProvider就是向外散发一个信息,然...
2019-09-08 18:31:11
382
原创 知识总结-----Fragment
Fragment每个生命周期方法的意义、作用:setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法。在该方法里面可以通过调用getUserVisibleHint()获得Fragment的状态是可见还是不可见的,如果可见则进行懒加载操作。onAttach():执行该方法时,Fragment与Activity已经完成绑定,该方法有一个Activity类型的...
2019-09-08 16:20:54
227
原创 知识总结------Activity
1,Activity的生命周期 正常情况下生命周期:oncreate--onStart--onResume--onPause--onStop--onDestory 异常情况下:onSaveInstanceState-onPause-onStop-onDestory 重建后onCreate--onRestoreInstanceState 系统资源不足会回收低优先级的activ...
2019-09-07 12:21:20
169
原创 知识总结------数据存储
1、SharePreferences适用情形?使用中需要注意什么?保存登录用户名密码等情形,应注意多进程并发读的时候数据可能不准确。需要注意:getSharedPreferences(“User”, Context.MODE_PRIVATE)方法中第二个参数需要了解Android的四种枚举方式下面是详细的解释:私有模式Context.MODE_PRIVATE 的值是 0;...
2019-09-07 12:13:12
162
原创 Git 的一些理解和扩展积累
1、git reset --hard HEAD^(^^^^^^^) 返回到上一个(几个)提交版本,在很多人同时提交时很容易出现我们的当前指针不在该链路上,可以使用该指令。 其实我们也可以使用git pull --rebase来拉代码 这样我们的指针会始终处于头部 就不会出现前面的问题2、git reset --hard commit_id3、git reflog...
2019-08-03 09:51:19
125
转载 PreferenceScreen 偏好显示类 的使用
PreferenceScreen preference是偏好,首选的意思,PreferenceScreen个人翻译成 “偏好显示”,明白这个意思就好,就是说根据特点灵活的定义显示内容风格,一个屏幕可以包含多个风格,像系统自带的声音设置界面。实现这种显示效果其实很简单,只需要借助PreferenceScreen类即可。在项目资源文件中新建xml文件夹,在里面新建preferences.xm...
2019-07-08 16:47:18
1311
原创 安卓常见的UI布局及控件的使用
目录 布局的介绍: View类的常用xml属性: LinearLayout RelativeLayout Android UI控件及UI组件 基本控件:——TextView: 基本控件:——EditText: 基本控件:——Button: 在代码中设置View的常用xml属性及方法说明 一、布局的介绍:...
2019-07-08 16:27:31
9164
5
原创 Failed to transform file 'android.jar' to match attributes问题解决
最近在做项目中遇到一个问题,之前可以编译的项目突然出现了报错:Failed to transform file 'android.jar' to match attributes {artifactType=android-mockable-jar, returnDefaultValues=false} using transform MockableJarTransform网上现有方...
2019-04-15 17:09:09
19596
4
转载 RandomAccessFile详解
RandomAccessFile的常见用法 2018年06月11日 09:54:18 我是楠楠 阅读数:4075 ...
2019-03-28 20:00:31
3024
原创 数据库的范式理解
范式:范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。下面就简单介绍下这三个范式。◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。考虑这样一个...
2019-03-28 08:52:55
173
转载 AsyncTask,ThreadPoolExcutor,Service之间的关系与区别
AsyncTask是Google封装的一个异步处理类,通过实现内部的doInBackGround方法就能实现子线程进行耗时操作AsyncTask的简单实现 这是一个最简单的AsyncTask实现类,在需要进行耗时操作的地方进行调用即可,Google已经帮我们封装好了这样的一个类,可以直接进行使用,但是有优点就会有缺点,AsyncTask用的是核心机制是线程池机制,最多同时运...
2019-03-27 22:00:59
741
转载 算法:深度优先算法和广度优先算法(基于邻接矩阵)
本文转载自http://www.cnblogs.com/liuyihai/p/8762581.html1.写在前面 图的存储结构有两种:一种是基于二维数组的邻接矩阵表示法。 另一种是基于链表的的邻接表。 在邻接矩阵中,可以如下表示顶点和边连接关系: 说明: 将顶点对应为下标,根据横纵坐标将矩阵中的某一位置值设为1,表示两个顶点向联接。...
2018-08-09 22:13:59
1029
转载 给出两个字符串,找到最长公共子串,并返回其长度,java实现
转载自https://blog.csdn.net/u010002184/article/details/50740691
2018-08-09 22:02:31
1505
原创 两数之和:给定一个整数数组,找出其中两个数相加等于目标值
有三种思路: 第一个思路:遍历数组i从第一个数开始,j从(i+1)开始,直到找到合适的值。这个算法的时间复杂度为O(n2),空间复杂度为O(1)。第二个思路:在前一个算法的基础上降低时间复杂度。我们可以将数组排序,然后定义两个指针,一个指针i从左向右,另一个从j右向左。 ①如果data[i]+data[j] < tager ,则++i ②如果data[i]+data[j] > ...
2018-08-02 21:36:20
4214
原创 HTTP中有关缓存的首部字段有哪些?HTTP的浏览器缓存机制
一、Last-Modified和 If-Modified-Since 简单的说, Last-Modified与 If-Modified- Since都是用于记录页面最后修改时间的HTTP头信息,只是Last-Modified是由服务器往客户端发送的HTTP头,而If-Modified-Since则是由客户端往服务器发送的头,可以看到,再次请求本地在在的缓存页面时,客户端会通过If-M...
2018-07-24 17:41:23
3556
原创 在浏览器中输入URL后,执行的全部过程。(一次完整的http请求过程)
整个流程如下:域名解析 为了将消息从你的PC上传到服务器 上.需要用到1P协议、ARP协议和0SPF协议 发起TCP的3次握手 建立TCP连接后发起http请求 服务器响应htp请求 浏览器解析htm代码,并请求html代码中的资源(如js、css、图片等) 断开TCP连接 浏览器对页面进行渲染呈现给用户一、域名解析的详细内部过程例如,要查询www.baidu.com...
2018-07-24 17:15:00
44606
8
原创 数据库并发事务详解
本章将从数据库事务的基本要素、并发事务带来的问题、数据库事务的隔离级别、封锁技术方面来进行详细解读。 一、数据库事务正确执行的四个基本要素(事务的四个属性) 当事务处理系统创建事务时,将确保事务有某些特性。组件的开发者们假设事务的特性应该是一些不需要他们亲自管理的特性。这些特性称为ACID特性。 ACID就是:原子性(Atomicity )、一致性( Consistency )、隔离性或独...
2018-07-17 12:18:57
11112
2
原创 数据库三级范式
范式:范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前有迹可寻的共有8种范式,依次是:1NF,2NF,3NF,BCNF,4NF,5NF,DKNF,6NF。通常所用到的只是前三个范式,即:第一范式(1NF),第二范式(2NF),第三范式(3NF)。下面就简单介绍下这三个范式。◆ 第一范式(1NF):强调的是列的原子性,即列不能够再分成其他几列。 考虑这样一个...
2018-07-16 16:24:18
1689
原创 数据库访问量很大时,如何做优化?
如果有一个特别大的访问量到数据库上时,往往查询速度会变得很慢,所以我们需要进行优化。优化从三个方面考虑:SQL语句优化、主从复制,读写分离,负载均衡、数据库分库分表。一、SQL查询语句优化 1、使用索引 建立索引可以使查询速度得到提升,我们首先应该考虑在where及order by,group by涉及的列上建立索引。 2、借助explain(查询优化神器)选择更好的...
2018-07-12 17:07:00
18059
原创 Spring中IOC与AOP实现原理
Spring的Ioc底层是怎么实现的?一、SpringIoc是什么IOC:控制反转,就是把对象的创建交给Spring来做二、SpringIoc所使用的技术1、xml配置文件2、dom4j解析XML文件3、工厂设计模式4、反射三、SpringIoc的具体实现第一步:配置xml文件 <bean id="dic" class="com.zhy.springIoc.model.Dic"><...
2018-07-05 17:14:31
25651
原创 进程与线程
什么是线程和进程?进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。进程与线程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间...
2018-07-03 14:43:44
161
原创 面向对象的四个特征与“六原则一法则”解析
面向对象的四个特征主要有抽象、继承、封装和多态四个方面,下面是我们来详细分析它们的含义: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了...
2018-07-02 11:03:40
323
转载 java socket编程中backlog的含义
使用java.net.ServerSocket能够方便的创建一个服务端套接字,这个类的构造函数有一个参数backlog。下面这段代码,在本机的8888端口上建立了一个套接字,backlog设置为5。[java] view plain copy// port:8888,backlog:5 ServerSocket server = new ServerSocket(8888, 5); 下面的Cl...
2018-06-20 15:36:14
233
原创 三次握手与四次挥手详解(以及常见问题)
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。FIN (finis):即完,终结的意思, 用来释放一个...
2018-06-19 16:36:40
2370
原创 AtomicStampedReference使用方法
我们都知道在使用CAS也就是使用compareAndSet(current,next)方法进行无锁自加或者更换栈的表头之类的问题时会出现ABA问题,Java中使用AtomicStampedReference来解决CAS中的ABA问题,它不再像compareAndSet方法中只比较内存中的值也当前值是否相等,而且先比较引用是否相等,然后比较值是否相等,这样就避免了ABA问题。那么AtomicStam...
2018-06-12 16:19:05
9733
原创 ConcurrentHashMap1.8讲解
https://www.cnblogs.com/study-everyday/p/6430462.htmlhttps://www.jianshu.com/p/c0642afe03e0以上两篇文章综合看
2018-06-10 17:54:14
428
1
原创 redis面试题总结
(1)什么是redis? Redis 是一个基于内存的高性能key-value数据库。 (有空再补充,有理解错误或不足欢迎指正)(2)Reids的特点Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写...
2018-06-08 18:49:01
224
原创 redis持久化
1. Redis的持久化a) 为什么需要持久化因为Redis是一个内存性的数据库,为了保证数据在内存掉电时的安全,所以需要进行持久化操作b) Redis的持久化(2种方案)1. Snapshotting(RDB) :全本式复制 快照复制 建立临时文件的目的是减少IO的次数 因为在内存中先写入临时文件,等一定的时间后再把这个临时文件写入dump.rdb文件(在磁盘中)中可以减少IO的次数。RDB存...
2018-06-08 17:07:01
170
原创 MyISAM与InnoDB索引原理剖析
MySQL索引实现 注:在读本文之前建议先研读我的前一篇博客,不然一方面本文读起来费力,另一方面只知表象,不明内里。 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。MyISAM索引实现 MyISAM引擎使用B+Tree作为索引结构,叶节点的data...
2018-06-05 16:13:41
3151
7
原创 B+Tree在数据库索引上拥有独特优势的原因(为什么比红黑树更合适)
二叉树、平衡树、红黑树等数据结构也可以用来实现索引,但是文件系统及数据库系统为什么普遍采用B-/+Tree作为索引结构?如果对B+Tree和B-Tree不太了解的同学可以先去看一下我的上一篇博客,这样对本文才能更好地了解(https://blog.csdn.net/qq_21993785/article/details/80576642)。 在数据之外,数据库系统还维护着满足特定查找算...
2018-06-05 14:16:26
12966
4
原创 二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键...
2018-06-05 10:48:37
11905
3
原创 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。代码:import java.util.*;public class Solution { public int NumberOf1(int n) { int index=0; if(n>0){ int r=n; while(r>0){ ...
2018-06-04 21:14:16
807
原创 java线程池
为什么用线程池 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 2.线程并发数量过多,抢占系统资源从而导致阻塞 3.对线程进行一些简单的管理 线程池ThreadPoolExecutor 既然Android中线程池来自于Java,那么研究Android线程池其实也可以说是研究Java中的线程池在J...
2018-06-03 18:31:14
145
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人