警惕程序日志对性能的影响
做后台系统比做客户端软件的辛苦的地方,就是不能让程序轻易地挂掉。因为在生产环境中无法容易地复现或调试 bug,很多时候需要程序日志提供足够的信息,所以一个后台系统的程序员必须要明白该如何打日志(logging)。
精选技术长文、实践记录与系统化阅读
低噪声、高可扫读;标题、摘要、来源、标签一目了然。
采集自各技术站点的近期文章。
做后台系统比做客户端软件的辛苦的地方,就是不能让程序轻易地挂掉。因为在生产环境中无法容易地复现或调试 bug,很多时候需要程序日志提供足够的信息,所以一个后台系统的程序员必须要明白该如何打日志(logging)。
最新的Erlang虚拟机(R15B01)很大的一个改进就是加入了对dtrace探测点的支持了, 具体参见这里, 主要目标是方便在生产实践中定位复杂的性能问题。 目前Erlang的虚拟机的探测点支持Linux的systemtap和freebsd的dtrace,我们刚好能够享受的到。
但凡是一个合格的PHP程序员,就应该知道Unserialize与Autoload两个概念,但是要说起二者之间的关系,恐怕一清二楚的人就不多了。
因为又有人邀请我去Quora的C2C网站去回答问题去了,这回是 关于 @laiyonghao 的这篇有点争议的博文《2012 不宜进入的三个技术点》ActionScript,Thread 和 C++, C++争议的争议最大。(要我说,.NET比C++更需要慎重进入,呵)。我就在这里回复一下这个问题吧。 正好我一个月前看到一个视频,这个演讲视频还比较著名,这个演讲者是Exceptional C++ 和 C++ Coding Standards 的作者,还是ISO C++ 委员会的Chair,C++/CLI首席架构师,还是Microsoft的软件架构师,他叫Herb Sutter,他的这个演讲视频是 C++ and Beyond 2011上的一次公开演讲,题目是——Why C++? (如果你觉得那里的视频比较慢,你可以看优酷上的视频)(英文听力好的同学可以看一样,因为都没有中文字幕)
酷壳好久没有发娱乐性质的技术文章了,搞得气氛有点严肃了,考虑到程序员们都是比较严肃和容易较真的类书呆子的群体,所以,需要更新一个有娱乐性质的文章了。正好最近看到了两个比较有趣的图,在新浪微博上都得到了比较不错的反响,因此,更新到酷壳上来。 如果编程语言是一种刀 下面这个图是把编程语言看做是一种刀,那么会是什么样的。这个图我个人感觉很有意思。 对于这个图,最好不要解释,意会就好。不过,我却有点想不解风情,忍不住想解释一下。
本文介绍了一种基于多版本并发控制(MVCC)思想的Conditional Update解决分布式系统并发控制问题的方法。和基于悲观锁的方法相比,该方法避免了大粒度和长时间的锁定,能更好地适应对读的响应速度和并发性要求高的场景。
MySQL数据库产品提供了三种特殊用处的数据类型: SET(集合类型)、ENUM(枚举类型)、BOOL/BOOLEAN(布尔类型),而多数开发工程师,甚至DBA从业者对如何使用好这三种数据类型,以及在什么样的应用场景下使用并不十分清晰,这三种数据类型与微整型TINYINT数据类型关系比较亲近,实际项目中大家也多采用TINYINT代替前三者的功能,为此详细分析这四种数据类型,让我们大家一起详细分析清楚。
当你需要通过optimze table优化表空间,若是使用percona版本则最好先打开expand_fast_index_creation;若是官方版本,则建议自己写脚本建临时表,按照上述的过程a~e来执行,达到最优的效果。
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛; 1 基本场景 比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ; hash(object)%N 一切都运行正常,再考虑如下的两种情况;
PHP在之前把源代码迁移到了git下管理, 同时也在github(https://github.com/php/php-src)上做了镜像, 这样一来, 就方便了更多的开发者为PHP来贡献代码. 今天写这篇文章, 就是为了给在国内的同学们, 愿意为PHP开源社区做贡献的同学们, 做个示例, 如何为PHP来贡献你的智慧.
测试方法: 对一个含16个Integer/String/Date类型字段的扁平对象作序列化/反序列化,单机多线程循环执行,用循环一定次数之后sleep(1)控制频率,每隔1秒统计一次执行次数,并观察CPU/LOAD/内存等指标(因内存恒定开销,忽略掉)。
写下这个标题,那么首先得要明确什么叫简约。简约就是让用户操作简单,让用户更快的达到自己的目的。一个产品在于解决一个需求,如何让用户最好的完成需求就成为一个产品经理首先得要解决的问题。 那么在日常工作中,我们又有什么可以做的呢?怎么来让产品变得更简单呢? 在《简约至上》里面有四种策略,但是有的东西太高级了,在平时的工作未必能够用得上,所以我自己来提炼一下,看看日常工作中能够遇到并且可以解决问题的方法。 设计有四种策略,分别是删除、组织、隐藏以及转移,下面分别详细说明: 1、删除:删除是一个让人纠结的话题,做出来的东西而且是花了大量力气去做出来的东西,我们怎么忍心去删除,删除一个功能和决定做一个功能需要同样的勇气和决心。 那么那些功能需要删除呢?
浴室水龙头,有两种常见的设计。先说说A方案,如下图。有两个旋钮,一个控制热水的出水量,一个控制冷水的出水量。 从工程师的角度看,这个设计很自然,因为特定温度的水其实就是冷水和热水混合出来的,这就是其“技术原理”。 但实际上,这不好用,因为它不符合用户心智。用户心智中,水有两个维度:一个是水量,一个是温度,这两者是分离的。下面这个B方案,就是符合用户心智的方案。旋转可以控制温度,开合可以控制水量。有没有发现,这样自然多了? 所以,在交互设计中,要忘记技术原理,关注用户心智。别总惦记着数据库的表结构,想想用户想要的究竟是哪些数据。 另外,A方案中,把温度和水量混合在一起,还有一个致命的易用性问题——每次都得重新调节温度。既让人崩溃,又浪费水。
在处理一个很多选择项的表单元素时,网站设计师可以用Select控件轻松解决,如果选项实在太多,顶多用个弹出层。而手机由于屏幕空间有限,这时的交互设计就不那么简单了,像网站那样的Select和弹层的表现,常常不太适用。所以很多设计师会把选项内容放到另一个独立页面,引导用户转场到这个页面去完成选择并转场回来。 转场意味着空间的变化,在交互设计中,这是易用性的大敌之一,移动交互设计中更是如此。手机的交互空间狭小,频繁的转场很容易让用户感到迷失,即便不迷失,也会影响其操纵感。WinPhone的交互设计就有这个问题。如果一个表单,有三五个长Select,在WinPhone上,点击提交表单按钮之前,用户可能就已经被那些Select导致的转场转晕了。 其实iPhone在这个问题上有特别好的解决方案,苹果的交互设计天才,充分利用移动交互设计的独特优势——支持触摸和手势——来解决这个问题。
对于投放Google Adwords的营销人员来说,最想知道的恐怕就是Google Adwords的内部排名机制,搞懂了内部排名机制才能更好的控制广告成本,提升整体的ROI,下面就来一起看下Google Adwords 的大致原理。 Google Adwords通过广告评级来确定关键词在搜索结果页的排名,广告评级是通过出价金额和质量得分进行计算出来的。Google Adwords广告评级=最高竞价(maximum bid price)x质量得分(Quality Score) 广告评级决定广告排名,在同一页面上显示的广告顺序和位置由广告评级决定。 广告评级中的要素包括出价以及广告、关键字和网站的质量(使用质量得分衡量)。因此,即使竞争对手的出价比您高,只要您的关键字和广告的相关性更胜一筹,您仍然可能赢得较高的排名。
雅虎开发者Doug Cutting六年前创建了一个用于管理,存储和分析大量数据的分布式计算平台hadoop,现在大家也称云计算平台,用他儿子的玩具大象命名,并把它交给阿帕奇软件基金会。鉴于围绕Hadoop建立的整个行业的迅速,这会使某些人觉得非常惊讶,那就是阿帕奇软件基金会最近才推出了Apache Hadoop 1.0——被认为是足够稳定而成为“企业就绪”的第一个版本。
有同学上周问了个问题 “MySQL 里面的order by rand()”是怎么实现的。我们今天来简单说说MySQL里的order by。 几种order by的情况 乍一看这个问题好像有点复杂,我们从最简单的case开始看起。
近日我在反思一些系统设计问题,本想重读一遍《Unix 编程艺术》,后来在书店不经意发现了一本刚刚出版的《Linux/Unix 设计思想》(Linux and the Unix Philosophy),于是借来,趁五一假期通读了一遍。有关设计思想的问题,我想改日再谈。而作为一名图灵译者,这里简单讨论一下这本书的一些翻译细节。 总体而言,我认为这本书的翻译质量上乘,译者漆犇把握了原书轻松诙谐的基调,使用流畅的语言和灵活的词汇较为准确地传达了原书思想。我之所以关注这本书的翻译细节,是由于译者在多处使用引号强调一些大约为“移译”(参见《GEB-EGB》中文版前言)的语句。
UUID是128位的全局唯一标识符,通常由32字节的字符串表示。它可以保证时间和空间的唯一性,也称为GUID,全称为: UUID —— Universally Unique IDentifier Python 中叫 UUID GUID —— Globally Unique IDentifier C# 中叫 GUID 它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。
一般来说, 我们可以通过直接让URL指向一个位于Document Root下面的文件, 来引导用户下载文件. 但是, 这样做, 就没办法做一些统计, 权限检查, 等等的工作. 于是, 很多时候, 我们采用让PHP来做转发, 为用户提供文件下载.