一线的程序员可能会遇到这种事情:领导安排一个任务,按照自己的能力两个小时就可以做完,但领导偏偏要你用半个小时设计,然后花三个小时给同事讲怎么做,同事做完之后又用半个小时评审,最后觉得还不如自己一个人做得好。既然如此,为什么要把任务交给别人去做呢?
为什么我的照片是模糊的
去年用微单相机开始摄影以来,我时不时会遇到一个怪现象:一张照片乍看起来很好,但稍稍放大就会发现画面是模糊的。这样的照片,即便构图很好、人照得很精致、色彩也很有吸引力,依旧只能算作废品。在拍过好几个月的照片之后,我终于搞清楚了这背后的原因。
2019 年的一些计划
不知不觉,从学校毕业已经有两年的时间了,我也终于成长为一个稍有经验的社会人。翻看到两年前写的 《2017 年度规划》,其中既有顺利完成并一直坚持下来的部分,也有半途而废石沉大海的部分。两年之后,我想把自己对 2019 年的一些想法发表出来,以便让多年之后的我能回忆起今天在思考着什么。
2018 年终总结
十一招聘吐槽大会
由于先前良好的运作,我被抽中在十一黄金周国庆假期去佐治亚理工(GT)参加 VMware 的校园招聘。
国庆节当天是我们的首场活动。计算学院(CoC)的学生干部们在红楼里帮我们挤下了两张桌子。不知道这些学生干部是不是学校派来监视我们的间谍,他们每两个小时换一班岗,专职坐在旁边的桌子上刷手机。难道他们就这么闲不需要写作业么?还是在手机里装了 IDE 因此可以用手机写作业?
按照我们招聘经理的吩咐,所有收到的简历分成两堆,一堆是要拿回去的,另一堆是要交给环卫工人的。我们在桌子上摆了一左一右两个完全一样的文件夹,聊完之后会把简历放到其中一个文件夹里。可能每个学生都知道这两个文件夹意味着两种不同的结局,但可气的是他们就算眼睁睁地看着我把简历放进其中的一个,也无法知晓之后的命运。
git submodule 实用教程
在这篇文章中,我们来讲解一下 git submodule
的实战用法,包括:
- 注册 git 子模块
- 从已有的文件创建 git 子模块
- 向上同步主仓库
- 向下同步子模块仓库
- 疑难杂症
Intellij IDEA 导航类快捷键指南
在公司写过一年多的 Java 代码之后,我的直观感受是,每天大多数的时间都用于检索和阅览前人写的代码,而不是动手书写新的代码。我和大多数 Java 开发者一样,使用 Intellij IDEA 作为 Java 开发工具。因此,我认为有必要回顾开发流程,熟练掌握频繁使用的导航类快捷键,以便提升开发效率。
本文以 Windows / Linux 平台的快捷键进行讲解,Mac OS 请查看 Intellij IDEA 的 帮助文档。
详解 Python 获取网卡 IP 地址的黑魔法
在 StackOverflow 上流传着这样一份用 Python 获取网卡 IPv4 地址的神秘代码。
1 | import socket |
但是,很少有人知道这段代码是如何工作的。本文将为你揭开这段代码的神秘面纱。
HTTP PUT 与 POST 的区别
在 HTTP 协议支持的方法中,PUT 和 POST 是比较容易混淆的一对。我们来看看在 RESTful API 中应该如何正确使用这两种方法。
漫谈《深奥的简洁》
2005 年,科普作家 John Gribbin 出版了 Deep Simplicity (《深奥的简洁》) 一书,通过阐述混沌系统理论,为读者提供了认知复杂世界的新工具。作者在序言中说到,一个混沌系统需要满足两个条件:其一,系统状态对初始条件敏感;其二,系统具有反馈机制。总体来说,《深奥的简洁》是一本不错的读物,向读者揭示了一些复杂现象背后共有的简单逻辑。不过我认为,作者的部分论述仅仅停留在了表面现象,甚至有意避开讨论混沌系统的本质。
数据库的隔离等级
要说关系型数据库的特性,我相信很多人都会想到 ACID 这个词。在 ACID (原子性、一致性、隔离性、持久性) 这四个特性中,最为复杂的是隔离性。在本文中,我们将讨论几种常见的数据库隔离等级,以及它们对数据库应用正确性的影响。
数据库隔离等级概述
所谓数据库的隔离,是指多个事务(transaction)同时发生时,事务之间的相互影响。在理想的情况下,一个事务不应对另一个事务产生副作用。但实践表明,这种数据库的处理速度较慢,若能适当放宽对隔离性的要求,则可以显著增强数据库处理并发事务的能力。
现今通用的数据库隔离等级共分为五级,按隔离性从低到高,分别为:
- 未提交读取(read uncommitted)
- 已提交读取(read committed)
- 可重复读取(repeatable read)
- 快照隔离(snapshot isolation)
- 可序列化(serializable)
下一代区块链技术:Telegram Open Network 简介
2017 年,伴随着比特币和以太币等虚拟货币的暴涨,区块链技术逐渐被越来越多的人知晓。此时,著名即时通讯软件 telegram 高调推出数额巨大的 ICO 计划——telegram open network (TON)。与传统区块链网络相比,TON 在吞吐量、实时性、可扩展性上都引入了突破性的技术,代表了当前区块链技术的巅峰水平。本文将纵览 TON 的整体设计,并探究它实现高性能区块链网络的方法。
归国航班上的随想
二月三日,我搭乘飞机回到了离别两年的故土。
三藩机场的候机厅里,有两排座椅格外显眼,那里聚集着一个国内初中生观光团。这些小孩穿着紫色运动衫校服,外面披着鲜亮的橘黄色冲锋衣,观感丝毫没有动画中修学旅行的场景那样和谐。尽管初中生的爸妈通常不会给孩子买游戏机,但这并不影响每个人捧着手机消磨时间。小说和 FIFA 是普遍的,至于屏幕上二次元画风浓烈的那位玩的是不是⎡碧蓝航线⎦,就不得而知了。
把 git 分支恢复出厂设置
尽管你可能没有用过,但手机和电脑,都有一个恢复出厂设置的选项。如果不幸把一切搞得一团糟,还有机会可以重新来过。那么,如果把 git 仓库搞成了一团糟,能不能也恢复出厂设置,变成和远程仓库一模一样的内容呢?
你的心中可能已经有了一个答案:
1 | cd .. |
与这种费时费力的做法相比,其实还有一个更加优雅的方案。
2017 年终总结
用 AWS S3 搭建个人云存储平台
你可能用过 Dropbox 和百度网盘之类的云存储服务,不过 AWS S3 才是当今世界上最大的云存储。虽然 S3 服务的对象多为企业用户,你同样可以使用它搭建个人云存储平台。在这篇文章中,我们来看看 S3 API 的配置,以及如何使用 s3cmd
工具与 S3 存储服务交互。
Java 8 stream 与 functional interface 的珠联璧合
Java 8 提供了一组称为 stream 的 API,用于处理可遍历的流式数据。stream API 的设计,充分融合了函数式编程的理念,极大简化了代码量。
我们来讲解如何将常用的 stream API 与相应的 functional interface (函数式接口)配合使用,达成数据处理的目的。
the silver searcher:快如闪电的 grep
UNIX/Linux 系统有不少好用的工具,用于文本搜索的 grep
或许是其中最常用的工具之一。尽管平时称心如意,在面对数百万行的代码库时,grep
的用户体验实在堪忧。还好,我们有 the silver searcher (即 ag
)这样迅捷的替代品,从此再也不必经历漫长的等待了。我建议,在日常操作中,可以用 ag
完全取代 grep
。
下面来介绍 the silver searcher 的安装和使用方法。
双虚拟机隔离上网完整教程
本文将以 VirtualBox + ubuntu + tor 为例,详细讲解搭建双虚拟机隔离上网环境的方法。
NSX Transformers [Dropkick] 开发后记
故事背景
NSX 是 VMware 的支柱产品之一,旨在为企业提供一体化网络虚拟化方案。NSX vSphere 已在市场站稳了脚跟,公司正逐步把开发力量转移至它的后继者:NSX Transformers。去年发布的 Transformers 1.1 版本 [Crosshairs] 正在某家合作伙伴服役,今年推出的 2.0 版本 [Dropkick] 预计会在十余家企业推广试用。
NSX Transformers 曾经使用了 Pivotal 出品的 NoSQL 数据存储套件 GemFire。由于商业调整,GemFire 的核心组件被捐给了 Apache 基金会,产品开发陷入停顿。为了避免使用停止维护的产品,我司把目光投向了 VMware Research 编写的开源数据库 CorfuDB,并打算在 Dropkick 完成实装。这半年多的故事,都是围绕更换数据库展开的。