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

最新文章

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

IT 前端/ 2016-01-26 23:53:04 / 累计浏览 2,299

基于原生HTML的UI组件开发

作者从一次实践出发,探讨了一种有趣的UI组件开发思路:不抛弃原生HTML,而是对其进行“升级”。文章以一个包含日期选择、表单验证等基础功能的表单页面为例,展示了如何通过引入特定的CSS和JS,在完全不修改原有业务逻辑的情况下,将原本粗糙的原生界面瞬间变得精致美观。 其核心方案在于,识别出浏览器原生UI(如title提示、HTML5表单验证)与自定义UI组件在功能本质上的一致性,差异仅在于视觉呈现。因此,组件开发的关键变成了“为原生功能穿上漂亮的外衣”。实现上,组件的API参数直接来源于HTML属性,回调则触发原生事件,从而让组件能与原有的JavaScript代码无缝对接。 这种“丑小鸭变白天鹅”式的平滑增强,使得UI组件回归了美化界面的本职工作,实现了与业务逻辑的清晰分离。对于追求开发效率、希望渐进式提升项目体验的前端开发者而言,这种回归本源的思路提供了一个非常实用且巧妙的视角。

本机暂存
IT 数据库/ 2016-01-26 23:45:00 / 累计浏览 2,483

如何成为MySQL DBA

这篇文章就像一份路线图,为想进入MySQL DBA领域的朋友清晰地规划了从入门到进阶的学习路径。作者凭借十多年的一线经验,指出不必过分畏惧这个岗位的门槛,并强调了扎实的Linux基础是关键的第一步。 核心内容聚焦于一条明确的DBA学习主线:从理解MySQL版本与启动原理、掌握基础SQL语言,到深入学习复制、备份恢复、压力测试,直至最终能剖析InnoDB的事务与锁机制。作者不仅列出了具体要掌握的技术点,还分享了一些实用建议,比如学习SQL规范时可以请教有经验的前辈。 文章进一步指出了向高级DBA迈进时需要拓展的知识面,包括操作系统层面的IO与内存理解、高可用架构的自主设计以及平台管理能力。最后,作者回归到技术人持续学习的本质,为这条成长之路定下了脚踏实地的基调。

本机暂存
IT 前端/ 2016-01-26 23:42:52 / 累计浏览 6,440

HTML5+CSS3 loading 效果收集

这篇讲的是前端加载动画的“进化”。随着CSS3能力的提升,那种略显粗糙的GIF加载图正在被淘汰,取而代之的是用纯CSS3、HTML5甚至SVG和Canvas构建的、流畅且充满设计感的加载动画,这已成为提升产品质感的一种明确趋势。 作者为此做了一份详实的“素材库”盘点,汇集了数十种纯CSS3实现的loading效果。从模拟彩虹渐变的条形加载器,到单元素的Slack风格动画;从精致的齿轮旋转、天气动画,到复刻Android Kitkat系统的经典效果。几乎每种设计都提供了可直接体验的Demo和源码下载链接,覆盖了从极简到创意、从拟物到抽象的多种风格。 对于前端开发者而言,这不只是一份效果预览合集。它更像一个按需取用的“创意工具箱”,你可以根据项目气质——是科技感、趣味性还是品牌一致性——去挑选一个顺眼的动效,直接嵌入项目或从中获取灵感,彻底告别过去那张单调的loading.gif。

本机暂存
IT 后端/ 2016-01-26 23:42:03 / 累计浏览 1,578

资源包的设计

这篇讲的是游戏资源包设计中的工程实践与权衡。作者从“如何把资源打包并高效更新”这一核心问题出发,指出了当前直接使用通用压缩格式(如zip)的普遍做法,以及为应对资源引用关系、大量文件检索等需求而采用自定义格式(如MPQ、AssetBundle)的趋势,其中对文件名进行hash索引是关键一步。 然而,文章敏锐地指出,hash冲突是这类设计中不容回避的问题,并以Unity的AssetBundle在冲突时直接放弃打包为例,说明了现有方案的缺陷。作者随后提出了一种简单有效的“加盐二次hash”方案:在打包时若发现hash冲突,便引入一个可确定的salt值重新计算,从而在运行时能唯一区分原文件,且强调了正确加盐(如将salt作为hash seed或循环XOR)的重要性,避免了简单拼接导致的二次冲突。 此外,文章还涵盖了资源包间的引用需依赖间接索引而非单纯hash值,以及patch更新可设计为保留完整索引的增量包、并定期生成基准全量包的策略。最后,作者将打包工具类比为git,需要实现初始化、文件追踪、版本打包与diff生成等版本管理功能。整体方案兼顾了理论基础与工程落地,对处理游戏资源管理的复杂性提供了清晰的思路。

本机暂存
IT 数据库/ 2015-12-26 20:34:04 / 累计浏览 1,339

MySql lower_case_table_names迷思

这篇讲的是从Oracle或SQL Server迁移到MySQL时,一个常被忽略的“大小写敏感”坑。作者从实际迁移项目出发,指出纠结`lower_case_table_names`设置的根源在于不同数据库系统的默认行为差异——MySQL在Linux下默认区分大小写。 他给出的实战建议很明确:优先在代码层面统一表名大小写(全大写或全小写),然后再迁移数据库,这样能保持`lower_case_table_names=0`的默认安全设置。如果时间紧张无法修改代码,只能先妥协设置`lower_case_table_names=1`,但务必在项目后期通过开启`general log`逐步排查和修正不规范的SQL。 文章最后强烈呼吁,在制定数据库规范时就该强制统一表名大小写,避免混合写法带来的无尽麻烦。这个观点对于所有需要跨平台迁移或维护规范的团队,都有直接的参考价值。

本机暂存
IT 后端/ 2015-12-26 20:29:08 / 累计浏览 3,715

JAVA虚拟机简介

这篇讲的是Java虚拟机(JVM)的基础全景。文章开门见山,帮读者厘清“JVM”这个词的多层含义:它既是一套定义行为的规范,又是如HotSpot这样的具体实现,同时也是程序运行时的一个独立实例。这种分层解读,有助于跳出“JVM就是一个黑盒”的模糊认知。 接着,文章厘清了开发者日常接触的“三件套”:JVM负责执行字节码,JRE包含了JVM和核心类库,而JDK则在JRE之上增添了开发工具。理清它们的包含关系,是理解Java技术体系的第一步。 文章后半部分聚焦JVM内部,通过图解展示了其基本结构,重点剖析了类加载子系统。它详细拆解了Bootstrap、Extension、App和Custom这四层类加载器的职责与分工,特别是指出了启动类加载器由C++实现、无法被Java程序直接引用的特殊性。 对于刚接触Java底层原理的开发者而言,这篇文章像一份清晰的地图,系统性地梳理了从宏观概念到核心模块的关键知识点,为后续深入探索内存模型、垃圾回收等打下了扎实的基础。

本机暂存
IT 后端/ 2015-12-26 20:25:31 / 累计浏览 2,980

白话PHP7扩展开发之创建对象

这篇讲的是在PHP7扩展开发中如何创建一个对象。作者很巧妙地将这个过程比喻为一个孩子从“出生”到“成长”的完整历程,让底层C语言的实现步骤变得直观易懂。 文章将创建对象拆解为几个清晰的阶段:首先定义`zend_class_entry`这个“原型”,相当于“办准生证”;接着用`INIT_CLASS_ENTRY`给对象“取名”并声明方法;然后通过`zend_register_internal_class`完成“上户口”登记。这之后,才是为对象“培养”能力——包括使用`zend_declare_property_*`系列方法定义属性(教授知识),以及通过`zend_function_entry`数组来注册具体的方法(培养行为能力)。 文章的亮点在于,它没有停留在概念阐述,而是紧贴每一个比喻阶段,给出了对应的、可运行的C代码片段。从声明内存属性到定义一个能接收参数的`learn`方法,最终汇聚成一份完整的扩展源代码。文末还附上了PHP端的调用示例和输出结果,让整个流程形成闭环。对于想动手实践的读者,作者直接提供了完整的源代码下载链接。

本机暂存
IT 后端/ 2015-12-13 22:13:09 / 累计浏览 4,745

让PHP7达到最高性能的几个Tips

这篇讲的是PHP 7性能调优的实战经验。作者(鸟哥)指出,尽管PHP 7性能相比前代已有大幅提升,但通过一系列精准的配置和编译优化,还能进一步榨取其潜力。文章提供了五个具体可操作的Tips。 核心建议包括:**务必启用Zend Opcache**(PHP 7未启用时已比PHP 5.6启用后快,但开启后仍有收益);**使用GCC 4.8以上版本编译**,可获得约5%的性能提升;**配置HugePage**以减少TLB Miss;以及开启**Opcache File Cache**(实验性)和针对特定项目使用**PGO(Profile Guided Optimization)** 进行定制化编译优化。 这些方案从基础配置到高阶编译技巧层层递进,作者通过WordPress等实例说明了PGO等优化如何为特定应用带来量身定制的性能提升,为追求极致PHP性能的开发者提供了清晰的技术路线。

本机暂存
IT 算法/ 2015-12-13 22:12:12 / 累计浏览 3,600

缓存算法–LRU

这篇讲的是两种经典的缓存淘汰算法:LRU和它的改进版LRU-K。文章开门见山,先解析了LRU(最近最少使用)的核心思想——它用一个巧妙的链表来实现,新数据插入头部,每次访问都把数据提到最前,满了就淘汰尾部那个“最久没碰”的。这种策略在热点数据集中时效率很高,实现也简单。 但文章也指出了LRU的软肋:一旦出现偶发的批量扫描,会挤掉很多热门数据,造成严重的“缓存污染”。为了解决这个问题,文章引入了LRU-K。这里的“K”代表一个访问次数阈值,比如我们常说的LRU-2。它不再因为一次访问就把数据加入缓存,而是让数据在历史队列中先“排队”,只有被访问了K次,证明它确实是热点,才获准进入缓存队列。 这样一来,LRU-K的命中率通常比LRU更高,能有效抵抗缓存污染。但天下没有免费的午餐,它的实现需要维护额外的访问历史队列并进行排序,算法复杂度、内存消耗和CPU开销都比LRU要高。文章最后也点明了选择的关键:LRU胜在简单高效,适合大多数常规场景;而当你面对严重的访问模式波动时,LRU-K(尤其是LRU-2)提供了一个更稳健的选择。

本机暂存
IT 安全/ 2015-12-13 22:04:23 / 累计浏览 3,165

TLS 握手优化详解

这篇讲的是随着HTTPS成为主流,如何优化TLS握手带来的性能开销。作者从TLS握手需要消耗两个RTT(往返时间)的痛点出发,详细拆解了False Start优化技术——它允许客户端在握手尚未完全结束时就提前发送加密的应用数据,从而将握手延迟从两个RTT压缩至一个。文章还深入分析了证书链的优化策略,指出证书过长或中间证书缺失会导致额外开销,并推荐了使用ECC证书来显著减小证书体积。通过Wireshark抓包图,文章直观展示了这些优化前后的对比效果。对于正在部署HTTPS的开发者来说,这些关于握手流程和证书配置的实践细节,能有效帮助他们在不牺牲安全性的前提下提升连接速度。

本机暂存
IT 安全/ 2015-12-13 22:02:17 / 累计浏览 2,030

Java反序列化漏洞被忽略的大规模杀伤利用

这篇讲的是Java反序列化漏洞被大家热议时,一个关键攻击面却被普遍忽略了。作者指出,焦点大多集中在Web中间件上,但实际上,像RMI这类在企业级Java CS架构中广泛使用的通信协议,其传输过程完全基于序列化,是漏洞大规模利用的“原罪”。 文章核心观点在于,攻击者只需找到开放的RMI服务端口(默认1099),配合Apache Commons Collections等常用库,就能轻易构造攻击载荷实现远程代码执行。作者批评了许多修复建议只是“治标不治本”,并特别点明了原始研究中关于RMI利用的部分被众多安全人员忽视的现象。 文中不仅分析了原理,还对比了通用利用工具(如ysoserial)在获取回显交互时的不足,并展示了作者为解决此问题而编写的、针对RMI的具体实现代码。这提醒安全研究者,漏洞的实际影响面往往比最初曝光的更广,在企业内网的分布式服务中,这类风险可能更为隐蔽和普遍。

本机暂存
IT 移动开发/ 2015-12-13 21:56:38 / 累计浏览 3,733

网页与原生App如何交互

这篇讲的是网页与原生App之间那道“隐形的墙”是如何被打通的。作者从日常场景切入——比如用App时点击登录,瞬间唤起微信授权,无需输入密码——引出了核心问题:这种流畅的交互背后是什么技术在支撑? 文章以Android的Js2Java机制为例,剖析了WebView如何充当“桥梁”,让运行在网页端的JavaScript与原生App的Java代码能够互相调用。作者特别点出,虽然Java和JavaScript名字相似,但本质迥异,而WebView正是连接这两个世界的组件。通过这个桥梁,网页可以调用原生系统的电话、支付等能力,极大地丰富了H5页面的功能。 文章也指出了这是一把“双刃剑”:原生App开放的能力越多,网页的体验就越接近原生,但恶意页面也可能利用这些能力。因此,能力的开放需要精细的权限控制,就像微信那样,前端必须申请接口权限才能使用支付等功能。 最终,这种交互技术让开发者能取长补短:用网页的灵活性实现快速更新和运营,用原生组件提供流畅的核心体验(如支付),从而构建出体验更优的混合型应用。

本机暂存
IT 移动开发/ 2015-12-13 21:43:13 / 累计浏览 4,660

APP的推送是咋回事

你有没有好奇过,为什么明明关闭了淘宝或新闻APP,它们第二天却又能出现在通知栏里?这篇科普文从这个常见现象入手,拆解了APP推送背后的“小动作”。 文章解释,传统APP采用“拉”模式:只有你打开应用,它才去服务器请求新内容。而推送系统则相反,是服务器主动“推”消息给手机,甚至能唤醒已关闭的APP。要实现这一点,核心是建立并维持一条与服务器的“长连接通道”。通过定期发送“心跳”包保持通道活跃,服务器便能随时下发新消息。 文章进一步对比了“轮询”(反复请求)与“长连接”两种方案的利弊,并深入Android与iOS的不同实现。iOS通过APNs建立了统一的系统级通道,解决了多个APP各自为政的问题。而在国内Android生态中,由于缺乏GCM,各APP只能自建长连接,并与手机管家类应用的“后台清理”机制持续对抗,衍生出了自启、互唤等生存策略。 整篇文章用打电话、心跳这些生动的比喻,把推送技术从原理到现实中的博弈讲得透彻又有趣,帮你真正看懂手机里那些“不请自来”的通知是怎么来的。

本机暂存
IT DevOps/ 2015-12-13 21:39:57 / 累计浏览 6,386

让我们来谈谈分工

这篇谈的是分工在技术和组织中的利弊与选择。作者从雅虎取消QA团队的新闻出发,引出一个根本问题:我们习以为常的“专职分工”,究竟是效率之源还是视野之锁? 文章回溯了亚当·斯密在《国富论》中对分工的赞许——它通过提升熟练度、减少转换损耗、催化工具创新,极大地解放了生产力,福特的流水线就是经典例证。但分工也有代价:它可能将人固化为“不思考的机器”,滋生厌倦,并带来高昂的沟通协同成本。 更深刻的剖析来自全球化视角。分工的逻辑在商业中常滑向“比较优势”,即选择成本最低者而非最合适者。这解释了外包浪潮的迁移路径,也警示了单一技能岗位的脆弱性——你的工作可能因更廉价的劳动力而消失,与你是否“全栈”无关。 最终,作者将讨论引向技术管理层面,指出理想的分工应从“基于技能的控制型”转向“基于责任心的承诺型”。技术本身既是分工的天敌(自动化可替代重复劳动),也是解决分工难题的关键。文章最后留给读者关于个人职业选择的思考:是甘为体系中一枚精密的螺丝钉,还是努力成为能应对复杂挑战的多面手?

本机暂存
IT 数据库/ 2015-11-08 23:00:10 / 累计浏览 3,560

磁盘空间满了之后MySQL会怎样

当数据库磁盘被撑爆后,MySQL会如何反应?这篇讲的正是这个运维中常见的“车祸现场”。磁盘满后,MySQL将无法写入任何新数据,包括表数据和binlog。不过,由于InnoDB可以先将脏页存放在内存,所以问题不会立刻爆发,只有在涉及binlog写入时,请求才会被阻塞。 文章详细描述了MySQL的后续行为:它会每分钟检查一次磁盘空间,一旦发现可用空间就立即恢复写入;如果连续十分钟仍无空间,则会在日志中记录一条告警。对于处理办法,作者给出了几个具体步骤:及时清理无用文件释放空间;若发现有线程被阻塞,可将其杀掉,等待系统下一轮自动检测后恢复正常;有时一个被阻塞的线程会引发连锁阻塞,处理掉源头线程即可解除整个卡顿。 此外,文章还特别提到了一个例外情况:在执行`REPAIR TABLE`、`OPTIMIZE TABLE`或批量更新索引等操作时,如果磁盘满了,MySQL会将涉及的表标记为崩溃状态并删除临时文件(`ALTER TABLE`操作则会主动放弃并清理)。需要注意的是,若此时mysqld进程意外终止,这些临时文件需要人工删除才能释放空间。整篇文章从现象到原理,再到实操应对,提供了清晰的排查与处理思路。

本机暂存
IT DevOps/ 2015-11-08 22:56:40 / 累计浏览 1,922

[坑]打rpm包时,注意%post和%postun的执行顺序

这篇讲的是RPM打包中一个容易被忽略的坑:升级软件包时,错误的脚本执行顺序会导致配置被意外修改。作者在打包PHP扩展时发现,每次执行`yum update`升级成功后,新扩展在php.ini中的配置项就会被自动注释掉。 问题出在spec文件的`%postun`段。升级时,系统会先执行新包的`%post`段(安装后),再执行旧包的`%postun`段(卸载后)。作者旧包的`%postun`脚本原本是为卸载准备的,会用sed注释掉扩展配置,这就在升级过程中被误触发了。 根本原因在于`%postun`段接收的参数:参数0代表卸载,1代表升级。解决方案很直接——在`%postun`脚本中增加判断,只有当参数为0时才执行注释操作。这样升级时配置就能完好保留。文章还清晰梳理了`%pre`、`%post`、`%preun`、`%postun`在不同场景(安装、升级、卸载)下接收的参数含义,对编写可靠的spec文件很有参考价值。

本机暂存
IT 移动开发/ 2015-11-08 22:32:55 / 累计浏览 2,339

QQ浏览器X5内核问题汇总

这篇整理自X5团队内部资料的清单,系统梳理了微信、QQ浏览器中使用的X5内核(基于Android 4.2 WebKit)常见的41个开发者问题与解决方案。文章以问答形式展开,覆盖了从布局渲染、脚本性能到多媒体播放、网络定位等广泛场景。 例如,它明确了为何使用iScroll.js局部滚动会卡顿(建议改用CSS overflow属性),解释了-webkit-filter和WebGL在当时的兼容性限制,并给出了定位失败时如何检查JS中timeout参数设置的排查路径。对于Canvas内存限制、Cookie的4KB截断、点击事件300ms延迟等底层机制,也提供了清晰的原理说明和应对建议。 文章最后透露,X5内核团队已启动基于Chromium的新版本预研,以提升标准支持和性能。这份详尽的“避坑指南”,对于至今仍在处理Android WebView碎片化兼容问题的前端与移动端开发者,依然具有直接的参考价值。

本机暂存
IT 前端/ 2015-11-08 22:19:49 / 累计浏览 1,642

CSS中的margin外边距折叠现象

这篇讲的是CSS中一个常见但容易让人困惑的布局现象——margin外边距折叠。文章从概念入手,清晰地定义了发生折叠的两个核心条件:相邻的margin之间没有被内容、padding、border或clear等属性分隔,且它们都处于普通文档流中。 文章的重点放在了折叠的具体计算规则上,通过三个直观的示例代码和示意图,分别讲解了参与折叠的margin全部为正值、全部为负值,以及正负值混合时的处理方法。例如,当两个正margin(50px和100px)相遇时,最终间距取较大的100px;而当正负margin(-50px和100px)相遇时,则会先取绝对值最大的负margin,再与最大的正margin相加,得到50px的结果。 这些规则解释清楚了为什么在垂直方向上,两个块级元素的间距有时会“不听使唤”。对于前端开发者,尤其是刚接触CSS布局的开发者来说,理解这一机制是避免样式计算“踩坑”、精准控制页面元素间距的基础。

本机暂存
IT 开发者/ 2015-11-08 22:18:39 / 累计浏览 3,735

更改 Windows 10 命令行字体

这篇讲的是中文版 Windows 10 命令行一个让人头疼的细节:默认的“新宋体”字体,会把数字 1 和小写字母 l 显示得几乎一模一样,对于经常使用命令行的开发者来说,这简直是辨认灾难。 文章直接给出了两个具体的解决办法。最简单的是在命令行输入 `chcp 437`,将代码页从中文的 936 切换到英文的 437,之后就能在属性里选择像“Consolas”这样区分度更高的字体。不过作者也指出了后续问题——切换后中文会显示不全,因此需要再通过 `chcp 936` 切换回来。 如果希望尝试更多字体,文章还进阶介绍了注册表方法:在指定的注册表路径下新增字体键值,从而让系统命令行支持自选的等宽字体。作者最后小小吐槽了一下微软不直接提供字体选择功能,倒是说出了不少人的心声。

本机暂存
IT DevOps/ 2015-11-08 22:17:18 / 累计浏览 2,444

看不见的成本

这篇文章从一个春节买火车票的故事说起:是花时间去排队,还是多花100块钱找黄牛?作者用这个选择引出“看不见的成本”这个核心观点——排队消耗的时间、承受的寒冷、以及最终可能一无所获的风险,都是隐藏的代价,而多付的100元可能换回更宝贵的半天自由时间和更高的确定性。 围绕这个洞见,作者进一步举了几个实际场景:招人时,主动在预期薪资上多给几千块,这笔“额外”成本带来的员工激励和价值创造,远超一次效果平平的市场投放;通勤时,为了确保准时而选择挤地铁,是用身体不适的确定成本,规避了堵车这种高风险、不可控的代价。对刚入行的年轻人,最宝贵的“成本”是时间,应优先投资于技能成长而非琐碎事务。 文章最终指向一种决策思维:在追求目标(“要赢”)的信念下,学会重新评估那些不易察觉的成本,放下眼前的执念,选择在长期看来价值最大化的路径。这不只是一本经济账,更是一种对个人时间和价值认知的清醒判断。

本机暂存