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

最新文章

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

IT 开发者/ 2013-01-16 14:04:04 / 累计浏览 3,465

为什么会有这么的编程语言

这篇文章用一个独特的视角解释了编程语言为何如此繁多:每一门新语言的诞生,几乎都是为了解决上一门语言的某个痛点。 作者将这种关系归纳为一种“修复视角”,并列出了一串生动的对照表。例如,Fortran因汇编语言“太低级”而生,而Python的出现则是为了解决Perl“太让人受不了”的问题。从C++为改进C,到Java意图摆脱C++的“笨重”,再到C#试图摆脱Sun公司的控制,这份清单清晰地勾勒出一条条语言演进的驱动力线。 这种视角剥离了复杂的语法和特性对比,直指语言设计的核心动机。它告诉我们,编程语言不是凭空创造的炫技,而是对既有工具不足之处的具体回应。对程序员而言,理解这层“前因后果”,或许比单纯掌握一门语言的语法更能洞悉技术选择的本质。

本机暂存
IT 后端/ 2013-01-16 14:03:14 / 累计浏览 4,776

scala入门手记

作者从环境安装与配置讲起,记录了如何为Scala搭建开发环境,包括JDK准备、Scala下载以及在Eclipse中安装插件。通过一个经典的“hello world”示例,展示了Scala程序的基本结构,并指出其与Java项目的相似之处。 文章的核心价值在于一份简洁的语法对比速记。作者将Scala与Java的关键差异点清晰列出:例如Scala的数组是可变结构而List是不可变的、`var`与`val`分别对应可变与不可变变量(并提倡多用`val`)、`object`关键字实现了单例模式,以及`::`和`:::`这两种用于列表操作的不同操作符。这些对比点能帮助有Java背景的开发者快速抓住Scala的语言特性。 对于想了解Scala基础或考虑技术迁移的开发者来说,这篇手记提供了一个从安装到基础语法的平滑入门路径,侧重于实操和与熟悉语言的对照,非常实用。

本机暂存
IT 设计/ 2013-01-16 14:02:20 / 累计浏览 4,360

Pixel light 中的场景管理

这篇文章从Pixel Light引擎的源码出发,聚焦其场景管理模块的设计。作者指出,Pixel Light将场景元素(如Mesh、Light)设计为场景节点的继承类而非附加组件,这意味着所有实际渲染对象都位于叶节点,而容器节点仅用于组织和查询。 其场景管理的核心精巧之处在于“场景查询”机制。为实现高效的空间剔除与交互,引擎为每个容器引入独立的“场景层级”(如K-D树),并通过SQ系列查询类(如视锥剔除)遍历并激活可见节点。这与直觉相反——容器内的对象不强调严格的空间从属关系(例如摄像机与角色位于同一容器),而是通过“场景节点修改器”来动态建立关联,如使用SNMAnchor实现摄像机跟随或武器绑定。这种设计解耦了组织结构与行为逻辑,依赖简洁的事件机制驱动,避免了复杂的循环引用。 总体来看,Pixel Light的场景管理架构清晰地区分了静态空间组织与动态行为控制,其模块化与解耦的思路为理解3D引擎设计提供了有价值的参考。

本机暂存
IT 安全/ 2013-01-16 14:01:57 / 累计浏览 12,996

彻底屏蔽优酷广告

这篇讲的是如何通过修改系统配置与Flash插件,彻底屏蔽优酷视频广告的“江湖秘笈”。 文章先回顾了经典的hosts屏蔽法被优酷用黑屏广告“反制”的历史,随后推出了一个更彻底的两步解决方案。第一步是基础操作,针对不同操作系统修改hosts文件,屏蔽广告服务器IP。文章的核心在于第二步:通过“欺骗Flash”来阻止黑屏。这需要用户找到浏览器Flash插件的本地存储目录(不同系统路径各异),删除名为“static.youku.com”的文件夹,并用一个同名的空文件取而代之,从而从根源上阻止了广告数据的加载。 整个方案思路清晰,实操性强,特别为Chrome用户在Linux、Mac和Windows系统上给出了详细的路径指引。虽然步骤稍显繁琐,但为希望获得纯净观影体验的用户提供了一个完整的“终极”技术路径。

本机暂存
IT DevOps/ 2013-01-16 13:54:16 / 累计浏览 3,140

在移动硬盘上安装 Arch Linux

这篇讲的是作者如何在移动硬盘上搭建一个便携的 Arch Linux 学习环境。起因是厌倦了 Ubuntu 半年一次的大版本升级,同时希望深入接触滚动更新的发行版。为了不影响主力工作机,作者选择将系统安装在移动硬盘上,以便随时折腾和学习。 文章详细记录了从分区规划到系统配置的全过程。作者为这块硬盘设计了四个分区:10G 的 btrfs 分区安装 Arch 系统本身,10G 的 ext4 分区用作用户主目录,一个大容量 NTFS 分区用于日常数据交换,以及小容量的交换分区。安装过程中,他特别注意了针对移动存储设备的优化,比如在 fstab 中启用 relatime 和 discard 参数,将 /tmp 挂载到内存,并通过调整 swappiness 参数尽量减少对磁盘的写入,以保护硬盘寿命。 除了基础系统安装,文章也涵盖了引导配置、时区语言设置等初始工作。整个过程不仅是技术步骤的罗列,更分享了作者从 Ubuntu 转向 Arch 的心路历程,以及他对服务器环境稳定性的谨慎态度。对于想尝试新发行版又担心影响现有系统的读者来说,这提供了一个清晰的、可复现的实践路径。

本机暂存
IT 数据库/ 2013-01-16 13:51:37 / 累计浏览 4,172

陈吉平的Oracle职业生涯:兴趣与思考 成败之所系

这篇文章记录的是资深技术专家陈吉平从大学沉迷游戏到成长为Oracle领域专家的完整职业历程。作者以第一人称回忆了从非科班出身,到初入职场作为混沌的VB程序员,再到因兴趣选择数据库方向,最终在Oracle领域扎根的全过程。 文章并非讲解具体技术,而是通过大量真实细节——比如为逃避本专业而打游戏逃课、因800元月薪接下第一个项目、在论坛解答问题养成学习习惯、考取OCP证书——生动刻画了一个技术人员的成长轨迹。其中,如何确立方向、从迷茫转向系统学习、借助社区力量(如CSDN与ITPUB)提升自我等思考,构成了文章的主线。 其核心观点在于,技术的成败与持续的“兴趣”和“思考”紧密相关。从最初对计算机的着迷,到后来面对Oracle学习瓶颈时主动寻找方法、总结经验,这份内驱力和对成长路径的反思,远比起点或背景更重要。这对许多正处于技术学习或转型期的读者,提供了真实而鼓舞人心的参考。

本机暂存
IT 后端/ 2013-01-16 13:49:38 / 累计浏览 2,491

Sheepdog块设备驱动死锁的问题

这篇讲的是一个在压测Sheepdog块设备驱动时遇到的诡异死锁问题。作者在将Sheepdog虚拟磁盘挂载为宿主机本地块设备,并运行QEMU虚拟机进行高强度IO写入后,偶尔会触发系统卡死,甚至基础命令如`ps -ef`也会被阻塞。 通过`sysrq-trigger`工具抓取进程状态,作者定位到两个关键进程:一个是Sheepdog服务进程(sheep),正卡在内核的内存回收路径`shrink_page_list`上;另一个是QEMU进程,也处于不可中断的D状态。两者形成了一个经典的资源依赖环。 死锁的根因在于内存与IO的相互等待:sheep进程因内存不足,试图回收一个内存页,而该页恰好被QEMU的页缓存占用。QEMU若要释放此页,需将其回写到作为后端存储的Sheepdog设备上。但这个回写请求又必须通过本机的Sheepdog驱动发送给已经卡住的sheep进程处理。于是,sheep等待页释放,QEMU等待sheep响应,形成了无法打破的死锁。 这个问题并非编码缺陷,而是在特定部署架构(本地驱动与存储服务同机运行)下难以避免的竞争条件。作者最终得出结论,解决之道是将存储客户端驱动与存储服务节点分离部署,避免资源回收路径上的循环依赖。

本机暂存
IT 前端/ 2013-01-16 13:48:45 / 累计浏览 3,548

web开发设计人员不可不用的在线web工具和应用

这篇文章整理了一系列面向 Web 开发与设计者的在线实用工具,覆盖了从代码编写、调试、性能优化到技术调研的多个环节。 在前端开发与调试方面,文章重点介绍了 jsfiddle 和 codepen 这类老牌在线代码沙盒,前者便于快速调试和提问,后者则更侧重社区化展示。同时,也提及了集成于 GB 社区的 gbdebug、专攻正则表达式的 reFiddle+,以及针对 Ruby 语言的 RubyFiddle。对于样式与新特性探索,文中推荐了交互体验新颖的 CSS3 Generator 和作为权威参考的 HTML5 Please。 性能优化部分,文章提到了两个轻量工具:书签工具 DOM Monster 可一键诊断页面 DOM 性能,而 zBugs 则能快速压缩 CSS/JS 文件。最后,BuiltWith 被用来透视任意网站的技术栈构成,从一个独特角度满足技术选型与分析的需求。 整篇文章没有停留在单纯罗列,而是对每个工具的核心功能与适用场景进行了区分,为开发者构建了一个从开发、调试到优化、分析的在线工具箱,有助于提升日常工作效率。

本机暂存
IT 算法/ 2013-01-10 22:51:52 / 累计浏览 9,190

程序算法与人生选择

面对职业选择时的纠结,作者从算法角度给出了独特解法。他指出,许多人困于城市、薪资、公司前景等多维因素的权衡,本质上是缺少清晰的决策框架。 文章将经典算法思想映射到人生抉择中:冒泡排序提醒我们,必须认清自己“最想要”的那一个核心需求;快速排序则启示我们,可以用一个明确标准(如薪资门槛或业务前景)来初步划分选项。对于短视的“贪婪算法”(只追求眼前最优解)与能承前启后、允许回退的“动态规划”,作者也分析了其适用边界。而“最短路径”算法则道出一个务实道理:踏实做好眼前够得着的事,往往就是通往目标的捷径。 最终,文章落脚于算法的核心——Trade-Off。任何选择都意味着放弃,用时间换空间,或用兴趣换发展。作者认为,我们的人生如同运行中的程序,独特的算法(价值观与决策逻辑)决定了每一次选择,进而塑造了不同的人生路径。

本机暂存
IT 前端/ 2013-01-10 22:50:47 / 累计浏览 5,079

CSS Sprites的原理

这篇讲的是网页性能优化中一个经典又实用的技巧——CSS Sprites。作者从众多网站(比如早期淘宝)的CSS背景图设置出发,拆解了其背后的原理。 核心思路其实很直观:与其为页面上的小图标(按钮、装饰等)请求十几张甚至几十张独立图片,不如预先将它们排列、合并成一张大图。在前端,通过CSS的`background-position`属性,像从一张大画卷上“截取”特定部分一样,精准地为每个元素显示对应的图标。这样做最大的好处是,原本需要十几次HTTP请求才能加载完的图片,现在一次请求就搞定了。这直接减少了网络连接开销,显著提升了页面加载速度,这在移动端或高并发环境下尤为重要。 文章也坦诚地分析了它的两面性。优点很明确:减少HTTP请求、降低服务器压力、可能减小总图片字节数。但代价是开发与维护的复杂性:开发者需要用工具精确计算每个图标的坐标位置,后期修改或添加新图标也如同“针线活”,可能需要重新调整整张大图和坐标。 总体来说,这是一篇从现象到原理再到优缺点剖析的实用技术解说,清晰展示了如何在性能与开发便利性之间做出权衡。

本机暂存
IT 前端/ 2013-01-10 22:48:47 / 累计浏览 4,737

CSS布局中一个简单的应用BFC的例子

这篇讲的是CSS布局中一个既经典又实用的技巧:利用BFC(块级格式化上下文)来控制元素的排列。文章先从“overflow:hidden会触发BFC”这个常见现象切入,解释了BFC本质上是创建一个独立的布局环境,内部的元素互不干扰。 核心价值在于通过一个清晰的案例展示了BFC的应用。当给图片设置左浮动后,右侧文字内容会环绕图片。作者接着演示,只需为文字容器添加`overflow:hidden`属性,就能使其形成一个新的BFC,从而让文字规整地排列在浮动图片的右侧,避免了复杂的清除浮动操作。 更进一步,文章还深入探讨了在IE6等旧浏览器下的兼容性挑战。这里引入了另一个概念“HasLayout”,并详细说明了如何通过`zoom:1`或`min-height:0`等Hack方式同时解决BFC和HasLayout问题,最终给出了一个兼顾各浏览器的完整CSS方案。整体来看,这篇文章从一个具体问题出发,将原理、标准实现和历史兼容方案串讲得十分透彻。

本机暂存
IT 后端/ 2013-01-10 22:47:28 / 累计浏览 4,275

Memcached二三事儿

这篇讲的是作为NoSQL“老兵”的Memcached。尽管Redis等后起之秀势头强劲,Memcached在许多项目中依然不可或缺。文章没有停留在“要不要学”的讨论,而是直接深入Memcached的核心——Slab内存分配机制。作者用了一个生动的比喻来解释Page、Slab和Chunk之间的关系,指出早期版本中内存无法跨Slab调配的痛点,并介绍了新版本通过slab_reassign参数实现的“Page改嫁”机制。 文章还触及了Memcached在实际应用中的典型挑战。例如,为应对缓存失效瞬间的“惊群效应”(stampeding herd),作者依次讨论了主动更新、加锁、柔性过期等方案的利弊,并最终引入了通过Gearman进行异步任务分发的更稳健的解法。此外,文中提及的Twemcache对Memcached的改进,也从侧面反映了技术在实际生产中的演进。 对仍在使用或需要深入理解Memcached原理的工程师来说,文章对内存管理细节的剖析和对常见坑点的梳理,依然具有很强的实用参考价值。

本机暂存
IT 前端/ 2013-01-10 22:44:52 / 累计浏览 5,007

overflow:hidden真的失效了吗

这篇文章讲的是一个让不少前端开发者困惑的现象:明明给父元素设置了 `overflow: hidden`,但子元素的内容依然“溢出”可见。难道 CSS 属性失效了? 作者从 W3C 标准出发,点出了问题的关键:`overflow` 属性有一个重要的例外情况——当绝对定位的子元素,其“包含块”已经不再是设置了 `hidden` 的父元素,而是更上层的祖先元素时,父元素的 `overflow:hidden` 将无法裁剪该子元素的内容。 文章最妙的地方是用了一个“海洋、大地、段子”的比喻来解释这个抽象的 DOM 定位关系。蓝色海洋(外层父容器)和红色大地(设置了 overflow:hidden 的元素)里,原本有个黄色段子(内容)被完美裁剪。但当段子通过 `position: absolute` “自立门户”后,它的位置就改由海洋决定了,于是大地的裁剪规则对他失效了。解决办法也很直观:让大地通过 `position: relative` “重新成为段子的监护人”,就能恢复裁剪。 所以,`overflow: hidden` 并非失效,而是定位关系的变化改变了它的作用范围。理解“包含块”如何随定位属性改变,是破解这类布局谜题的核心。

本机暂存
IT 后端/ 2013-01-10 22:40:13 / 累计浏览 4,077

微观架构及宏观架构

这篇文章从工程师的成长路径出发,探讨了软件架构设计中两个相辅相成但思维模式迥异的层面。作者指出,许多工程师从解决排序算法效率、提升代码可读性这类“微观架构”问题起步,这些成果直观且易于度量。然而,随着系统规模扩大,“宏观架构”——即关乎全局效率与成本的顶层策略设计——的价值便凸显出来。 文中用一个形象的对比阐释了这种思维转换:追求缓存命中率最大化是微观视角,而从全局出发,接受长尾数据的访问延迟,可能使整体成本下降一个数量级且性能影响甚微。作者进一步分析,从专注细节的微观思维转向宏观架构时,成果往往不如提升单个模块QPS那样立竿见影,更像是一种“虚”但至关重要的战略能力。 文章的核心观点在于,微观与宏观如同战术与战略,缺一不可。优秀的工程师团队需要合理的微观与宏观人员配比,架构师也需具备对代码细节的理解,才能做出正确的技术判断。文末列举的如C10k问题、SPDY协议、事件模型等断言,也邀请读者一起实践这种从微观细节到宏观影响的思考视角。

本机暂存
IT 前端/ 2013-01-10 22:38:47 / 累计浏览 18,429

深入理解Javascript之执行上下文(Execution Context)

这篇讲的是JavaScript中最核心但常被忽略的概念——执行上下文。作者从代码的运行环境切入,清晰地将执行上下文划分为全局、函数和Eval三种类型,并指出它是理解变量提升、作用域等行为的钥匙。 文章用一个函数调用图,生动展示了多个执行上下文是如何像栈一样被管理的:单线程的JavaScript引擎在执行代码时,每调用一个函数就会创建一个新的上下文并压栈,执行完毕后再弹出。这种“堆栈”模型解释了代码执行的严格顺序。 更深入地,作者剖析了执行上下文创建时的两个关键阶段。在真正的代码执行前,引擎会先进入“建立阶段”,完成变量与函数的声明、作用域链的构建以及this值的确定。这正解释了为什么函数内的变量可以在声明前被访问(值为undefined),而函数却可以立即调用。 通过对堆栈机制和建立阶段的拆解,文章把抽象的引擎内部行为变得可视化,帮助开发者从根本上理解代码的运行逻辑。

本机暂存
IT 前端/ 2013-01-10 22:37:34 / 累计浏览 4,473

jQuery旋转插件—rotate

这篇介绍的是一个实用的 jQuery 图片旋转插件,作者分享了这个小工具的调用方法和兼容性考量。它在不同浏览器下采用了不同的技术方案,在高级浏览器上利用 CSS3 Transform,而在老旧的 IE 6 等版本上则回退到 VML 来实现旋转效果,确保了广泛的兼容性。 插件的核心方法是 `rotate`。你可以直接传入一个角度数值进行旋转,也可以通过参数对象进行更精细的控制,比如设置初始角度,或者将旋转操作绑定到其他事件上(如点击),在事件内部还能方便地继续链式调用。 对于需要在网页中实现图片旋转,同时又必须兼顾各种新旧浏览器的项目来说,这个插件提供了一个现成的、考虑周全的解决方案。它把底层的兼容性细节封装起来,让开发者能用简洁的代码完成旋转交互。

本机暂存
IT 开发者/ 2013-01-10 22:34:59 / 累计浏览 4,805

Linux vimrc配置

这篇讲的是如何通过精心配置.vimrc文件,将Vim编辑器打磨成更趁手的效率工具。文章面向已经熟悉Vim基础操作的用户,核心价值在于提供了一套完整且经过注释的配置范例。 作者从.vimrc文件的作用入手,解释了它作为Vim行为控制中心的重要性。随后,文章详细拆解了一系列实用的配置项,不仅包括开启语法高亮、显示行号、设置搜索行为等基础功能,更深入讲解了通过设置tabstop、cindent、smartindent来优化代码缩进体验。文章的特色在于提供了大量提升操作效率的快捷键映射方案,例如用自定义前导键实现快速保存、在单词两侧添加括号、一键注释与取消注释等,并清晰地解释了每条命令的作用。 最后,文章还简要总结了Vim强大的map模式,鼓励读者在此基础上打造个性化的工作流。整个配置方案具体而微,从环境设置到快捷键定制层层递进,对于希望深入定制自己编辑环境的开发者来说,这份“菜谱”式的指南可以直接上手实践。

本机暂存
IT 设计/ 2013-01-10 22:32:07 / 累计浏览 4,314

从数据中了解用户——数据在现有产品改版设计中的应用

这篇文章聚焦于如何利用数据洞察来驱动成熟产品的改版设计,作者通过一个实际案例,展示了从问题发现到设计决策的全流程。 案例背景是商家服务平台上线后信息激增,导致用户难以找到所需内容。设计师没有仅依赖直觉,而是结合了多维度数据:一是通过页面埋点监控点击数与热图,发现导航分类与用户预期存在差距;二是利用反馈问卷收集用户痛点,发现分类名称混乱、内容杂乱;三是通过正式调研问卷,用类比法和随机选项等设计,验证了用户更偏好按“功能”分类的服务导航布局。 这些数据最终明确指引了设计优化方向:首页导航从原结构改为按功能模块划分,布局与命名直接参考调研结果;同时根据问卷反馈,新增了排行榜、最新服务、经验案例等需求旺盛的模块。整个过程体现了定量与定性分析如何互补——页面数据揭示“发生了什么”,问卷调研则帮助理解“为什么”以及用户偏好。 作者强调,在产品改版中,系统性地收集并分析页面行为数据与用户反馈,能让设计决策更贴近真实需求,避免陷入主观臆断或解决个案问题。

本机暂存
IT 设计/ 2013-01-10 22:30:54 / 累计浏览 4,414

从数据中了解用户——数据在新产品设计中的应用

这篇文章探讨了在新产品从0到1的设计过程中,如何超越传统的用户访谈,利用定量数据系统性地洞察用户需求。作者以早期“淘宝商家服务平台”为例,详细拆解了完整的方法论。 核心在于通过精心设计的网络问卷,收集了超5000份卖家样本的定量数据。问卷设计本身就有诸多技巧,比如将专业术语转化为日常用语、利用量表题提升效率等。数据分析并非简单看数字,而是通过描述统计和交叉分析挖掘变量间的逻辑关系,例如发现“店铺装修”和“推广营销”是卖家最急需的服务,且高低星级卖家的需求呈现差异。 这些数据结论直接塑造了产品形态:一级导航的排序优先展示了高需求服务;页面楼层的布局依据数据区分了官方工具与第三方服务的优先级;甚至页尾的入口设计也考虑了新卖家的特定需求。整个案例清晰地展示了,数据如何从客观实证的角度,为产品的定位和信息架构提供坚实依据,弥补定性访谈可能存在的个案局限。

本机暂存
IT 设计/ 2013-01-10 22:24:14 / 累计浏览 3,645

定性资料分析工具Stickysorter介绍

定性研究中,资料分析往往是最费时费力的环节。面对访谈、日记法等方式收集的大量文本信息,如何高效编码、分组和呈现逻辑关系,直接决定研究结论的质量。Stickysorter这款工具正是为此设计——它以数字便签的形式,将传统的卡片分类法搬上了屏幕。 它的核心优势在于极高的可视化灵活性。用户可以随意拖拽、堆叠或平铺便签,像在白板上贴便利贴一样自由重组信息。更关键的是它的多维分组功能:用六种鲜明颜色直观标记信息属性;通过创建“分群”功能,能将多个便签归入同一逻辑组,并统一管理。每个便签还支持自定义多个输入框,比如同时记录信息点内容和用户ID,方便交叉查询。 在实际应用中,例如一次对近80名消费者的笔记本购买决策研究,研究团队就用它来完成编码框建立、个案行为梳理、人群特征提取乃至行为原因的层次划分。工具将原本杂乱的信息流,转变为可拖拽、可着色、可分组的结构化视图,让分析过程变得清晰有序。对于任何需要处理大量定性资料、并从中寻找模式与关联的研究者,这种“数字化便签墙”或许正是提升效率的关键。

本机暂存