Skip to content

四火的唠叨

一个纯正程序员的啰嗦

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

函数式编程

Posted on 03/19/201110/08/2024 by 四火

1 函数式编程已经有比较长的历史了,如今的动态语言,很大程度上也受到了函数式编程(反过来名叫命令式编程)的启发。

在函数式编程语言中,当你写了一个函数,接受一些参数,那么当你调用这个函数时,影响函数调用的只可能是你传进去的参数,而你得到的也只能够是计算结果。因此,一个 void 的方法,是没有任何意义的。如果传入了引用类型的参数,也是不合要求的。

在函数式编程中访问状态是十分安全的,因为状态不会改变,我可以把一个 Point 或 List 对象交给任意多的地方去访问,完全不用担心副作用。函数式编程的十分容易并行,因为我在运行时不会修改状态,因此无论多少线程在运行时都可以观察到正确的状态。两个函数完全无关

[……]阅读全文

Continue reading

代码的变与不变

Posted on 03/14/201110/08/2024 by 四火

change 哲学上说变与不变,讲的是绝对运动与相对静止的道理,在代码设计中,也有许多变和不变之间的辩证故事。

 

有一些类在创建以后,整个生命周期内都不会发生变化,这种模式被称为 Immutable Pattern。

较弱的不变模式:指的是一个类的实例状态是不可变化的,但是这个类的引用的实例却可以变化。

比如说:Visitor 模式常常是这样的,整个流程是不可变的,但是我为我的整个流程提供灵活的切入点,提供出来访问接口,供变化的部分完成。

较强的不变模式:一个类实例状态不可变,其内部引用的所有实例也不可变。

这个就比较多了,JDK 中的 String、Integer、Byte 等都是不可变的。

&nbs

[……]阅读全文

Continue reading

功能、模块质量和非功能性测试

Posted on 03/09/201106/23/2019 by 四火

prj 但凡面向终端用户的产品,产品做大了以后,几乎都要涉及到基线能力和定制能力的划分。任何一个优秀的产品,都要经历从相对无序到有序的逐步成熟的过程。产品的发展总是要经历不断的阵痛,可是时间长了,我还是总免不了思考:好吧,就算产品最初匆忙和艰辛的时期已经过去,就算现在基线能力的建设已经迈入正轨,可是为什么我们的直接客户,定制团队还是那么辛苦?

 

有多少功能是真正值得去完成、真正被用户所需要的?

据一位定制的兄弟说,其实这个比例只有 8%,我相信数据也许是不准确的,但不管数据的有效性有多少,至少,大家都在问,产品的定位是一个厚实的门户,有太多的功能需要完成,可是真正给客户使

[……]阅读全文

Continue reading

API 风云录

Posted on 02/27/201110/08/2024 by 四火

1 好吧,我承认我是标题党,还是让我们从一个故事开始吧。

项目的业务逻辑层需要被设计成一个具备易扩展的模式,对外提供了大小相异的 API。项目组人人头脑风暴,最后在各位的努力下,克服苦难,业务逻辑层被封装起来,一组最初的 API 被提供出来:

1、现有 Service 逻辑已经疏于管理,欠缺重构,变成了不易控制的逻辑层,接口众多,鱼龙混杂,难以规整出清晰、可用的接口给第三方(例如下游定制团队),怎么办? 
Web 应用有个特点,当你对代码的管理缺乏控制而搞不定时,可以在其上封装一层,这是一个通用的解决办法,也是一柄双刃剑。 
正如某同事“ 我们都是工程商人&rdqu

[……]阅读全文

Continue reading

J2EE 核心模式学习理解和记录

Posted on 02/22/201110/08/2024 by 四火

第 1 章:导论。

模式能够:

  • 利用一个经过验证可行的解决方案;
  • 提供一套通用词汇;
  • 约束解决方案的空间。

第 2 章:表现层设计考虑和不佳实践。

客户端验证:基于表单的验证、基于抽象类型的验证。

曾经在 JSP 中滥用过的助手类,通过助手类在页面和业务逻辑之间传递数据,有点类似于如今 Struts 中的 Action 作为传值模型时的情况。

表现层不佳实践:

  • 多个视图中都包含控制代码;
  • 表现层数据结构暴露给业务层或者业务领域对象,比如:暴露 HTTPServletRequest;
  • 重复提交表单;
  • 敏感资源暴露给客户端直接访问,有个原则,敏感的东西不能放在 WEB-INF 之外;
  • 胖控制器;

……

怎么区分后台视图

[……]阅读全文

Continue reading

YQL

Posted on 01/29/201106/23/2019 by 四火

YQL,(Yahoo! Query Language) 是一种支持对互联网上的数据进行查询、过滤、连接、类似 SQL 语法的简单语言。用 YQL 官方的话:有了 YQL,开发人员只需要使用一种简单的查询语言即可访问和操控互联网上丰富的数据,而不再需要反复学习使用各种各样的 API。

一种代表作数据库发展未来的创意,数据库应该能够不仅仅代表具体的表和空间,变成广义的数据库,延展到整个互联网,才是一个最庞大的数据库。

火丁大盗给了个简单的例子:

select * from html
where url='http://www.dangdang.com/'
and xpath='//ul[@id="homepage

[……]阅读全文

Continue reading

Flash Scope

Posted on 01/26/201106/23/2019 by 四火

项目中遇到了一个潜在的问题,大致就是说,在一个流程的两个或某几个环节中,需要短暂地存储一部分对象(如果不存储,就需要在这几个环节中多次调用同一个外部接口,这被认为是不够合理的实现)。

而这部分对象的存储:

(1)如果用 request,太小,毕竟一次提交以后就丢失了,如果需要往后传递,可能需要借助一些页面参数传值等丑陋或是不易控制的方法;

(2)如果用 session,太大,我不需要在整个用户会话生命周期内使用,而且如果同个用户并行地操作两个流程,期间会互相影响到。

其实在 Rails/Grails 里面就已经包含了一个机制,它将对象短暂地放置在 session 中,request-response 连续的

[……]阅读全文

Continue reading

脚本语言可以做什么?说说 Ant、Maven 和 Gant

Posted on 01/24/201110/08/2024 by 四火

ant 本人也稍微用了一些脚本语言了,可是在同事的反馈给我的印象中,脚本语言似乎从未得到正名,似乎总是寒酸和小打小闹的代名词。我在做一个门户网站,身边有一些公司和某一些开发人员,总是对于页面上的技能很轻视,殊不知用户体验(也许我专指 UCD)恰恰是对用户影响最大的部分,对 Portal 来说,更胜于功能。同样类比,脚本语言亦扮演着看似无足轻重,但实际非常重要的作用。

脚本语言可以做什么?适合做什么?能想到的,似乎总是敏捷、快速、轻量的东西,说得冠冕堂皇一点,就是能把人从繁重的重复劳动中解脱出来;还有,就是很适合运行在客户端,做一些简单的解析和对用户体验的协助,这不也是因为它敏捷、快速和轻量吗?[……]阅读全文

Continue reading

说说 JavaEye 网站架构

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

image 偶然看到了 Robbin 的一则胶片 《JavaEye 网站架构解密》,说到了一些 JavaEye 的一些实现,那就来看看有哪些有意思的东西。

我正在参与做的一个项目,在某某地方上线,需要几十块单板集群;在某某地方上线,又需要怎样的一个集群组网。咋听起来兴许觉得能有怎样的业务逻辑处理和怎样的用户量呢?可是 JavaEye 让我很吃惊,我先前只知道与 CSDN 比起来,JavaEye 确实是一个小规模一些的网站,专业一些的网站,可是服务器呢?只有两台!

这是那台 Web Server:

• AMD Opteron 2.4GHz 单核 * 2 颗
• 8G 内存
• 146G S

[……]阅读全文

Continue reading

JSConf 2010

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

一年一度的 JSConf 大会又召开,这是 2010 的官网:http://2010.jsconf.us/

image

其中的 Sliders 请看这里:http://devthought.com/2010/05/03/jsconf-2010-slides

Chris Williams 和 Iterative Designs 创立了 JSConf,这是 JavaScript 开发者的第一个专业会议。09 年其实还有 Mix09、Velocity09、YUIConf2009 等会议引人耳目。

来看看 JConf2010 都提到了哪些东西?

Google Chrome Frame 是一个 Google 浏览器的内嵌框架,大致是一个运行在客

[……]阅读全文

Continue reading

12 年前,法兰西之夏

Posted on 04/09/201007/30/2023 by 四火

WouldCup

曼联的欧冠之路终结了,忽然想起 12 年前,那段一直深深嵌在我脑海的夏日,多年来依旧魂牵梦绕的夏日。

我宁愿把它称为浪漫的法兰西之夏,那个激动人心的法兰西世界杯,齐达内大师级别的表演,神奇的追风少年欧文,忧郁悲情的巴乔,以及最后那场经典的巴法决战。从那时候起,我才知道足球可以那么美丽,我开始爱上这样一种充满魅力的运动。

可是,那段夏日,远远不止这些足球故事,夏日的暖风,懒懒地躺在地板上,从不知哪里翻出的一堆乱七八糟的模型、手工,把买来的报纸剪得七零八碎。

和表弟打游戏,每天拎着那台红白机和怎么玩也不会腻的八合一卡带,坦克大战、超级玛丽、双截龙,这些名字一翻出来就令心神激荡。

不止有煦日

[……]阅读全文

Continue reading

Groovy on Grails 交流活动

Posted on 12/21/200808/06/2020 by 四火

2008 年 InfoQ 交流活动的胶片:

http://cid-5b1e02933669f469.skydrive.live.com/redir.aspx?page=browse&resid=5B1E02933669F469!105&type=5

update: 之前的链接不能用了,重新上传到这里:

[doc id=6190]
活动宣传页:
http://www.infoq.com/cn/vendorcontent/show.action?vcr=426
2008 年上半年,一次活动中的翻译稿。Groovy on Grails 一些文章的翻译:

[……]阅读全文

Continue reading

看 JDK 源码,解几个疑问

Posted on 09/03/200806/23/2019 by 四火

java 1、Java 定时器原理是怎么样的?

解包 jdk_sec-1_5_0-src-jrl,在/j2se/src/share/classes/java/util 中找到 Timer 类。

private TaskQueue queue = new TaskQueue();
private TimerThread thread = new TimerThread(queue);

我找到了一个 Timer 的任务队列,找到了一个实际运行的线程类。

再来看看还有什么:

    private void mainLoop() {
        while (true) {
            try {

[……]阅读全文

Continue reading

北京游小记

Posted on 06/08/200806/23/2019 by 四火

天安门西 借着实训的名号,在北京旅游了三个月,就爽了三个月。每周两个景点,雷打不动,可是北京真是个大地方,和兄弟姐妹们四处瞎逛,还是没有把该到的地方都去遍。无论如何,我应该是留下些文字作纪念的,无奈我打小就不擅写游记,就爱发牢骚,制造一些被认为毫无价值的精神垃圾。如果再遭数落,我会说,呵呵,总而言之,这篇,其实,也不能算游记。

我们住的地方是个阴暗潮湿的足足可以用来当作仓库的宿舍楼,晾在里面的衣服等到发霉都不一定能干,还有可爱的老鼠朋友们陪我们过夜。鉴于它带给我们的深刻回味,我还是把它当作我来北京的首个具有浓重地域气息的景点。

奥运村一带是不得不提的,我们期待 08 的北京上演世界辉煌时刻,那些奥运故事总

[……]阅读全文

Continue reading

为中国的程序员说几句

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

programmer 我只是个普通大学生,出于对软件的喜爱,我选择了这个热门和复杂的专业,已经习惯安心地坐在书桌前翻着实践课程中一段一段烦杂的代码。很自然,我关注起中国软件业的发展和变革,更愿意谈及 IT 界相关的话题,当然包括就业。确实,我不是什么专家,但临近毕业,我也以自己——一名学生的眼光,担忧起中国可怜的程序员们,担忧起中国看似迅速发展然而并不十分健康的软件业发展态势。

首先是结构分布的极度不平衡,只懂得写几行代码而根本不真正理解编程却自以为是的人多如牛毛,然而从事底层代码开发工作或者思想深刻技术过硬的程序员凤毛麟角,于是 “大量 IT 人遭弃用” 和 “高薪聘请不到资深程序员” 的现象看似难以理解地同时发生了。其次是部

[……]阅读全文

Continue reading

C++学习杂记

Posted on 04/21/200806/23/2019 by 四火

c  智能指针:auto_ptr 和 shared_ptr:

auto_ptr 是个 pointer-like 对象,也就是所谓的 “智能指针”,其析构函数会自动调用。

std::auto_ptr<Investment> ptr1(new Investment());
//之后,如果:
std::auto_ptr<Investment> ptr2(ptr1);
//或者:
ptr2=ptr1;
//那么 ptr2 指向那个对象,ptr1 置空。

shared_ptr 类似,但它可以追踪有多少指针指向该对象,并在无指针指向时析构。
这时的拷贝:
ptr2=ptr1;
结果则是两个指针指向同一对象。
aut

[……]阅读全文

Continue reading

Grails 引发的中文乱码问题

Posted on 04/14/200806/23/2019 by 四火

在一个 Grails 项目里面,我想写一个过滤不良信息的 Service,而将过滤的规则放置在 xml 文件之中。

以下 xml 文件放置不良信息,包含单词、词组和句法,支持正则表达式:

<filter>
    <words>
        <word>fuck</word>
        <word>kill</word>
    </words>
    <phrases>
        <phrase>asshole</phrase>
    </ph

[……]阅读全文

Continue reading

动手实现随机验证码

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

validationCode 见过好几种类型的验证码,一开始觉得验证码的生成很神奇,后来发现验证码也是可以用 Java 轻松实现的。今天就来做一做这件事情。

首先,来写一个画验证码图片的 Java 类:

package com.xxx.validationCode;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Ra

[……]阅读全文

Continue reading

在 Eclipse 中配置 Grails 工程

Posted on 03/29/200806/23/2019 by 四火

1、环境变量:

配置 GRAILS_HOME,注意一定要配置到 build.xml 所在的文件夹:

image
2、Eclipse 装上 Groovy-Eclipse 插件,可以使用 link 方式。

3、导入 Grails 工程,并选中"Copy projects into workspace"

4、工程的属性中,选中:

 image

这样就阻止了 groovy 文件被 Eclipse 编译成 class 文件。

5、工程属性的 Java Build Path 中,选择 Libraries,选择 Add Variable,添加变量 GRAILS_HOME,并将其中的所有文件夹内的所有 jar 文件全部引入工程

[……]阅读全文

Continue reading

SSH 学习杂记

Posted on 03/28/200806/23/2019 by 四火

ssh Web 开发是一个很有意思的事情。Struts+Spring+Hibernate 作为一种当今流行的开发模式,我很荣幸地在一周左右的时间里,疯狂地边学边琢磨了一番,甚有感触。

Struts:

Web 应用程序框架统一体:PHP、ASP → Struts → JSF、Shale → Ajax

从左至右与常规桌面应用程序相似度依次提高。

clip_image002

Struts 将用户表单使用 FormBean 打包,根据 struts-config.xml 里面 mapping 的配置送入 ActionServlet,ActionServlet 决定自己处理或者分发给更单一任务的 Action 处理。

事实上 Struts 的贡献主要在表示层上,对于

[……]阅读全文

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