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

最新文章

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

IT 前端/ 2012-12-19 13:30:03 / 累计浏览 4,958

IE BUG相关文章集合

这篇资源集合聚焦于困扰前端开发者多年的IE浏览器兼容性问题,从底层的渲染机制到具体的bug修复方案,构建了一个系统的知识网络。 文章的核心首先深入剖析了IE特有的“HasLayout”机制,这是众多怪异bug的根源。它链接了多篇详解,帮助读者理解这个只存在于IE引擎中的概念如何影响页面布局。紧接着,文章将视线转向了标准的“块级格式化上下文”,并进行了对比解析。理解这两者的差异,是掌握IE兼容问题的关键所在。 真正的实战干货在于第三部分——具体的IE bug清单。这里罗列了从经典的3px bug、margin加倍、PNG透明问题,到Z-index层级失效、overflow处理异常等二十余个具体场景。每个条目都直接指向问题的表现与解决方案,比如如何为IE6修复`position:fixed`,或怎样处理父级padding后子元素的绝对定位。 最后,文章还整理了多个综合性的BUG修复指南与hack速查表,相当于为开发者提供了一套应对IE怪异模式的工具箱。对于需要维护历史项目或追求极致兼容性的前端工程师而言,这份清单能快速定位问题,节省大量试错时间。

本机暂存
IT 前端/ 2012-12-18 23:25:27 / 累计浏览 4,959

关于前端开发

这篇文章是作者对“前端开发工程师”这个职位的深度思考与经验分享。他首先正本清源,强调前端首先是“开发工程师”,扎实的代码能力是基础;在此之上,对“界面”的敏锐感知与审美能力,才是前端区别于其他程序员、可以引以为傲的核心价值。 针对不同背景的入行者,作者给出了非常具体的建议:对于设计师或网页制作人员,必须明白前端开发是“从刨木头开始”的代码构建,而非简单的模板拼装;对于软件开发工程师,关键挑战在于培养对界面好坏的直觉;对于已经在做前端的人,则需要反思自己的技术深度与工作热情,警惕“够用就行”的心态。 文章也为前端爱好者提供了学习路径:通读权威书籍打好基础,通过个人项目实践所学技术,并在交流中共同提升。作者认为,对前端技能本身的精通远比掌握周边技能更重要,而真正的精通往往源于内在的热情与持续的专注。

本机暂存
IT 前端/ 2012-12-18 23:20:19 / 累计浏览 3,519

javascript运算/转换技巧

这篇整理了多个实用的JavaScript编码技巧,专注于简化常见操作。作者直接对比了常规写法与更简洁的实现,提供了许多能立刻用在项目里的“糖”方法。 比如,将字符串快速转换为数字,除了 `parseInt` 和 `Number`,还可以用一元加号 `+` 直接搞定。要将任意值转为布尔值,双非运算符 `!!` 是最直观的写法。求数字数组的最大值,用 `Math.max.apply` 可以避免冗长的循环。文章还触及了几个经典痛点,如浮点数运算误差的修正方法(使用 `toFixed`),以及如何高效地实现数字前补零。 值得注意的是,文章不仅限于类型转换,还包含了防御性编程(如用几行代码防止页面被 iframe 嵌入)和函数参数处理(将 `arguments` 对象转换为真正的数组)的技巧。这些内容虽小,却能实实在在地提升代码的健壮性和简洁度。

本机暂存
IT 后端/ 2012-12-18 23:17:37 / 累计浏览 3,533

java中byte转换int时为何与0xff进行与运算

这篇文章直击一个Java初学者常见的困惑:在代码中将`byte`数组转为十六进制字符串时,为什么每个字节都要与`0xff`进行与运算,而不是直接强转为`int`?作者通过一个具体的`bytes2HexString`方法切入,引导读者思考这个看似多余的步骤。 核心答案在于Java中数据的底层表示与位扩展机制。`byte`是8位,而`int`是32位。直接将`byte`(例如值为-1,其补码为`11111111`)赋值给`int`时,会发生**符号位扩展**,即高24位全部填充符号位(1),得到`0xffffffff`,这显然不是我们想要的原始字节值。而`0xff`作为`int`常量(二进制为`00000000 00000000 00000000 11111111`),与`byte`值进行与运算,会先将`byte`提升为`int`,但运算结果能**强制清零高24位**,仅保留低8位的原始数据,确保了数值的正确性。 文章进一步回顾了计算机组成中补码的表示方法,为理解位扩展的原理提供了扎实的理论基础。最终,作者给出了明确结论:与`0xff`的与运算是处理`byte`到`int`有符号扩展问题的标准技巧,确保了数据无损转换,这一点在底层编码和通信场景中尤为重要。

本机暂存
IT 算法/ 2012-12-18 23:16:35 / 累计浏览 3,368

原码、反码、补码相关知识总结

这篇讲的是计算机里最基础也最关键的数据表示方法:原码、反码和补码。它清晰地拆解了三者的定义和转换规则。比如,正数的原码、反码、补码都一样,而负数的反码是原码符号位外各位取反,补码则是在反码基础上加1。 文章的核心价值在于,它不仅仅罗列知识,更解释了技术演进的逻辑:为什么计算机会从原码发展到补码?作者通过具体的运算例子指出,原码和反码在处理带符号数的加减运算时,会遇到诸如“-0”带来的结果错误和实现复杂性等问题。 补码的巧妙之处在于它用“10000000”表示-128,统一了零的表示([+0]补=[-0]补=00000000),从而让加减运算可以统一用加法器处理,极大地简化了硬件设计。文章也点明了补码的表示范围(如8位整数为-128到127),并解释了这个范围为何不对称。 对于想理解计算机底层如何处理数字的读者,这篇文章把“为什么用补码”这个经典问题讲得很透彻。

本机暂存
IT 数据库/ 2012-12-18 23:15:28 / 累计浏览 4,154

EXADATA与非EXADATA搭建DATAGURAD关于EHCC特性测试

这篇讲的是一个常见的异构容灾场景:很多企业只有一台昂贵的Exadata机器,但为了数据安全,会用一台普通的非Exadata服务器通过Data Guard来搭建备库。官方宣传的EHCC高级压缩特性是否还能正常使用?作者通过实测给出了答案。 测试环境是Oracle 11g,作者在Exadata主库上分别创建了使用BASIC、OLTP以及各种EHCC(Query Low/High, Archive Low/High)压缩的表。关键发现在于,当Data Guard备库是非Exadata环境时,主库的EHCC压缩效率会显著下降。测试数据显示,此时所有EHCC压缩表的数据块大小都膨胀到了接近无压缩的水平,其压缩效果甚至不如简单的OLTP压缩。 作者分析,这很可能是Exadata的一种智能降级机制:当检测到备库不支持EHCC时,主库会牺牲自身的存储性能(高压缩效率)来确保数据在备库的可读性与安全性。因此,在这种异构DG架构下,使用Oracle自带的OLTP压缩或许是更优选择,既能保证容灾,也能获得更好的整体效率。

本机暂存
IT 前端/ 2012-12-18 23:10:24 / 累计浏览 4,618

font-face在移动终端的支持

这篇讲的是CSS3 font-face特性在移动终端实际兼容性的测试报告。作者开篇点明,font-face能实现漂亮的自定义字体和高质量的图标,在PPI较高的移动设备上显示效果尤其完美,但其支持情况却参差不齐。 文章核心介绍了由BBC News的开发者Kaelig进行的一系列测试。他使用Modernizr脚本并配合另一段检测代码,来探明各主流移动浏览器真实的font-face支持情况,避免被一些声称支持但实际无法渲染的“骗人”浏览器误导。测试结果非常详尽,将移动浏览器明确分为三类:完全支持(如iOS 4/6的Safari、Android 4的Chrome和默认浏览器、Windows Phone 8的IE等)、明确不支持(主要是各平台上的Opera Mini)以及会“骗人”的浏览器(例如Windows Phone 7的IE9和Android 4的UC浏览器)。 结论指向一个现实:在移动端大规模使用自定义字体仍需谨慎。测试数据为我们划出了清晰的兼容性边界,提醒开发者在追求视觉效果的同时,必须做好针对不同浏览器环境的兼容处理。

本机暂存
IT 前端/ 2012-12-18 23:06:31 / 累计浏览 3,168

使用 SourceMap 来进行前端代码调试

这篇文章讲的是前端代码调试中的一个常见痛点:我们写的源码和浏览器实际运行的代码往往不一致。因为现代前端项目普遍会对JavaScript、CSS进行压缩、合并,还会使用Sass、Less、TypeScript等预编译语言进行转换,这导致生产环境中的代码与我们本地编写的代码相去甚远,调试变得异常困难。 SourceMap正是为了解决这一问题而生的技术。作者从这个实际开发场景出发,清晰地解释了它的核心作用——建立压缩或编译后的代码与原始源码之间的映射关系,让开发者可以在浏览器的开发者工具中直接调试最初的、可读的源代码。虽然作者也坦诚地指出,当时的SourceMap生态还不够成熟,但它指明了未来前端调试工具链的一个重要方向。 文章的主体部分是一份详尽的演示文稿(Slides),作者通过二十多页的幻灯片,系统地梳理了SourceMap的原理、格式及其在开发流程中的应用。如果你正苦恼于如何调试生产环境中的“天书”代码,或是想理解这个日益重要的前端基础工具,这篇结合了清晰讲解与视觉化幻灯片的内容,提供了一个不错的入门视角。

本机暂存
IT 后端/ 2012-12-18 22:59:30 / 累计浏览 5,255

使用APC来保护PHP代码

这篇讲的是如何用开源的APC扩展来保护PHP源代码,摆脱商业加密软件的束缚。 作者从实际痛点出发:像Zend Guard这类商业方案每年费用不菲(约4000元),且因每次访问都需解密验证,性能损耗巨大,曾导致服务器CPU负载飙升至100倍。相比之下,APC作为PHP官方的opcode缓存扩展,免费、开源且性能优越,能通过缓存编译后的中间代码来保护源码。 文章的核心价值在于,作者不满足于基础用法。他分享了将多个PHP文件编译为单个二进制opcode文件的实践,这比管理数百个零散文件更便捷,也避免了版本不一致的风险。更关键的是,他针对APC默认需要手动加载bin文件的繁琐流程,阅读源码并提交了一个补丁,实现了PHP-FPM启动时自动预加载,极大简化了运维。 作者还详细介绍了导出、部署、版本回滚的全流程,并附上了检测文件完整性的MD5校验方法。文中也坦诚地记录了在适配PHP 5.4等版本时遇到的APC本体Bug及解决方案,展现了从发现问题、提交BUG到推动社区修复的完整过程。 最终,这套方案让作者团队在免费、高性能的前提下,实现了对线上PHP代码的有效保护与高效管理,其贡献的补丁也为有类似需求的开发者提供了直接可用的工具。

本机暂存
IT DevOps/ 2012-12-18 22:57:48 / 累计浏览 3,920

ssh-copy-id帮你建立信任

对于运维人员来说,在两台Linux机器间建立SSH免密登录是常规操作,但传统手工步骤——拷贝公钥、编辑authorized_keys、检查文件权限——不仅繁琐,还容易在切换机器和手动编辑时出错。 这篇文章生动演示了如何用`ssh-copy-id`命令优雅地自动化这一过程。作者从最基础的需求出发,先遇到了“未找到标识”的错误,引出了必须先用`ssh-keygen`生成密钥对的关键前提。但更典型的坑在后面:当目标机器SSH端口不是默认22时,直接使用`-p`参数会无效,命令依然报“Connection refused”。 真正的解决方案带点“小技巧”色彩:需要将非标准端口和目标地址作为引号内的一个整体字符串传入,即执行`ssh-copy-id "-p 22000 nameB@machineB"`。这本质上是将参数传递给了底层的`ssh`命令。问题解决后,文章还揭示了`ssh-copy-id`本身只是一个约50行的Shell脚本,其源码可供学习。整个排查过程从问题到解决非常清晰,实用性强。

本机暂存
IT 移动开发/ 2012-12-18 22:54:51 / 累计浏览 2,800

从精益开发到精益创业

这篇讲的是《精益创业》如何为陷入困境的产品开发指明一条实用路径。 作者从当下创业热潮与众多产品“叫好不叫座”的矛盾现象切入,直指问题核心:无论是过于关注技术实现的工程师,还是精心打磨细节的产品经理,都可能陷入“会跳舞的熊”的陷阱——产品功能齐全,却唯独缺少用户愿意使用的理由。在移动互联网这个需求剧烈变动的领域,传统经验频繁失效。 文章推荐的《精益创业》方法论恰好回应了这一痛点。它本质上是将敏捷开发的思想从单纯的代码编写,扩展到了整个产品流程。其精髓在于建立一个“构建-测量-学习”的快速迭代循环:先用最小可用产品验证核心商业假设,再通过“创新核算”用同期群等数据方式精确衡量增长。一个功能的增减,都必须服务于假设验证或增长目标,而非主观臆断。 作者结合自身项目实践分享了成效:团队用两个月开发出最小可用版本,通过数据验证了用户支付意愿,并利用A/B测试优化了客单价。这证明,将方法论融入日常工作,才能真正应对不确定性,让产品从“设计”走向“验证”,最终走向成功。

本机暂存
IT 后端/ 2012-12-17 13:39:10 / 累计浏览 6,191

nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket

这篇讲的是如何解决高并发下PHP服务器因频繁创建TCP短连接导致的端口耗尽问题。作者从观察到的真实案例切入——服务器因大量TIME_WAIT状态堆积,耗尽了可用端口,导致新建连接失败。常见的“缩短2MSL时间”的方案治标不治本,因此他引导读者思考更优的解法。 文章核心对比了Nginx与PHP-FPM之间的两种通信方式:默认的TCP socket和Unix Domain Socket(UDS)。作者结合一个WebGame的架构实例指出,当Nginx与PHP-FPM部署在同一台服务器时,使用TCP socket(尤其是短连接模式)会因经过完整的网络协议栈而产生不必要的系统开销,并引发上述的端口问题。相比之下,Unix Domain Socket绕过了TCP/IP层,直接在内核中通过文件套接字通信,大幅降低了连接建立与销毁的开销,从根本上避免了端口竞争。 文章最终给出的结论很明确:对于同机部署的Nginx与PHP-FPM,切换到Unix Domain Socket通常是更优的选择,它能提升效率并彻底解决因短连接导致的资源瓶颈。这对运维和后端开发人员优化本地服务通信有直接的参考价值。

本机暂存
IT 前端/ 2012-12-17 13:37:01 / 累计浏览 11,848

YSLOW法则中,为什么yahoo推荐用GET代替POST?

你一定听过“POST请求会被拆分成两个TCP包发送”这个经典结论,它常被用来解释为什么Yahoo的YSLOW优化法则推荐在AJAX中使用GET。但作者没有止步于此,他决定亲手验证一下这个看似权威的说法。 通过Wireshark抓包分析,作者确实观察到,在IE8等浏览器中,一个POST请求的HTTP头部和正文数据会被分开发送,形成两个独立的数据包。这初步印证了Yahoo的优化建议。 然而,实验出现了转折。当作者测试Firefox 5浏览器时,发现POST请求的头部和数据被合并到了一个TCP包中发送,与IE8的行为截然不同。这意味着,那个“POST必被拆分”的结论并非普适真理,其实际表现高度依赖于浏览器的具体实现。 这篇文章的价值在于,它带领读者完成了一次从盲从规范到动手验证的技术探索。作者的实测表明,即使是像“GET优于POST”这样被广泛接受的前端优化法则,其底层原理也可能因环境而异。这提醒我们,在技术选型时,不能只看结论,了解其在不同场景下的实际表现或许更重要。

本机暂存
IT 后端/ 2012-12-17 13:34:22 / 累计浏览 1,844

php5.3.8中编译pdo_mysql的艰难历程

这篇讲的是在CentOS 6.5服务器上,一个被临时委以重任的程序员,如何攻克PHP 5.3.8环境下PDO_MYSQL扩展编译失败的故事。问题出在新服务器迁移时,运维同事已经成功编译了PHP本身,但随后独立编译PDO_MYSQL扩展却屡屡受挫。作者在描述中给出了具体的系统版本和复杂的PHP编译参数,为问题复现提供了清晰的环境背景。 通常,这类编译失败往往与MySQL客户端库的路径配置、头文件缺失或依赖关系错配有关。在“艰难历程”中,作者大概率是通过检查phpize的输出、定位configure脚本报错信息,最终发现可能是编译PHP时未正确启用或指定MySQL相关参数,导致扩展无法找到依赖。解决过程可能涉及回溯PHP的编译配置、手动指定`--with-pdo-mysql`路径或确保相关的开发包已安装。 这个案例的价值在于,它真实还原了一个非专业运维在压力环境下,通过排错日志、理解编译参数间的关联,最终解决问题的完整思路。对于需要在旧版PHP环境(如5.3.x)中进行扩展编译的开发者,文中对具体报错点和调试步骤的记录,提供了直接的参考线索。

本机暂存
IT DevOps/ 2012-12-17 13:32:00 / 累计浏览 1,978

gitolite的README译文

这篇讲的是如何从零开始搭建和配置Gitolite,来搭建一个轻量级的Git托管服务器。作者从Gitolite的架构讲起,明确了服务器端和客户端的角色划分,以及少数管理员与普通用户的权限差异。 核心部分围绕三个环节展开:首先是安装,作者详细列出了所需的软件环境(如Git、Perl、SSH),并给出了非常具体的安装命令。特别贴心的是,提到了一个常见的Perl模块缺失报错及其解决办法,这是很多初学者会卡住的地方。其次是核心的权限管理,文章解释了通过一个名为`gitolite-admin`的特殊仓库来集中管理用户公钥(`keydir`文件夹)和仓库权限配置(`gitolite.conf`文件),管理员只需在客户端编辑配置并推送,服务器就会自动生效。最后简要说明了如何为用户开通访问权限。 整篇文章就像一份简洁的实战手册,将原本可能有些复杂的权限管理,通过Git本身的流程(克隆、编辑、推送)变得清晰直观。它不仅帮你装好工具,更重要的是让你理解了背后的设计逻辑——把服务器管理变成了对一个Git仓库的协作。

本机暂存
IT 安全/ 2012-12-16 23:56:24 / 累计浏览 4,923

宽带网络运营商劫持网站的技术分析

这是一篇关于宽带运营商劫持用户网页流量的深度技术排查记录。作者从自家网络出现异常弹窗广告入手,发现无论访问大小网站,网页都会被远程注入 iframe,导致浏览器右下角弹出无关的 Flash 广告。 文章的核心在于技术分析过程。通过直接发送 HTTP 请求而非依赖浏览器缓存,作者捕获了被篡改的完整响应包,揭示了运营商如何用一个“空壳”页面加载原始网站并侧载第三方广告脚本。更进一步,作者通过 Whois 查询追踪到广告域名(istreamsche.com)指向北京集奥众和公司,并在联系客服时发现,连运营商自家技术人员的办公网络也未能幸免,将问题根源指向了上级运营商或高层决策。 面对这种普遍存在的“流量劫持”,文章给出了一个切实可行的用户端解决方案:通过浏览器插件(如 User Agent Switcher)清空或修改发送给网站的 User-Agent 标识。由于大部分网站不依赖此字段进行功能判断,该方法能有效绕过运营商的劫持规则,恢复干净的网页浏览。

本机暂存
IT DevOps/ 2012-12-16 23:46:42 / 累计浏览 4,597

ubuntu定时执行任务crontab的使用

这篇讲的是作者从实际需求出发,学习并实践Ubuntu系统中定时任务工具crontab的过程。作者最初为了定时执行一个数据爬取脚本,从同事那里了解到crontab,并在保证知识体系完整性的前提下进行了梳理。 文章从crontab的基本概念和由来说起,解释了它作为守护进程周期性检查作业的机制。核心内容聚焦于实际使用:通过简单的三个步骤(运行`crontab -e`、选择编辑器、编写配置)即可开始。作者用两个清晰的例子说明了配置方法:一个是让Python脚本在每天早上7:30执行,并将输出与错误日志重定向到文件;另一个是设置脚本每隔3分钟执行一次。 其中重点解析了配置文件中五个星号分别代表的分、时、日、月、周单位,以及反斜杠(/)用于指定频率的用法。例如,`*/3 6-8 * * *`表示在早上6点到8点之间,每隔3分钟触发一次任务。整篇文章将概念与紧密贴合的实例结合,清晰展示了如何将一个定时需求落地为具体的crontab配置。

本机暂存
IT 安全/ 2012-12-16 23:46:00 / 累计浏览 4,361

跨越千年的RSA算法

作者从古希腊几何学中“可公度线段”的概念出发,讲述了数论中一系列精妙思想的演进。文章首先通过欧几里得求最大公度单位的直观例子,自然引出“辗转相除法”这一核心算法,并证明其效率。随后,以正方形边长与对角线不可公度的发现为例,揭示了无理数在古希腊时期就已出现的历史趣闻。 作者进而将话题转向数论中更深入的概念——互质与中国剩余定理。文中用生活中的公交车班次例子,生动解释了互质与最小公倍数的关系,并引出了《孙子算经》中的经典问题,展示了中国剩余定理的雏形与魅力。 这篇长文并非对教科书内容的简单复述,而是作者基于为《程序员》杂志撰写文章时积累的大量素材与个人思考,重新梳理的一条连贯知识脉络。他以牺牲部分严谨性为代价,力求用更直观、可读的方式,展现从古典数论走向现代公钥加密(如RSA算法)的奇妙旅程。

本机暂存
IT 数据库/ 2012-12-16 23:32:41 / 累计浏览 7,737

Innodb IO优化-配置优化

这篇讲的是如何通过调整 InnoDB 的配置参数,来直接提升数据库的 IO 性能,解决数据库最常见的性能瓶颈。 文章的核心思路很清晰:**尽可能利用缓存来减少随机读,同时通过缓冲机制来平滑和延迟随机写**。作者从这个原则出发,详细拆解了多个关键参数。比如,最重要的 `innodb_buffer_pool_size` 建议分配物理内存的 70%-80% 以最大化数据缓存;`innodb_flush_method` 推荐使用 `O_DIRECT` 以避免双重缓存冲突;而 `innodb_log_file_size` 则建议配大到 256M 以上,来减少 checkpoint 的发生频率。 除了这些核心参数,文章还探讨了 IO 线程、预读策略、脏页控制等更多参数的调优建议,并特别指出了不同版本(如 MySQL 5.6 和 Percona)下的差异。无论你是刚接触数据库调优,还是想系统梳理 IO 相关的配置,这篇文章都提供了实用的配置清单和参数建议,帮助你让数据库这台“引擎”跑得更顺畅。

本机暂存
IT 移动开发/ 2012-12-16 23:31:29 / 累计浏览 2,238

我的产品抄袭观

这是一篇关于互联网产品借鉴与抄袭现象的观点评论。作者从“抄袭”定义出发,通过一系列层层递进的反问(仿效细节、核心模块、全盘照搬),结合下拉刷新手势、瀑布流、QQ对ICQ的早期模仿等典型案例,解构了行业中对借鉴行为看似矛盾的苛刻与宽容。 作者的核心观点是:单纯模仿不值得羞耻,羞耻的是团队自身缺乏值得他人借鉴的独创性。他批判了生搬硬套、脱离产品情景的“瞎抄”,认为有能力在借鉴基础上进行消化、本地化并注入自身构思的团队,实际上完成了“创意的分裂繁殖”。 文章还特别探讨了国内仿制国外产品的现实意义——这往往是优质服务本土化的开端。以微信早期被指借鉴TalkBox为例,作者指出,复制并未扼杀创新,反而是基因变异与生态繁荣的契机。最终,文章将评判标准从“是否抄袭”引向了“是否抄到位”以及“是否做出了有价值的创新”,为这场常见的两极争论提供了一个更务实、更具建设性的视角。

本机暂存