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

最新文章

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

IT 开发者/ 2016-02-16 20:39:23 / 累计浏览 2,876

程序员为什么要学好英语

这篇文章探讨了程序员为何不应止步于“专业英语”,而需掌握真正的英语能力。作者从校园里的《计算机英语》课程切入,指出许多人误以为程序员只需背熟术语、看懂文档即可,但这导致技术概念如同“天外陨石”般生硬难记。 真正的关键在于理解英文词汇的原生语境。文章以 cache(隐蔽的储藏处)和 buffer(减震装置)为例,说明它们在计算机中“缓存”与“缓冲”的含义正是从生活经验中演化而来。同样,serialize(无间隔排列)和 flatten(打平)的生动本意,让“序列化”与“扁平化”的操作变得直观。若仅靠中文译名死记硬背,不仅易混淆,也丢失了技术术语中鲜活的逻辑。 作者强调,许多术语如同从生活土壤中生长的庄稼,英文原意能为理解提供“根系”。仅靠翻译或硬背专业词汇,难以融会贯通,甚至会使程序员显得“古怪”而无趣。真正的出路在于完整地学习英语,用英文思考和理解世界,从而让技术学习不再是机械的搬运,而是有机的生长。

本机暂存
IT 前端/ 2016-02-16 20:38:37 / 累计浏览 1,694

CSS 样式规则的匹配算法实现

这篇讲的是移动端开发中的一个具体问题:如何在自定义框架里,让CSS选择器像在浏览器中一样准确地匹配到UI控件。作者从自己开发的iOS CSS布局框架CocoaUI出发,拆解了其中CSS样式规则匹配算法的实现。 文章把核心放在了数据结构和匹配逻辑上。它定义了一个包含选择器数组的样式对象,并为其实现match方法。有趣的是,实现时并没有按照我们阅读CSS从左到右的习惯,而是采用了从右到左的顺序进行匹配。 这种倒序匹配有一个高效的关键点:先判断“关键元素”(即最右边的选择器)是否与目标节点匹配。如果不匹配,则整个规则立即失效,省去了不必要的遍历。匹配成功后,再依次向左,让目标节点的祖先节点与剩余选择器进行比对。整个过程在遇到节点树顶端或所有选择器都匹配完成时终止,清晰高效。 作者在讲解算法的同时,也点明了CSS“级联”特性与树结构的天然关联,并提供了完整的实现代码仓库链接,让读者不仅能理解思路,也能看到工程实践。

本机暂存
IT 算法/ 2016-02-16 20:36:16 / 累计浏览 1,731

用 2d 缩放及斜切变换模拟斜视角下的旋转

这篇讲的是作者从一次游戏体验出发,发现游戏《Invisible Inc》在低配电脑上依然流畅运行等距视角(isometric)下的旋转动画,并由此推敲其图形实现原理的过程。 通过分析游戏资源文件,作者发现场景物件(如门和墙)仅有一到两张正面图片,并非预渲染多角度素材。其核心思路是:游戏引擎以2D方式运行,利用仿射变换模拟了3D的斜视角旋转。具体做法是先对图片进行X轴缩放,再施加一个特定的斜切变换,最终通过一个整合后的矩阵(如文章中推导的[cos(x), sin(x)/2, 0, 1, 0, 0])在实时运算中变形图片,制造出透视错觉。作者还通过一段CSS代码直观演示了这一变换效果。 文章末尾,作者分享了为该游戏制作中文汉化Mod时遇到的两个实际问题及其解决方法,这些关于游戏文本排版引擎和本地化字符串格式化的经验,对同类型工作也有参考价值。整体上,文章从现象剖析到原理推导,再到工程实践,是一次有趣的技术探索。

本机暂存
IT 后端/ 2016-02-16 20:34:34 / 累计浏览 3,543

三次性能优化经历

这篇分享的是作者在技术生涯中三次重要的性能优化经历,涵盖了Portal、Service和Spark三个不同场景,每次优化都持续数月,充满了挑战与实战心得。 在Portal优化中,作者强调首先厘清前后端交互模型,通过划分页面组件的动态与静态部分来实施缓存策略,并指出统一接口设计对于优化的基础性作用——杂乱无章的交互模型往往成为噩梦。Service优化则聚焦高并发查询场景,尝试了Memcached作为中心缓存以提高命中率,但需处理缓存失效带来的风险和延迟问题;同时探索了计算迁移到客户端和异步预处理,最终将数据源迁移到NoSQL的DynamoDB以减轻数据库压力。Spark优化更为系统化,作者测试了不同实例类型、内存配置和executor数量下的性能表现,评估性价比,并修正代码中的并行化问题;特别关注了异常数据量下的稳健性,如Q4业务暴涨时的处理。 作者通过这些复盘揭示,性能优化的核心始终围绕CPU、内存、网络和并行度的平衡,但具体策略需因地制宜。优化时不仅要关注单一指标,还需考虑整体系统行为,比如缓存失效时的压力转移,或Spark中

本机暂存
IT 后端/ 2016-02-16 20:34:00 / 累计浏览 2,187

iphp 框架增加 lazyload 特性

这篇讲的是iphp框架如何通过引入lazyload特性来解决一个常见的性能优化问题。 作者从基类设计的便利性出发,指出现实中的痛点:为了使用方便,基类通常会一次性加载所有可能用到的属性到Context对象中。但这会导致不必要的数据库查询,造成性能浪费。为了解决这个问题,作者实现了`Context::lazyload()`方法。 核心思路非常巧妙:它允许开发者声明一个属性,并绑定一个回调函数。这个属性只有在第一次被实际访问时,才会触发回调函数去执行真正的数据加载(比如查询数据库)。如果整个请求流程中该属性从未被使用,则完全不会产生开销。文章通过一个具体的`AppController`示例清晰地展示了这一机制:`account`属性被延迟加载,只有在子类中需要用户账户信息时,才会去查询,否则不会发生任何数据库请求。 通过这种方式,iphp框架将资源的加载控制权交给了实际的使用场景,在保持代码简洁性的同时,显著提升了应用的响应速度和资源利用效率。

本机暂存
IT 移动开发/ 2016-02-16 20:32:38 / 累计浏览 1,925

苹果iOS系统下检查第三方APP是否安装及跳转启动

这篇讲的是如何在iOS系统中检测其他APP是否安装,并实现跳转启动。作者从移动端常见的“应用间跳转”需求出发,详细介绍了基于URL Scheme框架的解决方案。核心方法是通过调用`canOpenURL:`方法判断目标APP的Scheme是否被系统支持,从而得知其是否安装;再使用`openURL:`方法即可唤起对应应用。文章不仅给出了清晰的代码示例(如检测和启动QQ),还整理了一份极其详尽的“常用APP的URL Scheme前缀”列表,覆盖社交、出行、工具、娱乐等上百款应用,甚至包括部分系统功能设置的跳转路径。 对于iOS开发者而言,这份列表省去了大量查阅官方文档的时间。无论是想快速集成第三方登录、分享功能,还是探索应用间的数据传递与交互,文中提供的方案都直观且易于实现。需要注意的是,自iOS 9起,使用`canOpenURL`需要在项目的`Info.plist`中声明要查询的Scheme,文章虽未深入讨论此权限变更,但其提供的基础逻辑与Scheme索引仍具很高的实用参考价值。

本机暂存
IT 数据库/ 2016-02-16 20:25:32 / 累计浏览 2,502

Oracle 11g大对象数据新技术

这篇内容专门针对 Oracle 数据库中令人头疼的 ORA-00600 内部错误,提供了一套从定位到解决的系统化诊断手册。它首先点明,这类错误本质上是 Oracle 软件遇到了不一致的低级异常,成因可能涉及 Bug、操作系统或硬件。 文章的核心价值在于其清晰的排查路径:第一步永远是检查 alert.log 和 trace 文件;第二步是利用 Metalink 提供的专用诊断工具,通过输入错误的第一个参数和数据库版本号快速检索知识库;第三步则是整理必要信息,向 Oracle Support 提交 SR。 作者特别强调了 trace 文件的完整性和参数信息的关键作用,并用“ORA-00600 [729]”空间泄漏的实例,演示了如何通过设置特定事件参数来规避这类可忽略的内存泄漏告警。整体而言,文章将复杂的内部错误排查流程,拆解成了可操作的步骤,对 DBA 构建故障处理预案很有参考价值。

本机暂存
IT 数据库/ 2016-02-16 12:07:56 / 累计浏览 3,264

那些常见的Oracle错误

这篇讲的是Oracle数据库运维中那些高频出现的“拦路虎”。作者从DBA经常面临的实际故障现场出发,梳理了ORA-00600、内存耗尽、空间不足等几类典型问题。文章不止于罗列现象,而是深入到了问题的“肌理”——比如ORA-00600这类内部错误,其第一个参数和数据库版本就是定位根因的钥匙;ORA-04030则往往与PGA内存分配和操作系统限制有关。 更实用的部分在于诊断思路。文章引导读者从检查alert.log和trace文件入手,还指出了Oracle官方在Metalink上提供的600/7445诊断工具这个利器。针对具体案例,如ORA-00600[729]“UGA空间泄露”,给出了设置事件参数“10262”来屏蔽小泄露的明确解决方案。这种“故障现象-诊断方法-官方工具-具体参数”的完整链条,为运维人员构建了一套可复用的排查预案,能有效降低面对突发故障时的手足无措感。

本机暂存
IT 移动开发/ 2016-02-15 17:08:09 / 累计浏览 4,013

苹果iOS系统下的推送机制及实现

这篇指南从iOS应用在后台无法持续运行、难以实时通知用户的现实问题出发,详细剖析了苹果推送通知服务(APNS)的完整解决方案。 核心是讲解APNS的工作流程:应用获取设备标识(device token)并交由你的服务器保管;当需要推送时,服务器向APNS发起请求,再由APNS将通知分发到用户设备。文章清晰地拆解了从用户授权、证书配置到通知主体JSON格式编写的全过程,包括alert、sound、badge等字段的具体用法。 更重要的是,它指出了开发者必须注意的关键点:APNS并不能保证通知的送达率和实时性,发送延迟或失败是常态;同时,在苹果的证书和配置文件体系下进行设置的过程相当繁琐,需要开发者耐心操作。文中还探讨了维护推送服务可能带来的服务器负载与成本问题。 如果你正在为iOS应用寻找后台唤醒用户的方法,那么这篇从原理到实践、兼顾理想与现实限制的讲解,会是一个扎实的起点。

本机暂存
IT 数据库/ 2016-02-14 00:06:24 / 累计浏览 2,663

Oracle字符类型存数字及查询数字时使用单引号走不走索引的问题

这篇文章解决的是一个在实际数据库开发中容易产生争议的问题:用varchar2类型存放的数字字段,在查询条件中给数字加上单引号,到底会不会导致索引失效?作者从团队内部的实际分歧出发,通过在Oracle 11.2.0.4.0版本上进行测试来验证结论。 文章首先通过建表和数据准备,复现了讨论的场景。核心对比点在于两种常见的错误认知:一种是认为“char类型存数字,查询不加单引号不走索引”;另一种则想验证“varchar2类型存数字,查询加单引号是否还会走索引”。作者通过具体的执行计划截图(文中虽未显示但提到测试信息),清晰地展示了不同写法下的索引使用情况。 最终得出了明确的结论:对于varchar2类型字段,无论在查询时是否为数字加上单引号,都能正常走索引。这个结果厘清了一个常见的误解,并为后续将varchar2字段改为number类型的设计决策提供了数据支持。对于DBA和开发人员而言,理解数据库在处理隐式类型转换时的具体行为,有助于编写出既准确又高效的SQL语句。

本机暂存
IT 开发者/ 2016-02-13 23:58:27 / 累计浏览 4,028

如何写简历

这是一位资深技术面试官看了200多份简历后的经验之谈,核心就一个词:**换位思考**。作者从招聘方的视角,拆解了一份“让人想约面试”的简历该是什么样。 文章从最基础的**文件命名**说起,建议直接带上姓名、岗位和城市,比如“崔凯-UI设计-北京”,这能极大方便HR归类和安排,别用光秃秃的“个人简历”。**项目经验**部分尤其实在:直接对齐招聘需求,把相关项目放前面,有在线链接就给链接,别让人费劲去搜。作者吐槽了40多MB的设计压缩包,也庆幸自己多花功夫搜了App Store——但更多时候,面试官没这个耐心。附带**GitHub或博客**是加分项,但得有内容,四年没更新的仓库反而会减分。 最后提醒了**格式**这种魔鬼细节:请用PDF,别用自定义字体的Word;如果用HTML,记得加打印样式,不然炫酷的页面打出来可能是一团黑。整篇文章没有空泛的说教,全是来自招聘一线的细节和痛点,最终指向一个朴素的结论:让拿到简历的对方感到舒服和清晰,事情就成了一大半。对于求职者来说,这比任何模板都更有参考价值。

本机暂存
IT 前端/ 2016-02-13 23:56:30 / 累计浏览 1,883

CSS1-CSS3 <color>颜色知识知多少?

这篇文章带我们回顾了CSS颜色关键字从1.0到3.0的演变历程。作者从一个实际开发者的视角出发,指出早期CSS1标准仅支持16种基本颜色关键字,这受限于当时的显示设备条件;到了CSS2,才新增了orange、brown等少数颜色;而CSS3时代则引入了大量源自X11窗口系统的颜色名称,使得可选关键字激增至147个。 作者坦言,尽管他早在2010年就整理过这些扩展颜色名,但因其拼写复杂、不便于记忆,在中文开发者社区中传播效果并不理想。文章的核心价值在于,它并非简单罗列,而是按CSS版本层级对颜色关键字进行了清晰归类与可视化展示,帮助读者直观理解规范的历史扩展脉络。对于前端开发者而言,这份梳理清晰的列表可以作为快速查阅颜色关键字的实用参考。

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

html5 section和article,向左还是向右?

这篇讲的是HTML5中一对让不少前端开发者犯难的兄弟标签:section和article。作者没有从枯燥的定义出发,而是直指核心困惑——按照字面意思理解,“部分”和“文章”在实际布局中常常可以互相包含,界限非常模糊。 文章抓住了区分两者的关键:article强调内容的“独立性”和“完整性”,是可以被单独复制或引用的,比如一篇博客、一则用户评论;而section更侧重于对内容进行逻辑上的“分块”或区域划分,比如一篇文章中的不同章节。作者通过两个直观的代码示例来印证这一点:一个是在描述“苹果”的文章下,用article包裹每条彼此独立的用户评论;另一个是用section将同一篇文章拆分为“红富士”和“国光”两个介绍段落。 值得注意的是,文章提醒大家不要陷入“标签按内容块头大小来选”的误区,语义的本质在于内容本身的功能。最后,作者还总结了使用section时的几个实用禁忌,比如不要把它当样式容器、不要为无标题的内容区块使用它。这些基于语义和实践的细节梳理,能帮助开发者在编码时做出更清晰的选择。

本机暂存
IT 移动开发/ 2016-02-13 23:43:21 / 累计浏览 2,765

移动端点击、触碰随记

这篇讲的是移动端开发里几个老生常谈却又总踩坑的“事故”:点击延迟、点穿和焦点获取错误。作者从实测数据出发,直观展示了移动端原生click事件为何存在约300ms的固定延迟(为了判断是否双击缩放),以及为何要拥抱更快的tap事件(如zepto的实现)。 文章深入分析了触摸事件与鼠标事件的触发顺序,指出tap和click本质是同一次触碰的不同阶段。针对“点穿”这个经典坑(根源在于事件绑定层级),作者对比了阻止事件流的方法,明确preventDefault是关键大招,并顺势对比了fastclick、Yocto等库的解决方案,分析了它们的原理与适用场景。 最后,文章还深入探讨了在Angular框架下如何处理ng-click点穿问题,以及如何区分处理input、textarea等元素的焦点获取需求,给出了具体的代码思路。全文从现象到原理,再到框架内的实战方案,是一份扎实的移动端触控问题排查指南。

本机暂存
IT 前端/ 2016-02-13 23:41:05 / 累计浏览 1,242

轻松入门css3之border-image

这篇讲的是CSS3中一个常被误解的属性:border-image。作者指出,很多人按传统边框的思路去理解它,结果容易卡住。文章的核心是帮读者转换思维——别把“图片边框”当成“线框加图片”,它更像一个“九宫格”剪裁游戏。 文章从最基础也最关键的两步讲起:首先是横竖两刀把源图裁成九块,裁剪尺寸遵循上、右、下、左的规则;其次是理解裁剪后的动作——四个角保持原样,中间被挖空,剩下的边缘部分会根据round(平铺)、repeat(重复)或stretch(拉伸)的方式向四周“撑开”以形成边框。作者通过同一张图展示了三种模式的效果,让差异一目了然。 更实用的是,文中总结了四个最容易踩坑的注意事项:裁剪尺寸默认单位是px、显示方式参数只能写一到两个、必须显式设置border-width、以及边框宽度与原图尺寸独立。最后,文章给出了完整的属性语法,并解释了“边框图像超出边框的量”这个进阶参数的含义。 对于想掌握border-image的开发者,作者建议先放下固有认知,记住“九宫格”原理和那几条注意事项,动手试过基本效果后,再回头深入理解会更透彻。

本机暂存
IT 后端/ 2016-02-13 23:39:24 / 累计浏览 1,723

由NodeJieba谈谈Node.js异步实现

这篇文章以NodeJieba这个中文分词库的源码为例,深入浅出地拆解了Node.js异步操作的底层实现原理。作者没有停留在理论层面,而是直接打开`cut`函数的C++实现代码,带领读者一步步看清异步调用的“幕后”。 核心思路非常清晰:当我们在JavaScript中调用异步的`cut`函数时,实际是创建了一个`CutWorker`对象并将其推入`NanAsyncQueueWorker`队列。真正的耗时分词操作`segment.cut()`在后台线程的`Execute`方法中静默执行,完成后则通过`HandleOKCallback`回到主线程触发回调。 文章特别点明了两个巧妙而关键的设计:一是`CutWorker`必须用私有成员变量(如`inputStr`)来保持状态,确保后台线程执行时参数依然有效,即使原栈变量已销毁;二是整个异步非阻塞的魔力,正源于“主线程只负责投递任务,后台线程持续轮询队列并执行”这一经典线程池模型。 通过这个具体的例子,作者揭示了Node.js异步的本质其实并不高深,它无非是“状态保存”与“后台队列执行”两个核心环节的组合,为许多初学者揭开了异步编程的神秘面纱。

本机暂存
IT 移动开发/ 2016-02-13 23:14:36 / 累计浏览 2,624

一个“三端”开发者眼中的React Native

这篇讲的是一位常年穿梭于前端、服务端和客户端的“三端”开发者,初次接触React Native时的真实感受与深度观察。作者没有停留在技术介绍,而是从自己饱受iOS开发中代码冗长、布局繁琐、调试耗时等痛点困扰的经历出发,生动地分享了RN如何像一位“校花”般用统一的Component模型、动态绑定、类CSS样式和Flexbox布局,解决了这些长期痛点。 文章直率地列举了RN当前阶段的不足,比如组件不全、性能损耗、仅支持iOS以及代码并非全平台通用等现实问题。但核心价值在于作者提出的理性视角:技术讨论不能脱离场景。他从前端与客户端两个角度分析了RN带来的影响——对前端而言,这是拓展技术栈的有趣方向;对客户端开发者,它简化了开发流程,并带来了更高效的NPM生态。 最后,作者展望了一种未来的协作模式:前端负责表层业务开发,客户端团队则专注于构建和封装底层原生组件。文章结尾鼓励开发者不要止于议论,而应动手实践,在学习中积累。这种从个人实践上升到团队协作模式的思考,为如何看待这类跨平台技术提供了切实的参考。

本机暂存
IT 前端/ 2016-02-13 23:11:47 / 累计浏览 1,822

解读CSS布局之-水平垂直居中

这篇文章从CSS布局的分类入手,系统梳理了水平垂直居中的多种实现路径。作者基于实际项目已无需兼容低版本IE的背景,重点介绍了 `line-height + text-align:center`、盒模型(padding/margin填充)、绝对定位(50%偏移 + transform/负margin)等核心方法,并附有可运行的Demo。 文章的关键在于对比了不同方案的适用场景:`line-height` 方案简单但仅限单行文本;盒模型填充方案性能好、不触发回流,是重要的布局思想,但通常需要预知尺寸;而绝对定位的 `transform` 方案则能实现对未知宽高元素的完美居中,是现代前端的常用技巧。作者通过代码片段与原理解释,清晰地呈现了每种技术的取舍点。 通篇行文从整体布局观出发,落脚于具体实现细节,为开发者在面对“居中”这个高频需求时,提供了清晰的选择图谱和可直接套用的代码参考。

本机暂存
IT 前端/ 2016-02-13 23:08:49 / 累计浏览 2,204

再谈怎样更好的写css

这篇讲的是作者在独自负责一个项目全部前端工作后,基于一年的实践痛点,对“如何更好地编写和维护CSS”进行的再思考。与初谈的基础不同,这次更聚焦于项目中的实战心法。 作者从如何“庖丁解牛”地解构视觉稿出发,强调应将页面按区块模块化,并采用“基类+扩展类+实例类”的命名方式来组织代码,以增强复用性和可读性。文章重点讨论了选择器的使用原则,主张多用类选择器,慎用元素选择器以实现样式与结构的解耦,并解释了为何要控制CSS选择器嵌套层级——这与浏览器从右向左的解析机制直接相关。 此外,文章也谈到了CSS预处理工具(如Sass、Less)和后处理工具(如Autoprefixer)的价值,认为它们能显著提升编码效率和兼容性处理能力。最后,作者展望了CSS3带来的强大能力(如Flexbox、动画),指出CSS的边界正在不断拓宽,鼓励开发者积极尝试新工具与新特性,以更灵活地解决问题。整篇文章源于实战,其模块化和工具化的思路对追求代码可维护性的前端开发者颇具启发。

本机暂存
IT 前端/ 2016-02-13 23:06:48 / 累计浏览 1,779

初谈怎样更好的去规划CSS

这篇讲的是一位前端开发者如何从零开始,逐步构建更合理、高效的CSS代码体系。作者从初学者常见的内联式、内嵌式写法说起,详细对比了它们与外联式CSS在实现结构表现分离上的差异,并自然引出了CSS优先级、选择器特殊性(包括类、ID、包含关系及伪类等)这些核心概念。 文章的核心在于分享一套实用的CSS规划思路:首先通过全局定义和继承来处理共性样式,节省大量重复劳动;其次构建可重用的CSS组件库(如重置、公共样式),提升开发效率;再者强调模块化组织和语义化命名,避免代码混乱。作者还提倡用“效果类”封装通用的视觉呈现(如阴影、遮罩),只需在使用时传入特定参数,这种思想颇具工程化色彩。 整篇文章以作者个人的实践与踩坑经验为主线,从基础概念平滑过渡到项目级的架构规划,对前端新人理解CSS组织逻辑、以及中级开发者优化代码结构,都提供了清晰且可操作的路径。

本机暂存