Skip to content

四火的唠叨

一个纯正程序员的啰嗦

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

实际技术选型的考虑因素

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

tech

最近在工作中我需要把数据从公共的 Data Warehouse(数据仓库)导出来,放到属于我们 team 自己账号的云端存储资源中去,然后再在我们的应用中查询这样的资源。需要导出数据是因为直接从 Data Warehouse 查询数据是一个缓慢而且异步的过程,而我们的应用数据查询需要实时性。现在要解决这个问题有一些 AWS 的服务可供我们可以选择,基本上分成了两大类:

第一类是存储和内容分发(Storage & Content Delivery):

  • CloudFront:CloudFront 是用于内容分发给不同地区用户的,它在全球设有数个 “edge”,作为临近网络访问数据的入口。就如同大网站建立

[……]阅读全文

Continue reading

Java8 集合中的 Lambda 表达式

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

lambda

本文翻译自《Java 8 Explained: Applying Lambdas to Java Collections》。

Lambdas 表达式是 Java 8 的主题,在 Java 平台上我们期待了很久。但是,如果如果我们不在集合中使用它的话,就损失了很大价值。把现有接口迁移成为 lambda 风格接口的问题已经通过 default methods,也就是 defender methods 解决了。在这篇文章里面我们来看一看 Java 集合里面的批量数据操作(bulk operation)。

批量操作

最初的变更文档已经说了,批量操作是 “给 Java 集合框架添加的用以批量操作数据的功能,而它是基于 lam

[……]阅读全文

Continue reading

换个角度思考问题

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

think最近在看一本书,叫做 《思考的乐趣》,第 26 节 “我最爱的证明”,里面介绍了这样一则有趣的问题(文章链接在此):

设想一个平面上布满间距为 1 的横纵直线,形成由一个个 1×1 正方形组成的网格。任意给一个面积小于 1 个单位的图形,证明这个图形总能放在网格中而不包含任何一个格点。

example

初看这个论断,觉得似乎是正确的,但又不知从何下手。文中指出证明的思路很巧妙,让人感到数学的美妙。我的感触是,文中的证明大大地换了个角度,很有峰回路转的感觉。正在读这篇文章的你,不妨先思考一下,别急着往下看答案。

如果陷入了拼命去构造各种各样的图形类别,去思考不同类别图形的情况下,怎么去摆放这样的图形,使得图形不覆

[……]阅读全文

Continue reading

写在华中科技大学招聘结束之时

Posted on 09/26/201311/17/2019 by 四火

school今天是来武汉的第四天。有机会来华科招聘毕业生,是一件很有趣也很有价值的事情。有一些是很有意思的见闻,更多的是锻炼以及收获。大学里面有很多优秀的人才,有一些人的错过则颇为可惜。请那些勤奋、有天赋而且有抱负的学生保持热情,至少我可以明确地感受到,人才的价值。互联网公司为了招聘到优秀的人才,倾注了非常多的精力。以我们为例,这一次来华科的招聘团队 7、8 个人里面,大部分都折腾得非常疲惫,每天也没什么时间吃午饭,晚上还要讨论结果、审阅简历,回酒店倒头就睡。但是很多非常有潜质的工程师,往往还持有其他互联网企业的 offer,这其中对人才的竞争是非常激烈的。

一些有趣的现象

相对于沿海地区、北京上海 [……]阅读全文

Continue reading

留心那些潜在的系统设计问题

Posted on 09/19/201306/23/2019 by 四火

500在系统设计阶段考虑全面很难,有许多人倾向于把整个设计分成若干阶段,在迭代中完成整个设计,这本身是非常好的,但是,就如同 “先做出来,以后再优化” 这样的经典谎言一样,本身并无错,只是许多程序员都不习惯于真正的迭代设计和迭代优化。举例来说,有一个日益复杂的类,每个人都修改一点点,一直到最后都没有人愿意去做重构,大家的心态都是一样的:“我只修改了一点点,为什么要我去动那么大的刀,于我没有任何好处”。我不在这里谈论这一问题的解决办法,我倒是想说,在开始阶段考虑清楚问题在多数情况下还是很有好处的,设计考虑得越是清楚,在后续阶段代码可以承受越多的变更而不腐朽。

再做系统设计的时候,我们常常会这样说:“一般

[……]阅读全文

Continue reading

北航招聘会的几个感触

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

今天晚上在北京航空航天大学举行了亚马逊今年第一场校园招聘会,我也上去过了一把 speaker 的瘾,做了 20 分钟的 tech talk。工作 5 年多以后第一次得以回到大学学校(虽然不是自己毕业的大学),走上略显陈旧的教学楼,闻到楼道里厕所的味道,我一下就记起大学来了。每年到了这个时候,总是有很多学生要面临择业的问题。有一些怀念,也有不少新的感触,虽说都很微小,我简单地记录在这里。我一直觉得如果这件事情可以放在刚入大学就进行,会有很多大学生明白自己应该在人生最荒诞的四年甚至六年、七年里面,可以做一些什么,不让自己后悔。

photo.png很多非计算机相关专业的学生想投身软件行业,甚至相当程序员。不少学生在担心自己专业不对

[……]阅读全文

Continue reading

关于 Jeff Dean 的几个搞笑传言

Posted on 09/13/201306/23/2019 by 四火

JeffDean首先,Jeff Dean 是谁?

我想许多程序员都对这个名字如雷贯耳,如果你没有听说过,可以扫一眼他的个人履历,你会感到无比惊讶的:

  • Google AdSense(在线上发布广告);
  • Protocol Buffers 协议,protobuf,用于把结构数据序列化;
  • Google News;
  • MapReduce;
  • BigTable;
  • Spanner,分布式数据库;
  • DistBelief,分布式的深度学习和并行计算平台;
  • ……

但是,最著名的就是他设计和实现了 Map Reduce 和 Big Table,这两项改变世界的技术。

坊间流传着许多关于 Jeff Dean 有趣的说法,我挑了一些我觉得有趣的列在

[……]阅读全文

Continue reading

Lombok 介绍

Posted on 09/08/201306/23/2019 by 四火

Lombok最初我是在公司内部的 broadcast 上面听到有 principal 介绍到它的,和 AspectJ 归在一起。看了几个例子之后觉得有点意思,就去 Lombok 的官网上扒了一下。我们已经知道向 AspectJ、CGLib 等等都可以做到对已有 Java 代码在字节码层级的改变,无论是编译时期静态织入还是运行时期动态代理,对于我们使用 AOP 来减少那些重复性编码的劳动、增加切面性质的逻辑颇有帮助。这里有几个概念:

  • 首先是 AOP,我在这里不啰嗦,网上有的是这样的文章。
  • 其次,如果你还没有接触过 AspectJ,那么在 Lombok 之前,AspectJ 是值得推荐了解的。和 Lombok 相比,AspectJ 更强大,有它自己的

[……]阅读全文

Continue reading

不安分的工程师

Posted on 09/02/201306/23/2019 by 四火

goodOrNot 在超级杯中,拜仁和切尔西战成平手,点球大战中,20 岁的年轻的球员卢卡库站出来罚球,遗憾的是罚失点球,令整支球队失败,丢掉冠军。对于失落和愧疚的年轻人,切尔西的传奇射手德罗巴在 Instagram 上鼓励了他:

“ 只有那些从不踢点球的人才不会罚失点球,罚点球你足够强大。你需要从中学习,我也有过类似的经历,在莫斯科的决赛中的红牌,还有半决赛对阵巴塞罗的比赛。坚持不懈的奋斗,更好的日子一定会到来。你是切尔西的一员,切尔西的球员永不放弃。”

弗格森在位曼联主帅二十六年,培养了小贝 C 罗等等一干球星,拿了无数冠军。一次对曼联主帅弗格森的采访。记者谈到各种各样风格的球员,

[……]阅读全文

Continue reading

We overestimate the value of coding

Posted on 08/26/201308/25/2019 by 四火

programmer What’re the basic qualities to a software engineer? Hard skills such as coding, testing, business knowledge and algorithm, and soft skills as communication, passion, attitude, resposibility and so on. Posted an article talked about the over estimation of algrithm, I would like to raise a similar po[……]阅读全文

Continue reading

JavaScript 3D 图表

Posted on 08/24/201310/08/2024 by 四火

在说 3D 图表以前,首先要明确两个概念,一个是数据的维度,一个是呈现数据载体的维度。对于数据的维度,一维的数据呈现,但是呈现的载体是二维的平面图,比如饼图:

image

已经能够很清晰地观察到数据的分布情况。数据如果增加一个维度,变成二维,呈现载体依然是二维的平面图:

image

数据表达依然是清晰的。但是,倘若再增加一维,这个时候就面临了两个问题:

  1. 数据的维度增加,复杂性也增大了;
  2. 计算机发展到现在,绝大多数情况下数据载体依然是二维的平面图,如何展示三维的数据呢?

这两个问题中,第一个问题从本质上说,无法解决。数据的维度越大,理解起来理所当然地,也越来越困难。

但是第二个问题,我们至少有两种解决办法。一种

[……]阅读全文

Continue reading

工程师的生活

Posted on 08/17/201310/01/2024 by 四火

life我忽然很好奇,想知道其他软件工程师的生活是什么样的?人永远都没有活在别人心中的形象那么绚烂,生活中总有无数烂事烦事需要处理,但是每个人都有自己享受生活的方式。逛了逛了各式技术博客和论坛,我发现大家似乎都太严肃了,太谦逊了,太学术了。做软件本来是一件很有意思的事情,但是这些帖子和文章无非就包括这么几种:

  • 技术文章,不解释,这部分当然是大头,虽然技术文章普遍不受欢迎;
  • 牢骚,喵了个咪的薪水低啊,呜了个汪的加班苦啊;
  • 心灵鸡汤,要励志、要发奋、要改变世界;
  • 长者语气教育后辈,“ 给刚入职的程序员们的警示”;
  • 无聊的纷争,Linux 就是比 Windows 牛逼

[……]阅读全文

Continue reading

Memcached 调优

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

cache项目中有一个对实时响应性比较高的服务,引入了 Memcached 以减少延迟和减少数据库压力。但是期间遇到了一些问题,这里记录一些调优细节。 

客户端选择

  • 最开始我使用的是 Memcached Java Client,但是最后放弃了,放弃原因包括:
    • 有时会出现的 “No Thread For Socket” 异常,我记录在这里;
    • 它不支持 NOREPLY 模式(在这种模式下,更新缓存的 set 操作可以不需要 Memcached 服务端响应,这使得 set 操作非常非常快)。
  • 现在我使用的是 XMemcached。

统计信息

可以通过 nc 命令向 Memcached 服务端发送消息来获取统计信息,例如:

echo "

[……]阅读全文

Continue reading

使用堆外内存

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

有时候对内存进行大对象的读写,会引起 JVM 长时间的停顿,有时候则是希望最大程度地提高 JVM 的效率,我们需要自己来管理内存(看起来很像是 Java 像 C++祖宗的妥协吧)。据我所知,很多缓存框架都会使用它,比如我以前使用过的 EhCache(给它包装了个酷一点的名字,叫 BigMemory),以及现在项目中的 Memcached。在 nio 以前,是没有光明正大的做法的,有一个 work around 的办法是直接访问 Unsafe 类。如果你使用 Eclipse,默认是不允许访问 sun.misc 下面的类的,你需要稍微修改一下,给 Type Access Rules 里面添加一条所有类都可以访问的规则:

config

在使用 Uns

[……]阅读全文

Continue reading

自由地生活和工作

Posted on 07/27/201306/23/2019 by 四火

FogCreek这篇文章,算是理清和记录了一些我一直以来想说的话。在昨天的课程上,我们谈论目标、生活方式和工作,特别地,有一个具体问题——“ 五年后的你会是怎样的?” 其实我很好奇其他人的想法都是如何的,起码于我来说,这是一个很有趣的问题。

我不既不是那种得过且过、无所追求的人,也不是具备钢铁神经、顽强意志的人,更不是拥有无比天赋、才华横溢的人。我大概不可能成为什么名人伟人,但是还是有小小的野心和抱负,想做一些符合自己价值观的事情(参见关于四火)。我很喜欢软件,也很喜欢学习和捣鼓新东西,但是我也并不刻意去拼命弥补自己的技术短板;我希望把代码写漂亮,但是始终觉得只有

[……]阅读全文

Continue reading

JVM 问题定位工具

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

VisualVMJDB

JDB 是基于文本和命令行的调试工具,Jikes 在 JDB 的基础上提供了 GUI。熟悉 JDB 还是有价值的,很多情况下需要我们在命令行下完成简单的 debug 问题定位。

jdb -classpath bin com.xx.Example
jdb -connect com.sun.jdi.SocketAttach:hostname=myhost,port=8000
jdb -connect "com.sun.jdi.CommandLineLaunch:main=Hello 1 2 3"

我们可能更熟悉使用下面这样的方式来进行调试,但本质上就是在使用 JDB:

-agentlib:jdwp=tran

[……]阅读全文

Continue reading

Issue record: “No thread for socket” about Memcached

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

MemcachedWe own a service supplying not-real-time data to the downstream clients. In order to reduce the average latency and the pressure on database, Memcached was imported as the cluster center cache, and our service consumed it. I encountered an issue when Memcached was firstly deployed on production envi

[……]阅读全文

Continue reading

Chrome 插件开发

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

plugin经常要访问一些工具网站,根据页面上特定的取值。这些行为其实完全可以被视作重复劳动,有机会被脚本或者插件的自动行为取代。iMacro 或者 Greasemonkey 都是做这件事的好工具,今天下午有时间,要不干脆写一个 Chrome 插件吧。

没有必要去 Google 什么教程,官方的文档已经非常详细,足够指导整个过程了。文档的质量非常好,又有很多例子,是很不错的示例。本质上,用到的技术还是 HTML、JavaScript 和 CSS。我不在这里说太多,推荐大家去浏览一下,即便不做插件开发这件事情,过一下文档也是有收获的。如果你想尽快上手,解决重复劳动的问题而已,对这种好似路边花花草草的小东西没有钻研的兴趣,那么不

[……]阅读全文

Continue reading

寻找 Mac 平台上 Windows Live Writer 的替代品

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

工作中大部分 Windows 上的软件我都可以在 Mac 上找到相应的替代品。我已经习惯使用 Windows Live Writer 来写博客了(有一个普遍的言论是,微软是一家没有品味的公司,但是也有一些可用性做得比较出色的软件,Windows Live Writer 就是其中之一),在 Mac 上我需要寻找这样的替代品。用客户端写博客比网页端有很多优势,比如网上的图片,截屏的图片,可以直接快捷键粘贴到博客中,再比如配合插件,可以很方便地实现我需要的代码高亮效果。

写博客的同学可以在这里下载到,代码高亮效果使用SyntaxHighlighter 插件完成:

SyntaxHighlight

如果你的博客是 WordPress,在服务端开启远程发布

[……]阅读全文

Continue reading

几道容易出错的 JavaScript 题目

Posted on 07/06/201306/23/2019 by 四火

crazy下面这几道 JavaScript 题目大多来自于周五的一个小分享。都是很小的题目,但是很容易犯错。有一些是语言特性使然,有一些则是语言本身没有设计好而留下的陷阱。结果就是,遇到的人很容易陷进去骂娘,这些东西是略有些反直觉,感兴趣的不妨看看,平时我们还是尽量少些这样似是而非的代码。

1.

function Container( properties ) {
    var objthis = this;
    for ( var i in properties ) {
        (function(){
                var t = properties[i];

[……]阅读全文

Continue reading
  • Previous
  • 1
  • …
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • …
  • 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