自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

世上只有一种英雄主义

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

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

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

2017-03-02 15:36:33 4953

原创 Java泛型详解

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

2016-09-25 23:43:15 5295 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 5081 3

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

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

2016-09-10 12:50:55 2919

原创 Android Handler机制剖析

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

2016-09-09 12:35:15 2794

原创 java线程同步详解

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

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

原创 【52】java多线程剖析

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

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

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

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

2016-05-26 16:10:55 4949

原创 【49】java内部类剖析

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

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

原创 【42】android Context深度剖析

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

2016-05-19 17:38:24 7045

原创 【39】FlexboxLayout使用介绍

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

2016-05-16 21:26:03 5288

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

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

2016-05-16 15:58:46 4739

原创 【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 7968

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

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

2016-05-01 21:20:32 10352

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

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

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

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

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

2016-05-01 16:58:42 7082 1

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

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

2016-04-30 17:23:15 8885 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 8409 4

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

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

2016-04-29 00:31:54 9536

原创 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 5313

原创 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 4363

原创 AndroidBinder进程间通信系统

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

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

原创 Android代码如何重构

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

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

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

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

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

原创 Android的6个编程原则

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

2020-04-21 01:50:37 141 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 545 1

原创 2019年推荐的技术书单

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

2019-12-31 01:50:43 241

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

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

2019-12-30 15:12:12 35759 1

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

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

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

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

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

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

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

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

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

原创 安卓Context详解

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

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

原创 Android的Handler机制深入浅出

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

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

原创 安卓Binder入门

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

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

原创 华为的文化

最近了解了一些关于华为的文化,发现华为牛逼是有原因的。1.以客户为中心这是从客户的角度,最近腾讯也在转型“产业互联网”,这个客户是谁?比如你卖给一个公司软件管理系统,虽然是员工用,但决定买不买的是老板,那么老板就是客户,那么好用就不一定能卖,而是老板满意。2.以奋斗者为本奋斗者协议还有不让雷锋吃亏扥,轮值董事长等,轮岗等。后续继续补充...

2019-02-20 23:09:59 1746 1

原创 Java和Python语言比较

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

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

原创 产品方法论(三)

《结网》系列读书笔记 这本书已经被陆续的读完了,总结总是落后半拍,坏处是容易遗漏细节,不过这样也有好处:那就是总结思考,把对我印象最深的写出来。产品经理的工作流程检查和体验产品腾讯的pony ma不只是作为ceo,更是腾讯产品的首席体验官,他在半夜三经把产品改进体验的邮件一度被传为美谈。 作为产品经理,我们一定要使用我们的产品,你自己都不使用,怎么指望别人使用,只有在不断的...

2018-08-19 21:40:15 1184 1

原创 产品方法论(二)

《结网》读书笔记系列概念文件化这是非常重要的一个步骤,我们需要一个文件贯穿产品开发的始终,作为指导的明灯。我们常规意义的理解就是产品文档,其实形似不重要,主要是内容。1.结构图一定要描述清楚产品的结构,可以采用MECE原则,也就是互相排序,完全穷尽额思路。通俗点就是面向对象的思路思考产品,然后分类阐述产品的功能,越详细越好。2.说明文档这个每个公司都有规范吧,最接近常规...

2018-08-18 19:27:35 1559 2

原创 产品方法论(一)

这是我的《结网》系列读书笔记和思考。《结网》读书笔记产品初级要考虑的问题我们初次操刀一个产品时候,除了考虑这个产品本真,哈还有一个比较重要的事情是: 1.我们的竞品是什么? 2.如何跟踪行业动态和行业数据? 很好的回答这两个问题,可以保证你及时跟踪行业的动态,这可以很大限度的避免闭门造车,物极必反,但也不要一样的模仿,也要消化吸收。确认好产品概念1.不要拒绝cop...

2018-08-05 20:58:33 2826 5

原创 ReentrantReadWriteLock(互斥)和CountDownLatch(同步)解析

今天讲一下Java常用的两个类,一个是常用的互斥类,一个是同步。ReentrantReadWriteLockReentrantReadWriteLock和同一个包下面的ReentrantLock都是用于互斥。区别是ReentrantReadWriteLock效率更高,分为读写锁。 读锁:ReentrantReadWriteLock.readLock.lock() 写锁:Reentran...

2018-07-09 22:45:10 356 3

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