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

最新文章

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

IT 开发者/ 2015-11-02 22:53:32 / 累计浏览 5,800

低级程序员和高级程序员的区别

这篇讲的是程序员能力差异背后的关键分水岭。作者从常见的误解切入:许多人以为高级程序员只是“写代码更快、bug更少”,但实际上,真正的分野在于看待问题的方式。 文章以网络购票系统为例做了生动对比。一个典型的“低级”实现可能99%的时间都运行良好,但它把订单状态简单交付给一个网络请求。高级程序员会立刻想到:网络是不可靠的,请求的每一步都可能中断。正确的做法不是假设TCP协议“绝对可靠”,而是将每一次交互都视为可能失败,并从逻辑上设计补偿机制——比如引入独立的对账进程,通过“重试”和“状态确认”来保证系统最终一致性。 作者指出,高级程序员之所以高级,在于他们深刻认识到bug的必然性,并致力于用严谨的逻辑与系统抽象,构建一个滴水不漏的防御体系。这不仅仅是编码技巧,更是一种面对复杂性的设计哲学。

本机暂存
IT 前端/ 2015-11-02 22:52:43 / 累计浏览 2,103

大搜车前端开发模式:被动编译和主动编译

这篇讲的是大搜车前端团队如何根据业务发展,演进他们的开发构建模式。作者从团队规模扩大、业务复杂度提升的背景出发,坦诚原有“被动编译”模式开始力不从心。 所谓“被动编译”,核心是源码在被浏览器访问时才通过小型服务器(ads)动态编译,实现了零配置、环境统一和高度灵活的动态应用(如在线换肤)。但随着 AngularJS、React 和 ES6 的大规模使用,这种模式难以处理复杂的打包需求。 因此,团队引入了“主动编译”作为补充。他们选用 gulp 作为构建工具,用于处理较重的前端项目,在本地完成打包后再上传。重要的是,这并非颠覆,而是互补:重项目用 gulp 独立构建,普通页面仍沿用简单高效的被动编译。 文章不仅分享了技术选型的思考,也强调了引入新模式时的风险控制,例如统一项目模板、规范插件使用。这为面临类似技术栈演进与团队协作平衡问题的团队,提供了一个务实且可参考的架构调整思路。

本机暂存
IT 算法/ 2015-11-02 22:47:54 / 累计浏览 3,099

我为什么要使用哈希

这篇讲的是如何用哈希技巧解决一个经典的算法问题:在二叉树中找出所有结构完全相同的子树。 文章从一道大厂面试题切入。问题要求给定一棵二叉树,找出所有彼此完全相等的子树对。作者分享了自己的通过面试的解法,核心思路正是借助哈希。通过后序遍历整棵树,为每个节点计算一个哈希值——叶子节点用一个固定值(比如 md5("")),非叶子节点则将其左右子树的哈希值拼接后再次哈希。这样,任何子树都能被映射为一个唯一的哈希指纹。 计算出所有子树的哈希后,将它们放入哈希表。哈希值相同的子树,其结构“有可能”完全相同,但需要二次验证以排除哈希冲突。验证过程是递归地同时遍历两棵树,检查所有节点的左右子树存在状态是否一致。文章还提到了一个关键的优化:通过记录子树深度,在验证前就能排除掉大量哈希值相同但深度不同的“伪匹配”,极大地减少了不必要的递归检查。 整个过程清晰地展示了哈希作为一种“指纹”技术,在加速查找与比对操作中的强大作用,将复杂问题的复杂度显著降低。

本机暂存
IT 数据库/ 2015-11-02 22:42:32 / 累计浏览 2,880

Oracle正则表达式使用小结

这篇文章梳理了Oracle数据库从10g开始支持的正则表达式功能。作者将匹配逻辑集中在数据库端,可以避免在中间层处理,从而简化开发。文章概要总结了Oracle中使用正则表达式的核心方法。 内容重点介绍了五个关键的正则表达式函数:REGEXP_LIKE 用于条件过滤,REGEXP_COUNT 能统计模式出现次数,REGEXP_INSTR 可定位首次匹配位置,REGEXP_REPLACE 支持模式替换,REGEXP_SUBSTR 则能提取满足模式的字符串。每个函数都配有清晰的SQL示例。 除了函数用法,文章还梳理了控制匹配行为的选项,比如忽略大小写的“i”、多行模式“m”等,并通过示例解释了不同选项带来的具体差异。此外,文中也列举了如“.”“+”“*”等常见元字符及其含义,为实际编写匹配模式提供了参考。

本机暂存
IT 前端/ 2015-11-02 22:37:03 / 累计浏览 1,966

写 CSS 时要避免的几个地方

这篇文章是一篇观点鲜明的“避坑指南”,作者从实践经验出发,犀利地指出了四个在编写CSS时常见的、需要避免的坏习惯。 作者开宗明义,认为CSS因其层叠和继承的特殊性,并不适合像JavaScript或HTML那样拆分成多个独立文件,因为样式的声明顺序至关重要。他将过度拆分CSS文件比作“把一块玻璃丢在水泥地板上”。其次,他强烈批评了在Sass中使用深度嵌套,认为这会让本就可能混乱的CSS扩展出第二个维度的混乱,甚至引用了开发者Hugo Giraudel那句著名的“Fucking. Stop. Nesting.”。在单位使用上,他反对使用像素(px)进行布局,尤其是响应式设计中,倡导使用rem/em等相对单位,以便通过调整根字体大小轻松实现整体缩放。最后,他针对“设备断点”的做法提出质疑,认为响应式设计应针对“内容”在何处呈现不佳来设置断点,而非针对苹果、安卓等具体设备的屏幕尺寸。 总体而言,作者旨在提醒开发者:CSS有其独特的运行逻辑,不应简单套用其他语言的组织方式或死板地针对特定设备设计。真正的“响应式”应当服务于内容本身,并尊重用户对字体大小的偏好设置。

本机暂存
IT 安全/ 2015-11-02 22:34:43 / 累计浏览 1,368

数据防泄漏DLP技术深度剖析

这篇文章从企业数据保护的演进出发,剖析了数据防泄漏(DLP)技术从粗放式“全加密”管理,向智能化、精细化管控转变的历程。作者指出,DLP的核心在于“内容识别”,以此为基础构建对结构化与非结构化数据的区分防护能力。 文章重点拆解了DLP的基础检测技术(正则、关键字、文档属性)与高级检测技术(EDM、IDM、SVM)的关键差异。例如,精确数据比对(EDM)适用于保护数据库中的客户信息,可通过多字段组合精准触发策略;而文档指纹(IDM)与支持向量机(SVM)则分别通过文件特征学习和语义分类,应对复杂文档与代码的防护。此外,文章还阐述了文件级、网络级、磁盘级动态加密技术的实现原理与适用场景。 在产品形态上,文章梳理了DLP从早期“设备强管控”的囚笼型、聚焦文档加密的枷锁型,到行为审计的监察型,再到当前具备内容感知能力的智慧型产品的演变路径。最后提到,在国产化浪潮下,国内DLP产品正从萌芽走向成熟,市场潜力与挑战并存。

本机暂存
IT 后端/ 2015-11-02 22:33:32 / 累计浏览 2,039

Gearmand异步处理就安全了吗?不!

这篇讲的是一个实际生产中遇到的Gearman异步处理陷阱。当团队使用Gearman作为中间件时,发现Gearmand进程会莫名卡住,将PHP请求长时间“Hold”住,即便设置了超时也无效,这对PHP的同步工作模式风险很高。 问题最终被定位到使用Gearman的 `addFunction` 注册任务时,如果指定了 `timeout` 参数,便可能随机复现。通过 `pstack` 工具观察发现,故障时Gearmand的工作线程数量会减少。文章通过分析版本变更与源码指出,从0.33版本起增加的Worker超时处理特性,在底层依赖的libevent 1.4.x(非线程安全)环境下,导致了 `event_base` 对象被跨线程错误操作,从而使得工作线程的事件循环意外退出。 解决方案是从源码层面修正这一问题,例如将发生跨线程调用的 `event_base_set` 方法中的操作对象进行调整。作者最终建议,通过将 `addFunction` 的 `timeout` 参数临时设为0,可以规避此问题。这篇分享对使用Gearman或类似基于libevent组件的团队有很高的参考价值,尤其是在排查无响应卡顿问题时。

本机暂存
IT 数据库/ 2015-11-02 22:32:52 / 累计浏览 1,809

MySQL索引之聚集索引

如果你曾经困惑过MySQL的InnoDB和MyISAM索引机制到底有何不同,这篇文章提供了一个清晰的对比视角。它聚焦于“聚集索引”这一核心概念,指出在InnoDB的“索引组织表”中,数据的物理存储顺序由主键索引的逻辑顺序直接决定,这使其在范围查询和热点数据读写上效率更高,但离散写入则可能成为短板。相比之下,MyISAM作为“堆组织表”,数据写入顺序与索引无关,虽无聚集索引带来的结构优势,却也避免了离散更新时的性能损耗。 文章进一步剖析了InnoDB表中聚集索引的唯一性及其选择规则:优先显式主键,其次首个非空唯一索引,最后回退到内置ROWID。这意味着聚集索引的键值逻辑地组织了整张表。通过对比IOT(索引组织表)与HOT(堆组织表)在碎片产生、查询开销等方面的优劣,文章实际上是在指导读者根据自身的数据写入模式和查询需求,来审慎选择表引擎和设计主键,从而优化数据库性能。

本机暂存
IT AI/ 2015-11-02 22:30:08 / 累计浏览 3,959

百夫长:互联网时代公司的关键员工

这篇从李彦宏推荐的《罗马人的故事》聊起,引出“百夫长”这一历史角色——在罗马军队中,他们是率领百人的基层军官,也是未来执政官的起点。 作者将这个比喻直接映射到现代互联网公司:那些带领小团队、负责具体执行的基层管理者,正是公司里的“百夫长”。文章指出,过去金字塔管理结构下,这个角色的重要性并未凸显。但在互联网时代,组织趋向扁平化和小型化,业务单元需要具备快速应变和自驱能力。此时,一个既有执行力、又有独立洞察力的“百夫长”,就变得至关重要。 文章也分析了当前“百夫长”的流失困境:他们或因能力强而出去创业,或被外部高薪挖走,或在内部被提拔后留下空缺。这导致许多大型互联网公司正面临基层管理者断层的挑战。 最后,作者借用《谷歌:重新定义公司》中“创意精英”的概念,强化了这一论点。他提出,如何培养、管理并留住这些“巨型公司的小团队长”,已成为这个时代一个重大的管理课题。

本机暂存
IT 前端/ 2015-11-02 22:27:28 / 累计浏览 1,327

秋月何时了,CSS3 border-radius知多少?

作者从万圣节的轻松话题切入,深入探讨了CSS3 `border-radius` 的进阶用法与底层机制。文章首先指出私有前缀已成过去式,随后重点剖析了百分比值的计算基准——它并非相对于 `width`/`height`,而是元素最终的占据尺寸(包含 `border` 和 `padding`)。因此,用 `border-radius: 50%` 可以轻松为正方形元素制作完美圆形头像。 更有趣的是对“大值特性”的对比实验:当给一个非正方形元素设置一个极大的固定值(如300px)和使用50%时,会产生完全不同的视觉效果——前者因半径过大被浏览器限制,形成“操场跑道”式的椭圆角,而后者则是标准的“马桶盖子”状。这揭示了固定值与百分比值在不同场景下的关键差异。 文章后半部分详细拆解了 `border-radius` 简写背后的八个值(水平与垂直半径),并通过交互式Demo直观展示了每个值如何共同控制每个角落的圆弧形状。对于想要超越基础用法、真正掌握CSS圆角机制的前端开发者来说,这篇内容提供了扎实的原理辨析和实用参考。

本机暂存
IT DevOps/ 2015-11-02 22:26:19 / 累计浏览 3,137

git 查看文件修改记录

这篇讲的是,当接手了几年前的历史代码,想追查某行逻辑的修改记录时,`git log` 可能不够用。作者分享了自己从 `git log -p` 到熟练使用 `git blame`,最终定位到“问题代码”最初引入版本的全过程。 文章指出,单纯用 `git log` 只能看提交摘要。加上 `-p` 参数才能看到具体修改内容,但这对于长期演进的文件依然不够精准。真正的利器是 `git blame`,它能标注每一行最后的提交。通过 `-L n,m` 参数,可以只查看特定行范围的修改历史。 更关键的是,文章演示了一套“链式追溯”技巧:用 `git blame` 找到某行的最近一次修改提交,再进入该提交查看对应行号,然后以此提交号和行号为新起点,再次执行 `git blame`,如此循环往复,便能沿着代码的修改路径,一路回溯到最初被引入的那个提交。作者建议配合 Source Tree 等图形化工具查看具体的代码 Diff,让这个追溯过程更直观。

本机暂存
IT 后端/ 2015-10-26 22:28:19 / 累计浏览 3,847

REST API 安全设计指南

这篇指南从REST API安全缺失的现状出发,系统梳理了其安全设计的核心环节。作者首先点明REST虽架构简洁,但安全特性需开发者自行实现,因此将HTTPS作为一切安全的基石。 摘要的主体围绕关键安全机制展开。它对比了从简易到严谨的认证方案:HTTP Basic因Base64编码近似明文,务必结合SSL;API Key方案通过签名与时间戳能防篡改与重放攻击;而OAuth与JWT则提供了更标准化、更安全的现代选择。在授权部分,文章用代码示例说明了基于角色与正则的权限控制如何实现,并强调需在业务逻辑中防范平行越权。 此外,摘要提炼了数项实用防御措施:对URL参数与请求格式进行前置过滤、关键功能强制加密传输、利用内存数据库实现请求速率限制,以及通过结构化错误码与多状态码提升API的健壮性与安全性。最后,诸如对敏感ID进行不透明化处理等细节,共同构成了一套从传输、认证到逻辑处理的完整安全实践框架。

本机暂存
IT DevOps/ 2015-10-26 22:27:42 / 累计浏览 2,183

Windows硬链接 软链接 符号链接 快捷方式

这篇技术文章梳理了Windows系统中容易被混淆的四种“链接”机制:快捷方式(.lnk文件)、硬链接、目录连接点(Junction Point)和符号链接。 作者从每种机制的实现原理、适用对象和实际行为切入,给出了清晰的对比。例如,快捷方式是通用的应用层文件,而硬链接是NTFS内置机制且仅能用于同一卷内的文件;目录连接点(常被误称为“软链接”)专用于目录且不能跨主机,而符号链接则最为灵活,能跨盘符、跨主机,同时适用于文件和目录。 文章特别强调了术语规范的重要性,批评了国内不少相关文章概念混淆的问题。通过列举创建、查看、删除各链接类型的具体命令行工具(如mklink、fsutil、junction.exe)及注意事项,本文提供了一份实用的技术速查手册,帮助开发者在文件管理、系统迁移或程序兼容等场景中做出正确选择。

本机暂存
IT 开发者/ 2015-10-26 22:26:14 / 累计浏览 1,501

那些年我干过的矬事

这篇文章讲的是作者对自身前端开发“黑历史”的一次系统性复盘。与其说是“技术分享”,不如说是“经验避坑指南”——作者坦诚地列举了十三种从职业生涯早期延续至今的不良实践。 这些总结非常具体且接地气。从代码规范的一致性、CSS选择器的滥用(如过度使用元素选择器、命名通用的类名),到开发习惯问题(如重复造轮子、不利用CSS继承、不写注释);再到更宏观的工程思维缺陷,比如拿到需求就埋头苦干缺乏规划、只追求像素级还原视觉稿而忽略响应式和真实内容、只在单一浏览器测试、以及因怕麻烦而疏于沟通与自查。 作者的核心观点在于:很多时候,代码能跑和代码写得好之间存在巨大差距。他通过分享这些“矬事”,揭示了一个朴素的道理——勇于发现自身不足,并通过总结、思考与改进(比如尝试新工具、新语法、学习更优的工程方法),才是打破瓶颈、提升专业素养的关键。这篇文章对所有前端开发者,尤其是处于成长期的工程师,都具有很好的镜鉴价值。

本机暂存
IT 数据库/ 2015-10-26 22:21:59 / 累计浏览 2,249

解读EXPLAIN执行计划中的key_len

这篇文章讲的是MySQL中EXPLAIN执行计划的key_len列该如何解读,它如何帮助你判断联合索引的实际使用情况。 作者指出,key_len代表查询中使用的索引字节数,其计算涉及几个关键因素:索引列的基础类型字节数(如INT为4字节,BIGINT为8字节)、字符串列的字符集(例如UTF8下每个字符占3字节)、该列是否允许NULL值(需额外增加1字节),以及是否为变长类型(如VARCHAR需额外增加2字节)。 文章通过一个清晰的表格列举了不同列定义下的具体计算示例,例如`int not null`的key_len为4,而允许NULL的`varchar(30) utf8`则为`30*3 + 2 + 1 = 93`。这能让你直观看到各种约束对索引长度的影响。 最后作者强调了一个重要细节:key_len仅统计了WHERE条件过滤所使用的索引列,并不包含ORDER BY或GROUP BY部分用到的索引。因此,在分析如`WHERE c1=? AND c2=? ORDER BY c1`的查询计划时,即便有联合索引,其key_len值也可能小于索引总长度,这对于理解查询优化器行为很有帮助。

本机暂存
IT DevOps/ 2015-10-26 22:17:50 / 累计浏览 2,692

linux 之 mv

这篇文章从一个真实场景切入:同事在使用 `mv` 命令将一个充满小文件的目录移动到另一个磁盘时,发现目标空间在增长,但源空间却迟迟没有释放。作者通过 `lsof` 发现,这是因为文件在移动过程中并未被立即删除,而是全部移完才清理。 那么,关键问题来了:如果移动如此大量的文件过程中发生了中断,已移走的文件会被删除吗?作者猜测可能是“删已移的,留未移的”,但这仅仅是猜测。 真正的答案藏在 `mv` 命令的源码里。作者查看了其核心实现,发现逻辑异常简洁:它只是简单地逐个复制文件,待全部成功后才执行删除操作。源码中并未对“中断”这种意外情况做任何特殊处理。这意味着,一旦中途出错或中断,结果将是:**复制完成了多少就算多少,但不会删除源目录中的任何文件**。 这个结论揭示了 `mv` 在处理大规模文件迁移时的一个重要风险点——它并非原子操作,且中断后状态不确定。对于需要进行此类操作的管理员来说,理解这一底层行为至关重要,它提醒我们务必使用更可靠的工具或脚本(如结合 `rsync` 与检查点)来处理关键数据迁移。

本机暂存
IT 开发者/ 2015-10-26 22:16:19 / 累计浏览 5,843

程序员技术晋升非正式攻略

这是一篇**事件复盘/观点类**的文章,围绕程序员在大厂技术晋升体系中的困惑与准备,分享了作者的实践经验与核心观点。 作者以腾讯等大厂的职级体系为背景,系统解答了从材料准备、评审标准到心态调整的系列问题。文章指出,晋升材料的核心是证明自己的能力达到了下一级别的要求,需重点展示项目中的技术贡献与影响力。评审过程更看重技术能力而非单纯努力,且高阶晋升通常由专家小组负责,直接上级的影响力随职级升高而减弱。 文章给出了许多具体建议:面对评委质疑时,应坦然接受不足而非强行辩解;要主动展示对团队的指导与影响,以及超出岗位要求的贡献;展示能力不求华丽,但求逻辑清晰。最后,作者强调晋升是“僧多粥少的游戏”,评审存在局限性,通过与否不应定义个人价值。真正的关键在于调整心态,将精力投入能产生实际成果和长期影响力的事情上,而非将晋升本身作为终极目标。

本机暂存
IT 安全/ 2015-10-26 22:15:42 / 累计浏览 2,010

移动APP安全测试要点

这篇文章由绿盟科技移动APP安全测试专家侯绍岗、杨乔国撰写,以一次真实的Android APP安全测试为案例,系统拆解了移动应用可能面临的威胁与关键检测点。 作者从运营商APP自主开发越来越多但可能绕过应用市场审核这一现状切入,提出了从评估思路到自动化检测的完整框架。文章的核心在于具体的安全检测要点:比如,`allowBackup`属性设置不当可能导致用户数据被导出;WebView未限制方法调用,会为JavaScript攻击设备敞开大门;登录等关键数据若使用HTTP明文传输,则易被网络监听截获;甚至在注册环节,若服务器未验证提交的手机号与下发验证码的手机号是否一致,也可能被利用注册任意账号。 文章不仅给出了明确的整改建议(如将`allowBackup`设为`false`、对敏感数据加密传输),还深入探讨了检测中发现的争议点。例如,关于“关键数据明文传输”是否算漏洞,作者对比了金融、社交等不同平台的安全要求差异;而针对“登录界面可被钓鱼劫持”的风险,文章通过Android启动Activity机制的原理图解,演示了恶意程序如何抢先推送伪装界面,并对比了有无防劫持提示的APP表现,直观说明了该风险的实际危害与防御价值。 这篇技术复盘不仅罗列了漏洞清单,更通过原理分析、情景演示和行业讨论,为安全从业者提供了从识别、评估到整改的实践思路。

本机暂存
IT 后端/ 2015-10-26 22:12:16 / 累计浏览 2,208

TCP相关参数解释

这篇系统梳理了Linux内核中影响TCP连接行为的关键网络参数。它围绕连接建立、保活检测、超时重试和状态回收等环节,逐一解释了如`tcp_syn_retries`、`tcp_keepalive_time`、`tcp_fin_timeout`等参数的含义、默认值及其对网络超时计算的影响。 文章不仅停留在定义层面,更结合了实际的调优场景。例如,它指出在高负载Web服务器或NAT环境下,许多默认值(如`tcp_retries2`的15次重试、`tcp_fin_timeout`的60秒)往往偏于保守,可能导致资源被空闲连接长期占用。作者分享了在不同环境下的调整经验,如将`tcp_syn_retries`降至2以加快连接放弃速度,或将`tcp_keepalive_intvl`缩短至15秒来更快地发现断开连接。 特别值得注意的是,文章对`tcp_syncookies`、`tcp_tw_recycle`这类涉及安全或特定场景(如NAT)的开关选项给出了明确的使用建议与风险提示,强调了参数调整需结合实际攻击面与服务类型。整体上,这是一份将内核参数文档与实战调优经验相结合的参考指南,帮助读者理解参数背后的网络原理,并为优化服务器性能提供具体思路。

本机暂存
IT 安全/ 2015-10-04 23:17:12 / 累计浏览 2,291

SSH 信任限制只能执行 rsync 命令

这篇讲的是如何在不全面开放SSH权限的前提下,实现服务器间安全的rsync文件同步。作者从一个常见的运维场景出发:Server A需要经常向Server B同步文件,但Server B不想配置复杂的rsyncd,同时出于安全考虑,也不能完全开放SSH登录权限。 文章提供的解决方案核心在于精细配置Server B上的`~/.ssh/authorized_keys`文件。通过将公钥的`command`字段指定为`rrsync`脚本,并附带目标目录路径,就能实现两个关键限制:一是SSH连接建立后,只能执行`rrsync`(受限的rsync)命令,无法获得shell;二是文件传输被严格限定在指定的目录(例如`/data/work/package/`)内。同时,配合一系列`no-`前缀选项,彻底禁用了端口转发、X11转发等可能产生安全隐患的功能。 具体步骤上,文章给出了清晰的操作指引:在Server A生成专用的ssh密钥对,在Server B部署`rrsync`脚本并编辑`authorized_keys`。最后通过一条包含密钥路径的rsync命令,即可完成从本地到远程指定目录的上传。这种方式既满足了自动化同步的业务需求,又将服务器的安全暴露面降到了最低,是一个实用且安全性较高的配置技巧。

本机暂存