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

最新文章

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

IT DevOps/ 2016-07-18 00:10:43 / 累计浏览 1,599

状况共有

这篇讲的是职场与生活中的沟通陷阱,核心在于“状况共有”——目标和信息的同步。作者从几个日常场景切入:丈夫只收到“打扫客厅卧室”的指令,却因厕所没打扫被老丈人责骂;打车去偏僻地点,导航反复绕路时司机才抱怨“早说嘛,那地方我常跑”。这些例子揭示了一个常见问题:执行结果不符预期,往往因为决策前没做好信息共享。 作者进一步指出,过度强调“执行力”有时会适得其反。比如员工出于好心擦掉了写满计划的白板,反令团队计划落空。这里的关键缺失可能只是简单的三个字:“不要擦”。文章由此提炼出核心观点:真正的状况共有 = 目标共存 + 信息共享。它提醒我们,无论是管理指令还是团队协作,光有目标不够,必须让执行者理解背后的逻辑和必要细节;而在紧急情况下(如车祸急救),则需灵活判断沟通的优先级。 这篇文章用生活化比喻点出了协作中的信息断层问题,对技术团队的需求传达、项目管理都有启发——清晰的目标对齐和透明信息,能避免很多“好心办坏事”的弯路。

本机暂存
IT 安全/ 2016-07-18 00:06:16 / 累计浏览 3,007

深入分析跨平台网络电信诈骗

360移动安全团队最近披露了一个重要的安全发现:他们追踪到全球首款专用于网络电信诈骗的Android木马,标志着这类犯罪进入了跨平台时代。这款木马伪装成“公安部案件查询系统”,集成了令人警惕的技术组合。 文章核心对比了传统PC诈骗与新型移动诈骗的差异。在传统模式中,诈骗成功的关键在于诱导用户主动完成转账,因此用户尚有感知。而移动场景的威胁则隐蔽得多:木马能在用户完全不知情的情况下,通过拦截短信验证码等方式,远程完成资金划转。作者详细拆解了移动诈骗的六个典型步骤,直观展示了从诱骗安装、窃取信息到无声转账的全过程。 除了功能升级,文章还揭示了诈骗产业的组织化。团伙分工明确,有专门的制马人负责开发,诈骗者则分层级实施。木马技术本身也颇具分析价值,它滥用了一些正规的第三方SDK,并具备了钓鱼、远控、短信监控、自我保护等全方位的能力。 最终,这份分析不仅揭示了一款具体的恶意软件,更指出了一个严峻趋势:Android木马正成为网络犯罪的强大赋能工具,并持续向更多传统犯罪领域渗透。对于安全从业者和普通用户而言,这意味着需要持续警惕移动设备面临的新形态威胁。

本机暂存
IT 开发者/ 2016-07-17 23:59:37 / 累计浏览 1,381

不要在和你观点不同的人身上浪费时间

这篇讲的是,作者从网络上常见的观点论战现象出发,提出一个鲜明主张:别在与你观点不同的人身上浪费时间。但这里的“不浪费”,核心意思是,把心力和专注点都放在做成事情、拿出结果上。 文章首先点出,面对不同观点,关键在于理解其背后逻辑——对方为什么这么想、推论有何盲点。如果这过程能启发你,那就“闷声发大财”;如果明显有问题,在没有特别义务时,保持沉默对双方都好。作者以自身文章较少引发撕扯为例,说明看透逻辑能平息辩解冲动。 更深一层,作者强调价值观差异不可调和。像“求同存异”一样,在不得不合作时找共同点,但根本信念不同的人,比如信奉投机取巧与勤劳扎实者,在关键时刻反应迥异。对此,既不必说服,也费劲无效,各自相安为上策。 归根结底,观点分歧在成年人世界里并不重要,重要的是你能否依托自己的价值体系持续进步,做出成果。作者举华为为例——即便被诟病加班文化,但年业绩800亿美元的实绩无可辩驳;而对比一些连房租都愁却网络论政的人,文章建议先“修好自己的身”。 最终,作者回到开头:不争论,是为了专注成长与产出。当你内心不认可他人时,要意识到,你对他而言也一样不重要。所以,大家都去好好干活吧,干出来的成果,往往自有相似的力量。

本机暂存
IT 前端/ 2016-07-17 23:55:04 / 累计浏览 3,427

在公众号中优雅地呈现代码

这篇文章解答了一个技术公众号运营者常遇到的困惑:如何让 Markdown 生成的代码块在公众号页面中保持整齐的格式,而不是因为微信的过滤机制而错乱。 作者首先点出了问题的根源:Markdown 解释器在处理代码时直接输出了换行符 `n`,而微信的编辑和保存脚本会过滤掉这些符号,导致代码“挤成一团”。常见的应对方式是直接截图,但这对维护者来说既繁琐,又会影响读者的加载和阅读体验。一个更自动化的思路是开发组件,利用 highlight.js 高亮后绘制到 canvas 并导出图片。 不过,作者随后分享了一个更简便的实践路径:借助 Chrome 插件 Markdown Here。这款插件能将 Markdown 直接转换为 HTML,但微信编辑器同样是 contenteditable 区域,其二次解析会再次破坏样式。文章的核心在于针对这一新问题给出的最终处理办法——通过几行正则表达式对转换后的代码进行处理,从而在保存和预览时“骗过”微信的脚本,稳定地呈现出美观的代码格式。这个小技巧,或许能为不少技术号主省去折腾的时间。

本机暂存
IT 后端/ 2016-07-17 23:52:37 / 累计浏览 2,913

一次连接超时问题排查的历程

这是一次典型的、从迷茫到顿悟的故障排查历程。作者从一个Java应用启动时偶尔发生、且目标服务器不固定的数据库连接超时问题出发,展开了一场层层深入的调查。 排查始于网络抓包,但发现了更怪异的现象:部分TCP连接的SYN包似乎从未发出,而另一些则在收到服务器SYN/ACK后被客户端立即RST。通过strace工具,作者确认了所有connect系统调用均已执行,超时发生在内核的poll等待阶段,这解释了RST的由来,但问题的源头——从系统调用到网络发包之间那段莫名的“延迟”——依然成谜。 对内核网络栈的初步探索未果后,一次未过滤ARP包的抓包带来了转机。作者发现,连接失败的IP地址对应的ARP请求首次均无响应,需等待1秒后重试才成功。这1秒的延迟,足以让设定为50毫秒的连接超时大量失败。根因在于局域网存在广播限流,导致启动时ARP请求被丢弃,而一旦应用启动成功,持续的通信就会维持ARP缓存,故运行时再无此问题。 从复杂内核栈排查到基础的ARP缓存,作者也感慨这个原因“如此操蛋没技术含量”。但这个过程生动地说明,面对诡异的系统问题,保持开放的排查思路,并扎实地追踪数据流的每一环,是定位真相的关键。

本机暂存
IT 数据库/ 2016-07-13 23:27:43 / 累计浏览 4,544

从LinkedIn,Apache Kafka到Unix哲学

这篇讲的是,如何从上世纪70年代的Unix哲学中,为现代分布式系统设计寻找灵感。作者从一个经典场景切入:用awk、sort等Unix工具链处理Web服务器日志,只需几条简单的管道命令,就能高效分析出热门URL。这背后的精髓在于Unix哲学的两条核心准则:每个程序只做好一件事,并通过标准化的输入输出流(stdin/stdout)进行组合。 随后,文章将这一思想与传统关系型数据库的设计模式进行了对比。数据库普遍采用不对称的客户端-服务器模型,客户端发送查询,服务器处理并返回响应,数据流的组合性远不如Unix管道那样灵活。作者意在指出,尽管时代变迁,但“关注点分离”和“松耦合”的古老智慧依然适用。这种视角,为我们理解Apache Kafka为何被设计成一个分布式的、基于日志的流处理系统提供了关键线索——它在架构上更接近Unix管道,而非传统数据库。

本机暂存
IT 前端/ 2016-07-11 23:33:33 / 累计浏览 2,481

谈谈我这三年在技术上的成长

这篇讲的是作者在入职淘宝三年后,对技术成长路径的一次系统复盘。起因是收到许多前端同学关于学习瓶颈的咨询,作者决定整理自己的经验。 文章从个人经历出发,强调了在职业生涯早期打下坚实基础的重要性——比如在学校反复啃完《JavaScript权威指南》这类看似枯燥的基础著作。随后,作者指出进入公司后,需要快速适应新的技术体系和业务流程,从关注“闭包、事件模型”转向理解“组件化、自动化测试”,并借助公司明确的能力分级来定位自己。 对于层出不穷的新技术,作者分享了自己高效的学习心法:先快速了解工具的能力边界和适用场景,在脑海中将其归类(如“工程化-打包类”),而非立刻陷入源码细节。核心观点是,技术学习应紧跟业务需求,知道从哪里学到知识,就等于掌握了一半。 全文没有空谈方法论,而是通过作者在百度、淘宝的实习与工作实例,为技术人尤其是前端学习者提供了一条从夯实基础、到构建体系、再到业务驱动的清晰成长路径参考。

本机暂存
IT DevOps/ 2016-07-11 23:29:19 / 累计浏览 2,345

find命令详解

这篇讲的是Linux系统里人人都会用、但未必人人都精通的`find`命令。作者开篇就直指那些让很多人困惑的细节:比如`find / -mtime +7`和`find / -mtime -7`到底在找什么?为什么`-exec`后面有时是`{}`加`+`,有时是`{}`加`\;`? 文章的核心是把`find`的参数拆解成四大类:Tests(条件测试)、Actions(执行动作)、全局选项和位置选项。重点落在Tests部分,这里把时间参数讲得非常透彻。`-mtime 7`并不是“修改于7天前”,而是“修改时间落在当前往前第7个24小时那个区间内”;加上`+`号就变成了“大于7天前”,加上`-`号则是“7天以内”。这种对数字范围的精确界定,是很多教程一笔带过的。文章还对比了`-anewer`、`-newer`等不同时间比较参数的用法,甚至提到了`-newerXY`这种能跨时区比较(如修改时间对比变更时间)的进阶技巧。 除了时间,文章也梳理了如何按用户、权限来筛选文件,并穿插了`-ls`、`-exec`等常用动作的实际案例。整体来说,它不是一份简单的命令手册,而是通过厘清易混淆的概念(尤其是时间参数和`-exec`的语法),帮助读者把`find`从“会用”提升到“精准使用”的层次。对于需要经常处理文件系统的运维或开发人员,这些细节差异直接决定了命令的成败。

本机暂存
IT 前端/ 2016-07-06 13:58:09 / 累计浏览 3,201

HTML代码到底该不该压缩

这篇文章从一个常见问题出发:开发者常问如何让静态缓存插件支持HTML压缩。作者没有直接讨论实现,而是通过数据分析来探讨HTML代码压缩在今天是否仍有实际意义。 作者首先解释了HTML压缩的本质——主要删除空格、制表符、注释等文本中有意义但浏览器显示时非必要的字符。通过一个Python脚本对100个网页的实测,他发现HTML压缩率最高可超过20%。然而,真正的关键在于后续的对比分析。作者进一步用实验比较了原始HTML、仅HTML压缩、仅Gzip压缩以及“HTML压缩后再Gzip压缩”这四种情况下的文件大小。 数据图表清晰地揭示了两个核心结论:一是HTML压缩带来的空间节省,仅在原始文件较大时才相对明显;二是在服务器已开启广泛使用的Gzip压缩的前提下,网页本身是否经过HTML压缩,对最终传输体积的影响微乎其微。因此,对于大多数网站而言,这种压缩对性能提升意义有限,反而可能影响开发调试效率。 文章最后补充了一个有趣的视角:在像Google这样流量占全球近40%的超大规模场景下,即使是单次请求节省一个字节,累积起来也是巨大的流量成本节省。这说明任何优化的价值,都需要结合实际的应用规模和上下文来评判。

本机暂存
IT 后端/ 2016-06-06 23:44:40 / 累计浏览 5,128

Kindle 电子书生成工具

这篇讲的是开发者如何为纯粹阅读打造一款 Kindle 电子书生成工具。作者从自身需求出发,为了解决手机阅读干扰多、伤眼的问题,花了两个晚上钻研 OPF 和 EPUB 格式,最终构建了一个能将网络内容一键转换为 Kindle 电子书的命令行工具。 该工具的核心原理是依据 OPF 规范生成 KF8 格式的 .mobi 文件。它的数据来源相当灵活:既可以通过指定 URL 和 DOM 选择器抓取单篇文章,也能直接订阅 RSS 源获取更新,甚至能处理本地 Hexo 博客生成的 HTML 文件。程序会智能分析和过滤数据,对 Hexo 文件做了特殊适配,并且能自动下载页面中的远程图片和 CSS 样式,确保电子书内容完整。 项目已将 Amazon 官方的 kindlegen 工具内置,目前默认支持 Mac 系统,但通过社区贡献也提供了 Windows 平台的支持方案。整个流程被简化为编辑配置文件或运行命令行,目标是让技术爱好者和内容创作者都能轻松地把零散的网页文章“打包”成一本本精致的电子书。

本机暂存
IT 后端/ 2016-06-06 23:43:17 / 累计浏览 3,606

Spark性能优化——和shuffle搏斗

这篇讲的是Spark性能调优中一个最头疼的问题——shuffle。作者把shuffle比作必须击败的“大boss”,因为它会触发大量网络传输和序列化,让原本在内存中飞快的计算慢下来。 文章没有堆砌理论,而是直接切入实战技巧。比如,作者用一个从3小时缩短到20分钟的例子,说明“先各自去重,再合并”为何能大幅减少shuffle数据量;还对比了`mapValues`与`map`、`reduceByKey`与`groupByKey`,点明哪些操作会偷偷引发shuffle,而哪些能保持本地高效计算。 针对常见的大小表join,文章给出了一个巧妙思路:把小表广播出去,用`broadcast`加`filter`直接替代耗时的`join`操作,能完全避免shuffle。对于数据倾斜导致单节点过载的问题,作者也指出了改进key设计的解决方向。 整篇文章就像一位有经验的工程师在分享如何“避坑”,从原理到代码示例都很具体,最后还提醒了关于`collect`、避免RDD嵌套操作等容易忽略的细节。对于用Spark处理大数据的人来说,这些围绕shuffle的优化思路相当实用。

本机暂存
IT 安全/ 2016-06-06 23:39:37 / 累计浏览 2,179

信息泄露之拖库撞库思考(1)

当某个网站爆出信息泄露事件,拖库、撞库这两个黑产术语再次进入公众视野。这篇技术文章从一次现实事件出发,深度拆解了这两种攻击手段的原理与实现路径。 拖库指黑客通过技术漏洞或社会工程学手段非法获取数据库中的用户敏感信息;撞库则是利用已泄露的账号密码字典,尝试批量登录其他网站。文章明确指出,撞库之所以屡屡得手,根源在于大量互联网用户在不同平台使用相同或相似的密码。攻击手段从简单的脚本自动化验证,到高技术含量的分布式攻击均有涉及,防范难度各异。 针对这些威胁,作者并未止步于攻击分析,而是结合多方专家意见,系统梳理出一套覆盖设计、运维全流程的立体防御体系。从数据库的加固配置、权限最小化原则,到登录行为的动态监测、基于IP信誉库的主动阻断,再到利用蜜罐技术设置陷阱,共计提出了40条具体可行的安全策略。这些建议既包含及时打补丁、强制密码复杂度等基础措施,也涉及对登录环境指纹、请求特征进行关联分析等高级检测手段,为网站开发者与运维人员提供了一份可逐项对照的安全自查清单。

本机暂存
IT 前端/ 2016-06-06 23:37:24 / 累计浏览 2,179

Date对象的那些事儿

作者从实际项目中处理时间戳转换的需求出发,深入讲解了 JavaScript 中 Date 对象的初始化参数与常用方法。文章梳理了几种创建 Date 实例的不同方式:既能传入自 1970 年起的毫秒数(并特别解释了参数为 0 时因时区显示为 8 点的细节),也能传入年、月、日等分项数字(其中月份 0 代表一月是个易错点),甚至能直接使用格式灵活的日期字符串。 在方法部分,文章对比了 `getDate()`、`getMonth()`、`getFullYear()` 等一系列获取本地时间的函数,并重点说明了 `getTime()` 返回的毫秒数与 Unix 时间戳的关系,演示了两者相互转换的实用技巧。整体内容围绕 Date 对象的基本用法与常见陷阱展开,细节实在,适合想理清时间处理基础知识的开发者。

本机暂存
IT 后端/ 2016-06-06 23:35:11 / 累计浏览 4,780

go-kit 入门(一)

这篇讲的是Go语言微服务开发工具集go-kit的入门指南。文章从微服务的背景切入,系统性地介绍了go-kit的核心价值:它旨在解决分布式系统中的常见工程问题,让开发者能够将精力集中在业务逻辑上。 摘要重点梳理了文章详细拆解的八个核心组件。例如,Endpoint被抽象为构建RPC的基础单元;Circuit breaker和Rate limiter则为服务提供了弹性与稳定性保障。文章还深入介绍了如何通过Transport层绑定JSON/HTTP等序列化方式,以及如何借助Logging、Metrics和Request tracing模块实现服务的可观测性。对于服务间调用,go-kit通过loadbalancer模块整合了服务发现与负载均衡,支持Consul、etcd等多种后端。 作者进一步阐明了go-kit的设计目标,即作为一套可插拔、低侵入的函数库,无缝融入现有架构,并强调了使用vendoring进行依赖管理的建议。文章最后还列举了诸多受其启发或与之相关的开源项目,为读者勾勒出清晰的Go微服务生态图谱。对于刚接触微服务的Go开发者而言,这无疑是一份扎实的起点地图。

本机暂存
IT 前端/ 2016-06-06 23:34:30 / 累计浏览 2,156

超级小的web手势库AlloyFinger发布

这篇介绍的是一个名为AlloyFinger的Web手势库,它能为移动设备带来流畅的手势交互体验,同时解决困扰开发者已久的click 300ms延迟问题。作者从实际的移动端开发需求出发,提供了一个轻量级且功能完备的解决方案。 AlloyFinger的核心优势在于其极小的文件体积与丰富的功能。它支持包括pinch缩放、rotate旋转、pressMove拖拽、doubleTap双击、swipe滑动等在内的多种手势,并提供了独立版和React版本,方便不同技术栈的项目集成。文章详细列举了库支持的事件列表,并通过独立版与React版本的快速上手代码示例,直观展示了其简洁的API设计。 值得注意的是,该库已在包括兴趣部落、QQ群、腾讯CDC在内的多个线上项目中得到实际验证,其性能与稳定性有据可查。文章还针对使用中的常见问题,如与transformjs的关系、调试方法、缩放原点计算等进行了Q&A解答,对开发者非常实用。 总的来说,AlloyFinger为需要处理复杂触摸交互的Web项目,提供了一个开箱即用、经过实战检验的轻量级工具。

本机暂存
IT 前端/ 2016-06-06 23:32:01 / 累计浏览 1,241

用 visibilitychange 事件判断页面可见性 – 使用 PageVisibility API

这篇文章从一个常见但容易被忽略的场景切入:当用户切换浏览器标签页,导致你写的网页不再可见时,JavaScript 应该如何应对。作者介绍了 `visibilitychange` 事件,它会在页面显示或隐藏时触发,为性能优化提供了精细的控制点。 核心的实用价值在于,开发者可以利用这个事件来“做减法”。例如,当标签页被隐藏时,可以暂停视频或音频的播放、停止无意义的轮询请求、冻结复杂的动画效果。这些措施能有效减少不必要的本地资源消耗和服务器压力,对用户体验和资源效率都有直接好处。 文章还整理了该 API 详尽的浏览器兼容性数据,指出现代浏览器已广泛支持,而部分老版本(如 IE10、早期 Chrome 和 Firefox)则需要加上 `ms-`、`-webkit-` 或 `-moz-` 前缀。特别值得注意的是,作者提到了 Opera 12.10 的一个细节:它在最小化窗口时并不触发此事件,这提醒开发者在实现时需要考虑这类边界情况。 总的来说,这是一篇将具体 API 与实用场景结合得很好的介绍,让开发者清楚地知道它能解决什么问题,以及在不同环境下如何可靠地使用。

本机暂存
IT 算法/ 2016-06-06 23:30:03 / 累计浏览 1,258

逻辑回归算法学习与思考

这篇讲的是逻辑回归算法的原理与实现。作者从算法的“分类边界拟合”核心思想切入,细致拆解了预测函数h(sigmoid)与损失函数J(θ)的设计逻辑。文章不仅推导了梯度下降优化θ的数学过程,还将其向量化,并对照《机器学习实战》中的Python代码进行解读,让公式与实现一一对应。在实际应用部分,作者以sklearn库为例展示了模型调用流程,并特别结合网络安全场景进行了预测分析。整体上,文章完成了一条从数学推导到代码实现,再到领域应用的学习路径,适合想扎实掌握逻辑回归的读者。

本机暂存
IT 前端/ 2016-05-18 00:01:37 / 累计浏览 2,297

前端路由实现与 react-router 源码分析

这篇技术文章从单页应用的前端路由切入,先带读者实现了一个极简的路由系统。作者用hash变化的原理,通过监听`hashchange`事件,构建了一个包含路由注册(`route`)和刷新(`refresh`)的`Router`对象,清晰地揭示了路由工作的底层逻辑。 在打好这个基础后,文章的核心转向了react-router的源码分析。它点明了react-router与history模块结合的关键——“包装方式”,即通过一层包装来复用原生对象的内部机制,从而在解耦的同时实现功能增强。文章还展示了react-router如何将其API设计为React组件(如Router、Route、Link),使其能无缝融入React的组件生命周期和声明式编程范式。 作者通过从极简实现到复杂库源码的剖析,让读者既能理解路由的“为什么”,也能看清主流解决方案的“怎么做”,尤其包装模式与组件化的设计思路,对理解大型前端库的架构很有启发。

本机暂存
IT 后端/ 2016-05-15 23:55:49 / 累计浏览 4,492

缓存穿透、缓存并发、缓存失效之思路变迁

作者从缓存实战中最常遇到的三类“坑”出发,分别剖析了问题的成因与演进式的解决思路。缓存穿透源于无效请求击穿缓存层直击数据库,作者提出了用特殊值预占位的拦截技巧。缓存并发则针对高并发下缓存瞬间失效带来的数据库压力,给出了加锁串行化的方案。缓存失效问题本质是缓存集体过期导致的雪崩,通过引入随机因子分散过期时间是关键。文章后半部分通过问答,进一步探讨了缓存与数据库的一致性等更深层的实践困惑,整体展现了从发现问题、分析根因到提出并优化方案的完整思考过程。

本机暂存
IT 开发者/ 2016-05-15 23:54:41 / 累计浏览 1,205

关于团队管理的一些思考

这篇写给中层管理者的信,源于作者从“手艺人”向“有政治觉悟的手艺人”转型的切身思考。作者坦言,这是自己在带领团队两年多时间里,被各种状况推着走、不断观察与沟通后总结出的心得。 核心观点围绕几个关键问题展开:首先,团队与个人是相互成就、双向选择的关系,必须建立“今天不努力,明天被替代”的清醒认知,甚至“快于平台成长”。其次,管理者必须敢于开除人,这是建立团队活力和对成员真正负责的第一步。此外,文章强调要建立由“旗手”引领的梯队,形成可传承的团队文化;团队在内部抱团的同时必须对外保持开放融合,避免小圈子化。 作者特别提出了“有政治觉悟的手艺人”这一概念。他认为,在具备专业技能的基础上,懂得处理人与人的关系、学会合作与竞争(即“政治觉悟”),才是管理者在职业道路上更上一层楼的关键,这比单纯的高智商更重要。 文章最后以一句直接而充满期许的话作结:“加油吧兄弟们,早日取代我!”这既是对团队的激励,也呼应了开头“相互成就”的核心理念。

本机暂存