Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

再谈榔头和钉子

Posted on 02/20/201410/08/2024 by 四火

hammer

不久前写过一篇 《给我一把榔头,满世界都是钉子》,从算法和数据结构的角度谈了谈对于问题和问题解决的工具这两方面我的看法;而最近看到了这样的代码,一个表格,单数行和双数行的样式不同,于是有程序员这样写道:

var trs = $("#spreadSheet tr");
for(var i=0; i<trs.size(); i++){
    if(i%2)
        $(trs.get(i)).children("td").css("color", "RED");
    else
        $(trs.get(i)).children("td").css("color", "

[……]阅读全文

Continue reading

跨域方法汇总

Posted on 02/13/201406/23/2019 by 四火

browsers

做 Web 开发经常需要面对跨域问题,跨域问题的根源是浏览器安全中的同源策略,比如说,对于 http://www.a.com/1.html 来说:

  • http://www.a.com/2.html 是同源的;
  • https://www.a.com/2.html 是不同源的,原因是协议不同;
  • http://www.a.com:8080/2.html 是不同源的,原因是端口不同;
  • http://sub.a.com/2.html 是不同源的,原因是主机不同。

在浏览器中,<script>、<img>、<iframe> 和<link> 这几个标签是

[……]阅读全文

Continue reading

GWT 初体验

Posted on 02/11/201410/08/2024 by 四火

GWT

最近体验了一下 GWT(Google Web Toolkit),其实这个技术老早就有了,写 Java 代码,代码很像 AWT 或者 Swing,但是最后编译成一个 war 包,也就是说,没有啰嗦的 JavaScript、HTML 和模板语言,Java 从前到后通吃,常用的模块都被封装成组件了。虽说写起来代码还挺啰嗦的(写法上面居然不支持链式调用,这确实让我看不懂),而且也没有传统 Web 开发方式来得直观,但也算一种很有意思的开发方式,值得体验一下。网上有足够多的教程,要系统地学习,官方文档是最好的材料,非常详尽。而我的方式,则更具个人风格一点,比较+吐槽,这可不是教程。

工程结构

我是用 Eclipse+Goo

[……]阅读全文

Continue reading

做工程和搞研究

Posted on 02/03/201406/23/2019 by 四火

我记得和同事吃饭的时候大家在一起讨论,什么样的人可以称之为牛人,有人当即就提出来,对于我们这样做工程的人来说,谈何牛人呢?真正牛的人应该都是那些搞研究的大拿们。还有人说,这样说也不甚准确,只是牛人的比例和程度不同:

curve1 curve2

搞工程的取得成就的人的比例,要高过搞研究的(左图);但是搞研究的,取得的成就要大过搞工程的(右图)。

在推动生产力前进上,为什么 Page Rank 的发明人是工程师,而不是数学家?因为工程师最擅于把那些尚在理论上的东西转化为实际的东西。再比如像 Jeff Dean 这样的,工程师关心和解决的问题往往是最实际的问题。

但是说到严谨性,做工程和搞研究是同一的。二者都很容易被经验和那些显而

[……]阅读全文

Continue reading

谈谈数据绑定

Posted on 01/27/201410/08/2024 by 四火

data binding

在 Wikipedia 上数据绑定的定义是:

Data binding is the process that establishes a connection between the application UI (User Interface) and business logic. If the settings and notifications are correctly set, the data reflects changes when made. It can also mean that when the UI is changed, the underlying data

[……]阅读全文

Continue reading

从 JavaScript 的单线程执行说起

Posted on 01/21/201406/23/2019 by 四火

先看一段代码:

setTimeout(function(){
	alert("a");
}, 0);
while(1);
alert("b");

希望在马山可以弹出一个警告提示框 “a” 来,但是始终没有来;而且,在 FireFox 中跑还得到了这样的提示,并提示你是否要终止这段脚本的执行,遇事我选择终止以后,“a” 倒是弹出来了,但是 “b” 却弹不出来了:

Warning: Unresponsive Script

A script on this page may be busy, or it may have stopped responding. You can stop the script n

[……]阅读全文

Continue reading

我为什么坚持写博客(续)

Posted on 01/15/201406/23/2019 by 四火

blog

大概在两年前,我写过一篇文章,《我为什么坚持写博客》,随着阅历增长,想法是在不断变化的。我想在这里补充一些内容。

一个坚持更新的博客站点就是最好的名片

很多有个人独立博客的人都有这个观点,对于工程师来说尤其如此。我记得以前看过一幅漫画,工程师和 HR 阅读简历的价值杠杆大不相同,GitHub 上丰富的记录、一个高分的 stackoverflow 账号,还有一个独立域名博客,这些都是具有相当加分项的部分。向别人介绍自己的时候,你甚至都不需要自己拿出名片来,不需要自己在简历里面啰啰嗦嗦还生怕遗漏了什么,很简单,拿出你的博客站点来,一切尽在其中。你没有办法作弊,也没有办法撒谎,因为其中的文章全部都是按

[……]阅读全文

Continue reading

数据挖掘学习笔记:分类、统计学习

Posted on 01/13/201406/23/2019 by 四火

ICDM(国际数据挖掘大会)2006 年从 18 种提名的数据挖掘算法中投票选出了十大算法。这 18 中提名数据挖掘算法分属 10 大数据挖掘主题,蓝色部分即为最终选出的十大算法:

  • 分类(Classification)
    • C4.5
    • CART
    • K Nearest Neighbours
    • Naive Bayes
  • 统计学习(Statistical Learning)
    • SVM
    • EM
  • 关联分析(Association Analysis)
    • Apriori
    • FP-Tree
  • 链接挖掘(Link Mining)
    • PageRank
    • HITS
  • 聚类(Clustering)
    • K-Means
    • BIRC

[……]阅读全文

Continue reading

泛型趣谈

Posted on 01/08/201410/08/2024 by 四火

strange

Java 中的泛型带来了什么好处?规约。就像接口定义一样,可以帮助对于泛型类型和对象的使用上,保证类型的正确性。如果没有泛型的约束,程序员大概需要在代码里面使用大量的类型强制转换语句,而且需要非常清楚没有标注的对象实际类型,这是容易出错的、恼人的。但是话说回来,泛型可不只有规约,还有很多有趣的用法,容我一一道来。

 

泛型擦除

Java 的泛型在编译阶段实际上就已经被擦除了(这也是它和 C#泛型最本质的区别),也就是说,对于使用泛型的定义,对于编译执行的过程,并没有任何的帮助(有谁能告诉我为什么按着泛型擦除来设计?)。所以,单纯利用泛型的不同来设计接口,会遇到预期之外的问题,比如

[……]阅读全文

Continue reading

java.util.concurrent 并发包诸类概览

Posted on 01/04/201406/23/2019 by 四火

Concurrency

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,这个包的前身可以在这里找到,它最好的文档就是系统的 API 手册。

当然,这里参考的 concurrent 包来自 JDK7,比最初 JDK1.5 的版本有了不少改进。我曾经在 《Java

[……]阅读全文

Continue reading

2013 年特别回顾

Posted on 01/01/201406/23/2019 by 四火

2014 技术关键词

数据可视化 / TP99 / 接口设计 / Hadoop / Spring MVC / 爬虫 / AWS service / 技术选型 / 对思考的思考 / 校园招聘 / Memcached / Mac / 数学和工程 / 技术和生活

丢失的宝贝

  • RSS 阅读的好习惯;
  • 持续稳定的郊外运动;
  • 经常练习的做菜技巧。

持有和新得到的宝贝

  • 又一年坚持思考与博客写作;
  • 有计划地旅行;
  • 英文能力;
  • 无节操的低智商狗一枚;
  • 看了一些书;
  • 明显减少了糖的摄取。

几个难忘的瞬间

  • 来到长滩岛,见到 Puka 海滩的那一刻;
  • 不断思考和讨论,接口设计迭代改进;
  • 几次回老家;
  • 技术选型的调查和讨论;

[……]阅读全文

Continue reading

从 DCL 的对象安全发布谈起

Posted on 12/28/201306/23/2019 by 四火

lock

对于 DCL(Double Check Lock)情况下的对象安全发布,一直理解得不足够清楚;在通过和同事,以及和互联网上一些朋友的讨论之后,我觉得已经把问题搞清楚了。我把我对这个问题的理解简要记录在这里。

现在有代码 A:

class T {
	private static volatile T instance;
	public M m; // 这里没有 final 修饰

	public static T getInstance() {
		if (null == instance) {
			synchronized (T.class) {
				if (null ==

[……]阅读全文

Continue reading

排序算法一览(下):归并类、分布类和混合类排序

Posted on 12/22/201306/23/2019 by 四火

上半部分请参见 《排序算法一览(上):交换类、选择类和插入类排序》。

 

归并类排序

归并排序(Merge Sort)

归并排序是一种分治法,它反复将两个已经排序的序列合并成一个序列(平均时间复杂度 O(nlogn),最好时间复杂度 O(n)):

  • 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;
  • 设定两个指针,最初位置分别为两个已经排序序列的起始位置;
  • 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;
  • 重复步骤直到某一指针达到序列尾;
  • 将另一序列剩下的所有元素直接复制到合并序列尾。
public class Sort {
  public s

[……]阅读全文

Continue reading

排序算法一览(上):交换类、选择类和插入类排序

Posted on 12/15/201306/23/2019 by 四火

sort

最近在复习常用排序算法发现了下面这个罪恶的排序方法列表页面,我被那些有趣的排序方法诱惑了,就把上面介绍的各种排序方法都整理了一遍(我觉得维基百科比其它我看过的算法书都要易懂一些),前半部分可以说还乐在其中,后半部分就有些厌烦了,不过最后总算是坚持看完了。以下是第一部分,包括交换类排序、选择类排序和插入类排序。
  • 交换类排序 – 冒泡排序 鸡尾酒排序 奇偶排序 梳子排序 侏儒排序 快速排序 臭皮匠排序 Bogo 排序
  • 选择类排序 – 选择排序 堆排序 Smooth 排序 笛卡尔树排序 锦标赛排序 圈排序
  • 插入类排序 – 插入排序 希尔排序 二叉查找树排序 图书馆排序 耐心排序
  • 归并类排序 – 归并

[……]阅读全文

Continue reading

谈谈足球青训、中国教育以及工程师培养

Posted on 12/12/201310/01/2024 by 四火

bacelona

关于足球

我从 98 年世界杯就开始看球了,从最早国内的申花球迷,到后来长期看英超诸强的足球、西甲双雄的足球,我也算是一介有一点儿球龄的老球迷。一直以来我很想说一说关于足球青训的话题,今年在莫耶斯带领下的曼联,球踢得无比难看,比赛输得体无完肤,我觉得我找到了一个契机。比赛看得多了,也就不那么容易激动,看球更加理性。和许许多多竞技运动一样,你无法准确预测一场比赛的结果,但是长此以往的比赛分析下来,能看得到许多问题,孰强孰弱一目了然。虽说曼联的比赛我几乎一场不落,但是看看国内论坛上的帖子,骂战是从来都不可避免的,但是对弗格森的盲目的个人崇拜和神化已经到了一个简直无可救药的地步了。我相信很多曼联球

[……]阅读全文

Continue reading

Trie 树和其它数据结构的比较

Posted on 12/10/201306/23/2019 by 四火

trie

Trie 树,又叫做前缀树或者是字典树,是一种有序的树。从空字符串的根开始,往下遍历到某个节点,确定了对应的字符串,也就是说,任意一个节点的所有子孙都具备相同的前缀。每一棵 Trie 树都可以被看做是一个简单版的确定有限状态的自动机(DFA,deterministic finite automaton),也就是说,对于一个任意给定的属于该自动机的状态 (①) 和一个属于该自动机字母表的字符 (②),都可以根据给定的转移函数 (③) 转到下一个状态去。其中:

  • ① 对于 Trie 树中的每一个节点都确定了一个自动机的状态;
  • ② 给定一个属于该自动机字母表的字符,在图中可以看到根据不同的字符形成的分支;

[……]阅读全文

Continue reading

给我一把榔头,满世界都是钉子

Posted on 11/28/201306/23/2019 by 四火

hammer 一篇文章存成一个巨大的文件,总共大约有一亿个单词,要找出里面重复次数最多的。怎么做?

Hadoop 是一把威力巨大的榔头,在使用过 Hadoop 之后,看着任何东西都想把它给 map reduce 了。有一个关于 Jeff Dean 的小笑话,说在睡不着觉的时候,一般人是数羊,Jeff Dean 是 map reduce 他的羊群。所以,我的办法是,把这个文件拆分成若干个小文件,在 map 过程用 hash 算法保证相同的单词落入一个文件(这点很重要),计算单词出现次数,在 reduce 过程取得重复次数最多的单词来。

但是,真有必要这样啰嗦吗?

只有一亿个单词,简单估算一下,一个字母占据两个字节,假设单词平均长度 5,即便

[……]阅读全文

Continue reading

不同团队的困惑

Posted on 11/23/201306/23/2019 by 四火

team

小 S 是一名新员工,他和很多踌躇满志的大学毕业生一样,实习+工作,他来到了一家非常对口自己爱好的公司,来到了一支温暖的团队 A,这支 30 人的大团队由老员工和新员工混合组成,年龄结构复合,有男有女,有从二十几岁到四十几岁的程序员,做的视频编解码项目。整个项目组的成员都是视频编解码领域的能手或专家,最多的有 10 年的相关经验,也有几项专利,小 S 觉得这样的人应该很耐得住寂寞,有很深的造诣。

有一位导师手把手地带着他学习和进入项目,陪他一起吃饭,和他聊天,给了他公司内部通用的学习材料。于是他很快上手,最开始有一些疑惑,但是小 S 积极地去询问问题,导师和同事都很乐于帮助他,于是他进步很快。公司有一个专门帮

[……]阅读全文

Continue reading

常用的 JDK 自带命令行工具

Posted on 11/14/201306/23/2019 by 四火

heap

在这里可以找得到这些工具的列表,虽然官网上免责声明为 “The tools described in this section are unsupported and experimental in nature and should be used with that in mind. They might not be available in future JDK versions.”,但实际上这些工具还是非常有用的,尤其可以站在 JVM 的角度来定位问题。我在此简单罗列一些常用的工具和命令,以及相应的执行结果示例。如果你经常和 JVM 打交道,最好对这些工具的常用命令熟记。

 

jst

[……]阅读全文

Continue reading

不适合 Hadoop 解决的问题

Posted on 11/11/201312/26/2019 by 四火

因为项目的需要,学习使用了 Hadoop,和所有过热的技术一样,“大数据”、“海量” 这类词语在互联网上满天乱飞。Hadoop 是一个非常优秀的分布式编程框架,设计精巧而且目前没有同级别同重量的替代品。另外也接触到一个内部使用的框架,对于 Hadoop 做了封装和定制,使得更满足业务需求。我最近也想写一些 Hadoop 的学习和使用心得,但是看到网上那么泛滥的文章,我觉得再写点笔记一样的东西实在是没有价值。倒不如在漫天颂歌的时候冷静下来看看,有哪些不适合 Hadoop 解决的难题呢?

Hadoop

这张图就是 Hadoop 的架构图,Map 和 Reduce 是两个最基本的处理阶段,之前有输入数据格式定义和数据分片,之后 [……]阅读全文

Continue reading
  • Previous
  • 1
  • …
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • …
  • 23
  • Next

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Python Spark 互联网 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 程序员 管理 系统设计 缓存 编码 编程范型 英语 西雅图 设计 评审 问题 面试 项目

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Big Data and Machine Learning (5)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • + 1.943624 BTC.NEXT - https://graph.org/Ticket--58146-05-02?hs=9a9c6f8dfe3cdbe0074006e3e640b19b& on 所有文章
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
  • Anonymous on 我裸辞了
  • Dylan on 我裸辞了
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme