摘要: http://book.douban.com/subject/4262627/这本书主要介绍了需要重构的情况、出现这些情况可以用到的方法以及,动手重构之前需要有单元测试。需要重构的情况:DuplicatedCode(重复代码)LongMethod(过长函数)LargeClass(过大的类)LongParameterList(过长参数列)DivergentChange(发散式变化)ShotgunSurgery(霰弹式修改)FeatureEnvy(依恋情结)DataClumps(数据泥团)PrimitiveObsession(基本类型偏执)SwitchStatements(switch惊悚现身)P 阅读全文
posted @ 2014-01-03 16:58 yyzhang 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 上一篇文章说的是,避免多个线程在同一时间访问对象中的同一数据,这篇文章来详细说说共享和发布对象。在没有同步的情况下,我们无法预料编译器、处理器安排操作执行的顺序,经常会发生以为“一定会”发生的动作实际上没有发生。可以用一些简单的方法来避免这个问题。在 Java 中,如果不是64位版本的,JVM 会把 double 或者 long 的读和写划分在两个 32 位中,这样一来,在多线程中,没有声明是 volatile 的 double 或者 long 也是不安全的。锁是同步和互斥的,同样也是内存可见的。为了避免出现读到过期的数据,读和写的线程都要使用公共的锁进行同步。volatile 是一种弱同步, 阅读全文
posted @ 2013-10-10 11:14 yyzhang 阅读(562) 评论(1) 推荐(0) 编辑
摘要: 写线程安全的代码,说白了就是管理一个类的共享的、可变的状态。只要有多于 1 个线程对类的状态进行写入,那么就必须用同步来协调这多个线程对状态的访问。对于一个没有状态的类来说(简单的理解就是只有方法没有成员变量,不储存值),它永远都是安全的。而对于有状态的类来说,就要保持其原子性来保证安全。在多线程环境下,一种可能的风险就是 check-then-act (竞争条件的一种),就是 check 的时候条件满足,然后系统状态被别的线程改变了,这时候当前线程不知道 then act, 然后错了。比如用 lazy initialization 就可能出现这种状况,为了避免这种情况,可以把成员变量使用 . 阅读全文
posted @ 2013-10-10 11:14 yyzhang 阅读(231) 评论(1) 推荐(0) 编辑
摘要: Unicode 的发展,英文好的直接去 unicode.org 上去看吧,不好的可以移步到这里看dengyunze的总结:《关于UTF8,UTF16,UTF32,UTF16-LE,UTF16-BE 》。此文讲的清除明白:为了能把世界上的所有字符都表示,理论上需要用 UTF-16,但是由于“大部分”(当然这是欧美那边技术宅男拍脑袋想出来的大部分啦~)的字符只需要 1 个字节就搞定了,用 UTF16 实在太浪费啦,于是他们就用了 UTF8. 对于那些个“少数”(比如中日韩)的字符,就通过一个 UTF8-UTF16 的转换来表示。UTF8 和 UTF16 都是变长表示的,为啥欧美技术宅会觉得太浪费了 阅读全文
posted @ 2013-10-10 11:13 yyzhang 阅读(788) 评论(0) 推荐(0) 编辑
摘要: 使用 matplotlib 在同一张图上绘制两条曲线;使用不同的记号表示曲线;调整坐标轴的取值范围;曲线擦除; 阅读全文
posted @ 2013-10-06 16:56 yyzhang 阅读(642) 评论(0) 推荐(0) 编辑
摘要: 假如数据格式是这样:day 邓文迪 微博 城管0 0.0 9.262970888519191E-4 0.01 0.0 0.0014477585501346314 0.02 0.0 0.0010537133405673631 0.03 0.0 0.001019433865726601 1.640094753065665E-44 0.0 0.0011060571441833288 0.05 0.0 0.001024336887543467 0.06 0.0 0.0011330352754753267 8.53561425754374E-5……想要把“邓文迪”“微博”“城管”三列对应的数据在同一张图 阅读全文
posted @ 2013-09-26 20:14 yyzhang 阅读(4676) 评论(0) 推荐(0) 编辑
摘要: 上图是对国内机场和航线信息进行了一个简单的可视化。圆点表示了中国163个机场的位置,线条显示了5381条航线。之前曾在这个网站上见到了作者用R语言来对全世界的航线进行可视化。正所谓见贤思齐,本图就是模仿山寨的结果。但是这个图的生成没有原文那么复杂,所用到的地理图形包和步骤也与原例略有不同,比较失败的是没有展现出原图的夜景效果。具体实施的步骤如下: 从这个网站下载到机场数据和航线数据; 从中挑选出中国的机场和国内航线,并加以整理; 用ggmap包读取谷歌地图; 将机场和航线信息绘制在地图上。library(ggmap)data.port<-read.csv('d:\\airport 阅读全文
posted @ 2012-09-11 15:26 yyzhang 阅读(1369) 评论(0) 推荐(0) 编辑
摘要: 随着教程推进,基本的语法都接触得差不多了。当要解决某个具体问题时,只需要考虑用什么样的算法来整合运用这些函数和表达式。今天来解决Project Euler的第五个问题,该问题可以用很笨的暴力搜索法子来作,但是更聪明的作法是采用质因子分解的思路。即任何一个合数都可以分解为质数的乘积。为了完成这个题目,还需要学习一点点矩阵,以及和sapply函数相似的另一个函数apply。# 预备练习mat <- matrix(1:12,ncol=4)print(mat)t(mat)colnames(mat) <- c('one','two','three 阅读全文
posted @ 2012-09-11 12:32 yyzhang 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 看到各位对“笨办法系列”的东西还比较感兴趣,我也很乐意继续写下去。今天的示例将会用到数据框(data.frame)这种数据类型,并学习如何组合计算两个向量,以及如何排序。我们将用所学的东西来解决Project Euler的第四个问题,就是找出一个集合中最大的回文数。回文数是指一个像1534351这样“对称”的数,如果将这个数的数字按相反的顺序重新排列后,所得到的数和原来的数一样。开始啦!# 预备练习x <- y <- 1:9data <- expand.grid(x=x,y=y)print(data)z <- data$x * data$y# 一个九九乘法表z < 阅读全文
posted @ 2012-09-11 12:19 yyzhang 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 经历了前面两个小挑战,你应该对R有点理解了。我们继续推进,今天的问题有点点复杂,复杂的不是R,而是一个数学概念:质数和质因子。任何一个合数都可以被几个质数所分解,这个性质很重要,我们将用它来解决Project Euler的第三个问题。还是和之前一样的,你需要自己在R控制台中敲打下面这些命令,根据结果自行揣摩其用处。# 预备练习,学习for循环、建立自定义函数和其它一些函数for (n in 1:10) {print(sqrt(n))}x <- c('hello','world','I','love','R') 阅读全文
posted @ 2012-09-11 12:18 yyzhang 阅读(381) 评论(0) 推荐(0) 编辑
无觅关联推荐,快速提升流量