IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

最新文章

采集自各技术站点的近期文章。

IT 后端/ 2014-11-24 23:38:39 / 累计浏览 1,000

在 Perl6 脚本中并发执行 ssh 命令

这篇讲的是作者在 Perl6 中并发执行 SSH 命令时的一次实战尝试。由于找不到合适的现有模块,且底层 C 库不兼容其 Kerberos 认证环境,作者决定绕开高层并发 API(如 Promise/Supply),直接使用更底层的 Thread 和 Channel 来实现。 文章围绕一个简洁的 OpenSSH 类展开,展示了如何通过多方法实现单个主机与多主机的命令执行。作者特别指出,虽然 Perl6 宣传了高级并发模型,但 API 迭代较快,有时选择更稳定的底层原语反而更可靠。 代码示例串联了不少 Perl6 语法点:类的属性定义、字符串连接符 `~`、用于捕获错误的 `try`/`CATCH`、执行系统命令的 `qqx{}`,以及 `>>` 操作符在数组上的线程化 finish 操作。作者也坦诚,示例代码较为简陋,例如依赖密钥登录且未使用线程池调度。 整体来看,这是一份结合了具体需求、实现思路与语法讲解的笔记,既分享了在 Perl6 中集成系统命令与并发控制的方法,也客观分析了语言特性在实际场景下的应用考量。

本机暂存
IT 安全/ 2014-11-24 23:37:41 / 累计浏览 4,925

Mac 锁屏的各种方法

从 Windows 转到 Mac 后,一个不起眼但让人头疼的问题浮现:找不到那个顺手的“Win+L”锁屏快捷键。作者从这个切身痛点出发,系统梳理了多种尝试方案,并分析了它们各自的“坑”。 像合上盖子或短按电源键,虽然常见,但它们实际触发的是“睡眠”而非“锁屏”,会导致网络断开、程序中断,与用户安全锁机的初衷相悖。设置触发角虽然可行,但容易误触,体验并不理想。文章详细对比了这两种主流方法的利弊。 最终,作者推荐了一个更可靠的方案:通过“钥匙串访问”在菜单栏添加一个锁形图标,点击即可立即锁定屏幕。这个方法直接、可控,避免了睡眠带来的副作用,也无需担心误操作,算是为 Mac 用户找到了一个安全又便捷的锁屏路径。

本机暂存
IT 数据库/ 2014-11-24 23:36:20 / 累计浏览 7,210

给 Kibana 实现百分比统计图表

这篇讲的是作者如何在一个下班前的冲动下,给 Kibana 3.1 手动添加 percentile 图表类型,以支持 Elasticsearch 的百分比统计功能,结果却挖出了一连串坑。 作者的初衷很直接:利用 Elasticsearch 1.1 新增的 percentile aggregation 来做更细致的日志区间分布分析,并认为这能作为学习 AngularJS 的练手项目。但实际动手后发现,计划中的“简单更新 JS 库”完全行不通。最大的坑在于 Kibana 3.1 内置的 elasticjs 库版本号标注混乱(写着 v1.1.1 实则是旧版),而新版的 elasticsearch.js 代码结构又彻底重构,不再适配 Kibana 使用的 requirejs 模块化方案。 在探索了替换整个库的复杂路径后,作者找到了一个更直接的解决方案:既然 Elasticsearch 是 RESTful 接口,那就绕过这些客户端库,直接用 AngularJS 的 $http 服务手动构建请求。不过,这个过程也撞上了 Elasticsearch 本身的限制——aggregation_name 字段不支持中文字符,迫使作者需要调整 Kibana 原有的别名生成逻辑。 最终,作者用这个看似“不太优雅”但确实有效的方法实现了功能。文章记录的这些具体踩坑细节,比如库版本号陷阱、模块加载冲突以及数据字段命名限制,对同样想在 Kibana 上做定制开发的人来说,都是很实际的参考。

本机暂存
IT 后端/ 2014-11-24 23:32:25 / 累计浏览 2,036

关于libmemcached中的crc的实现

这篇讲的是作者在尝试用PHP自定义实现memcached客户端时,遇到的一个具体问题:为保证与libmemcached行为一致,需要让PHP中的CRC32算法输出与C库相同。 作者发现,尽管基础算法相同,但PHP内置的`crc32()`函数与libmemcached中的实现存在关键差异。根本原因在于:PHP的`crc32()`返回的是一个32位有符号整数,而libmemcached实际使用的是该结果的高16位,并且忽略了符号位。这意味着简单的结果并不相等。 文章不仅点明了差异,还给出了两种在PHP中模拟libmemcached CRC32行为的方案。一种是利用位运算的高效实现(`(crc32('test')>>16)&0x7fff`),另一种是完整的查表算法模拟。作者通过对比指出,完整的PHP模拟实现(需要大量pack/unpack操作)比位运算方案慢约100倍,这为性能敏感的场景提供了重要参考。文末附上了C语言库的相关源码,便于对照理解。

本机暂存
IT 开发者/ 2014-11-24 23:30:23 / 累计浏览 5,796

如何编程实现 2 + 2 = 5?

这篇文章揭秘了一个看起来违反直觉的Java编程技巧:如何通过操作底层缓存,让2 + 2真的等于5。 作者从一个有趣的编程挑战出发,深入剖析了Java语言中一个不那么为人熟知的特性——整型实例池。我们都知道,Java会缓存-128到127之间的Integer对象,以优化性能。但文章的关键在于,它不仅介绍了这个概念,更展示了如何通过反射机制“入侵”这个缓存。 核心实现是通过反射获取`Integer`类内部的缓存数组,并直接修改数组中本应指向数字4(索引132)的引用,让它指向数字5的实例对象。这样,当程序后续再请求整数值4时,JVM会从被篡改的缓存中返回一个值为5的对象,从而使得简单的`2 + 2`输出变成了5。 这种操作虽然危险,但非常直观地揭示了Java对象引用机制和缓存设计的底层细节。文章提供的代码示例清晰地演示了这一过程,既是一个有趣的技术彩蛋,也提醒了开发者随意修改核心类内部状态可能带来的风险。

本机暂存
IT DevOps/ 2014-11-23 21:47:21 / 累计浏览 3,804

修改Linux网卡连接速度

这篇讲的是作者如何发现并解决内网Linux服务器上传速度异常缓慢的问题。服务器文件传输速度只有1MB/s,作者怀疑是网卡工作模式所致。通过 `ethtool eth0` 命令检查,果然发现网卡速度被锁定在了10Mb/s的低速模式,即使它支持100Mb/s。 针对这个问题,作者使用了 `ethtool -s eth0 speed 100 duplex full` 命令,将网卡强制设定为100Mb/s全双工模式。调整后再次检查,网卡已成功切换到新的工作状态。最终实测文件传输速度达到了10MB/s,性能恢复正常。 这篇文章简洁清晰地展示了一个常见的网络性能问题排查过程:从现象(速度慢)到诊断(查网卡模式),再到解决(调整速率参数),并验证了效果。对于运维人员或遇到类似网络瓶颈的开发者,这个用 `ethtool` 手动调整链路参数的方法,是一个直接有效的参考方案。

本机暂存
IT 后端/ 2014-11-23 21:44:44 / 累计浏览 7,387

分布式系统的事务处理

这篇文章从单服务器的性能瓶颈和单点故障问题出发,探讨了分布式系统为提升可用性而采用数据分区或数据镜像后,如何处理跨服务器事务这一核心难题。 作者以经典的“转账”场景为例,清晰地阐述了数据冗余带来的双刃剑效应:高可用性必然导致数据一致性挑战,而保证一致性又可能牺牲性能。文章并未给出单一解法,而是梳理了业界应对这一问题的几种关键思路。首先介绍了弱、最终和强三种一致性模型及其典型应用场景。接着,深入分析了主从(Master-Slave)、多主(Master-Master)这两种常见架构在数据同步上的权衡,特别是强一致性实现的复杂性。最后,重点剖析了分布式事务处理的经典协议——两阶段提交(2PC)及其演进版三阶段提交(3PC),解释了它们的工作原理、核心优势(如强一致性保证)以及可能引发的阻塞风险。 全文在容灾、一致性、性能这个“铁三角”关系中展开,为理解分布式系统的设计哲学与工程取舍提供了扎实的技术脉络。

本机暂存
IT DevOps/ 2014-11-23 21:43:10 / 累计浏览 2,334

给Ubuntu添加Windows及Mac字体

这篇教程针对 Ubuntu 系统因开源授权而缺失部分优质字体的问题,提供了一个将 Windows 与 Mac 字体移植过来的完整方案。作者从实际需求出发,详细讲解了从字体文件的准备、筛选(提示需移除 .fon 与部分 .otf 格式),到创建系统目录、复制文件、修改权限,最后执行命令更新字体缓存的全过程。文章特别给出了每一步对应的终端命令,比如 `sudo mkdir`、`sudo cp` 和 `sudo fc-cache`,确保用户可以精准操作。完成这些步骤并注销系统后,即可在 Ubuntu 环境中流畅使用这些跨平台字体。整个方案直击痛点,步骤清晰,对于希望提升 Ubuntu 桌面视觉体验的用户来说非常实用。

本机暂存
IT 后端/ 2014-11-23 21:42:10 / 累计浏览 2,509

Curl的毫秒超时的一个”Bug”

这篇讲的是作者在升级PHP使用的libcurl后遇到的诡异问题:明明设置了毫秒级超时,curl却直接返回错误而不发起请求。 问题根源在于Linux下curl默认使用SIGALRM信号来控制域名解析超时,而这个信号的精度只到秒。源码里可以看到,一旦超时值小于1000ms,函数就直接返回超时,根本不去尝试解析。这其实是一个设计上的缺陷,虽然提供了毫秒超时的接口,底层机制却无法支持。 解决方法出人意料地简单:在请求中设置CURLOPT_NOSIGNAL选项。这个选项会让curl绕过基于信号的超时控制机制,从而让毫秒超时真正生效。文章通过源码定位和Stack Overflow的参考,完整呈现了从发现问题、分析原因到最终解决的全过程,对遇到类似超时问题的开发者很有参考价值。

本机暂存
IT 设计/ 2014-11-23 21:39:12 / 累计浏览 1,946

什么是可用性测试?

这篇文章澄清了一个在用户体验领域常被混淆的概念:什么是真正的可用性测试。作者从《Handbook of Usability Testing》中提炼,明确区分了可用性测试与启发式评估、任务走查等方法——核心在于必须招募有代表性的目标用户进行实操评估。 文章深入探讨了测试的双重目的:一方面是“信息化设计”,确保产品在发布前具备易学、高效、令人满意等特性;另一方面则是直接消除用户挫败感,从而为企业建立口碑、降低支持成本、提升市场竞争力。作者指出,尽管经典实验法要求严格的假设、随机分组和大样本,但在快节奏的产品开发中,更实用的是相对非正式但同样严格的迭代式测试。 这种测试聚焦于发现具体的可用性缺陷并驱动改进,而非单纯验证假设。当然,文章也坦诚讨论了其局限性:实验室环境无法完全模拟真实场景,测试结果不能百分百保证产品成功,且参与者也难以完全代表所有用户。这些清醒的认知让方法论显得更为扎实。

本机暂存
IT 后端/ 2014-11-23 21:37:17 / 累计浏览 1,810

编程珠玑番外篇之番外篇-O 中间语言和虚拟机漫谈

这篇讲的是中间语言与虚拟机如何悄然重塑编程语言设计的底层逻辑。作者从编程语言的历史演进出发,指出近十年来的一个关键变革:编译器不再直接生成CPU指令,而是瞄准中间语言或虚拟机指令集。这种“解耦”让语言设计者摆脱了具体硬件的束缚,催生了语言井喷的时代。 文章深入剖析了两种主流虚拟机架构的对比:基于栈的虚拟机(如JVM、TrueType字体引擎)结构简单、代码体积小,天然适合资源受限的嵌入式系统;而基于寄存器的虚拟机(如Android Dalvik、LLVM)通过直接映射寄存器减少了数据拷贝,为性能优化打开了大门。作者还以JavaScript引擎从TraceMonkey到V8的演进为例,说明了JIT技术如何通过运行时热点优化弥补中间层的性能损失,甚至催生了绕过中间层直接编译本地代码的新路径。 从TrueType字体中的虚拟机到Android从Dalvik转向ART,文章揭示了虚拟机技术如何在跨平台、安全性与执行效率之间不断寻找新的平衡点。

本机暂存
IT DevOps/ 2014-11-23 21:35:24 / 累计浏览 1,638

监控Netstat中的TCP数据

作者从实际运维中遇到的netstat报错说起:当执行netstat命令时,若版本较旧可能触发“error parsing /proc/net/netstat”错误。解决方法是通过rpm确认netstat属于net-tools包,随后用yum升级即可修复。不过,文章的重点不止于故障排查,更延伸到如何有效监控TCP连接数据。 作者指出,直接监控netstat -s输出的绝对值(如连接数、段收发量)在Graphite等工具中几乎是一条平直线——因为数值基数太大,微小波动肉眼无法识别。真正有价值的是捕捉这些数据的相对变化率。为此,他分享了一段可直接运行的Shell脚本,通过循环对比相邻时刻的TCP统计值,实时输出增量数据,让监控图表清晰反映系统的动态趋势。 这篇文章从一个具体错误入手,最终给出了提升监控有效性的实用技巧,对需要关注TCP连接状态的运维人员颇具参考价值。

本机暂存
IT 开发者/ 2014-11-23 21:33:03 / 累计浏览 2,394

小心 int 乘法溢出!

这篇讲的是 C/C++ 编程中一个隐蔽却危害巨大的陷阱:32 位 `int` 类型在进行乘法运算时可能发生的溢出问题。作者从一个实际场景切入——试图用 `malloc()` 分配 3000MB 内存时,代码 `mb * 1024 * 1024` 由于 `int` 只有 32 位,其计算结果早已溢出为负值 `-1073741824`。这个负值作为 `size_t`(64位系统中是64位无符号整数)参数传入 `malloc`,会被解释成一个天文数字(约 1844 亿亿),导致分配请求远超预期,引发程序崩溃或内存损坏。 文章特别点明,这种错误非常具有迷惑性,因为无论操作系统是 32 位还是 64 位,`int` 通常是 32 位的。作者以亲身在 SSDB 项目中多次踩坑的经历作为佐证,强调了问题的普遍性与现实危害。核心告诫在于:当运算结果可能超出 `int` 范围,尤其是作为内存大小等参数时,必须显式地进行类型转换或选用合适的数据类型(如 `size_t`),以确保计算的正确性与安全性。对于处理大数据的系统开发者而言,这是个值得时刻警惕的细节。

本机暂存
IT 前端/ 2014-11-23 21:32:12 / 累计浏览 3,044

网页速度是如何影响转化率的

对于电商网站,性能优化对转化率的影响有多大?这篇文章用扎实的研究数据给出了清晰答案。它引用了国外研究机构的成果,核心发现是:网页加载速度每增加1秒,转化率可能就下降7%。文章展示了一张信息图,详细拆解了从页面加载到用户流失的各个环节,说明速度直接决定了用户是否愿意继续浏览、下单。 作者指出,很多人重视性能优化,但常常低估其直接的商业价值。速度不仅影响转化率,还关联着用户体验、运营成本乃至品牌形象。优化是一个系统性工程,但文章聚焦于最有力的证据——转化率,让技术投入的价值变得一目了然。对于开发者和产品经理来说,这份基于数据的分析,是说服团队重视性能优化的有力参考。

本机暂存
IT 设计/ 2014-11-23 21:21:08 / 累计浏览 3,756

通过设计让APP变快的6个方法

这篇讲的是,当程序员们忙于代码优化时,设计师如何通过一些巧妙的交互设计,让APP在用户感知上“跑”得更快。 文章从几个常见的用户痛点切入,指出响应速度不仅是技术问题,更是设计问题。作者提出了六种具体的设计策略:例如,让耗时操作在后台静默执行,而不是用进度条“绑架”用户;在数据尚未完全加载时,先显示本地缓存或框架性内容,制造“已载入大半”的心理错觉;在用户点击前就预判其意图并提前加载数据,就像微信消息在点击发送后立即出现在对话框里,而网络传输在后台完成。 这些方法都旨在优化用户的心智模型,减少等待感。文章还指出了设计的边界,比如预加载不能影响系统性能,缓存也要控制大小以免占用过多空间。通过分析淘宝、微博、云阅读等产品的实例,文章清晰地展示了如何将“界面先行,网络随后”的原则落地,让流畅的体验掩盖了必要的网络延迟。

本机暂存
IT 设计/ 2014-11-23 21:18:17 / 累计浏览 4,226

Wi-Fi 是什么的缩写

这篇讲的是一个许多人深信不疑的“常识”——Wi-Fi是Wireless Fidelity的缩写——其实是如何被制造并流传开来的。 作者从一次与客户的对话出发,引出了这个疑问。文章考证了Wi-Fi一词的真正起源:它并非来自Wireless Fidelity的缩写,而是1999年品牌咨询公司Interbrand为了便于推广IEEE 802.11无线网络技术,而创造出的一个朗朗上口的名字,灵感确实借鉴了高保真(hi-fi)的命名结构。 那么Wireless Fidelity这个广为流传的“全称”从何而来?文章揭示了这其实源于Wi-Fi联盟自身的一个失误。在命名初期,联盟的部分成员无法接受一个生造词没有含义,于是在早期推广中附加了“Standards for Wireless Fidelity”的错误标语,尽管不久后便撤下,但误解已然扩散,甚至形成了将“Wi-Fi”逆向扩展为词组的文字游戏(Backronym)。 文章最后以几个有趣的冷知识结尾,比如Wi-Fi的标准写法,以及它在最初竞标中并非最高票方案。作者借此点出,学习这类知识并非为了实用,其魅力纯粹在于趣味和祛魅。

本机暂存
IT 开发者/ 2014-11-23 21:17:05 / 累计浏览 2,458

和 geek 男谈恋爱的好处若干

这篇讲的是作者从观察身边geek男友出发,总结和这类“技术宅”恋爱的独特体验。文章以Geek Pride Day为契机,为之前一篇《和geek女谈恋爱的好处》写了姊妹篇,核心在于揭示geek男那些常被忽视的浪漫特质与恋爱优势。 作者提炼出五个具体亮点:他们对待热爱之事全情投入的专注极具魅力,恋爱中会将这份执着转移给你;他们追求独特的“极客式浪漫”,比如用代码或技术手段准备耗费心力的惊喜礼物;他们像“行走的谷歌”,拥有海量知识并总能执着地找出答案,成为伴侣身边的百科全书;他们内心往往简单纯粹,像孩子般容易满足,也像“小计算机程序”一样反应可预测;此外,他们还会用高精尖设备和DIY精神,共同打造一个充满智能元素的完美家。 文章最后也以FAQ形式幽默地回应了常见顾虑,指出geek男其实本质也是需要理解与呵护的普通男人,而他们的高智商与深情有时恰恰需要一颗温暖的心去呵护。整体而言,这篇文章并非单纯“安利”,而是透过技术爱好者的外壳,呈现其背后真实、可爱且值得珍惜的人格切面。

本机暂存
IT 后端/ 2014-11-23 21:10:09 / 累计浏览 2,976

对爬虫的限制

这篇讲的是开发者在资源受限的云平台上,如何应对爬虫造成的流量激增问题。作者起初将文件迁移到七牛云存储后,发现一天就消耗了2GB流量,远超预期。分析SAE应用日志后发现,大量请求来自搜索引擎爬虫。 为了解决这个问题,作者采取了一系列递进式的应对措施。首先用robots.txt屏蔽了如AhrefsBot、Ezooms等国外爬虫。在robots规则生效前,通过SAE的应用防火墙直接屏蔽具体IP地址,或者更高效地封禁整个IP段。此外,还利用config.yaml的配置,实现了对特定目录的访问控制,并将未遵守规则的爬虫引导至robots.txt。对于单个PHP文件,则编写了简单的代码检测User-Agent并返回空白页。 最终,这些措施有效遏制了爬虫对服务器资源的过度消耗,文章末尾的SAE输出流量图也直观展示了问题解决后的平稳状态。整个过程体现了从问题发现、日志分析到多手段综合处置的典型排查思路。

本机暂存
IT 算法/ 2014-11-23 21:08:37 / 累计浏览 1,790

纯属偶然——我和正则表达式的缘份

这篇讲的是作者如何因一系列偶然,与正则表达式结下不解之缘。他从一个毫无项目经验的职场新人说起,接到从HTML抓取信息的任务后束手无策,直到项目经理点拨“查查正则表达式”,才在那个周五下午找到了解题的钥匙。 从偶然使用到主动深入,他通读了《精通正则表达式》,又因一次偶然机会获得了翻译此书的宝贵机会。作者反思,这背后是大学时练习的翻译技能、热心前辈的指点、公司提供的实践任务以及善用Google的自学能力共同作用的结果。 文章最终指向一个朴素的思考:他认为真正的“价值”在于掌握自己认定的重要工具与技能,并在生活中不断运用智慧。就像计算机科学中用更优算法解决复杂问题一样,在一切事务上施展智慧,才是他所认定的价值所在。这段技术与个人成长交织的经历,或许能给初入行或正感到迷茫的技术人一些共鸣与启发。

本机暂存
IT 设计/ 2014-11-23 21:07:41 / 累计浏览 2,716

打造舒适的阅读空间—云阅读iPad3.0设计总结交互篇

这篇讲的是网易云阅读iPad 3.0版本在交互设计层面的完整迭代过程,核心目标是在大屏设备上打造一个“舒适、实用、有感觉”的沉浸式阅读空间。 项目面临的首要挑战是如何将手机端已成熟的云端同步、阅读圈等功能整合进iPad,并优化其信息架构。作者引入了“心流”设计理念,以“有用、可用、有氛围”为原则,试图平衡用户的情绪与注意力。设计团队对首页信息架构进行了深入探索,尝试了竖导航、分屏平铺等多种方案,最终选择了顶部Tab切换的扁平化结构,使首页更像一个纯粹的信息容器。 阅读圈作为连接内容与人的新功能,其信息流设计避免了单列表内容少和瀑布流视线跳跃的问题,采用了规则的卡片化布局。通过对不同分享内容定义显示优先级,确保了界面在内容变化时外观的稳定与视觉流的顺畅。此外,文章还详细介绍了对“本地书上传同步”任务流程的简化与细化,以及如何通过动效设计落实情感化体验。 整体而言,这篇总结不仅展示了具体的设计方案,更分享了从理念到细节的完整思考路径,体现了对iPad大屏交互特性的深入洞察。

本机暂存