这个月初比特币(8月1日)的硬分叉 (Hard Fork) 是互联网加密货币的一大新闻, 像我这等小白, 只关心钱包里的钱是否增值. 计算机中的 fork 意思就是进程自我复制一份 除了进程 pid 不一样, 执行的代码都一样, 这次比特币 (代码BTC) 进行了 fork 操作, 分出一孩子 也就是 BCC (Bitcoin Cash). 那么我用以下在LINUX下的C程序来演示一下这过程. #include <stdio.h> #include <unistd.h> #include …
去年我参加了 Google 的初面(电话面试), 可惜没有通过. Google 瑞士的一个软件工程师打电话面试, 电话面试就考了一道算法题, 虽然我也准备了近一个月的时间, 但是我回答的并不完美. 虽然和我联系的Google 是在伦敦, 但是面试的时候手机上显示的是 +41 电话 来自 Google 瑞士, 整个面试大约45分钟. 题目是: 给了一些消息 和对应的日期和时间, 如果消息并不在最近10秒钟内打印过 那么就打印. 同时有可能多条消息到达(1秒之内). 就这么一个题目并没有指定接口, 而我们也不需要把所有消息都保存起来, 并且我们知道 这个 打印函数可能一秒内被调用多次: …
在之前发的贴: 软件分享 – 智慧中国象棋 (Chinese Chess) 有朋友就问我, 你这到底是怎么实现的呀? 在我看来, 有两种算法来实现棋类博弃(中国象棋, 国际象棋, 五子棋等等). 这些棋类博弃的游戏一般有以下特点: 两人轮流玩 棋盘上的信息都是公开的 棋手的目标是相反的, 一个取最大, 另一个取最小. 比如象棋中对棋盘的估值无穷大为对黑方执子有利(黑方胜)而无穷小则为对红方有利(红方胜). 模式化的棋类算法 第一种实现方式(就是我12年前的实现方式), 也是最为传统的实现方式, 就是搜索+剪枝. 搜索是在搜索树上(最大最小数 min-max tree), 树的根节点是棋盘的初始状态, 然后比如红方走一步(目标取最小), 搜索树就往下走一层, …
最近在刷题, 倒不是为了找工作, 主要是为了练练脑子, 日子过得太舒服, 人脑不动容易变笨. 程序员应该都了解并能熟悉使用 Hash 哈希表, 哈希表的插入和查找时间复杂度是O(1), 空间复杂度是O(N). 我们来看一道简单的面试题: 给定一个数组,找出相差为2的数对,比如: {1, 3, 5, 6, 9} 输出为: (1, 3), (3, 5) 拿到这题的时候 第一感觉是 暴力是否可行? 暴力搜索 复杂度为 O(N2), 大概代码如下: …
媳妇 @happyukgo 其实挺反感我给她拍照片的, 但主要原因是 我经常把她拍得很丑, 而我除了会用美图秀秀简单的滤镜之外就不会一丁点儿的PS技术. 我家孩子 Eric 很爱臭美, 每次看着我拿相机, 总会让我 “Take a picture”, 然后各种摆姿势做鬼脸, 又很兴奋的说 “Can I see, can I see..” 我姐上周来英国, 硬是要扔掉一些我不用的东西 (断舍离), 有一些7年前的甚至更旧的东西 我都保留着, 原因很简单: 我怀旧. …
世界上有两种IT公司, 一种是像谷歌 FACEBOOK这种以技术为先驱的对技术攻程狮待遇可以超过管理层的公司, 另一种就是商业模式优先, 比如啥挣钱就做, 而写代码的待遇一般不会高于管理层. Google 允许员工可以有一部分时间搞搞自己的项目 (比如 Gmail 就是员工业余时间业余项目搞出来的), 在大多公司, 特别是人力不足的情况下, 码农只能按照需求写代码, 甚至代码都得按到规范来写, 很多时候扼杀了创造力. 30多岁还在写代码, 没有任何大公司背景的我很迷茫. 就像我自己说的, 这两类公司其实可以通过面试的类别就可以区分开来. 以技术为先驱的公司面试的题目大多是算法, 设计. 而以商业模式优先的公司大多会需要掌握一门技术很具体的框架或语言(在工作需求文档 Job Specs): 比如招C#程序员需要懂 WPF, WCF或者LINQ. 我接触过一些面试, …