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

最新文章

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

IT 安全/ 2016-02-16 22:18:10 / 累计浏览 2,087

Android安全–Dex文件格式详解

这篇讲的是 Android 系统里 Dex 文件格式的深度解析。作者从一个简单的 Java 程序生成 Dex 文件开始,聚焦分析了文件头这个核心区域的内部构造。 文章详细解读了魔数、校验码和 SHA-1 等关键字段。特别是为了确保文件安全,系统设计了双重校验机制:先用 Adler32 快速筛查文件是否损坏,再用 SHA-1 进行高精度的完整性验证。这种分层的设计思路既高效又可靠。 此外,文章还剖析了文件头中字符串索引的存储方式。作者指出,Dex 文件使用了 uleb128 变长编码来表示字符串长度,这种精巧的编码能在绝大多数情况下节省空间,是针对移动端场景的务实优化。 通过对这些底层细节的拆解,文章揭示了 Dex 文件如何兼顾执行效率与安全性。理解这些格式规范,是深入进行 Android 应用安全分析和性能调优的基础。

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

iOS如何用代码控制以不同屏幕方向打开新页面?

这篇实战记录,正是一位开发者在面对“APP保持竖屏,但特定页面需横屏打开”这一需求时,从踩坑到解决的全过程。文章从最基础的`UIDevice.currentDevice().setValue(...)`方法实现页面旋转切入,但很快遭遇了方向被锁死、退出页面后异常横屏的典型BUG。 作者没有停留在表面,而是深入研究了`shouldAutorotate`、`supportedInterfaceOrientations`等系统回调的运作机制。关键在于,对于`TabBarController`包裹`NavigationController`这类常见复杂架构,系统判断屏幕方向的依据并非当前页面,而是根控制器。文章最终给出了自定义`TabBarController`并覆写相关方法的终极方案,并提供了完整的代码仓库供参考。对于需要精细控制屏幕方向的iOS开发者,其中对系统机制的分析和分层解决方案具有直接的实用价值。

本机暂存
IT 数据库/ 2016-02-16 22:13:25 / 累计浏览 1,414

MySQL怎么计算打开文件数?

遇到“Can't open file”或“Too many open files”报错,是MySQL DBA的常见噩梦。这篇文章就从这个典型故障切入,系统性地剖析了MySQL打开文件数的多层限制与计算逻辑。 问题的根源在于文件描述符(FD)在MySQL中受到三层限制:操作系统内核级(fs.file-max)、用户进程级(ulimit -n)以及MySQL自身的参数。文章将后者的参数比喻为“电闸”和“电路保险”——open-files-limit是总开关,超限会影响整个实例;innodb-open-files则单独管控InnoDB文件,达到上限时会静默替换,相对柔和。 解决思路是从外到内逐层提升:先调整sysctl和ulimit的系统限制,再精细配置MySQL参数。文章的重点正是对open-files-limit、innodb-open-files、table-definition-cache和table-open-cache这四个参数的深度解读。它详细说明了每个参数在不同MySQL版本下的默认值、计算规则(如open-files-limit在5.6.8后的自动计算公式),以及table cache的LRU淘汰机制。 文章的价值在于,它将分散的知识点整合成一个清晰的“分层限制与解决”框架,并用生动的比喻和具体的版本数据,帮助读者理解“为什么”和“怎么做”,而不仅仅是罗列配置项。

本机暂存
IT 数据库/ 2016-02-16 22:12:05 / 累计浏览 3,013

倡议:MySQL压力测试基准值

这篇讲的是MySQL压力测试的标准化倡议。作者从日常压测的四种典型目的出发——比如对比MySQL版本性能、验证硬件升级效果、评估参数调整影响,或是评估新业务负载——指出了一个现实痛点:缺乏统一的基准,同行之间难以有效对比和借鉴测试结果。 为此,老叶在文中提出了一个具体的MySQL压力测试基准值倡议(2015试行版),并配套提供了数据采集模板。文章的核心价值不仅在于这个标准化提议,更在于一系列扎实的实操建议:如何避免缓存干扰测试(数据量需超过innodb_buffer_pool_size,每轮测试后清理系统缓存)、如何模拟真实线上流量(推荐使用tcpcopy)、以及如何全面解读压测结果(除TPS外,需重点关注iowait、svctm、事务响应时间等关键指标)。此外,文中还分享了提升tpcc_load数据加载效率的并行化技巧。 这篇文章将倡议与方法论结合,既推动了行业内的经验共享,也为工程师们提供了从工具选择到结果分析的完整压测指南。

本机暂存
IT 前端/ 2016-02-16 22:07:59 / 累计浏览 2,120

你不该忽视的小问题之margin叠加篇

这篇讲的是CSS中一个常被低估但至关重要的细节——外边距叠加(margin collapsing)。作者从开发者常见的“浏览器bug”抱怨入手,指出了深入理解CSS机制的必要性。 文章通过清晰的图示和实验,梳理了三种外边距叠加的典型场景:相邻块级元素的垂直外边距合并、父子元素在特定条件下的外边距穿透,以及空块元素自身的上下外边距合并。作者特别强调,这些现象只在普通文档流的块框上出现,且针对的是垂直方向。 针对最易被忽视的父子元素叠加,文章后半部分做了重要修正和深化。它明确列出了发生叠加所需满足的一系列条件,例如父元素未创建BFC(块格式化上下文)、无边框、无内边距等。相应地,解决思路也变得清晰:为父元素创建BFC,或为其添加适当的border/padding。文章还补充了创建BFC的常见方式,如设置overflow不为visible、使用浮动或绝对定位等。 作者不仅仅是在列举知识点,更是在引导一种解决问题的思维方式——遇到现象不能敷衍了事,而要追问“为什么”并动手验证。这对于希望建立扎实CSS基础、减少布局困惑的开发者来说,是一次从表象到原理的梳理。

本机暂存
IT 前端/ 2016-02-16 21:19:34 / 累计浏览 1,294

IE7浏览器下CSS属性选择器二三事

这篇讲的是在无需兼顾IE6的当下,前端开发者如何挖掘IE7浏览器的CSS潜力,文章聚焦于一个易被忽视的领域:属性选择器的兼容性“怪状”。 作者指出,令人意外的是,IE7其实支持包括`[attr*=val]`在内的多种CSS3属性选择器。然而,“坑”也随之而来:对于表单元素的`[checked]`属性,IE7并不认识,这会导致无法实现常见的自定义复选框/单选框效果。深入探索后,作者发现是因为IE7底层实际使用的是`defaultChecked`属性,因此改用`[defaultChecked]`选择器便能解决问题。相比之下,`[disabled]`属性选择器则能被IE7完美支持。 文章还揭示了另一个关键细节:在IE7中,如果属性选择器(如`[type=checkbox]`)前面没有标签或类名选择器等限定,样式将不会生效。作者通过多个在线Demo和对比截图,清晰地验证了这些兼容性差异与解决方案,为需要处理遗留项目的开发者提供了实用的避坑指南。

本机暂存
IT 数据库/ 2016-02-16 21:18:29 / 累计浏览 2,929

mysql索引合并:一条sql可以使用多个索引

很多开发者可能还固守着“一条SQL只能使用一个索引”的旧观念,其实MySQL的索引合并特性早已支持更灵活的索引使用。这篇技术文章就详细拆解了这个特性。 文章首先厘清了概念:索引合并并非新事物,它能让MySQL对**同一个表**的多个索引进行范围扫描,并将结果通过并集、交集等方式合并,最终返回数据。要判断查询是否利用了索引合并,只需在`EXPLAIN`结果中看`type`列是否为`index_merge`,以及`key`列是否列出了所有被使用的索引。 作者通过一组精心设计的数据和查询进行演示。例如,当执行`WHERE (key1_part1=4 AND key1_part2=4) OR key2_part1=4`时,`EXPLAIN`显示成功使用了索引合并(`Using sort_union(key1,key2)`)。但另一个结构相似的查询却导致全表扫描。文章指出,这揭示了一个核心事实:**优化器是否选择索引合并,根本上取决于对数据统计的分析和成本估算**,单纯讨论SQL写法是否“能用”索引并不全面。 此外,文章还提到了一个关键的版本差异细节:在MySQL 5.6.7之前的版本中,存在“range优先”原则,可能会抑制索引合并的使用,即使后者理论上更优。这提醒我们,在考虑索引策略时,数据库版本也是不可忽视的因素。

本机暂存
IT 安全/ 2016-02-16 21:16:37 / 累计浏览 3,344

老生常谈,安全上你不该犯的错!

这篇文章聚焦于Web开发中几个老生常谈却依然常见的安全漏洞:SQL注入、XSS攻击与猜测URL攻击。作者从实际案例出发,剖析了漏洞存在的根源——核心问题都在于未对外部输入进行充分验证与处理。 对于SQL注入,文章以一段直接拼接参数的查询代码为例,展示了攻击者如何通过构造`?ID=1 OR 1=1`获取全表数据,并指出了使用ORM框架或参数化查询是根本的解决方案。针对XSS攻击,文章解释了恶意脚本如何通过URL或数据库存储窃取用户Cookie,并强调了对所有输入进行HTML编码的重要性。至于猜测URL攻击,则是通过遍历参数来越权访问数据,建议采用无规律ID、增加权限校验或添加校验字段来防范。 文章最后提出了一个关键观点:安全是一个系统工程,其首要原则是“不要相信任何输入”,需对包括URL参数、Cookie、Header在内的所有外部信息保持警惕。同时,配合使用安全扫描工具进行检测,能进一步提升系统安全性。

本机暂存
IT 安全/ 2016-02-16 21:15:15 / 累计浏览 6,283

什么是DNS劫持和DNS污染?

你可能遇到过这样的怪事:输入正确的网址却跳到运营商广告页,或者明明翻了墙某些网站依然打不开。这些问题的共同根源往往是网络层面的DNS干扰。这篇技术讲解就厘清了其中两种最常见、但原理不同的手段:DNS劫持与DNS污染。 文章的核心在于对比。DNS劫持,可以理解为“结果被篡改”。它发生在DNS服务器层面,攻击者或运营商控制了服务器,直接修改了域名对应的IP地址。你的查询请求是真实的,但收到的回复是假的,导致你被引导到错误的网站。其典型症状是首次拨号上网时总会弹出运营商的门户页面。 而DNS污染,更像“过程被污染”。它利用DNS查询基于不可靠UDP协议的特点,在数据传输的途中进行拦截和伪装。当你的查询请求途经被监控的节点时,系统会提前伪造一个虚假的IP地址返回给你,根本无需你的请求到达真正的DNS服务器。这通常用于实现对特定境外网站的封锁。 因此,它们的应对策略也不同。对于DNS劫持,修改本地DNS服务器地址为公共DNS(如文章中列举的阿里DNS、114DNS等)是直接有效的解决方法。但对于工作在传输层的DNS污染,单纯更换DNS往往无效,通常需要借助VPN或远程解析等更复杂的方式。 文章不仅讲清了原理,还给出了从选择公共DNS到Windows系统下手动修改的完整操作指南,是一篇从现象认知到动手解决都很完整的实用科普。

本机暂存
IT 设计/ 2016-02-16 21:08:14 / 累计浏览 3,698

视觉调整-设计师 vs. 逻辑

这篇讲的是设计中常被忽略的“视觉调整”艺术——当像素完美并不等于眼睛里的完美时,设计师该如何破局。作者从早期过度依赖软件数值对齐的误区出发,揭示了计算机的“理性计算”与人眼“感性感知”之间的关键差异。 文章用四个具体案例拆解了视觉调整的要点:比如播放器图标在几何上居中,视觉重心却需左移;相同色值的填充色与文字,需微调明度才能看起来一致;同样尺寸的方形与圆形,后者需要放大几像素才能视觉等高;全大写字母则需适当缩小,才不会显得突兀。这些调整幅度虽小,却直接影响了设计的整体和谐度。 作者的核心观点在于:优秀的设计师需要超越工具的理性局限,信任并锻炼自己的视觉直觉。这些细微处的打磨,正是“像素级完美”背后的秘密,也是当前AI仍难以模拟的人类判断力所在。

本机暂存
IT 开发者/ 2016-02-16 21:06:25 / 累计浏览 6,235

2015中国程序员生存报告,请勿对号入座

这篇发布于2015年的文章,以一份“不负责任”的报告形式,用幽默甚至自嘲的笔触勾勒了当时中国程序员的群体画像。文章起点是Stack Overflow的数据:全球软件开发者中男性占92.1%,而文章调侃道,剩下的女性比例里“一个姑娘也没给中国同行留”。 围绕这个背景,作者从几个切面展开了对“生存报告”的描绘:从性别比例失衡导致的社交硬伤,到对“猝死”话题的下意识警觉;从与“天敌”产品经理在像素级需求上的日常博弈,到对薪资增长靠跳槽、职业天花板无形的隐晦吐槽。文章甚至将“出路”话题引向了最终与产品经理“成为最熟悉的人”的无奈又好笑的结论。 它并非一份严肃的调查报告,而更像是一次基于行业共识的集体自嘲与情绪表达。这种“别对号入座”的标题,恰恰精准击中了程序员群体在高速迭代的技术压力与相对单一的生活环境中,所共享的、复杂又难以言状的生存状态。

本机暂存
IT DevOps/ 2016-02-16 20:58:35 / 累计浏览 2,249

使用vi命令出现Swap file "..." already exists!警告

这篇讲的是 Linux 用户用 `vi` 编辑文件时,可能遇到的一个经典小麻烦。 具体来说,当你尝试打开一个文件时,可能会收到 “Swap file '...' already exists!” 的警告,导致无法正常进入编辑界面。文章作者在强制关机后就碰到了这个问题。其根本原因在于,`vi` 在编辑文件时会在同目录下生成一个隐藏的交换文件(.swp),用于数据恢复。这个警告意味着该文件已经存在,可能是上次编辑未正常退出,或文件正被其他用户编辑所致。 文章提供的解决方案非常直接:进入文件所在目录,使用 `ls -a` 命令显示出所有隐藏文件,找到并删除那个对应的 `.swp` 文件(例如 `hello.ksh.swp`),然后就能重新正常打开原文件了。这个操作简单有效,清除了 `vi` 认为“正在被占用”的锁信号。 对于经常在终端工作的朋友来说,这是一个很实用的故障排查小技巧。文章演示了从遇到报错、分析原因到动手解决的完整思路。

本机暂存
IT DevOps/ 2016-02-16 20:57:37 / 累计浏览 2,409

SecureCRT怎么设置字符集编码及缓存

使用SecureCRT连接Linux终端时,中文字符乱码是个常见问题。这篇教程详细拆解了问题的根源和彻底解决的方法。 问题的根本原因在于字符编码不匹配。教程指出,只需将SecureCRT的默认编码设置为UTF-8,即可同时解决显示乱码和输入乱码两大问题。它提供了清晰的全局设置路径:从“Options”菜单进入“Global Options”,然后编辑默认会话设置,在“Appearance”选项卡中找到并勾选“Character encoding”为UTF-8。 除了编码,文章还顺带讲了一个实用技巧——如何调整回滚缓冲区大小。在同一个配置界面的“Emulation”部分,可以将“Scrollback buffer”从默认的500行调大,最大支持128000行,方便回溯更长的历史命令输出。 教程最后也提醒,上述修改会影响所有新建的连接。如果只想让某个特定会话生效,应该通过“Session Options”进行单独配置,这为用户提供了灵活的选择。

本机暂存
IT 设计/ 2016-02-16 20:55:30 / 累计浏览 4,286

为什么要段首空两格

这篇讲的是“段首空两格”这个看似不起眼的中文排版习惯,背后其实藏着一套完整的设计逻辑。作者从“以用户为中心”的思路出发,梳理了中西方段落分隔的漫长历史——从中国汉代奏章的“需头”传统,到西方中世纪手抄本的首字母放大,再到1919年新式标点符号运动将其规范化,这种缩进最初都是为了让段落划分更清晰、提升阅读节奏。 文章的核心观点很明确:段首空格的两大作用是标记段落停顿和视觉区分。它对比了网络时代的不同选择,指出虽然网页可以靠空行或标题来分段,但一致性的左侧缩进更符合大多数人从左到右的阅读习惯,能优雅地引导视线,增强长文的易读性。尤其对于汉字这种信息密度高的文字,段落分明能有效缓解阅读压迫感。 最后作者给出实用建议:在大多数中文网络内容中,段首空两格依然是很好的分隔方式;但若已有标题或列表等明确结构,也可灵活处理。整篇文章将一个小排版细节,讲成了一次对用户阅读心理和跨文化设计史的洞察。

本机暂存
IT 前端/ 2016-02-16 20:53:53 / 累计浏览 1,342

图文浅谈css3

这篇讲的是CSS3的全景概览。作者将CSS3比作一个大宝藏,指出许多开发者可能因实际应用的局限,只接触到其中一鳞半爪。因此,文章的目标就是跳出单纯的炫技案例,为读者提供一次稍大范围的、概括性的梳理。 作者系统地展示了CSS3如何用代码替代图片和JS,显著提升了效率与灵活性。内容从最核心的布局开始,深入解析了灵活的Flexbox、多栏布局、Calc计算以及新兴的Grid网格布局,对比了它们与传统浮动布局的优势。在视觉表现上,详细介绍了阴影、圆角、渐变、图像边框和多背景图等特性。此外,文章还涵盖了Transform、Transition、Animation这套动画组合拳,以及强大的选择器和Rem单位等实用模块。 尽管CSS3常被与炫酷动画关联,但作者强调其宝藏远不止于此。文章最后指出,用好这项技术需达到功能性、灵活性与合理性的平衡,才能在实际项目中挥洒自如。

本机暂存
IT 移动开发/ 2016-02-16 20:53:22 / 累计浏览 1,831

安卓第三方应用调起常见问题

当Android开发者需要调起其他应用分享或登录时,常常会卡在“如何精确唤起目标页面”这一步。这篇讲的就是解决这个具体痛点。文章没有空谈理论,而是直接给出了核心代码——通过Intent明确指定ComponentName(即包名和Activity名),并辅以常用Activity的ACTION_MAIN和CATEGORY_LAUNCHER标志,确保能从桌面正常启动。 为了让开发者“拿来即用”,作者还贴心地列出了微博、微信、QQ等几个常用应用的具体包名和编辑界面Activity路径。这就像一份速查手册,省去了反复查阅官方文档的时间。 更进一步,文章考虑到了目标应用可能未安装的场景。它演示了两种方案:一是通过PackageManager遍历已安装列表来判断,二是利用Intent的URI Scheme(如`sinaweibo://`)进行直接调用,并最终通过Intent.createChooser提供一个“兜底”选择。如果App未安装,则自动跳转到对应的网页版,实现了体验上的优雅降级。 从直接调起到异常处理,这篇文章为开发者提供了一套清晰、可落地的实施步骤。

本机暂存
IT 移动开发/ 2016-02-16 20:51:02 / 累计浏览 1,578

Swift的Range 操作符 ... 和 ..<

这篇讲的是Swift中从脚本语言借鉴而来却独具特色的Range操作符`...`和`..<`。文章没有停留在基础用法——用`0...3`表示包含3的闭区间,用`0..<3`表示不包含3的开区间——而是深入剖析了这两个操作符的泛型定义。 作者通过解读源码中的函数签名,揭示了它们的强大之处:除了常见的整数和浮点数,这两个操作符还支持所有遵循`Comparable`协议的类型。这意味着它们可以用于字符串,构建如`"a"..."z"`这样的字符范围。文中用一个实际例子演示了如何利用这一特性高效地校验字符串中的每个字符是否为小写英文字母,让抽象的语法定义立刻变得实用。 文章的亮点在于,它清晰地展示了Swift如何将一种常见的语法糖,通过泛型设计提升为一个通用且类型安全的强大工具,让读者不仅会用,更理解了其背后的设计思路和扩展潜力。

本机暂存
IT 移动开发/ 2016-02-16 20:49:04 / 累计浏览 2,090

Swift GCD 和延时调用

作者从一个具体的需求出发:在应用中需要实现“N秒后执行某操作”,但Swift中原来常用的performSelector:afterDelay方法因内存安全问题已被移除。文章的核心是介绍如何利用GCD的dispatch_after来优雅地实现延迟调用,并进一步提供了一个可取消的封装方案。 作者首先演示了最基础的dispatch_after用法,随后直指痛点:实际开发中我们常常需要能够取消这些延迟任务。因此,文章的重点在于一个精心编写的delay函数,它利用GCD的演进特性(如dispatch_block_t),将延迟任务包装成一个可被取消的“Task”。通过这个封装,调用变得极为简洁:`delay(2) { ... }`,而取消也只需调用`cancel(task)`。这种封装避免了引入NSTimer等不相关的类,同时利用闭包提供了安全的内存管理和取消能力。 整篇文章从实际问题切入,提供了超越简单语法演示的实用工具代码。这套轻量封装解决了实际问题,也展示了Swift下灵活使用GCD的思路。

本机暂存
IT 安全/ 2016-02-16 20:47:25 / 累计浏览 2,277

也来谈谈沙箱逃逸技术

这篇讲的是作者基于过往经验,总结的一系列针对在线沙箱检测的逃逸技巧。核心观点是:沙箱因其环境特征,反而可能暴露出独特的“指纹”,而绕过检测的关键在于识别并利用这些差异。 文章首先从进程检测入手,指出直接明文比对进程名(如vmtoolsd.exe)会触发监控,而用加密后的密文进行比对则是一种有效规避。接着,作者详细列举了多种沙箱指纹特征:例如特定的Windows ProductId(如Anubis沙箱的76487-640-1457236-23837)、有规律的ComputerName(如某些沙箱环境以“xiaochen”开头)、固定的内存大小(Anubis 128M、火眼512M),以及固定的样本路径(如Comodo沙箱的C:\TEST\sample.exe),这些在不同厂商间存在明显差异。 此外,文章还探讨了如何在不联网的情况下泄露沙箱数据,比如将文件内容写入注册表,或更巧妙地将二进制数据编码到图片像素中,利用沙箱截图功能来传递信息。最后,作者总结道,逃逸的核心思路在于找到“沙箱有的而别的机器却没有的”特征,以及开发“你有的而别人没有的”绕过方法,为攻防双方提供了具体的实战视角。

本机暂存
IT 移动开发/ 2016-02-16 20:45:46 / 累计浏览 1,425

iOS开发检测通讯录权限并申请开启

这篇讲的是开发者在升级到 iOS 6 后,遇到的通讯录访问权限问题。原先正常的代码突然报错,且程序在系统的隐私设置中“隐身”,根本原因在于 iOS 6 对通讯录访问控制进行了收紧,要求应用必须主动向用户请求授权。 作者分析了官方文档后,提供了一个清晰的解决方案:封装一个检查权限的方法。该方法首先通过 `ABAddressBookGetAuthorizationStatus()` 获取当前状态,若非已授权,则主动调用 `ABAddressBookRequestAccessWithCompletion` 发起请求,并通过回调处理结果。文章中给出的代码,巧妙地利用 `dispatch_async` 确保回调在主线程执行,方便更新 UI。 实际应用时,开发者可以在关键路径调用此方法。如果用户首次拒绝了授权,就只能引导其前往系统设置手动开启。这个封装的方法将权限检查与请求逻辑整合在一起,为解决此类权限问题提供了一个可复用的实践模板。

本机暂存