Skip to content

四火的唠叨

一个纯正程序员的啰嗦

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

C++程序员和 Java 程序员的差异

Posted on 10/25/201206/23/2019 by 四火

C  _Java 首先说明,这几年接触的最多的程序员就是 C++程序员和 Java 程序员,这只是我自己的一点体会而已,一个人的眼光难免是浅薄的。不过,欢迎拍砖,也欢迎对号入座。

从对基础知识掌握的程度来说,例如数据结构和算法,C++程序员要比 Java 程序员牢靠得多。究其原因,大概是因为 C++程序员需要经常自己实现那些项目基础设施,但是 Java 程序员大多拿来即用。公平地说,C++不是一门适合程序员初学者的语言,但是 Java 是。C++程序看起来确实要比 Java 程序稍难懂一些,C++程序员往往思维更加严密。另一方面,我也发现内地的程序员要比沿海和发达城市的程序员基础扎实,而且低调内敛,不那么浮华,但是就是善于解决那些难

[……]阅读全文

Continue reading

笔记:线程的同步和互斥

Posted on 10/25/201206/23/2019 by 四火

线程的同步和互斥:

线程的同步:指多线程通过特定的手段(如互斥量)来控制线程之间的执行顺序。

线程的互斥:实指对共享资源的约束访问。多线程环境中,某些资源只允许一个线程使用,这类资源成为临界资源,线程之间的关系就表现为互斥的。

线程之间的同步和互斥是通过操作系统的信号量和 PV 操作原语来实现的。

互斥体(Mutex):

表现互斥现象的数据结构,也被当作二元信号灯。一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源。

信号量(Semaphore):

是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调

[……]阅读全文

Continue reading

MVC 框架的映射和解耦

Posted on 10/21/201208/05/2019 by 四火

mvc 最近在写一个业务上用到的框架,回想起接触过的一些 MVC 框架,尤其是主要贡献在后端表现层上的那些,它们之间有太多的相似,在不断解耦的过程中,层数和模块数也越来越多,需要不断引入层与层之间的映射逻辑将不同层次之间关联起来,我们不妨来查看一下这个过程,能否寻找一些 MVC 框架的共性和启示。

ASP.NET MVC 1 到 MVC 2 模型的进化

注意这里讲的不是 MVC 这个模式,而是 ASP.NET MVC 这个框架。其实这个话题有点老。MVC 1 在桌面程序中应用较多,业务逻辑当然放在 Model 里面,Controller 负责将用户的请求数据传递到 Model 去,之后就放手不管了,让 View 通过观察者模 [……]阅读全文

Continue reading

编程的未来

Posted on 10/14/201206/23/2019 by 四火

1 最近在看一本书,加来道雄(Michio Kaku)的《物理学的未来》,第一、第二章是程序员更加关心的,对于下一个 100 年计算机和人工智能未来的预测。想想计算机发展短暂的历史,这些发生了的翻天覆地的变化,似乎都在弹指一挥间。谁的大胆预测可以那么准确?无论如何,书中对其这样几个猜想令我记忆深刻:

  • 因特网眼镜和隐形镜片
  • 无人驾驶汽车
  • 摩尔定律结束
  • 通用翻译器
  • 全息摄影和三维影像
  • 意识识别
  • 有意识情感的机器人
  • 模拟大脑

这是物理学家眼中的世界(另外推荐他的另一本书《平行宇宙》),激动人心;另一方面,我回想起小时候无比痴迷的机器猫,小小四维空间袋,寄托了孩子多少纯真的梦想,有多少神奇的

[……]阅读全文

Continue reading

分页的那些事儿

Posted on 10/13/201210/08/2024 by 四火

1 最近同事在讨论一个关于分页的话题,我在此简单整理一下对于分页的认识。

首先,分页是什么层面上的事儿?是数据访问层面、业务层面还是展示层面?

对于数据访问层来说,具体说,对于查询接口,需要一个“from” 参数和一个“to” 参数,就可以做到获取查询结果集中特定的记录了,它不应该知道任何关于第几页和每页有几条数据这样的信息,这种信息应该是在上层的展示层面所关心的。

举例来说,有这样的接口调用(这只是其中一种接口形式,关于 DAO 接口的形式可以参见这篇文章的讨论):

map.put("age", 18);
map.put(&

[……]阅读全文

Continue reading

如何在局域网内抢带宽

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

3 事情的起因是最近家里买了一台 60 寸的智能电视,支持点播(VOD)功能,家里的网络带宽理论上只有 4M,在播放的时候,就会占用大量网络带宽,导致我同时上网浏览网页都很困难。

有没有办法给限制局域网内某台主机的流量?首先,还是得从 TCP 的原理说起。

TCP 拥塞控制

TCP 是个君子协议,在拥塞控制的设计(RFC 2851)中包括慢开始、拥塞避免、快重传和快恢复 4 种算法。

c

拥塞窗口(cwnd)和接收端窗口(rwnd)二者的最小值确定了发送窗口的上限值,而实际上对于现今的网卡,接收端窗口的大小是可以很大的,也就是说,拥塞主要寄希望于拥塞窗口来控制,拥塞窗口直接决定了传输的速率。从上面这张图可

[……]阅读全文

Continue reading

对象转换的问题

Posted on 09/29/201210/08/2024 by 四火

image 有句话叫做 “计算机科学领域任何问题,都可以间接的通过添加一个中间层来解决”,但是唯一解决不了的问题,是层次本身过多的问题。每一层内都会维护自己在乎的数据对象模型。层与层之间数据的传递,就不可避免地遇到对象类型转换的问题。

这个话题也和最近的项目有关。我们在重构一个老旧的系统,所做的第一件事情,就是要把数据访问层从原有系统中剥离出来,我们精心设计了这一层的模型和结构,但是要让原有系统平缓地从原有数据访问方式上移植到新的数据访问层上,就涉及到上层(Service)的原有数据对象和数据访问层(DAS)之间的数据传递,而二者模型并不相同,而且原有 Service 的模型并不纯粹,既不是充血模型,mode

[……]阅读全文

Continue reading

DAO 的演进

Posted on 09/28/201210/07/2024 by 四火

1 这个思考源于最近项目中对 DAO 的使用和讨论。数据访问对象,在贫血模型下,要怎样去设计,框架需要完成什么,后续的开发人员需要关注什么,设计的时候到底需要把握怎样的粒度?

最早做项目的时候,是老老实实给每个必要的模型增加 DAO 接口和实现类的:

public interface IUserDAO{
    public long add(User user);
    public void delete(User user);
    public int count(String condition);
    ... ...
}
public class UserDAOImp

[……]阅读全文

Continue reading

Dart,你凭什么挑战 JavaScript?

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

dart 不妨先来打量一下 JavaScript。JavaScript 是唯一至今主流且基于原型的语言,虽然说支持面向对象,但是无论是封装、继承、多态,实现起来总需要用到一些 tricky 的办法,而且也不甚完美。事实上,为了抢市场,从 1995 年 JavaScript 设计完成到发布,只有短短的 7、8 个月的时间,极度缺乏谨慎的语言特性和规范的评估。而和微软 JScript 的竞争,使得 EcmaScript 标准仓促问世,这些都是 JavaScript 存在诸多缺陷的重要因素。

不止如此,Google 认定,JavaScript 的缺陷难以以改良的方式被修复,必须革命。那么都有哪些缺陷呢?推荐大家去阅读《Using JavaSc

[……]阅读全文

Continue reading

致那些自嘲码农的苦逼程序员

Posted on 09/19/201210/01/2024 by 四火

1 好吧你可以说这是水文。

今天下午和经理聊了一些关于软件行业的话题,这两天晚上都有朋友向我倾诉程序员的茫然和苦楚,我觉得有些想法可以记录下来。时光佐证,其实我好久没写发骚的文字了,就啰嗦啰嗦。我不算一个梦想家,但是对于信念还比较固执。人各有志,赚钱多多的钱,没有什么不好。但是我希望赚钱能真正作为一项副产品,把自己希望的事情,当做一项事业去做。

互联网环境恶劣、软件环境恶劣,来到北京工作数个月,我有一些未曾体味到的感触。多少人都在议论吃青春饭的职业,多少人在自嘲重复劳动、苦逼工作,多少人在听到 “程序员” 三个字以后露出鄙夷的神色……我已经没法在每次听到这些关于程序员是非评价的时候反驳他 [……]阅读全文

Continue reading

Dart:JavaScript 的未来

Posted on 09/17/201206/23/2019 by 四火

dart 最近在关注 Dart 语言,下面这篇文章译自这里,其实是 2011 年 11 月 Google 内部员工的一封邮件,邮件中提到的 Dash,就是如今的 Dart 语言的前身。Google 搞东西很有意思,思维似乎非常超前,总是能挖到现在火爆的东西的不足,然后搞一个新的东西代替它,真是凶猛异常。比如 SPDY、V8、WebP、Go 等等,有的成功,有的失败。还有,希望大家能从下面粗糙的译文中留意到,Google 对于标准非常重视,谈论中也是霸气外露,希望把一切标准都控制在自己手里。

Subject: [Caja] 转发:从上周的 JavaScript 会议看 JavaScript 的未来
From: Mark S. Mill

[……]阅读全文

Continue reading

Java 多线程发展简史

Posted on 09/15/201206/20/2022 by 四火

image 这篇文章,大部分内容,是周五我做的一个关于如何进行 Java 多线程编程的 Knowledge Sharing 的一个整理,我希望能对 Java 从第一个版本开始,在多线程编程方面的大事件和发展脉络有一个描述,并且提及一些在多线程编程方面常见的问题。对于 Java 程序员来说,如果从历史的角度去了解一门语言一个特性的演进,或许能有不同收获。

 

引言

首先问这样一个问题,如果提到 Java 多线程编程,你会想到什么?

 

  • volatile、synchronized 关键字?
  • 竞争和同步?
  • 锁机制?
  • 线程安全问题?
  • 线程池和队列?

[……]阅读全文

Continue reading

多年前的一封邮件

Posted on 09/07/201206/23/2019 by 四火

Email 昨晚在整理邮件,翻阅到这样一封邮件,它来自我的老师郭军,曾经教我 COP(面向组件编程)课程的老师。这个邮件的始末是这样的,郭老师在课上扯到了一道题,在现在看来是再简单不过的题目了,对于给定的 n,要求只允许用一层循环,打印这样的星号(下例中 n=3):

  *
 ***
*****
 ***
  *

因为只能用一层循环,所以当时是这样实现的:

	int n=3;
	int row,col,mid;
	for(int i=1;i<=(2*n-1)*(2*n);i++){
		row = i/(2*n)+1;
		col = i-(row-1)*(2*n);
		row

[……]阅读全文

Continue reading

Io 语言导引

Posted on 08/28/201206/23/2019 by 四火

Io 第一次接触 Io 语言的时候我就被其简洁干净的语法打动了(如果你有编程语言的经验,也许 15 分钟就可以掌握大部分的语法),Io 语言的简单、灵活和对并发的良好支持都让人印象深刻。本文翻译自 Io 语言官网的这篇文章。

引言

总览

Io 语言是一门基于原型的动态语言,主要思想很大程度上受到了 Smalltalk(所有变量都是对象)、Self(基于原型)、NewtonScript(差异化继承)、Act1(并发行为特征)、Lisp(运行时可观测和修改代码)和 Lua(小巧可嵌入)的影响。

透视图

过去三十年编程语言研究的重心已经转移到了具备强大的表达力的高级语言(比如 Smalltalk),以及性能卓越

[……]阅读全文

Continue reading

我十年学习编程的历史

Posted on 08/14/201206/23/2019 by 四火

首先,我不是标题党。其次,我只想说说十年来我自己的关于编程的故事,做过的一些乱七八糟的程序。我的成长并不快,下面这些程序已经足够让我丢脸的了,喜欢发难的朋友,尽管嘲笑我吧(当然,如果你产生了共鸣,我们或许是同龄人、好基友)。最近尤其喜欢回忆起一些以前的故事(比如这篇,还有这篇),是不是说明我越来越迂腐了?

其实接触编程,是从更早学习机上的 G-Basic 开始的。但那时的我只能说凑个热闹,回忆似乎已经模糊不清。所以这段时间实在不能算作什么历史。不过无疑学习机,以及是早些时候在同学家玩的电脑,才是真正领我进入神奇计算机世界的启蒙者。

2002 年正值我高二,学校要组织一帮人去参加编程的比赛 [……]阅读全文

Continue reading

解雇专业的运维人员吧

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

mt 在很多情况下,运维占到软件成本的大块,专业的运维人员更是不好找。这样的人需要熟悉操作系统、网络以及数据库。而运维又是一件很苦逼的事情,成了算是软件写得好,研发团队的功劳;败了就得彻夜坚守岗位提供支持,不可控的因素太多。是上游团队的软件质量太差吗?

我在 09 年的时候曾经到过局方,呆了挺长一段时间,既是开局,也做运维的工作,和运维的工程师朋友一起蹲机房、守夜、切设备,知道其中无比的苦楚。很多情况下,版本的更迭、割接,都要在凌晨完成,需要仔仔细细地测试;不幸失败了还需要立即回滚,然后陪着项目组等领导骂,等新版本或者补丁到来,再重复熬夜的这段过程……

不如大胆一些,解雇你那些抱怨不止、喋喋不休的运维

[……]阅读全文

Continue reading

看透面向对象的复用技术

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

1 本文翻译自这篇文章,这篇文章写于 1998 年,作者是 Scott Ambler,真的挺久远了。看看上个世纪末的时候,程序员的视角和观点。

想从面向对象复用技术中真正获益,你就必须理解不同种类的复用,并且自如地在不同场合下使用它们。

  • 可复用资源
  • 业务对象根源

复用性是面向对象技术带来的很棒的潜在好处之一。遗憾的是,很多情况下这个好处并不能真正兑现。原因在于复用并不是毫无代价的,它并不是你使用面向对象开发工具的时候就能轻而易举得到的。相反,它是你为了成功而努力工作得来的。首先要知道的是,这个世界上有比代码复用多得多的可复用的东西。代码复用只不过是最基本的一种形式而已。当然,你不要

[……]阅读全文

Continue reading

一些中文编程语言

Posted on 08/02/201206/23/2019 by 四火

1 我自认为本文不是恶搞,让我们本着严肃认真的精神来审视这些中文编程语言。

易语言

易语言可以说是中文编程语言的老大,拥有独立的编译器。易语言并不是把现存的编程工具进行表面汉化而成的,和其他国外语言相比," 易语言" 最大的不同是彻底中文化,且拥有自下而上的全部自主知识产权。

易语言的全新版本叫做“ 易语言. 飞扬”,包含垃圾收集机制,是完全面向对象的中文编程语言:

公开 类 启动类
{
	公开 静态 启动 ()
	{
		控制台. 输出 (" 你好,世界!");
	}
}

和其他中文编程语言相比,它是最成熟的,而且同时具备了

[……]阅读全文

Continue reading

你真的精通 Java 吗?

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

java 简历和自我介绍上经常能够读到“ 精通 Java” 这样的话,有人和我说,精通 Java 的人太多了,精通 Java 已经不能算亮点、不能给自己加分了。可是事实真是这样吗?

对于语言的学习,我有一种观点,一是纵向,即要选择一门自己认为合适的语言学到有相当的深度。二在于横向,即要学习不同类型、不同历史和不同门派的语言:

  1. 既有底层的语言,也有高级语言;
  2. 接触一些动态语言、函数式语言;
  3. 了解一些不同语言的编程范型和编程方式,比如基于原型编程、面向切面编程、命令式编程等等;
  4. 最好能关注一门年纪尚浅,甚至小众的语言,了解一门语言的发展。

横向类比能够带来对一门语言的

[……]阅读全文

Continue reading

西雅图印象

Posted on 07/30/201206/23/2019 by 四火

有机会得以去西雅图出差。我们这次主要的任务是参加一些培训,更重要的是和那边的团队沟通,建立起良好关系。下面看图说话,流水账性质。下面的图片都是我用手机的记录,新鲜。至于文字,我的见识比较浅,见谅。

西雅图位于美国西北部海岸线,离加拿大温哥华不远,被评为过 “美国最佳居住地”、“最佳生活工作城市” 是非常合理的。已经算是美国 TOP15 的大城市了,但是给人的感觉依然幽静、闲适。如果要看高楼、繁华,不如去 LA,或者干脆在广州、深圳呆着。

西雅图的人口不少,市区就超过了三百万,但是没有喧嚣。我没有看到重工业企业落居,几个 IT 公司非常有名,微软、Amazon、Google 和 Real-network。根据西雅

[……]阅读全文

Continue reading
  • Previous
  • 1
  • …
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • …
  • 24
  • 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 (7)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • 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 (42)
  • Business and Investment (8)

推荐文章

  • 聊一聊分布式系统中的时间
  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • 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 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • 四火 on 聊聊商业模式——Atlassian
  • bob on 聊聊商业模式——Atlassian
  • Battlele on 回国感悟
  • Anonymous on 聊聊商业模式——拼多多
  • Battlele on 聊聊商业模式——拼多多
  • Anonymous on 聊聊商业模式——拼多多
  • Anonymous on 所有文章
  • Anonymous on 倔强的程序员
  • rocky on 关于时间管理的一点新的感悟
  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
© 2026 四火的唠叨 | Powered by Minimalist Blog WordPress Theme