大风车Android客户端的架构演进 (f2e.souche.com)
大风车从第一版发布开始到现在已经走过了两个多年头,陆续上线发布了二十多个版本,从一开始的提供web容器包装h5的简陋版本,发展到现在由九个专职原生开发同学及数位前端同学支持的12w行(统计数据来自SonarQube)代码的规模。架构的可用性半衰期随着业务体量的增长而缩短,那么如何支撑现有业务的维护及后续的业务开发是对我们的一大挑战,而本人作为经历了从零开始的开发人员,下面带大家回顾一下这两年来的大风车Android客户端的架构变化。
by @技术头条 2017-03-11 23:57 查看详情
我理解中的“大前端”/“大无线” (f2e.souche.com)
最近,我所在的团队做了一些结构调整,其实我一直想讲讲这次调整,希望能够带给同行一些思考,但因调整后很多事情还未走上正轨,一直拖延着,现在终于有时间把一些想法写下来记录成文字。

今天早晨,还看到一篇文章,讲“大前端”,文中展望了近年来“前端”影响的领域,从美工时代刀耕火种的时代到现在延伸到 NodeJS ,ReactNative甚至桌面端,以及传统前端的时代,听来的确让人非常兴奋和自豪,但是作为一名理性的工程师,对于这种自High的论调一定要抱有谨慎的态度。

其实在技术选型上我是一个激进却又保守的人,所以,我同大家伙一样,对于JS语言冒出来的给人无限想象的能力非常的敏锐和兴奋,但是在落地到真正的业务中的时候却要仔细权衡好它的真正的“价值”。此处的价值更多针对的是“对公司整体业务的价值”,而不是对团队或者个人的价值或是其他,所以,引入一个技术栈,绝非看起来那样简单,“新技术”可能会给你的团队或者业务带来加持,但是更多时候,外界的人云亦云却往往会夸大某个技术的价值,然后同时刻意避免谈及这些技术带来的问题,就是我们通常所说的“脱离场景讨论技术”,而且通常带来的问题比解决的问题还要多得多,这时候如果抱着“扩大前端团队的话语权”或者“做一步看一步毕竟业界都在这样玩”的态度,那就和“技术创造价值”的本意相违背了。

其实,大家会发现我所在的团队并不是一个保守的团队,从外面看,我们始终走在最前沿,但是从内部看,其实我们一直在关注“技术创造价值”这件事情的本质,所以我们给前端团队强化了很多职能,但是却走了一些不同的道路,之所以会这样,其实就是基于我们针对每个技术栈所做的思考,接下来我会举几个例子来讲。

其实我今天本来想讲的事情,并不只是“前端”,而是这次团队组织架构调整后的“大无线”,为什么要从“大前端”到“大无线”,也是基于最大化价值输出的考虑,这是后话。

这次调整,最大的三个动作就是, NodeJS 的职能变化/ReactNative的引入/专门的架构组职能,然后包含其他一些小动作。
by @技术头条 2017-03-11 23:56 查看详情
CentOS 6下Android SDK碰到提示”libc.so.6: version `GLIBC_2.14′ not found”的解决方法 (www.sunnyu.com)
在CentOS 6的机器上安装了Android的开发环境,碰到如下一些问题和解决方法
1. Android Studio 添加Android SDK时,提示缺少JDK 1.5、JDK 1.6 或 JDK 1.7, 但是机器上已经安装好JDK 1.6, JDK 1.7,还是提示同样的问题
解决方法,软件的提示信息Bug,其实是缺少 JDK 1.8(这个提示Bug应该会在后续版本被修订), 下载安装JDK 1.8,添加JDK 1.8后,再添加Android SDK,一切正常。
2. 新建一个简单Android项目,编译,提示”libc.so.6: version `GLIBC_2.14′ not found” 的错误信息
下载使用的是Android SDK Ver 25.2.5 Platform Tools Ver 25.0.3 Build Tools Ver 25.0.2
google搜索,确认是libc库的版本低的原因,CentOS 的libc版本文v2.14 要CentOS 7 才有支持 GLiBC_2.14,
解决方法要么重装系统使用CentOS 7, 要么逐个试验降低SDK版本,直到可以不要GLIBC_2.14的可用SDK版本。
既不想重装系统到CentOS7, 也不想逐个往下试验低版本SDK,
搜索网络后找到一个解决方法,也就是在其他目录编译安装一个并行的glibc 2.14版本,然后使用LD_LIBRARY_PATH临时指定到这个新安装的libc目录
by @技术头条 2017-03-11 23:56 查看详情
使用CSS offset-path让元素沿着不规则路径运动 (www.zhangxinxu.com)
在web端,要让一个元素按照特定的路径运动,在之前,基本上只能借助于SVG SMIL animation来实现,但是,随着浏览器的发展,CSS代码也能实现这样的功能,本文就将介绍如何使用CSS中的offset-path属性让元素沿着不规则路径运动。有demo有截图还有gif演示,总之,希望本文的内容能够对您的学习有所帮助。
by @技术头条 2017-03-11 23:54 查看详情
【死磕Java并发】—–J.U.C之AQS:CLH同步队列 (cmsblogs.com)
CLH同步队列是一个FIFO双向队列,AQS依赖它来完成同步状态的管理,当前线程如果获取同步状态失败时,AQS则会将当前线程已经等待状态等信息构造成一个节点(Node)并将其加入到CLH同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点唤醒(公平锁),使其再次尝试获取同步状态。
by @技术头条 2017-03-11 23:52 查看详情
JavaScript中的工厂函数 (www.css88.com)
不学习函数和对象,你不可能成为一名JavaScript程序员,并且当他们一起使用时,是构建块,我们需要从一个称为组合(composition)的强大对象范例开始。今天我们来看一些惯用的模式,使用工厂函数来组成函数,对象和 Promises 。

愚人码头注:组合模式是将一批子对象组织为树形结构,一条顶层的命令会在操作树中所有的对象。

当一个函数返回一个对象时,我们称之他为 工厂函数(factory function)。
by @技术头条 2017-03-11 23:50 查看详情
MySQL工具推荐 | 基于MySQL binlog的flashback工具 (imysql.com)
相信您应该遇到过因为误操作破坏数据库的问题,比如忘了带WHERE条件的UPDATE、DELETE操作,然后就需要进行传统方式的全量 & 增量恢复。现在,给您介绍一下MySQL中的flashback玩法,也可以做到像Oracle的flashback那样。

目前MySQL的 flashback(又称 闪回)一般是利用binlog完成的,能快速完成恢复且无需停机维护。

第一个实现该功能的是阿里云的 彭立勋,他在MySQL 5.5版本上就已实现,并将其开源及提交给MariaDB,为社区提供了非常优秀的参考模型。
by @技术头条 2017-03-11 23:41 查看详情
今天你检查备份了吗? (imysql.com)
引爆各大技术群的事情就是网易游戏《炉石传说》游戏数据库发生宕机并引发数据丢失事故,最终决定回档并后续补偿玩家损失。详情可见官网公告:http://hs.blizzard.cn/articles/16/8565

我以前也在搜狐畅游负责游戏数据库维护,也遇到过因为服务器故障最终导致回档的事故,不过都没像这次炉石搞这么大动作。在这里我并不想借机调侃消费他们或搞营销,只想和大家一起聊聊作为DBA,应该注意哪些事。
by @技术头条 2017-03-11 23:40 查看详情
FAQ系列 | 纳尼,mysqldump导出的数据居然少了40万? (imysql.com)
用mysqldump备份数据时,加上 -w 条件选项过滤部分数据,发现导出结果比实际少了40万,什么情况?

我的朋友小文前几天遇到一个怪事,他用mysqldump备份数据时,加上了 -w 选项过滤部分数据,发现导出的数据比实际上少了40万。
by @技术头条 2017-03-11 23:40 查看详情
【翻译】借助SVG实现背景透明JPG图片 (www.zhangxinxu.com)
人物往往色彩丰富,有时候会遇到需要背景透明的场景,结果PNG24图片尺寸太大,PNG8质量太差,JPG尺寸最小效果还好,但是背景又不透明,有没有什么办法就有JPG的小尺寸好效果,同时背景透明呢?本文的处理技巧可能会对你解决相关问题提供一些思路。
by @技术头条 2017-03-11 23:32 查看详情
继续说说“在家办公” (www.raychase.net)
​我在几年前写过一点对于在家办公的理解,经过最近几年的感受,时不时地需要在家办公,零零散散陆陆续续有了一些新的感受。

首先要明确的是,团队的支持是最重要的。需要一个宽松的团队氛围,能够获得足够的信任,这些都是软基础。如果同事和上司不信任,这件事情是不可能办成的。对于那些把员工视为不可靠、不安全因素的公司,在家办公也是难以实现的。

开发环境。以往我一个不愿意在家办公的重要原因是,我的开发环境都部署在desktop上面,从家里无论是通过Microsoft Remote Desk还是NoMachine之类的连接(我还试过一些别的持有图形界面连接的方式),都不够理想,一顿一顿的,写代码很难受。现在已经用上了云主机,机器性能比较强大,总结下来一个比较理想的方式是,在本地(例如我的Mac)上面开发,并且进行配置管理,比如Git提交代码和发送code review。但是所有的编译、构建、连接、测试、开发环境部署等等全部放到云主机去进行。这之间使用一个同步工具来完成,我目前用的是公司一些热心工程师写的一个同步小工具——即选定了Mac上的一个工作文件夹,其下的所有改动全部自动同步到云主机去,我不需要显式执行任何脚本。

硬件和设备。我对于显示器要求不太高,虽然在家和公司都配置了比较大的显示器,但是我已经习惯了小小的Mac屏幕。在家办公需要安全可靠的VPN,避免在这些硬件网络的问题上耽误时间是非常重要的。无论是在公司还是在家,笔记本电脑始终是除了网络之外第一位重要的硬件。我想起一些同事的抱怨,公司不愿意给配备好的笔记本电脑。其实一个好的笔记本电脑才多少钱,一台咖啡机才多少钱,提升的效率能创造多少价值,我始终不明白为什么那么多人算不过来这笔账呢。

关于会议和问题讨论。这是一个不太好解决的问题,也是我觉得工程师绝大多数时间一定要待在公司里的一个重要原因。虽说现在各种视频音频通信设备已经足够发达,但是面对面的沟通和使用这些设备来沟通依然有着鸿沟般的距离。我所在的大的团队有两个子团队,一个在西雅图,一个在纽约,为了达到面对面沟通讨论问题的效果,经常需要有同事往返这两个城市出差。有了问题,一个转身的距离就可以立即发起询问和讨论,手边就是稿纸和白板,这是在家里办公很难做到的。

氛围。这看起来是一个不怎么被人提起的原因,但是却非常重要。孩子出生以后,这一点更加明显,我当然愿意在家办公以节省交通的时间开销。可是问题是在家里办公干扰因素确实很多,例如孩子哭闹。虽然在公司也不得不面对一些容易被打断的困难,但毕竟也是工作的氛围浓重,和在家还是不一样的。还有一个是上下班一路上的氛围,我可以坐在车里安静地思考问题,整理头绪,看起来这件事情哪里都可以做,但是只有在上下班路上才可以保持头脑直接和放松的状态,因为大多别的事情也做不了。在家里诱惑太多,在单位杂事太多。

时间和空间。在家办公的一大好处是有更多时间,可以更自如地分配时间。本来就省下了通勤的时间,白天的时间可以更自如地分配。有时碰到恶劣天气,待在家里可以免去很多天气因素带来的烦恼。有时候在公司很难找到一处安静的地方思考问题,而思考和讨论像是两个极端,有时不打照面却都不可或缺,有时则一起出现。在家里显然更适合需要安静和空间的思考,在放松状态下做决定。

说到最后,无论如何,虽然现阶段在家办公还只是一个有时为之的选项,并不适宜成为常态(我并不认为37Signals这样的公司所实践的值得推广),但是如果说天下之大,要有哪一个高新技术行业最能够给予在家办公的福利的话,软件工程师们应该是相当有资格说这话了。
by @技术头条 2017-03-11 23:06 查看详情
大白话聊聊分布式事务 (www.bo56.com)
什么是分布式事务

简单的来说就是,一个大的操作由两个或者更多的小的操作共同完成。而这些小的操作又分布在不同的网络主机上。这些操作,要么全部成功执行,要么全部不执行。

拿转账的例子来说下什么是分布式事务。张三和李四在不同的城市,存储他们账户信息的服务器也在不同的网络主机上。张三有30元钱,李四有30元钱。张三给李四转账5元就是一个事务。完成这个事务,需要两个操作。首先得从张三账户上扣5元,然后再给李四账户上加5元。事务执行完毕后,必须是两个操作都执行成功,要么都失败。

事务的特性

分布式事务本身就是事务,所以也有事务的特性。事务有四个特征ACID:
A:原子性(Atomicity)
事务中的各个操作单元要么全部做,要么就全部不做。不能事务执行后,处于只做一半的状态。
C:一致性(Consistency)
事务执行后,必须由一个一致状态变为另外一个一致状态。
I:隔离性(Isolation)
事务之间不能相互干扰。
D:持久性(Durability)
一旦事务完成,对于数据的变更是永久的。
by @技术头条 2017-03-11 23:04 查看详情
Linux的进程间通信 - 管道 (liwei.life)
管道是UNIX环境中历史最悠久的进程间通信方式。本文主要说明在Linux环境上如何使用管道。阅读本文可以帮你解决以下问题:

什么是管道和为什么要有管道?
管道怎么分类?
管道的实现是什么样的?
管道有多大?
管道的大小是不是可以调整?如何调整?
by @技术头条 2017-03-01 23:19 查看详情
Linux的进程优先级 (liwei.life)
为什么要有进程优先级?这似乎不用过多的解释,毕竟自从多任务操作系统诞生以来,进程执行占用cpu的能力就是一个必须要可以人为控制的事情。因为有的进程相对重要,而有的进程则没那么重要。进程优先级起作用的方式从发明以来基本没有什么变化,无论是只有一个cpu的时代,还是多核cpu时代,都是通过控制进程占用cpu时间的长短来实现的。就是说在同一个调度周期中,优先级高的进程占用的时间长些,而优先级低的进程占用的短些。从这个角度看,进程优先级其实也跟cgroup的cpu限制一样,都是一种针对cpu占用的QOS机制。我曾经一直很困惑一点,为什么已经有了优先级,还要再设计一个针对cpu的cgroup?得到的答案大概是因为,优先级这个值不能很直观的反馈出资源分配的比例吧?不过这不重要,实际上从内核目前的进程调度器cfs的角度说,同时实现cpushare方式的cgroup和优先级这两个机制完全是相同的概念,并不会因为增加一个机制而提高什么实现成本。既然如此,而cgroup又显得那么酷,那么何乐而不为呢?
by @技术头条 2017-03-01 23:16 查看详情
起底Git-Git内部原理 (yanhaijing.com)
这是起底Git系列的第三篇,本篇我们来介绍一下Git的内部工作原理。
by @技术头条 2017-03-01 23:09 查看详情
十分钟快速构建你的一个springboot的项目 (xnow.me)
springboot是最流行的Java微服务框架之一,本文从基础的Java和mavne环境搭建开始,详细的展示了如何利用http://start.spring.io快速开发一个简单的spring...
by @技术头条 2017-03-01 23:02 查看详情
了解CSS属性font-kerning,font-smoothing,font-variant (www.zhangxinxu.com)
本文很简单,了解几个可能平时用得不太多,长得不太熟的font相关的几个CSS属性,分别是:font-kerning, font-smoothing和font-variant。
by @技术头条 2017-03-01 23:01 查看详情
2016年Android恶意软件专题报告 (blogs.360.cn)
2016年全年,360互联网安全中心累计截获Android平台新增恶意程序样本1403.3万个,平均每天新增3.8万。全年相比2015年(1874.0万)下降25.1%,扭转了2015年以来迅猛增长的势头,但自2012年以来,移动端从几十万跨越到千万级别恶意样本,显示了移动恶意程序总体进入平稳高发期。
by @技术头条 2017-03-01 22:56 查看详情
Tangram 的基础 —— vlayout(Android) (pingguohe.net)
vlayout 是手机天猫 Android 版内广泛使用的一个基础 UI 框架项目 提供了一个用于RecyclerView的自定义的LayoutManger,可以实现不同布局格式的混排,目标是支撑客户端native页面的快速开发。它也是 Tangram 框架的基础模块,现已开源,欢迎移步到 github 上指教。
by @技术头条 2017-03-01 22:56 查看详情
所有权宣言 - Swift 官方文章 Ownership Manifesto 译文评注版 (onevcat.com)
Swift 团队最近在邮件列表里向社区发了一封邮件,讲述了关于内存所有权方面的一些未来的改变方向。作为上层 API 的使用者来说,我们可能并不需要了解背后所有的事实,但是 Apple 的这封邮件中对 Swift 的值和对象的内存管理进行了很全面的表述,一步步说明了前因后果。如果你想深入学习和了解 Swift 的话,这篇文章是非常棒的参考资料。我尝试翻译了一下全文,并且加上了一些自己的注解。虽然这篇文章比较长,但是如果你想要进阶 Swift 的话,不妨花时间通读全文 (甚至通读全文若干遍)。

如果你没有时间通读全文,又想简单了解一下到底发生了什么的话,可以往下翻到最后,有一个我自己的简易的总结版本。

这篇文档本身是对今后 Swift 方向的一个提案,所以涉及的关键字和具体实现细节可能会有出入,不过这并不影响文章背后的思想。您可以在 Swift 的 repo 里找到这篇文档的原文。
by @技术头条 2017-03-01 22:55 查看详情