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

最新文章

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

IT 前端/ 2013-04-07 13:12:58 / 累计浏览 1,964

跨终端体验的完整性

这篇讲的是“跨终端体验完整性”这一产品设计趋势。作者从一个日常现象出发:用户越来越习惯在手机、平板、电脑等不同设备间切换,但他们真正关心的是服务的连贯性,而非具体的设备载体。 文章用几个典型案例作了说明。比如,Evernote让用户能在手机上接续电脑的笔记,实现记录体验的完整;百度云让好友能在Pad上直接观看PC端分享的影片,满足了共享体验;而像Path、QQ音乐与微信的结合,则打通了从移动端创作/分享到PC端浏览/互动的闭环。这些例子都指向一个核心观点:优秀的产品服务能超越设备限制,在不同场景下提供无缝衔接的体验。 为了实现这一点,文章特别介绍了一种技术思路——“响应性设计”。这不仅是简单的布局调整,而是一套系统方法,通过弹性网格、媒体查询等技术,让网页能自动适配不同的屏幕尺寸、操作系统和网络环境,从而避免为各种设备单独维护不同版本的网站(如wap.xx.com、m.xx.com)。这种设计哲学强调在统一策略下管理多端体验,对今天的前端和产品开发者而言,仍然具有很强的实践参考价值。

本机暂存
IT 后端/ 2013-04-07 13:11:07 / 累计浏览 1,617

分享两个强符号,弱符号引起的编译问题

这篇文章从两个真实的编译问题出发,剖析了C++开发中一个隐蔽的“坑”:强符号与弱符号机制在debug和release模式下可能引发截然不同的结果。 作者分享了两个具体案例:一是模板类的静态函数特例化,在release模式下由于符号未被正确声明为弱符号而丢失,导致只执行了默认实现;二是在cpp文件内部定义的内联函数,release模式下因内联展开而在外部符号表中找不到定义。这些问题在debug时一切正常,却在上线前的关键阶段暴露。 文章指出,根因在于编译优化(release模式)改变了符号的属性与生成规则。随后,作者系统梳理了强符号与弱符号的定义、链接规则及其实际用途——弱符号允许重定义和可选覆盖,是实现类似“插件”式扩展的基础。最后,文章还以一个Zookeeper日志函数的弱符号改写为例,展示了如何利用这一特性优雅地解决实际工程问题。 这类问题的隐蔽性很强,只有深入理解底层的链接机制,才能在开发和构建阶段主动规避风险。

本机暂存
IT 开发者/ 2013-04-07 13:10:20 / 累计浏览 9,158

为什么程序员总是不能准确预估工作量

这篇讲的是程序员预估工作量不准这个经典难题。作者从一个项目经理的生动比喻切入:拿到估算后先乘以π,再把单位往下换一级,比如1天会变成3.14周,才能接近真实耗时。 文章指出,时间估算本身就很困难。有经验的开发者有一个“现实的估算区间”,在此区间内估算相对靠谱;低于区间意味着忽略了构建、测试等必要开销,高于区间则说明任务过大难以把握。而初级开发者往往缺乏这个区间,既会低估琐碎环节的时间,又无法预估复杂任务。 作者还强调了一个关键点:编程经验并不等于估算经验。不被纳入估算流程、没有将实际耗时与估算做比较的开发者,很难提升估算准确性。文章最后给出了一个具体可行的提升方法:接手任务时先独立估算,完成后对比实际用时与计划,通过这种持续的反馈循环,既能更深入地理解任务细节,也能逐步磨练出更精准的估算技能。

本机暂存
IT DevOps/ 2013-04-07 13:09:03 / 累计浏览 12,844

高效Linux用户需要了解的命令行技能

这篇从Quora问答出发的实用指南,系统梳理了高效使用Linux命令行的关键技能。作者并非简单罗列命令,而是从日常工作的实际场景切入,将技巧分为基本操作、效率提升和数据处理等模块。 文章亮点在于细节的呈现:例如,介绍了如何用一行脚本实现SSH无密码登录,利用`!!`和`!$`快速复用历史命令,以及用`set -x`进行Bash脚本调试。在数据处理部分,展示了如何巧妙组合`sort`和`uniq`命令来完成集合的交并补运算,甚至提到了通过设置`LC_ALL=C`能显著提升排序性能。 更深入的,文章涵盖了系统调试的利器,如使用`strace`追踪程序行为、`dmesg`排查硬件问题。这些工具的介绍都紧扣“解决什么问题”,而非单纯的语法说明。 对于希望提升终端操作效率、摆脱图形界面依赖的开发者而言,这是一份非常扎实的技能清单。

本机暂存
IT 后端/ 2013-04-07 13:04:38 / 累计浏览 3,375

使用tcpdump搞定一个替换问题

这篇讲的是如何在不直接修改数据库的情况下,动态替换服务器渲染输出中的链接。作者面临的背景问题是代码混乱,无法快速定位哪些接口需要修改,暴力查找效率低下。 他找到了一个巧妙的解法:使用 `tcpdump` 抓取服务器的出口流量,并过滤包含问题链接的响应。为了进一步定位具体是哪个请求路径,文章给出了两个实用技巧:在PHP中利用 `auto_prepend_file` 或在Nginx中利用 `add_header`,为每个响应统一注入一个 `X-Request-URI` 头部。这样,在过滤出的内容中就能直观看到对应的地址,让替换工作变得精准。 虽然Nginx有专门的Substitution模块可以完成替换,但作者认为在本例中这种方案显得过重。最终,这个案例展示了一个道理:即便是简单的替换问题,选择合适的方法能极大影响效率,值得我们多思考一步。

本机暂存
IT 开发者/ 2013-04-07 13:02:57 / 累计浏览 8,179

提高代码可读性的注释技巧

这篇讲的是如何通过注释让代码更“友好”。作者从最实用的技巧出发,强调注释应与代码结构同步:比如为类和方法添加标准化摘要,或在每个独立功能块前用分段注释说明意图。文章特别指出了几个容易踩的坑:要避免写“if (a==5) // 判断a是否等于5”这类冗余的“傻瓜注释”,更要杜绝在注释里抱怨前同事或用户——毕竟你不知道将来谁会读到这些字句。 更进阶的建议包括:使用像“TODO”这样的团队通用标签来高效沟通,最好在写代码的同时就完成注释,这时思路最清晰。最终目的是让注释成为未来的你和其他开发者之间的清晰桥梁,而不是单纯应付任务的填充物。整篇文章给出了从态度到具体操作的完整清单,让注释真正服务于代码的可读性。

本机暂存
IT 安全/ 2013-04-06 23:20:23 / 累计浏览 7,583

中国黑客传说:游走在黑暗中的精灵

这篇报道揭秘了号称“地下黑客世界王者”的匿名人物V的惊人能力与行为准则。他个人掌控着包括运营商内部系统、基础设施服务、大量互联网行业在内的权限,并积累了高达13亿条的去重用户数据,实现了“大数据式黑站”。V曾长期监控一个女孩的全部网络活动,研究保安行为,甚至能定位手机、伪造短信、定向推送信息,其能力已如电影场景。 然而,V恪守古老黑客守则:不破坏、不牟利、保持观察。文章通过具体事例(如他用弱口令数据库查询、控制微博大号等)揭示了顶级黑客对现代网络体系构成的潜在威胁,以及他们可能拥有的巨大舆论影响力。作者最终借V之口传递一个核心观点:真正的强大黑客应致力于让社会听到真实的声音,而非作恶。在绝对的技术能力面前,道德成为唯一的约束。

本机暂存
IT 算法/ 2013-04-06 23:19:04 / 累计浏览 4,564

信用卡校验位算法THE LUHN MOD-10

这篇讲的是信用卡卡号校验位背后的经典算法——Luhn Mod-10。作者从卡号的每一位数字出发,解释了如何通过一套简单而精巧的步骤来验证其真实性。 算法核心流程很清晰:先给卡号每位数字乘上一个交替的1或2的权重(具体从哪个权重开始,取决于卡号总位数是奇数还是偶数),如果乘积大于9则减去9。接着,将所有处理后的数字相加,最后对10取模。只要结果为0,就说明这个卡号格式上是校验通过的;否则很可能存在输入错误或是伪造号码。 这个算法的巧妙之处在于,它仅通过基础的加减法和取模运算,就能高效地检测出常见的输入错误,比如输错一位数字或相邻两位数字颠倒。虽然简单,但它被广泛应用在银行卡、身份号码等多种编码体系中,作为一种可靠的基础校验手段。

本机暂存
IT 后端/ 2013-04-06 23:17:19 / 累计浏览 6,309

移动互联网创业公司的服务器选择

这篇讲的是早期移动互联网团队,在预算和人力有限的情况下,如何务实选择服务器。作者从网络、硬件到软件,结合自己踩过的坑,给出了具体建议。 网络方面,他指出国内网络成本高,要先分析用户地域集中度来省钱,并强调机房在搜索引擎的“能见度”至关重要,否则用户手机根本访问不了。前期租用双线机房是更经济的选择。 硬件部分,他点明了几个容易被忽略但关键的细节:配内存条要匹配主板通道(比如三通道主板用三条相同内存)、务必检查RAID卡电池并开启缓存(对MySQL性能提升明显)、以及SSD应优先给数据库服务器使用,应用服务器则不需要。 软件选型上,他根据社区调查推荐CentOS,并特别提到移动互联网的协议选择。由于手机网络环境复杂,建议用HTTP协议并设置特定Header(如声明为JSON),来防止运营商劫持注入广告。 总的来说,这篇文章像一份为初创团队准备的、从基础设施到代码层面的实战避坑指南,每一条建议都直指小团队资源有限的痛点。

本机暂存
IT 算法/ 2013-04-06 23:16:11 / 累计浏览 7,927

记一下那些伪随机数生成函数

这篇讲的是一个在多线程环境下由伪随机数生成函数引发的性能“血案”。作者在使用100M数据跑LDA算法时,发现多线程迭代反而比单线程慢了数倍,且CPU大量时间耗在系统空间。排查后发现,罪魁祸首正是代码中调用的random()函数。 原来,glibc中的random()和rand()虽然是线程安全的,但其内部实现(加了一把全局锁)导致它们是不可重入的。在多线程竞争同一把锁时,性能便一落千丈。文章进而对比了rand_r()等可重入函数的实现,指出其算法较弱;而drand48系列函数则提供了更优的、基于独立状态数组的可重入版本(如erand48_r())。作者清晰地梳理了这些函数族的内在区别与适用场景:若需多线程高性能计算,必须使用能维护线程本地状态的可重入版本。 文章从具体坑点出发,剖析了glibc源码实现,最终落到了对随机数函数选型的实用建议上,对理解并发编程中的隐形陷阱很有启发。

本机暂存
IT DevOps/ 2013-04-06 23:15:38 / 累计浏览 6,660

linux下的高效代码搜索工具-ack

这篇讲的是一个专为程序员打造的代码搜索工具——ack。作者从厌倦了反复敲击 `grep + find` 的组合命令出发,介绍了这款号称“better than grep”的利器。 ack的核心优势在于它为源代码搜索做了深度优化。它默认会忽略版本控制、二进制文件和非源码目录,只在有意义的文件中高速检索,这直接解决了使用grep时经常误中日志或无用文件的痛点。文章通过对比展示了ack更简洁的语法:例如用 `ack-grep -w hello` 快速精确匹配单词,用 `--python` 参数一键限定只搜索Python文件,省去了繁琐的过滤步骤。文中还详细演示了ack在结果处理(如只显示文件名)、文件查找和基于文件类型的灵活过滤等方面的实用命令。 此外,ack支持通过配置文件固化个人习惯,例如设置默认搜索的语言类型、结果排序和分页展示,让高频操作更加顺手。对于需要在复杂项目中快速定位代码片段的开发者来说,ack能显著提升效率,是grep一个更聚焦、更现代的替代选择。

本机暂存
IT 算法/ 2013-04-06 23:13:26 / 累计浏览 5,328

为什么Fibonacci数列相邻两项之比会趋于0.618?

这篇文章从斐波那契数列相邻两项的比值现象出发,解释了它为何会趋近黄金比例0.618。作者没有停留在代数推导上,而是借助 Mathematica 动画,通过“黄金矩形”的几何构造给出了一个直观而优美的解释。 核心思路是:以斐波那契数对(1,1)、(1,2)、(2,3)…为边长构造矩形序列,每个新矩形都由前一个旋转90度并拼接一个正方形生成。随着图形不断递归生长,初始细节的影响逐渐消散,矩形整体与其内部的小矩形变得高度相似——这正是黄金矩形的定义特征。图形化演示清晰地展现了,无论起始矩形的比例如何,最终都会收敛到相同的黄金比例。 文章还顺带点明了一个有趣的结论:任何遵循“每项为前两项之和”规律的数列(哪怕起始值是任意的2和7),其相邻项比值最终都会收敛到0.618。这让抽象的数学规律变得可看、可感,也解释了一个常见的数学魔术背后的原理。

本机暂存
IT 安全/ 2013-04-06 23:01:43 / 累计浏览 16,853

Chrome和goagent的配置方法,你懂的

这篇教程详细讲解了如何利用Google App Engine与GoAgent,在Chrome浏览器中搭建一个自主可控的代理环境。文章从注册GAE账号、创建应用讲起,一步步指导读者下载并配置GoAgent客户端,包括修改proxy.ini配置文件、运行上传脚本将服务端部署到GAE。 在客户端设置部分,教程重点介绍了Chrome插件Proxy SwitchySharp的安装与配置,特别是通过导入预设的配置文件,并立即更新自动代理规则列表,来简化后续的使用。整个过程配有截图,步骤清晰。最终,作者指出当SwitchySharp运行在自动切换模式且GoAgent客户端启动后,配置即告完成。这为需要管理自身网络访问规则的技术用户提供了一个具体的、可复现的操作方案。

本机暂存
IT 数据库/ 2013-04-06 22:59:21 / 累计浏览 3,174

思考题:如下场景如何设计mongo collection

这篇探讨的是一个实际场景下的 MongoDB 集合设计问题:如何记录用户每次登录的业务标识、IP 及时间,并高效查询特定用户在特定业务下的某个 IP 是否已存在。 作者给出了两种思路并进行了对比。方案一采用扁平结构,为每次登录记录一条独立文档,结构清晰,查询时通过 `findOne` 直接定位。方案二则将同一用户同一业务下的所有登录记录聚合到一个文档中,将 IP 和时间存储为子文档数组,这在查询特定 IP 时语法略显复杂。 文章的核心矛盾点在于如何权衡查询的便捷性与应对新需求的灵活性。当需求变更为“每个用户同一业务只保留最新5条记录”时,方案一需要额外的计数与删除操作,而方案二则更利于在应用层(如 PHP)对数组进行裁剪后整体更新。作者最终选择了后者,并通过客户端脚本管理数组元素,再使用 `upsert` 操作同步回数据库。这反映了在 NoSQL 设计中,有时需要结合应用逻辑来弥补数据库层功能的不足。

本机暂存
IT 算法/ 2013-04-06 22:43:36 / 累计浏览 11,585

加州求职记

这篇讲的是一位国内互联网工程师放弃稳定工作,决心通过H1B签证赴美求职,最终却在Google、Amazon、Facebook三家巨头的面试中折戟的全过程复盘。 作者在百度工作四年多,曾带过技术团队并出版译作,离职时信心十足。然而,他很快发现,湾区科技公司的面试核心是扎实的编码能力,要求写出可直接运行的零Bug代码。他坦承自己算法基础薄弱,并非ACM科班出身,最大的失误在于因自满而没有尽早研究目标公司的面试特点,也未及时用最有效的方法弥补短板。 文中详细对比了CareerCup、ZOJ、TopCoder、LeetCode等平台的优劣,指出LeetCode结合了真题与在线评判系统的优点,其难度与实际面试最为接近,是他后期最有效的训练工具。在英语沟通方面,他也分享了通过“自言自语”进行模拟技术讲解的独特练习法。 尽管最终未能成功,但这段经历涵盖了首次英语面试、办理签证等多个“第一次”。作者以诚恳的态度记录下从盲目自信到反思自身不足的心路历程,为同样计划“肉身翻墙”的同行者提供了一份极具参考价值的实战教训与准备路线图。

本机暂存
IT 算法/ 2013-04-06 22:42:45 / 累计浏览 36,814

如何高效使用搜索引擎

这篇讲的是如何通过一系列高级搜索指令,将普通搜索变成精准的信息挖掘工具。文章从基础的双引号完全匹配和减号排除,逐步深入到inurl、intitle、site等更具针对性的指令,并清晰指出了它们在百度、Google等不同平台上的支持差异。 作者不仅列出了指令,更侧重于实战组合。比如,通过“inurl:.edu.cn intitle:交换链接”可以精准定位学校网站的链接交换页面;而“site:.com inurl:blog “post a comment””这个组合,则能高效筛选出可评论的博客,为寻找外链资源提供了可复制的模板。 文章的核心价值在于,它将搜索引擎从一个简单的提问工具,转变成了一个能够定向筛选权威信息源(如.gov、.edu域名)、分析竞争对手(通过inanchor、related指令)以及探测内容详情(filetype搜索特定文件)的高效侦察系统。对于需要经常查找特定资料、进行市场调研或SEO优化的读者而言,这些技巧能显著提升搜索效率与结果精度。

本机暂存
IT 数据库/ 2013-04-06 22:40:36 / 累计浏览 5,609

Oracle DBA的学习进阶成长树-从初出茅庐到高瞻远瞩

这篇文章探讨的是 Oracle DBA 这条技术路径上的长期成长规划。作者根据自己多年的经验,将 DBA 从新手到专家的历程,清晰地划分为五个进阶阶段,并指出这大约需要十年的持续积累。 文章的核心观点是,在任何一个技术领域,扎实的阶段性积累远比频繁跳槽更为重要。作者特别强调,对于一位有十年经验的 DBA,面试官最看重的是他是否曾在某个阶段,全心钻研过底层技术。如果没有这样深入的“磨练”,职业高度便会受限。这个视角点明了技术精进的关键。 文中还引用了一位网友的精彩比喻,用“少年听雨”到“灯火阑珊”的五句宋词,来映射 DBA 从青涩到豁达的五重境界,为硬核的技术成长增添了一份人文的注解。 如果你正在数据库管理的职业道路上探索,这篇文章提供的阶段模型和心态建议,或许能帮助你更好地校准自己的方向。

本机暂存
IT DevOps/ 2013-03-11 13:58:35 / 累计浏览 4,595

深入理解 VXLAN

这篇文章从实际网络需求出发,对比了传统GRE隧道扩展性差、VLAN标识数量有限且难以跨三层边界的痛点,引出了VXLAN(虚拟可扩展局域网)这一关键的二层隧道技术。作者清晰地解释了VXLAN如何通过将二层帧封装在UDP数据包中,并利用24位的VNI来突破限制,从而实现更灵活的大规模网络虚拟化。 文章的亮点在于对Linux内核源码的深入剖析。它带领读者看懂了`vxlan.c`中发送与接收数据包的全过程:发送端如何像搭积木一样,在原始帧上依次封装VXLAN头、UDP头和IP头;接收端则相反,通过注册的`udp_encap_recv`钩子函数,一层层剥离外部头部,将内部帧重新注入协议栈。文中展示的代码片段,如组播/单播地址判断和头封装逻辑,让技术原理变得直观可感。 如果你对云网络、容器互联或隧道技术背后的实现细节感兴趣,这篇文章提供了一个从理论到内核代码的完整视角,揭示了VXLAN设计中兼顾扩展性与性能的巧妙思路。

本机暂存
IT 前端/ 2013-03-11 13:55:16 / 累计浏览 5,847

JavaScript深度克隆(深度拷贝)一个对象

这篇文章从一道常见的前端笔试题“深度克隆一个对象”切入,解释了为什么很多人面对题目时会感到无从下手。作者首先厘清了JavaScript中的两种数据类型:基本类型(如Number、String)按值传递,而引用类型(如Object、Array)传递的是内存地址。这正是浅拷贝与深拷贝的根本区别所在——直接赋值只会复制地址,修改一个对象会影响到另一个。 接着,文章应该深入探讨了实现深度克隆的几种核心思路,例如使用递归遍历对象属性、利用JSON序列化与反序列化的特性,或是借助结构化克隆算法等现代API。这些方法在性能、处理循环引用以及保留特定对象类型(如Date、RegExp)上各有优劣,文章可能对此进行了分析和对比。 通过阅读这篇文章,开发者不仅能搞懂深度克隆问题的来龙去脉,还能掌握从基础原理到实际代码的完整解决方案,有效避免在状态管理或数据操作时因浅拷贝导致的意外副作用。

本机暂存
IT AI/ 2013-03-11 13:53:46 / 累计浏览 3,926

从抛硬币试验看概率论的基本内容及统计方法

这篇讲的是,概率世界里那个最经典也最容易被轻视的例子——抛硬币。作者从“概率为何存在”这个哲学问题切入,指出我们并非先验地认可概率,而是从类似“抛多次硬币,正面频率趋近50%”的反复观测中,总结出了统计规律。文章随后系统梳理了如何将这种直观认识形式化为数学模型:从要求等可能结果的古典概型,到更为普适和严格的公理化概率定义,并引出样本空间、随机事件等核心概念。 文章接着引导读者从静态的模型走向动态的统计规律。它介绍了大数定律如何从理论上确保频率的稳定性,并以此为基础,介绍了描述二元(正反)结果的二项分布,以及当试验次数极大时正态分布如何登场。在应用层面,文章触及了如何从有限数据反推模型参数(最大似然估计),以及如何基于模型判断一个观察到的现象是否显著(假设检验)。 这篇文章的价值,就在于将抽象的数学大厦建立在一枚硬币的抛掷之上,让读者清晰地看到,从简单的物理实验到严谨的统计推断,中间经历了怎样的思维跨越。

本机暂存