自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android GreenDao数据库升级数据迁移

概述之前数据库升级,做法是删除旧表新建新表,这样所有的数据均被删除,那么一些私有数据,例如用户登录信息也被删除。这样的用户体验很不好,用户更新APP后,需要重新登录。为改进用户体验,我们将用户私有数据做迁移。这样用户不需要重新登录。设计方案总体设计方案如下:1、创建临时表存储旧表数据2、删除旧表3、创建新表4、将旧表数据迁移至新表在迁移时需要考虑一个问题:若新表的表结构有变化如何处理?在代码中我们...

2018-06-28 21:06:02 1278

原创 TCP与UDP协议的区别与应用

概述TCP与UDP协议均是网络框架中运输层的协议,TCP是有连接的,在正式进行数据传输之前,客户端会与服务端通过三次握手进行连接。并且TCP提供更可靠的数据传输服务。所谓可靠,是因为TCP协议实现了一些例如重连、确认、窗口、重传、拥塞控制等机制保证数据传输的可靠性,不会出现丢包现象。UDP是无连接的,没有像TCP一样的确保数据传输成功的机制UDP(User Datagram Protocol) U...

2018-06-28 17:48:19 1040

转载 Java不可重入锁和可重入锁理解

最近正在阅读Java ReentrantLock源码,始终对可重入和不可重入概念理解不透彻,进行学习后记录在这里。基础知识Java多线程的wait()方法和notify()方法这两个方法是成对出现和使用的,要执行这两个方法,有一个前提就是,当前线程必须获其对象的monitor(俗称“锁”),否则会抛出IllegalMonitorStateException异常,所以这两个方法必须在同步...

2018-06-28 15:30:35 65890 23

原创 Android异步加载方案

Android的Lazy Load主要体现在网络数据(图片)异步加载、数据库查询、复杂业务逻辑处理以及费时任务操作导致的异步处理等方面。在介绍Android开发过程中,异步处理这个常见的技术问题之前,我们简单回顾下Android开发过程中需要注意的几个地方。Android应用开发过程中必须遵循单线程模型(Single Thread Model)的原则。因为Android的UI操作并不是线程安全的,...

2018-06-27 15:59:31 570

原创 Java单链表:输入两个有序链表合成为一个有序链表(最笨的办法)

一个比较常见的算法题:合并两个已知排序的单链表,合并后保持有序。网上有很多解法,都是什么所谓的并轨排序,将一个链表合并插入到另一个链表中。自己想出个最笨的方法,维护第三个resultSingleLink。从两个输入的链表中取值比较并插入到resultSingleLink中。先看下我定义的SingleLink,其中提供了很多API方便调用,顺便可以复习一下单链表写法。如下:/** * Create...

2018-06-23 16:23:08 1092

原创 Java线程池原理分析

Java虚拟机启动一个新线程的成本比较高,当程序中需要启动大量且生存期很短暂的线程时,可以考虑使用线程池。Java为我们提供了四种线程池使用。1)创建单个线程的线程池ExecutorService threadPool = Executors.newSingleThreadExecutor()2)创建多个线程的线程池ExecutorService threadPool = Executors.ne...

2018-06-22 10:59:13 242

原创 Java虚拟机类加载机制

本篇文章为阅读《深入理解java虚拟机》第二步笔记类加载阶段    类从被加载到虚拟机内存中开始,到卸载出内存为止,整个生命周期包括加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initalization)、使用(Using)、卸载(Unloading)7个阶段,其中验证、准备、解析3个部分统称为链接(Linking...

2018-06-20 14:05:52 175

原创 Android应用功能开发之计时锁屏

需求描述    在开发金融类APP时,经常会有这样一种需求,超过时间限制未操作页面,需要页面回到密码登录页,一般是回到手密页,那我们如何实现这样一种需求呢?方案设计    APP跑起来之后,我们一定会有一种类似Manager的角色,它是单例的且与APP生命周期相同的一直跑在内存中。它的作用是管理业务,串联业务流程,启动页面等。我们可以单独做一个TouchTimeoutManager作为计时器,每隔...

2018-06-15 15:24:03 2450

原创 Android开发抽象状态机

前言            在Android APP开发过程中,有时可以采用状态机来解决某些复杂业务,例如下拉刷新功能,我们可以更加行为将其划分为Normal状态、Pull状态、Loading状态,根据不同的状态我们实现该状态下行为。例如Loading状态下我们需要显示loading图标。Pull(下拉)状态下我们要计算下拉距离等等。这篇文章我们一起探讨编写一个抽象状态机,在业务模块可以继承抽象状...

2018-06-13 13:42:32 269

原创 状态模式及java实现

定义    定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。应用场景  1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。  2.一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。 通常,有...

2018-06-13 10:17:35 1240

原创 浅谈Android java层ServiceManager

概述ServiceManager作为Android进程间通信binder机制中的重要角色,运行在native层,由c++语言实现,任何Service被使用之前,例如播放音乐的MediaService,例如管理activity的ActivityManagerService,均要向SM注册,同时客户端使用某个service时,也需要向ServiceManager查询该Service是否注册过了。Ser...

2018-06-08 15:08:40 6376

原创 Android Service使用方法回顾

    Service作为Android四大组件之一,承载着重要的作用,同时,熟悉Service也会为理解Binder打下重要的基础,这里是我初学Android时做的关于Service的笔记,现在总结到这篇文章中。概述android中的service与Windows中的服务类似,一般没有用户界面,运行在后台,可以执行耗时的操作,是安卓四大组件之一。其他组件可以启动service,并且当用户切换另外...

2018-06-07 21:09:18 321

原创 Android SystemServer解析

概述    理解该文章,需要阅读者对Android进程间通信方式Binder有一定了解,理解Binder的方式之一便是找到一个系统中binder通信的例子,例如activity启动过程,该过程描述了应用进程的activity和系统进程,准确的说是SystemServer进程中的ActivityManagerService通信。其实,SystemServer进程中不仅仅运行着AMS,还运行着其他各种...

2018-06-07 16:38:14 5469

原创 单例模式

定义    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。理解    在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以...

2018-06-07 15:25:09 109

原创 代理模式与java动态代理

定义    代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。有点类似于装饰者模式。但是与装饰者模式的区别是代理模式最终不一定调用目标对象的目标方法。但装饰者一定会。图示:理解:    通俗一点说,就是代理对象持有目标对象的引用,并对外提供所有目标对象的业务方法,在该方...

2018-06-06 11:11:43 188

原创 初探Retrofit使用方法

概念Retrofit框架是Square公司出品的网络框架,效率快、实现简单。运用注解和动态代理,极大简化网络请求繁琐步骤特点    性能好、处理快,使用简单;默认使用okhttp处理网络请求;默认使用Gson解析。常用注解接口    Retrifit采用注解方式标注方法,常用接口如下:@GET:GET网络请求方式@POST:POST网络请求方式GET请求相关:@Headers:头参数信息@Path...

2018-06-05 16:28:01 204

原创 Builder模式

定义建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。理解一个复杂对象的表示应该与它的构建过程分离,使得同样的构造过程有着不同的表示。一些概念产品的内部表象  一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常又叫做产品...

2018-06-04 22:22:20 116

原创 LeakCanary原理解析

前几天面试,问到了我内存泄漏的相关问题,顺其自然问到了内存泄漏的检测工具LeakCanary的工作原理。当时不会,在看了几篇博文后,明白了其中的道理,理一下思路记录在此。准备知识ReferenceQueue    引用队列,对于弱引用和软引用来说,若需要知道该引用是否已被GC回收,那么在构造WeakReference或SoftReference时,传入一个ReferenceQueue。那么当这个引...

2018-06-04 16:31:29 426

原创 装饰者模式

定义    动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。理解    使用对象组合的方式,做到运行时装饰类。这样可以在不修改任何底层代码的情况下,给你的(或别人的)对象赋予新的职责。动态的将责任附加到对象上,想要扩展功能,装饰者提供有别于继承的另一种选择。我们的目标是允许类容易扩展,在不修改现有代码的情况下,就可搭配新的...

2018-06-03 17:39:21 118

原创 命令模式

定义    将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。理解将一个请求(调用)封装为一个对象,从而可用不同的请求对客户进行参数化,将“发出请求的对象”和“接收和执行请求的对象”分离开。它的精髓在于封装了具体的调用。 我们从定义中了解到,一个命令对象通过在特定命令接受者上绑...

2018-06-03 17:31:47 853

原创 设计模式准则

    本文作为设计模式的开篇,记录设计模式的准则、共有单一职责原则、开闭原则、里氏替换原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特原则七个原则。单一职责原则一个类只负责一个功能领域的职责;换句话说,就一个类而言,应该只有一个引起它变化的原因。职责扩散是单一职责的挑战,应在其扩散到不可控制之前进行代码重构。只有在逻辑足够简单或者方法数量足够少,才能够违反单一职责单一职责的优点主要是:降低...

2018-06-03 17:20:42 187

原创 Java多线程(理论层面)

线程的实现使用内核线程实现内核线程就是直接由操作系统内核支持的线程,这种线程由内核完成线程切换,内核通过操作调度器对线程进行调度,并负责将线程的任务映射到各个处理器上,这样操作系统就有能力同时处理很多事情。程序一般不会直接使用内核线程,而是使用内核线程的高级接口——轻量级进程。轻量级进程就是我们通常意义上讲的线程。这种轻量级进程和内核线程之间1:1的对应关系称为一对一线程模型。如下:由于内核线程的...

2018-06-03 16:58:53 365

原创 吐槽CSDN用户名

CSDN的账号是好久之前注册的,当时自动分配了用户名,难听的一匹,一串儿数字。现在也改不了。对于我这个强迫症来说好不舒服。不过还是决定继续用CSDN的产品,继续把有道云笔记上的文章分享上来,记录自己的技术文章,温故知新。希望CSDN能够在有生之年推出改用户名的功能。...

2018-06-03 16:34:55 195

原创 MTK VILTE预研文档

本文是在乐视做Phone开发时,预研视频通话功能的文档简介               本文作为mtk的viLTE的预研文档,主要从从视频通话流程的角度阐述viLTE相关内容,为后续开发做充分的理论准备。从上层代码结构看,高通和MTK的代码调用和路径是相同的,没有太大的差异,但从实现方式上看,高通和MTK不同。高通方面,与volte通话一样,指令通过ImsSenderRxr.java发送给mode...

2018-06-02 17:12:10 1439

原创 Android Handler机制

概述从开发角度角度来说,Handler是Android消息机制的上层接口,通过handler,可以将一个任务切换到handler所在的线程中执行,我们通常使用handler来更新UI,但更新UI仅仅是的使用场景之一,handler并不是仅仅用来更新UI。更新UI的具体情况是这样的:和其他GUI库一样,Android的UI也是线程不安全的,也就是说想要更新应用程序中的UI元素,则必须在主线程中进行。...

2018-06-02 16:01:55 5916

原创 Https通信原理

简介:HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 。HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的...

2018-06-02 15:17:14 3576 1

原创 KMP算法的个人理解

KMP算法求解的是什么问题?字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。例如如下两个字串:String a = "bacbababadababacambabacaddababacasdsd";String b="ababaca"KMP算法为什么快?首先,我们采用一般的算法求解匹配字符串的问题,假设目标字串为"abcdcabccdacb",长度为...

2018-06-02 14:56:40 241

原创 Hello CSDN

    对于一个工作三年的程序员,第一篇博客是来的晚了一些。一是没有专门的时间去整理,二是之前的学习内容全部总结在云笔记上。那为什么在这个时间点开始将云笔记上的内容整理到博客上呢?答案就是闲了呗,毕业三年有一半的时间在工作,有一半的时间在找工作。经历过公司业务方向的调整,也经历了乐视溃败的痛苦。而这段时间,工作不算忙碌,而又不想匆匆忙忙再次踏上面试的征程,所以趁此机会,将以前写过的文章,摘抄到此,...

2018-06-02 14:37:51 159

个人总结的ios编码规范

个人总结的iOS编码规范,有利于提高代码可读性和可维护性

2018-09-11

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

TA关注的人

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