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

最新文章

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

IT 设计/ 2014-10-15 22:46:35 / 累计浏览 2,419

新手产品经理都混哪里

这篇讲的是,作者苏杰(iamsujie)通过微博和微信发起了一次小规模调查,想摸清新手产品经理们平时都在哪些线上社区活跃。在收集了159位有效回答者、共计311个答案后,他统计出了47个被提及的地方。 结果显示,“人人都是产品经理社区”成为公认的第一选择,产品100和pmcaff紧随其后。一个有趣的发现是,很多新人也活跃在36氪、虎嗅这类科技媒体,以及知乎、微博、豆瓣等通用平台。作者也坦诚指出了调查样本可能存在的偏差,比如渠道和主动回答者带来的影响,但认为整体趋势是清晰的。 这篇文章的价值不在于给出权威排名,而是真实呈现了一个新人产品经理可能面临的信息环境——既有专注的成长社区,也有广泛的知识平台。它能帮同行快速了解“大家都在哪儿”,对想要拓展视野或寻找学习资源的新人来说,是一份很有参考价值的社交地图。

本机暂存
IT 后端/ 2014-10-15 22:43:22 / 累计浏览 2,273

一步一步教你怎样给Apache Spark贡献代码

这篇教程详细拆解了向Apache Spark贡献代码的全过程,从在GitHub上fork仓库开始,一步步指导读者如何本地克隆、关联上游代码、创建功能分支、解决合并冲突,直到最终提交一个规范的Pull Request。作者特别强调了几个新手容易忽略的实践细节:比如必须为每个新功能或修复创建独立的分支,而不是直接在master上提交;在提交PR前要主动rebase以避免冲突;以及提交时必须将对应的JIRA链接(如SPARK-2859)准确放入PR标题和描述中,这是Spark社区的协作规范。教程还给出了一个真实的PR和JIRA示例供参考,让整个流程变得具体可感。对于想迈出开源贡献第一步的开发者,它提供了一个清晰、可操作的技术路线图。

本机暂存
IT 开发者/ 2014-10-15 22:42:27 / 累计浏览 3,378

程序员的复仇方式

这是一篇充满极客幽默的技术复仇实录。故事背景很简单:作者总被公司一位擅长“防守”的同事捉弄,于是决定利用对方不太懂电脑的弱点,发起一场悄无声息的技术反击。 作者的核心武器是一些轻巧却诡谲的脚本与命令。他趁同事离开时,在其Mac电脑上部署了远程访问密钥,并植入了一段Shell脚本。这个脚本会让电脑随机间隔、用低沉的语音悄声说出字母“i”(我),制造灵异感。更妙的是后续升级版脚本,它能主动调高电脑音量播放“i”,随后立刻静音,即便对方在听音乐也会被诡异打断。 但这只是开始。作者还远程执行了 `open` 命令,让对方电脑不断打开一个怪异的网页;偷偷将同事桌面上待评审的所有照片,替换成一张老人打瞌睡的滑稽图片。终极一击是预设了一个AppleScript,在电脑发出怪声前,桌面会瞬间闪现一张经典的恐怖动画图,然后再恢复正常。整个系列操作环环相扣,充分展现了命令行与脚本在“非技术用途”上的惊人灵活性。 文章的魅力在于,它将枯燥的Shell、AppleScript命令融入了一个具体的、充满张力的生活化叙事中,读者能清晰看到每一行代码带来的戏剧性效果。作者在结尾的“求助”也为这场技术复仇增添了互动与开放的余味。

本机暂存
IT 前端/ 2014-09-22 22:01:18 / 累计浏览 4,720

jQuery.ajax处理302重定向

这篇文章探讨了一个前端开发者常遇到的坑:使用jQuery.ajax()时,遇到302重定向为什么会“卡住”?作者从底层原理出发,指出问题的核心在于xmlHttpRequest的跨域限制。如果跳转目标是同域,服务器本就不该用302;如果是跨域,则天然会被浏览器拦截。不过,随着现代浏览器对CORS的支持,情况有了变化。在配置得当的前提下,302是能够被处理的。文章给出了一个实用的解决思路:利用ajaxComplete事件来捕获这个“错误”,并手动跟踪重定向。作者特别提醒,如果业务需要携带Cookie,切记要在xhr对象上设置withCredentials为true,否则认证信息可能会丢失。文章最后引用了Stack Overflow等社区的讨论,提供了深入实践的参考。

本机暂存
IT DevOps/ 2014-09-22 22:00:12 / 累计浏览 1,996

linux下boot空间不足解决方法

这篇解决了一个常见的Linux系统痛点:当初为/boot分配了500MB独立分区,但随着多次系统升级,旧内核不断累积,最终导致空间耗尽、升级失败。 文章作者从实际遭遇出发,先展示了`/boot`目录下堆积的旧内核文件(如vmlinuz、initrd.img等),并通过`uname -a`确认当前运行的内核版本。核心解决方案是使用`apt-get remove`命令有选择地卸载旧版本内核。作者特别提醒,刚升级的新版本可能不稳定,建议保留1-2个旧版本以备回退。 文中通过`dpkg`命令列出了已安装的所有内核镜像包,然后演示了如何移除一个旧内核(linux-image-2.6.35-25-generic),并展示了操作完成后GRUB引导菜单自动重建的过程。最终,通过`df`命令验证,/boot分区成功释放出35MB空间(整个操作可释放约139MB),系统得以恢复正常升级。对于卸载后残留的“deinstall”状态,文章指出重启后再次执行卸载命令即可彻底清理。

本机暂存
IT 设计/ 2014-09-22 21:58:23 / 累计浏览 3,661

如何应对:这个功能别人都有了

这篇文章聊了一个产品经理和运营之间常见的场景:当运营拿着竞品的新功能来问“别人都有,我们为什么没有?”时,产品经理该如何应对。 作者指出,这背后往往是运营在寻找“抄”的捷径。对此,产品经理不能被动接受需求,而应占据主导。具体策略包括:比运营更早洞察竞品动态,并能清晰阐释对方做该功能的背景、我们不做的差异或原因,甚至证明其决策可能有误。通过展现更深入的思考,逐步建立信任,将“命令”转化为“探讨”。 对于极端情况或自身遗漏,文中也给出了如“缓兵之计”等沟通技巧。文章通过“快的”与“嘀嘀”互相抄袭反而闹出笑话的案例,生动说明了盲目跟进的风险。最终,作者强调产品与运营目标一致,应避免对立,用专业能力和共同KPI来达成和谐,而非一味抵触或盲从。

本机暂存
IT 前端/ 2014-09-17 13:59:47 / 累计浏览 1,746

如何捕获和分析 JavaScript Error

这篇文章从现代 Single Page App 的痛点切入:用户操作状态复杂,简单的“刷新页面”已无法作为错误处理的万能药,因此系统性地捕获与分析前端错误变得至关重要。 它详细对比了两种核心捕获方式:try-catch 用于已知会抛出异常的 API 调用或回调,确保代码局部容错;而 window.onerror 则是兜底方案,用于捕获未预料到的全局错误。文章进一步剖析了跨浏览器环境下的属性丢失难题——window.onerror 有限的参数会导致关键信息(如列号、堆栈)缺失,作者探讨了通过序列化 message 或利用现代浏览器提供的第五个参数(Error 对象)来解决。 针对跨域脚本抛出的 “Script error.” 这一普遍难题,文章提供了基于 CORS 的注入方案来绕过安全限制,并深入到一个非常实际的工程细节:通过插入空行的“行号反查”技巧,解决内联代码导致的行号冲突问题,使得错误定位依然准确。 整体来看,作者从基础方法讲到浏览器兼容性深水区,再到跨域场景的工程化应对,为前端开发者提供了一份清晰、可落地的错误监控实施指南,而不仅仅是罗列 API。

本机暂存
IT 安全/ 2014-09-17 13:58:03 / 累计浏览 14,721

cookie窃取和session劫持

这篇讲的是网络安全中一个经典但常被忽视的威胁——Cookie窃取与Session劫持。文章从基础讲起,细致梳理了Cookie在HTTP请求/响应中的传递机制,并解释了会话Cookie、持久Cookie、安全属性(Secure/HttpOnly)以及第三方Cookie、超级Cookie等多种类型的核心区别与应用场景。 其核心价值在于清晰剖析了风险:当用于维持用户登录状态的Session Cookie被窃取时,攻击者便能劫持整个会话,以你的身份操作系统。文章重点指出了最常见的攻击入口是XSS漏洞,攻击者可通过注入的恶意脚本直接读取Cookie并将其外传。 此外,文章还延伸介绍了Cookie用于个性化设置和用户行为追踪的用途,并提及了如“僵尸Cookie”等更复杂的持久化追踪技术。它不仅是前端开发者理解浏览器安全模型的重要参考,也为后端开发者配置安全的Cookie策略提供了直接依据。

本机暂存
IT 后端/ 2014-09-17 13:48:48 / 累计浏览 6,153

如何实现一个malloc

很多用C语言的程序员都熟悉 `malloc` 这个函数,但它既不是C关键字也不是系统调用,其背后的实现原理常被忽略。这篇讲的是如何从零开始实现一个简易的 `malloc`,帮助读者理解内存分配器的核心思想。 文章从现代操作系统的内存管理基础讲起,清晰梳理了虚拟内存、页表、Linux进程内存布局等关键概念,特别聚焦于堆内存管理和 `brk`/`sbrk` 系统调用。作者先给出了一个只增不减的“玩具实现”,直观展示如何用 `sbrk` 划拨内存,进而引导读者思考如何设计元数据、管理空闲块以实现真正的分配与释放。 虽然这个为了教学而简化的实现效率不及 glibc 中的生产级代码,但它与真实 `malloc` 的实现原理一致。对于想深入理解内存管理、打破 `malloc` 黑盒的开发者而言,这篇文章提供了一条清晰且可动手实践的路径。

本机暂存
IT 前端/ 2014-09-17 13:44:52 / 累计浏览 2,390

理解JavaScript 中的 this

这篇讲的是JavaScript里那个让人又爱又恨的`this`关键字。作者从`this`的基本工作机制切入,核心观点是:它的指向并非由函数定义决定,而是取决于函数被调用的“方式”。 文章用简洁的代码示例对比了关键差异:当函数作为对象的方法调用时,`this`指向该对象;若将方法赋给变量再调用,`this`却会“叛逃”至全局。在构造函数中,`this`指向新创建的实例,但若漏写`new`,又会指向全局——这种“脆弱性”正是许多困惑的根源。 作者进一步剖析了用`call`、`apply`和`bind`这三个工具显式绑定`this`的场景,它们适用于需要在不同上下文中复用函数,或提前锁定`this`指向的情况。最后,文章点明了一个进阶痛点:在嵌套函数(作用域链)中,`this`无法自动继承,通常需要借助`self`或`that`变量来“捕获”外层的引用。 通篇没有空泛的理论,而是紧扣开发者日常会遇到的实际陷阱和解决方案,对理清`this`的作用规则很有帮助。

本机暂存
IT 前端/ 2014-09-17 13:43:45 / 累计浏览 2,458

Print —— 被埋没的Media Type

这篇讲的是网页开发中一个被长期忽视的体验优化点:打印样式(Print Media Type)。作者从日常收藏网页的场景切入,指出很多网页的打印效果糟糕,根本原因在于开发者对“纸上阅读”这个特殊媒介缺乏针对性处理。 文章系统梳理了打印样式的必要性、适用场景与实现方法。它分析了打印成本、无纸化提倡等因素导致该特性被冷落,但诸如优惠券、报销单据、教程手册等场景其实有切实需求。技术实现上,文章详解了如何通过 `@media print` 规则或独立 `print.css` 文件来引入打印样式,并介绍了 `@page` 页面版式、分页符控制,乃至“出血”等高级印刷概念。更通过一个CDC博客的改造实例,演示了如何通过隐藏导航栏/侧边栏、调整字体与宽度、添加二维码回链等步骤,将一个杂乱的页面转化为清爽的打印版本。 作者最后总结道,优化的核心在于理解“纸上无交互”的本质,优先呈现纯粹的内容,并在保证可读性的前提下节约打印成本。对于需要提供离线阅读或实物归档功能的Web应用来说,这篇文章提供了切实可行的优化路径。

本机暂存
IT 安全/ 2014-09-17 13:42:04 / 累计浏览 1,996

launchAnyWhere: Activity组件权限绕过漏洞解析(Google Bug 7699048 )

这篇讲的是一个影响安卓2.3至4.3版本的权限绕过漏洞——“launchAnyWhere”。作者从AccountManagerService的工作机制切入,揭示了一个严重的设计问题:当应用请求添加账户时,系统服务会调起认证应用并转发一个Intent,但这个Intent的内容完全由认证应用控制。如果请求方是系统应用(如“设置”),它就会在用户不知情的情况下,执行攻击者精心构造的Intent,从而启动任意未导出的Activity。 漏洞的巧妙之处在于其利用链非常简洁:攻击者通过特定Intent调起“设置”中的AddAccountSettings,就能让系统自动完成从触发到启动目标组件的全过程。文章列举了几个危害场景,例如绕过验证直接重置手机PIN码,或利用未导出的WebView加载恶意页面。这本质上是一个权限委托的信任链被恶意劫持的案例。 对于移动安全研究者而言,这篇文章清晰地展示了如何从一个合法的系统服务接口中,挖掘出突破进程隔离限制的攻击面。它提醒开发者,即使是系统服务的“便利”设计,也可能在无意中成为危险的权限提升通道。

本机暂存
IT 前端/ 2014-09-17 13:40:44 / 累计浏览 1,354

javascript DOM操作中的insertAdjacentHTML方法

这篇讲的是如何用更现代的方式在DOM中插入HTML内容。作者从大家熟悉的innerHTML和innerText方法的局限性出发,引出了功能更强大的insertAdjacentHTML。 它最大的特点是支持四个精确的插入位置参数:beforeBegin、afterBegin、beforeEnd、afterEnd,可以让你在目标元素的外部前后、内部开头或结尾处插入内容,控制粒度非常细,避免了innerHTML可能覆盖原有内容的风险。 文章还贴心地分享了一个兼容老版本IE的自定义insertHTML函数实现。这个函数的思路很巧妙:对于不支持原生方法的浏览器,它通过创建Range对象并使用createContextualFragment来解析和插入HTML片段,从而模拟了四个位置的插入行为,确保了代码的跨浏览器可用性。 如果你还在频繁使用innerHTML拼接界面,或者对DOM插入位置有更灵活的需求,这篇对insertAdjacentHTML的实操讲解会提供一个清晰直接的解决方案。

本机暂存
IT DevOps/ 2014-09-17 13:37:30 / 累计浏览 4,141

Windows与Linux文件系统互访的几种方法

这篇讲的是如何让Windows和Linux像使用本地磁盘一样直接互访文件系统。作者从实际开发中的痛点出发:Windows编辑代码、Linux编译运行,来回拷贝太麻烦。文章指出,虽然Windows有CIFS、Linux有NFS,但二者不互通,好在Linux上已有CIFS的实现。 文章主要介绍了两种通过CIFS协议实现互访的具体方法。一种是用开源的Samba软件在Linux上搭建服务端,配置共享目录并设置用户后,Windows资源管理器就能像访问局域网共享一样,直接访问Linux文件系统,甚至可以映射为本地盘符。另一种方法是让Linux作为客户端,去挂载Windows已经共享出来的目录。作者以Windows XP为例,详细展示了如何开启共享,并在Linux下使用mount -t cifs命令将远程共享挂载到本地目录。 文章最后简单对比了两种方式的适用场景:Samba方案更适合需要频繁、便捷地从Windows侧访问Linux文件的工作流;而从Linux挂载Windows共享,则更适合那些主要工作空间在Windows,偶尔需要在Linux环境下编译或调试的场景。

本机暂存
IT 开发者/ 2014-09-17 13:34:44 / 累计浏览 2,340

雪崩时,每一片雪花,都不认为自己有责任

这篇从诺基亚裁员这一具体事件切入,探讨的却是一个更普遍的现代企业困境。作者指出,问题并非始于某个决策或个人,而是系统本身:一个庞大企业逐渐演变为一个自我循环、追求“维稳”的闭环系统,它天然地排斥任何额外的创新与风险担当。基层或许有变革的萌芽,但在层层向上的流程与“领导交办最重要”的现实面前,这些声音最终收敛于对指令的服从。 文章最有力的观点在于那个比喻——“雪崩时,每一片雪花,都不认为自己有责任”。每个员工都在兢兢业业地完成手头任务,管理层也在忙于现有体系的运转,所有人都规避风险、拒绝冒险。然而,当外部环境剧变,整个系统便无力转身,最终导致个体与组织共同滑向终局。作者借这一分析提醒我们:在加速变化的时代,满足于做好体系内的一颗“螺丝钉”并自认无责,或许正是最大的风险所在。它让我们思考,在尽职尽责之外,对变化的敏感与担当的勇气同样不可或缺。

本机暂存
IT 开发者/ 2014-09-17 12:33:46 / 累计浏览 2,117

关于回调函数和this指针探讨

这篇讲的是C++回调函数中一个经典又微妙的陷阱:当类的非静态成员函数作为回调时,其隐含的this指针如何传递。作者从C语言的回调机制出发,对比了Java等面向对象语言直接注册对象的不同,聚焦于C++必须面对函数指针的问题。 文章的核心是解决一个实际困境:我们希望成员函数既能作为回调,又能访问类的非静态成员。作者梳理并对比了几种可行方案。最直接的方法是使用静态成员函数,但它不能直接访问非静态成员。由此引出两种变通:一是将对象指针存在全局变量中,但这破坏了封装;二是将this指针作为参数显式传入静态回调函数,这是目前的主流做法。作者也尝试了直接将非静态成员函数指针强转为普通函数指针,但编译和运行时都会出错,这揭示了this指针并非简单地作为第一个参数在栈上传递。 最终,文章回归到最实用且正统的解决方案:将回调声明为静态成员函数,并在注册时将this指针作为参数传入。这种方式在封装性和易用性之间取得了平衡。作者通过代码实例逐步演进,清晰地展示了从“能工作”到“更优雅”的优化路径,对于理解C++对象模型和底层回调机制很有启发。

本机暂存
IT 前端/ 2014-09-17 12:31:35 / 累计浏览 1,993

IE开始支持部分webkit私有属性

这篇文章讨论了微软一个看似“令人震惊”的决策:在其Windows Phone 8.1 Update的IE 11移动版浏览器中,开始支持部分原本属于WebKit阵营的私有属性。 作者指出,这背后是微软的务实妥协。由于许多网站在WP上因错误的浏览器检测、滥用过时的WebKit私有特性等原因导致表现糟糕,而WP市场份额又小到不足以引起开发者重视,微软只能选择让IE去“兼容”这些不规范的写法,以保障用户的体验。文章展示了百度在不同平台上的差异截图,直观说明了问题的严重性。 具体来看,IE 11移动版新增支持了包括`-webkit-appearance`、`flexbox`、`transform`、`transition`及渐变等在内的众多WebKit相关属性,甚至修改了UA字符串以“冒充”Android/iOS设备。需要特别注意,这些改动仅限于移动版IE。 这对开发者的启示非常明确:编写样式时应依赖标准规范,而非特定浏览器前缀;必须为各种情况准备降级方案,并在多平台进行兼容性测试。微软的这一举动,恰恰反映了当前Web开发中标准与现实之间存在的鸿沟。

本机暂存
IT 后端/ 2014-09-17 12:25:15 / 累计浏览 3,481

规则引擎简介

这篇讲的是如何用规则引擎将现实中的决策逻辑“外挂”到系统里。 文章从保险定价的生动例子切入:一辆红色运动型汽车,如果驾驶员是16-25岁男性,保费就增加20%。这种“如果……那么……”的逻辑,在路由表、权限控制等IT领域无处不在,但硬编码在程序中难以维护。规则引擎正是为了解耦这类业务规则而生。 它模拟了人类专家的推理过程,核心是规则库、事实库和推理引擎三大部件。推理引擎通过模式匹配器、议程和执行引擎来决定哪些规则被触发,以及按什么顺序执行。文中重点介绍了两种推理模式:由事实驱动、向前推导结论的正向推理,以及由目标驱动、向后寻找证据的反向推理。 文章还剖析了规则引擎的高效核心——RETE算法。这个由Charles Forgy发明的算法,通过将规则编译成推理网络,在运行时高效匹配事实与规则,避免了反复遍历的开销。 最终,规则引擎的价值在于让业务逻辑与技术实现分离。开发者不用在代码里写满复杂的if-else,规则可以像数据一样被管理和复用,为业务逻辑的快速迭代提供了坚实的技术底座。

本机暂存
IT 开发者/ 2014-09-17 12:22:53 / 累计浏览 3,090

第一代程序员王小波

这篇讲的是作家王小波一个鲜为人知的身份:中国第一代程序员。文章从作者偶然读到的信息切入,揭示了这位文学天才在上世纪90年代初,自学汇编、C语言等,独立开发出中文编辑器与输入法的经历。 文中呈现了大量细节。王小波为解决统计工作需要和对软件的好奇,钻研数据结构、算法乃至编译原理,甚至为了优化自己的286电脑而深入内存管理。他与友人的书信往来里,详细讨论了软件开发、B树结构、递归算法等技术话题,其专注与钻研程度不亚于专业工程师。 更有趣的是,他小说中诸多充满想象力的理工男形象和荒诞发明(如开根号机器),正源于这份极客精神。文章通过还原一个在代码世界里同样追求“特立独行”的王小波,让我们看到独立之精神如何贯通于他的文字与算法之中。

本机暂存
IT 移动开发/ 2014-09-17 12:21:22 / 累计浏览 8,680

使用Fiddler对手机应用进行抓包测试

这篇指南聚焦于如何解决手机应用抓包测试相对PC端更为麻烦的问题。作者从实际QA工作流程出发,详细拆解了使用Fiddler工具实现这一目标的完整步骤。 核心方案在于让手机与电脑处于同一局域网,并将手机流量代理至电脑。文章逐步说明了Fiddler的关键配置(如开启“允许远程计算机连接”)、如何获取电脑IP地址,并分别给出了iOS和Android手机进行网络代理设置的具体路径。其中,将代理端口统一设置为8888是一个贯穿始终的关键点。 整个过程清晰地将“手机抓包”这个可能让人无从下手的任务,分解为一系列可操作的明确步骤,为移动端调试提供了非常实用的落地指引。

本机暂存