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

最新文章

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

IT 数据库/ 2014-12-03 23:58:46 / 累计浏览 2,206

Pora2应用中HBase高并发读写性能优化

这篇讲的是淘宝搜索的Pora2实时分析系统在大量使用HBase进行高并发读写时,所遇到的一系列性能“坑”及优化实践。系统上线后出现处理延迟、集群压力大的问题,排查发现根源主要在于HBase的使用方式。 文章拆解了几个典型案例:一是HBase默认的Periodic Flusher机制引发了过于频繁的flush与compact,通过调整其超时阈值得到了缓解;二是下游消费消息队列时未控制Scan频率,对Region Server造成了无谓压力;三是在超大并发下,过多的客户端连接耗尽了服务端Handler,作者的解决方案是减少进程数、增加线程数以复用连接。 此外,还涉及了因rowkey生成代码bug导致的数据访问热点,以及Bulk Load数据未做Major Compaction引起的读取性能衰减。文章最后总结道,高并发场景下必须合理使用HBase,避免不当操作形成“越慢越压、越压越慢”的恶性循环。这些从实战中沉淀的细节,对同类系统的设计与调优很有参考价值。

本机暂存
IT 前端/ 2014-12-03 23:58:01 / 累计浏览 1,693

自定义元素–为你的HTML代码定义新元素

这篇讲的是HTML标准中一个充满潜力的实验性功能——自定义元素。文章从当前Web应用中大量使用无语义的`

`标签、代码可读性差的痛点切入,指出开发者其实可以像使用`
`一样,去定义诸如``这样具有明确业务含义的新标签。 作者展示了自定义元素如何让HTML标记变得更清晰、更易维护。通过一个类似Gmail聊天界面的示例,代码从一堆`
`变成了结构一目了然的``、``,直观体现了这个特性对提升代码可读性的价值。文章也具体说明了自定义元素能带来的核心能力,包括创建新元素、扩展已有元素并绑定功能等,并提及了使用`document.registerElement`进行注册的基本方法。 不过,文章开头也着重提醒,该API尚未完全标准化,仍在变动中,在实际项目中采用时需格外谨慎。整体而言,这是一篇对Web Components这项面向未来的前端技术进行早期探索与介绍的文章。

本机暂存
IT 开发者/ 2014-12-03 23:54:07 / 累计浏览 6,881

无插件Vim编程技巧

这篇讲的是如何在不安装任何插件的前提下,充分利用 Vim 7.2 原生功能来提升编程效率。作者从解决“多文件管理与导航”这个日常痛点出发,详细分享了他的一系列实战技巧。 文章首先介绍了用 `:E` 命令直接浏览文件目录,并使用 `j/k` 键导航,告别在多个终端窗口间来回切换的低效方式。接着,深入讲解了“缓冲区”这一核心概念:通过 `:ls` 查看所有已打开文件,并用 `:buffer` 命令及其缩写在不同文件间快速跳转。 对于需要并排对比代码的场景,作者推荐了使用 `:He` 和 `:Ve` 命令进行分屏浏览目录的技巧,并配合 `Ctrl+W` 组合键在分屏间灵活切换。更进阶的玩法是,用 `:set scb` 命令能实现两个分屏窗口的同步滚动,非常适合代码对比。 除了分屏,文章还介绍了用 `:Te` 命令开启类似浏览器的标签页浏览,并使用 `gt` / `gT` 等快捷键在多个标签页之间切换。最后,作者分享了如何用 `:mksession` 命令保存当前的窗口布局和文件状态,以便下次用 `vim -S` 一键恢复工作环境。 整篇文章没有泛泛而谈,而是将每个功能点都落实到具体命令和操作界面,真正展示了 Vim 强大的内建能力。掌握这些原生技巧,能让你在不依赖插件的情况下,把 Vim 的多文件工作环境打理得更顺手。

本机暂存
IT 前端/ 2014-12-03 23:51:47 / 累计浏览 2,468

JavaScript中双叹号(!!)作用

这篇讲的是 JavaScript 中一个常见但常被误解的操作符:双叹号(!!)。作者从日常编码中“var b = !!a;”这样的片段出发,解释了它的核心作用——将任何表达式强制转换为布尔值(true 或 false)。 文章不仅解释了 !! 如何通过两次逻辑取反来实现转换(第一次转为布尔值取反,第二次再反转回来),更深入地剖析了 JavaScript 的布尔转换规则。它对比了显式转换(如 parseInt、toString)和隐式转换(利用算术运算符或连接符),并明确了哪些值会被视为 false(如 false、undefined、null、0、""),哪些为 true。 通过 undefined 和 null 的具体示例,文章展示了 !! 的实用价值:它能清晰地将“未定义”或“空”状态归为 false,而将实际有值(哪怕是对象)的变量归为 true,为后续的条件判断提供了稳定、明确的依据。这本质上是对 JavaScript 弱类型特性的一种优雅应对。理解了这一点,开发者就能更自信地使用这种简写语法,编写出更简洁可靠的布尔判断逻辑。

本机暂存
IT DevOps/ 2014-12-03 23:49:16 / 累计浏览 1,355

LINUX VPS主机之间快速复制备份搬家

很多站长和开发者都遇到过这样的场景:买了新VPS,或者需要为旧站点创建备份,怎么高效地把网站数据从一台Linux服务器“搬”到另一台?这篇文章就专门解决这个痛点,给出了几种在VPS之间快速迁移目录的实战方案。 文章重点剖析了两种主流方法。第一种是“边打包边传输边解压”的流式处理,一条`tar | ssh | tar`命令就能完成,无需在源服务器生成中间压缩包,适合追求极致效率的运维场景。第二种是更直观的`scp -r`命令,它支持目录递归复制并能看到传输进度,对新手更为友好。作者还补充了用SCP远程解压、以及用WGET传输的变体思路。 文章的核心价值在于,它没有停留在命令罗列,而是指出了关键差异:两者耗时相近,但体验不同。tar管道方式隐蔽高效但无进度反馈,SCP则过程透明。读者可以根据自己对操作可视化和脚本化的需求来灵活选择,为服务器数据迁移提供了实用的运维工具箱。

本机暂存
IT 开发者/ 2014-12-03 00:05:01 / 累计浏览 6,053

等宽字体:程序员的字体

这篇文章汇集了程序员编码和阅读代码时的“利器”——等宽字体。由于字符宽度统一,这类字体能带来工整的视觉排布,有效减轻长时间阅读代码的疲劳感,甚至对强迫症患者也相当友好。 作者从实用性出发,一口气列举了二十款常见的等宽字体,并附上了直观的字符效果预览图。这些字体风格各异,从经典稳重的 Courier New、Consolas,到设计现代的 Source Code Pro、Inconsolata,再到颇具个性的像素字体 Telegrama,几乎涵盖了主流选择。文章最后还给出了作者的个人偏好,认为视觉效果出众的有 Courier New、DialogInput 等几款。 对于正在寻找或更换编程字体的开发者来说,这篇文章提供了一个清晰的起点和直接的视觉参考,末尾附上的字体资源包也相当实用。

本机暂存
IT 后端/ 2014-12-03 00:03:18 / 累计浏览 4,651

Trackback,Pingback及XML-RPC

在博客技术中,评论区的互动方式不止“普通评论”一种。这篇讲的是Trackback与Pingback这两种经典的引用通知机制——它们如何让博客文章之间能够“对话”。 文章开门见山,对比了两者:Trackback更像是个“手动挡”,源于早期博客系统,需要作者在自己的文章发布后,手工将链接和摘要以HTTP POST请求发送给目标文章。而Pingback则是一次全面升级,它是“自动挡”。当你在文章中插入其他博客的链接并发布后,Pingback机制会基于XML-RPC协议,自动发现这些链接并向对方服务器发送通知。 作者清晰地列出了核心差异:Pingback使用的是更现代的XML-RPC协议,而Trackback用的是HTTP POST;最关键的是Pingback的全自动发现与通知,无需手动操作。此外,Pingback提取的是链接周边的文字作为摘要,Trackback则需完全手写。 文章不止于对比,还进一步探讨了Pingback机制的潜在应用场景,比如用于跟踪页面引用的脚本和CSS版本。最后,作者简要勾勒了实现Pingback服务端与客户端的核心步骤,从解析请求、抓取页面内容到生成评论,为想动手实践的开发者提供了清晰的思路图谱。

本机暂存
IT DevOps/ 2014-12-03 00:02:03 / 累计浏览 2,257

/var/spool/clientmqueue目录文件清理

这篇讲的是服务器磁盘空间告急时,如何清理那个让管理员头疼的 /var/spool/clientmqueue 目录。 作者从一次服务器/var分区占用率飙升至90%的排查经历说起,定位到罪魁祸首正是clientmqueue这个邮件队列目录。文章的痛点很明确:当文件多到一定程度时,常规的 `rm` 命令会因“Argument list too long”错误而失灵。 解决方法很巧妙,利用了管道的力量。文章给出了两种场景的清理命令:有权限时用 `ls | xargs rm -f`,需sudo时则用 `find ... | xargs rm -f`。不过,真正的价值不止于清理。作者还深入解释了根因:这些“垃圾文件”其实是cron任务的标准输出,在sendmail未启动的情况下被默认保存为了邮件。最治本的方案是在crontab任务中直接添加输出重定向,从源头杜绝此类问题。 整个过程从发现问题、遭遇报错,到找到方法并深挖原理,是一套完整的技术踩坑与排障指南。

本机暂存
IT 设计/ 2014-12-03 00:00:27 / 累计浏览 3,753

跨终端设计模式

这篇文章聚焦于数字设备爆发式增长的2011-2012年,从终端屏幕尺寸的维度,系统梳理了跨终端的设计模式。作者将当时市场上的数字产品划分为四大类别,并逐一分析了其生态与设计特点。 首先是智能手机,Android的开放催生了激烈的市场竞争,屏幕尺寸从4寸到5.5寸百花齐放,设计重点在于如何适配多样化的单手操作场景。其次是平板电脑,以iPad为首的设备占据了客厅和移动场景,其更大的屏幕带来了与手机完全不同的信息密度和交互逻辑。第三类是PC与笔记本,随着“超级本”概念和Windows 8的推出,传统电脑开始融合触摸交互,设计上呈现出平板与电脑的融合趋势。最后是智能电视与机顶盒,这类大屏设备引入了体感、手势等远场交互方式,开启了客厅娱乐的新体验。 这篇文章的价值在于,它并非泛泛而谈,而是紧扣当时具体的硬件产品和市场数据(如国内安卓手机季度出货量),为我们勾勒出一幅清晰的“设备-屏幕-交互”演进地图,对理解响应式设计、自适应布局等跨端策略的历史背景很有帮助。

本机暂存
IT 移动开发/ 2014-12-02 23:54:30 / 累计浏览 2,541

由「手机拍照」说开去

这篇讲的是作者从自身摄影产品的工作体验出发,重新梳理了「手机拍照」这一日常行为背后的动机与生态。文章认为,手机摄像头的演进,让影像记录从专业行为彻底融入了大众生活。 作者剖析了手机拍照的四种核心行为动机:为留住瞬间的“记录”、为社交展示的“分享与攀比”、受环境影响的“从众”,以及填补空闲的“娱乐”。其中特别分析了“自拍”风潮背后,个体(尤其是女性)对自我形象的关注与展示。 基于这些动机,文章勾勒出一条完整的移动拍照产品线:从拍照工具、图片处理到社区分享。作者指出,工具类应用(如美图秀秀、Camera360)需不断垂直化创新,而社区产品(如Instagram)则因同质化严重,需找到独特的切入点并解决粘性与增长难题。文章最后也触及了该生态在盈利模式上的普遍困境与探索。

本机暂存
IT DevOps/ 2014-12-02 23:53:27 / 累计浏览 1,468

Puppet 的类参数传递

这篇讲的是如何通过为类添加参数来提升 Puppet 配置的灵活性。作者从使用 ENC(外部节点分类器)管理 Puppet 的实践出发,发现仅传递一个全局的 role 参数在面对频繁修改的配置时,操作起来并不方便。 因此,他考虑引入类参数。文章通过修改前后的代码对比,清晰地展示了这一转变:将原本硬编码在 `nginx::loadbalancer` 子类中的 `iplist` 变量,提升为父类 `nginx` 的一个参数,并逐层传递下去。这样在 ENC 中,就可以直接为 `nginx` 类指定 `iplist` 的值,实现了配置的灵活注入。 文章还总结了三个关键要点: ENC 传递的参数值需要从父类层层传递到真正使用的子类;在 ENC 中为类传参时,类声明必须采用哈希形式;而接受参数的类在调用时,则必须使用资源声明式的语法,而不能再使用 `include`。这个方法巧妙地利用了 Puppet 的类继承和参数特性,在保持 ENC 输出结构相对简洁的同时,显著提高了配置管理的灵活性。

本机暂存
IT 设计/ 2014-12-02 23:52:34 / 累计浏览 3,208

关于用户体验的三个反思

这篇讲的是对用户体验常见误区的深度反思,起因是作者在微博上发起的一个讨论:“一个产品没用,体验再好用户也不会去用”,这句话对吗?作者认为这种说法混淆了“可用性”和“用户体验”两个概念。 文章首先澄清,用户体验是一个贯穿用户接触产品全过程的全方位感受,远不止UI的易用性。作者用高速公路和盘山公路做比喻,说明可用性高不等于体验好。接着,文章探讨了用户体验与产品价值的关系:有用性是基础,可用性是要求,吸引力才是期望。以12306和51job为例,它们的界面可用性虽差,但因其独特的产品有用性和吸引力,依然是有价值的产品。最后,作者从组织架构的角度提出反思,认为将“产品设计”和“用户体验设计”割裂开会导致效率低下,更合理的分工是“产品管理(PM)+用户体验设计(UXD)”,二者应为共同的产品成功目标而紧密协作。 作者的核心观点是,用户体验并非锦上添花的“美化”工作,而是从产品构思之初就应贯穿始终的设计思维。文章提醒从业者,要警惕将用户体验窄化为“改界面”的误区,真正从用户全流程和组织协同的角度去思考和实践。

本机暂存
IT 后端/ 2014-12-02 23:50:19 / 累计浏览 1,934

使用 Mojolicious 写非阻塞的应用: Part 2

这篇讲的是用 Mojolicious 实现非阻塞 Perl Web 应用的进阶技巧,核心解决的是“异步任务编排”的痛点。作者从一个实际场景出发:需要同时抓取多个外部网站并提取标题。 文章首先展示了两个常见的“错误”范式。第一个是单个非阻塞请求,虽然不阻塞服务器,但只能处理一件事。第二个是串行嵌套回调,虽然能处理多个请求,但带来了“回调地狱”,且请求之间仍然是顺序阻塞的,无法真正并行处理,代码可读性和扩展性都很差。 真正的解决方案是引入了 `Mojo::IOLoop::Delay` 这个对象。它的核心思想是将一系列非阻塞操作的依赖关系显式化,通过 `begin` 和 `steps` 方法来定义任务的执行顺序和数据传递。这彻底摆脱了回调嵌套,让开发者可以像写同步代码一样清晰地组织异步流程,同时保持了服务器的高并发能力——所有网络请求几乎可以同时发出,只在需要结果时才等待。 作者通过具体的代码对比,清晰地揭示了从原始回调到结构化异步编程的演进路径,展示了如何利用框架特性写出既高效又易维护的非阻塞代码。

本机暂存
IT 后端/ 2014-12-02 23:48:25 / 累计浏览 2,095

使用 Mojolicious 写非阻塞的应用: Part 1

这篇讲的是Mojolicious这个Perl Web框架的核心设计理念。作者从“为什么选择Mojolicious”这个常见问题切入,指出其最根本的区别在于从诞生之初就为非阻塞而设计,这让它区别于其他大多数Perl框架。 为了具体说明,文章先展示了Mojolicious简洁高效的模板技术,随后构建了一个连接MongoDB的粘贴应用。作者特意先用开发者更熟悉的阻塞式写法实现,这时所有客户端请求会排队等待数据库操作完成,导致服务器资源利用率低下。这自然引出了阻塞模型的性能瓶颈——单个慢请求会阻塞整个处理流程。 文章的核心在于揭示,当应用切换到Mojolicious的非阻塞模式后,情况将发生质变。服务器可以并发处理多个请求,不会因单个数据库查询而停顿,从而用更少的硬件资源支撑更高的并发量。这对于构建快速、轻量且可扩展的现代Web应用至关重要。

本机暂存
IT 前端/ 2014-12-02 23:41:12 / 累计浏览 6,709

[译]Google Chrome中的高性能网络

这篇讲的是,即便在拥有V8引擎和WebKit渲染这两大“加速器”的今天,Chrome为何仍将网络性能优化视为重中之重。文章从一个核心矛盾出发:现代网页平均加载1280KB数据、88个资源,并分散在15个以上的主机上,这些短促而爆发的请求与TCP针对大文件传输的设计初衷并不匹配。 作者深入剖析了Chrome的多进程网络架构,并将一个资源请求从诞生到完成的生命周期拆解开来。你会看到,浏览器在发出请求前是如何绞尽脑汁复用已有连接、检查DNS缓存,甚至预判网站拓扑进行预先连接的。文章强调,如果网络不畅,所有前端优化都将事倍功半,因此Chrome网络模块的许多努力(如智能缓存、连接池管理)其实都发生在用户察觉不到的幕后。 它为前端和浏览器开发者提供了一个清晰的视角,理解浏览器这个“平台”是如何在底层与网络延迟和复杂度对抗的,最终目标就是让那些“巧妇难为无米之炊”的等待时间无限趋近于零。

本机暂存
IT 移动开发/ 2014-12-02 23:39:25 / 累计浏览 6,561

实时监控Android设备网络封包

这篇讲的是如何让Android设备的网络抓包变得像直接在电脑上用Wireshark一样实时。作者从传统流程(先用tcpdump抓包存文件,再传回PC分析)的繁琐出发,提出了一种更高效的方案。 核心原理很巧妙:利用tcpdump生成标准libpcap格式数据,通过管道实时重定向到一个网络端口,然后在电脑端用netcat工具接收数据流,最终直接喂给Wireshark进行解析。整个过程只需在设备上执行一条包含tcpdump和netcat的指令,并在主机上设置端口转发和Wireshark读取命令即可完成。 文章具体给出了关键命令,包括需要root权限执行的部分,以及对端口设置的提醒。对于不同系统(如Mac)可能需要的额外权限(sudo)也有提及。这种方法实现了近乎实时的网络流量监控,省去了文件中转的步骤,为Android网络调试提供了更直接、高效的工具链思路。

本机暂存
IT 移动开发/ 2014-12-02 23:38:18 / 累计浏览 1,480

高性能Android Canvas游戏开发

这篇讲的是如何在Android平台的移动浏览器上,为Canvas游戏开发榨取极致渲染性能。文章核心观点是:性能优化的关键,在于理解并利用Android Canvas独特的硬件加速机制——它与iOS的实现原理有根本区别。 作者首先点明,移动设备性能往往只有桌面端的十分之一,优化至关重要。但直接套用iOS的优化方案(如大量使用Off-Screen Canvas进行缓存)在Android上会适得其反。原因在于,iOS依赖IOSurface进行高效的GPU位拷贝,而Android的硬件加速Canvas底层是一个GL Texture,频繁创建多个小Canvas会造成显存碎片化,且GPU上下文切换开销巨大。 因此,文章提出了明确的优化规则:第一,必须针对Android而非iOS的机制进行优化;第二,保持网页DOM树尽可能简单,以将系统资源更多留给Canvas渲染。这些规则均建立在对底层渲染架构差异的深刻剖析之上,为开发者提供了具体、可操作的高性能Android Canvas游戏开发指南。

本机暂存
IT 移动开发/ 2014-12-02 23:37:05 / 累计浏览 4,948

iOS push服务

这篇文章详细拆解了iOS推送服务的完整工作流程。作者从Provider、APNS和iPhone的三阶段交互模型入手,清晰阐述了Push通知如何从应用服务器最终抵达用户设备。 内容涵盖了从原理到实践的关键环节:包括如何将苹果的SSL证书与私钥文件,通过OpenSSL命令转换为适用于Java、PHP等服务端环境的PEM或P12格式;客户端注册推送、获取DeviceToken并处理通知的Objective-C代码示例;以及JSON格式Notification Payload的构成,明确了alert、badge、sound等字段的用法与字节限制。 文章还特别区分了开发与发布证书的用途,并附上了多种语言服务端实现的参考链接,最后简要提及了本地通知的创建方法,为开发者提供了一套从配置到实现的完整参考。

本机暂存
IT 移动开发/ 2014-12-02 23:35:57 / 累计浏览 3,791

iOS设备唯一标识获取策略

这篇讲的是iOS开发中如何可靠地获取设备唯一标识。作者从苹果在iOS 7中开始屏蔽MAC地址(返回固定值02:00:00:00:00:00)这一背景出发,系统梳理了开发者曾用过的和现行的各种方案。 文章对比了UDID(已被苹果禁用)、UUID(会随App卸载而改变)、OPEN UDID(依赖其他应用存在)、以及苹果官方推荐的广告标示符IDFA(可被用户重置)和Vendor标示符IDFV(在特定条件下保持不变)等多种标识符。作者详细分析了每种方法的原理、优缺点及适用场景,例如IDFA适合广告追踪,IDFV适合同一开发商下的应用互联。 核心结论是,没有完美的单一方案。文章最终指出,一种相对稳健的做法是在应用首次启动时生成一个UUID,然后将其保存在iOS的Keychain中。Keychain数据不受App卸载影响,从而可以在应用重装后依然识别出是同一设备。这对于需要持久化用户身份(如免重复登录)的场景,提供了一个可行的折衷思路。

本机暂存