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

最新文章

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

IT 前端/ 2015-06-01 23:25:30 / 累计浏览 3,581

javascript依赖注入

这篇讲的是如何在JavaScript中实现依赖注入。作者从控制反转(IoC)这个面向对象的核心法则入手,解释了依赖注入(DI)作为其流行实现方式的价值——它能让复杂程序模块化,便于测试与维护。 文章的目标很明确:如何设计一个“注入器”(injector)模块,让函数能自动获得所需的依赖,而无需硬编码或每次手动传递参数。作者首先实现了一个模仿RequireJS/AMD风格的方案,通过显式声明依赖数组来解析注入,但这需要开发者重复书写依赖项。 更精彩的部分在于第二种方案:利用JavaScript的反射能力,直接解析函数源代码中的参数名,从而自动匹配并注入对应的依赖。这借鉴了AngularJS的思路,让使用语法更简洁,也更“魔法”。然而,作者也指出了这种反射方法的阿喀琉斯之踵:代码压缩会改变参数名,导致依赖映射失败。 最终,文章通过对比这两种实现(显式声明与反射)的优劣,探讨了如何平衡开发便利性与生产环境的健壮性。它不仅给出了一个可复用的injector模块实现,更清晰地展示了在JavaScript中实现依赖注入的核心思路与现实挑战。

本机暂存
IT 算法/ 2015-06-01 23:17:53 / 累计浏览 4,381

建立动态规划状态转移方程的练习

这篇文章通过LeetCode上的八个经典题目,生动演示了如何攻克动态规划中最核心的一步:建立状态转移方程。作者从自身的复习笔记出发,挑选了Word Break、Unique Paths、Edit Distance等覆盖字符串、网格、树结构等多个领域的典型问题,逐一拆解其思考过程。 文章的核心观点是,解动态规划题的本质在于“状态识别”和“状态转移方程建立”这两步。像循环与递归的选择、空间换时间的优化,都只是实现技巧而非核心。例如,在解“三角形最小路径和”时,关键在于定义从底层向上积累的最短路径值f(i, k),并建立f(i, k) = min(下一层相邻状态) + 当前值的递推关系。对于“交错字符串”问题,则需定义f(i, j)表示两个子串前缀能否形成目标前缀,并据此建立逻辑或的转移方程。 作者没有停留在给出公式,而是试图还原每道题背后的状态定义逻辑。这种从具体例子提炼通用思考方法的叙述,让抽象的“建立方程”变得可触摸。对于正在学习动态规划的人来说,跟随这八个问题的思路走一遍,能有效训练如何从问题描述中提取状态,并找到状态之间递推关系的“感觉”。

本机暂存
IT 设计/ 2015-06-01 10:07:22 / 累计浏览 4,263

及格的产品vs优秀的产品

这篇文章探讨了“及格”与“优秀”产品设计的微妙差别。作者从“用户体验”这一常被提及却难以捉摸的概念入手,通过三组具体产品的功能对比,将差异清晰地呈现出来。 文章选取了听歌识曲、手机支付、叫车引导页这几个常见功能,对比了音乐雷达与微信摇一摇、支付宝与微信支付、快的与滴滴的不同设计。例如,在支付流程中,微信支付将密码简化为6位数字并去掉了确认按钮,而支付宝虽也简化了密码,却保留了冗余的确认步骤和复杂的信息层级,设计功底高下立判。作者指出,及格的产品能完整地实现流程,而优秀的产品则致力于让流程极简、元素不可再减,让用户能毫无负担且愉悦地完成任务。 其核心观点一针见血:产品经理的思维往往还停留在“完成任务”,而优秀的产品设计已经在思考如何“愉悦地完成任务”,这正与用户日益追求便捷、高效的心智模型演进相契合。文章最后用一张生活中的对比图,直观地提醒所有设计者:别只满足于让东西“能用”,而要努力让它“好用”甚至“爱用”。

本机暂存
IT DevOps/ 2015-06-01 10:05:21 / 累计浏览 4,297

云计算时代:运维人员会踩到哪些坑?

这篇整理自ChinaUnix论坛热议的文章,汇集了多位一线运维人员的实战经验,直面云计算时代运维岗位的核心挑战。讨论焦点并非空谈理论,而是紧扣具体痛点:当服务器从百台暴增至万级,自动化运维如何落地?虚拟化资源池化后,故障定位为何反而更难?文中网友分享了Zabbix、Nagios、Cacti等开源监控工具的部署心得,也直言云磁盘I/O变慢往往是资源争抢或自身程序问题所致,解决方法需“对症下药”。 更关键的是职业转型的讨论。有网友犀利指出,跟不上自动化运维趋势的“手工作坊式”运维将面临淘汰;也有人强调,云平台运维本身创造了更高价值的新岗位,技能要求水涨船高。关于混合云服务商的选择,讨论也具体到阿里云、腾讯云乃至自建平台的性价比权衡。整场对话没有简单结论,而是呈现了云时代运维复杂性的真实切面——技术工具更迭、故障排查逻辑变化与个人技能升级,这三者构成了运维人员必须同时应对的挑战。

本机暂存
IT 前端/ 2015-06-01 10:03:59 / 累计浏览 6,323

正则表达式基础

这篇讲的是JavaScript正则表达式的入门指南。作者从自己阅读Underscore源码时频繁“踩坑”的经历出发,坦言曾因畏难而回避正则,但最终发现理解核心思想后,配合实践就能掌握。文章系统梳理了正则表达式的核心概念。 从最基础的元字符及其转义讲起,作者逐步介绍了特殊字符、字符类(包括简单类、负向类、范围类、组合类与预定义类如\d、\w)、量词(覆盖了?、*、+以及{n,m}等简单量词,并清晰区分了贪婪与非贪婪模式的行为差异),最后讲解了使用小括号()进行分组的技巧,允许对多个字符进行整体匹配或捕获。文章穿插了丰富的JavaScript代码示例与测试结果,力求直观。 作者还推荐了一款可视化工具帮助理解正则。整篇文章的落脚点在于:正则表达式并非想象中那般艰难,关键在于厘清概念、多加思考与实践。

本机暂存
IT 前端/ 2015-06-01 09:56:42 / 累计浏览 4,613

HTML页面布局基础

这篇讲的是CSS布局中两个最基础也最容易踩坑的概念:盒子模型和定位。作者坦言,虽然大家都知道这些知识,但实际开发中总会在细节上翻车。 文章首先拆解了盒子模型。标准盒子模型中,元素宽度仅指内容区;而怪异模式(IE盒子模型)下,宽度则包含了内边距和边框。CSS3通过`border-sizing`属性让你可以自由切换:默认是`content-box`(标准),设为`border-box`则进入怪异模式。作者附上了直观的代码和效果对比图,清晰展示了两种模式下实际渲染尺寸的差异。 定位部分则聚焦于`position`属性。重点区分了相对定位和绝对定位:相对定位元素会“赖在”原文档流位置不走,只是视觉上偏移;绝对定位则彻底“脱离队伍”,其位置由最近的非`static`祖先决定。文章通过代码示例和截图,演示了普通流、相对定位与绝对定位下元素布局的动态变化,特别是绝对定位如何通过`z-index`控制层叠顺序。 整体来看,这是一篇针对前端开发者常犯细节错误的实用回顾,用对比的方式把基础概念讲透了。

本机暂存
IT 安全/ 2015-06-01 09:54:58 / 累计浏览 3,198

NodeJs下的Web安全

这篇文章聚焦于Node.js应用面临的Web安全威胁及防御之道。它系统地拆解了从基础到进阶的多种攻击模式,每种都清晰地阐述了攻击原理与具体防范措施。 比如,针对SQL注入,文章展示了恶意参数如何拼接出`drop table`的毁灭性语句,并强调对用户输入进行过滤是关键。对于XSS脚本攻击,作者提醒要保持对用户数据的怀疑,并推荐了具体的过滤模块。文章还深入讲解了CSRF请求伪造、HTTP管道洪水漏洞,以及包括Slowlori慢速攻击、超大Buffer耗尽内存在内的多种应用层DoS攻击手法。 除了这些经典问题,内容也延伸至Node.js开发中特有的风险点,如因直接拼接文件路径导致的目录遍历漏洞,以及MD5等传统加密方式因彩虹表而变得不安全的现状。文末的总结建议,将Node.js应用部署在Nginx之后、对输入进行严格过滤,是极具操作性的生产环境防护指南。

本机暂存
IT 安全/ 2015-06-01 09:50:44 / 累计浏览 3,463

nginx访问控制Access Control的问题

这篇讲的是nginx中一个容易踩的坑:使用`allow`和`deny`配置IP访问控制时,规则可能出乎意料地“不生效”。 作者通过一个实际配置进行测试:在server块禁用了IP `211.81.175.6`,在`location /nginxacc`块禁用了IP `211.81.175.8`。预期结果是前者全站不可访问,后者仅目录受限。但实际测试发现,IP `211.81.175.6`竟然能访问`/nginxacc`,而IP `211.81.175.8`却可以访问根目录。 问题的根因在于nginx的访问控制规则继承机制。如果子级(如location块)定义了任何ACL规则,它就**不会**继承父级(如server块)的规则,而是完全使用自己定义的规则列表。这意味着,虽然IP `211.81.175.6`在server层被禁,但在`/nginxacc`这个location里没有重新声明禁止,因此该location的访问是被放行的。 文章引用了nginx源码作为依据。这个发现提醒我们,在设计多层级访问控制时,必须清楚理解规则的继承与覆盖逻辑,不能想当然地认为规则会自动累加。否则就可能出现安全策略漏洞,本该封锁的IP反而获得了访问权限。

本机暂存
IT DevOps/ 2015-05-29 22:00:02 / 累计浏览 5,327

SNMP概述–运维必知的协议基础

这篇讲的是运维人员必须掌握的基础协议——SNMP。文章从“为什么需要远程网络管理”这个现实痛点出发,解释了SNMP如何让一个工作站就能监控成千上万设备。它详细拆解了SNMP的核心架构,包括被管设备、Agent代理和管理站这三个组件是如何通过UDP通信的,并梳理了GET、SET、TRAP等基本操作。 作者重点对比了SNMP的三个版本,指出早期版本因安全性薄弱已逐渐被弃用,而SNMPv3通过引入USM安全模式、身份验证(如MD5/SHA)和加密(如AES)等机制,实现了对消息篡改、伪装和窃听的防护,是当前的主流选择。文章最后还提供了在Linux系统上安装、配置并使用net-snmp服务的具体步骤,让理论落地。 总的来说,这是一篇从概念、原理到实战操作的完整入门指南,帮助运维人员快速建立对这个“简单”却无处不在的协议的系统认识。

本机暂存
IT DevOps/ 2015-05-29 20:12:59 / 累计浏览 7,872

Mac下使用SecureCRT的一些记录

这篇记录讲的是作者在Mac上使用SecureCRT终端连接软件时,亲身经历并解决的两个典型“坑”,以及积累的快捷键心得。 核心问题之一在于“密码总是存不住”。作者发现,这是SecureCRT在Mac上默认启用了系统“钥匙串访问”来管理密码所导致的。解决方法很具体:进入软件全局选项的Advanced设置页,取消勾选Use Keychain,即可让SecureCRT使用自带的密码保存功能。 另一个更隐蔽的问题是“CTRL+C发不出中断指令”。作者排除了键盘故障,尝试了各种设置均无效,最终意外发现根源在于输入法:必须将输入法切换至系统自带的“美式英文”,才能正常发送中断信号,即使切换至第三方输入法的英文模式也不行。 此外,文章还整理了一份Mac版SecureCRT与Windows版在快捷键上的差异列表,比如使用Command+L快速新开标签页连接,Command+K新建会话等。这些基于实践的小结,对于经常在Mac上进行远程连接的开发者来说,或许能省去不少摸索的时间。

本机暂存
IT 数据库/ 2015-05-29 20:11:59 / 累计浏览 2,391

ORACLE和SYBASE数据库中实现数据查询条数限制的SQL语句实现

这篇技术分享讲的是一个常见但容易混淆的数据库操作细节:如何在查询时限制返回的数据条数。作者以一个包含7条记录的员工信息表为例,分别演示了在ORACLE和SYBASE两种主流数据库中的实现方式。 在ORACLE中,核心是利用伪列`rownum`,直接在`WHERE`子句中加入`rownum <= 5`这样的条件即可,简洁直观。而在SYBASE里,则需要通过`set rowcount 5`语句来设置,但紧接着必须用`set rowcount 0`将其重置,否则这个限制会持续影响后续所有查询操作,这是一个需要特别注意的关键陷阱。 文章的价值在于,通过最简单的示例,清晰地揭示了这两种数据库在语法和用法逻辑上的根本差异。对于需要处理海量数据、必须进行分批查询以保证系统稳定性的开发者而言,掌握这些具体语法并警惕其中的“坑”,是写出高效、健壮SQL语句的基础。

本机暂存
IT 前端/ 2015-05-29 20:10:43 / 累计浏览 2,132

JavaScript中真正的哈希映射(译)

这篇讲的是JavaScript中如何创建真正的哈希映射。作者从日常使用对象字面量存储键值对的隐患出发,指出问题的根源在于对象默认继承自Object原型,导致`in`操作符等检查会污染原型链上的属性(比如`toString`),造成键值判断失误。即使尝试用`hasOwnProperty`方法,也可能因键名冲突而失效。 文章的核心解决方案是利用ES5引入的`Object.create(null)`来创建一个没有任何原型的“空对象”。这种对象彻底摆脱了原型链包袱,`in`操作符能可靠地只检查自身属性,`for...in`循环也不再需要过滤。同时,它依然支持常规的对象操作,如属性访问和JSON序列化。 简单来说,作者提供了一个清晰实用的思路:用`Object.create(null)`替代普通对象字面量,就能获得一个干净、安全的键值存储结构,避免一系列隐蔽的陷阱。对于更复杂的需求,文章也提到了ES6标准中的`Map`和`Set`。

本机暂存
IT 前端/ 2015-05-29 20:10:08 / 累计浏览 10,061

iframe大小自适应

这篇讲的是如何实现iframe高度自适应,起因竟然是一个前端面试题。作者坦诚自己最初也对iframe有“性能差、不友好”的偏见,但深入研究后发现它在嵌入第三方内容时不可或缺。 文章的核心是针对两种场景给出了解决方案。在同域下,方法很直接:JavaScript可以直接访问iframe内部DOM,获取其滚动高度和宽度,然后设置给外层iframe标签,轻松实现自适应。但更挑战的是跨域场景,由于同源策略限制,父页面无法直接操作iframe内容。 为此,作者巧妙地利用了一个“代理页面”作为桥梁。在跨域的iframe内部,通过一个隐藏的iframe将页面尺寸信息编码到location.hash中,传递给这个代理页面。由于代理页面与父页面同源,它就能安全地读取这些信息,并反过来设置父页面中iframe的大小。这个方法虽然步骤多一些,但思路清晰,有效绕过了安全限制。 作者还特别提醒了开发测试时需要用本地服务器,避免浏览器直接访问文件导致的权限问题。文章最后附上了完整的Node.js测试代码和参考文献,方便读者动手实践和深入研究。

本机暂存
IT 前端/ 2015-05-29 20:09:14 / 累计浏览 2,885

BFC(Block formatting contexts)初探

这篇讲的是前端开发中一个常见但容易模糊的概念——BFC(块级格式化上下文)。作者从自己面试和开发中遇到的困惑出发,系统梳理了BFC的定义、核心布局规则以及触发条件。 文章没有停留在理论,而是重点通过三个经典案例,演示了BFC的实际作用:如何利用它实现自适应两栏布局、有效清除内部浮动,以及防止外边距(margin)的垂直重叠。这些例子直指日常开发中的痛点,比如浮动带来的高度塌陷问题。 作者最后总结了关键点:BFC本质上是一个隔离的独立容器,其内外元素互不影响。理解这一点,就能明白为何BFC能解决上述布局难题。对于前端开发者而言,这篇文章能帮助理清BFC这个“既熟悉又陌生”的概念,并将它切实应用到解决实际问题中。

本机暂存
IT 安全/ 2015-05-29 20:06:50 / 累计浏览 17,475

微信扫码登录网页实现原理

这篇文章从作者的一次腾讯面试经历出发,深入剖析了微信扫码登录网页版的核心技术原理。作者通过浏览器工具抓包,逐步拆解了整个流程:首先,网页会生成一个包含唯一临时ID(uid)的二维码;同时,前端会通过创建一个长连接(长轮询)来持续监听该uid的扫描状态。如果扫码超时(约27秒),服务器会返回408状态码;一旦手机端扫码,即上报uid与手机令牌的绑定关系,长轮询便会收到201状态码,网页随即跳转至确认页面。最终用户在手机确认后,服务器才会下发授权令牌,完成整个登录交互。 文章的巧妙之处在于,它清晰地揭示了微信如何利用“长轮询”实时性好、轮询次数少的特点,高效同步了网页与手机端的状态。同时,通过临时uid、网络断开后令牌失效等机制,在便利性与安全性之间取得了不错的平衡。作者结合实际的网络请求代码片段和状态码截图,让这个看似复杂的流程变得直观易懂。

本机暂存
IT DevOps/ 2015-05-29 20:05:15 / 累计浏览 2,899

ssh 免密码登录

这篇讲的是如何通过三个关键命令快速配置SSH免密码登录,免去每次连接都输密码的麻烦。作者从实际操作出发,清晰拆解了`ssh-keygen`生成密钥对、`ssh-add`管理密钥、`ssh-copy-id`分发公钥这三个核心步骤。 文章特别指出了一个容易踩坑的细节:`ssh-copy-id`这个方便的工具其实属于`openssh-clients`包,而不是`openssh`包本身。作者通过直接列出两个软件包的文件清单,让读者一眼就能看清这个差异。 掌握这套方法后,无论是日常运维还是脚本自动化,都能更顺畅地连接远程服务器。理解包之间的区别,则有助于在不同Linux发行版上准确找到和安装所需工具。

本机暂存
IT 数据库/ 2015-05-29 20:03:57 / 累计浏览 3,394

在ORACLE 12C RAC中使用in memory特性请注意parallel_degree_policy和parallel_force_local参数

这是一篇典型的故障排查文章。作者在对Oracle 12C RAC的In-Memory特性进行测试时,遇到了一个棘手的问题:在清空缓冲区缓存后,测试总是意外触发大量并行操作,导致结果不准确。 经过与Oracle官方协作排查,最终定位到问题的根源在于两个关键参数的默认设置不匹配In-Memory的最佳实践。具体来说,参数`parallel_degree_policy`被设为了`AUTO`,而`parallel_force_local`则是默认的`false`。在RAC环境下,这种组合会导致并行执行计划不符合预期。 文章通过具体的SQL操作和执行计划对比,清晰地展示了问题表现:从执行计划中可以看到“automatic DOP: Computed Degree of Parallelism is 2”的提示,并且明确标注了“parallel scans affinitized for inmemory”,这证实了In-Memory特性已被触发。解决方法就是根据RAC环境的需要,正确调整这两个参数的值。 对于计划在RAC集群中使用In-Memory功能的DBA来说,这篇文章提供了一个非常实用的避坑指南。它提醒我们,在启用强大的新特性时,往往需要仔细检查并调整相关的并行处理参数,才能确保其发挥出应有的性能优势。

本机暂存
IT 前端/ 2015-05-29 20:00:11 / 累计浏览 2,606

用 Virtual DOM 加速开发

这篇讲的是从传统 HTML 模板引擎过渡到 React 的 Virtual DOM,如何改善前端开发体验。作者以简聊(by Teambition)项目从 Backbone 转向 React 的实践为切入点,首先分析了传统字符串模板(如 doT.js)的局限:组件化困难(如前端无法直接 include 文件)、模板缩进产生多余空白、以及潜在的 JavaScript 注入风险。 接着,文章介绍了 React 的 JSX 规范——一种在 JavaScript 中编写类 XML 结构的方法。JSX 经过 Babel 等工具编译后,实际生成的是 React.createElement 函数调用,从而构建出一个轻量的、JSON 格式的 Virtual DOM 树。这个虚拟层是核心:当组件的 props 或 state 变化时,React 会重新生成 Virtual DOM 树,并通过高效的 Diff 算法计算出最小化的 DOM 更新操作,从而避免了繁琐的手动操作。 与传统模板相比,Virtual DOM 带来诸多优势:自动排除无意义空白、字符串自动转义防注入、JSON 结构天然支持组件组合,并且 JavaScript 可在 Node.js 和浏览器间共享代码。最终,这种声明式、数据驱动的开发模式让开发者从 jQuery 式的 DOM 操作中解放出来。文章末尾还提到,Virtual DOM 的理念正催生出 React Native、React-Canvas 等跨平台新可能,展示了这一架构的延伸价值。

本机暂存
IT DevOps/ 2015-05-29 19:56:20 / 累计浏览 1,736

Nagios+OMSA监控dell设备硬件

这篇讲的是,如何用 Nagios 和 Dell OMSA (OpenManage Server Administrator) 配合,实现对 Dell 服务器硬件状态的实时监控。 文章的出发点很明确:虽然 Nagios 等监控工具很流行,但它们默认更侧重于服务与应用层的监测。对于服务器本身的硬件健康状况,比如 CPU 温度、风扇转速、存储阵列状态、机箱入侵检测等,则需要额外的解决方案。作者详细演示了整套部署流程。 核心方案分为两部分。在 Nagios 服务端,关键是下载并配置 `check_openmanage` 插件。文章提供了具体的命令定义示例,比如如何检测 CPU、存储、温度等,并且解释了插件的各类 `--only` 参数,让读者可以根据需要定制监控项。 在被监控的 Dell 物理服务器上,则需要安装 Dell 的 OMSA 管理套件。文章给出了在 CentOS 系统上配置 yum 源并安装 `srvadmin-all` 的完整命令。安装成功后,不仅 Nagios 可以通过插件获取硬件数据,管理员还可以通过浏览器访问服务器的 1311 端口,直接查看 OMSA 的 Web 管理界面。 整篇文章是一份非常具体的实操指南,从环境准备到每一步的配置修改都写得很清楚。对于需要管理 Dell 物理服务器运维的工程师来说,它直接给出了一个可用的监控方案。

本机暂存
IT 开发者/ 2015-05-29 19:55:50 / 累计浏览 1,776

我的移民故事

这篇讲述的是一位俄罗斯程序员移民美国、并最终创业的真实历程。作者从2005年通过暑期工项目登陆华盛顿当救生员学英语开始,经历了远程实习、多次H-1b签证抽签失利,为维持合法身份而就读巴布森学院MBA。期间他先后在波士顿小公司、诺基亚和硅谷初创公司工作,始终在“为雇主工作”与“渴望创业”的移民政策夹缝中寻找出路。转折点出现在一次看似幸运的绿卡抽签中,但背景调查又与失业时间重叠,几乎将他推向绝境。最终在2012年,他抓住时间窗口创立了Datanyze。 文章不仅是一段个人奋斗史,更通过亲身经历揭示了美国移民制度与创新生态之间的矛盾——H-1b签证限制人才流动,缺乏企业家签证使得许多创业者无法在美开公司。作者在文末明确呼吁推出企业家签证,认为现行制度未能充分利用外来人才驱动经济。对于技术从业者而言,这个故事提供了关于职业规划、签证风险与创业时机的宝贵参考。

本机暂存