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

最新文章

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

IT 前端/ 2016-02-13 23:05:39 / 累计浏览 1,297

导航类“不定宽水平居中”的几种思路

这篇讲的是前端布局中一个常见却棘手的问题:如何让导航栏这类元素在容器宽度不固定时,依然能水平居中。作者从实际开发场景出发,系统梳理了五种主要思路。 文章首先展示了经典的“绝对定位+相对定位”方案,通过双重定位来抵消偏移,但也提醒了溢出内容可能被挤压的潜在风险。接着介绍了更简洁的Flexbox解法,一行`justify-content: center`便能解决问题,尽管需要考虑旧版浏览器的兼容性。此外,还提到了利用JavaScript动态计算总宽度、使用浮动配合相对定位(被称为“整体右移,逐项左移”的巧妙方式),以及将列表项设为`inline-block`并利用`text-align`实现居中等方法。 每种方案都附带了具体的CSS代码片段和核心原理说明,不仅告诉读者“怎么做”,也解释了“为什么能行”。比如,指出了`margin-left: -50%`在此场景下的局限性,以及`translateX`的优势。文末以作者自身的求知经历作结,让这些技术方案更添一份实践温度。对于前端开发者来说,这是一份思路清晰、可直接参考的解决方案集。

本机暂存
IT 移动开发/ 2016-02-13 23:03:08 / 累计浏览 4,061

APP图标的色彩

这篇文章做了一件挺酷的事:用工具批量分析了应用商店里成百上千个APP图标的“支配色”,然后用色轮直观展示了不同类别、平台和排名的APP在色彩选择上的差异。 研究发现,无论是iOS还是Google Play,蓝色和红色都是绝对的主流色,构成了明显的分布群。但细节里很有意思:免费APP图标倾向使用单一颜色,而付费APP的图标则更常组合多种色彩,显得更复杂。社交媒体类APP虽然大家印象中是“蓝色的天下”,但分析显示绿色也有相当比例。游戏APP的色彩则更为丰富和分散。有意思的是,Mac应用商店的色彩分布与iOS非常相似,而Google Play的数据也印证了跨平台的这一趋势。 基于这些发现,作者给出了一个简单的设计师选择指南:想随大流就选蓝或红,想略有不同可以试试绿色,如果想彻底特立独行,那就大胆用上粉色或紫色吧。

本机暂存
IT 前端/ 2016-02-13 22:42:37 / 累计浏览 1,937

使用CSS3 will-change提高页面滚动、动画等渲染性能

这篇文章从一个实际案例出发,介绍了如何使用CSS3 `will-change`属性来解决页面渲染性能问题。 案例中,开发者使用`background-attachment: fixed`实现视差滚动时,发现页面帧率降至30 FPS,肉眼可见卡顿。文章分析了其根因在于该属性会导致浏览器进行实时计算重绘。 为解决此问题,作者分享了三个优化技巧:将`background-attachment: fixed`替换为`position: fixed`;使用`::before`伪元素承载背景图;以及关键一步——添加`will-change: transform`。文章重点解释了`will-change`的工作原理:它允许开发者提前告知浏览器元素即将发生的变化类型,从而让浏览器可以提前创建独立的渲染层并启用GPU加速,优化绘制性能。这相比于过去常用`translateZ`等3D变换来“欺骗”浏览器以触发硬件加速的hack方法,是一个更标准、更语义化的解决方案。文章在最后指出,这一属性已在主流浏览器中得到支持。

本机暂存
IT 开发者/ 2016-02-13 22:41:27 / 累计浏览 6,068

如何教会非计算机专业的女友写代码

这篇讲的是一个计算机专业男生如何系统指导金融专业女友转行前端开发并成功就业的完整经历。 作者从自身背景出发,为女友选择了适合入门且“可进可退”的前端方向,并制定了清晰的学习路径:从《Head First》系列和《JavaScript语言精粹》等书籍掌握基础语法,再通过言传身教渗透HTTP协议、网络通信等原理知识。他强调“工欲善其事”,专门为女友购置MacBook Pro以便熟悉Vim、Git等开发工具。 实践环节是关键。作者引导女友在GitHub写博客、开发小作品,并报名参加了筛选制的百度IFE前端技术学院。当基础扎实后,便鼓励她投递简历,通过面试发现不足,最终顺利获得实习Offer。过程中遇到的JS异步、闭包等难点,也被一一攻克。 文章还直面了两个常见偏见:技术是否适合女性,以及互联网行业是否过于繁忙。作者以实例论证,技术岗位对女生同样有吸引力且并不枯燥,互联网公司也存在灵活的工作选择。最后,他用自己的支持与担当,为这段转行之路画上了有温度的句号。

本机暂存
IT 开发者/ 2016-02-13 22:40:31 / 累计浏览 2,299

创业路上的那点事(一周年小记)

这篇是一位创业公司成员的一周年经验记录,分享了几个他观察到的典型现象。作者从“精英与接地气”的取舍谈起,指出创业初期需要的是能解决具体问题、适应不同阶段的“靠谱”人才,而非一味追求顶尖精英;接着强调个人价值最大化的重要性——选择加入的时机,应是自身能力最能匹配公司需求之时。 文章也剖析了创业心态与现状:盲目的乐观虽看似非理性,却比弥漫焦虑更利于团队奔跑;当前融资环境可能隐藏泡沫,而真正顺利的公司往往选择“闷声发大财”,低调发展。此外,从大公司带来的“无知优越感”、工具齐全环境对创造力的限制,都是需要警惕的思维陷阱。 作者最后回归朴素理解:创业就是一群人把一件事做成了,碰巧对社会有益、也对自己有回报。甩开膀子去干,享受过程,尽最大努力也做好最坏打算——这或许才是面对创业最实在的态度。

本机暂存
IT 后端/ 2016-02-13 22:39:39 / 累计浏览 4,760

分布式存储Seaweedfs源码分析

这篇文章对分布式文件存储系统 SeaweedFS 0.67 版本的源码进行了一次深入的解剖。作者从其基于 Facebook Haystack 论文的架构思想出发,指出 SeaweedFS 实现了“青出于蓝而胜于蓝”的改进。 文章清晰地梳理了项目的核心模块,重点剖析了其两大支柱:拓扑管理与数据存储。在拓扑层面,详解了由 DataCenter、Rack、DataNode 构成的树状结构,这正是其管理分布式 VolumeServer 的核心。而在数据存储层面,则层层递进,解释了文件唯一标识 Fid 的构成(VolumeId, NeedleId, Cookie),并深入到 Volume 文件内部的布局——SuperBlock 与 Needle 的关系。特别值得一提的是,文中对 SuperBlock 中 TTL(Time To Live)功能的实现原理进行了拆解,阐述了如何通过 Volume 级别的超时标记与清理机制来优雅地实现文件的定时删除。 整体来看,这篇文章并未停留在功能介绍,而是直击代码,帮助读者理解 SeaweedFS 如何用简洁的设计实现高性能的对象存储,对于理解分布式存储系统的工程实现很有参考价值。

本机暂存
IT 数据库/ 2016-02-13 22:29:10 / 累计浏览 3,703

MySQL DBA面试全揭秘

这篇讲的是 MySQL DBA 面试中的门道,作者从一位资深面试官的视角出发,详细拆解了面试流程和考察重点。文章指出,优秀的 DBA 人才抢手,面试需要精心设计。流程上,除了基础交流,会重点深挖简历中的技术细节和跳槽经历,以此考察候选人的真实水平、学习方法以及职业规划是否清晰。 在技术考察方面,文章以索引类型为例,展示了面试的深度。问题可能从数据结构(B+树、哈希)、物理存储(聚集与非聚集)到逻辑分类(主键、唯一索引)多个维度展开,要求候选人不仅要知其然,还要知其所以然。作者还提醒,面试是双向选择的过程,候选人也可以从面试官的提问和交流中,评估未来的团队环境和主管风格。这篇文章对准备面试的候选人和需要选拔人才的面试官,都提供了非常具体的行动指南。

本机暂存
IT 前端/ 2016-02-12 17:53:12 / 累计浏览 3,467

移动端自适应方案

这篇文章探讨了移动端页面适配的核心问题:是否需要动态调整viewport的scale,以及如何选择最合适的自适应方案。作者从css开发者大会的分享出发,深入分析了手淘、天猫和手机携程三家大型网站的实际做法。 手淘方案通过获取设备dpr,动态生成viewport并利用rem进行布局;天猫则采用固定scale=1.0,结合flex布局以iPhone6宽度(375px)为基准;手机携程相对传统,使用固定的scale配合px与百分比布局。 作者针对常见的“1px问题”和“倍图适配”需求进行了实验验证。结论是,虽然动态调整scale能精确还原设计稿的1px边线并匹配不同dpr的图片,但实现成本较高。对于大多数项目,采用固定scale=1.0的“完美视口”,并配合rem管理尺寸、flex构建布局,是一种性价比很高、足以应对多数场景的实践方案。关键在于根据项目对还原度的具体要求,在开发成本与效果之间做出权衡。

本机暂存
IT DevOps/ 2016-02-12 17:49:23 / 累计浏览 1,423

OS X 下好用的磁盘空间分析工具: ncdu

这篇讲的是在 OS X 下分析磁盘空间占用的两个选择:一个是界面精美但需要付费的图形化工具 Daisy Disk,另一个是免费、命令行风格的替代品 ncdu。 作者从不想为软件付费的“抠门”心态出发,找到了 ncdu 作为解决方案。文章将两者做了对比:Daisy Disk 用环形图直观展示空间占用,体验优秀;ncdu 则在终端运行,用键盘操作,是“命令行版的 Daisy Disk”,更符合极客口味,但扫描时不会智能跳过挂载点,需要手动添加排除参数。 文章的核心是提供了 ncdu 的实用指南:通过 `brew install ncdu` 即可快速安装。使用时,简单的 `ncdu ~` 可以分析个人文件夹,而扫描整个系统盘或外部硬盘时,则需要用 `ncdu / --exclude /Volumes` 这样的命令来排除干扰。 最终,作者认为两者各有适用场景:习惯图形界面的用户可以选择购买 Daisy Disk,而偏好命令行或预算有限的用户,ncdu 是一个高效且免费的得力工具。

本机暂存
IT 开发者/ 2016-02-12 17:47:22 / 累计浏览 1,376

开源项目的那点事

作者从近期重构CppJieba、发布NodeJieba的实践出发,分享了自己在开源社区中的几点切身感受与学习开源项目的方法。 他强调,一个重视用户体验的开源项目,往往从“简陋”但无依赖的轻量版本开始,例如他早期的CppJieba和ideawu的SSDB,都坚持不依赖第三方库以实现即装即用。在学习上,他建议开发者善于积累自己的代码片段,将小实验逐步组合成项目;同时也要“站在前人的肩膀上”,优先参考现有分析文档再阅读源码,避免低效硬啃。 作者提出了一个颇具启发性的观点:开源项目的学习价值并非由star数决定,而在于其与学习者当前工作的相关性及代码的可读性。他认为,阅读与自己领域相近、核心逻辑清晰的源码,更能带来实际灵感;而一味追求明星项目或高性能代码,有时反而因牺牲可读性而难以深入。 最后,他呼吁回归开源初衷——即知识的分享与传播,而非过分功利化。整篇文章将个人开发经历与开源学习心得紧密结合,对初入社区或希望提升源码阅读能力的开发者都有切实的参考意义。

本机暂存
IT 开发者/ 2016-02-12 17:46:25 / 累计浏览 3,696

不要总是选择困难模式

这篇文章通过一个研究生的成功转型案例,讨论了技术初学者在职业起步阶段的策略选择。作者从一位非计算机背景、基础薄弱的同学咨询职业规划的邮件切入,该同学明确以iOS开发为切入目标,优先打造竞争力而非全面补基础,最终顺利拿到阿里和腾讯的Offer。 文章由此引出核心观点:技术学习如同游戏,存在“困难模式”(如C/C++基础架构方向)与“简单模式”(如前端、移动端等方向)。对于基础不扎实的应届生,作者建议优先考虑需求量大、机会更多的“简单模式”赛道,而非盲目挑战门槛高、竞争激烈的红海领域。文中以2010年安卓与嵌入式的选择对比为例,指出了盲目追求“高级难度”可能带来的长远遗憾。 作者进一步以多位技术大佬的实际选择为例——如鸟哥专攻PHP性能优化而非GCC、AstaXie用Go开发框架而非Erlang——说明即便是高手,也会精明地选择投入产出比更高的方向。这篇文章并非否定挑战高难度的价值,而是提醒读者:清晰的自我定位和务实的路径选择,有时比一味“迎难而上”更能通向成功。

本机暂存
IT 前端/ 2016-02-12 17:44:49 / 累计浏览 1,840

ExtJS怎么刷新Grid表格前面的行序列号

这篇讲的是ExtJS开发中一个常见的小痛点:Grid表格使用了RowNumberer列来显示行序号,但当删除中间某行后,序列号会断档(比如变成1、2、4),无法自动重排为1、2、3。 问题的根源在于数据视图在数据变更后没有及时刷新。文章给出的解决方案非常直接且高效:在删除操作的事件处理函数中,在调用`store.remove()`移除数据后,紧跟着调用`grid.getView().refresh()`。这一行代码会强制Grid的视图进行重绘,从而让RowNumberer列基于当前的Store数据重新计算并显示连续的序列号。 这种处理只刷新视图,不重新加载数据,操作轻量且针对性强,是解决此类UI刷新问题的标准做法。对于使用ExtJS进行表格开发的工程师来说,这个技巧能快速修复因数据增删导致的序号显示不全问题。

本机暂存
IT 前端/ 2016-02-12 17:44:22 / 累计浏览 1,701

js代码因逗号不规范导致IE不兼容的问题

作者分享了一个在前端开发中容易遇到的兼容性陷阱:代码在Chrome、Firefox中运行正常,但在IE中却抛出“Expected identified, string or number”的错误。经过排查,根因是JavaScript对象字面量的最后一个属性后多写了一个逗号(trailing comma),这是老版本IE无法容忍的语法不规范。 文章展示了如何用Eclipse的正则搜索(`,\\s*}`)来定位这类问题,但也指出了该方法对注释中的代码无效的局限。因此,作者更推荐使用Spket这类IDE插件,它能在编码阶段实时检查并标记出代码中的不规范之处,帮助开发者从源头避免问题。此外,文章还提醒,像`console`对象这类在IE中不存在的API也是常见的兼容性问题源,需要一并清理。 总的来说,作者从实际项目报错出发,不仅给出了具体的排错和代码规范化工具,也强调了对运行时环境差异保持警惕的重要性。处理已知的兼容性“坑”很重要,而借助工具养成规范的编码习惯,是更根本的预防之道。

本机暂存
IT 安全/ 2016-02-11 23:22:08 / 累计浏览 3,551

Android安全–一次简单的脱壳Dump dex实践

这篇讲的是作者对一个加壳Android应用进行手动脱壳、还原出完整dex文件的完整实践。APK的dex文件只有1KB多,显然代码被加密保护了,真正的内容需要在运行时解密和动态加载。 作者的核心思路是“在运行时拦截解密后的代码”。他没有用一键脱壳工具,而是通过经典的调试器组合来亲手捕获。具体流程是:先部署IDA的android_server进行远程调试,通过adb和jdb完成进程附加,然后在关键的动态链接库`libdvm.so`中,找到了负责加载dex文件的`dvmDexFileOpenPartial`函数并下断点。这个函数在程序运行时会被调用,其参数就包含了内存中解密后的dex文件地址。 断点命中后,通过查看寄存器R0的值,就能在内存中看到完整的dex数据结构。最后,利用一个简单的IDC脚本,根据dex文件头部记录的文件大小信息,将这段内存区域完整地dump出来,就得到了一个可用的dex文件。 整个操作像一次精密的追踪:从静态分析发现异常,到动态调试定位关键函数,再到内存取证完成“抓捕”。它演示了一种不依赖特定脱壳工具、而是基于对Android运行时机制理解的通用思路。

本机暂存
IT 开发者/ 2016-02-11 23:17:56 / 累计浏览 6,338

一个程序员的血泪史

这篇讲的是一个程序员早期辗转于不同体制与职场环境的真实经历。作者从毕业后误打误撞进入偏远山区的电力施工现场做起质检开始,记录了那里单调生活背后粗粝的社交生态——正是这份触目惊心的体验,让他下定决心转行。 带着仅剩的1000元来到大城市,他从月薪2500的PHP工程师做起,住地下室、啃大饼,经历了公司拖欠工资、老板画饼、公司股权纠纷甚至警察上门的闹剧。随后通过熟人介绍进入一家“知名电视台的网络中心”,本以为迎来稳定,却遭遇了长达数月不发工资、拒绝签订合同、以“实习”名义变相克扣薪酬的体制内困局。面对高高在上的编制壁垒和负责人的蛮横态度,他最终选择申请劳动仲裁,凭借一份关键录音和精准的时效把握,成功维权拿到了应得的报酬。 这段充满波折的职场史,像一部微缩的行业发展侧写。它揭示了在职业选择初期,平台、制度与人性可能带来的复杂挑战,也映射出个体在权益受损时依靠法律途径自我救济的必要性与勇气。作者的经历提醒每一位技术从业者,对环境保持清醒判断,同时要珍视并懂得捍卫自己的正当劳动权益。

本机暂存
IT DevOps/ 2016-02-11 23:09:31 / 累计浏览 2,655

在Linux下搜索包含特定字符串的文件列表

这篇讲的是在Linux下搜索文件内容时,一个很实际的踩坑经历。作者原本习惯用 `find . |xargs grep` 来查找包含目标文字的文件,这个组合拳在大多数情况下都很好用。但最近他发现了一个盲区:当要搜索的字符串是Unicode编码时,这个方法会失效,导致查找不到。 问题的根因在于,`grep` 默认处理的是本地编码(如ANSI),对于以Unicode形式存储的字符串无能为力。作者分享了他的解决方案:将命令替换为 `find . |xargs strings -e l -f |grep "文字"`。这里的关键是利用了 `strings` 命令。其中,`-e l` 参数专门用于从二进制文件中提取Unicode字符串,而 `-f` 参数则会在每个匹配的字符串前打印出文件名,方便直接定位。这样,通过一个巧妙的管道组合,就解决了原先的编码识别问题,让文件内容搜索在混合编码环境下依然可靠。

本机暂存
IT 设计/ 2016-02-11 23:08:31 / 累计浏览 2,378

用户并不是小白,她只是在等待被服务

这篇讲的是互联网产品设计的核心理念。作者开篇就抛出一个犀利的观点:用户从来都不是“小白”或傻瓜,他们只是在等待被服务,渴望享受被服务的过程。 基于这个认知,文章层层递进。作者将产品设计比作一个响应用户需求的“黑盒子”,但强调这个服务必须是正向的、让人愉悦的。为此,设计者需要先以“仆人视角”理解用户感受,再切换“上帝视角”来梳理和取舍需求,这其中逻辑能力至关重要。 文章更进一步探讨了服务中那些微妙的“感觉”。比如,通过一个“递水时是否主动帮忙拧开”的面试题,说明服务意识超越了单纯的逻辑流程。作者还用食堂、高档餐厅和肯德基不同的“劝离”方式作为比喻,形象地展示了如何在产品中礼貌而得体地引导用户行为。 最终,作者认为这种服务意识源于对场景的深刻理解与还原,并上升到了“讲故事”的高度。好的产品本身就是在向用户讲述一个动人的故事,最高境界甚至能传递出“情怀”。整篇文章用生活化的例子解构了产品设计中那些难以言传的体验部分,对从业者如何提升用户同理心很有启发。

本机暂存
IT 前端/ 2016-02-11 23:07:39 / 累计浏览 1,286

了解CSS中的@ AT规则

这篇讲的是CSS中那些以@字符开头的“AT规则”,作者从日常编码中容易忽略的细节入手,系统梳理了它们的分类与用途。文章将AT规则分为“常规规则”和“嵌套规则”两类:前者如`@charset`、`@import`和`@namespace`,主要处理编码、文件导入与命名空间等基础设置;后者如`@media`、`@font-face`和`@keyframes`,则涉及响应式设计、自定义字体和动画等现代CSS的核心功能。 作者不仅列举了规则,还点出了实际应用中的注意事项。例如,指出`@charset`在现代Web项目中常被HTTP头或meta标签覆盖而显得多余;`@import`虽能实现CSS模块化,但因其阻塞渲染的特性,在生产环境并不推荐,更适合搭配构建工具在本地开发使用;对于尚处草案阶段的`@document`规则,也坦诚说明了当前浏览器支持有限的现状。 通过具体的代码示例和场景说明,文章将抽象规则落到了实处,比如用`@media`实现Retina屏适配、打印样式定制甚至IE浏览器Hack。对于想厘清这些符号背后逻辑、提升CSS工程化能力的开发者而言,这篇梳理提供了清晰的脉络。

本机暂存
IT 后端/ 2016-02-11 23:06:23 / 累计浏览 2,795

excel打开csv文件乱码的解决方法

这篇文章讲的是许多人在用Excel处理CSV文件时都会遇到的“乱码”坑。作者从一个实际问题出发:一个用程序导出的TXT文件,记事本打开一切正常,但把扩展名改成CSV后,用Excel打开不仅汉字乱码,连数据分列都识别不了。 问题的根源其实很直接——编码不匹配。在简体中文环境下,Excel打开CSV文件时默认使用的是ANSI编码,而很多现代程序导出的文件则是UTF-8编码。当Excel试图用“旧地图”去解读“新文字”,乱码和列错位就发生了。 解决办法简单有效:用记事本打开这个乱码的CSV文件,通过“另存为”功能,将编码从UTF-8明确选择为“ANSI”,保存后再次用Excel打开,问题就迎刃而解了。文章不仅给出了“三步走”的操作方案,还顺带科普了ANSI、Unicode和UTF-8这几种常见编码方式的核心区别与适用场景,帮助读者知其然也知其所以然。对编码原理感兴趣的读者还能读到更深入的讲解。

本机暂存
IT 前端/ 2016-02-11 23:04:15 / 累计浏览 2,323

html中frameset、frame、iframe框架用法小结

这篇文章深入梳理了HTML中frameset、frame和iframe三个框架标签的用法与关键差异。作者通过多个代码示例,展示了如何用frameset的cols和rows属性划分浏览器窗口,构建多栏页面布局,同时特别提醒frameset不能与body标签共存这一常见误区。对于frame标签,它通常作为frameset的子元素加载不同页面,文章还强调了添加noframes标签来处理浏览器兼容性,确保不支持框架的用户能看到提示信息。 文章对比指出,iframe与frameset不同,它可以在普通HTML文档中直接嵌入外部页面,更加灵活独立。一个值得注意的细节是,在使用iframe设置height为100%时,必须确保其父容器也定义了高度,否则样式可能失效——这是实际开发中容易踩坑的地方。示例中演示了如何结合frame和iframe构建左侧导航栏和右侧内容区的结构,虽然这种框架技术在现代Web中使用较少,但对于维护遗留系统或特定内嵌场景仍有实用意义。

本机暂存