自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

世上只有一种英雄主义

在认清生活真相之后依然热爱生活

  • 博客(743)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android应用程序安装过程解析(源码解析)

Android应用程序安装过程解析1.程序安装的4大步骤(1) 拷贝apk文件到指定目录在Android系统中,apk安装文件是会被保存起来的,默认情况下,用户安装的apk首先会被拷贝到 /data/app 目录下。/data/app目录是用户有权限访问的目录,在安装apk的时候会自动选择该目录存放用户安装的文件,而系统出厂的apk文件则被放到了 /system 分区下,包...

2017-03-02 15:36:33 5800

原创 Java泛型详解

由于博客的特殊显示原因,尖括号用()代替泛型概述Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。优缺点从好的方面来说,泛型的引入可以解决之前的集合类框架在使用过程中通常会出现的运行时刻类型错误,因为编译器可以在编译时刻就发现很多明显的错误。而从不好...

2016-09-25 23:43:15 5727 1

原创 Android的oom详解

Android的oom原因1.资源对象没关闭造成的内存泄露,try catch finally中将资源回收放到finally语句可以有效避免OOM。资源性对象比如:1-1,Cursor 1-2,调用registerReceiver后未调用unregisterReceiver() 1-3,未关闭InputStream/OutputStream 1-4,Bitmap使用后未调用rec...

2016-09-11 17:36:44 6222 3

原创 Android的ANR详解(原因和方案)

ANR的定义在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择“等待”而让程序继续运行,也可以选择“强制关闭”。所以一个流畅的合理的应用程序中不能出现anr,而让用户每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样系统不会显示A...

2016-09-10 12:50:55 3415

原创 Android Handler机制剖析

android的handler机制是android的线程通信的核心机制Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃。Android中的实现了接收消息的“消息队列” ——【MessageQueue】阻塞式地从消息队列中接收消息并进行处理的“线程” ——【Thread+Looper】可发送的“消息的格式” ——【Message】“消...

2016-09-09 12:35:15 3083

原创 java线程同步详解

synchronized关键字介绍:synchronized锁定的是对象,这个很重要例子:class Sync { public synchronized void test() { System.out.println("test开始.."); try { Thread.sleep(1000...

2016-05-27 22:05:02 5445 2

原创 【52】java多线程剖析

线程的状态:线程共有下面4种状态:新建状态(New):新创建了一个线程对象,当你用new创建一个线程时,该线程尚未运行。就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。阻...

2016-05-27 15:04:37 5138 4

原创 【50】java 匿名内部类剖析

匿名内部类介绍:匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口匿名内部类的声明格式如下:new ParentName(){...// 内部类的定义}匿名内部类的使用场景:.只用到类的一个实例 。 ·类在定义后马上用到。 ·类非常小(SUN推荐...

2016-05-26 16:10:55 5230

原创 【49】java内部类剖析

什么是内部类:定义在其他类(outer class)中的类被称作内部类。内部类可以有访问修饰服,甚至可以被标记为 abstract 或 final。 内部类与外部类实例有特殊的关系,这种关系允许内部类访问外部类的成员,也包括私有成员。内部类分为以下四种:内部类(inner class) 局部内部类 匿名内部类 静态嵌套类为什么要使用内部类:在《Think in Java》中有这样一句话:使用内

2016-05-25 21:01:13 5603 1

原创 【42】android Context深度剖析

android程序和java程序的区别Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们各自的上下文环境,也就是我们这里讨论的Conte...

2016-05-19 17:38:24 7294

原创 【39】FlexboxLayout使用介绍

FlexboxLayout介绍:Flexbox 也称为弹性盒子模型 或伸缩盒子模型,广泛用于前端开发,做过前端 web 的都知道Bootstrap 中有一套强大的 CSS Grid网格样式。Bootstrap 的出现 大大提高了前端开发的效率,并且引领了响应式布局、跨平台开发的潮流。FlexboxLayout 就是类似于 bootstrap 中的Grid栅格系统但又不相同的强大控件,其实...

2016-05-16 21:26:03 5610

原创 【38】java的集合框架(容器框架)

Collection接口Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。所有实现C...

2016-05-16 15:58:46 4998

原创 【22】-快速排序随机选择元素的优雅解法

关于常规解法,请参考上一篇博客,链接如下: 面试之路(19)-快速排序详解介绍一种优雅的解法public int partition(int data[],int length,int start,int end) throws Exception{ if(data == null || length <= 0||start < 0||end &gt...

2016-05-04 23:02:22 8365

原创 【19】-快速排序详解

快速排序定义由C. A. R. Hoare在1962年提出 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给ke...

2016-05-01 21:20:32 10997

原创 【17】-冒泡排序详解

冒泡排序定义它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。步骤1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3.针对所有的元素重复以上的步骤,除了...

2016-05-01 17:19:44 11244 1

原创 归并排序详解(MergeSort)递归和非递归实现

归并排序的概念及定义归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两

2016-05-01 16:58:42 9576

原创 【15】-java实现二分查找

二分查找在面试中经常被遇到,这个方法十分优雅介绍二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组。将数组的中间项与T进行比较,可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过log(2

2016-04-30 17:23:15 9268 2

原创 【14】-java的单例设计模式详解

预加载模式代码:public class Singleton{ private volatile static Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getInstance() { return singleto

2016-04-30 11:32:48 8658 4

原创 【11】-java递归和非递归二叉树前序中序后序遍历

二叉树的遍历对于二叉树来讲最主要、最基本的运算是遍历。 遍历二叉树 是指以一定的次序访问二叉树中的每个结点。所谓 访问结点 是指对结点进行各种操作的简称。例如,查询结点数据域的内容,或输出它的值,或找出结点位置,或是执行对结点的其他操作。遍历二叉树的过程实质是把二叉树的结点进行线性排列的过程。假设遍历二叉树时访问结点的操作就是输出结点数据域的值,那么遍历的结果得到一个线性序列。 从...

2016-04-29 00:31:54 9823

原创 LeetCode(30)-Pascal's Triangle

题目:Given numRows, generate the first numRows of Pascal's triangle.For example, given numRows = 5,Return[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]思路 题意是要用数组表示帕斯卡三角形输入一个数值,显示相应行数的【

2016-04-07 12:38:11 5558

原创 android的Binder通信机制java层浅谈

1.Service Manager的Java代理对象在Java层中,Service Manager的代理对象类型为ServiceManagerProxy。它继承并且实现了IServiceManager接口,其中四个成员函数和一个变量如下: getService、checkService:获取Java服务代理对象 addService:注册Java服务 listService:获取已经注册的ja

2015-11-20 09:28:14 4865

原创 AndroidBinder进程间通信系统

目录前言及知识准备Service组件结构Clinet组件结构与Binder驱动程序交互总结Binder进程间通信实例问题本次主要介绍Android平台下Binder进程间通信库。所谓通信库,就是Adroid在应用程序框架层中将各种Binder驱动操作封装成一个Binder库,应用程序可以方便地调用库中提供的接口进行通信。这次将介绍Binder库的结构以及相关知识。在Binder库中,se

2015-11-11 17:07:19 4380 1

原创 Parcelable和Serializable的区别

1.实现Parcelable的实现:writeToParcel(Parcel dest, int f1ags)describeContents()Parcelable.Creator接口的类Serializable的实现:实现Serializable接口serialVersionUID2.原理Parcelable自己实现了序列化和反序列化过程,Serializable是基于反射的操作,生成大量的临时对象,并且伴随着大量的IO操作。3.效率和使用场景不同Parcelable是位于内存上,

2020-09-23 23:39:42 1450

原创 安卓invalidate和requestLayout还有postInvalidate的区别

postInvalidate用于非UI线程,Invalidate用于UI线程。另外布局大小和位置没变用Invalidate重绘更高效,如果变了调用requestLayout

2020-09-23 23:02:38 554

原创 Http的1.0和1.1以及2.0的区别详解

Http的1.0问题1:短连接http是基于Tcp协议的,由于是短连接,每个http的;连接和断开都会对应Tcp的3次握手,慢启动连接和四次挥手断开。(通过设置Connection: keep-alive可以解决)问题2:阻塞客户端同时发起的请求数目是固定的,如果太多就会排队阻塞。Http 1.1的优化优化1:长连接一个Tcp连接通道可以并行多个http的请求和关闭。但是服务端还是客户端请求的先后顺序并且处理的。所以服务器依然会阻塞。优化2:缓存优化缓存处理,在HTTP1.0中主要使用he

2020-09-10 01:06:48 1811

原创 Https详解

Http的缺陷1.加密性2.完整性3.冒充攻击Https的过程1.客户端发送版本号,支持的摘要算法,加密算法和随机串1给服务端2.服务端返回选定的摘要算法和加密算法,以及申请的证书,加密的公钥和随机串2.如果需要双向校验也需要客户端发送自己的证书。3.客户端生成随机串3,并且把随机串3及其摘要用公钥加密发给服务端。4.服务端解密之后,通过摘要确认完整性。然后双端分别用随机串1,2,3生成对称秘钥。服务端使用对称秘钥加密一段信息和摘要发给客户端。5、客户端收到解密之后,确认完整性之后,可以通

2020-09-09 02:49:08 794

原创 Http Post和Get方法的区别

1.使用场景不同get,post,put,delete,分别对应对资源的查,改,增,删,另外其余方法的含义:OPTIONS 返回服务器支持的 HTTP 方法。CONNECT 把请求连接转换到透明的 TCP/IP 通道。HEAD 与 GET 相同,但只返回 HTTP 报头,不返回文档主体。2.幂等性不一样。幂等是一个数学概念,幂等每次操作的结果一样。get是幂等的,资源没有改变。post对应修改操作,所以post不是幂等的。所以相应的:3.get能缓存和收藏,以及后退/刷新无影响,post

2020-09-09 00:02:51 410

原创 Android代码如何重构

讲一下Android代码重构的思路1.新增提取函数<1>复杂逻辑拆成函数<2>大函数拆成小函数2.父类和子类之间转移函数<1> 把子类的x相同逻辑,提取成父类函数<2> 把父类的非通用逻辑,提取成用到的个别子类中的函数3.类之间转移函数如果类之间重复调用耦合,可以考虑把耦合的逻辑全部提取到一个类,符合单一原则4.复杂类拆分成几个类...

2020-04-23 02:08:29 1004 1

原创 初级程序员如何把握机会,快速成长

本文并不是标题党,下面说说自己的一些思考,废话不多说,上结论:问题就是最好的机会不要害怕遇到问题,而是在遇到问题时候,刨根问底,搞清楚问题背后的原因,彻底的解决它,每次解决一个问题,你就能上一个台阶。久而久之,你遇到问题就不是怕或者焦虑,而是兴奋。会不会遇不到问题呢?会,那你就无敌了,无敌是一种寂寞。举个日常例子说明-重构重构主要干啥1.提取函数2.抽象父类3.抽象模板。。。...

2020-04-22 03:00:48 618 2

原创 Android的6个编程原则

面向对象的原则1.单一原则2.里式替换原则本质就是继承和多态,继承或者实现类可以代替父类3.依赖倒置原则本质就是面向接口(抽象类)编程4.开闭原则向扩展开放,向修改关闭如何做到本质也是面向抽象编程5.接口隔离接口要拆解的足够细6.迪米特原则一个类要对他调用的对象知道的最少。...

2020-04-21 01:50:37 475 2

原创 Android 10适配总结

Android 10 聚焦移动创新、安全隐私和数字健康三大主题。具体适配点如下:1.原先支持向下兼容的V4和V7 support包,替换为Android X包2.存储权限适配,变成分区存储:应用内文件,应用外特定目录文件和公共文件(媒体文件和非媒体文件)3.imei不能再获取,变为和厂商合作的OAID等替代方案4.API版本大于28时,默认http请求限制,通过在Admenifest文件...

2020-04-15 12:23:25 1301 1

原创 2019年推荐的技术书单

包括再次看的和首次看的书,很多书多次看收获很大,温故而知新,比如《重构》。摘录基本觉得不错的书1.《Android开发艺术探索》2.《Android 源码设计模式解析与实战》3.Android软件安全与逆向分析4.深入理解java虚拟机5.《重构》6.《Android插件化开发指南》7.《计算广告》...

2019-12-31 01:50:43 574

原创 程序员必备的6个辅助开发的软件神器

前言(欢迎评论区列出你认为牛逼的开发神器~) 本文来自MeloDev的投稿,他的博客地址: http://www.jianshu.com/u/f5909165c1e8程序员必备简捷开发辅助工具总结 写在前面:工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率。Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马...

2019-12-30 15:12:12 48355

原创 程序员面试考察的5个方面

面试时程序员绕不过去的话题,我的理解是具体分为如下5个方面:1.基本功正所谓美团说的基本功,程序员面试的基本功,每个人的理解不一样。但无外乎几个方面:编程语言+数据结构+算法+平台编程经验。平台编程经验举个例子是你用java,你能够在后端框架写程序还是能够移动端开发安卓。编码规范编码规范不是背一下就行了,背后体现的是项目经验的积累,如何写出高质量的代码,比如编写的代码稳定,可靠,满足安全...

2019-12-26 00:28:23 2227 1

原创 多线程安全和锁优化概述

什么是线程安全?通俗的说就是对象本身完成了同步优化,保证外部随意调用的不用在考虑同步,互斥,调配等问题Java线程安全的5个等级1.不可变。基本类型是用final修饰,对于对象指的是行为不会改变内部状态。比如String类的操作都是返回一个新的String。还有Integer等类,内部变量都是final的。2.绝对的线程安全定义是:不管任何条件,调用者都不用做额外的同步措施。实际是很...

2019-09-01 19:02:56 616 2

原创 深入浅出Java虚拟机-Java编译概述

#Java虚拟机存储上图分为线程共享和非共享,其中堆内存是用来存放Java对象的,虚拟机栈和本地方法栈都是存放方法信息,前者是通过栈帧结构存放方法的参数和本地变量,以及方法的返回地址和调用地址等信息,后者是存放本地方法的信息。方法区是存放类和常量的信息的。#垃圾收集算法1.标记清除2…复制,量少的时候3.标记,整理,用于量多,碎片化时候。#分代收集算法#编译过程##1.第一...

2019-08-25 18:55:20 659 2

原创 安卓Context-外观设计模式

外观模式定义外观模式就是复杂系统对外的简单统一接口。便于把内部的复杂和外部的简单调用隔离。Activity举例-代理模式Activity的startActivity()其实是context的子类完成的。Activity本身是context的子类,继承于ContextThemeWraper==》contextWraper==》context。contextWraper有个对象是mBase就是...

2019-06-30 23:07:56 1033 2

原创 Android的Handler机制深入浅出

1.Message设计模式和成员命令设计模式callback存储post(runnable)里面的runnabletarget就是存储处理他的handle(这里是命令设计模式,命令和执行者分离,messagequene取出来执行不会混乱)享元设计模式静态变量sPoolSync是用来对象同步的。sPoolSize计数。sPool是链表的头指针。message是享元设计模式。整个安...

2019-06-29 23:26:58 679 2

原创 安卓Binder入门

图说架构四部分结构四部分 Client ,server ,servicemanager,binder驱动binder内核:是一个文件,处于内核空间,能够传递跨进程的数据,Binder引用计数,建立Binder的内存空间和引用,分别对应Binder_node和Binder_ref,类似一个路由器的角色。Client:新建Client一般是通过集成AIDL.stub来完成,服务名类似域名...

2019-06-16 22:06:50 1082 5

原创 Java和Python语言比较

背景作为一个Java老程序员,最实现一个功能,发现了python的实现代码,就直接拿过来用了,在改动的过程中,去官网看了Pyhton的语法,发现了和Java的几点不同,算是抛砖引玉,如有错误,欢迎指正~类型Java是周所周知的强类型语言,这个优势在大型项目中体现的很明显,比如:阿里和美团的后都是Java语言,但是也引入了不够灵活的毛病。Python是弱类型语言更灵活一些。结...

2018-09-09 19:18:59 11927 6

深入理解Java虚拟机——JVM高级特性与最佳实践(第2版

深入理解Java虚拟机——JVM高级特性与最佳实践(第2版).pdf,完整,带书签, 完整版

2017-11-03

空空如也

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

TA关注的人

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