<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[陶程的博客]]></title><description><![CDATA[Keep the beginner's mind.]]></description><link>https://blog.youkuaiyun.com/CodeEmperor</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; CodeEmperor]]></copyright><item><title><![CDATA[［Android进阶］Android 开发最佳实践]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51533286</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51533286</guid><author>CodeEmperor</author><pubDate>Sun, 29 May 2016 18:42:21 +0800</pubDate><description><![CDATA[Android 开发最佳实践从Futurice公司Android开发者中学到的经验。 
遵循以下准则，避免重复发明轮子。若您对开发iOS或Windows Phone 有兴趣， 
请看iOS Good Practices 和 Windows client Good Practices 这两篇文章。摘要
使用 Gradle 和它推荐的工程结构
把密码和敏感数据放在gradle.properties
不要]]></description><category></category></item><item><title><![CDATA[［Android进阶］Java、Android 内存泄漏总结]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51514448</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51514448</guid><author>CodeEmperor</author><pubDate>Fri, 27 May 2016 13:07:49 +0800</pubDate><description><![CDATA[Java、Android 内存泄漏总结内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了，简单粗俗的讲，就是该被释放的对象没有释放，一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。最近自己阅读了大量相关的文档资料，打算做个 总结 沉淀下来跟大家一起分享和学习，也给自己一个警示，以后 coding 时怎么避免这些情况，提高应用的体验和质量。我]]></description><category></category></item><item><title><![CDATA[［算法］很特别的一个动态规划入门教程]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51484372</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51484372</guid><author>CodeEmperor</author><pubDate>Mon, 23 May 2016 20:11:30 +0800</pubDate><description><![CDATA[转载自http://www.cnblogs.com/sdjl/articles/1274312.html通过金矿模型介绍动态规划     对于动态规划，每个刚接触的人都需要一段时间来理解，特别是第一次接触的时候总是想不通为什么这种方法可行，这篇文章就是为了帮助大家理解动态规划，并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂，无异性，不让读者感到迷惑，引导读者去思考，所以如]]></description><category></category></item><item><title><![CDATA[［Android进阶］Android性能优化]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51480671</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51480671</guid><author>CodeEmperor</author><pubDate>Mon, 23 May 2016 12:10:11 +0800</pubDate><description><![CDATA[Android性能优化合理管理内存节制的使用Service如果应用程序需要使用Service来执行后台任务的话，只有当任务正在执行的时候才应该让Service运行起来。当启动一个Service时，系统会倾向于将这个Service所依赖的进程进行保留，系统可以在LRUcache当中缓存的进程数量也会减少，导致切换程序的时候耗费更多性能。我们可以使用IntentService，当后台任务执行结束后会自动]]></description><category></category></item><item><title><![CDATA[［Android进阶］Android中使用的观察者模式]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51418258</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51418258</guid><author>CodeEmperor</author><pubDate>Sun, 15 May 2016 18:43:33 +0800</pubDate><description><![CDATA[Android中使用观察者模式的代码有很多，比如最近很火的EventBus、RxAndroid等，都使用了观察者模式，原因是观察者模式观察者和被观察者之间是抽象耦合，应对业务变化，可以增强系统灵活性，可扩展性。我们很熟悉的BroadcastReceiver和ListView同样用到了观察者模式，当然ListView肯定用到了适配器模式。我们关心一下这两个是如何使用观察者模式的：首先在Android中]]></description><category></category></item><item><title><![CDATA[［Java数据结构］从源码分析HashMap]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51351247</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51351247</guid><author>CodeEmperor</author><pubDate>Mon, 09 May 2016 10:33:39 +0800</pubDate><description><![CDATA[HashMapHashMap和Hashtable的区别：
Hashtable的大部分方法做了同步，HashMap没有，因此，HashMap不是线程安全的。
Hashtable不允许key或者value使用null值，而HashMap可以。
在内部算法上，它们对key的hash算法和hash值到内存索引的映射算法不同。
HashMap的实现原理简单说，HashMap就是将key做hash算法，然后将h]]></description><category></category></item><item><title><![CDATA[［算法］删除字符串中重复的字符]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51345034</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51345034</guid><author>CodeEmperor</author><pubDate>Sun, 08 May 2016 12:12:55 +0800</pubDate><description><![CDATA[如何删除字符串中重复的字符问题描述：
  删除字符串中重复的字符，例如，”good”去掉重复的字符串后就变成”god”。
第一种方法：
  “蛮力法”，最简单的方法就是把这个字符串看作是一个字符数组，对该数组使用双重循环进行遍历，如果发现有重复的字符，就把该字符置为’\0’，最后再把这个字符数组中所有的’\0’去掉，此时得到的字符串就是删除重复字符后的目标字符串。
代码如下：package 删除字符]]></description><category></category></item><item><title><![CDATA[［算法］判断两个字符串是否由相同的字符组成]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51337983</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51337983</guid><author>CodeEmperor</author><pubDate>Sat, 07 May 2016 14:57:32 +0800</pubDate><description><![CDATA[如何判断两个字符串是否由相同的字符组成题目描述：
  由相同的字符组成是指组成两个字符串的字母以及各个字母的个数是一样的，只是排列顺序不同而已。例如”aaaabbc”与”abcbaaa”就由相同的字符组成的。
方法一：
  排序法，将两个字符串中的字符排序，比较两个排序后的字符串是否相等。若相等则表明它们是由相同的字符组成的，否则，表明他们是由不同的字符组成的。
import java.util.A]]></description><category></category></item><item><title><![CDATA[［算法］求栈中最小元素]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51336338</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51336338</guid><author>CodeEmperor</author><pubDate>Sat, 07 May 2016 09:46:03 +0800</pubDate><description><![CDATA[如何用O(1)的时间复杂度求栈中最小元素解题思路：
  我们经常会采用空间换取时间提高时间复杂度。我们可以使用两个栈结构，一个栈用来存储数据，另一个栈用来存储栈中的最小元素。思路如下：如果当前入栈的元素比原来栈中的最小值还小，则把这个值压入保存最小元素的栈中；在出栈时，如果当前入栈的元素恰好为当前栈中的最小值，保存最小值的栈顶元素也出栈，使得当前最小值变为其入栈之前的那个最小值。
实现代码如下：pa]]></description><category></category></item><item><title><![CDATA[［算法］如何实现栈]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51336191</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51336191</guid><author>CodeEmperor</author><pubDate>Sat, 07 May 2016 09:19:49 +0800</pubDate><description><![CDATA[如何实现栈
  采用数组和链表两种方式来实现栈
数组实现栈，代码如下：package 如何实现栈;import java.util.Arrays;public class MyStack<E> {    private Object[] stack;
    private int size;   //数组中存储的个数
    public MyStack(){
        stack = ne]]></description><category></category></item><item><title><![CDATA[［算法］判断一个链表是否有环]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51334616</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51334616</guid><author>CodeEmperor</author><pubDate>Fri, 06 May 2016 21:05:43 +0800</pubDate><description><![CDATA[如何判断一个链表是否有环解题思路：
  定义两个指针fast和slow，其中fast是快指针，slow是慢指针，二者的初始值都指向链表头，slow每前进一步，fast每次前进两步，两个指针同时向前移动，快指针每移动一次都要和慢指针比较，直到当快指针等于慢指针为止，就证明这个链表是带环的单向链表，否则，证明这个链表是不带环的循环链表(fast先行到达尾部为NULL，则为无环链表)。
代码实现如下：pu]]></description><category></category></item><item><title><![CDATA[［算法］实现单链表的反转]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51333775</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51333775</guid><author>CodeEmperor</author><pubDate>Fri, 06 May 2016 18:32:07 +0800</pubDate><description><![CDATA[实现链表的反转解题思路：
  为了正确反转一个链表，需要调整指针的指向。举例说明，例如i,m,n是三个相邻的结点，假设经过若干步操作，已经把结点i之前的指针调整完毕，这些结点的next指针都指向前面一个结点。现在遍历到结点m，当然需要调整结点的next指针，让它指向结点i，但需要注意的是，一旦调整了指针的指向，链表就断开了，因为已经没有指针指向结点n，没有办法再遍历到结点n了，所以为了避免指针断开，]]></description><category></category></item><item><title><![CDATA[［算法］找出单链表中的倒数第k个元素]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51332514</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51332514</guid><author>CodeEmperor</author><pubDate>Fri, 06 May 2016 16:12:23 +0800</pubDate><description><![CDATA[找出单链表中的倒数第k个元素解题思路：
  为了求出链表中的倒数第k个元素，最容易想到的方法是首先遍历一遍单链表，求出整个单链表的长度n，然后将倒数第k个，转换为正数第n-k个，接下去遍历一次就可以得到结果。不过这种方法需要对链表进行两次遍历，第一次遍历用于求解单链表的长度，第二次遍历用于查找正数第n-k个元素。 
  如果沿从头至尾的方向从链表中的某个元素开始，遍历k个元素刚好到达链表尾，那么元素]]></description><category></category></item><item><title><![CDATA[［数据结构］链表的基本操作]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51330599</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51330599</guid><author>CodeEmperor</author><pubDate>Fri, 06 May 2016 12:19:24 +0800</pubDate><description><![CDATA[链表可以用任意一组存储单元来存储单链表中数据元素(存储单元可以是不连续的)，而且，除了存储每个数据元素ai的值以外，还必须存储指示其直接后继元素的信息。这两部分信息组成的数据元素ai的存储映像称为结点。N个结点链在一起被称为链表，当结点只包含其后继结点的信息的链表就被称为单链表。链表定义如下数据类来存储结点信息：public class Node {    Node next = null;]]></description><category></category></item><item><title><![CDATA[［设计模式］23种设计模式]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51325812</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51325812</guid><author>CodeEmperor</author><pubDate>Thu, 05 May 2016 19:56:47 +0800</pubDate><description><![CDATA[最近一直在读《研磨设计模式》，将自己的笔记写成Markdown格式，并且将代码都敲了一遍，并写上了注释，开源在了Github上，欢迎Star，持续更新。https://github.com/GeniusVJR/DesignMode_Java]]></description><category></category></item><item><title><![CDATA[［React-Native］环境安装问题]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51275056</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51275056</guid><author>CodeEmperor</author><pubDate>Thu, 28 Apr 2016 15:59:58 +0800</pubDate><description><![CDATA[当我在Mac中写下命令时：react-native run-android老是显示BUILD FALSE。这是没有关联到Android的SDK路径。如下命令，可以解决：cd ~
touch .bash_profile
vi .bash_profile然后在打开的输入界面贴进去： 
[]内为你的Android  SDK路径export ANDROID_HOME=[/usr/local/opt/andr]]></description><category></category></item><item><title><![CDATA[［面经］豌豆荚三面]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51274437</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51274437</guid><author>CodeEmperor</author><pubDate>Thu, 28 Apr 2016 15:09:15 +0800</pubDate><description><![CDATA[豌豆荚一面
介绍一下你的项目
网络框架的搭建
图片加载框架的实现
写个图片浏览器，说出你的思路
上网站写代码，如下： 
有一个容器类 ArrayList，保存整数类型的元素，现在要求编写一个帮助类，类内提供一个帮助函数，帮助函数的功能是删除 容器中<10的元素。
豌豆荚二面Activity的启动模式 
事件分发机制写代码，LeetCode上股票利益最大化问题 
写代码，剑指offer上第一次只出现一]]></description><category></category></item><item><title><![CDATA[［架构］我眼中的Android架构]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51115086</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51115086</guid><author>CodeEmperor</author><pubDate>Sun, 10 Apr 2016 21:19:30 +0800</pubDate><description><![CDATA[原文链接：https://medium.com/@laanayabdrzak/architecting-modern-mobile-applications-bf896120f0c2#.n1m5i520c在完成了一些项目之后，我根据个人经验，总结了一下如何正确地设计一个Android应用架构。首先要分享的就是Bob大叔的一篇文章好的架构有如下特点：
独立于UI
独立于任何框架
独立于任何第三方服务]]></description><category></category></item><item><title><![CDATA[［算法最优］设计一个有getMin功能的栈]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51112880</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51112880</guid><author>CodeEmperor</author><pubDate>Sun, 10 Apr 2016 14:48:04 +0800</pubDate><description><![CDATA[题目：实现一个特殊的栈，在实现栈的基本功能的基础上，再实现返回栈中最小元素的操作。要求：1、pop、push、getMin操作的时间复杂度都是O(1)  
2、设计的栈类型可以输用现成的栈结构首先看下我写的，思路大概就是用两个栈，一个栈用于自定义栈的弹出，压入，辅助栈用于存放最小值，当压入第一个栈的时候，会判断辅助栈是否为空，如果为空也压入，如果不为空，就比较，如果小于等于辅助栈的第一个值，就压入。]]></description><category></category></item><item><title><![CDATA[［算法］年终奖]]></title><link>https://blog.youkuaiyun.com/CodeEmperor/article/details/51068478</link><guid>https://blog.youkuaiyun.com/CodeEmperor/article/details/51068478</guid><author>CodeEmperor</author><pubDate>Tue, 05 Apr 2016 21:42:57 +0800</pubDate><description><![CDATA[小东所在公司要发年终奖，而小东恰好获得了最高福利，他要在公司年会上参与一个抽奖游戏，游戏在一个6*6的棋盘上进行，上面放着36个价值不等的礼物，每个小的棋盘上面放置着一个礼物，他需要从左上角开始游戏，每次只能向下或者向右移动一步，到达右下角停止，一路上的格子里的礼物小东都能拿到，请设计一个算法使小东拿到价值最高的礼物。 
给定一个6*6的矩阵board，其中每个元素为对应格子的礼物价值,左上角为[0]]></description><category></category></item></channel></rss>