IT技术博客大学习 共学习 共进步
首页 / 唐磊
IT 2016-02-10 22:46:37 / 累计浏览 2,140

jQuery Ajax请求下载文件资源

这篇文章解决了一个常见的前端困境:如何用jQuery Ajax处理需要根据情况返回JSON数据或文件下载的请求。作者从一个实际项目场景出发,发现单次Ajax请求难以同时满足这两种响应要求。 文章核心介绍了两种经过验证的“两次请求”解决方案。第一种方案,服务端逻辑保持不变,客户端在收到包含 `Content-Disposition: attachment` 头的响应后,动态构建一个隐藏表单并提交,从而触发浏览器的文件保存对话框。第二种方案则修改了服务端逻辑,首次请求只返回一个下载URL,再通过iframe或一个GET请求去获取实际文件。两种方案都成功实现了需求,但各有侧重:前者对服务端改动最小,但会带来一次多余的带宽开销;后者网络效率更高,但需要服务端提供额外的接口。 作者坦诚地分析了实现细节与权衡,并提供了完整的代码示例。对于正在寻找类似问题解决方案的开发者来说,这篇实践总结提供了清晰、可操作的参考路径。

IT 2015-01-24 23:16:57 / 累计浏览 3,200

围住神经猫 1步玩法-”作弊”

这篇讲的是如何通过“破解”微信分享机制,来实现游戏“围住神经猫”分享链接的“作弊”。作者从被朋友圈刷屏后自己试玩出发,发现分享链接的击败百分比与步骤数直接相关,于是产生了一个“纯娱乐”的技术念头:能否自己伪造一个分享页面,让好友看到夸张的“1步通关”战绩? 核心实现思路很直接:分享的只是一个网页URL,因此可以自己生成一个静态HTML页面,自定义页面的`title`(例如“我用了1步围住神经猫”),并引用原游戏的图片作为缩略图,以便微信抓取。关键的巧妙之处在于,为了不让好友点进这个“假”页面,利用浏览器`onload`事件直接通过`location.href`跳转到原游戏网址。 文章进一步深入,指出微信提供了更规范的分享JS-SDK。通过调用`WeixinJSBridge.invoke`接口,可以一站式设置缩略图、标题、描述以及跳转链接,使得这个“小恶作剧”的实现更加优雅和可控。作者附上了相关的JavaScript代码片段,展示了如何配置`shareTitle`和`link`等参数,为想了解微信网页分享机制的朋友提供了一个生动有趣的实现案例。

IT 2015-01-24 23:15:57 / 累计浏览 2,400

C++ 传参时传内置类型时用传值(pass by value)方式效率较高

这篇文章从《Effective C++》的经典条款出发,深入探讨了一个C++开发者常感困惑的问题:函数传参时,应该用传值(pass by value)还是传引用(pass by reference)?作者指出,这个选择并非一概而论,而是取决于参数的类型——文章特别对比了内置类型(如int、指针)与自定义类型之间的行为差异。 为了验证这一结论,文章提供了清晰的代码示例和关键的汇编代码对比。核心发现在于:对于int这类内置类型,传值(`int f(int i)`)编译生成的x86汇编指令更简洁,参数直接通过寄存器传递,效率最高;而传常量引用(`int g(const int &i)`)则多了一次内存间接访问的步骤,尽管微小但在极热路径上可能产生影响。文章也点明了反向情况:当面对存在构造与析构开销的自定义类型时,传引用才能避免不必要的复制成本。此外,STL中的迭代器与函数对象本质上是指针,因此遵循内置类型的规则。 作者通过这次代码级的验证,不仅重申了一个有效的实践准则,更通过底层视角加深了理解:效率的考量必须结合类型特性。这提醒我们,在追求代码“优雅”的同时,也不应忽视特定场景下符合硬件行为的朴素写法所带来的切实性能收益。

IT 2015-01-24 23:14:56 / 累计浏览 4,860

struct与class区别联系

这篇讲的是C和C++中`struct`这个看似相同的关键字,其实内核大不相同。作者开篇就指出了核心区别:C中的`struct`是“原生”的,仅仅用来将一组属性打包成一个整体,没有任何面向对象(OO)的特性。而C++中的`struct`则是在此基础上做了深度扩展,它完全兼容C的用法,但更重要的是具备了OO特性——事实上,C++中`class`能干的事情,`struct`几乎都能干,包括继承和多态。 文章通过一个直观的代码示例验证了这一点:如果在纯C环境下(例如用GCC的C模式编译),在`struct`内部直接定义成员函数会导致编译报错;但同样的代码在C++中则毫无问题。这生动地说明了“原生”与“扩展”的差异。 那么,在C++中`struct`和`class`到底还有何区别?唯一的、关键的不同在于默认的访问权限:`struct`默认是`public`,而`class`默认是`private`。这个细微差别决定了代码风格和设计意图。通常,我们用`struct`来封装纯数据的聚合体,而用`class`来定义那些需要隐藏实现细节、提供接口的抽象数据类型。这篇小文通过对比和代码解析,清晰地帮你厘清了这个C++程序员常会遇到的疑惑。