IT技术博客大学习 共学习 共进步
首页 / Fienda
IT 2016-03-21 23:46:42 / 累计浏览 2,560

30条编程名言佳句: 这不是Bug只是未知的特性

不是段子,是真知灼见。这篇汇集了30条来自技术书籍开篇与大佬们(包括松本行弘、Linus Torvalds、Donald Knuth等)的经典编程名言,以一种幽默而犀利的方式,道尽了软件开发的那些事儿。 文章的核心观点是,编程远不止是编写代码,它更是关于人的艺术与复杂的学问。比如Martin Fowler与Kent Beck都在强调,写出人类能理解的“好代码”并养成良好习惯,远比炫技更重要。而控制复杂性则是贯穿始终的主题,Fred Brooks用“九个女人不能生一个孩子”的比喻点破了项目管理的误区,Brian Kernighan则直指其为编程的本质。 文中也不乏那些令开发者会心一笑的“行业真理”,如“它在我的机器上能运行”、“这不是bug,只是未列出的特性”,生动反映了日常困境。从对“过早优化”的警惕到“好代码就是最好的文档”的倡导,这些凝练的句子为技术人提供了思考的支点和会心一笑的共鸣。 这些语录不仅是技术思考的结晶,更像是一个行业文化的缩影,适合放在手边,时常翻阅。

IT 2016-03-21 23:45:43 / 累计浏览 1,940

CentOS web项目维护 FTP环境搭建

这篇教程从作者项目的实际文件维护需求出发,完整记录了在CentOS系统上搭建vsftpd FTP服务器的全流程。作者选择vsftpd正是看中了其在安全性、带宽控制和可伸缩性方面的优势。 文章详细演示了从安装、设置开机启动,到调整防火墙策略以开放21端口的核心步骤。重点部分在于如何修改vsftpd.conf配置文件,为业务人员创建专用的FTP账号,并精确设置其目录访问权限与写入权限。 特别值得一提的是,教程没有回避实战中可能遇到的“坑”。作者明确指出了两个典型问题:一是因SELinux策略导致的“无法切换目录”报错,其根本原因是SELinux默认限制了FTP服务;二是可能因目录权限不足出现的“无法创建文件”错误。针对这两个问题,文章都给出了具体、可操作的解决方案,比如临时禁用SELinux或调整目录权限至777。这些经验对于避免新手配置卡壳非常实用。

IT 2016-03-21 23:39:37 / 累计浏览 3,600

Mac下.apk的反编译

这篇教程详细演示了如何在Mac环境下对Android应用的.apk文件进行反编译。作者从准备一个.apk文件开始,核心方案是结合使用三个关键的开源工具来逐步剥离应用内容。 第一步是使用 apktool,通过指定路径的命令,对.apk文件进行解码。这个过程会提取出资源文件,并解码出 AndroidManifest.xml 等XML内容。第二步则是使用 dex2jar 工具,它能将apk中的classes.dex文件转换成通用的Java归档文件(.jar)。作者提示,生成jar包后需要耐心进行下一步。第三步,用 JD-GUI 这个Java反编译器打开上一步生成的.jar包,此时就能直观地浏览应用的Java源代码了。 整个流程清晰地串联了三个工具,各自负责不同层面的解包与反编译工作。作者通过具体的命令行示例和输出反馈,将原本可能复杂的逆向过程分解成了可跟随的操作步骤。最终,读者可以掌握一套完整的组合技,从资源到代码,实现对APK文件的深度查看。

IT 2016-03-21 23:24:03 / 累计浏览 5,760

MYSQL分页limit速度太慢优化方法

这篇讲的是MySQL在大数据量下分页查询的性能瓶颈问题。当表数据达到百万级别时,使用`LIMIT offset, length`进行分页(如`LIMIT 200000, 10`)会导致查询极其缓慢,因为数据库需要扫描并丢弃offset前的所有行,造成了严重的资源浪费。 文章的核心方案是通过改变SQL写法来规避“大偏移量扫描”。例如,不再使用`LIMIT 100000, 20`,而是记录上一页的最大ID,然后查询`WHERE id > last_max_id LIMIT 20`,这样就将扫描行数从十万级降至仅数十行。作者用一个实际例子展示了优化效果:将一条3.21秒的查询,通过子查询改写并建立复合索引后,降低到了0.11秒。 此外,文章还总结了其他几种实用的优化思路,包括子查询优化法、倒排表法、反向查找法以及限制偏移量等。每种方法各有其适用场景和限制,比如子查询法要求数据连续,反向查找法则更适合页数超过一半的情况。这些具体的方法和对比,为开发者在不同场景下选择最佳分页策略提供了清晰的参考。

IT 2016-03-21 23:18:09 / 累计浏览 2,360

深入理解JavaScript定时机制

这篇讲的是开发者在JavaScript定时器上常踩的“认知坑”。文章从一个经典困惑出发:为什么设置为0毫秒的setTimeout并不会立即执行?为什么用setInterval设置的回调有时会“卡住”? 作者没有停留在解释现象,而是带我们深入浏览器内核的后台,揭示了真相:JavaScript引擎本身是单线程运行的。所有异步操作,包括定时器回调、用户点击、网络请求,都是由浏览器的其他线程(如定时触发线程、事件触发线程)处理后,将回调函数放入一个“任务队列”中。JavaScript引擎只有在当前执行栈清空后,才会按顺序从队列中取出下一个任务执行。 文章通过几个递进的代码案例,清晰展示了单线程模型如何影响定时器的执行时序。例如,一个耗时操作会阻塞所有后续任务,包括定时期望的回调;而用setTimeout递归调用来模拟setInterval,可以避免回调堆积。 核心在于理解“异步不等于多线程”。文章最终将定时机制与Ajax请求统一在同一套事件循环模型下,帮助读者建立起对JavaScript并发模型的完整认知,从而写出更健壮、高效的异步代码。