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

最新文章

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

IT DevOps/ 2016-03-23 15:26:20 / 累计浏览 5,566

给树莓派安装ArchLinux

这篇文章解决了一个实际问题:当树莓派官网不再提供ArchLinux镜像下载后,如何手动将这个轻量高效的系统安装到SD卡上。作者从ArchLinux的设计理念——简单、轻量、高性能——出发,解释了它为何特别适合树莓派这类嵌入式环境。 核心方案是一套清晰的命令行安装流程。文章从下载对应型号的ARM版系统包开始,逐步讲解了如何使用fdisk为SD卡创建boot和root两个分区,分别格式化为FAT32和ext4文件系统,然后将解压的系统文件移动到正确位置。其中特别强调了将设备名“sdX”替换为实际编号的操作细节,并提供了root和alarm用户的默认登录信息。 整个过程虽然比直接写入镜像稍显繁琐,但能更合理地利用SD卡空间,为后续在树莓派上发挥ArchLinux的扩展性和性能优势打下干净的基础。

本机暂存
IT 后端/ 2016-03-23 15:17:17 / 累计浏览 2,209

PHP empty和isset源码分析

作者从一个具体的PHP问题出发:`empty('00')` 到底返回 `true` 还是 `false`?他原本猜测 `empty()` 会将字符串 `'00'` 转换成数字进行判断,但觉得又不对。为了验证,他决定直接从源码一探究竟。 文章跟随作者的思路,首先发现 `empty()` 和 `isset()` 在操作码层面都调用了同一个函数 `ISSET_ISEMPTY_VAR`。顺藤摸瓜,最终定位到实际执行判断的核心函数是 `i_zend_is_true()`。 通过阅读这段精炼的源码,作者得出了明确的结论:`empty()` 在判断时并没有进行类型转换。对于字符串,它的判断逻辑非常直接——先检查字符串长度是否为0(即空字符串),若不是,则进一步检查是否长度为1且唯一字符为 `'0'`。只有这两种情况才会返回“空”(`true`),否则都返回非空(`false`)。 因此,对于 `'00'` 这样长度为2的字符串,它不满足上述任一条件,所以 `empty('00')` 的结果就是 `false`。而 `isset()` 则更简单,在变量未赋值时就直接返回了,根本不会走到这个判断逻辑。这个源码级的分析,清晰地解答了最初的那个疑问。

本机暂存
IT 移动开发/ 2016-03-23 15:02:45 / 累计浏览 4,159

Android最方便的推送框架

这篇讲的是如何打造一个对Android开发者更友好的推送库,目标是让一个人就能完成推送功能的集成,摆脱对复杂服务器端配合和漫长测试的依赖。作者从现有推送方案的痛点出发,深入剖析了Push与Pull两种模式的底层原理、适用场景及资源消耗差异。他选择基于轮询(Pull)模式来实现,并指出了直接使用定时器可能带来的系统回收风险,转而采用AlarmManager来更稳健地调度任务。文章的核心不仅在于代码实现,更在于一套完整的优化策略:根据网络状态动态调整轮询频率,在屏幕熄灭后适时停止请求以节省电量与流量,并探讨了如何让后台服务更持久地存活,尽管在面对某些定制化系统时仍存在挑战。作者最后坦诚分享了在服务持久化问题上的探索与局限,为同样面临此难题的开发者提供了思路。

本机暂存
IT 移动开发/ 2016-03-23 14:27:18 / 累计浏览 2,198

Android设置应用内文字的默认颜色和大小

这篇文章解决了一个 Android 开发中常见的主题适配问题:当未显式设置 TextView 或 Button 的文字颜色时,切换应用主题会导致文字颜色意外改变;另外,若想调整 Toast 的文字大小,通常需要重写其内部实现,颇为繁琐。 作者从 Android 主题继承机制出发,提出了一种简洁的方案:在项目的 `styles.xml` 中为应用主题(如 `AppTheme`)直接定义 `android:textSize` 和 `android:textColor` 属性,并在 `AndroidManifest.xml` 中引用该主题。这样,所有未单独设置文字样式属性的 View,都会自动继承主题中指定的颜色和大小,包括 Toast。 这个方案的核心在于利用主题的全局覆盖特性,以最小代码成本统一了应用内文字的默认视觉表现,避免了在每个 View 上重复定义或处理意外的主题变更。需要注意的是,该设置仅作为默认值生效,如果某个 View 已经通过代码或 XML 明确指定了文字颜色或大小,将优先采用其自身设置。

本机暂存
IT 移动开发/ 2016-03-23 13:54:21 / 累计浏览 2,102

提升进入界面的速度

这篇讲的是如何让Android应用的界面跳转变得更流畅。作者从一次实际的APP优化项目出发,指出一个常见的性能痛点:点开一个新页面却要等上几百毫秒,这种迟滞感虽然不会触发异常,却严重影响用户体验。 文章的核心方案非常清晰,即针对Activity生命周期中耗时的onPause和onCreate阶段进行优化。作者总结了四个具体的优化方向:对IO等耗时任务使用AsyncTask或Handler进行异步处理;精简布局文件层级,并对非首屏视图大胆使用ViewStub进行延迟加载;将动画、特定字体等资源初始化推迟到真正需要时;以及谨慎使用应用内多进程,因为进程创建本身就很耗时。 文章特别强调了两个容易踩坑的地方:一是像AnimationDrawable这样的资源既耗时又耗内存,初始化时机至关重要;二是不要迷信通用技巧,一切优化都要以实际测量数据为准。最终,持续的性能度量与分析,是保证界面流畅体验的关键。

本机暂存
IT 移动开发/ 2016-03-23 13:52:50 / 累计浏览 1,572

Android各个Support Library介绍

这篇系统梳理了Android开发中不可或缺的Support Library。它开篇厘清了主工程、依赖包与android.jar的关系,解释了为何需要将新API封装成独立支持库——以便在不更新系统的情况下,让低版本设备也能用上高版本功能。 文章的核心是逐一介绍了从V4到V17的各个支持库。V4库最为基础和关键,它为Android 1.6及以上系统带来了Fragment、ViewPager、NotificationCompat等组件。V7库则针对Android 2.1及以上系统细分出多个模块,其中appcompat库让低版本实现Holo风格界面,而RecyclerView、CardView、Palette等库则提供了更现代的UI组件和功能。此外,还介绍了用于解决方法数超限的Multidex库、针对电视设备的v17 Leanback库,以及支持百分比布局的Percent库等。 对于开发者而言,这篇文章像一份清晰的地图,明确了在不同API Level需求下应该选择哪个支持库,以及每个库的核心能力,帮助解决碎片化兼容难题。

本机暂存
IT 安全/ 2016-03-23 13:50:31 / 累计浏览 3,527

小心浏览器插件窃取你的隐私

这篇讲的是一个关于浏览器插件隐私安全的踩坑经历。作者发现,自己使用了一年多的知名鼠标手势插件 crxMouse Chrome Gestures,竟然在后台窃取用户的浏览历史。 问题如何发现呢?作者通过 Wireshark 抓包,发现该插件持续向外部服务器(如 s808.searchelper.com)发送加密的 POST 请求。解密后可以看到,请求中携带了当前页面的 URL、来源页面(Referrer)乃至内网地址等敏感信息,这意味着用户的浏览轨迹被完整记录并外传。 深入分析其 JavaScript 代码后,作者找到了根源:插件在初始化时生成了用户ID,并在多个浏览器事件(如标签页更新、切换)触发时,调用监听函数将数据经双重 Base64 编码后发送出去。这种隐蔽的实现,使得普通用户很难察觉。 最终,作者卸载了这款插件,并在应用商店更换了其他同类工具。他的结论是,虽然开发者盈利不易,但窃取隐私的行为必须抵制。这个案例提醒我们,对于浏览器插件这类拥有较高权限的工具,需要多一份审视和警惕。

本机暂存
IT 移动开发/ 2016-03-23 13:49:01 / 累计浏览 3,989

移动端网络优化

这篇讲的是如何系统优化移动端的网络请求性能,覆盖 Android、iOS 和 H5。作者将整个过程拆解为连接服务器和获取数据两个阶段,并针对每个阶段提出了具体可行的优化策略。 在连接阶段,文章重点介绍了跳过 DNS 解析的 IP 直连方案,以及通过服务器多地域、多运营商部署来缩短物理链路距离。在数据获取阶段,则详细拆解了从开启 Keep-Alive 复用连接、合并请求,到对请求和响应数据进行 Gzip 压缩、使用更精简的格式(如 JSON 替代 XML、WebP 替代传统图片)等一系列手段。此外,文章还探讨了利用 CDN 缓存、实施增量更新与断点续传等高级策略。 除了这些核心方案,文中也提到了预取、分优先级延迟请求以及多连接等补充优化思路,并强调了数据监控在验证优化效果中的必要性。整篇文章从原理到实践,为开发者梳理了一套从客户端到服务端的移动端网络性能调优实用指南。

本机暂存
IT 安全/ 2016-03-23 13:47:39 / 累计浏览 4,591

在Mac上删除Google的流氓软件

这篇讲的是Mac用户可能从未留意过的一个隐蔽问题——谷歌的自动更新代理(GoogleSoftwareUpdateAgent)会在后台静默运行,即便你的电脑上没有安装任何谷歌软件。作者从Mac的Console系统日志入手,展示了该进程如何定期执行更新检查,并通过一行Terminal命令教会读者如何自查是否已被“感染”。 问题的核心在于,谷歌的这个组件会随某些应用静默安装,并常驻系统后台。对于注重隐私和系统洁净度的用户而言,这种不请自来的常驻服务无疑是一种困扰。文章不仅揭示了现象,更给出了直接、有效的终端卸载命令,帮助用户彻底移除这个“不速之客”。 通过这个具体案例,文章提醒我们:一些主流软件的附属组件可能会在用户不知情下获得系统权限并持续运行。定期审视系统后台进程,是维护电脑健康的一个好习惯。

本机暂存
IT 数据库/ 2016-03-22 23:03:24 / 累计浏览 2,417

MySQL安全策略

这篇讲的是MySQL在关键业务中如何确保数据安全,作者指出单靠数据库应用层面远不够,必须构建从网络、系统到逻辑层的多维度防御体系。 文章详细拆解了四个层面的实操策略。在最基础的网络与系统层,建议包括将MySQL服务器严格限制在内网、设置防火墙白名单、修改默认端口与密码策略,以及将操作日志集中远传。在逻辑应用层,重点在于防范XSS、SQL注入等常见攻击,并对数据库连接凭据进行加密处理。而在MySQL数据库层,文章提出启用safe-update防止误删、延长binlog保存期以便审计、精细划分账户权限(如用UPDATE替代DELETE),以及利用触发器和审计插件进行防护。 最后作者强调,真正的安全是技术机制与全员安全意识的结合。这些建议具体可落地,涵盖了从基础加固到纵深防御的多个关键点,为企业制定自身安全规范提供了清晰的检查清单。

本机暂存
IT 移动开发/ 2016-03-22 22:46:00 / 累计浏览 1,291

快速决策方案 —— Airtrack

这篇讲的是原生应用如何找回“唯快不破”的决策节奏。在Native App上,动态化能力弱导致产品决策验证周期长,团队容易陷入追求“不出错”而忽略“有意义”的困境。为此,天猫团队打造了名为AirTrack的试错平台。 平台的核心是一套以A/B测试为基础、可在端上实时运行的SDK。它通过一个可动态配置的“实验条件树”来决定分桶逻辑,并支持数据埋点与分析。这种设计绕过了依赖后端数据API的传统模式,实现了代码级的、灵活的端上实验。 文章分享了三个实际应用:用于配置安全发布的灰度策略,将原本跨版本的首页坑位优化决策缩短到一周内完成的对比测试,以及实现个性化弹窗的创新玩法。这套体系帮助团队能够快速验证想法并及时修正,让应用开发重新灵动起来。

本机暂存
IT 移动开发/ 2016-03-22 22:36:06 / 累计浏览 2,126

Android夜间模式实现

这篇讲的是如何利用Android的Theme机制,相对简单地实现夜间模式切换。作者从一个实际需求出发,通过一个小Demo演示了核心步骤。 核心思路是先在`res/values`中定义自己的属性名(比如背景色),然后为日间和夜间模式分别创建主题样式文件,为这些属性赋予不同的值。在布局文件中,控件通过`?attr/属性名`来引用这些值,而不是直接写死颜色。 实现动态切换的关键在于代码逻辑:在Activity中通过`setTheme()`方法切换主题,并且一定要在调用`setContentView()`之前执行。对于已经显示的界面,作者提供了一个简洁的刷新方法:直接调用`recreate()`重建Activity即可应用新主题,省去了手动重设所有视图的麻烦。 文章没有堆砌理论,而是聚焦于“定义属性 -> 创建主题 -> 引用属性 -> 动态切换”这条实用路径。最后也提醒了几个实现细节,比如自定义主题必须继承系统Theme以避免报错,确保切换过程流畅。

本机暂存
IT 移动开发/ 2016-03-22 22:20:57 / 累计浏览 1,454

Android APP内存优化之图片优化

这篇讲的是作者在开发一款小学教育APP时,面对高分辨率设备上图片内存占用过大的实际挑战。在2K屏(2048×1536)上,单张背景图就能消耗12MB内存,频繁切换页面导致内存飙升至百兆级别。文章聚焦于这一痛点,分享了几项针对性的图片内存优化实践。 作者首先发现一个容易被忽视的细节:为Button设置selector背景会同时加载正常与按下两张图片,导致内存占用翻倍。解决方案是通过监听触摸事件动态切换背景,或使用setColorFilter实现反选效果,既节省内存也减小APK体积。其次,针对绘制大背景图时的界面卡顿问题,作者提出将背景绘制任务移至非UI线程,通过自定义的RootSurfaceView在SurfaceFlinger中完成渲染,从而避免阻塞主线程,提升了APP的流畅度。 这些方法均源于实际项目中的摸索,虽未深入底层原理,但提供了清晰、可落地的优化思路,特别适合处理图片密集型应用的内存与性能平衡问题。

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

Android性能测试工具列表

这篇文章系统梳理了Android开发中从启动、内存到帧率检测的各类性能工具。它不只罗列名称,而是解释了每个工具的核心用途和适用场景。 比如,通过adb命令行可以精确测量应用冷启动时间,其中“thisTime”仅反映当前Activity启动耗时,而“totalTime”则包含从搜索到启动的整个过程。对于内存问题,工具各有侧重:讯飞的iTest和Android Studio内置的内存监控能实时观察内存状态,识别泄漏与抖动;而LeakCanary则需集成到代码中,通过触发GC来主动捕获内存泄漏的详细堆栈。 文章还提及了腾讯的GT、网易的Emmagee等移动端一体化测试平台,以及如何利用Android 5.0以上系统原生的开发者选项进行性能剖析。最后,推荐了多个专注于Android性能优化的专业博客和Google官方的最佳实践指南,为读者提供了深入学习的方向。 这篇清单为开发者提供了一个从粗粒度监控到深度诊断的工具选择地图,帮助大家根据测试阶段和具体问题,找到最合适的“武器”。

本机暂存
IT 移动开发/ 2016-03-22 22:15:51 / 累计浏览 2,567

关于开源,关于 GitHub, 关于 Android

这篇讲的是作者从Android与GitHub的并行增长出发,对开源生态与实践的思考。他通过两组2007-2013年的增长曲线,直观展示了移动设备爆发与GitHub繁荣的潜在联系,并调侃Android开发者因开源而更“幸福”。 基于此,作者重点分享了如何“用好”开源项目。他提出了一个针对Android库的协作分析项目,并给出了具体的选型标准:必须谨慎对待GPL协议,理解库的实现原理是使用前提,同时需考察功能、文档、稳定性与扩展性。对于源码修改,他强调应尽量采用包装方式,若必须修改则务必回馈社区,让代码保持在开源的“大陆”上,而非变成“孤岛”。 文章最后还总结了一个优质开源项目应具备的要素,如规范的README、清晰的协议声明和便捷的联系方式等。整体上,这不是一篇空谈理论的文章,而是一位实战派开发者关于如何选择、使用乃至回馈开源项目的经验谈。

本机暂存
IT 开发者/ 2016-03-22 22:11:08 / 累计浏览 5,545

献给有裸辞想法的朋友们

这篇讲的是一位前阿里员工从自身职业经历出发,给正在考虑裸辞的技术人提供务实建议。 作者校招进入阿里做Java Web,因对Android开发产生兴趣,在职自学一年后选择裸辞,转型成为Android开发者。他详细复盘了当时的决策过程:一方面因为内部平台成就感低,另一方面确实需要整块时间学习和开发App。裸辞后他休息了两个月,骑行川藏线,之后加入了Android ROM创业公司。 不过,文章的重点在于后续的反思与建议。作者明确表示“不建议裸辞”,并深入剖析了核心原因:裸辞后作为失业者,求职和谈薪都会处于被动,尤其对于转技术方向的人,技能不熟练会成为明显短板;同时,持续的消费和收入中断会带来切实的生活压力。相比之下,他强烈建议“内部转岗”。BAT等大公司内部通常有不错的技术资源和转岗机制,这既能让你切换到感兴趣的领域,又能规避裸辞带来的职业空窗期风险。 文章最后提醒,技术学习终究要靠自己,不必过度追求“共同进步”的环境。对于“打杂”期感到不满的新人,他建议先理清自身目标与能力,对自己的职业规划负责。这是一篇带着过来人温度与理性计算的职业规划指南。

本机暂存
IT 移动开发/ 2016-03-22 18:36:44 / 累计浏览 2,880

Android系统开机启动流程及init进程浅析

这篇技术文章深入剖析了Android系统从上电到桌面的完整启动链路。它没有停留在概念介绍,而是将启动过程清晰地拆解为Boot Loader引导、Linux内核启动和Android系统初始化三个阶段,并特别聚焦于Linux内核如何启动第一个用户空间进程——init进程。 作者从内核的`start_kernel`函数开始,追踪了`rest_init`中如何通过`kernel_thread`创建1号内核线程`init`,随后详细分析了`kernel_init`函数的执行流程:等待`kthreadd`线程就绪、完成基础设备驱动初始化(`do_basic_setup`),最终执行用户空间的`/init`程序,从而转变成真正的init进程。init进程作为所有用户进程的“老祖宗”(进程号恒为1),负责挂载文件系统、解析`init.rc`配置,并拉起Zygote、ServiceManager等关键守护进程,是通向整个Android文件系统和应用世界的起点。 文章结合代码,条理清晰地展现了从底层硬件复位到高层系统服务就绪的齿轮咬合过程,对于理解Android启动的本质——即内核空间如何交接并催生用户空间——提供了非常扎实的线索。

本机暂存
IT 设计/ 2016-03-22 18:33:10 / 累计浏览 1,138

最可怕的产品经理

这篇文章从产品经理这个角色的演变谈起,探讨了“最可怕的产品经理”这一有趣命题。作者认为,在当今以用户和设计驱动的时代,产品经理肩负着从产品特征、设计实现到用户心理的全链条责任,甚至决定产品的生死。 文章的核心观点聚焦于两种让程序员“闻风丧胆”的产品经理:一种是设计出身,对产品功能和UI要求精确到每一个像素,会逼迫开发100%还原设计稿;另一种则是技术出身,当被告知某功能无法实现时,他们可能直接丢来一段代码问“这样行不行”。这两种产品经理,一种在审美上极致严苛,一种在技术上深不可测,都构成了对开发团队的巨大挑战。 作者以幽默而犀利的笔触指出,这种“可怕”恰恰是产品的幸运——有挑战才有提升,他们会逼迫团队拿出最好的努力。文章最后还点出了产品经理“品位”的重要性,并以一句调侃收尾,提醒从业者持续学习与反思。

本机暂存
IT 移动开发/ 2016-03-22 16:24:00 / 累计浏览 1,271

Android中AIDL详细分析

这篇讲的是Android中AIDL机制的详细剖析。作者从AIDL(Android接口定义语言)的基础概念出发,清晰地区分了它在不同场景下的适用性:本地服务绑定、跨进程但单线程的Messenger方式,以及需要跨进程多线程处理时的核心选择——AIDL。 文章的核心价值在于梳理了开发者容易混淆的AIDL与bindService的关系,明确指出AIDL主要服务于远程服务绑定,并且出于代码复杂性考虑,官方并不推荐滥用。为了让理论落地,作者提供了一个完整的实例,手把手展示了从定义.aidl接口文件、实现服务端Stub类到客户端获取调用的全过程。其中对参数修饰符(in/out/inout)的解释尤为实用,点明了在自定义对象序列化传输时的关键细节。 文末附上了案例的完整源码结构图和下载地址,为读者提供了直接可运行的参考。对于需要在Android中进行跨进程通信,尤其是处理复杂数据交互的开发者而言,这篇文章提供了从原理到实践的完整指南。

本机暂存
IT 前端/ 2016-03-21 23:57:20 / 累计浏览 2,278

浅谈javascript闭包

这篇讲的是 JavaScript 里一个既核心又让人头疼的概念——闭包。作者从它的重要性入手,直言这是通往高级开发者的必经之路,也是面试中的常考题。 文章没有堆砌复杂定义,而是从最常用的匿名函数形式 `(function(){})();` 切入,直观地展示了什么是闭包。随后,通过对比函数内外变量的作用域(比如函数内可以读全局变量,反之则不行),自然地引出闭包的核心特性:一个内部函数,即使被返回到外部调用,依然能记住并访问它诞生时所在的外部函数作用域。 为了把这个机制讲透,作者还引用了《JavaScript高级程序设计》中关于执行环境和作用域链的解释,说明了内部函数通过作用域链“抓住”外部变量的原理。最后点明,闭包在 Scheme、Python 等众多语言中都有体现,是编程中的一个重要范式。整篇文章结合了概念、代码和原理剖析,把闭包从“难点”变成了可理解的具体逻辑。

本机暂存