自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

陶程的博客

Keep the beginner's mind.

  • 博客(66)
  • 收藏
  • 关注

转载 [Android进阶]Android 开发最佳实践

Android 开发最佳实践从Futurice公司Android开发者中学到的经验。 遵循以下准则,避免重复发明轮子。若您对开发iOS或Windows Phone 有兴趣, 请看iOS Good Practices 和 Windows client Good Practices 这两篇文章。摘要使用 Gradle 和它推荐的工程结构把密码和敏感数据放在gradle.properties不要

2016-05-29 18:42:21 3229

转载 [Android进阶]Java、Android 内存泄漏总结

Java、Android 内存泄漏总结内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量。我

2016-05-27 13:07:49 4990 5

转载 [算法]很特别的一个动态规划入门教程

转载自http://www.cnblogs.com/sdjl/articles/1274312.html通过金矿模型介绍动态规划 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如

2016-05-23 20:11:30 2934

原创 [Android进阶]Android性能优化

Android性能优化合理管理内存节制的使用Service如果应用程序需要使用Service来执行后台任务的话,只有当任务正在执行的时候才应该让Service运行起来。当启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,系统可以在LRUcache当中缓存的进程数量也会减少,导致切换程序的时候耗费更多性能。我们可以使用IntentService,当后台任务执行结束后会自动

2016-05-23 12:10:11 10594 1

原创 [Android进阶]Android中使用的观察者模式

Android中使用观察者模式的代码有很多,比如最近很火的EventBus、RxAndroid等,都使用了观察者模式,原因是观察者模式观察者和被观察者之间是抽象耦合,应对业务变化,可以增强系统灵活性,可扩展性。我们很熟悉的BroadcastReceiver和ListView同样用到了观察者模式,当然ListView肯定用到了适配器模式。我们关心一下这两个是如何使用观察者模式的:首先在Android中

2016-05-15 18:43:33 1936

原创 [Java数据结构]从源码分析HashMap

HashMapHashMap和Hashtable的区别:Hashtable的大部分方法做了同步,HashMap没有,因此,HashMap不是线程安全的。Hashtable不允许key或者value使用null值,而HashMap可以。在内部算法上,它们对key的hash算法和hash值到内存索引的映射算法不同。HashMap的实现原理简单说,HashMap就是将key做hash算法,然后将h

2016-05-09 10:33:39 5935 4

原创 [算法]删除字符串中重复的字符

如何删除字符串中重复的字符问题描述: 删除字符串中重复的字符,例如,”good”去掉重复的字符串后就变成”god”。第一种方法: “蛮力法”,最简单的方法就是把这个字符串看作是一个字符数组,对该数组使用双重循环进行遍历,如果发现有重复的字符,就把该字符置为’\0’,最后再把这个字符数组中所有的’\0’去掉,此时得到的字符串就是删除重复字符后的目标字符串。代码如下:package 删除字符

2016-05-08 12:12:55 9838

原创 [算法]判断两个字符串是否由相同的字符组成

如何判断两个字符串是否由相同的字符组成题目描述: 由相同的字符组成是指组成两个字符串的字母以及各个字母的个数是一样的,只是排列顺序不同而已。例如”aaaabbc”与”abcbaaa”就由相同的字符组成的。方法一: 排序法,将两个字符串中的字符排序,比较两个排序后的字符串是否相等。若相等则表明它们是由相同的字符组成的,否则,表明他们是由不同的字符组成的。import java.util.A

2016-05-07 14:57:32 10688

原创 [算法]求栈中最小元素

如何用O(1)的时间复杂度求栈中最小元素解题思路: 我们经常会采用空间换取时间提高时间复杂度。我们可以使用两个栈结构,一个栈用来存储数据,另一个栈用来存储栈中的最小元素。思路如下:如果当前入栈的元素比原来栈中的最小值还小,则把这个值压入保存最小元素的栈中;在出栈时,如果当前入栈的元素恰好为当前栈中的最小值,保存最小值的栈顶元素也出栈,使得当前最小值变为其入栈之前的那个最小值。实现代码如下:pa

2016-05-07 09:46:03 3599

原创 [算法]如何实现栈

如何实现栈 采用数组和链表两种方式来实现栈数组实现栈,代码如下:package 如何实现栈;import java.util.Arrays;public class MyStack<E> { private Object[] stack; private int size; //数组中存储的个数 public MyStack(){ stack = ne

2016-05-07 09:19:49 2575

原创 [算法]判断一个链表是否有环

如何判断一个链表是否有环解题思路: 定义两个指针fast和slow,其中fast是快指针,slow是慢指针,二者的初始值都指向链表头,slow每前进一步,fast每次前进两步,两个指针同时向前移动,快指针每移动一次都要和慢指针比较,直到当快指针等于慢指针为止,就证明这个链表是带环的单向链表,否则,证明这个链表是不带环的循环链表(fast先行到达尾部为NULL,则为无环链表)。代码实现如下:pu

2016-05-06 21:05:43 2198

原创 [算法]实现单链表的反转

实现链表的反转解题思路: 为了正确反转一个链表,需要调整指针的指向。举例说明,例如i,m,n是三个相邻的结点,假设经过若干步操作,已经把结点i之前的指针调整完毕,这些结点的next指针都指向前面一个结点。现在遍历到结点m,当然需要调整结点的next指针,让它指向结点i,但需要注意的是,一旦调整了指针的指向,链表就断开了,因为已经没有指针指向结点n,没有办法再遍历到结点n了,所以为了避免指针断开,

2016-05-06 18:32:07 3339

原创 [算法]找出单链表中的倒数第k个元素

找出单链表中的倒数第k个元素解题思路: 为了求出链表中的倒数第k个元素,最容易想到的方法是首先遍历一遍单链表,求出整个单链表的长度n,然后将倒数第k个,转换为正数第n-k个,接下去遍历一次就可以得到结果。不过这种方法需要对链表进行两次遍历,第一次遍历用于求解单链表的长度,第二次遍历用于查找正数第n-k个元素。 如果沿从头至尾的方向从链表中的某个元素开始,遍历k个元素刚好到达链表尾,那么元素

2016-05-06 16:12:23 8047 1

原创 [数据结构]链表的基本操作

链表可以用任意一组存储单元来存储单链表中数据元素(存储单元可以是不连续的),而且,除了存储每个数据元素ai的值以外,还必须存储指示其直接后继元素的信息。这两部分信息组成的数据元素ai的存储映像称为结点。N个结点链在一起被称为链表,当结点只包含其后继结点的信息的链表就被称为单链表。链表定义如下数据类来存储结点信息:public class Node { Node next = null;

2016-05-06 12:19:24 3068

原创 [设计模式]23种设计模式

最近一直在读《研磨设计模式》,将自己的笔记写成Markdown格式,并且将代码都敲了一遍,并写上了注释,开源在了Github上,欢迎Star,持续更新。https://github.com/GeniusVJR/DesignMode_Java

2016-05-05 19:56:47 3265 1

原创 [React-Native]环境安装问题

当我在Mac中写下命令时:react-native run-android老是显示BUILD FALSE。这是没有关联到Android的SDK路径。如下命令,可以解决:cd ~touch .bash_profilevi .bash_profile然后在打开的输入界面贴进去: []内为你的Android SDK路径export ANDROID_HOME=[/usr/local/opt/andr

2016-04-28 15:59:58 1001

原创 [面经]豌豆荚三面

豌豆荚一面介绍一下你的项目网络框架的搭建图片加载框架的实现写个图片浏览器,说出你的思路上网站写代码,如下: 有一个容器类 ArrayList,保存整数类型的元素,现在要求编写一个帮助类,类内提供一个帮助函数,帮助函数的功能是删除 容器中<10的元素。豌豆荚二面Activity的启动模式 事件分发机制写代码,LeetCode上股票利益最大化问题 写代码,剑指offer上第一次只出现一

2016-04-28 15:09:15 1314

转载 [架构]我眼中的Android架构

原文链接:https://medium.com/@laanayabdrzak/architecting-modern-mobile-applications-bf896120f0c2#.n1m5i520c在完成了一些项目之后,我根据个人经验,总结了一下如何正确地设计一个Android应用架构。首先要分享的就是Bob大叔的一篇文章好的架构有如下特点:独立于UI独立于任何框架独立于任何第三方服务

2016-04-10 21:19:30 4330

原创 [算法最优]设计一个有getMin功能的栈

题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。要求:1、pop、push、getMin操作的时间复杂度都是O(1) 2、设计的栈类型可以输用现成的栈结构首先看下我写的,思路大概就是用两个栈,一个栈用于自定义栈的弹出,压入,辅助栈用于存放最小值,当压入第一个栈的时候,会判断辅助栈是否为空,如果为空也压入,如果不为空,就比较,如果小于等于辅助栈的第一个值,就压入。

2016-04-10 14:48:04 2472

原创 [算法]年终奖

小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。 给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0

2016-04-05 21:42:57 2773 2

原创 [算法]小球的距离

小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数) 给定四个整数A,B,C,D,请返回所求结果。刚开始做这个题收到了括号里 数字都为整数 的误导,以为 落地距离是5米,弹起后2米(5/2自动取整)。算出来结果不对,变小了。所以,

2016-04-05 21:24:27 2603

原创 [读书笔记]《APP研发录》第二章

APP研发录第二章笔记抛弃AsyncTask,自定义一套网络底层的封装框架。设计一套App缓存策略。设计一套MockService的机制,在没有MobileAPI的时候,也能假装获取到了网络返回的数据。封装了用户Cookie的逻辑。2.1 网络底层封装很多公司和团队都是用AsyncTask来封装网络底层,因为这个类非常好用,内部封装了很多好用的方法,但缺点是可扩展性不高。对于网络请求,我们

2016-04-05 18:15:47 2366

原创 [算法]微信红包

春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。 给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。测试样例: [1,2,3,2,2],5 返回:2package 微信红包;import java.util.Arrays;public c

2016-03-31 16:03:23 1893

转载 [Android基础]Android总结篇

Android公共技术:公共技术点之 Android 动画基础公共技术点之 Java 动态代理公共技术点之依赖注入公共技术点之 View 事件传递公共技术点之 View 绘制流程1.Android的Framework和Android apk的打包过程底层的Binder驱动,IPC的核心,SGL 2D绘图,OpenGL 3D绘图2.多线程AsyncTask:AsyncTask的缺陷和问题关于线程池:a

2016-03-29 11:08:25 25235 4

原创 [Android开发]知乎日报

最近在利用知乎日报的接口写知乎日报,接下来将遇到的坑都记录下来。Android studio中“import org.apache.http.Header;”不能导入,原因是Android M 起默认移除了Apache HTTP。 module的build.gradle中:dependencies { compile 'org.apache.httpcomponents:httpcor

2016-03-26 01:30:04 1521

转载 [Java基础]Java总结篇

本文来自于清华大神(潇涧)的Java总结,已得到其本人允许转载1.JVMJVM内存模型:PC(程序计数器),虚拟机栈,本地方法栈,Java堆,方法区PC:字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。虚拟机栈:每个方法被执行的时候都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作

2016-03-24 11:32:23 3858 4

原创 [Java虚拟机]Java内存模型与线程

深入理解Java虚拟机读书笔记第12章主内存和工作内存java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。为了获得较好的执行效能,Java内存模型咩有并没有限制执行引擎使用处理器的特定寄存器或缓存来和主内存进行交互,也没有限制即时编译器调整代码执行顺序这类权利。Java内存模型规定了所有的变量都存储在主内存中(Main Memory

2016-03-21 11:38:49 1559 1

转载 [Android进阶]Android消息机制

此篇文章学习自侯亮的博客,博客链接如下:聊一聊Android的消息机制摘要从技术实现上来说,消息机制还是比较简单的。从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的。 本文将基于Android 4.4代码,为大家剖析一下Android的消息机制。1概述在Android平台上,主要用到两种通信机制,即Binder机制和消息机制,前者用于跨进程通信,后者用于进程内部通信。

2016-03-19 15:06:11 3267 1

原创 [剑指Offer]面试题35:第一个只出现一次的字符

题目给定一个字符串,求第一个不重复的字符 abbcad -> c解题思路:今天中午面试的时候第二题我的思路是从头开始扫描字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较。如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符串相比较,因此这种思路的时间复杂度为O(n^2)。这不是最好的做法,更好的做法时间复杂度应

2016-03-19 10:23:46 2240

转载 [Android进阶]Binder学习(初始篇)

Android中Binder学习(初始篇)本篇博客学习自侯亮的博客,地址为:红茶一杯话Binder1 什么是Binder?简单地说,Binder是Android平台上的一种跨进程交互技术。该技术最早并不是由Google公司提出的,它的前身是Be Inc公司开发的OpenBinder,而且在Palm中也有应用。后来OpenBinder的作者Dianne Hackborn加入了Google公司,并负责A

2016-03-19 09:32:35 2502

原创 [面经]阿里二面

直接登录系统写算法。是的,就写了两个算法,一个小时!先说思路然后完整的写!1.标号1-n的n个人首尾相接,1到3报数,报到3的退出,求最后一个人的标号写完他没说什么,就说下一题。2.给定一个字符串,求第一个不重复的字符 abbcad -> c第二个要求时间复杂度为O(n)。我写了两次都是O(n^2),面试官让我下去写发邮件给他,希望能面到最后!

2016-03-17 12:21:27 2527 3

原创 [面试]阿里一面

阿里一面。说一下你怎么学习安卓的?项目中遇到哪些问题,如何解决的?Android事件分发机制?问的好深。没有详细真正理解是不行的。三级缓存底层实现?HashMap底层实现,hashCode如何对应bucket,问得好深。Java的垃圾回收机制,引用计数法两个对象互相引用如何解决?Acticity的生命周期,Activity异常退出该如何处理?tcp和udp的区别,tcp如何保证可靠的

2016-03-15 12:42:41 1286 1

原创 [Android开发]Mac下NDK开发(JNI)

Mac下Android调用C/C++程序的实现(JNI)IDE用的是Androidstudio。首先,我们需要配置Mac下的NDK环境,比较简单,参考博客:Mac下Android studio 之NDK配置教程(一) Mac下Android studio 之NDK配置教程(二)好,接下来我们就开始写我们在Mac下的第一个NDK程序。第一步:首先,新建一个项目,项目截图如下:在NavHelper中定

2016-03-12 12:42:47 2621

原创 [面经]腾讯一面

昨天晚上在图书馆自习,突然接到了来自广东深圳的电话,想到了是腾讯打来的,内心很忐忑,接上了。面试官一听就是广东人,人很好。就问我能不能进行大概二十分钟的面试,我说可以。然后就开始了。首先让我自我介绍,我就简单介绍了一下自己,说到了自己的技术经历。然后他问我说看到简历上有写创业经历,好像面试官对于这段经历非常感兴趣,大概聊了几分钟。具体就不说了。然后就说能帮我推荐到虚拟现实部门,我说不用,想先做好移动

2016-03-10 11:35:47 2071 1

原创 [读书笔记]《Android开发艺术探索》第十五章笔记

Android性能优化Android不可能无限制的使用内存和CPU资源,过多的使用内存会导致内存溢出,即OOM。而过多的使用CPU资源,一般是指做大量的耗时任务,会导致手机变的卡顿甚至出现程序无法响应的情况,即ANR。15.1.1布局优化1、如何进行布局优化?首先删除布局中无用的控件和层级其次有选择的使用性能较低的ViewGroup。布局优化的另一种手段是采用标签、标签、ViewStub。标签

2016-03-06 11:02:50 1086 1

原创 [读书笔记]《APP研发录》第一章

《APP研发录》读书笔记第一章1.1重新规划Android项目结构重新规划Android项目的目录结构,分两步走:建立AndroidLab类库,将与业务无关的逻辑转移到AndroidLab,AndroidLab至少包括五大部分:包名+ acticity,cache,net,ui,utils 。activity包里面存放的是与业务无关的Activity基类。net包里存放的是网络底层封装。cac

2016-03-02 22:43:31 1194 2

翻译 [算法]矩阵的基本运算(Java实现)

直接贴代码:package 基本矩阵运算;public class BasicMatrixMath { public final static int OPERATION_ADD = 1; public final static int OPERATION_SUB = 2; public final static int OPERATION_MUL = 3; /**

2016-02-29 22:35:29 6824

原创 [读书笔记]《程序员代码面试指南》

栈和队列:1、设计一个有getMin功能的栈题目:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。要求:1、pop、push、getMin操作的时间复杂度都是O(1) 2、设计的栈类型可以输用现成的栈结构package 设计一个有getMin功能的栈;import java.util.Stack;public class MyStack1 { private S

2016-02-17 16:19:43 2926

原创 [读书笔记]《Android开发艺术探索》第四章笔记

View的工作原理4.1 初识ViewRoot和DecorView1、ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创建ViewRootImpl对象,并将ViewR

2016-02-14 15:10:36 984

原创 [读书笔记]多线程学习笔记

几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个执行流就是一个线程。线程和进程所有运行中的任务通常对应一个进程(Process)。当一个程序进入内存运行时,即变成一个进程。进程时系统进行资源分配和调度的一个独立单元。进程包含3个特征:1、独立性 2、动态性 3、并发性多线程扩展了多进程的概念,使

2016-02-07 12:12:12 1506

空空如也

空空如也

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

TA关注的人

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