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

最新文章

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

IT 算法/ 2013-08-21 13:17:04 / 累计浏览 2,655

广告从业者的良心

这篇讲的是计算广告从业者的职业价值与良心困境。 作者从Facebook技术高管那句“我们这一代最聪明的人都在思考如何让人点击广告”的感慨出发,探讨了行业现状。他认为,顶尖人才聚集于计算广告领域有其必然性:广告是互联网公司最主要的生存之本,优化广告效果直接关系到企业收入,这本身无可厚非。 更重要的是,作者从“阳光”的一面阐述了计算广告的正面价值。其本质是高效的信息匹配:将特定信息送达有需求的受众,创造多方共赢。例如,维基百科通过精准的广告被更多人发现,用户获得了有用信息,广告平台也履行了连接责任。从业者提升的关键,是让广告信息对用户更有用,而非单纯增加广告量。 文章也明确了行业的“节操”底线:不能欺骗广告主与用户,不能传播违法内容。作者认为,技术可以有强弱,但良心不能泯灭,最终回归到“有节操地改善人类信息获取方式”这一初心。

本机暂存
IT AI/ 2013-08-21 13:15:06 / 累计浏览 2,053

怎样引导用户发布高品质图片

这篇讲的是一个拍照社交APP运营中遇到的典型困境:用户上传的照片质量不高,导致整个产品界面视觉观感差,挫伤了其他用户的拍照和互动欲望。 作者从一个反直觉的角度切入,指出直接“提升普通用户UGC质量”几乎是徒劳的,因为绝大多数用户既无拍摄技巧,也无相关审美。因此,核心策略不应是刺激普通用户,而是从源头上改善用户群的构成,吸引和运营好那些能稳定产出优质内容的用户。 同时,对于已有的内容生态,作者强调了“信息展示策略”的重要性。他以自己曾在“蝉游记”中上线“附近游记”功能后迅速下线的亲身经历为例,说明了盲目展示低质内容只会“自曝其短”。正确的做法是,在核心展示区域(如大厅)刻意筛选符合产品调性的优质内容进行露出,而将时效性、地域性等更多维度的(可能质量不均的)内容入口设置得更深,避免损害产品的整体形象气质。 文章最终启发我们,产品的核心价值需要清晰,功能设计应服务于这一价值,并通过精细的内容运营与展示逻辑,引导社区正向循环。

本机暂存
IT AI/ 2013-08-21 13:13:54 / 累计浏览 2,992

关键词推荐技术介绍

这篇文章深入讲解了关键词推荐技术在竞价广告系统中的核心作用。作者从赞助商搜索广告的选词困境出发,对比了Google、百度和阿里巴巴等主流平台的关键词推荐工具,阐明其共同目标:帮助广告主扩展选词思路,挖掘高价值词,从而提升产品曝光并精准获客。 文章重点剖析了推荐系统的两种主流方法:基于种子词推荐和基于产品(offer)推荐。尤其详细拆解了阿里巴巴国际站P4P背后的“先知平台”技术实现。该平台巧妙运用了自然语言处理、信息检索及分布式计算架构,通过线下挖掘与线上实时计算相结合的方式,从海量查询日志中高效匹配出与产品相关的关键词,并保证相关性与系统响应速度。 整体来看,这篇文章清晰展现了关键词推荐如何串联起广告主、平台与用户三方,并通过具体案例和架构图,将抽象的技术原理讲得直观易懂,为理解搜索广告的底层引擎提供了一个很好的切入点。

本机暂存
IT 数据库/ 2013-08-21 13:09:24 / 累计浏览 2,007

SSDB 配置文件

这篇讲的是如何理解和定制 SSDB 的配置文件。文章开篇就点明,默认附带的配置文件无需修改即可运行,但若需高度定制,了解其配置项就很有必要。 配置文件本身是层级 key-value 的静态格式,通过 TAB 缩进来表示结构,一目了然。文章逐一拆解了核心配置段:`work_dir` 指定了存放数据和日志的工作目录;`server` 段控制监听的 IP 与端口,出于安全考虑,可以将 IP 绑定为仅本机访问的 `127.0.0.1`;`replication` 段用于设置主从复制,明确了从服务器如何同步数据;`logger` 段管理日志级别、输出文件以及支持的大小轮转策略。 最值得关注的是 `leveldb` 段的配置。文章特别指出,`cache_size` 参数直接影响性能——适当增大缓存能提升读性能,但过大的缓存反而会拖慢写速度。这种基于实际使用场景的调优建议,对管理员来说非常实用。 总的来说,这篇文章将看似枯燥的配置文件讲解得清晰明了,不仅解释了“是什么”,还点出了“为什么”和“怎么调”,无论是初次接触 SSDB 的开发者,还是需要优化部署的运维人员,都能从中快速找到自己需要的配置要点。

本机暂存
IT 数据库/ 2013-08-15 13:40:09 / 累计浏览 4,253

基于Solr的空间搜索(3)

这篇讲的是如何在Solr中实现高性能的地理位置搜索。作者从纯使用GeoHash过滤效率不高的问题出发,介绍了一种结合**笛卡尔层(Cartesian Tiers)与GeoHash**的组合方案。 核心思路是分两步走:在构建索引时,同时为每条记录计算其所属的不同精度层级的网格ID(tierBoxId)。查询时,先用笛卡尔层根据查询范围快速定位一个大致的网格集合,将这些网格下的文档ID存入一个BitSet,完成初步粗筛。随后,再将这个BitSet作为输入,传递给GeoHash距离过滤器。该过滤器遍历粗筛后的文档,通过GeoHash解码出精确经纬度,计算其与查询点的实际球面距离,并过滤掉超出范围的结果。 实现上的一个巧妙之处在于利用了Lucene的FieldCache来缓存GeoHash值,并通过过滤链(Filter Chain)将两层过滤逻辑无缝衔接。作者还展示了一个本地查询实例,验证了这套方案在查询指定经纬度500公里内数据时的有效性。整体来看,这种“粗筛+精算”的两级过滤模式,显著减少了需要进行精确距离计算的文档数量,从而提升了查询性能。

本机暂存
IT 后端/ 2013-08-15 13:39:11 / 累计浏览 3,264

基于Solr的空间搜索(2)

这篇讲的是Solr+Lucene实现空间搜索中GeoHash方案的源码级剖析。作者从索引构建和查询解析两个阶段切入,展示了如何将经纬度转换为Base32的GeoHash编码存入索引,以及查询时如何通过`SpatialFilterQParser`解析用户的距离查询语法。 核心聚焦在查询阶段的实现链条:从`GeoHashField.createSpatialQuery`生成查询,到`ValueSourceRangeFilter`和`GeohashHaversineFunction`协作过滤文档。作者特别指出了流程中一个可能影响性能的环节——过滤逻辑会遍历索引中的所有文档(从docId=0开始),逐一计算每个文档坐标与查询点的球面距离,并判断是否在指定范围内。源码中也有“TODO: optimize this”的标注,表明作者对这种全量遍历加计算的效率有所疑虑。 整体来看,文章像一次带读者拆解黑盒的代码导读,不仅说明了“怎么做”,也提出了对当前实现效率的思考,为理解Solr空间查询的内部机制提供了扎实的细节。

本机暂存
IT 数据库/ 2013-08-15 13:38:28 / 累计浏览 3,038

基于Solr的空间搜索(1)

这篇讲的是如何在Solr中实现高效的“附近搜索”等空间查询功能。作者从基础原理出发,重点剖析了两种核心方法:Cartesian Tiers(笛卡尔层)和GeoHash算法。 笛卡尔层的思路很直观:把地图像切蛋糕一样分成层层网格。查询周边时,系统只需在几个特定层级的相关网格内搜索,从而大幅减少需要扫描的数据量,这就像一个聪明的漏斗,帮你快速缩小范围。而GeoHash则提供了一种巧妙的编码方式,它将二维的经纬度转换成一维的字符串,比如“wx4g0ec1”。这个字符串本身就像一个地址,前缀代表更大的区域,利用前缀匹配就能轻松实现范围查询,把复杂的空间问题变成了简单的字符串匹配。 文章通过详细的图解和计算示例(比如如何为北京某点的坐标生成GeoHash码),把这两个算法的实现流程讲得非常透彻。理解了这两个基础,你就能明白许多地图应用背后高效的空间检索是如何运作的。文章最后也提到,关于如何在Solr中具体构建索引和执行查询,会在后续内容中展开。

本机暂存
IT 后端/ 2013-08-15 13:25:23 / 累计浏览 10,495

linux内核研究笔记(一)内存管理 – page介绍

这篇讲的是 Linux 内核内存管理中最基础的数据结构——`struct page`。作者以一名服务器程序员的视角,从对“虚拟内存”的好奇出发,深入内核底层,剖析了物理内存管理的核心。 文章首先展示了 `page` 结构体的关键字段,并指出它是内核描述物理内存页的最小单元。核心在于,这片物理页在不同场景下被赋予不同角色:作为页缓存(`mapping` 域)加速文件IO,作为私有数据(`private` 域)用于缓冲或交换,或作为页表映射支撑用户空间的 `malloc`。 作者进一步通过宏定义,解释了页帧号(pfn)与 `page` 指针、物理地址、内核逻辑地址之间的转换机制。比如 `pfn_to_page` 本质上是操作全局数组 `mem_map`,巧妙地将连续的物理内存抽象为可索引的对象。文章还厘清了“内核逻辑地址”与“内核虚拟地址”的区别,并点明在 x86_32 架构下 `PAGE_OFFSET` 的由来。 理解 `page` 结构是窥探内核如何管理伙伴系统、slab分配器乃至整个虚拟内存系统的钥匙。这篇笔记从最底层的数据结构切入,为后续理解更复杂的内存管理机制打下了坚实基础。

本机暂存
IT 前端/ 2013-08-15 13:15:49 / 累计浏览 4,654

关于z-index的那些事儿

这篇技术文章从一个经典的CSS谜题切入:如何在不修改HTML结构、不改动z-index与position属性的前提下,让设置了z-index:1的红色span反而堆叠到其他元素之下?作者通过揭晓答案——为父元素添加一个极小的opacity值(如.99)——引出了对z-index工作原理的深度剖析。 文章的核心在于揭示“堆栈上下文”这一关键概念。作者指出,许多开发者误以为z-index只是简单的数值比较,而忽略了它受元素定位(position)和透明度(opacity)等属性的间接影响。当父元素因设置了opacity小于1而创建新的堆栈上下文时,其所有子元素(无论z-index值多高)都会被限制在这个新的层级范围内,无法突破到上层堆栈中。这就是谜题的解法,也是日常开发中z-index“失灵”的常见根因。 文中进一步梳理了在同一个堆栈上下文中,元素从后到前的排列规则:包括负z-index值的定位元素、非定位元素、z-index为auto的定位元素,以及正z-index值的定位元素等。这些细节帮助开发者在构建复杂UI时,能更精准地预测和控制元素的层叠顺序,避免因误解规则而产生的布局困扰。

本机暂存
IT 设计/ 2013-08-15 12:58:06 / 累计浏览 1,480

谈谈“需求场景”的重要性

这篇文章探讨了产品经理工作中一个常被忽视却至关重要的维度——“需求场景”。作者指出,经典的“用户+需求”分析框架如果缺少对场景的考量,可能会导致解决方案与真实需求脱节。 文章通过三个贴近生活的故事,清晰地展现了场景如何彻底改变同一个需求的最优解。比如“了解新闻”这个需求,在通勤地铁上、办公间隙、家庭晚餐时以及周末自驾途中,分别对应着手机APP、网站、电视和广播等截然不同的承载形式。又如“从市中心到机场”的出行选择,时间、同行人数、时间价值等场景因素,会直接影响用户是选择地铁、打车还是机场大巴。最有趣的是第三个例子:作者逛超市的核心需求可能根本不是购物,而是寻找一个能让全家人自然互动、增进感情的场景。 这些例子共同指向一个关键结论:产品经理不能只听被过滤和总结过的“二手需求”,而应该去倾听用户讲述的真实故事。故事中包含的时间、地点、人物和完整情节,才能让人真正感同身受,理解产品最终服务的并非抽象的“用户群体”,而是一个个在具体场景中鲜活的个体。

本机暂存
IT DevOps/ 2013-08-15 12:53:50 / 累计浏览 2,516

想法与方法

这篇讲的是“想法与方法”之间常被忽略的鸿沟。作者从一个经典的寓言切入:一群老鼠讨论如何在猫脖子上挂铃铛以避险,主意虽妙,散会后却无人能执行。这个故事尖锐地指出了我们在工作中的一个常见陷阱——我们常常不缺天马行空的想法,甚至头脑风暴能产出无数点子。 文章的核心观点在于,真正的价值不在于提出多少点子,而在于冷静地区分哪些是当下可做的、哪些还纯属空想。靠谱的团队成员,应该帮助集体认清现实:明确手头的资源、可以借助的外力,以及最终能达成的实际绩效。作者强调,一个人的错误判断,可能拖累整个团队的努力。 对技术人而言,这提醒我们,在追逐新技术或设计新方案时,光有“好主意”不够。深入评估可行性、清楚边界条件,并与团队坦诚沟通,才是让创意真正落地、推动项目前进的关键。

本机暂存
IT 前端/ 2013-08-14 13:49:43 / 累计浏览 3,028

被边缘化的前端

这篇文章以一句引人深思的断言开篇:前端开发是互联网技术领域中最容易被边缘化的工种。作者从产品开发全链条的视角出发,指出前端往往处于下游环节,难以把握产品走向,甚至常被其他职能人员轻视其价值——“这个做起来不是很简单么”。这种尴尬处境,在大多数非前端专精的公司里尤为明显。 文章的核心观点并非一味悲观,而是借“堂主”之口敲响警钟:随着信息呈现媒介从浏览器向多端扩展,前端的传统舞台面临萎缩风险。作者犀利地指出,前端角色的可替代性恰恰源于其与产品核心逻辑的距离。文中列举了前端在合作中被忽视、工作量被他人估算等具体现象,生动地刻画了职业困境。 真正的启发在于文末的呼吁:前端工程师需要打破“拒绝陌生领域”的本能。文章建议,与其固守即将被稀释的阵地,不如主动向后端、架构或产品方向延伸能力边界。作者认为,这种危机感并非制造焦虑,而是对抗边缘化的必要清醒——毕竟,在技术世界里,角色的边界从来不是固定的。

本机暂存
IT 开发者/ 2013-08-14 13:46:25 / 累计浏览 5,722

为什么C语言需要函数声明

这篇讲的是作者从同事遇到的一个诡异bug出发,揭示了C语言中“函数声明”为何不可或缺。同事的代码中,一个返回double的函数,在函数内部打印的值和外部接收到的值差异巨大。通过反汇编,作者发现了关键线索:编译器生成了一条将整型转换为双精度浮点的指令(cvtsi2sd)。 根因在于,当函数在别的源文件中定义,而调用方没有其声明时,编译器在编译阶段并不知道该函数的真实面貌。它会默认函数返回整型(放入eax寄存器)。由于调用方实际期望一个浮点值(应放入xmm0寄存器),编译器就在调用后强行做了一次类型转换,从而导致了值的错误。问题不仅限于返回值,未声明的函数参数也会导致编译器忽略类型检查,可能引发更隐蔽的栈或寄存器传参错误。 作者指出,现代编译器如GCC能通过-Wimplicit-function-declaration选项对此发出警告。根本的解决之道是养成良好习惯,开启-Wall选项,并确保在使用任何外部函数前都进行正确声明。

本机暂存
IT 移动开发/ 2013-08-14 13:38:16 / 累计浏览 2,291

arduino-蓝牙各种版本类型及费用对比

这篇讲的是Arduino项目里怎么选蓝牙模块。作者从市面上几家主要厂商如德州仪器、北欧半导体的产品线入手,梳理了蓝牙2.1+EDR、3.0和4.0(BLE)三个版本的核心差异。 蓝牙2.1+EDR是2006年后流行的经典款,胜在稳定好用;3.0的“秘密”是能借力WiFi传输,速度能快8倍;而4.0(BLE)则主打低功耗和60米传输距离,但作者也指出,它需要Android 4.3以上系统才能完整支持,对开发平台有一定要求。 除了技术对比,文章还点出了一个容易被忽略的现实问题:蓝牙BQB专利认证。作者提醒,产品若要出口欧美,这笔初次7500美元、年费5000美元的认证开销可能无法避免。不过好消息是,采用TI CC254x芯片的方案目前可以免专利费。 对于正在做无线连接的Arduino开发者,这篇文章清晰地帮你权衡了性能、功耗、兼容性与潜在的认证成本。

本机暂存
IT 设计/ 2013-08-14 13:37:03 / 累计浏览 2,649

用户体验设计中的精益之道

作者从个人经历出发,分享了在项目密集、资源紧张的背景下,如何将“精益”思想应用于用户体验设计,以高效达成质量目标的真实故事。文章以一次“两天设计、周一上线”的充值中心极速改版项目为例,具体拆解了应对极限挑战的方法论。 核心方案围绕提升团队协作效率与设计流程的精益化展开。首先,通过交互、视觉与前端重构的协同工作,打破流水线模式,显著降低了沟通成本与等待时间。其次,采用模块化设计,优先输出基础控件,让开发能快速搭建框架,为迭代赢取时间。同时,在信息架构上大胆做减法,例如在SOSO视频改版中,摒弃了“大而全”的门户思路,聚焦于“挑”这一核心动作,用简洁的首页和始终跟随的导航大幅缩短用户路径。 此外,文章还详细介绍了“精益提案”与“精益跟进”的实践,包括如何通过引导、高保真Demo提升方案通过率,以及如何利用集中走查、渐进式灰度上线与A/B测试来推动设计落地。最终,这次快速改版不仅按时上线,还成功提升了支付率,团队也因此获得了标杆奖励。这些来自一线的实战经验,为如何在敏捷节奏中平衡设计质量与交付速度,提供了切实可行的参考。

本机暂存
IT DevOps/ 2013-08-14 13:36:29 / 累计浏览 1,439

互联网学习型敏捷研发组织的构建及策略

这篇讲的是如何为大型互联网系统打造一个真正敏捷的研发组织。作者一玄犀利地指出,许多团队深受传统瀑布模型影响,错误地将“流程”置于“人”之上,试图用“精密”的官僚流程把开发者当作流水线上的机器来管理,这恰恰忽视了软件开发中水面下的关键因素——“人和组织”。 文章主张,高效的敏捷团队必须摒弃命令控制文化,转向扁平、开放、自组织的学习型组织。作者将成功所需的能力分为两层:表层的“硬”技能(产品设计、快速开发、系统运维、社区运营),以及更底层的“软”能力,即组织持续学习、反思调整和团队协作的能力。 实现这一点的关键在于重构团队模式——从按职能分割转向按功能划分的跨职能小团队。团队内部自组织、高度自律,共同对项目负责。与之匹配的管理风格也应是“领导-协作式”而非“命令-控制式”:管理者需像教练一样,聚焦客户价值、清除障碍、培养个体、并营造一个鼓励交流与反思的环境。 最终,一个真正具备学习能力的组织能够自适应地选择和实践最适合自身的敏捷方法,让优秀的产品自然地从团队中涌现出来。

本机暂存
IT 后端/ 2013-08-13 13:37:28 / 累计浏览 2,114

雅虎中国:终身免费邮箱

2007年,雅虎中国高调推出“终身免费邮箱”,并扬言要与网易打持久战。然而仅六年后,这项“终身”服务便宣告关闭。 这篇文章复盘了这起商业承诺的演变。作者指出,邮箱本身很难直接盈利,其对互联网巨头的真正价值在于构建一个核心“用户体系”,并以此推行“通行证策略”——用一个账号打通所有服务,从而深度了解用户行为,为商业决策提供支撑,例如谷歌的Gmail与微软的Hotmail。 对于运营雅虎中国的阿里而言,这套逻辑并不适用。阿里自身拥有庞大的电商用户体系和独立的IM工具(阿里旺旺),并不依赖雅虎邮箱来建立通行证。从独立业务看,雅虎中国邮箱也并非市场领导者。因此,在阿里逐步摆脱对雅虎总部的依赖后,关闭这个既不赚钱又缺乏战略意义的业务,便成了顺理成章的选择。文章揭示了一个朴素的商业逻辑:巨头的承诺往往服务于特定阶段的战略,当战略本身发生变化时,“大话”也就有了合理的注脚。

本机暂存
IT 前端/ 2013-08-13 13:35:22 / 累计浏览 2,780

使用SeaJS实现模块化JavaScript开发

这篇文章通过一个Web应用“TinyApp”的具体开发场景,清晰地对比了传统JavaScript开发与使用SeaJS进行模块化开发的差异。作者指出,传统模式下随着文件增多,开发者需要手动维护繁琐的script标签列表和复杂的模块依赖顺序,极易导致代码纠缠与维护困难。 而SeaJS作为一个遵循CommonJS规范的轻量级模块加载框架,其核心在于“一切皆模块”的理念。文章展示了在SeaJS模式下,HTML页面只需引入一个sea.js,所有模块依赖都通过模块内部的`require`声明并由框架自动处理。这使得代码组织清晰,开发者可以专注于业务逻辑本身,不必再被依赖管理所累。 此外,文章还深入讲解了SeaJS的实践细节,包括如何使用`define`函数定义模块,以及工厂函数中`require`、`exports`和`module`这三个关键参数的作用。作者强调SeaJS秉持KISS原则,API简洁,能够与jQuery等主流框架无缝集成,从而提升前端工程的代码可维护性。

本机暂存
IT 开发者/ 2013-08-13 13:34:03 / 累计浏览 8,143

学你妹的计算机!

这篇带着情绪的吐槽,实际上指向了一个现实问题:计算机专业的学习与就业市场之间是否存在落差?作者从一则引发讨论的新闻事件出发,汇集了知乎回答、媒体报道和微博信息等多方声音,勾勒出当时部分从业者和学习者的迷茫与自嘲心态。 文章没有进行严谨的数据分析或行业调研,而是通过情绪化的标题和直接引用来传递一种集体感受——对“学计算机”价值的困惑,以及面对就业压力的无奈调侃。这种自嘲背后,其实隐含着对技术学习路径和行业前景的深层思考。 它更像是一次情绪共鸣的记录,而非技术探讨,但恰恰因此真实地反映了特定时期技术社群内的一种普遍心态。对于经历过或正在经历类似阶段的读者来说,或许能从中看到自己或同行的影子。

本机暂存
IT AI/ 2013-08-13 13:09:09 / 累计浏览 2,717

个性化实时计算系统及其应用探索

这篇来自阿里技术团队的文章,分享了他们如何应对电商场景下用户兴趣实时变化的挑战。作者从淘宝搜索个性化的实际需求出发,介绍了团队设计的个性化实时计算系统PORA。 PORA是一个基于HBase与Storm的实时流计算系统,其核心在于从日志通道订阅用户行为,并通过三个Storm组件(解析、计算、更新)快速完成数据处理与存储,端到端延迟约300毫秒。这种“离线计算、实时服务”的架构,使得应用方能便捷地获取到用户最新的兴趣偏好。 文章重点阐述了系统在搜索重排序等场景的应用:在商品的相关性排序基础上,融入用户的性别与价格偏好进行个性化调整。实验数据表明,该方案上线后使整体成交金额提升了约2%,其中客单价的提升尤为明显。但作者也客观地指出,由于能获取明确性别画像的用户和Query占比有限,点击率与转化率的提升尚未达到预期。 最后,文章探讨了未来的优化方向,包括深化更多偏好维度的挖掘,以及通过动态调整个性化商品的展现比例与混合排序来提升用户体验。

本机暂存