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

最新文章

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

IT 前端/ 2015-06-04 10:25:43 / 累计浏览 2,598

使用yuicompressor.jar实现对js、css文件的代码压缩

这篇文章提供了一套基于 YUI Compressor 的完整前端资源压缩方案。作者从实际需求出发,介绍了如何利用这个基于 Java 开发的 jar 文件,高效地将 JS 和 CSS 文件体积压缩至接近原文件的一半。 文章不仅讲解了基本的命令行用法,更核心的是分享了一个可直接使用的 Java 工具类代码。这个工具类能够递归遍历指定目录,自动识别所有 `.js` 或 `.css` 文件(排除已压缩的 `-min` 文件),并批量生成压缩命令进行处理。使用者只需修改 `yuiPath`、`filePath`、`fileType` 和 `encoding` 四个参数,就能轻松完成整个项目的资源压缩工作。 文末附上了工具的下载地址和具体的参数说明,方便读者即刻上手实践。这是一份从工具介绍到自动化实践,步骤非常清晰的实用指南。

本机暂存
IT 后端/ 2015-06-04 10:25:13 / 累计浏览 3,691

nginx 利用 rewrite 屏蔽IE浏览器

这篇讲的是前端开发中让人头疼的IE兼容性问题,作者从运维的角度切入,提供了一套通过Nginx rewrite规则直接屏蔽特定版本IE浏览器的配置方案。 具体来说,文章核心是利用Nginx的 `$http_user_agent` 变量,通过正则表达式匹配用户访问时携带的浏览器标识。例如,配置中示例的规则会拦截IE6到IE9版本的请求,并利用 `rewrite /ie.html break;` 指令,将这些请求重定向到一个静态的提示页面,从而避免前端因处理老版本IE而产生的额外工作。 文章不仅给出了可以直接使用的配置实例,还逐一解释了 `$http_user_agent`、`~*`、`MSIE` 以及 `break` 等关键参数的具体含义,让读者理解每一条配置背后的逻辑。为了方便验证效果,作者还推荐了IETester这款工具来模拟不同版本的IE环境。 此外,文章末尾整理了一份Nginx全局变量的速查列表,这不仅能帮助理解当前案例,也为读者在其他场景下灵活运用Nginx的重写模块提供了实用参考。整体来看,这是一个针对特定问题的轻量但有效的解决方案,兼顾了实操性与原理说明。

本机暂存
IT 算法/ 2015-06-04 10:23:39 / 累计浏览 1,753

在白板上写代码是有难度的

这篇讲的是技术面试中那个让不少人头疼的环节:白板编程。作者从自己作为微软团队面试官的经验出发,给出了一个核心观点——面试官真正在考察的,并不是你能否当场写出语法完美无误的代码。 他理解白板没有智能感知和语法高亮,因此不介意你出现参数顺序错误这类“小瑕疵”。真正看重的是你的问题解决过程:是急于动手,还是先理清思路?是否主动识别并澄清了需求中的模糊点?会优先攻克难点还是先处理简单的部分? 文章以几个经典面试题(如实现栈、打乱数组)为例,点明了关键:很多问题本身就暗藏陷阱,比如字符串处理需要考虑不同编码,数组随机化要区分安全场景与测试场景。忽略这些“真实世界”的考量,代码设计就无从谈起。 作者鼓励应聘者,在编写代码时就要像开发者一样思考:如何测试?如何处理异常输入?代码是否健壮、可维护?他认为,展现出这种工程思维,远比纠结于一时的语法记忆更能证明你的潜力。最后他也坦言,技术面试本就艰难,聪明如他也曾被拒,这本身就是一个值得准备的过程。

本机暂存
IT 移动开发/ 2015-06-04 09:56:04 / 累计浏览 2,458

R u ok--客户端网络优化实践

这篇讲的是客户端网络优化中那些让人头大的真实坑点。作者从和全国用户的大量“亲密接触”中总结出,用户愤怒的根源往往是网络状态切换时,应用没能及时恢复。 比如,你以为IP地址能定位用户,但实际会遇到IP库不准甚至运营商流量劫持;DNS可能不解析或被运营商插入广告;协议和端口也可能被拦截。这些“不可靠”的因素,单纯依赖服务器端策略很难根治。 文章的核心思路是“客户端必须能适应环境”。当网络从差变好时,应用必须迅速反应过来并恢复,而不是卡在旧状态。具体解法包括:不依赖IP而用smartDNS,维护好socket的连接状态机,在WiFi和不同移动网络下设置差异化的连接与发送超时,遇到EPIPE/ECONNRESET等错误时果断重连,以及准备多套协议与端口方案作为后备。 最后作者点出关键:网络可以时好时坏,但用户体验必须能“迅速恢复”。这些基于血泪教训的实战细节,对做移动端和跨平台开发的同学非常实用。

本机暂存
IT DevOps/ 2015-06-04 09:51:32 / 累计浏览 8,987

Zend Studio集成Git使用

这篇文章提供了一份在Zend Studio中集成和使用Git的详细操作指南。对于许多初次接触Git的开发者来说,其“本地库”与“远程库”分离的工作流以及分支概念往往令人困惑。文章正是从解决这个实际痛点出发,用清晰的步骤拆解了整个过程。 作者首先演示了如何在服务器端建立裸仓库,随后重点落在IDE中的具体操作:从初始化本地Git仓库、提交代码,到配置远程仓库并完成推送与拉取。文章特别指出了一个新手常踩的“坑”:当执行“Pull from Upstream”后,工具并不会自动合并远程更新,需要开发者手动执行“Merge”操作,这个细节描述得很到位。 在分支管理部分,文章不仅介绍了创建、切换和合并分支的命令与IDE操作,还贴心地提醒了切换分支时文件会暂时“消失”的正常现象,避免开发者惊慌。整体而言,这是一份从服务器配置到日常开发(如同步代码、管理分支)的全流程实用指南,适合那些希望在熟悉的IDE环境中快速上手Git的开发者。

本机暂存
IT 前端/ 2015-06-04 09:49:32 / 累计浏览 1,495

小tip: 了解CSS text-decoration新特性新表现

这篇讲的是CSS里大家用惯了的text-decoration属性,其实远不止下划线、删除线那么简单。作者从常见的链接下划线、商品原价删除线出发,先回顾了CSS2.1时代那些略显“古早”的取值:比如几乎没人用的上划线(overline)和已被浏览器抛弃的闪烁(blink)。 真正的升级来自CSS3。text-decoration不再是一个单打独斗的属性,它演化成了一系列属性。其中,text-decoration-style解锁了虚线、点线、双线、波浪线等新线型;text-decoration-color让我们终于能单独控制装饰线的颜色,告别“线条只能跟文字同色”的时代。 文章尤其探讨了text-decoration-skip这个颇具巧思的属性,它能控制装饰线是直接穿透字符和图片,还是智能地“跳过”它们(如ink模式)。尽管目前浏览器支持度有限,但作者也指出了Safari已默认采用了类似ink的行为,并提供了重置方法。文末附有完整的演示代码,能让你直观感受这些新旧特性的表现差异。

本机暂存
IT 设计/ 2015-06-04 09:43:46 / 累计浏览 2,872

设计为核,驱动商业

这篇讲的是Intuit这家美国财务软件巨头,如何在竞争激烈的市场中靠“设计”赢得长达30年的领先地位。文章以CEO的视角,回顾了公司从“功能优先”转向“设计驱动”的变革历程。 核心观点是“设计为愉悦而生”(D4D)。作者发现,产品仅仅“简单易用”还不够,必须创造情感联结,让用户感到愉悦。例如,他们收购的Mint通过自动导入银行数据,极大缩短了用户看到第一份饼图的“等待时间”;税务软件SnapTax让纳税人通过拍照W-2表格就能报税,有人甚至评价“终于能在浴缸里完成退税了”。 这场变革不只属于设计师。Intuit将设计思维推广至全员,鼓励工程师、产品经理甚至财务和人事部门思考如何优化体验。成效显著:客服求助电话减少了24%;在税务软件市场,其份额超过60%,营收持续增长。 文章指出,许多技术团队容易陷入“渐进式”改进,只关注功能和便捷。Intuit的转变证明,将情感与设计注入“必需但非热望型”产品,不仅能提升用户体验,更能直接驱动市场份额增长——这对所有技术产品的打造者都是一种启发。

本机暂存
IT 移动开发/ 2015-06-02 13:37:35 / 累计浏览 1,846

思考哪里可以推到重来

这篇讲的是,作者从一次规划伦敦旅行时遇到的打车痛点出发,引出了一个有趣的思考角度。当想到用Uber来解决传统出租车服务的低效环节时,他意识到这种“推倒重来”的思考方式本身就值得被提炼。 文章的核心并不是介绍Uber这个产品,而是借其成功重塑打车行业的案例,分享了一套极具操作性的“重新思考”心法。作者总结了六个关键问题,引导我们从识别不满开始,层层深入地剖析现有流程的症结:哪里效率低下?如果优化会怎样?整个流程为何如此设计?假设完全打破障碍何在?以及最终,一个理想的重构方案应该是什么样。 这更像是一篇关于思维训练的观点分享。它鼓励我们不满足于现状,主动去发现生活中那些“不太对劲”的环节,并尝试用系统化的方式去构想更好的解决方案。对于技术人或产品思考者而言,这套从具体痛点到抽象重构的思考步骤,提供了一个非常实用的创新思维脚手架。

本机暂存
IT 设计/ 2015-06-02 13:36:34 / 累计浏览 1,615

创业常犯的6个产品错误

作者从自身经历出发,总结了创业过程中,常被忽视的六个产品层面错误。这些错误并非技术问题,而是关乎对需求的理解、对市场的敬畏。 核心观点是,许多创业失败源于用工程师思维或资源思维代替了产品思维。比如,总以为“就差个程序员”,却忽略了市场风险远大于技术风险;或者“憋大招”封闭开发,错过了精益创业中快速验证的机会。文章还批判了“我觉得用户一定喜欢”的主观臆断,以及“盯着竞品先抄后超”的跟随策略,指出这很难带来真正的创新。作者强调,在资源和风口面前,创业者更需要具备产品经理般的用户洞察力和持续学习能力,将“懂用户”视为最重要的资源。 整篇文章的启发在于,创业的原动力应是解决问题的使命感,而非单纯追逐风口。具备产品经理的能力,是规避这些常见陷阱、让创业之路走得更稳的关键。

本机暂存
IT 安全/ 2015-06-02 13:35:22 / 累计浏览 2,564

搭建自己的CA服务 – OpenSSL CA 实战

这篇讲的是如何用OpenSSL从零搭建一个私有CA服务,特别适合那些内部节点间需要SSL加密通信,又不想向公共CA支付证书费用的场景。 作者从“内部通信也需要安全认证但成本高昂”这一现实问题出发,提供了一份完整的OpenSSL自建CA实战指南。文章的核心是手把手的操作流程:从准备关键的openssl.conf配置文件开始,一步步创建CA自己的私钥、自签根证书,再到用这个CA为其他服务器颁发和签署证书。每一步都配有可直接运行的详细命令行示例,比如生成4096位RSA密钥、设置证书主体信息等,可操作性很强。 通过搭建自己的CA,你可以完全掌控内部系统的证书颁发与管理,既确保了节点间通信的安全性,又省去了向第三方CA申请证书的开销。对于需要快速为内部服务批量建立信任关系的运维和开发人员来说,这套自给自足的方案相当实用。

本机暂存
IT DevOps/ 2015-06-02 13:34:32 / 累计浏览 3,317

详解Linux bash中的变量

这篇详细拆解了Linux bash中的五种核心变量类型:本地变量、局部变量、环境变量、位置变量和特殊变量。作者从实际的运维与脚本编写场景出发,不仅区分了每种变量作用域的差异——例如本地变量作用于整个bash进程,而局部变量(通过local定义)仅限于当前代码段——还深入讲解了它们具体的用法与约束。 文章特别强调了环境变量如何通过`export`传递给子进程,以及位置变量($1, $2...)和`shift`命令在参数处理中的配合使用。对于日常脚本编写至关重要的特殊变量,如`$?`(上一条命令的返回值)、`$#`(参数个数)和`$*`与`$@`的区别,也都有清晰的示例说明。这些细节对比,能帮助你准确选择和使用不同变量,避免脚本中出现作用域混淆或参数传递错误的问题。

本机暂存
IT 前端/ 2015-06-02 13:32:28 / 累计浏览 3,397

JavaScript 中的 相等检测

这篇讲的是 JavaScript 开发者几乎都会遇到的经典困惑:相等比较。作者直接从那个让人抓狂的表格切入,将松散相等(==)和严格相等(===)的各种比较结果,用一张巨幅表格直观地呈现出来,比如 `0 == ""` 居然返回 `true`,而 `NaN == NaN` 却是 `false`。 表格的每一格都是一个具体的“坑”,清晰展示了 JavaScript 在类型转换时那些违反直觉的行为。这不仅仅是知识点的罗列,更像是一份“避坑指南”。文章通过可视化对比,点明了这些差异背后的核心:松散相等会进行隐式类型转换,而严格相等则同时比较值和类型。 对于开发者来说,理解这张表格是写出可靠、可预测代码的基础。它帮助我们在日常编码中快速决策:何时可以利用松散相等的便利,又在何时必须使用严格相等来避免隐蔽的 bug。

本机暂存
IT DevOps/ 2015-06-02 13:29:13 / 累计浏览 4,341

一个开发眼中的运维

这篇讲的是前新浪SAE运维主管郑志勇如何用开发思维重塑运维认知。作者从开发转型运维的亲身经历出发,提出了一个关键视角:运维与开发本质相通,核心都是管理资源。 文章首先厘清了运维的定位——不是打杂或服务开发,而是对业务稳定负责,保障系统架构合理。作者将程序设计的抽象、分层思想引入运维,提出“一切运维对象都抽象为资源”,这样就能用统一的方法进行配置和监控。他详细拆解了运维的资源观:不仅是硬件,还包括文件描述符、端口、数据库连接等一切可管理对象。 文章最实用的部分在于总结的运维原则。比如线上变更必须通过配置管理,任何手工操作都是对团队改进机会的浪费;系统上线前必须回答如何保障HA、扩展和监控。作者还强调配置管理的三大核心要素——包、文件和进程,认为只要控制这三者就能掌控整个系统。最后提出的“不犯第三次错误”和“运维越清闲,系统越稳定”等观点,直指运维工作的长期主义思维。 这些从实战中提炼的抽象方法论,尤其适合正在寻求体系化提升的运维人员,或希望与运维更好协作的开发者。

本机暂存
IT 开发者/ 2015-06-02 13:27:00 / 累计浏览 14,047

什么是全栈工程师?

这篇讲的是当下IT行业里一个很火的角色——全栈工程师(Full Stack developer)。文章首先解释了为什么企业越来越需要这类人才:现代互联网项目技术栈复杂,从后端、前端、数据库到移动端、API设计等环环相扣,企业需要有人具备全局视野来掌控项目;同时,为了降低不同技术背景成员间的沟通成本,也需要能打通前后端的“翻译官”;对于资源有限的创业公司而言,能独当多面的全栈工程师更是节省人力成本的“妙招”。 不过,文章也指出了全栈工程师面临的现实困境。作者将其比喻为技术“瑞士军刀”,虽然应用广泛,但可能不如专精某个领域的“干将莫邪”锋利。这导致他们在面试时容易被基础知识问题难倒,或被误解为技术不精。此外,由于需要穿梭于多种技术栈,他们常常需要依赖搜索来查找API和语法,这在一些人看来是技术能力不足的表现。 文章最后探讨了技术发展的横向(广度)与纵向(深度)路径,并指出两者终会融合,正如禅修的“南顿北渐”,最终殊途同归。

本机暂存
IT 前端/ 2015-06-02 13:18:39 / 累计浏览 3,653

React初探

这篇文章讲的是作者对前端框架React的初体验和核心优势分析。React被视为前端领域的一次革新,它通过虚拟DOM和组件化的方式,重新定义了UI的构建逻辑。 作者从Hello World示例出发,展示了React如何通过JSX语法和组件类封装UI。文章重点拆解了React的几大优势:虚拟DOM通过内存中的DOM diff算法,大幅提升了性能,避免了直接操作真实DOM的高昂代价;组件化开发则鼓励将UI拆解为独立、可复用的模块,让代码结构更清晰。此外,React作为View层库,还兼顾了前后端统一和SEO友好,能兼容到IE8。 当然,作者也客观指出了React在初期存在基础包体积较大、与传统开发习惯有差异等挑战。整体来看,这篇初探为想了解React为何快速流行、其设计哲学与传统方式有何不同的开发者,提供了一个清晰的入门视角。

本机暂存
IT 算法/ 2015-06-02 13:17:58 / 累计浏览 2,506

用 JS 复制艺术

这篇讲的是作者如何用 JavaScript 来模仿著名艺术家草间弥生的点画作品《无限网》。作者首先细致观察了原作,发现其特点在于圆点大小不一、带有扭曲且互不重叠,整体呈现出一种有序的流动感。 核心实现思路相当巧妙。作者没有追求像素级的完美复制,而是选择用最基础的循环和数学函数来近似。通过嵌套的循环遍历画布的像素坐标,利用正弦与指数函数的组合来计算每个圆点的位置与半径,并加入了随机偏移来模拟手绘的不规则感。仅仅几十行纯 JavaScript 代码,就生成了视觉上高度接近的波点图案,展现了代码生成艺术的简洁与强大。 文章最终呈现的效果令人印象深刻,不仅是一个有趣的技术试验,也证明了用简单算法可以逼近复杂的艺术效果。文末还附上了社区用户更精确的实现方案,体现了技术实现的多样性与迭代可能。

本机暂存
IT DevOps/ 2015-06-02 13:16:24 / 累计浏览 4,075

Linux发展编年表

这篇讲的是Linux如何从芬兰学生Linus的个人项目,一步步成长为驱动当今世界的关键力量。作者用一条清晰的时间线,梳理了这个“24年计算机革命”中的关键节点。 摘要里,你可以看到Linux内核的第一个版本如何诞生,以及为何Linus认为将它切换到GPL协议是“做过的最正确的事”。文章也记录了早期关于微内核与宏内核的著名论战,以及第一个成功发行版Slackware和Debian的出现。从Red Hat开始商业化,到Google搜索引擎基于Linux构建,再到2007年Android的发布,文章勾勒出Linux如何从服务器走向桌面、手机和云端。 这些里程碑事件不仅是技术演进,更是一段开源社区与商业力量交织的成长史。文章最后停在2013年Valve推出基于Linux的SteamOS,记录了Linux在游戏领域的新尝试。整篇文章像是为开源爱好者准备的一份详尽档案,让读者能直观感受一个理想如何改变世界的技术底座。

本机暂存
IT 前端/ 2015-06-01 23:40:42 / 累计浏览 2,721

CSS3 transform对普通元素的N多渲染影响

这篇讲的是CSS3 transform如何在“表面无恙”的情况下,给普通元素带来一系列深远的渲染影响。作者从几个经典场景出发,演示了transform会如何悄无声息地改变元素的行为规则。 例如,给元素添加`transform: scale(1)`这样看似无意义的属性,却能让它像设置了`position: relative`一样,提升垂直地位并覆盖后面的兄弟元素。它还能“降服”`position: fixed`,使其固定定位效果在包含`transform`的父容器中失效,降级为`absolute`。此外,transform也会影响`overflow`对绝对定位元素的裁剪规则,以及改变`width: 100%`的计算基准。 文章通过清晰的示例和代码,揭示了这些容易被忽视的特性及其在不同浏览器下的细微差异,对前端开发者排查布局陷阱非常有实用价值。

本机暂存
IT 数据库/ 2015-06-01 23:35:32 / 累计浏览 3,097

ORACLE怎样将CHAR类型字段转换成CLOB

这篇讲的是Oracle数据库中一个常见但细节不少的字段类型转换问题。文章直接切入实操,演示了如何将CHAR类型的字段转换为CLOB类型。它分了两种场景来具体说明:一种是目标列当前为空,另一种是列中已经存放了数据。 针对这两种情况,文章分别给出了转换的SQL思路和操作步骤。对于空列,操作可能相对直接,而列中已有数据时,则需要考虑数据的迁移与处理。通过具体的表结构示例(比如sdb_b2c_goods表)和代码演示,让读者能清晰地看到每一步操作。 对于需要调整表结构、迁移大文本数据的开发者或DBA来说,这篇文章提供了一个非常清晰的、分场景的解决方案参考,避免了自己摸索可能遇到的数据丢失或转换错误问题。

本机暂存
IT 前端/ 2015-06-01 23:26:14 / 累计浏览 2,852

javascript双向数据绑定

这篇技术文章深入浅出地讲解了JavaScript中的双向数据绑定。作者以AngularJS中的经典特性为引,指出其核心优势在于视图与数据模型的自动同步,免去了繁琐的手动DOM操作,但也客观说明了其局限性,比如在游戏或图形编辑器这类高频复杂交互场景中并不适用。 文章的重点在于剖析实现原理,将其拆解为“识别绑定、监视变化、传播变化”三步,并展示了两种落地方式。一种是基于jQuery的简洁实现,利用了其成熟的事件订阅发布能力;另一种则是原生的JavaScript实现,通过构建一个发布者-订阅者模式的数据绑定器,巧妙地将DOM事件监听与模型更新连接起来,代码逻辑清晰且具有启发性。 文末,作者还对比了观察者模式与Angular内部采用的“脏读”机制,指出前者实时高效,后者则在特定事件触发后批量检查,性能开销不同。这种从概念到实践,再到不同方案取舍的梳理,帮助读者不仅理解“是什么”,更看清了“如何选”和“为什么”。

本机暂存