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

最新文章

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

IT 前端/ 2016-02-07 14:14:34 / 累计浏览 1,659

小tips: zoom和transform:scale的区别

这篇文章厘清了CSS中两个容易混淆的缩放属性:zoom与transform:scale。作者从浏览器兼容性、语法等表象差异出发,深入剖析了两者更根本的区别。 关键在于,zoom缩放会改变元素的真实占据空间,从而影响页面布局,其性能开销也因此更大,容易触发整个页面的重排;而scale缩放则保持元素原始尺寸不变,不影响布局,仅在视觉层重绘,性能更优。此外,它们的缩放起点也不同:zoom默认从左上角开始,scale默认从中心点开始。 文章还指出,zoom虽然非标准,但在移动端可用于静态内容控制,以节省宝贵的transform属性资源;而实现动画缩放时,则需谨慎选择,避免因zoom的性能问题导致页面卡顿。最后,作者提醒,在Chrome等浏览器中切勿同时叠加使用zoom与scale,因为其缩放效果会累加。

本机暂存
IT 移动开发/ 2016-02-07 14:10:46 / 累计浏览 3,680

iOS 保持界面流畅的技巧

这篇深度解析从 iOS 屏幕显示原理入手,剖析了界面卡顿的根源。文章详细拆解了 VSync 机制下,CPU 与 GPU 协同工作的流程,并指出当任一方未能及时完成渲染时,掉帧便会发生。作者系统性地列举了 CPU 侧的对象创建与销毁、布局计算(尤其是 Autolayout 的性能陷阱)、文本渲染等常见开销来源,也涵盖了 GPU 侧的渲染与合成问题。 在剖析原理的基础上,文章重点介绍了 AsyncDisplayKit 框架。作者阐述了其图层预合成、异步并发操作等核心设计,以及如何利用 Runloop 进行任务分发,从而将主线程从繁重的布局和渲染任务中解放出来。 文章更提供了极具实践价值的参考:一个完全仿照微博、Twitter 的开源列表 Demo。通过预排版、预渲染、异步绘制等优化技巧的组合运用,该 Demo 即使在 iPhone 4S 上快速滑动,也能稳定保持 50-60 FPS 的流畅度。这不仅仅是理论分析,更是一份可供验证、对比和直接使用的性能优化方案指南。

本机暂存
IT 前端/ 2016-02-07 14:09:54 / 累计浏览 1,335

word-break:break-all和word-wrap:break-word的区别

这篇讲的是两个极易混淆的CSS换行属性:word-break:break-all和word-wrap:break-word。作者从CSS学习需要经验积累的实际感受出发,深入剖析了这两个属性的渊源、定义以及核心差异。 关键的区别在于换行逻辑:break-all是“强制派”,它允许在任意字符处断行,即使把英文单词拆得七零八落;而break-word则是“谨慎派”,它优先寻找空格或CJK字符等自然断点,只有在一行文字完全无法容纳时,才在单词中间强行换行。这导致break-all的换行更彻底但可能破坏阅读,而break-word则可能产生参差不齐的留白。 文章还梳理了属性的演进历史(word-wrap在CSS3中更名为overflow-wrap)以及详细的浏览器兼容性数据,并提供了直观的在线Demo对比。最后,作者分享了“wbba(微博吧)和wwbw(我五百万)”的记忆技巧,帮助开发者在实战中快速区分和正确应用。

本机暂存
IT 后端/ 2016-02-07 14:08:33 / 累计浏览 2,249

Ghost+Nginx部署HTTP2

这篇讲的是作者为抵抗运营商劫持,在Ghost博客上部署HTTPS与HTTP/2的实战全过程。核心方案围绕Nginx代理与SSL证书展开:最初尝试免费的Let's Encrypt证书,但因DNS验证问题放弃,转而选用商业Comodo证书;Nginx需升级至mainline版本以支持http2,并在监听配置中显式添加http2参数。 部署后遇到混合内容(mixed content)导致浏览器警告,关键解决方案是将子域名的图片路径迁移至主域下,通过Nginx的alias规则统一提供服务,并配置了HTTP到HTTPS的301跳转。整个过程验证了HTTPS/HTTP/2对防御劫持的有效性,同时也指出了SHA-2证书对旧版IE和Android的兼容性限制。文章记录了从证书选择、Nginx调优到内容迁移的完整踩坑与解决思路,对同类博客升级有直接参考价值。

本机暂存
IT 前端/ 2016-02-07 14:06:53 / 累计浏览 2,223

小tips: CSS或JS实现gif动态图片的停止与播放

这篇讲的是如何在网页上实现对gif动态图片播放状态的精确控制。作者从日常刷微博时遇到的gif小测试游戏说起,引出了浏览器ESC键停止gif的局限性:兼容性差、功能模糊,且移动端无法使用。由此提出了核心问题:在很多场景下,我们确实需要可控地暂停或停止gif的播放,比如为了省电、省流量,或者仅仅是为了提升用户体验。 文章系统地介绍了三种不同场景下的解决方案。第一种最简单:为gif准备一张静态帧图,通过JS切换图片源,兼容所有浏览器,但只能“停止”而不能“暂停”在某一帧。第二种则利用CSS3 animation模拟gif效果,通过`animation-play-state: paused;`属性可以实现完美的暂停,但要求gif是开发者自己制作的动画精灵图。 面对用户上传的、无法提前处理的gif,作者给出了第三种“终极大法”:使用JS和HTML5 Canvas。通过读取原始gif并在Canvas上重绘第一帧,可以实现暂停效果。虽然目前也只能“停止”而非“暂停”在任意帧,且不兼容老版本IE,但这个方案解决了gif来源不可控时的关键痛点。文章最后还贴心地建议,从省流量和省电角度出发,移动端应默认停止gif播放,交由用户点击触发。

本机暂存
IT 安全/ 2016-02-07 14:05:27 / 累计浏览 1,868

说说下载劫持那些事儿

这篇从双十一“苹果6变6袋苹果”的梗出发,生动剖析了安卓应用下载劫持的技术原理。作者将网络下载类比为“网购”,把DNS服务器和运营商网关形象地称为“黄页”和“总机”,清晰拆解了从发起请求到文件传输的完整链路。 文章重点揭示了劫持发生的两个关键节点:一是DNS服务器被篡改,导致域名解析到“骗子服务器”;二是运营商网关通过302跳转机制,将用户引导至合作的推广服务器。这两种方式都会让用户最终下载到并非预期的应用包,可能被捆绑其他软件。 最后也提到了一个初步的解决方案——手动修改DNS,但运营商网关层面的劫持则更难规避。全文通过生活化比喻和流程图,把原本隐蔽的网络劫持手段讲得通俗明白,结尾幽默地回到了“六袋苹果”的调侃,读来轻松又有收获。

本机暂存
IT DevOps/ 2016-02-07 14:02:29 / 累计浏览 2,372

Linux lsof命令使用小结

这篇讲的是 Linux 系统中一个非常实用的诊断工具——lsof 命令。作者从“一切皆文件”的Linux设计哲学出发,点明了lsof能通过查看进程打开的文件列表,来实现对系统运行状态的监控与排错。 文章首先解释了lsof能查看到常规文件、网络连接(如TCP/UDP套接字)乃至硬件设备等各类“文件”,并拆解了其输出中COMMAND、PID、FD、TYPE、NAME等关键字段的含义,让读者能看懂命令返回的信息。 其核心价值在于提供了大量排查场景的实例命令。例如,可以用来查看哪个进程占用了特定文件(如/etc/passwd)、设备(如光驱)或端口(如80端口);也能反过来根据进程名(如sendmail)或用户(如tony)来查看其打开的所有文件资源。这些用法直击运维和开发中的常见痛点。 总的来说,文章从概念到输出解读,再到丰富的实战用例,系统性地小结了lsof的使用方法,为读者提供了一份即查即用的参考。

本机暂存
IT 数据库/ 2016-02-06 23:58:32 / 累计浏览 2,526

Spark的性能调优

这篇文章从实战经验出发,汇总了Spark性能调优的多个关键方向。内容不仅涵盖基础配置,更深入到应用代码设计与任务执行策略。 开篇即点明,调优的第一步往往从数据序列化开始,对比了默认的Java序列化与更快更紧凑的Kryo方案。紧接着是内存管理,文章给出了具体的检测方法(如使用UI或SizeEstimator)和优化建议(如启用压缩指针)。GC调优部分尤为实用,解释了默认内存分配比例、Eden区设置,并分享了如何避免因大量对象创建导致的“GC overhead limit exceeded”错误。 对于影响性能的关键因素,文章详细阐述了并行度、Reduce Task内存使用以及Shuffle的优化。例如,通过广播变量减少大表shuffle是一个经典模式。数据本地性的五个层级及其调度策略也被清晰说明。文件存储与读取优化(如使用Parquet列存格式)和Speculation(推测执行)机制也被纳入考量。 最后,文章强调了合理设置分区数和减少不必要Shuffle的重要性,并给出了具体的代码示例指引。整篇文章既包含JVM级别的参数调整,也涉及Spark应用层的数据结构设计与API选择(如prefetchByKey vs groupByKey),是一份从理论公式到实战经验的综合性调优指南。

本机暂存
IT 数据库/ 2016-02-06 23:53:55 / 累计浏览 1,437

MySQL不同复制模式下,如何忽略某些binlog事件

当MySQL主从复制因主键冲突、数据不存在等错误而中断时,如何快速跳过问题事件让复制继续?这篇技术博客给出了清晰的解决方案。 文章首先区分了两种场景。在未启用GTID的传统模式下,方法相对直接:通过`STOP SLAVE`、`SET SQL_SLAVE_SKIP_COUNTER=N`、`START SLAVE`三步,即可跳过指定数量的事件。但在启用GTID的现代架构中,操作则更为精细,需要手动计算并设置`GTID_PURGED`来“抹掉”导致错误的那个事务,让复制从下一个事务恢复。 此外,文章还推荐了Percona Toolkit中的`pt-slave-restart`工具,它能自动监控并忽略特定错误(如1062错误或匹配指定文本的错误),重启复制进程,是DBA手中非常便捷的利器。 整体来看,文章从手动命令到自动化工具,覆盖了处理复制错误的多种思路,对比了不同模式下的操作差异与工具带来的便利性,为数据库运维人员提供了实战性很强的参考指南。

本机暂存
IT 后端/ 2016-02-06 23:51:04 / 累计浏览 2,903

Java数据库连接池小结

这篇讲的是Java数据库中一个非常实际的问题:如何高效管理数据库连接。文章从连接池解决的根本问题——减少重复创建连接的开销——说起,把连接池比作一个预先建好的“缓冲池”。 作者详细介绍了三种主流开源连接池:Apache出品的dbcp,它是Tomcat的默认选择;异步操作的c3p0,支持自动回收空闲连接,与Spring、Hibernate集成良好;以及带有监控功能的proxool,便于排查连接泄漏。 文章的核心在于对这三者进行性能与稳定性的实测对比。测试发现,在相同高并发条件下,性能排序大致为 proxool ≈ c3p0 ≥ dbcp。但在稳定性方面,结果恰好相反:dbcp表现最稳定,c3p0和proxool则略逊一筹。 结论很明确:如果你的应用面临高并发挑战,c3p0和proxool是更好的选择;而如果你更看重长期运行的稳定性和可靠性,dbcp依然是稳妥之选。这为不同场景下的技术选型提供了清晰参考。

本机暂存
IT 前端/ 2016-02-06 23:48:09 / 累计浏览 2,318

HTML input type=file文件选择表单元素二三事

这篇讲的是HTML中一个常见但常被忽视的元素——`input type=file`,作者从其基础语法聊起,一路梳理了它在HTML5时代的“复兴”与演进。文章核心对比了在不同浏览器和HTML标准下,原生文件上传能力的变迁:过去只能单图上传,常被Flash插件替代;如今借助`multiple`属性、File API和FormData,已经能流畅实现多图选择、预览乃至Ajax上传。 作者也详细拆解了使用原生方案时绕不开的几个关键点:表单必须设置`enctype="multipart/form-data"`;图片预览在老IE和现代浏览器中有截然不同的实现路径;而那个“丑陋”的默认按钮,可以通过`label`元素优雅地关联自定义样式。此外,文章还实用地介绍了`accept`属性如何用MIME类型过滤文件(比如`accept="image/*"`),以及通过`form.reset()`来清除已选择文件值的便捷方法。对于需要兼容IE8-9的PC项目,文章也指出了原生HTML5与Flash方案混合使用的常见策略。整体上,它把一个表单元素背后的兼容性考量、交互优化与API细节讲得颇为透彻。

本机暂存
IT 设计/ 2016-02-06 23:44:07 / 累计浏览 4,839

简历的重点是抓人

这篇讲的是简历写作的核心心法——“抓人”。作者从经常帮朋友做内推的经历切入,指出一个常见痛点:许多技术过硬、素质优秀的候选人,却因简历过于敷衍而错失机会。在招聘方平均只花2分钟浏览一份简历的背景下,这短暂的“决定命运的2分钟”里,简历是单向沟通的唯一载体,其质量直接决定了能否获得后续展示的机会。 文章将简历比作一个“产品”,建议像产品经理一样反复打磨。它提供了非常具体的“抓人”策略:比如基本资料要精简,使用专业邮箱,附上得体的证件照;个人简介应避免空洞形容词,用事实突出个人价值,甚至主动提及弱点以展示自知之明;而项目经历部分,推荐使用STAR法则(情境、目标、行动、结果)进行结构化描述,但强调“适可而止”,保留悬念以吸引面试官深入探究。 作者的核心观点是,简历的重点不是信息的简单堆砌,而是成功吊起招聘方的兴趣,让人产生“非得和这家伙谈谈不可”的念头。这提醒许多求职者,尤其是技术背景的候选人,不应只埋头于面试准备而轻视了简历这个最重要的敲门砖。

本机暂存
IT 后端/ 2016-02-06 23:43:37 / 累计浏览 2,661

“推倒重来”的讲究

这篇技术博客从一位同事的提问切入,讨论了遗留系统重构中“推倒重来”的诱惑与陷阱。作者通过自身经历指出,许多团队面对速度慢、错误多、架构混乱的“切肤之痛”时,倾向于彻底重做,但结果往往导致业务需同时操作多套系统,问题并未根除。 文章的核心观点是:这类IT系统的复杂度根源常不在技术本身,而在于其背后承载的、尚未理清的业务逻辑。系统与业务早已深度耦合,如同“心脏起搏器与人”的关系,而非简单的“车辆与人”。因此,草率的“推倒重来”往往不如清晰的“逐步改良”有效。作者提出的改良路径包括:确立清晰的未来架构蓝图、通过过渡接口层实现新旧模块对接、并按部就班地进行迁移。 文中强调,改造成功的关键在于拥有能深入理解业务逻辑的优秀人员,并以搭建“脚手架”的耐心进行渐进式重构。文章结尾推荐的《零年》一书,也从社会重建的视角呼应了“彻底推倒”之后面临的复杂性重建难题。

本机暂存
IT 前端/ 2016-02-06 23:33:57 / 累计浏览 2,411

开发者应该了解的 web 性能

这篇文章的核心观点是:网站性能优化没有放之四海而皆准的标准答案,但开发者可以通过理解关键原理来做出更有效的决策。作者从影响网站速度的复杂因素出发,对比了几个常见优化手段的原理与差异。 文章首先指出,单纯追求“页面载入时间”并非最佳目标。作者以亚马逊为例,分析了其“渐进式渲染”策略:即便页面完全载入需18秒,但用户在前1.5秒就能看到首屏关键内容。这引出了对TTFB(首字节时间)的讨论,解释了它为何比整体加载时间更能反映服务器响应与网络传输效率。 具体技术对比方面,文章剖析了几个关键点:使用gzip压缩能显著减少传输字节数;优化图片(而非仅靠CSS调整大小)对移动端用户体验至关重要;清理不必要的脚本与CSS文件可以消除冗余加载。这些措施的共同点在于减少需要传输的数据量。 文章还强调了“关键渲染路径”的概念,即浏览器从获取HTML到绘制内容必须执行的步骤顺序。整体而言,作者旨在帮助开发者超越“照单全收”的优化清单,转而理解每个措施背后“为什么有效”,从而能针对自身应用进行精准调试与验证。

本机暂存
IT 前端/ 2016-02-06 23:30:38 / 累计浏览 1,318

小tip: 如何让contenteditable元素只能输入纯文本

这篇讲的是如何在 `contenteditable` 元素中实现“纯文本输入”的几种前端实践。作者从实际开发中“粘贴富文本”导致格式污染的痛点出发,对比了解决该问题的不同方案。 首先,他介绍了利用 CSS 属性 `-webkit-user-modify: read-write-plaintext-only` 的方法,该属性在 WebKit 内核浏览器(如 Chrome、Safari)中能有效限制输入,但兼容性有限。随后,文章深入到 HTML 标准,指出 `contenteditable` 属性存在一个鲜为人知的 `plaintext-only` 新值,它同样主要在 Chrome 中表现良好。 鉴于上述方案的兼容性局限,作者最终提供了一种更具普适性的 JavaScript 解决方案:通过监听 `paste` 事件,拦截剪贴板内容,过滤掉 HTML 标签,再以纯文本形式插入元素。文末附上了具体的代码实现,并指出此方法能兼容包括 IE8 在内的主流浏览器。 因此,这篇文章为开发者提供了从 CSS、HTML 到 JavaScript 的多层次工具箱,帮助大家根据项目的技术栈和兼容性要求,选择最合适的“纯文本编辑”实现路径。

本机暂存
IT 数据库/ 2016-02-06 14:04:24 / 累计浏览 1,958

RDS MySQL参数调优最佳实践

这篇讲的是RDS MySQL用户常困惑的参数调优问题。作者从实际场景出发,首先明确了哪些参数由产品规格或数据安全决定无法修改,比如内存、连接数和主备同步相关参数。这解决了用户“能不能改”的首要疑惑。 文章的核心价值在于,它清晰地指出绝大部分参数已由专业团队优化,仅需针对特殊场景微调。随后,作者深入剖析了open_files_limit、back_log、innodb_autoinc_lock_mode等几个关键参数:逐一说明其作用、设置不当会引发的典型错误现象(如“Too many open files”、连接超时或死锁),并给出了具体的调整建议和原理。 此外,文章还介绍了几个RDS特有的实用参数,例如控制临时磁盘空间的rds_max_tmp_disk_space和用于保护数据库的rds_threads_running_high_watermark,让读者能按需应用。整体而言,这篇文章并非泛泛而谈,而是提供了从“能否修改”到“为何调整”再到“如何调整”的完整实践路径,能帮助用户避免性能陷阱。

本机暂存
IT 数据库/ 2016-02-06 14:01:40 / 累计浏览 4,899

MySQL B+树索引和哈希索引的区别

这篇讲的是 MySQL 里 B+树索引和哈希索引这两种常用数据结构的根本区别。作者从它们的数据结构图示出发,清晰地揭示了核心差异。 B+树是一个平衡的多叉树,节点间有指针链接,所以它不仅擅长等值查询,也天然支持范围查询、排序以及遵循最左匹配原则的联合索引。而哈希索引通过一次算法运算就能直接定位数据,在等值查询上速度极快,但代价是它破坏了数据的有序性,因此无法用于范围查询、排序和部分模糊查询。 文章还特别指出,只有 MEMORY 引擎能显式创建哈希索引,而 InnoDB 的自适应哈希索引不在此列。同时提醒了哈希索引在数据重复度高时可能遇到的哈希碰撞问题,以及 MEMORY 引擎表重启后数据会丢失的特性。 结论很实用:大多数需要范围查询、排序的通用场景,请坚定地选择 B+树索引。只有在使用 MEMORY 表、数据基数大且仅进行简单等值查询时,哈希索引才是更合适的选择。

本机暂存
IT DevOps/ 2016-02-06 13:59:53 / 累计浏览 2,365

CentOS关机与重启命令小结

这篇讲的是 CentOS 系统中那些容易混淆的关机与重启命令。作者系统地梳理了 `shutdown`、`halt`、`reboot` 等核心命令的用法和区别,重点在于帮助管理员根据实际场景选择最安全、最合适的操作方式。 文章指出,`shutdown` 是最安全、最灵活的选择。它不仅能立刻或定时重启(`-r`)与关机(`-h`),还会在执行前通知所有登录用户,并冻结新的登录请求,从而避免强制断电可能导致的数据丢失或硬件损坏。更重要的是,计划中的关机重启可以通过 `shutdown -c` 随时取消。 相比之下,`halt` 命令默认就是关机(相当于 `shutdown -h`),而 `reboot` 则用于重启。它们功能相对单一,但执行直接。文章还提到了通过 `init` 运行级别来控制系统的高级方法,比如 `init 0` 关机,`init 6` 重启。 对于系统管理员而言,理解这些命令的细微差别至关重要。需要安全关机时,优先使用 `shutdown`;需要快速重启或关机时,`reboot` 和 `halt` 更为直接。掌握这些基础但关键的命令,是进行稳定、安全的系统维护的第一步。

本机暂存
IT 前端/ 2016-02-06 13:54:30 / 累计浏览 1,246

理解CSS3 isolation: isolate的表现和作用

这篇讲的是CSS3属性`isolation: isolate`在混合模式(`mix-blend-mode`)中的精准控制作用。作者从实际场景出发:当一个元素使用了混合模式时,它默认会与所有下层元素进行混合。如果我们只想让混合发生在特定的父子元素或一组兄弟元素之间,该怎么办?`isolation: isolate`正是为解决这个问题而生。 其核心原理在于,`isolation: isolate`能为元素创建一个新的层叠上下文(stacking context),从而将混合效果“隔离”在这个上下文内部。更进一步,作者指出,任何能创建层叠上下文的属性(如`position: relative`、`opacity`不为1、`transform`不为none等)都能达到阻断混合模式的效果。此外,文章还对比了`background-blend-mode`,说明它天然是一个封闭的混合领域,无需额外隔离。 文章不仅解释了用法,更揭示了其背后由层叠上下文所构建的CSS复杂交互逻辑,展示了现代CSS能力与规则的紧密交织。

本机暂存