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

最新文章

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

IT 设计/ 2012-12-23 23:01:44 / 累计浏览 1,823

WIN8设计特性浅谈和腾讯微博MS首版设计思路分享

这篇讲的是在“后PC时代”的浪潮下,Windows 8如何通过其独特的系统设计重塑应用生态,并以腾讯微博MS版为例,分享了实际的设计实践。 作者首先从Win8的战略转型切入,指出其核心在于为移动触控设备构建全新的应用环境。文章随后深入剖析了Win8的多个关键系统特性:如作为系统级枢纽的Charms(超级按钮)、打通应用边界的系统级搜索与分享机制、实现一屏多任务的贴靠视图,以及通过动态磁贴和Toast呈现的实时信息流。这些特性共同指向一个“Win as One”的整合理念。 更值得注意的是文章的后半部分,腾讯微博设计团队分享了如何将这些特性落地。他们具体展示了如何利用Charms栏实现无缝内容分享,如何设计动态磁贴以突出信息更新,以及如何适配Win8前卫的手势交互逻辑。从系统特性解读到具体产品实践,文章形成了一条完整的设计思路链路,为面向新平台的开发者提供了兼具理论视角和实操参考的借鉴。

本机暂存
IT 设计/ 2012-12-23 23:00:55 / 累计浏览 3,077

登录图的趣味设计

这篇讲的是登录页面左侧banner的趣味性设计。与更注重信息传达的首页banner不同,登录页的这个位置更适合做情感化设计,其中趣味性是关键。 文章将趣味设计拆解为两个可操作的部分:主体元素的创意和背景元素的处理。作者重点分享了三种提取创意的实用手法。第一种是“线描”,它源自现实场景,通过线条的粗细和颜色调整,能创造出简洁又有张力的效果。第二种是“夸张”,以现实实物为蓝本,对其局部进行放大或变形(例如将一层货车夸张为三层),从而增强表现力和趣味。第三种是“重构”,将原本不相关的元素(如灯泡与建筑)通过正负形等设计手法重组融合,带来眼前一亮的感觉。 主体元素确定后,背景处理则相对自由。文章列举了笔刷、色块堆积、不规则形状、羽化、水粉等几种常见手法作为补充。整体来看,这篇文章为设计师提供了从找寻创意点到完成背景的清晰路径,展示了如何通过具体的创意方法,让功能性区域变成传递情感、增加品牌亲和力的小窗口。

本机暂存
IT 后端/ 2012-12-21 13:44:29 / 累计浏览 2,421

libev ev_io源码分析

这篇深入分析了libev事件库中负责I/O事件监听的ev_io组件。作者从项目实践中的疑问出发,首先梳理了libev的核心抽象:所有watcher的基类`ev_watcher`,以及统一管理所有watcher状态的`ev_loop`结构。 文章重点剖析了ev_io的实现机制。它解释了ev_io如何“继承”`ev_watcher_list`以实现链表管理,并与一个名为`ANFD`的结构(用于映射文件描述符与事件链表)协同工作。对ev_io最关键的几个操作——添加、执行回调和删除——进行了流程拆解。 例如,添加watcher时并非立即调用`epoll_ctl`,而是先记录到一个待处理队列中,在下次循环的`epoll_wait`前才批量修改内核事件,这是一个精巧的优化。唤醒与回调过程则展示了如何根据epoll返回的结果,从事件链表中找到匹配的watcher并触发其回调函数。 整体来看,这篇文章清晰地展示了libev如何用简洁的C结构实现高效的事件驱动模型,对于想理解事件循环底层机制,特别是I/O多路复用与应用层封装之间交互的开发者来说,提供了很好的实现视角。

本机暂存
IT 后端/ 2012-12-21 13:41:32 / 累计浏览 1,988

TermRangeQuery源码解析

这篇讲的是Lucene中`TermRangeQuery`的源码实现。作者从它如何处理一个范围查询出发,揭示了其核心机制:在重写Query树时,会根据查询范围匹配到的Term数量动态决定后续策略。 如果范围内的Term和关联文档较多,为避免性能问题,它会被包装成`ConstantScoreQuery`,通过`Filter`的方式直接获取并遍历文档ID集合。反之,如果Term数量不多,它会被拆解成多个独立的`TermQuery`,用`BooleanQuery`合并结果。这个自动选择的过程,体现了性能与精度之间的权衡设计。 文章进一步通过源码,清晰地展示了从Query树到Weight树,再到Scorer树的生成链路,最终如何遍历并收集文档ID。整个实现的关键在于,通过`MultiTermQueryWrapperFilter`统一了两种路径,将范围查询的最终执行收敛为高效的文档ID集合迭代,巧妙地规避了生成大量Clause可能带来的问题。

本机暂存
IT 前端/ 2012-12-21 13:39:42 / 累计浏览 5,922

缓存为王

这篇讲的是Web性能优化中一个常被低估的选手:缓存。作者从“快速Web应用的关键是Ajax、优化JavaScript和更好的缓存”这一观点出发,做了一项有趣的实测,想看看这三招在实际网站里到底谁最管用。 他用WebPagetest工具模拟不同网络环境,对Alexa前1000网站进行了对比测试。结果有点出乎意料:缓存模式表现最强,页面加载中位数只需3.46秒,远快于“快速网络”(4.13秒)和“禁用JavaScript”(4.74秒)。核心原因在于,缓存直接将90个HTTP请求削减到仅32个,大部分资源从本地读取,彻底避免了网络传输。 文章进一步分析,当前很多网站虽配置了缓存,但有效期很短,导致优势局限于“重复浏览”。作者由此提出,未来的方向是延长缓存时间,并探索预读技术,让性能优势更持久。这提醒我们,在追求新技术的同时,扎实做好缓存这一“基本功”,往往能带来最显著的收益。

本机暂存
IT 安全/ 2012-12-21 13:38:39 / 累计浏览 8,139

网址加密(URL加密)(RC4、PHP、密钥长度可变)

网址加密是一个常见需求,但作者发现网上很难找到现成的可用案例。他系统梳理了主流方案,指出Base64只是编码并非加密,且字符集不适合URL;自定义加密算法则违背了“安全寓于密钥”的现代密码学原则。 作者进一步对比了AES与RC4两种算法。AES虽然强大,但加密哪怕一个字节的结果也超过30字符,长度随输入增长过快,不适合加密长网址。而RC4在保证安全性和速度的同时,生成的密文长度要短得多,更适合URL场景。 最终,作者选择了RC4作为加密方案,并直接分享了PHP实现的完整类库与调用示例。他演示了如何通过密钥加密字符串并解密,让这份“缺失”的网址加密方案能直接用于实际项目。

本机暂存
IT 数据库/ 2012-12-21 13:37:58 / 累计浏览 17,300

HBase集群出现NotServingRegionException问题的排查及解决方法

这篇讲的是HBase集群在压力测试中频繁出现NotServingRegionException,导致读写波动乃至短暂不可用的实战排查经历。作者从实际压力测试中遇到的问题出发,发现当每秒读写量达到几十万条时,客户端会周期性地抛出大量异常。 经过对Master日志的分析,问题的根因被定位到两个关联过程:一是由于rowkey包含时间戳且写入量巨大,导致频繁的Region Split(平均耗时约10秒);二是Split后Region分布不均,进一步触发了自动的Region Balance(平均耗时约20秒)。这两者都会造成Region暂时下线。 为解决这一问题,文章从客户端和服务端两个层面提出了具体方案。客户端侧,可通过设置自动刷写(autoFlush)保留写入缓冲区,或调整重试次数与间隔来增强容错。服务端侧则更为关键,建议关闭自动Balance并选择低峰期手动执行;同时针对Region无限增长的问题,提出了两种根治思路——按天分表或巧妙地将时间戳字段改造为周期循环值,从而实现Region的复用。整个过程提供了清晰的排查逻辑与可落地的解决方案。

本机暂存
IT 前端/ 2012-12-21 13:35:49 / 累计浏览 4,838

JavaScript中两个感叹号(!!)的作用

这篇讲的是JavaScript里两个感叹号“!!”这个小技巧的具体作用。它能将任何表达式的结果强制转换为严格的布尔值(true或false),尤其适合处理那些可能为null、undefined或0的变量。 文章从一个常见场景切入:当变量`a`未定义时,直接用它做条件判断可能不符合预期。而`!!a`会先将其转为布尔值,这里因为`a`是undefined,第一次取反`!a`得到true,再次取反`!!a`就得到了false。这样就为后续逻辑提供了一个明确的布尔判断基础。 作者随后将“!!”这种布尔转换,与其他类型转换做了对比。比如`parseInt()`和`.toString()`是显式转换,而像数字加空字符串`1234+""`就是隐式转换为字符串。“!!”可以看作是一种针对布尔类型的隐式强制转换。 文章还梳理了JavaScript的布尔转换规则:false、undefined、null、0、空字符串会被转为false,而其他值如true、1、非空字符串、对象等则会转为true。因此,对于这些非标准布尔值,“!!”能快速得到一个等价的、干净的布尔状态,让代码意图更清晰。

本机暂存
IT 前端/ 2012-12-21 13:35:11 / 累计浏览 4,254

使用window.postMessage实现跨域通信

这篇文章直面JavaScript开发者长期头疼的跨域通信难题。在同源策略的限制下,作者梳理了document.domain、location.hash、Flash以及window.name等几种传统的变通方案,指出了它们在数据容量、类型或浏览器兼容性上的各种局限。 文章的重心放在了HTML5提供的标准解决方案——跨文档消息传输(Cross Document Messaging)上。它详细讲解了window.postMessage方法的发送机制与message事件的监听接收,强调了该API实现简洁、支持IE8+等现代浏览器的核心优势。文中还通过参数说明和事件对象属性解析,给出了清晰的代码指引。 值得注意的是,文章并未一味推崇新技术,而是客观指出了postMessage在IE8/9下仅支持字符串传输、对IE6/7需额外兼容等现实不足,并引导读者通过JSON序列化等方式进行优化。整篇文章从问题出发,对比了演进路径,最终聚焦于一个广泛可用的现代标准方案,脉络清晰。

本机暂存
IT 数据库/ 2012-12-21 13:31:11 / 累计浏览 4,772

ORACLE 12C可以通过expdp导出view数据

这篇讲的是Oracle 12c中一个相当实用的新功能:通过数据泵工具expdp,直接将视图数据导出为类似表的数据文件。 以往,我们想迁移某个视图的数据,通常需要先创建一张临时表来存储查询结果,过程稍显繁琐。而从12c开始,expdp引入了`VIEWS_AS_TABLES`参数。作者在文中用一个完整的实例做了验证:在测试库中创建了一个关联查询的视图`v_xifenfei`,随后使用`expdp`配合该参数,直接将其数据导出为转储文件。接着,使用`impdp`导入时,通过`remap_table`参数,成功地将视图数据作为一张名为`v_xff`的新表导入到了目标库,且查询结果完全一致。 这个功能打通了视图与表在数据迁移工具链上的壁垒,特别适合在数据迁移、环境搭建或数据分发时,需要快速提取某个特定视图“快照”结果的场景,省去了中间建表的步骤,让基于视图的数据迁移变得像操作普通表一样直接和简单。

本机暂存
IT AI/ 2012-12-21 13:27:43 / 累计浏览 7,149

概率语言模型及其变形系列-LDA及Gibbs Sampling

这篇讲的是概率语言模型系列的第二篇,聚焦于LDA(Latent Dirichlet Allocation)及其参数推断方法Gibbs Sampling。文章从LDA的核心思想切入:如何通过无监督学习,从文本中发现隐含的“主题”结构,从而解决“一词多义”和“一义多词”的语义匹配问题,让搜索结果在语义层面真正相关。 理解LDA的关键在于其概率基础。文章深入剖析了“随机生成过程”视角,解释了文本如何被看作词项的样本集合。重点阐述了多项分布(Multinomial)与其共轭先验狄利克雷分布(Dirichlet)的特性与计算优势——后者被称为“分布之上的分布”,其样本恰好是多项分布的参数。这些数学工具共同构成了LDA模型的基石。 作为PLSA到变形LDA之间的承上启下之作,文章不仅厘清了基础概念,也为后续探讨Twitter LDA、Labeled-LDA等各类变形模型铺平了道路。对于想从理论层面掌握主题模型的读者,这篇系统性的推导提供了扎实的起点。

本机暂存
IT AI/ 2012-12-21 13:27:09 / 累计浏览 5,291

概率语言模型及其变形系列-PLSA及EM算法

这篇从LSA(隐性语义分析)的SVD方法入手,分析了其处理一词多义和一义多词问题时的不足——通过低秩逼近虽然能降维去噪,但缺乏严谨的统计基础且计算耗时。由此自然引入Hofmann提出的PLSA模型。 PLSA采用概率图模型重新表述文档生成过程:先以一定概率选中文档,再从中抽取主题,最后根据主题生成单词。文档和主题都被建模为多项分布,而EM算法则负责估计这些隐含参数。文章不仅推导了PLSA的数学框架,还通过简单的混合Unigram模型与高斯混合模型(GMM)类比,帮助理解EM算法“期望步-最大化步”的迭代精髓。 整个系列其实计划覆盖从PLSA、LDA到各类变形模型(如Twitter LDA、Labeled-LDA等)的演进脉络,这篇作为开篇,扎实地奠定了概率主题模型的基础认知。

本机暂存
IT 前端/ 2012-12-21 13:25:13 / 累计浏览 4,237

HTML5 Charset能用吗?

这篇讲的是前端开发者在实际项目中遇到的一个经典兼容性问题:HTML5简写的``在老旧的IE6浏览器里到底能不能用。作者从项目页面在IE6突然出现乱码的实际故障出发,进行了一系列系统性的测试。 测试对比了HTML5和HTML4两种字符集声明方法在多种环境下的表现。核心发现很有价值:IE6确实能正确识别HTML5的charset声明,其效果与传统HTML4方法一致。但有几个关键细节决定了成败:首先,meta声明必须位于``标签最前面,且在文档前512字节内;其次,服务器端(如Nginx)设置的charset优先级高于页面内的meta标签;另外,在UTF-8文件中使用中文注释,并非乱码的直接原因。 测试还揭示了一个有趣的优先级问题:当用两个meta标签先后声明不同字符集时,浏览器以第一个声明为准。因此,作者最终的结论是:只要遵循规范(头部简洁、声明靠前),开发者完全可以放心使用HTML5的DOCTYPE和简化的charset写法,无需担心主流浏览器的兼容性问题。对于需要长期维护的项目,通过服务器端统一设置字符集是更高效可靠的选择。

本机暂存
IT 后端/ 2012-12-19 23:32:00 / 累计浏览 7,912

php缓存与加速分析与汇总

这篇讲的是PHP网站缓存加速的实战指南,作者基于Win7+Apache+PHP的测试环境,从浏览器端缓存机制入手,深入剖析了HTTP头域中Expires、Last-Modified与Etag的工作原理与差异。文章通过浏览器监听的实际截图,清晰展示了首次请求、未过期缓存命中以及304状态码等不同场景下的网络交互细节。 作者对比了Apache处理静态文件与动态文件的默认行为差异,并详细演示了通过PHP代码设置 Expires 头域来实现时间缓存的具体方法。更有趣的是,文章还探讨了在PHP中同时设置Expires与启动Session时出现的一个特殊缓存现象,揭示了看似简单的缓存设置背后可能隐藏的复杂交互。整体内容基于作者的亲自动手验证,将理论与实际监听结果相结合,对理解前端性能优化中的浏览器缓存策略有不错的参考价值。

本机暂存
IT 算法/ 2012-12-19 23:30:27 / 累计浏览 3,581

基于用户的协同过滤和皮尔逊相关系数

这篇文章聚焦于推荐系统中的经典算法——协同过滤,并深入比较了基于用户与基于物品两种实现路径的核心差异。作者指出,从大量实验效果看,基于用户的协同过滤通常表现更优。其关键在于,这种算法的核心思想是“找到与你相似的用户,将他们喜欢的东西推荐给你”,而实现这一点的关键,就是准确计算用户之间的相关性。 文章通过一个具体的评分矩阵例子,生动展示了如何操作。例如,用户a和b对物品X、Y、Z的评分向量非常接近,因此当b未评价物品R时,系统就能将a高度评价的R推荐给b。接下来,文章深入到数学层面,解释了如何量化这种“相似性”。它首先介绍了将用户评分视为向量、计算其夹角余弦值的经典方法(即余弦相似度),随后引出了另一种更常用且效果通常更好的度量方式——皮尔逊相关系数。虽然文章片段未完全展示其公式,但明确了其目标:通过对比两个用户对相同物品的评分趋势(即协方差与各自标准差的比值)来评估线性相关程度,从而更精准地度量用户兴趣的相似性。 总体而言,这篇文章从概念到具体计算,清晰地剖析了基于用户协同过滤的算法逻辑。它不仅解释了“为什么”,更通过实例和公式指引了“怎么做”,对于想理解推荐系统核心原理的读者来说,是一篇内容扎实、脉络清晰的入门解析。

本机暂存
IT 安全/ 2012-12-19 13:45:29 / 累计浏览 6,665

网站密码存储方案比较

这篇讲的是在GPU算力飞速发展的今天,网站该如何安全地存储用户密码。作者对比了几种主流的不可逆加密方案。 传统的一次MD5或加盐的两次MD5方案,虽然使用广泛,但面对如今动辄超CPU数十倍算力的GPU集群,暴力破解已成可能,安全性堪忧。 文章重点分析了两种更安全的现代方案:PBKDF2和bcrypt。PBKDF2(如Django 1.4默认的实现)通过成千上万次迭代的HMAC-SHA256运算,大幅增加暴力破解的时间成本。bcrypt则在实现上更为简洁,但需注意它不支持超过55字符的密码。 作者指出,两者各有拥趸,没有绝对的优劣,选择取决于具体场景。文中提供了Django和PHP的PBKDF2实现代码,方便读者直接参考。对于正在构建用户系统的开发者来说,这是一份清晰实用的方案选型指南。

本机暂存
IT 安全/ 2012-12-19 13:39:15 / 累计浏览 6,491

md5到md5破解的一些科普

这篇讲的是如何正确理解MD5这一经典哈希函数及其“被破解”事件。文章作者从MD5的多对一映射本质出发,解释了为何它是“不可逆”的,进而引出了密码学中关键的“碰撞”概念。 核心对比在于“无弱碰撞”与“无强碰撞”的区别。作者用生动的生日悖论说明,找到一对碰撞(强碰撞)的复杂度约为O(sqrt(m)),远低于遍历的O(m),这为攻击提供了理论可能性。文章重点阐述了王小云教授的突破性贡献:她找到的算法能比生日攻击更快地构造出强碰撞,而非通过密文反推明文。这并不意味着MD5可以直接“解密”,而是破坏了它在验证文件完整性或数字签名时的可靠性基础。 后续提到的“预测大选”实验,正是利用了快速构造前缀碰撞的技术,以一种巧妙的方式展示了算法漏洞的实际应用。最终文章落脚于现实影响:尽管MD5在部分安全场景已弃用,但其漏洞提醒我们,从非官方渠道下载文件时,仅比对MD5值已不足以保证安全。

本机暂存
IT 设计/ 2012-12-19 13:33:52 / 累计浏览 5,435

界面设计速成

这是一套以 GIF 动图形式呈现的界面设计视觉教程。文章没有任何文字讲解,而是用 27 张连续的动图,直观地演示了一个界面从无到有、逐步完善的设计过程。 从第一张图开始,你就能看到一个基础的线框结构。随着图片的推进,设计者会逐步添加细节:先是确定核心功能区块的布局,接着加入按钮、文字、图标等交互元素,然后通过调整间距、对齐方式来建立视觉层级,最后通过色彩和阴影的微妙变化来提升界面的质感和可用性。整个过程像一场快进的设计回放,清晰地展示了从草图到成稿的思考路径。 这种“纯视觉”的呈现方式剥离了理论说教,非常适合设计新手直观感受布局逻辑与细节处理的先后顺序。它不像传统的步骤图那样静态,动图的连续性让你能捕捉到每一个微小调整带来的整体观感变化,这或许正是它“速成”的秘诀——用最直接的方式,培养你对界面平衡与美感的直觉。

本机暂存
IT DevOps/ 2012-12-19 13:31:41 / 累计浏览 4,539

Web工程师的工具箱

这篇文章整理了一份涵盖开发、测试、调试与文档等环节的Web工程师在线工具集合。它并非简单罗列,而是将功能相近的工具进行了分组介绍,方便读者按需查找。 比如,用于发送和检查HTTP请求的工具有RequestBin、Hurl和Httpbin,它们都能帮助开发者直观地分析网络交互;而用于检测网站状态、性能或安全性的工具则包含了Host tracker、SSL Checker和Loadzen等。文章特别指出,这份清单比常见的“18款工具”版本更为完整,补充了评论区和后续更新中的工具,总数达到40余个,像用于模拟网络问题的Necrohost、将HTML转为API的Apify,以及在线代码编辑器JSFiddle等都能找到。 这份“工具箱”的价值在于,它将分散的、实用的在线工具系统地汇总在一起,让工程师无需费力搜集,就能快速定位到解决特定问题的利器,从而提升开发调试的效率。

本机暂存
IT 算法/ 2012-12-19 13:31:09 / 累计浏览 2,742

五个有趣的拓扑变换问题

这篇讲的是拓扑学里五个既直观又烧脑的变换谜题。文章从 V. V. Prasolov 的《直观拓扑》一书中选出了五个经典问题:比如两个套在一起的圆环能否不切断就解开?轮胎表面的圆环能否移到另一位置?轮胎内表面能否翻到外面?等等。规则很简单:所有物体都由“橡胶”制成,可随意拉伸弯曲,但不能切断或粘连。 作者不仅抛出问题,更直接展示了令人惊叹的答案与变形过程。比如,通过连续的拉伸和翻转,确实能将两个手指套成的圆环解开——这甚至被比喻成解开“橡胶手铐”。而最具颠覆性的,是对轮胎(环面)进行“内外翻转”的论证。文章通过一系列图像,清晰地将有洞的轮胎等效为两个粘合的纸圈,再通过对调纸圈来还原,从而在拓扑意义上实现了内表面的外翻。Wikipedia 上那个名为“Inside-out torus”的动画,更是将这个抽象过程可视化,极具观赏性和启发性。 这些问题背后,是拓扑学中“连续性”和“同胚”的核心思想。它告诉我们,在拓扑的视角下,形状的本质由其整体结构决定,而非局部外观。理解这一点,能彻底改变你对空间和形态的认知。

本机暂存