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

最新文章

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

IT 后端/ 2016-03-01 23:45:37 / 累计浏览 3,389

PHP 用 curl 读取 HTTP chunked 数据

这篇讲的是在PHP中使用curl处理流式HTTP chunked数据时,遇到的一个实际坑点与解决方法。当需要实时处理服务器推送的每个数据块(比如对接icomet这类服务)时,开发者自然想到使用`CURLOPT_WRITEFUNCTION`回调。但实际会发现,一个逻辑上的chunk数据,回调函数可能会被多次触发,每次只收到大约16k的片段,破坏了数据的完整性。 文章指出了问题的根源:curl底层传输机制导致回调被分割,而非按应用层chunk边界返回。作者给出的解决方案巧妙且实用:在回调函数内维护一个静态缓冲区,将每次收到的片段拼接起来,并以特定分隔符(如`\n`)为界进行分割,确保每次只处理一个完整的应用层数据块。这种方法兼顾了实时性与数据完整性,是处理此类流式接口时一个值得借鉴的细节技巧。

本机暂存
IT 移动开发/ 2016-03-01 23:45:03 / 累计浏览 1,809

Objective-C 对二进制数据 NSData 进行 URL 编码

这篇讲的是 Objective-C 开发者在处理二进制数据时常遇到的一个痛点:如何将 NSData 对象进行 URL 编码。作者指出,许多号称 Unicode 友好的语言在内存操作上往往表现笨拙,他以 PHP 为例,赞赏其将字符串与二进制统一处理的灵活性。相比之下,Objective-C 的标准库函数如 `CFURLCreateStringByAddingPercentEscapes()` 只能处理字符串,无法直接作用于 NSData,这被认为是“不把字符串当二进制”的弊端。 为此,作者提供了一个自定义的解决方案:编写一个简单的 C 函数,通过逐字节遍历 NSData,判断每个字符是否属于安全字符(字母、数字及部分符号),否则将其转换为对应的 `%XX` 百分比编码格式,最终拼接成完整的编码字符串。这个实现思路清晰直接,巧妙地避开了系统函数的限制,为需要直接处理原始二进制数据进行 URL 传输的场景提供了实用参考。

本机暂存
IT 安全/ 2016-03-01 23:44:21 / 累计浏览 2,817

看见CSRF我不怕不怕了

这是一篇典型的故障排查与实战经验分享。作者从自身接手安全项目时遇到的CSRF(跨站请求伪造)问题出发,坦诚自己之前因不理解而一直采用屏蔽或绕过的“鸵鸟策略”,最终在Django+Jinja2的实际环境中不得不直面解决。 文章首先清晰地拆解了CSRF是什么、为何危险以及其攻击原理,为后续实战奠定了理论基础。核心价值在于后半部分的解决方案详解:从Django中间件的配置原理,到在模板(包括Jinja2)中正确植入csrf_token的具体代码,再到处理AJAX异步请求时的注意事项,都给出了可操作的步骤。作者不仅讲了“怎么做”,也解释了中间件检查的“为什么”,比如必须置于SessionMiddleware之后等细节,让读者知其然也知其所以然。 对于曾对CSRF一知半解、或在Django项目中遇到同样困扰的开发者来说,这篇文章提供了从概念扫盲到落地修复的完整路径,是克服安全“踩坑”经历的一份实用参考。

本机暂存
IT 设计/ 2016-03-01 14:17:44 / 累计浏览 4,872

手机UI设计基础-尺寸&单位

这篇讲的是手机UI设计中让很多新手头疼的尺寸与单位问题。作者从移动端开发和设计的常见困惑出发,系统梳理了iPhone与Android两大平台的核心概念和适配思路。 文章首先厘清了iPhone的分辨率、屏幕尺寸、像素密度(PPI)以及逻辑分辨率(pt)与物理分辨率(px)的关系,并以表格形式清晰列出了从初代iPhone到iPhone 6 Plus的换算规律(如iPhone 6s为1pt=2px)。针对机型众多的适配难题,作者提出了一套实用的工作流:以iPhone 6的750px宽度作为设计基准稿,使用矢量元素设计,标注后同步输出用于切图的@3x资源;开发端则基于此使用自动布局,再向上向下适配更大和更小的屏幕。 对于Android平台,文章介绍了dp、sp、dpi等关键单位,并建议以1080px宽(xxhdpi)作为通用设计尺寸。最后,文章还延伸至移动端Web,指出通过设置viewport代码(如width=device-width),可以让px单位等同于逻辑像素使用,从而在不同设备上实现统一的页面宽度(如640px)。 整篇文章将碎片化的尺寸知识串联成清晰的适配逻辑,不仅解释了“是什么”,更给出了“怎么做”的具体路径,对理清设计与开发协作的流程很有帮助。

本机暂存
IT 设计/ 2016-03-01 14:16:25 / 累计浏览 2,830

如何设计好用的触控手势

这篇文章从儿童和长辈都能轻松上手的触控设备现象切入,探讨了如何设计出既自然又高效的触控手势。 触控手势作为自然用户界面(NUI)的体现,通过模拟现实世界的动作(如滑动、缩放)降低了交互门槛。文章强调,设计时必须考虑用户身处的“移动情景”——注意力分散、操作时间碎片化、任务易中断等复杂环境,这些都对手势的易用性提出了更高要求。 那么,什么才算“好用”的手势?作者总结了几个关键特征:动作简单到可以单手在拥挤交通工具上完成;容易记忆且符合认知习惯;具备实用性,让用户无需多余操作;提供即时反馈,让用户清楚操作状态。 在具体设计上,文章给出了几条核心准则:手势必须符合大多数人的自然习惯;一个应用的手势数量最好控制在5个以内,以降低记忆成本;根据应用类型差异化设计——效率工具适合单手手势,游戏可以适当增加复杂手势以提升乐趣;同时,像《Flappy Bird》那样适度、克制地运用手势,往往能达到最直接有效的效果。最后,提供视觉或震动反馈,并确保操作可逆,能极大增强用户操控的信心与安全感。

本机暂存
IT 后端/ 2016-03-01 14:15:37 / 累计浏览 22,165

Java开发岗位面试题归类汇总

这是一篇将Java岗位面试高频知识点进行系统归类的汇总文章。作者从Java基础、IO、Web、JVM、开源框架、多线程、网络通信、数据库、设计模式、算法、并发与性能调优等十二个维度,梳理了上百个经典面试问题。 文章并非单纯罗列题目,而是将问题嵌入具体的技术场景中。例如,在基础部分会追问HashMap底层原理与Hash冲突解决,在多线程部分则围绕线程池、锁机制和并发容器展开,而在性能调优章节,则抛出“每秒5千请求如何设计”这样的实战架构题,引导读者思考从单机到集群的解决方案。 它清晰地勾勒出一名合格Java工程师需要掌握的知识图谱,覆盖了从理论概念到框架原理,再到系统设计的完整链条。对于准备面试或希望系统查漏补缺的开发者来说,这份归类清晰的清单,提供了一个扎实的复习与自检框架。

本机暂存
IT 开发者/ 2016-03-01 14:02:48 / 累计浏览 5,645

Macbook Air换电池教程

这篇教程源自作者亲身体验:一台2012款Macbook Air使用三年半后,电池从最初五六小时的续航暴跌到仅一小时,最终插电能显示充满但拔电即关机,确认电池彻底老化。 为避免官方维修的高成本,作者决定自行更换电池。在淘宝上找到匹配型号的绿巨能品牌

本机暂存
IT 安全/ 2016-03-01 13:55:18 / 累计浏览 7,628

WiFi 万能钥匙原理和危害探究

这篇讲的是,作者从一次偶然发现入手,探究了WiFi万能钥匙这类软件背后令人不安的运作逻辑与潜在风险。 他发现,即便自己从未主动使用,手机的WiFi列表也可能被软件打上“一键免费连接”的提示。分析指出,软件的核心在于一个庞大的云端数据库,它通过获取用户设备上保存的明文或弱加密密码,将每个用户的1-10个WiFi信息(如MAC地址、密码)上传汇总。凭借数亿用户,这个数据库的规模相当惊人。 连接时,软件会申请位置权限,以缓存附近WiFi信息并可能用于广告投放。它主要通过三种方式尝试联网:利用更精准的MAC地址进行密码匹配、对弱口令(如常见数字组合)进行撞库,以及可能在后台静默尝试暴力破解。 文章强调,真正的隐患不止于网速变慢。一旦网络被具备技术能力的攻击者蹭上,他们可能进一步尝试破解路由器管理密码,从而在同一局域网内实施欺骗、投毒等控制手段。作者最后给出了一些实用建议,如为访客单独设置受限的WiFi子网络,或隐藏SSID广播,来防范这种“无感知”的蹭网行为。

本机暂存
IT 前端/ 2016-03-01 13:53:19 / 累计浏览 3,048

记一次淘宝首页奇葩的渲染问题

这篇讲的是一个藏在淘宝首页代码里的、只有在特定交互下才会现身的Chrome浏览器渲染Bug。 作者在维护首页时发现,鼠标滑过某个模块边界时,会出现诡异的渲染残影或错位。这个问题非常“娇气”,只在元素边界与瓦片边界重合时才可能触发,属于浏览器渲染引擎在处理层合并与瓦片栅格化时的计算漏洞。通过Chrome开发者工具的“显示层边框”功能,作者定位到了代表“缺失调整验证”的粉色块,这直接指向了引擎未正确处理元素边界增长后的瓦片重绘。 最实用的经验是,遇到这类难以复现的奇葩渲染问题,一个有效的“土办法”是为目标元素添加 `transform: translateZ(0)`。这行代码能强制浏览器为该元素创建独立的硬件加速渲染层,从而隔离问题,解决概率高达80%。这篇文章的价值不仅在于给出了一句修复代码,更在于完整展现了从现象发现、工具调试到引擎原理追踪的排查思路,为前端开发者解决同类疑难杂症提供了清晰的路径。

本机暂存
IT 设计/ 2016-03-01 00:02:26 / 累计浏览 1,078

小谈矢量网络

这篇讲的是 Figma 团队如何重新思考并改进了诞生三十多年的矢量编辑工具。作者从自身游戏开发背景出发,指出传统基于“路径”的钢笔工具在交互上存在诸多反直觉的限制。为此,Figma 提出了“矢量网络”这一新模型。 与路径的单一链条不同,矢量网络允许任意两点之间自由连接和分割,极大提升了形状编辑的灵活性,甚至对用户而言是“无缝”的体验。文章还分享了其他关键改进:弯曲工具允许直接拖拽曲线而非仅靠控制柄,符合直觉;同时,Figma 的填充算法摒弃了传统复杂的“卷绕数”概念,通过智能识别封闭区域并提供油漆桶工具一键开关,让填充操作变得直观。这篇文章揭示了如何通过底层模型的创新,让基础设计工具变得更自然、更强大。

本机暂存
IT 开发者/ 2016-02-29 23:58:29 / 累计浏览 5,556

技术领导要不要写代码?

这篇讲的是技术领导到底要不要亲自动手写代码这个经典难题。作者从自己刚入行时听闻的“程序员吃青春饭,30岁转管理就不用写代码”的观念,谈到自己当上技术领导后,反而在危急关头写了比以往都多的代码来拯救系统,由此引发了深层思考。 文章没有直接给出“要”或“不要”的答案,而是通过一个具体的团队生产率计算模型来分析。模型对比了技术领导自己单干,以及将时间用于制定规范、优化流程以提升整个团队编码速度和质量后的产出差异,清晰地指出了领导者的核心价值在于“驱动团队”,而非个人贡献。 作者进而提出,在具体场景下(如填补团队能力空白、用代码说服同事)技术领导必须写代码,同时也主张“应当”写,以保持技术手感和决策依据。最终的结论是:没有统一答案,有时要忍住“让我来”的冲动,有时则要忍住“嫌他人代码差”的恶心。文章结尾颇为亲切地提到,愿意写代码的技术领导更可爱,因为这传递出“我和你们是一伙的”信号。

本机暂存
IT 数据库/ 2016-02-29 23:57:29 / 累计浏览 2,030

MySQL事务隔离级别的暗门

你是否知道,在 MySQL 中不加 GLOBAL 或 SESSION 关键字直接设置事务隔离级别,其效果与你想象的可能完全不同?这篇文章就深入剖析了这个容易被忽略的“暗门”。 它对比了三种调整事务隔离级别的场景:使用 GLOBAL 关键字修改全局设置(仅对新连接生效),使用 SESSION 关键字修改当前会话,以及最特别的——两者都不加。作者从官方文档出发,明确指出了核心差异:不加关键字的 SET 语句,其修改仅对当前会话的下一个尚未开始的新事务生效,并且在该事务结束后,隔离级别会自动恢复为当前会话之前的设置。 为了证实这一点,文章通过一个详尽的实验演示进行了验证。实验展示了,在会话内先执行 SET TRANSACTION(不加关键字),随后查询变量显示隔离级别未变,但当新事务启动后,其行为(如行锁阻塞)却符合设置的新隔离级别(如 SERIALIZABLE)。而当该事务结束后,下一个新事务又回到了原先的隔离级别。 基于这个特性,文章给出了实用的建议:如果需要持久化地改变全局隔离级别,应在配置文件中设置;如果只是想在当前会话中临时为一个或几个事务调整级别,那么不加 SESSION 关键字的 SET 方式反而更方便,因为它会自动“复位”,省去了手动改回的步骤。这个细节对于理解 MySQL 事务行为和编写特定逻辑的代码非常有帮助。

本机暂存
IT 前端/ 2016-02-29 23:55:32 / 累计浏览 1,838

SVG精简压缩工具svgo简介和初体验

这篇从实际协作场景切入,探讨SVG文件精简的必要性。作者指出,设计师用Adobe Illustrator等工具导出的SVG常包含编辑器源信息、注释、默认值等冗余内容,使得文件过大且影响性能。前端开发者需要一种本地解决方案,而非依赖在线平台。 为此,文章介绍了svgo——一个基于Node.js的SVG优化工具,在GitHub上收获4000+星。它基于插件架构,提供一系列优化操作,比如移除文档声明、删除空属性、转换路径数据为更简洁形式、合并多个变换等。这些插件覆盖了从清理无用代码到智能压缩的全流程。 作者通过初体验展示了svgo的实用效果:能快速精简SVG文件,保留渲染结果的同时大幅减小体积。这不仅提升了项目加载效率,也促进了前端与设计师的协作分工,让前端专注于Web化处理。对于处理SVG的开发者来说,svgo是一个值得集成的工具。

本机暂存
IT 后端/ 2016-02-29 23:49:04 / 累计浏览 2,498

Jetty 8长连接上的又一个坑

这篇讲的是 Jetty 8 长连接处理中一个隐蔽的“坑”:超时断开机制只在数据传输阶段生效,一旦数据进入服务端处理环节,就不再检测空闲。作者从 `SelectChannelEndpoint` 类的核心代码入手,解释了连接如何通过 `setCheckForIdle` 和 `notIdle` 方法被标记为“空闲”或“非空闲”,从而控制超时判断。 问题的关键点发生在请求数据收集完毕、即将提交给后端 Servlet 处理的瞬间。在 `AsyncHttpConnection` 的 `handle` 方法中,代码在调用 `_asyncEndp.setCheckForIdle(false)` 后,可能会因为复杂的处理流程和异常路径,导致该标志位未能按预期复位。这使得在后端业务逻辑执行期间,select 线程依然在监测连接的“空闲时间”,一旦处理耗时超过阈值,连接就会被错误地断开——即便业务数据正在处理中。 文章通过代码走读,精准定位了这个因状态管理不严谨导致的并发陷阱。对于使用 Jetty 8 进行长连接服务的开发者来说,理解这一机制尤为重要,尤其是在设计耗时较长的异步处理逻辑时,需要格外注意避免此类意外断连。

本机暂存
IT 安全/ 2016-02-29 23:47:16 / 累计浏览 5,025

HTTPS证书生成原理和部署细节

这篇讲的是 HTTPS 是如何保障通信安全的,以及我们该如何亲手生成和部署证书。文章从一个生动的电信用户遭遇 DNS 劫持、被注入广告的案例切入,点明了在 HTTP 明文传输下隐私暴露的风险。 作者详细拆解了 HTTPS 的核心安全机制:它在 HTTP 基础上增加了加密、认证和鉴定。通过一张流程图和清晰的步骤,文章描述了客户端与服务器如何通过交换随机数并生成会话密钥(session key)来建立安全通道。同时,文章也指出了仅有非对称加密不够,必须引入受信任的第三方 CA 来签发数字证书,以防中间人攻击。 文章进一步科普了 CA 证书的三种验证等级(DV、OV、EV),并提供了实操部分:使用 OpenSSL 命令从生成密钥对、创建 CA 根证书,到最终签发服务器证书的完整流程。最后,对于个人或小型站点,文章也提到了自签名证书这一低成本解决方案。 整体上,这是一篇从原理到实践的指南,既解释了“为什么需要 HTTPS”以及“它是如何工作的”,也手把手教你“如何自己动手做”。

本机暂存
IT 后端/ 2016-02-29 23:41:55 / 累计浏览 1,786

NodeJS的代码调试和性能调优

这篇讲的是NodeJS调试方法的演进与核心实践。作者从NodeJS版本合并的背景切入,指出许多开发者仍停留在`console.log`或`asserts`模块的基础调试阶段,这些方式需要将调试逻辑硬编码进业务代码。为此,文章详细介绍了NodeJS内建的命令行调试器作为更专业的解决方案。 核心方法是通过`node debug`命令启动文件,进入一个提供丰富调试指令的环境。文章清晰地区分了“debug模式”(用于单步执行、设置断点)和“repl模式”(用于实时检查变量状态),并列举了`cont`、`next`、`step`等关键命令。这种调试方式通过TCP与内建模块通信,摆脱了在代码中“埋点”的束缚,让调试过程更干净、高效。 文章最后也点出了调试器的工作原理,并提及IDE集成的图形化调试工具是其更友好的封装。其价值在于,它将调试从一种“破坏性”的辅助操作,转变为一种与代码分离的、系统化的质量保障流程。

本机暂存
IT 安全/ 2016-02-29 23:39:07 / 累计浏览 3,336

你所不知道的 HSTS

这篇讲的是HSTS(HTTP严格传输安全)这个容易被忽略但至关重要的安全机制。作者从在淘宝首页意外看到罕见的307状态码切入,揭示了HTTPS网站面临的一个实际威胁:中间人利用HTTP(80端口)的首次请求进行劫持,替换广告或注入代码。 文章核心指出,HSTS通过服务器响应头中的`Strict-Transport-Security`字段来强制浏览器使用HTTPS,能有效堵住这个缺口。一个关键细节是,HSTS触发的跳转会使用特殊的307内部重定向状态码,这与常规的302跳转不同——它不会改变请求方法(如POST不会变GET),并且跳转可以被缓存,节省了额外的请求。 同时,作者也指出了HSTS的“坑”:它对纯IP地址或非标准端口无效;最危险的是,如果HTTPS未配置好就启用了HSTS且设置了长期`max-age`,可能导致用户无法访问网站。总体而言,文章清晰阐明了HSTS的工作原理、实际价值与部署风险,对于全站HTTPS化有直接的实践参考。

本机暂存
IT 前端/ 2016-02-29 23:30:34 / 累计浏览 3,178

近几年前端技术盘点以及 2016 年技术发展方向

这篇讲的是,作者从自身2012年入行经历出发,对2009至2015年间前端技术的演进逻辑做了一次系统梳理与展望。 文章并未停留在简单罗列,而是清晰勾勒出一条演进脉络:从早期jQuery等基础类库对浏览器差异的抹平与功能完善,到HTML5标准确立后对富应用与性能的关注,再到2013年后以Node.js、模块化、工程化工具链为标志的“大前端”生态构建。作者特别指出,技术革新的背后是Web从“网页”走向“应用”的根本诉求,以及浏览器标准化、移动端崛起、前后端分离等关键驱动力。 文中对关键转折点的分析很有见地,例如14年HTML5定稿与ES6落地共同推动了大型Web应用开发成为可能;15年React Native等框架的兴起,则标志着前端技术开始突破浏览器边界,向跨平台原生开发渗透。作者将2016年展望为“低版本IE消亡”和“前端工业化生产”深化的一年,并呼吁业界共同推动标准落地与生态进化。 这篇盘点将技术变迁置于具体的时间线与行业背景中,对理解前端技术的昨天、今天与明天提供了扎实的参考。

本机暂存
IT 安全/ 2016-02-29 23:28:09 / 累计浏览 3,417

简述 OAuth 2.0 的运作流程

这篇技术文章用一次具体的 GitHub 登录授权经历,拆解了 OAuth 2.0 认证流程的核心逻辑。 作者以“访客在网站上用 GitHub 账号留言”为场景,将复杂的认证流程分解为四个直观的步骤:网站与 GitHub 预先协商权限、用户确认授权并获取临时凭证 code、网站使用自身凭证换取最终访问令牌 access_token,最后用该令牌获取用户信息。文章通过“门票”、“盖章”、“绿卡”等生动比喻,把 Client ID/Secret、授权码、访问令牌这些抽象概念及其作用解释得非常清楚,特别是强调了每一步的安全考量——比如为何不能直接用 code 访问数据,以及令牌的权限范围与有效期管理。 对于想理解 OAuth 2.0 “为什么这么设计”以及“各环节如何衔接”的开发者来说,这篇短文提供了一个从理论到实践的清晰视角,能帮助快速建立对该协议运作机制的全局认知。

本机暂存
IT 安全/ 2016-02-21 22:58:19 / 累计浏览 2,917

Linux安全之SYN攻击原理及其应对措施

这篇讲的是Linux系统面临的经典网络层攻击——SYN Flood。文章直接切入TCP协议固有的缺陷,解释了攻击者如何利用伪造的SYN包耗尽服务器的连接队列,从而瘫痪正常服务。理解了原理后,关键在于防御。文章没有停留在理论,而是给出了四种可立即操作的系统调优方案:通过调整`tcp_synack_retries`等参数减少无效等待,启用强大的SYN Cookie机制来抵御伪造包,适当扩大半连接队列容量,以及用iptables规则对异常流量进行限速。每条措施都附带了具体的`sysctl`或`iptables`命令,从内核参数到防火墙规则,覆盖了从缓解到防御的多层次思路。对于需要加固服务器网络安全的运维人员,这些直接可用的配置点很有参考价值。

本机暂存