Skip to content

四火的唠叨

一个纯正程序员的啰嗦

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

工作压力的问题

Posted on 06/25/201210/01/2024 by 四火

1程序员的工作是紧点好还是松点好?

对个人的影响

有人说紧点好,理由是可以从中学到东西,这是一种压力驱动式的学习方式;也有人说松点好,可以有大把的时间去闲逛、打酱油。前一种人至少是上进的、积极的,只是兴许是由于教育体制和软件大环境的原因,已经失去了许多主动性,非得要环境逼迫的压力下才能去学习、去分析和解决问题。

其实,大部分刚毕业的程序员都属于前一种,他们至少是努力着去提升自己,设法去写出好的代码,有一种追求卓越的愿望。但是,我们从来的教育都是这样,喂食—— 吃食,喂食—— 吃食…… 到了大学,喂食的情况少了,于是颓废、

[……]阅读全文

Continue reading

过度工程

Posted on 06/23/201206/23/2019 by 四火

prj 过度工程,最初我知道这个词是在 Rod Johnson 的《J2EE Development without EJB》,随着阅历地增长,渐渐发现书中熟悉的场景也在身边再现了。

 

敏捷、还有设计模式,给一个团队带来了什么?

我之所以把这两个词放在一起讲,是因为我要说一件显而易见的事情,可是这样一件事情很多人又不愿承认。

团队,是有风格个性的;团队,也是有能力强弱的。不管你承认不承认,整体来说,我见过的绝大多数团队都还远不是精英团队,因此相对于某些公司成功的案例来说,我们有很多事是不适合做的。

敏捷强调了主动性,强调了沟通,事实上并不是身边所有的团队都能做好敏捷管理的,譬如一支

[……]阅读全文

Continue reading

网站性能优化的三重境界

Posted on 06/22/201206/23/2019 by 四火

hold

这篇文章是关于网站性能优化体验的,性能优化是一个复杂的话题,牵涉的东西非常多,我只是按照我的理解列出了性能优化整个过程中需要考虑的种种因素。点到为止,包含的内容以浅显的介绍为主,如果你有见解能告知我那再好不过了。无论如何,希望阅读它的你有所收获。

 

我眼中的网站性能问题都反映了一个网站的“Availability”(中文叫做可用性,但是这个翻译也不足够达意),以往我的认识是,这个网站如果全部或者部分不可用,那是功能问题,但是如果响应慢、负载差,这才是性能问题;可是后来我逐渐意识到,性能问题涵盖的范围更广,我还没法给出一个准确定义,但是许多非业务逻辑

[……]阅读全文

Continue reading

大型互联网应用的技术选型和决策,10 条成功与失败的记录

Posted on 06/05/201206/23/2019 by 四火

internet 作为以老版本为模子重做的解耦版本,这个大型互联网应用产品是从 2009 年中开始落地的。而我本人也是该版本的主创人员之一,到今日,团队已经发展到开发测试人数百人的大型互联网产品团队的规模,发布、割接和上线了许许多多个商用版本。

 

对架构的审视,对选型和设计的反思,不仅仅要在产品初创时期,更要在产品发展的整个过程中进行,团队做同类型产品的能力就是这样在不断总结和自我批评中成熟的。以下为个人观点,难免不对许多人的胃口,不过还是希望这些文字有足够到让人思考的价值。无论如何,对于这样一款产品,从如今的视角来解读它的历史故事,更别有一番风味。

 

—————–

[……]阅读全文

Continue reading

设计缓存框架需要关注的要素

Posted on 06/04/201206/23/2019 by 四火

1 最近关注了一些缓存框架的特性和实现,包括 OSCache、JCS、Ehcache、Memcached 等等,公司的两个缓存框架,以及一个标准 JSR 107(JCache),发现一些诸多类同的方面。如果你不够熟悉以上,不妨先看看这两篇文章:《OSCache框架源码解析》和《Ehcache详细解读》,再看下面的内容也许会有更多想法。之后再思考,如果要自己去实现一套缓存框架,需要考虑哪些东西?

1、为哪些数据做缓存?

  1. 模型对象,这在业务逻辑层面最常见。
  2. 数据库查询结果集。
  3. 页面缓存、页面片段缓存。
  4. 运算结果集,尤其对于幂等性服务。
  5. 外部接口查询结果。

 

2、缓存框架的核心:

&nb

[……]阅读全文

Continue reading

Ehcache 详细解读

Posted on 05/31/201206/23/2019 by 四火

ehcache Ehcache  是现在最流行的纯 Java 开源缓存框架,配置简单、结构清晰、功能强大,最初知道它,是从 Hibernate 的缓存开始的。网上中文的 EhCache 材料以简单介绍和配置方法居多,如果你有这方面的问题,请自行 google;对于 API,官网上介绍已经非常清楚,请参见官网;但是很少见到特性说明和对实现原理的分析,因此在这篇文章里面,我会详细介绍和分析 EhCache 的特性,加上一些自己的理解和思考,希望对缓存感兴趣的朋友有所收获。

 

一、特性一览,来自官网,简单翻译一下:

 

1、快速轻量
过去几年,诸多测试表明 Ehcache 是最快的 Java 缓存之

[……]阅读全文

Continue reading

OSCache 框架源码解析

Posted on 05/18/201206/23/2019 by 四火

OSCache 是一个受到争议的开源缓存框架,OpenSymphony 网站已经关闭(OpenSymphony 可是诞生过 Quartz、WebWork、SiteMesh 和 OGNL 等数个非常有名的框架的)了,它也已经不维护了。在 JavaEE 的缓存框架领域,似乎已经是 EhCache 等其它支持分布式的缓存框架的天下了,OSCache 垂垂老矣?但是 OSCache 的源代码依然值得一读,一度作为最常用的缓存框架,代码量却不大,绝大部分类一天的时间就可以详详细细地阅读完。

 

统观 OSCache 的代码,我最关注其中的 base、algorithm、events、persistence、clustersup

[……]阅读全文

Continue reading

Backbone.js

Posted on 05/08/201210/08/2024 by 四火

backbone

注:教程请参见这里(本文有很多内容都是从这里翻译的),官方网站在这里;综合例子参见这里。

Backbone.js 是一个前端 MVC 框架,model 能够绑定键值对和自定义事件,集合具备可枚举方法的富 API,视图具备事件处理能力,并且可以通过 RESTful 的 JSON 接口和你已有的 API 通信。

backbone2

View

Backbone 里的视图就是用来反映数据模型的,可以监听事件并响应,通过利用 Underscore.js(这个真是一个牛逼哄哄的东西,自己看),还支持了 JavaScript 模板技术,把数据和模板分离开。

“el” 属性就是浏览器创建的一个 DOM 对象的引用,是供 backbone 渲染的画布,每一个 view

[……]阅读全文

Continue reading

前端解耦的一个最简单示例

Posted on 05/01/201206/23/2019 by 四火

且看这样一段 HTML 片段:
<div style="background-color: red" id="name" onclick="alert('');">
    Jim
</div>
这是前端代码全部耦合在一起的例子,下面对它进行 MVC 解耦。
 
第一步解耦,把 View 层分离出来:
<div id="name" class="name" onclick="alert('');">
    Jim
</div>
同时,引入一表示 name 的 css。
 
第二步解耦,把 Controller 分离出来:
<div id="na

[……]阅读全文

Continue reading

思考、学习新技术的原则和方式

Posted on 04/28/201210/01/2024 by 四火

1 先看下面这样的困惑:

  • 最近了解了几个 MVC 的框架,其中有两个是公司内部的。发现这些东西都是类似的,从处理逻辑到页面渲染;从 service 到 layout;配置的实现无非就是 XML,或者 annotation……我有种感觉,兴许已经跳不出这个思维圈子了?
  • 如今的时代,是一个概念翻飞的时代,oschina 里的开源软件数量就已经超过了两万,五花八门的技术层出不穷,到底什么技术才是值得学习的?
  • 有位朋友说,他想学习一些关于 Android 上的开发技术,兴趣驱使。几个月过去了,他说他已经能做出许多小程序了,可是他现在回想起来,掌握一门技术是好,可兴趣之外还有什么呢?他说,“如果我的工作中不使用 And

[……]阅读全文

Continue reading

Study Notes Of Mason

Posted on 04/20/201206/23/2019 by 四火

mason The Main Features of Mason

  • Components: Modular Design Elements
  • Object-Style Component Inheritance
  • Intelligent Caching Mechanisms
  • Integration with Apache and mod_perl

Alternatives to Mason: Embperl

  • Embperl may be the most similar one to Mason
  • Embperl is one of the oldest heavyweight systems that i

[……]阅读全文

Continue reading

那些糟糕的面试和那些屎问题

Posted on 04/15/201206/23/2019 by 四火

1 不同的公司和人,有不同的面试策略,有的考察视野、有的深入细节、有的则是评估解决问题的能力。我经历了一些有意思的面试,在各大城市和不同写字楼之间往返,有因为面试而让我尊敬的公司,也有让我喷饭和无可奈何的故事。朋友们和我开玩笑的时候说:“你就是爱折腾,不同地点之间、不同领域之间,说,2011 年最后两个月里,多少钱捐给铁道部了?”

 

下面叙述的,来自我自己的经历,或者是朋友告诉我的他/她的亲身经历。(出于保密和尊重,隐去任何公司信息)

 

第一个故事,记一次面试对话:

面试官:你为什么转向互联网行业?
我:我喜欢互联网,这是这两年逐渐认识到的。
面试官:你是一个目的性很强的人,

[……]阅读全文

Continue reading

Web 页面的聚合技术

Posted on 04/11/201206/23/2019 by 四火

近接触到了 Mason,并且了解到了它基础之上的一个 MVC 框架实现,随即联想到做网站以来接触到的各种各样的页面聚合的场景,颇有意思。

页面聚合本身是一种 “分而治之” 的思想,把复杂的页面分割成可以被重用和独立维护的部分,这些部分的来源灵活,可以来自同一个 web app 中,也可以来自不同的域;可以聚合独立的子页面(页面集成),也可以聚合数据(数据集成),甚至可以聚合子呈现(模板集成)。

客户端聚合

这种聚合的最大好处在于把聚合的工作分散到如今越来越强势的客户端,减轻了服务端的压力;另一方面,也从一定程度上简化了服务端的设计。客户端聚合在互联网初期比较少见,如今随着客户端性能越来越优秀,客户端聚合的优

[……]阅读全文

Continue reading

从“Google 地图八位版” 看国内的抄袭

Posted on 04/02/201210/02/2024 by 四火

首先来看一段 Google 在愚人节送上的宣传视频,Google 地图八位版:《Introducing Google Maps 8-bit》

如果你和我一样,曾经在红白机的世界里折腾过童年时光,那么你应该和我一样怀旧一笑。是勇者斗恶龙还是最终幻想?Google 专门找来了日本 Google 的工程师来介绍它。特别是片中在插卡接触不良造成的花屏出现时,拔出卡带,用嘴轻吹(谁告诉我迷过红白机但没还做过这事?呵呵);之后,看到卡带上接上了上网线,亲,可那是电话线啊;再来,红白机支持语音了,地名变成了语音输入,语音开关在手柄上 -_-~|||……这些细节都让我联想,如果不是愚人节,这样的东西真可以吸引不少眼

[……]阅读全文

Continue reading

再议单例模式和静态类

Posted on 03/31/201210/08/2024 by 四火

tool 单例模式还是静态类,这是一个老话题了,从我刚开始接触 Java 的时候就看到这样的讨论。在这里我总结一下,也添加一点点新东西。

首先要澄清和区别一些概念,“静态类” 和 “所有方法皆为静态方法的类”。

严格说来,Java 中的静态类,指的是 “static class” 这样修饰的类定义,语法上的要求,使得这样的类一定是内部类,换言之,“静态内部类” 是对它的完整定义。静态内部类最大的好处在于可以隐藏自己(只让自己被所在外层的类用到),同时又可以访问到所在外层类的属性。和 “非静态” 的内部类相比,它可以放置一些静态的成员变量和方法定义,而非静态类不可以;而且,静态内部类不能访问外层类非静态的属性。

但是,通常

[……]阅读全文

Continue reading

CommonJS

Posted on 03/26/201206/23/2019 by 四火

老实说,之前我对 CommonJS 也是一无所知,直到不久前 Node.js 火起来,我去研究它,才了解到 Node.js 其实是 CommonJS 的一个部分实现,我才关注起 CommonJS 来。

image

以前我们说起 HTML,我们说起 JavaScript,大家的印象似乎都停留在了 “网页” 上面,从 2005 年开始,因为 Ajax 的缘故,有一种叫做 “前端程序员” 的新型物种诞生了。

可是现在,前端程序员不甘心自己的一亩三分地了,他们要越权,看看 HTML 5 的 API 吧,它是要吃了 Flash 啊,连 Adobe 都倒向 HTML 5 了,它的 API 可以做各种各样的事情,要绘图、操作文件、客户端数据库、摄像头、重力感应……这些特性,怎么

[……]阅读全文

Continue reading

关于“ 无状态”,从 Amazon 的工作流框架中获得的思考

Posted on 03/22/201206/23/2019 by 四火

这个话题是从我对 Amazon 云平台的工作流框架 AWS Flow Framework 的使用研究中想到的,对于一个工作流引擎来说,一个完整工作流的某个阶段完成后,当前阶段的状态必须要被存储下来。

 

1

 

Workflow(Decider) 来决定任务的执行流程,Activity 来执行实际的任务,二者都封装在相应的 Worker 中执行,但不直接交互,而是通过 SWF 管理起来。不过,除了 SWF 的日志,它们都不记录任何当前任务执行状态的信息,即所有的任务执行情况只能从 SWF 的日志中找到。譬如一个 Workflow 由 Activity1 和 Activity2 组成,在执行完 Activity

[……]阅读全文

Continue reading

“ 你不适合做程序员”

Posted on 03/21/201210/01/2024 by 四火

1 我的一位同事,他带他读小学的孩子去学钢琴,通过关系找了一位有点名气的退休的老教师,学费不菲。他说其实他并不知道为什么要学,但是看到那么多孩子都在学钢琴,他想,他的孩子不能落后。一个月之后,他去问钢琴老师,对孩子的学习有什么建议没有。钢琴老师用尽了委婉的表达,最后说:

“ 对于你的孩子在学音乐方面,我最大的建议,就是你的孩子最好别学音乐”。

什么?!

这位同事听了当然恼怒,但是转念一想,老师未尝不是负责任的。通常这样的老师,赚钱之心,都会忽悠家长,或者好话歹说,很少有说“ 不” 的。但是真话就是这么犀利。

他说:“ 我们平时并不容易听

[……]阅读全文

Continue reading

EasyMock、EasyMock Class Extension 和 PowerMock

Posted on 03/20/201206/23/2019 by 四火

EasyMock大多数同事都用 JUnit 做单元测试,JUnit 中对方法调用打桩(Mock)是一个麻烦事。好在 EasyMock 可以帮我们完成。

比如有这样一个简单的 User 类:

public class User {  
    private String id;  
    private String name;  
        //get、set 方法略  
}  

相应的,有这样一个被测类 UserService:

public class UserService {  
    private UserDAO userDAO;  
  
    public void setU

[……]阅读全文

Continue reading

不妨学习一下 Perl

Posted on 03/13/201206/23/2019 by 四火

perl Perl 是什么?用 Larry Wall 自己的话说,Perl 是借取了 C、sed、awk、shell scripting 以及很多其他程序语言的特性的一种语言。你可以说它是 “实用报表提取语言”(Practical Extraction and Report Language),也可以叫它 “病态折中垃圾列表器”(Pathologically Eclectic Rubbish Lister),Larry 说:“OK,我都承认”。

最近机缘巧合,有幸接触了一把 Perl,以及它的模板引擎 Mason(我是这么理解的)。我用过 Java、C#、C++等等传统高级语言,也研究过 Groovy、JavaScript 之类

[……]阅读全文

Continue reading
  • Previous
  • 1
  • …
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • …
  • 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