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

最新文章

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

IT 后端/ 2014-12-30 12:17:01 / 累计浏览 1,965

标准化与可复用杂谈

这篇讲的是从一次具体的线上问题排查说起,引申出对软件工程中“标准化”与“可复用”的思考。作者描述了一个典型场景:用户反馈的问题经过层层传递,工程师最后发现是某台服务器在特殊情况下启动了错误版本,导致返回数据异常。这背后暴露的是从代码测试、服务调用到上线发布的全流程中,处处依赖人工细心所潜藏的高风险。 文章的核心观点在于,将全流程中那些不易变的单元(如测试、服务交互规范、发布步骤)进行标准化,并用程序来控制,可以从源头减少低级错误。作者以一个深度使用消息队列但因标准化和抽象不足,导致经验难以复用的团队为例,说明了这一点。同时,文章也对比了国内外对工程师严格要求的差异,指出在业务驱动、快速交付的压力下,形成高质量代码共识与推动标准化建设的不易。 文章的启发在于,它并非空谈架构,而是从运维和开发的共同痛点出发,论证了标准化对于解放工程师精力、提升系统可靠性的实际价值,尤其适合那些正被重复性故障和低效协作困扰的技术团队反思。

本机暂存
IT 移动开发/ 2014-12-29 00:10:12 / 累计浏览 2,031

ios webview 相关

这篇讲的是开发者在iOS原生开发中,通过Objective-C操作WebView加载页面时遇到的两个典型“坑”及其排查过程。 第一个问题是关于携带Cookie的WebView加载。当需要传递带有HTTPOnly标记的登录Cookie时,发现NSHTTPCookie本身并不支持设置这个标记。作者的解决方案是绕开API限制,手动在请求头中拼接Set-Cookie字段,并详细演示了如何在加载前清理旧Cookie、在加载后构建并存储带有httponly标记的Cookie对象,确保了安全性和功能同时生效。 第二个问题涉及URL的细微变化。当页面内的JavaScript行为导致URL从“index.php”变为“index.php#”时,WebView的回调机制出现了异常:只会触发`shouldStartLoadWithRequest`,而不会触发`webViewDidFinishLoad`。这意味着如果开发者在此回调中管理“加载中”提示框,该弹窗可能无法自动隐藏,导致用户体验中断。文章指出了这个容易被忽略的加载状态管理时机问题。 文章最后坦言可能有更好的解决方案,并鼓励读者交流分享,体现了在复杂移动端环境中,对WebView这类“水很深”的组件进行细致调试与经验积累的重要性。

本机暂存
IT 后端/ 2014-12-29 00:07:57 / 累计浏览 11,243

server日志的路径分析

这篇讲的是如何通过分析Web服务器日志中的路径信息,理解用户访问行为。作者从日常遇到的疑问出发——有人误以为服务器日志来自数据库,借此清晰界定了服务器日志的本质:它是客户端与服务器间所有通信(包括IP、时间、访问路径、状态等)的忠实记录。 文章以Nginx日志为例,逐条拆解了其看似杂乱的格式,对应到日志字段如请求URL、状态码等。核心在于,作者分享了利用Shell命令(awk和sed)从海量日志中提取、清洗并统计访问路径的实战过程。具体来说,通过awk按分隔符切割出URL字段,再结合sort和uniq进行排序计数,最终形成每个路径的访问次数统计。整个分析链条从原始日志文件到生成结构化的路径统计表,步骤清晰。 为了让结果更直观,作者还将统计输出为表格和图表形式,并强调了数据可视化在提升分析体验和洞察效果上的关键作用。整个分享聚焦于“如何做”,是一次从原始数据到可视化结论的完整实践演示。

本机暂存
IT 后端/ 2014-12-29 00:02:16 / 累计浏览 3,934

PHP7 VS HHVM (WordPress)

这篇文章从PHP7与HHVM的性能争议出发,在WordPress站点上进行了一场直接的压测对比。作者使用ab工具,对两套环境(PHP7-FPM与Nginx+HHVM-3.2.0)分别进行了预热后100并发、1万次请求的测试。 结果显示,PHP7达到了258.22 QPS,略高于HHVM-3.2.0的230.97 QPS。作者据此指出,在真实Web场景下,PHP7的性能已与HHVM相当,甚至在某些情况下有所超越。更关键的是,文章深入分析了HHVM在运维层面的潜在风险:其多线程模型意味着单个线程崩溃可能导致整个服务宕机,且依赖JIT编译,在服务重启后需要预热,冷启动性能较差,调试也更为复杂。 作者最终抛出一个核心问题:当PHP7性能已然足够,且更稳定、易于维护时,我们是否还有充分的理由选择HHVM?文章同时回应了此前一些针对HHVM的性能对比案例,认为其对比方法存在缺陷,结论缺乏普适性。

本机暂存
IT 后端/ 2014-12-28 23:57:50 / 累计浏览 2,682

Web编码总结

作者从一次AJAX请求中变量编码不一致的“踩坑”经历出发,引出了Web开发中一个常见却容易被忽视的核心问题:编码。文章并未停留于问题本身,而是系统梳理了从编码简史到实际应用的完整脉络。 它简要回顾了ASCII、GB系列到Unicode/UTF-8的演进,并点出国内大厂网站(如百度、淘宝、QQ.com)在文件编码选择上的历史现状。重点剖析了网页显示中,HTML编码由HTTP头、meta标签和浏览器默认设置共同决定的权重关系,以及CSS文件通过`@charset`指令声明编码的机制。文中穿插了关于操作系统换行符差异等实用小贴士,使技术知识更接地气。 这篇总结的价值在于,它将编码这个看似底层、枯燥的话题,与日常前端开发的具体环节(HTML、CSS、JS文件)紧密结合,帮助开发者建立清晰的排查思路,理解乱码问题的根源往往在于编码声明的不一致或缺失。对于希望夯实基础、避免低级错误的开发者来说,这是一份很好的实践指南。

本机暂存
IT 后端/ 2014-12-28 23:56:39 / 累计浏览 4,061

NAS解决方案实现多媒体文件共享播放

这篇讲的是,如何用家里闲置的台式机,自己动手搭一个家庭影音中心,让笔记本、平板也能像访问本地硬盘一样,流畅播放电脑里的高清大片。 作者从日常存储空间不足的痛点出发,尝试了HTTP、FTP等流媒体方案,但都不够完美。最终,他利用Windows系统自带的SMB文件共享功能,将台式机改造成了家用NAS。 文章的核心在于一步步打通整个共享链路。服务端需要确保Server、TCP/IP NetBIOS Helper等关键服务处于开启状态,正确设置网络属性的NetBIOS选项,并为想共享的文件夹配置好访问权限。客户端则可以映射网络驱动器,直接获得一个类似本地磁盘的盘符。 配置完成后,作者发现直接播放1080P视频仍有卡顿。根因在于顺序读取时对瞬间传输速率要求过高。通过在共享设置中勾选“启用缓存以提高性能”选项,问题得到解决,播放变得流畅。 这个方案不仅限于Windows设备间互联,通过安装相应的应用,类Unix系统或其他终端也能访问这个共享服务。它把一台普通电脑变成了家庭的多媒体文件枢纽,实用性很强。

本机暂存
IT DevOps/ 2014-12-28 23:51:45 / 累计浏览 3,130

vsftp安装以及本地用户和虚拟用户认证方式配置

这篇讲的是如何搞定VSFTP这个配置起来让人头疼的服务,作者从源码安装开始,一路记录了在本地用户和虚拟用户两种认证模式下的配置要点,并特别总结了几个容易踩到的“坑”。 文章从64位系统编译时库路径错误这个常见问题切入,给出了直接修改脚本的解决方案。在本地用户配置部分,重点解释了新版VSFTP中chroot目录权限冲突的问题,以及如何通过`allow_writeable_chroot=YES`参数巧妙解决。虚拟用户认证则详细介绍了从创建用户列表、生成加密数据库文件到配置PAM模块的全流程。 最实用的是作者分享的排查经验:当遇到认证失败并提示数据库文件无效时,通过对比正常机器生成的db文件,定位到了db4-utils安装或文件格式问题。这些从实际部署中总结出来的细节,对避免重复踩坑很有帮助。

本机暂存
IT 安全/ 2014-12-28 23:46:32 / 累计浏览 2,673

Linux使用curl访问https站点时报错汇总

这篇整理了在使用Linux的curl命令行工具访问HTTPS站点时,几类最常见的证书相关报错及其解决方法。文章指出,问题的根源往往在于不同客户端(如curl、浏览器、Java程序)使用独立的证书库,而Linux的curl默认依赖位于 `/etc/pki/tls/certs/ca-bundle.crt` 的文件。 摘要列举了四种典型情况:遇到“Peer’s Certificate issuer is not recognized”时,多是由于自签名证书未被信任,解决方法是将私有CA的公钥追加到系统证书库中。而“certificate verify failed”错误,则常因本地CA证书库过旧,无法识别新签发的证书,需要下载最新的cacert.pem进行替换或使用系统命令更新。当遇到“unknown message digest algorithm”时,根源在于系统的OpenSSL版本过低,不支持如SHA-256等新算法,升级OpenSSL是必要步骤。 文章最后还对比了Java和PHP处理HTTPS的机制,指出它们拥有自己的证书库(如Java的cacerts),与系统curl的证书库相互独立。整篇文章以实战报错为线索,提供了直接的操作路径,对于解决这类环境配置问题很有参考价值。

本机暂存
IT 后端/ 2014-12-28 23:42:59 / 累计浏览 11,958

面试题 – 为什么我的朋友圈不见了?

这篇文章从一个常见但棘手的分布式系统问题切入:当一个数据聚合服务需要从多个远程服务获取数据,而其中一个服务不可用时,架构师应该如何选择容错策略? 作者详细剖析了三种典型方案。方案一是直接忽略失败的部分数据(优雅降级),虽然损失最小,但可能导致用户体验不确定。方案二是遇到任何失败就返回整体错误(503),完全依赖调用方的缓存与容错能力,否则用户会看到白屏。方案三则是自定义返回格式,显式告知哪些数据加载成功、哪些失败,但这大大增加了前后端的复杂度。 文章并未止步于此,而是进一步引入了“未读数”这一常见功能,将问题场景变得更复杂:即使主数据列表因服务不稳定而缺损,如果能单独提供一个准确的未读数,用户体验和系统效率会如何变化?这使得对三种方案的权衡更加微妙。 整篇文章的核心价值,不在于给出唯一答案,而是系统性地呈现了架构师在“数据完整性”、“用户体验”、“系统复杂度”和“服务可靠性”之间必须进行的现实权衡。它启发我们思考,在微服务架构下,如何设计既健壮又不过度复杂的容错机制。

本机暂存
IT 后端/ 2014-12-28 23:42:14 / 累计浏览 3,230

PHP优化杂烩

很多PHP开发者习惯通过优化代码来提升性能,但这篇讲的是另一个同样重要的维度:如何配置一个高效的PHP运行环境。 作者从几个常被忽视的配置项出发,系统地梳理了它们对性能和稳定性的影响。首先提到了“进程池”的价值,通过创建独立的池来隔离故障,避免一个慢请求拖垮整个服务。在Nginx与PHP通信的“listen”方式上,文章对比了TCP与Unix Socket,并指出后者虽更高效,但需要调大 backlog 等参数以保证高并发下的稳定。 对于“pm”进程管理,文章明确推荐了静态模式以应对高并发,避免动态模式频繁创建进程带来的开销。最后,也是最实际的:如何设置“pm.max_children”进程数?作者指出这并非一个固定公式,而需要综合考虑CPU类型(IO密集还是计算密集)与内存限制。他通过“RES减SHR”计算出单个PHP进程的实际内存占用(约10MB),从而推导出在有限内存下能承载的最大进程数,并建议结合状态接口进行动态监控。 这篇内容的价值在于,它把性能优化从单纯的代码层面,引向了可系统配置的运行时架构层面,提供了具体可操作的参数调整思路和决策依据。

本机暂存
IT 前端/ 2014-12-28 23:41:04 / 累计浏览 17,111

HTML5 离线缓存-manifest简介

这篇讲的是如何用HTML5的Cache Manifest让网页在离线状态下也能访问。作者在将Painter项目中的离线缓存方案复用到其他项目时,发现有些生疏,于是系统梳理了这个技术,为自己也为大家做个记录。 文章从移动时代网络不稳定的痛点切入,解释了manifest文件的核心作用:它定义需要缓存的资源列表,让浏览器能将这些文件保存到本地。即使没网,也能继续浏览网站。这不仅能带来离线体验和更快的速度,还能减轻服务器压力。 文中详细拆解了manifest文件的三段式结构:必需的`CACHE`段明确要缓存哪些文件;可选的`NETWORK`段声明哪些资源必须联网获取;`FALLBACK`段则定义资源加载失败时的备用页面。文章也指出了一些关键注意事项,比如整个站点的同源限制、不同浏览器对缓存容量的不同上限,以及更新缓存的三种方式(更新manifest文件、JavaScript调用或清除浏览器缓存)。 对于需要缓存大量文件的项目,手动编写manifest文件容易出错,文章最后介绍了`grunt-manifest`这类自动化工具,可以通过构建任务自动生成manifest文件,解放生产力。

本机暂存
IT 后端/ 2014-12-10 23:19:02 / 累计浏览 9,152

【2014年版】异地购房提取北京公积金

这篇讲的是作者离职后异地购房,如何提取北京公积金的完整实操经历。文章从个人“踩坑”出发,梳理了从账户状态确认、材料准备到现场办理的全流程。 作者首先发现自己的公积金账户已被原单位挂靠的中智公司“集中封存”,导致无法线上处理。朝阳管理部电话长期打不通,最终通过拨打北京公积金中心客服热线010-96155,获取了清晰的材料清单,包括购房合同、发票、身份证、结婚证,以及针对已离职人员的关键文件——异地购房证明和社保缴纳明细。 文章详细记录了如何与购房地居委会沟通开具证明,并分享了自己拟定的证明模板。现场办理时发现,正是因为账户处于“封存”状态,才得以以个人名义直接前往公积金中心办理,避免了通过单位的繁琐流程。作者在文中对比了南北方办事效率的差异,并总结了多条实用提示:优先查询官方网站、耐心拨打官方客服电话、利用在线问答渠道获取准确信息。整体是一份信息扎实、充满细节的“办事指南”式经验复盘。

本机暂存
IT 前端/ 2014-12-10 23:07:04 / 累计浏览 4,084

JavaScript实现的抛物线运动效果

这篇讲的是如何用JavaScript实现购物车常见的抛物线飞入动画效果。作者从天猫购物车的交互体验得到启发,参考了张鑫旭的抛物线运动原理,但觉得现有代码结构可以优化,于是重新实现了一版更简洁易用的方案。 核心实现基于抛物线数学公式,通过动态计算元素在每一帧的left和top偏移来模拟运动轨迹。作者的巧妙之处在于将整个过程封装成了一个可配置的`Parabola`对象,开发者只需通过参数设置目标偏移量(`offset`)、运动时长(`duration`)和曲线弧度(`curvature`),就能快速获得想要的运动效果。文章还提供了运动前后的回调函数接口,方便在动画结束时触发后续逻辑。 文末附有完整的在线Demo和清晰的参数说明表格,方便读者直接上手测试和理解每个选项的作用。这种从实际需求出发、重构成更符合个人习惯代码的思路,对前端开发者如何学习和改进现有方案也有不错的参考价值。

本机暂存
IT 前端/ 2014-12-10 22:49:08 / 累计浏览 2,520

meta标签常用属性整理

这篇文章是对 HTML `meta` 标签常用属性的一次系统梳理。作者从 W3School 的基础定义出发,首先明确了 `meta` 标签作为元数据载体的核心作用——它不显示在页面上,但为浏览器、搜索引擎等机器提供关键信息。 文章将属性清晰地分为“必要”与“可选”两部分进行讲解。必要属性重点介绍了 `content`,它用于定义具体的元信息内容。可选属性则详细拆解了 `http-equiv`(关联 HTTP 头部,如页面刷新、字符集设置)和 `name`(关联具体名称,如作者、描述、关键词)的常见取值与用途。 特别值得注意的是,文章用较大篇幅深入讲解了 `meta` 标签在 SEO 优化中的实战应用。这部分内容非常具体,例如:如何设置页面关键词(`keywords`)和描述(`description`)以提升搜索相关性;如何通过 `robots` 属性(如 `index,follow` 或 `noindex`)控制搜索引擎的索引与追踪行为;以及如何利用 `refresh` 实现页面自动刷新或重定向,并指出了其潜在风险。 整篇文章将零散的属性知识结构化,并紧密关联到 SEO 和页面控制的实际场景,对于前端开发者来说,是一份非常实用且易于查阅的参考手册。

本机暂存
IT 开发者/ 2014-12-08 23:53:13 / 累计浏览 3,372

我所经历的盛大创新院

这篇是作者对盛大创新院一段职业生涯的回顾与反思。他从一个对盛大了解甚少的工程师视角切入,描述了创新院初创期(2010年前后)的独特氛围:独立的办公空间、平等的技术文化、温和的项目孵化机制,以及以院长“老郭”为代表的细致管理。文中生动刻画了“梁山好汉”般的团队群像和像“锦书”电子阅读器这样刻骨铭心的项目冲刺。 作者的核心观点在于,创新院初期的成功源于其“孵化”定位和宽松环境,但后期在规模扩张和集团战略介入后,逐渐转向“主导创新”,带来了更严格的项目管理和组织架构分化。他观察到,当创新背负明确短期压力时,其独立性与活力便难以维持。通过对比“万能钥匙”等小团队自发项目与后期各分院任务型项目的不同境遇,作者提出了对“创新”本质的思考:真正的创新常源自小团队的自主驱动,而非机构的规模化生产。 这段经历让作者深刻体会到时机、市场“范式升级”以及企业创新机制设计的复杂性。对于技术从业者而言,文章提供了一个观察大公司创新组织从孕育到演变的珍贵样本,也引发了关于如何在体制内保持创新活力的普遍性讨论。

本机暂存
IT DevOps/ 2014-12-08 23:51:03 / 累计浏览 2,011

丰田生产方式的启发

这篇讲的是,作者从对丰田生产方式(TPS)的学习中,提炼出对软件开发行业极具借鉴意义的几条核心原则。 文章指出,丰田方式最深刻的一点在于,生产线上的工人不仅负责执行,更被赋予理解、思考并持续改进工艺的责任和权力。这使得生产线本身充满了自下而上的优化活力。反观软件行业,许多团队仍将“改进”视为少数“技术牛人”的职责,而普通开发者可能只愿完成分配好的重复任务。 作者进一步阐述,丰田方式还要求每个员工必须了解自己工作的上下游,这既提升了协作效率,也增强了团队的应变能力。这恰恰戳中了软件开发中“过度专业分工”的痛点,例如程序员不懂运维、客服与技术部门沟通鸿沟,导致协作成本高昂。 此外,丰田将质量责任内化到每个生产环节,赋予每个工位为质量问题停线的权力,并用“五个为什么”深挖问题根因。这些原则被作者强烈主张应移植到软件开发中:产品经理、开发、测试、运维都应对最终产品质量负责,面对线上问题必须刨根问底,而非敷衍了事。 最后,丰田方式甚至要求机器具备错误自检和报警能力。作者联系自身经历,指出程序需要具备“健康运行”的自我监控能力,而不仅是完成功能。这些源自生产线的朴素智慧,其核心是“不把人当成机器的附庸”,对于追求质量和效率的任何行业,都值得深思。

本机暂存
IT 后端/ 2014-12-08 23:39:43 / 累计浏览 3,746

应用层的容错与分层设计

这篇讲的是分布式系统中,如何为应用层远程调用构建健壮容错体系的实践思考。文章从实际项目问题出发,指出系统内部服务间远程调用的不可靠性——无论是网络波动、硬件故障还是服务本身变慢,都可能像多米诺骨牌一样拖垮整个系统。单纯依赖服务端容错还不够,调用端(应用层)必须有独立的防御设计。 作者以微博团队的实践为例,分享了不同场景下的容错策略:访问MySQL时,写操作直接抛异常,读操作则有多级Failover;连接Redis或Memcached则需设置超时、异常标记、定期探测,并通过一致性哈希切换到备份节点;调用HTTP接口则要短超时、谨慎重试,并配合业务降级。 这些分散的实现暴露了问题:各客户端独立编码,原理相通却无法复用,维护成本高,且同步调用消耗大量线程资源。文章进而探讨了统一解决方案的可能性,参考了Twitter的Finagle框架思路——将容错、重试等策略抽象为“Filter”,与服务和Future模型结合,实现异步化的通用网络客户端。一个理想的统一client应该具备分层设计(服务层、网络层)、可扩展协议支持,并内置负载均衡、Failover等高可用能力,最终让开发者更专注于业务逻辑而非繁琐的容错细节。

本机暂存
IT 前端/ 2014-12-08 23:38:32 / 累计浏览 4,623

HTML6 初探 — 你没看错,是6不是5

HTML5已经很强大,但它真的实现了“语义化”的终极理想吗?这篇技术文章从一个有趣的假设出发:如果HTML能够直接支持这样的自定义标签,代码的可读性和语义表达会变得多么清晰。作者由此展望了可能到来的HTML6时代。 文章的核心对比点在于:HTML5虽然提供了

等结构标签,但其规范尚未最终定稿,且并非真正的语义标记语言。而HTML6若能引入XML式的命名空间(如),则可能允许开发者定义更具描述性的标签,让页面结构一目了然。文中提供了一段完整的HTML6概念代码,展示了如何用统一处理图片和视频,以及如何用等自定义标签组织页脚。 值得注意的是,作者明确指出这并非已发布的标准,而是对未来可能性的技术展望。对于想了解Web技术演进脉络的前端开发者而言,这篇文章提供了一个关于标记语言语义化未来的具体思考框架。

本机暂存
IT 后端/ 2014-12-08 23:23:54 / 累计浏览 3,634

使用valgrind的callgrind工具进行多线程性能分析

性能分析常让人头疼,尤其在多线程程序里找出瓶颈更不容易。这篇讲的是如何用开源的Valgrind套件中的Callgrind工具,来完成多线程程序的性能剖析。作者从实际命令出发,演示了从数据采集到图形化分析的完整流程。 核心步骤很清晰:先用`valgrind --tool=callgrind`运行目标程序生成分析文件。如果是多线程程序,加上`--separate-threads=yes`参数,就能为每个线程单独生成一份数据,比如`callgrind.out.31113-01`、`-02`等,便于逐个排查。采集到的数据再通过`gprof2dot.py`脚本转换成dot格式,最后用`dot`命令生成PNG调用图。 最终得到的图形能直观展示函数的调用关系和耗时分布,让性能热点一目了然。文章没有空谈理论,而是给出了可直接复制的命令和参数,对需要快速定位代码性能问题的开发者来说,是个实用且上手快的方案。

本机暂存
IT DevOps/ 2014-12-06 20:48:28 / 累计浏览 4,783

github 上 Fork 别人的项目后的常用的操作指南

作者从自己Fork Mojo项目的亲身经历说起,分享了在GitHub上协作开发时几个非常实用的操作。如果你Fork项目后直接push代码遇到403权限错误,文章指出了关键症结:需要在本地的.git/config文件中,将远程URL格式修改为包含你GitHub用户名的形式(如`https://用户名@github.com/用户/项目`),通过HTTP认证解决权限问题,无需折腾SSH密钥。 针对如何将修改贡献给原作者,文章详细演示了在GitHub界面发起Pull Request的流程。重点在于清晰地描述你的修改意图和内容,方便原作者理解和评估合并。 最后,文章解答了如何与上游原项目保持同步的问题。通过在本地添加原作者的远程仓库地址(git remote add),然后执行fetch和merge操作,即可将原项目的最新代码合并到自己的本地分支,之后再推送到自己的GitHub仓库。整篇文章聚焦于解决实际协作中的具体痛点,步骤清晰,对想参与开源项目的开发者来说是一份不错的入门指引。

本机暂存