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

最新文章

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

IT 移动开发/ 2016-04-02 13:37:47 / 累计浏览 3,064

Android注解式绑定控件,没你想象的那么难

这篇讲的是如何用注解告别Android开发中繁琐的控件绑定。作者从大家熟悉的 `findViewById` 方法切入,直接点出它的痛点:方法名冗长、需要强制类型转换,随着布局复杂,初始化代码很容易变得冗余又影响可读性。 文章随后以KJFrameForAndroid框架为例,展示了如何通过自定义注解 `BindView` 来优雅地解决这个问题。核心思路很清晰:定义一个注解类,包含 `id` 和 `click` 两个属性,用于声明控件ID和点击事件。开发者只需在字段上方添加 `@BindView` 注解,一行代码就能完成绑定。 更关键的是注解的处理部分。作者解释了利用Java反射机制,在运行时遍历类的所有字段,读取 `BindView` 注解中的值,最后通过 `findViewById` 完成实际绑定。这种“声明式”的编码方式,让视图绑定变得直观且简洁,有效减少了样板代码,也让Activity的代码结构更干净。

本机暂存
IT 前端/ 2016-04-02 13:27:57 / 累计浏览 1,664

前端开发者不得不知的ES6十大特性

这篇文章从ES6的发展历史讲起,旨在为前端开发者提供一份清晰的ES6入门指南。作者精选了十大核心特性进行解析,涵盖了从代码简化到模块化工程的方方面面。 摘要直接切入重点,介绍了默认参数、模板字符串、多行字符串、解构赋值、箭头函数等关键特性。通过与ES5中繁琐写法的直观对比,生动展示了ES6语法如何让代码更简洁、更易读。例如,模板字符串告别了字符串拼接,箭头函数让回调更轻量,而解构赋值则能直接从对象或数组中提取值。 文章还提及了Promises、Let/Const、类与模块等特性,这些特性共同解决了异步处理、作用域污染和代码组织等实际问题。全文旨在帮助前端开发者快速把握这些核心新特性,提升开发效率和代码质量。

本机暂存
IT 前端/ 2016-04-02 13:25:37 / 累计浏览 1,945

utf-8页面form提交到gb2312页面编码的问题

这篇讲的是一个在多编码页面交互时常见的“坑”:UTF-8页面中的表单,通过GET方式提交到另一个UTF-8页面进行处理后,再将参数传给编码为GB2312的iframe页面,结果数据变成乱码。作者明确这是编码转换不一致导致的问题。 在尝试了用VBScript处理(不跨浏览器)和嵌套空白页提交(过于繁琐)等方案后,文章推荐了一个非常简洁有效的解决方法。核心是利用了HTML表单一个不太常用的属性:`accept-charset`。只需在表单标签中加入`accept-charset="gb2312"`(若提交到UTF-8页面则反之),即可告知浏览器按指定编码提交表单数据。 不过,针对IE浏览器的特殊性,作者还补充了一个关键的Hack:需要在`onsubmit`事件中添加`document.charset='gb2312'`。这样,仅仅几行代码,就能让不同编码的页面间正确传递表单参数,避免乱码。

本机暂存
IT 移动开发/ 2016-04-02 13:23:15 / 累计浏览 2,143

Android EditText的使用及值得注意的地方

这篇讲的是Android开发中EditText组件的实战技巧与避坑指南。作者从实际开发经验出发,系统梳理了与EditText和输入法交互的多个关键细节。 文章核心围绕如何提升输入体验展开,提供了具体可操作的代码方案。例如,如何通过`setInputType`为不同应用场景(如词典与单词应用)设置默认的中英文输入状态;如何利用`InputMethodManager`手动控制输入法的弹出与隐藏,以配合搜索流程或响应其他窗口事件;以及如何通过`TextWatcher`监听输入内容变化,实现实时字数提示或搜索建议。 此外,文章还涉及了交互细节的优化,比如通过监听按键事件处理输入法回车按钮的确认功能,使用`setImeOptions`自定义回车按钮的文案(如“搜索”或“发送”),以及通过自定义`InputFilter`来限制用户只能输入特定字符(如纯英文或纯中文)。 这些内容覆盖了从基础设置到进阶控制的完整链条,为开发者提供了处理EditText常见场景的实用工具箱,有助于写出更健壮、更符合用户直觉的输入界面。

本机暂存
IT 前端/ 2016-04-02 13:19:08 / 累计浏览 970

React 的骨架 JSX

这篇讲的是 React 的骨架——JSX。作者从 Facebook 提出 JSX 的初衷出发,解释了在组件化开发中,直接将 HTML 结构写在 JavaScript 中会面临的结构行为分离、字符串拼接繁琐、模板引入复杂等痛点,而 JSX 正是为了优雅地解决这些问题。 文章清晰地梳理了 JSX 的核心语法与规则:标签名首字母小写代表 HTML 元素,大写则代表自定义组件,每个 JSX 表达式都必须有且只有一个根节点。我们可以用花括号 `{}` 在其中直接插入 JavaScript 变量或单行表达式,比如用三元运算符处理条件渲染。 此外,文章还深入讲解了几个实用细节:如何处理 `class`、`for` 等关键字冲突;理解 `false` 在不同上下文下的渲染行为;以及如何将样式定义为 JavaScript 对象进行内联,从而实现组件的高内聚和独立性。最后,通过命名空间的示例,展示了如何用 JSX 构建层次更清晰的组件树。对于想理解 React 基础理念的开发者来说,这篇文章把 JSX 这个语法糖的来龙去脉和关键要点都讲透了。

本机暂存
IT 前端/ 2016-04-02 13:18:32 / 累计浏览 2,838

好用的CSS模块化打包工具CSS-Combo

这篇讲的是如何用一个轻量工具解决CSS开发中的模块化管理难题。作者从团队实践出发,指出CSS开发长期缺乏像JS那样成熟的模块化方案,导致大型项目样式文件臃肿、维护困难。 核心思路是利用CSS原生的`@import`语法。在开发时,将样式拆分成多个子模块文件(如`header.css`、`layout.css`),然后在一个主入口文件中按需引入。这种方式浏览器直接支持,方便本地调试和团队协作,模块职责清晰,增删功能也只需注释掉对应的`@import`行。 不过,直接使用`@import`会导致线上性能问题(如请求过多)。因此,作者开发了配套的NodeJS工具 **CSS-Combo**。开发者在上线前运行简单命令,即可将所有通过`@import`引入的模块合并、压缩成一个CSS文件,兼顾了开发时的灵活性与上线时的性能。 文章还分享了利用此模块化方案进行线上调试的技巧(如通过URL参数切换源码与打包文件),以及关于`@import`语法规则的最佳实践。对于仍不习惯使用LESS/SASS等预处理器的团队,这是一种原生、直接的CSS模块化与打包解决方案。

本机暂存
IT 前端/ 2016-04-02 13:17:52 / 累计浏览 1,327

初探 React 组件

这篇讲的是 React 组件开发的核心概念。作者从一个简单的下拉菜单(Dropdown)组件切入,展示了如何用 React 的方式构建一个可交互的 UI 模块。 文章清晰地拆解了构成独立组件的三个关键部分:首先是 `state`,它就像组件内部的状态机,用于管理组件自身的可变数据(比如菜单的展开/收起)。通过 `this.setState` 更新状态,React 会自动重绘视图,让你告别直接操作 DOM 的繁琐。 其次是 `props`,它是组件与外界沟通的桥梁。父组件可以通过它向子组件传递数据,从而让 Dropdown 变得通用。文章还提到了利用 `propTypes` 进行数据类型校验,以增强应用的健壮性。最后,文章简要提及了 React 基于 W3C 标准封装的事件系统,保证了跨浏览器的兼容性。 整篇文章配合代码示例,生动地体现了 React “状态驱动视图”和“组件独立封装”的思想。对于刚开始接触 React 的开发者来说,这是一次非常扎实的组件化概念入门。

本机暂存
IT 移动开发/ 2016-04-02 13:16:32 / 累计浏览 1,993

移动端测试的代理服务器搭建

这篇讲的是在Unix/Linux环境下,如何用开源工具Squid为移动端测试搭建代理服务器。文章从实际场景出发:移动设备需要调试或访问局域网内某台主机上的本地服务,直接访问不通,就需要一个中间代理来转发请求。 作者以CentOS系统为例,完整梳理了从安装到配置的全流程。关键步骤包括:禁用Squid默认的缓存机制(避免干扰测试)、设置必要的主机名、开放访问权限以及指定代理端口。文章还细心地提醒了日志文件管理的必要性,提供了两种日志清理方案,一个是用crontab定时任务粗暴清空,另一个是使用Squid自带的日志滚动功能。 最终,移动端只需在Wi-Fi的HTTP代理设置中,填入服务器IP和配置的端口,就能顺利访问到目标本地服务。整个方案实用且具体,对于在Linux环境下进行移动端开发测试的工程师来说,是一个清晰可复现的搭建指南。

本机暂存
IT 后端/ 2016-04-02 13:15:20 / 累计浏览 839

从启用 HTTP/2 导致网站无法访问说起

这篇讲的是网站升级到 HTTP/2 后反而无法访问的典型案例。作者从朋友遇到的具体故障出发——启用 HTTP/2 后 Chrome 报「ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY」错误,Firefox 直接中断请求,而关闭 HTTP/2 则一切正常。 问题的根源在于 HTTP/2 协议对 TLS 有更严格的安全限制。它强制要求使用 TLSv1.2 或更高版本,并禁用了一大批在旧协议中可用的加密套件(CipherSuite)。当服务端配置的 CipherSuite 列表被包含在 HTTP/2 的黑名单中时,浏览器在 TLS 握手阶段就会直接终止连接,导致页面无法加载。文章通过 Wireshark 抓包和具体的 Nginx 配置示例,清晰地展示了这一协商失败的过程。 对于遇到类似问题的开发者,这篇不仅提供了调整 CipherSuite 配置的直接解法,更重要的是梳理了从现象到本质的排查思路,值得参考。

本机暂存
IT 移动开发/ 2016-04-02 13:08:32 / 累计浏览 2,951

菜鸟不要怕,看一眼,你就会用GCD,带你装逼带你飞

这篇讲的是iOS开发中GCD多线程技术的入门实战指南,作者没有堆砌理论,而是从最常用的队列概念切入,手把手教初学者正确使用。文章核心对比了串行队列与并发队列:前者任务按顺序执行,后者则能同时处理多个任务互不阻塞——通过简单的代码和清晰的线程日志输出,直观展示了两者的关键差异。接着介绍了系统预置的Global Queue(并发)与Main Queue(串行主线程)的协作模式,这是日常开发中最常见的“异步操作后回调主线程”范式。此外,作者还详细演示了如何通过dispatch_set_target_queue为自定义队列设置优先级,以及用dispatch_after实现主线程延迟操作,并解释了这些方法与RunLoop的关系。全文通过可运行的代码片段和真实的输出结果,让读者能迅速理解GCD各组件的工作机制与适用场景。

本机暂存
IT 移动开发/ 2016-04-02 12:56:48 / 累计浏览 3,316

Android流式布局实现

这篇讲的是如何从零开始,动手实现一个Android中常见的“流式布局”(也叫标签换行布局)。作者从实际项目需求出发,聚焦于自定义ViewGroup的两个核心回调:onMeasure()和onLayout()。 摘要里重点揭示了实现的关键:在onMeasure()阶段,需要遍历所有子控件,测量它们的宽高,并以此计算出控件自身需要的总高度。而在onLayout()阶段,则根据测量结果,逐个确定每个子控件的摆放位置。最核心的逻辑在于:程序会持续累加当前行子控件的宽度,一旦发现加上下一个子控件后会超出父控件的宽度,就会触发换行操作,将下一个子控件放到下一行的起始位置。 整个实现过程清晰展示了ViewGroup如何协调测量与布局来完成复杂的子控件排列。通过理解这段代码,开发者能掌握自定义布局的基本原理,为实现更灵活的UI控件打下基础。

本机暂存
IT 开发者/ 2016-04-02 12:53:14 / 累计浏览 3,732

聊聊 Apache 开源协议

作者从一次开源项目疏于声明版权的小插曲谈起,引出了对 Apache 开源协议的讨论。文章首先用几句话精准概括了 Apache License 的核心:你可以自由使用、修改代码,但若进行开源分发,必须保留原始版权声明并清晰标注改动部分;你甚至可以附加新条款,但前提是与原协议不冲突。 接着,文章将 Apache 协议与社区常见的 MIT、GPL 协议进行了对比。一个关键区别在于,Apache 协议允许衍生作品在特定条件下保持闭源,这与 GPL 的“传染性”(即使用了 GPL 代码的衍生作品也必须开源)形成鲜明对比。作者指出,这正是 Android 系统选择 Apache 协议的主要原因——它允许硬件厂商提供闭源的驱动程序,从而在商业与开源之间找到了一个平衡点。 文中还提到了作者亲自翻译 Apache 协议原文的工作,为读者提供了直接阅读理解的便利。整个讲解结合了具体案例和协议条款,把枯燥的法律文本讲得清晰易懂。

本机暂存
IT 移动开发/ 2016-03-31 22:23:20 / 累计浏览 2,669

EventBus 源码解析

这篇深度技术文章剖析了Android开发者常用的事件总线框架EventBus的内部工作原理。作者从Event、Subscriber、Publisher这些核心概念入手,逐步解析了EventBus的注册订阅与事件分发机制。 文章通过清晰的类关系图和核心类功能介绍,揭示了EventBus内部如何通过subscriptionsByEventType这个核心数据结构,高效地实现事件到订阅者的匹配。同时,详细说明了post事件后,EventBus如何根据订阅者声明的ThreadMode(如PostThread、MainThread、BackgroundThread、Async),智能地决定是在当前线程、主线程还是异步线程中执行事件处理函数,确保了线程安全。 对于想深入理解Android消息机制和组件解耦实践的开发者,这篇文章提供了一个关于如何设计一个优雅、高效的发布-订阅系统的清晰实现思路。

本机暂存
IT 移动开发/ 2016-03-31 22:20:49 / 累计浏览 3,242

Android应用内多进程的使用及注意事项

这篇讲的是 Android 应用内为何以及如何使用多进程。作者从解决主进程内存压力问题出发,指出当应用处理大图片或频繁绘制时容易 OOM,仅靠 `largeHeap` 增加堆内存只是权宜之计,会影响整机效率。因此,引入了多进程方案:通过在 AndroidManifest.xml 中为组件设置 `android:process` 属性,将特定页面(如视频播放)放入独立进程,以分担主进程内存压力。 文章重点分析了使用多进程后会遇到的“坑”。由于每个进程拥有独立的内存空间,会导致三大核心问题:一是断点调试失效,堆栈不连续,通常需要临时移除 `process` 属性来调试;二是 Activity 管理逻辑(如通过 LinkedList 全局退出应用)失效,因为每个进程会独立运行 Application 的 onCreate;三是进程间无法共享内存,通信和数据共享必须借助 Bundle、AIDL 或文件等跨进程机制。 文章最后指出,虽然多进程能缓解内存问题,但这是一种“下下策”,根本之道还是在于做好应用的性能优化。

本机暂存
IT 移动开发/ 2016-03-30 16:03:47 / 累计浏览 1,417

React Native for Android Windows环境搭建

这篇讲的是在Windows系统上从零搭建React Native Android开发环境的完整流程。作者从安装JDK、Android Studio和Node.js等基础工具开始,详细说明了通过npm安装react-native-cli的正确命令,并特别指出直接安装react-native可能导致后续init项目报错。 文中不仅列出了步骤,还穿插了常见问题的解决方案,例如升级Node版本以应对npm安装失败,或设置环境变量来修复命令识别错误。在安卓环境配置部分,强调了检查SDK完整性的重要性,并附有截图指引。 最后,文章通过创建HelloWorld和HelloAndroid两个项目,演示了从运行构建命令到配置设备调试的全过程。特别是解决了React Native经典红色报错页面的方法——启动本地服务器后,通过摇晃手机配置调试服务器地址(如192.168.x.x:8081)并Reload JS,即可成功加载应用。对于想在PC上快速上手React Native移动开发的读者,这是一份非常实用的避坑指南。

本机暂存
IT 前端/ 2016-03-30 16:01:23 / 累计浏览 1,142

javascript动画剖析

这篇讲的是作者从重构自己的JavaScript动画框架easyAnim出发,深入剖析了JavaScript动画背后的底层原理和实现思路。 文章先拆解了动画运行的核心机制:如何将CSS属性值字符串解析为数值与单位,并基于总距离、总时间和时间比公式计算出每一帧的精确位置。作者特别提到了帧率(fps)的选择,对比了主流框架(如jQuery设置13ms间隔,约75fps)与他自己设定为16ms(约60fps)的考量,这是平衡流畅度与性能的关键。 在实现层面,文章梳理了两种常用的缓动(tween)函数风格:flash流派的多参数函数与prototype流派简洁的单参数时间比函数。后者因为封装更好,被作者以及新版jQuery和YUI3所采用。此外,文章还通过伪代码讲解了如何用队列数组和“running”标志来编排多个动画的顺序执行,确保复杂动画效果的有序进行。 最后,作者点出掌握了这套“解析-计算-缓动”的流程,就能轻松扩展动画能力,比如实现颜色、阴影等更多属性的动画。整体上,文章将动画实现拆解为可复用的模块,思路清晰,对想深入理解前端动画原理的开发者很有参考价值。

本机暂存
IT 安全/ 2016-03-30 16:00:26 / 累计浏览 3,188

wordpress/nginx安全设置

这篇讲的是如何给WordPress博客加固登录安全,作者从两个实战层面入手:插件增强认证与通信链路加密。 首先,文章详细演示了如何通过Google Authenticator插件为WordPress登录添加双重验证。这类似于谷歌账户的“两步验证”,原理是在密码之外,增加一道由手机App动态生成的验证码,能有效防范密码泄露风险。作者还梳理了其他类似安全插件,如一次性密码、IP锁定等,提供了更全面的选择思路。 其次,更进阶的一步是配置Nginx反向代理下的SSL(HTTPS)登录。作者不仅说明了如何在WordPress配置文件中启用强制SSL,还提供了从生成自签名证书到编写完整Nginx配置的全过程。过程中特别指出了一个典型坑点:Nginx配置不当会导致后台CSS文件的MIME类型错误,并给出了具体的修正配置,这部分对实际操作很有参考价值。 整个方案从认证加固到传输加密,层层递进,解决的是WordPress站点常见的登录安全隐患,过程细节扎实,踩坑点清晰。

本机暂存
IT 前端/ 2016-03-30 15:59:32 / 累计浏览 2,052

AJAX页面状态保持

这篇讲的是如何在AJAX驱动的单页应用中保持页面状态,解决刷新后页面重置、无法分享特定状态的问题。作者从传统多页应用的状态管理切入,对比了两种主要思路:一种是传统URL参数(如`?s=abc&id=23&page=3`),刷新会重新请求页面;另一种是利用URL的hash部分(如`#s=abc&id=23&page=4`),修改hash不会触发页面重载。 文章详细分析了hash方法的实现细节与兼容性挑战。早期方案通过定时器轮询检测hash变化,简单但有延迟;HTML5标准引入了`hashchange`事件,能实时响应hash更改,主流浏览器如Firefox 3.6、IE8、Chrome等均已支持,但IE6/7及IE8兼容模式仍需特殊处理——例如用隐藏iframe同步hash来维护历史记录。文中还以Gmail为例,说明大型应用如何实践状态保持,并提及RSH、History Framework等专用库。 通过对比,可以看出:传统URL参数适合需完整刷新或SEO的场景;hash方法更适合追求流畅体验的SPA,但开发者必须针对不同浏览器做降级处理。文章梳理了从轮询监听到事件驱动的技术演进,为处理前端状态管理提供了清晰的路径选择。

本机暂存
IT 后端/ 2016-03-30 15:57:09 / 累计浏览 2,303

PHP扩展内如何定义类、方法?

这篇讲的是PHP扩展开发中的核心操作——如何在C语言层面定义一个PHP类。作者从PHP类的底层数据结构`zend_class_entry`入手,解释了这个结构体如何容纳类名、方法表、属性以及各类魔术方法。 文章的核心思路是,首先声明一个类入口指针(通常命名为`xxx_ce`),然后在模块初始化阶段(`PHP_MINIT_FUNCTION`)完成类的注册。具体步骤包括:声明方法实现、通过`zend_function_entry`数组绑定方法到类,最后调用`INIT_CLASS_ENTRY`和`zend_register_internal_class`完成类的注册。作者还分享了一个实用技巧:把类入口定义放在文件靠前位置,便于后续代码引用。 整篇文章从底层结构到具体实现代码,完整演示了从零开始在PHP扩展中“创建”一个类的过程。对于需要编写PHP扩展的开发者来说,这清晰地揭示了PHP面向对象特性在底层的实现起点。

本机暂存
IT 前端/ 2016-03-30 13:59:30 / 累计浏览 2,808

CSS Gradient详解

这篇文章讲的是如何用 CSS Gradient 优雅地实现背景渐变效果,解决设计师交付的几十KB渐变背景图带来的性能问题。作者从现代浏览器的兼容性现状切入,指出虽然三种历史语法很复杂,但重点掌握最新的标准语法已能覆盖主流环境,并提供了纯色降级方案来兼容老旧浏览器。 文章系统地拆解了渐变的核心概念。它明确了 Gradient 本质是一种由浏览器生成的图片(image),因此可以应用在背景、列表样式等多种场景。针对最重要的线性渐变(linear-gradient),详细说明了两个关键参数:一是通过角度(如90deg)或关键词(如to right)定义方向;二是颜色断点(color-stop)的精确设置,包括其位置省略时的均值分配规则。 更难得的是,文章深入到了浏览器绘制的底层原理——解释了渐变线(gradient line)如何根据元素尺寸和指定角度通过几何计算生成。最后作者强调,理解这些原理能帮助前端开发者在还原设计稿时做到心中有数,而不仅仅是凭感觉试错。整篇文章从实用技巧到实现原理都覆盖得扎实清晰。

本机暂存