- 博客(301)
- 收藏
- 关注
原创 【博客搬家】博客搬家了,请大家访问我的个人网站 http://www.raychase.net/
CSDN的博客多是多,不过有太多浮躁的事情,我只想静下心来好好做软件,能和大家在一起讨论和分享是一件无比快乐的事情。搬到http://www.raychase.net/上面去了,欢迎光临。
2011-09-18 17:52:28 1304
泛型趣谈
Java中的泛型带来了什么好处?规约。就像接口定义一样,可以帮助对于泛型类型和对象的使用上,保证类型的正确性。如果没有泛型的约束,程序员大概需要在代码里面使用大量的类型强制转换语句,而且需要非常清楚没有标注的对象实际类型,这是容易出错的、恼人的。但是话说回来,泛型可不只有规约,还有很多有趣的用法,容我一一道来。 泛型擦除Java的泛型在编译阶段实际上就已经被擦除了(这也是它和C#泛型...
2014-01-08 21:42:20 372
java.util.concurrent并发包诸类概览
java.util.concurrent包的类都来自于JSR-166:Concurrent Utilities,官方的描述叫做“The JSR proposes a set of medium-level utilities that provide functionality commonly needed in concurrent programs. ”。作者是大名鼎鼎的Doug Lea,...
2014-01-04 14:42:47 529
排序算法一览(二):归并类排序、分布类排序和混合类排序
归并类排序归并排序(Merge Sort)归并排序是一种分治法,它反复将两个已经排序的序列合并成一个序列(平均时间复杂度O(nlogn),最好时间复杂度O(n)):申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;重...
2013-12-22 22:04:22 706
排序算法一览(一):交换类、选择类和插入类排序
最近在复习常用排序算法发现了下面这个罪恶的排序方法列表页面,我被那些有趣的排序方法诱惑了,就把上面介绍的各种排序方法都整理了一遍(我觉得维基百科比其它我看过的算法书都要易懂一些),前半部分可以说还乐在其中,后半部分就有些厌烦了,不过最后总算是坚持看完了。以下是第一部分,包括交换类排序、选择类排序和插入类排序。交换类排序 - 冒泡排序 鸡尾酒排序 奇偶排序 梳子排序 侏儒排序 快速排序 臭皮...
2013-12-18 22:31:53 740
谈谈足球青训、中国教育以及工程师培养
我从98年世界杯就开始看球了,从最早国内的申花球迷,到后来长期看英超诸强的足球、西甲双雄的足球,我也算是一介有一点儿球龄的老球迷。一直以来我很想说一说关于足球青训的话题,今年在莫耶斯带领下的曼联,球踢得无比难看,比赛输得体无完肤,我觉得我找到了一个契机。比赛看得多了,也就不那么容易激动,看球更加理性。和许许多多竞技运动一样,你无法准确预测一场比赛的结果,但是长此以往的比赛分析下来,能看得到许多问...
2013-12-13 08:22:42 271
Trie树和其它数据结构的比较
Trie树,又叫做前缀树或者是字典树,是一种有序的树。从空字符串的根开始,往下遍历到某个节点,确定了对应的字符串,也就是说,任意一个节点的所有子孙都具备相同的前缀。每一棵Trie树都可以被看做是一个简单版的确定有限状态的自动机(DFA,deterministic finite automaton),也就是说,对于一个任意给定的属于该自动机的状态(①)和一个属于该自动机字母表的字符(②),都可...
2013-12-10 13:52:17 201
给我一把榔头,满世界都是钉子
一篇文章存成一个巨大的文件,总共大约有一亿个单词,要找出里面重复次数最多的。怎么做?Hadoop是一把威力巨大的榔头,在使用过Hadoop之后,看着任何东西都想把它给map reduce了。有一个关于Jeff Dean的小笑话,说在睡不着觉的时候,一般人是数羊,Jeff Dean是map reduce他的羊群。所以,我的办法是,把这个文件拆分成若干个小文件,在map过程用hash算法保证相同...
2013-11-29 11:33:08 395
不同团队的困惑
小S是一名新员工,他和很多踌躇满志的大学毕业生一样,实习+工作,他来到了一家非常对口自己爱好的公司,来到了一支温暖的团队A,这支30人的大团队由老员工和新员工混合组成,年龄结构复合,有男有女,有从二十几岁到四十几岁的程序员,做的视频编解码项目。整个项目组的成员都是视频编解码领域的能手或专家,最多的有10年的相关经验,也有几项专利,小S觉得这样的人应该很耐得住寂寞,有很深的造诣。有一位导师手...
2013-11-23 12:11:34 314
Hadoop无法解决的问题
因为项目的需要,学习使用了Hadoop,和所有过热的技术一样,“大数据”、“海量”这类词语在互联网上满天乱飞。Hadoop是一个非常优秀的分布式编程框架,设计精巧而且目前没有同级别同重量的替代品。另外也接触到一个内部使用的框架,对于Hadoop做了封装和定制,使得更满足业务需求。我最近也想写一些Hadoop的学习和使用心得,但是看到网上那么泛滥的文章,我觉得再写点笔记一样的东西实在是没有价值。倒...
2013-11-11 21:55:11 251
实际技术选型的考虑因素
最近在工作中我需要把数据从公共的Data Warehouse(数据仓库)导出来,放到属于我们team自己账号的云端存储资源中去,然后再在我们的应用中查询这样的资源。需要导出数据是因为直接从Data Warehouse查询数据是一个缓慢而且异步的过程,而我们的应用数据查询需要实时性。现在要解决这个问题有一些AWS的服务可供我们可以选择,基本上分成了两大类:第一类是存储和内容分发(Storage...
2013-10-27 10:47:03 537
Java8集合中的Lambda表达式
本文翻译自《Java 8 Explained: Applying Lambdas to Java Collections》。Lambdas表达式是Java 8的主题,在Java平台上我们期待了很久。但是,如果如果我们不在集合中使用它的话,就损失了很大价值。把现有接口迁移成为lambda风格接口的问题已经通过default methods,也就是defender methods解决了。在这篇文...
2013-10-18 22:31:05 213
换个角度思考问题
最近在看一本书,叫做《思考的乐趣》,第26节“我最爱的证明”,里面介绍了这样一则有趣的问题(文章链接在此):设想一个平面上布满间距为1的横纵直线,形成由一个个1×1正方形组成的网格。任意给一个面积小于1个单位的图形,证明这个图形总能放在网格中而不包含任何一个格点。初看这个论断,觉得似乎是正确的,但又不知从何下手。文中指出证明的思路很巧妙,让人感到数学的美妙。我的感触是,文中的...
2013-10-03 21:58:12 397
留心那些潜在的系统设计问题
在系统设计阶段考虑全面很难,有许多人倾向于把整个设计分成若干阶段,在迭代中完成整个设计,这本身是非常好的,但是,就如同“先做出来,以后再优化”这样的经典谎言一样,本身并无错,只是许多程序员都不习惯于真正的迭代设计和迭代优化。举例来说,有一个日益复杂的类,每个人都修改一点点,一直到最后都没有人愿意去做重构,大家的心态都是一样的:“我只修改了一点点,为什么要我去动那么大的刀,于我没有任何好处”。我不...
2013-09-19 23:37:26 225
Lombok介绍
最初我是在公司内部的broadcast上面听到有principal介绍到它的,和AspectJ归在一起。看了几个例子之后觉得有点意思,就去Lombok的官网上扒了一下。我们已经知道向AspectJ、CGLib等等都可以做到对已有Java代码在字节码层级的改变,无论是编译时期静态织入还是运行时期动态代理,对于我们使用AOP来减少那些重复性编码的劳动、增加切面性质的逻辑颇有帮助。这里有几个概念:...
2013-09-08 23:21:14 220
不安分的工程师
在超级杯中,拜仁和切尔西战成平手,点球大战中,20岁的年轻的球员卢卡库站出来罚球,遗憾的是罚失点球,令整支球队失败,丢掉冠军。对于失落和愧疚的年轻人,切尔西的传奇射手德罗巴在Instagram上鼓励了他:“只有那些从不踢点球的人才不会罚失点球,罚点球你足够强大。你需要从中学习,我也有过类似的经历,在莫斯科的决赛中的红牌,还有半决赛对阵巴塞罗的比赛。坚持不懈的奋斗,更好的日子一定会到来。你...
2013-09-02 20:30:16 210
JavaScript 3D图表
在说3D图表以前,首先要明确两个概念,一个是数据的维度,一个是呈现数据载体的维度。对于数据的维度,一维的数据呈现,但是呈现的载体是二维的平面图,比如饼图:已经能够很清晰地观察到数据的分布情况。数据如果增加一个维度,变成二维,呈现载体依然是二维的平面图:数据表达依然是清晰的。但是,倘若再增加一维,这个时候就面临了两个问题:数据的维度增加,复杂性也增大了;计算机发展到现在,...
2013-08-24 19:36:38 537
工程师的生活
我忽然很好奇,想知道其他软件工程师的生活是什么样的?人永远都没有活在别人心中的形象那么绚烂,生活中总有无数烂事烦事需要处理,但是每个人都有自己享受生活的方式。逛了逛了各式技术博客和论坛,我发现大家似乎都太严肃了,太谦逊了,太学术了。做软件本来是一件很有意思的事情,但是这些帖子和文章无非就包括这么几种:技术文章,不解释,这部分当然是大头,虽然技术文章普遍不受欢迎;牢骚,喵了个咪的薪水低...
2013-08-17 12:09:07 229
Memcached调优
项目中有一个对实时响应性比较高的服务,引入了Memcached以减少延迟和减少数据库压力。但是期间遇到了一些问题,这里记录一些调优细节。 客户端选择最开始我使用的是Memcached Java Client,但是最后放弃了,放弃原因包括:有时会出现的“No Thread For Socket”异常,我记录在这里;它不支持NOREPLY模式(在这种模式下,更新缓存的set...
2013-08-02 19:56:24 216
使用堆外内存
有时候对内存进行大对象的读写,会引起JVM长时间的停顿,有时候则是希望最大程度地提高JVM的效率,我们需要自己来管理内存(看起来很像是Java像C++祖宗的妥协吧)。据我所知,很多缓存框架都会使用它,比如我以前使用过的EhCache(给它包装了个酷一点的名字,叫BigMemory),以及现在项目中的Memcached。在nio以前,是没有光明正大的做法的,有一个work around的办法是直接...
2013-07-28 21:30:15 241
自由地生活和工作
这篇文章,算是理清和记录了一些我一直以来想说的话。在昨天的课程上,我们谈论目标、生活方式和工作,特别地,有一个具体问题——“五年后的你会是怎样的?”其实我很好奇其他人的想法都是如何的,起码于我来说,这是一个很有趣的问题。我不既不是那种得过且过、无所追求的人,也不是具备钢铁神经、顽强意志的人,更不是拥有无比天赋、才华横溢的人。我大概不可能成为什么名人伟人,但是还是有小小的野心和抱负,想做一些符...
2013-07-27 01:17:19 232
JVM问题定位工具
JDBJDB是基于文本和命令行的调试工具,Jikes在JDB的基础上提供了GUI。熟悉JDB还是有价值的,很多情况下需要我们在命令行下完成简单的debug问题定位。123jdb -classpath bin com.xx.Examplejdb -connect com.sun.jdi.SocketAttach:hostname=myhost,p...
2013-07-23 01:03:03 239
几道容易出错的JavaScript题目
下面这几道JavaScript题目大多来自于周五的一个小分享。都是很小的题目,但是很容易犯错。有一些是语言特性使然,有一些则是语言本身没有设计好而留下的陷阱。结果就是,遇到的人很容易陷进去骂娘,这些东西是略有些反直觉,感兴趣的不妨看看,平时我们还是尽量少些这样似是而非的代码。1.12345678910111213141...
2013-07-07 10:34:06 203
做产品的主人
产品经理怎样设计好产品?有很多回答,我曾经见过好些执着于界面美观的产品经理,见过执着于梳理用户需求的产品经理,甚至听说过化身为“用户邮件/文档分析师”的产品经理。我是程序员,是工程师,但我觉得这些人都很不靠谱。这三种不靠谱的产品经理中,第一种最不靠谱。产品经理最好懂技术,但是即便不懂技术,也绝不能化身成为界面设计师。如果我是产品经理,有人有一天对我说,产品经理不就是设计用户界面的人吗?我应该...
2013-06-29 20:17:22 193
JVM致命错误日志(hs_err_pid.log)解读
致命错误出现的时候,JVM生成了hs_err_pid<pid>.log这样的文件,其中往往包含了虚拟机崩溃原因的重要信息。因为经常遇到,在这篇文章里,我挑选了一个,并且逐段分析它包含的内容(文件可以在文章最后下载)。默认情况下文件是创建在工作目录下的(如果没权限创建的话JVM会尝试把文件写到/tmp这样的临时目录下面去),当然,文件格式和路径也可以通过参数指定,比如:...
2013-06-27 10:44:41 1278 1
用户积分功能的设计
有一个SNS应用,用户在使用的过程中积累积分,例如登陆+3点,个人空间每次浏览+1点,结交每个朋友+5点等等。同时,很重要的一点是,用户需要看到自己的积分累计有多少,能够根据积分划分用户等级,在自己的空间展示积分。在用户量比较大的情况下(例如超过三千万),这是一个比较典型的读写都很频繁的问题,而且写入的次数可能和读取的次数差别不大(大多数SNS应用中,读次数远超写次数的场景居多,例如用户的状...
2013-06-15 23:03:29 1975
自欺欺人的故事
看到吴军博士的一条微博:不要看不起在生产线上干活,俺正经干过一个月,你对人生有很多体会。俺的一个朋友,一个非常大的跨国公司在中国的销售主管,大学毕业后第一份工作在宝洁,从一个偏远的城市蹬三轮买洗衣服做起。他讲有一次差点把他当盲流给抓了。我倒建议现在大学生毕业,下基层一年。若是想强调“体验”和“经历”在人生中的重要价值,这番话的初衷自然是好的。比如这样的回复:还是去一线做...
2013-06-12 22:55:37 410
互联网数据聚合
我们经常需要从互联网上获取数据,在很多情况下,你需要的是特定信息,或者说是符合某些条件的信息,比如:这条需求隐含着两个有普遍意义的步骤:从互联网上聚合符合特定条件的信息;当满足阈值条件时,以某种方式通知用户。事实上有太多做互联网数据聚合的网站了,比如酷讯机票,聚合了各大航空公司的机票信息:再比如一些博客聚合网站等等。现在想想这样的场景:每到一个新地方,自动给...
2013-06-04 10:20:09 474
网络爬虫
最近在写一个程序,去爬热门事件和热门关键词网站上的数据。在这里介绍一下网络爬虫的种种。基本组件网络爬虫也叫做网络蜘蛛,是一种互联网机器人,把需要的网页撷取下来,组织成适当格式存储。它是搜索引擎的重要组成部分,虽然从技术实现上来说,它的难度往往要小于对于得到的网页信息的处理。上面这张图来自维基百科,scheduler调度多个多线程的下载器下载网页,并把信息和元数据存储起来。而通过解...
2013-05-26 22:24:35 239
JavaScript使用for循环时出现的问题
这个问题的讨论最初来自公司内部邮件,我只是把这个问题的讨论内容记录下来。有一些项目组在定位问题的时候发现,在使用“for(x in array)”这样的写法的时候,在IE浏览器下,x出现了非预期的值。具体说,如果自定义了Array.prototype.indexOf方法(譬如源于某prototype污染),也许是因为老版本IE浏览器并不支持array.indexOf方法,而开发者又很想用...
2013-05-26 00:36:01 472
再谈大楼扔鸡蛋的问题
这道题是说,100层楼,两个一模一样的鸡蛋,某层之上扔鸡蛋就会碎。问要测试多少次才能找出这层楼来。我曾经在去年初的这篇文章里面讨论过这个问题的解法,因为只想记录一下思路和讨论过程,写得很简略。现在,我想重新整理一下这个问题,再稍稍扩展和挖掘一下。希望可以用尽可能清晰易懂的描述,把这个问题的前后说清楚。现在只有两个鸡蛋,而算法必须是可行的,就是说要能找出这一层来,所以你得假设你的运气最差,这就...
2013-05-19 22:48:30 263
有趣还是无趣?
这是一篇扯淡,一篇rant,或者是一坨不靠谱的文字。有一些观点过于偏激,如果你没法接受,也请不要太在意。无趣的接口封装我记得刚工作的时候,我的第一个正式项目是去写一个基于SOAP的WebService接口,那个时候觉得新鲜,“原来web service是这样子的!”;到了现在,已经写过各种各样的service接口,再也没有觉得做这样的事情很有意思,或者很有新意、很有挑战性,尤其是 一些并...
2013-05-17 20:05:36 179
行动、眼界和体验
这是一堆杂乱的文字。可以认为它是我从去年二月份正式跳槽到北京工作以来,这一年三个月的时间里,出现次数最多的感悟。不知道有多少人和我一样,有选择焦虑症,总是思考要做出怎样的决定而浪费了时间。事实上,在大多数情况下我们总不能做出完全正确的选择,就像人生永远都会充满遗憾和后悔。做软件也是一样,想一猛子扎下去把东西设计完美,就走上了彻底的不归路。倒不如,像Facebook说的那样,“move fas...
2013-05-12 00:29:16 200
DNS劫持
想谈一谈这个话题是因为最近有一位朋友抱怨他的博客在某些用户某些时候访问的时候,被莫名其妙地加上了广告,他检查来检查去,始终发现不了网站本身有什么问题,后来他才了解到了DNS劫持一说。DNS劫持其实这不是一个新概念了,在几年前,中国一些不讲道德的运营商,尤其是地方运营商就开始捕捉用户浏览器的访问记录,然后根据不同用户的访问行为,有选择地往用户访问的网页里面推送广告。因为运营商掌握着DNS主...
2013-04-30 13:59:01 390
Notes: Hadoop based open source projects
Here's my notes about introduction and some hints for Hadoop based open source projects. Hope it's useful to you.Management ToolAmbari: A web-based tool for provisioning, managing, and monitoring...
2013-04-27 14:55:08 195
你没有抓住Promises的要点
注:这篇文章翻译自《You're Missing the Point of Promises》,阅读这篇文章,你首先需要对于JavaScript中的Promises是什么有了解,否则,你可以先看一看这篇文章(英文),或者这篇文章(中文)掌握基础。有一些修改,另受水平所限,翻译的不当之处请参阅原文。Promises是一种令代码异步行为更加优雅的抽象。如果用最基本的编码方式,代码是这种连续的形式...
2013-04-21 20:52:21 161
Google矩阵
使用一款搜索引擎,我们希望搜索结果能够拥有最佳的排序,Google为它最核心的排序算法PageRank申请了专利。在PageRank以前,排序大多依靠对搜索关键字和目标页的匹配度来进行的,这种排序方式弊端明显,尤其对于善于堆砌关键字舞弊的页面,很容易就跳到了搜索结果的首页。Larry Page和Sergey Brin开始着手解决这个问题,Google排序的继承来自于互联网上网页之间的链接关系。一...
2013-04-03 00:37:21 747
Algorithm In Interview
The whole team talked about algorithm recently, since we found some leaked written exam questions on Internet so that online test became meaningless soon. On one hand we’re thinking about how to con...
2013-03-29 00:17:21 140
编程语言学习和使用的观点
我的一些关于编程语言学习和使用的观点如下,因为最近谈到这个事情,就记录下来吧,但是我只想简单的表述出来。当然,我不想陷入语言孰优孰劣这种争论的圈子里。多掌握一门语言有没有价值?如果一门新的语言能改变你对编程的理解,它就是值得学习的。另外,每一门语言对应着一种或几种“编程范型”,接触不同的编程范型是很有价值的,这是扩展视野的好机会。编程语言只是工具,工具都是用来解决特定的问题的。特定的问题...
2013-03-25 10:29:16 177
使用ID3算法构造决策树
决策树决策树是一个预测模型,它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。这张图很好地解释了决策树:明天要不要出去玩?晴天:潮湿:不出去不潮湿:出去阴天:出去玩雨天:刮风:不出去不刮风:出去例子中可...
2013-03-20 10:34:45 2513
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人