2013年7月26日

Effective Java:Ch4_Class:Item14_在public类中应该使用访问方法而不是public域

摘要: 你可能偶尔需要编写退化类,目的只是为了集中实例域:// Degenerate classes like this should not be public!class Point { public double x; public double y;} 由于这种类的数据域是可以直接访问的,所以他们不能提供“封装”带来的好处。如果不改变API,就不能改变其数据表示法,不能强加任何约束,当域被访问时不能采取任何辅助行为。强硬派的面向对象程序员会非常厌恶这种类,认为这种类应该被包含private域和public访问方法(getter)的类替代。对于可变类,还应该包含setter。// Enc... 阅读全文
posted @ 2013-07-26 18:30 you Richer 阅读(214) 评论(0) 推荐(0) 编辑

[置顶] 学习JDK源码:可进一步优化的代码

摘要: 1、参数化类型的构造函数比较啰嗦 new HashMap>() 如果你调用参数化类的构造函数,那么很不幸,你必须要指定类型参数,即便上下文中已明确了类型参数。这通常要求你连续两次提供类型参数: Map> m = new HashMap>(); 而 假设HashMap提供了如下静态工厂: public static HashMap newInstance(){ return new HashMap(); } 然后你就可以讲上文冗长的声明替换为如下这种简洁的形式: Map> m = HashMap.newInstance(); ——com.... 阅读全文
posted @ 2013-07-26 18:28 you Richer 阅读(138) 评论(0) 推荐(0) 编辑

[置顶] 学习JDK源码:编程习惯和设计模式

摘要: 编程习惯 1、用工厂方法替代构造函数Boolean.valueOf() 通过一个boolean简单类型,构造Boolean对象引用。优点:无需每次被调用时都创建一个新对象。同时使得类可以严格控制在哪个时刻有哪些实例存在 >>实例受控的类 public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALSE; } 静态工厂方法Boolean.valueOf(String)几乎总是比构造函数Boolean(String)更可取。构造函数每次被调用时都会创建一个新对... 阅读全文
posted @ 2013-07-26 18:26 you Richer 阅读(321) 评论(0) 推荐(0) 编辑

如何开展软件架构之概念架构

摘要: 如何开展软件架构之概念架构到目前为止,我们已经完成了需求的分析过程,总结来说,主要的步聚是一)需求结构化,二)分析约束影响三)重点关注质量需求。那么接下来的阶段则是系统的概念架构了,这也许是大家最感兴趣的话题,前面提到系统的多层架构,各层之间相互隔离,下层提供服务而不知道上层应用,上层也只通过接口与下层交互,每一层的修改均不会影响其它层的逻辑,看上去有多华丽就有多华丽!但是真正开始系统架构时,却有无从下手无力感,为啥?因为你注意到软件的概念架构最主要的任务就是将系统按照某作规则划分成各种子系统,确定各子系统之间的协作,为下一阶段的细化设计奠定基础。系统划分的规则主要有三类:1:按逻辑分割2:按 阅读全文
posted @ 2013-07-26 18:24 you Richer 阅读(206) 评论(0) 推荐(0) 编辑

POJ 3667 & 1823 Hotel (线段树区间合并)

摘要: 两个题目都是用同一个模板,询问最长的连续未覆盖的区间 。lazy代表是否有人,msum代表区间内最大的连续长度,lsum是从左结点往右的连续长度,rsum是从右结点往左的连续长度。 区间合并很恶心啊,各种左左右右左右左右........ #include #include #include #include # define MAX 211111# define ll(x) x > 1)) tree[x].lsum += tree[rr(x)].lsum; if(tree[x].rsum == (p >> 1)) tree[x].rsum += tree[ll(x)].rsu 阅读全文
posted @ 2013-07-26 18:22 you Richer 阅读(141) 评论(0) 推荐(0) 编辑

CF 161D Distance in Tree【树DP】

摘要: 题目大意:给一棵树,求树上两点之间距离为K的点对数目。方程含义:dp(i,j)表示从已经遍历过的点到当前点i,路径长度为 j 的路径条数。因此,对于当前点,每当遍历了其中一个儿子节点的时候,首先统计当前情况下的结果,然后要更新dp(i, j)初始条件dp(i,0)= 1 #include #include #include using namespace std;#define N 50005vector g[N];int dp[N][505], n, k, ans;void dfs(int now, int fa) { for (int i=1; i<=k; i++) dp[now][ 阅读全文
posted @ 2013-07-26 18:20 you Richer 阅读(193) 评论(0) 推荐(0) 编辑

BroadcastReceiver基础总结

摘要: BroadcastReceiver基础总结BroadcastReceiver是Android四大组件之一,主要负责接收系统或其他程序发出的广播,在开发中,通常用做事件驱动的起源,比如开机就要开启一个程序,有网络就要开始下载资源,安装或卸载包了,就要跟新UI等等。以下就对这个组件总结我自己的理解:BroadcastReceiver的生命周期 BroadcastReceiver的生命周期很短,当系统或其他程序发出广播的时候,Android系统的包管理对象就会检查所有已安装的包中的配置文件有没有匹配的action,如果有,并且可以接收,那么就调用这个BroadcastReceiver,获取Broad 阅读全文
posted @ 2013-07-26 18:19 you Richer 阅读(294) 评论(0) 推荐(0) 编辑

排序比较与总结

摘要: 之前一共实现了6种比较常见的排序算法,分别是:选择排序,插入排序,冒泡排序,归并排序,快速排序,堆排序效率:衡量一个算法的效率包括空间和时间,有时候还要考虑稳定性。 前3种排序的方法效率较低,实现也比较简单,适合规模比较小的排序,个人认为适合排序总量在10000以下的随机数组。后3种排序的方法效率较高,实现稍微复杂一点,但也还好,适合规模较大的排序。 时间方面,前3种排序的复杂度都是O(N^2),后3种排序的复杂度都是O(N*LogN),即呈指数级减少(因为基本思路都是递归的方式分治)。当然了,这是平均情况。空间方面,即是否需要额外的空间,只有归并排序需要一个数组长度相同的空间来存储排序的结果 阅读全文
posted @ 2013-07-26 18:17 you Richer 阅读(247) 评论(0) 推荐(0) 编辑

Oracle误删恢复

摘要: query deleted datarows: select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss') //Needs Auth [flash any table] data table flashback: alter table 表名 enable row movement; //then flashback table 表名 to timestamp to_timestamp(删除时间点','yyyy-mm-dd hh24:mi:ss 阅读全文
posted @ 2013-07-26 18:15 you Richer 阅读(233) 评论(0) 推荐(0) 编辑

DSP TMS320C6000基础学习(4)—— cmd文件分析

摘要: DSP中的CMD文件是链接命令文件(Linker Command File),以.cmd为后缀。 在分析cmd文件之前,必需先了解 (1)DSP具体芯片的内存映射(Memory Map) (2)知道点链接的知识,知道C程序中段的概念 (3)知道RAM,Flash等存储模块的区别 ====================================================================== 1. coff目标文件 ====================================================================== c... 阅读全文
posted @ 2013-07-26 18:13 you Richer 阅读(629) 评论(0) 推荐(0) 编辑