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

最新文章

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

IT DevOps/ 2015-02-14 14:09:19 / 累计浏览 2,779

监控进程

这篇讲的是Linux下如何更灵活地监控和管理进程。当服务因资源耗尽、程序崩溃或误操作意外终止时,虽然系统自带的SysVinit、Upstart或Systemd能实现基础重启,但应对“CPU占用超标就重启”或“同时管理数百个PHP Worker”这类复杂场景就显得力不从心。 文章随后深入对比了Monit和Supervisor两款专业工具。Monit通过轮询进程状态,能实现基于资源阈值的智能监控与重启,比如配置其在Nginx的CPU使用率连续5次超过80%时自动重启。Supervisor则擅长批量管理同类进程,可以轻松配置并维持100个PHP Worker进程的常驻数量,它更专注于进程的生命周期管理。 不过,两者各有特点。Monit更像一个灵活的资源监控与响应器;Supervisor则是强大的进程组管理器,但通常要求被管理的进程以前台模式运行。文章还巧妙地解决了一个递归问题:如何监控监控者本身?通过让SysVinit来“守护”Supervisor进程,利用系统的初始化能力构建了一道最后的防线。

本机暂存
IT 前端/ 2015-02-14 14:07:45 / 累计浏览 2,306

jquery js 动态加载 js文件

这篇技术文章解决了一个常见痛点:在网页中动态加载JS文件时,直接使用jQuery append script标签会失败。文章没有停留在问题表面,而是提供了两种清晰实用的解决方案。 作者首先演示了利用jQuery内置的`$.getScript()`方法,一行代码即可加载外部脚本,并可附带回调函数处理后续逻辑,非常适合快速集成。更核心的部分,是作者手写了一个原生JavaScript函数`loadScript()`。这个函数巧妙地创建了script元素,通过监听`onreadystatechange`(兼容IE)和`onload`事件来确保脚本加载完成后再执行回调,解决了跨浏览器兼容性问题,并且无需依赖jQuery。 两种方法各有侧重:jQuery方案代码简洁、开发效率高;原生JS方案则掌控力更强,适用于需要精细控制或不能依赖jQuery的场景。文章用可直接运行的代码片段对比了实现,让读者能根据项目需求快速做出选择。对于前端开发中模块化按需加载的场景,这是一份非常直接的参考。

本机暂存
IT 前端/ 2015-02-14 14:05:14 / 累计浏览 2,147

CSS深入理解流体特性和BFC特性下多栏自适应布局

这篇讲的是CSS布局中一个经典而重要的话题:如何利用元素的基础特性来构建灵活的多栏自适应页面。作者没有去罗列一堆实现方法,而是深入剖析了两种底层原理——块状元素的“流体特性”与“BFC(块级格式化上下文)特性”,并对比了它们在自适应布局中的实际表现与差异。 文章首先解释了什么是流体特性:块状元素默认会自动填满容器,但其内容区域会响应margin、padding或border而变窄。利用这一点,配合浮动或绝对定位,就能做出左定宽、右自适应的布局。但作者也指出,这种方法的不足在于,开发者必须精确知道固定栏的尺寸,才能设置对应的间距,缺乏灵活性和复用性。 于是,文章的重点转向了BFC特性。当元素触发BFC(例如设置`overflow: hidden`)后,它会生成一个独立的格式化区域。关键在于,当这个BFC元素与浮动元素相邻时,它会自动避开浮动元素的区域,但依然保留填满剩余空间的流体特性。这便催生了更智能的解决方案:只需给浮动元素设置`margin-right`,BFC元素就能自动适应并保持间距,无需关心其具体宽度。 作者总结道,相比于纯流体布局,BFC自适应模块更加健壮、容错性更强,并且可以抽象成像`.ovh`(设置`overflow: hidden`)这样的通用类,在整个项目中复用,真正实现了布局的解耦和高效。文章通过代码示例和形象比喻,清晰地传达了BFC这一特性在解决实际布局问题时的巧妙与实用。

本机暂存
IT 开发者/ 2015-02-14 14:03:34 / 累计浏览 9,189

一个大二学生有关如何成为一名软件工程师的疑问及答复

这篇文章记述了一位资深工程师对一位迷茫的大二学生的答复。学生困惑于课堂所学(如C和Java)与实际软件工程师岗位要求之间的差距,不知如何规划发展路径。 作者首先共情了这种校园学习与产业需求脱节的普遍感受,并指出“终身学习”对软件行业的必要性。他清晰地拆解了软件工程师的核心工作:一是开发,涵盖需求评审、文档编写、代码实现、测试与版本提交;二是维护,包括修复测试bug、解决现场问题及制作升级包。 基于此,作者总结了工程师需具备的能力:硬能力(专业基础、编码与文档能力)和软能力(分析解决问题、沟通、抗压等)。对于在校学生,他建议通过多动手编程、参与项目、社团活动和假期实习来有意识地培养这些能力,制定个人化的学习计划。 回复并未停留在说教,而是通过拆解职业全景,将“如何成为软件工程师”这个模糊问题,转化为具体、可行动的能力培养清单。希望这位同学的疑问,也能给其他迷茫中的读者带来一些方向感。

本机暂存
IT 前端/ 2015-02-08 23:30:56 / 累计浏览 2,294

table-cell的手机应用场景

作者从CSS垂直居中这个常见需求切入,对比了包括margin负值、position+margin在内的多种传统方案。这些方法往往需要预先知道元素高度,或在内容溢出时出现布局问题,对于移动端尤其是内容动态的H5页面来说并不友好。 文章重点介绍了display:table-cell这个被许多人忽略的属性值。它在PC端因兼容性问题(仅支持IE8+)而鲜少使用,但在移动端现代浏览器环境下,反而能发挥独特价值。该属性使元素表现得像表格单元格(td/th),配合父元素设置为display:table和vertical-align:center,可以实现真正的、内容自适应的垂直居中,且无需依赖固定高度。 作者通过代码示例和效果对比指出,table-cell更适合单列布局,多个元素使用时会像表格单元格一样并排显示,margin属性也会失效。因此,它尤其适用于移动端全屏单页应用的垂直居中场景,为开发者提供了一个在特定环境下更灵活、简洁的布局思路。

本机暂存
IT 前端/ 2015-02-07 21:05:04 / 累计浏览 2,150

css3:背景属性background-origin/clip详解

这篇文章深入讲解了CSS3中两个容易被混淆但十分实用的背景属性:背景裁剪(background-clip)与背景起点(background-origin)。作者从边框、填充和内容三个盒子模型的角度,清晰剖析了它们如何分别控制背景的“绘制区域”与“定位起点”。 文章指出,`background-clip` 负责决定背景(颜色或图片)最终呈现的边界,相当于对背景画布进行裁剪;而 `background-origin` 则决定了背景图片从哪个参考点开始铺排。虽然两者都使用 `border-box`、`padding-box` 和 `content-box` 这三个相同的属性值,但表达的含义截然不同。作者通过“给桌子铺桌布”的生动比喻,帮助读者理解 `origin` 作为铺布起点的含义。 文中还特别强调了两个实用注意点:一是当使用 `background-attachment:fixed` 时,`origin` 属性将失效;二是在元素有非零边框宽度时,结合不同的 `clip` 和 `origin` 设置,会导致背景图片的可见区域产生差异。文章最后坦言,这两个属性在实际开发中或许不常用,但在设计上确实需要精细控制背景与边框关系的场景下,它们便能派上用场。

本机暂存
IT DevOps/ 2015-02-07 21:03:52 / 累计浏览 2,311

Linux系统监控工具之vmstat详解

这篇讲的是Linux系统监控工具vmstat的深度使用指南。作者从虚拟内存的运行原理出发,详细拆解了vmstat命令的用法,并重点解读了输出中每一个字段(如进程队列r和b、内存和交换区的si/so、CPU的us/sy/id/wa等)的实际含义与诊断价值。 文章最实用的部分是结合了三个不同负载场景的案例演示。作者特别指出了一个经验细节:vmstat的首次输出往往不准确,需要观察后续结果。通过对比空负载、高CPU使用以及高CPU与高内存使用三种情况下的输出,清晰地展示了如何从数字中发现瓶颈。例如,在高内存压力案例中,swap使用率高达80%、CPU的wait%达到70%,由此推断出是内存不足导致频繁的磁盘交换,最终拖慢了整体性能。 通过升级内存至8G前后的对比数据,文章直观呈现了问题解决后的性能回归正常。整体而言,这篇文章不仅教会读者使用一个工具,更演示了如何通过关键指标进行系统健康度的“体检”与故障推断。

本机暂存
IT 后端/ 2015-02-07 21:02:18 / 累计浏览 4,550

加速WEB访问:使用DNSmasq与squid代理并过滤广告

这篇讲的是在 CentOS 上搭建一套兼具加速与净化功能的网络网关方案。核心在于结合 DNSmasq 和 Squid 这两个经典工具,实现从 DNS 解析到网页访问的全链路优化。 作者首先配置了 DNSmasq,不仅利用其缓存功能加速域名解析,还通过定制化的地址记录,将常见广告域名指向本地,从源头拦截了大量广告请求。随后,详细讲解了 Squid 代理的安装与配置,重点区分了需要客户端手动设置的正向代理,和对用户完全透明的透明代理。 文章的一个实用亮点在于,指出了透明代理默认只能处理 HTTP 协议的局限性,并提供了通过开启系统 IP 转发、并配置 iptables 防火墙规则来重定向流量的完整解决方案,最终实现了无需客户端配置即可加速 HTTP 访问。此外,文章还分享了通过外部列表自动更新 Squid 屏蔽规则来持续过滤广告的脚本方法。 整体而言,这套方案能为小型网络提供 DNS 加速、网页缓存和广告过滤的多重效果,对于希望低成本提升内部网络体验和纯净度的读者来说,是一个步骤清晰、可操作性强的实践参考。

本机暂存
IT 前端/ 2015-02-06 22:27:24 / 累计浏览 6,031

我希望我知道的七个JavaScript技巧

这篇讲的是,一位从C#转向JavaScript的开发者,总结出的几个曾让他困惑不已、却又极其重要的语言怪癖。作者并非罗列所有技巧,而是聚焦于三点深入剖析:首先是令人意外的相等运算符,`==` 会进行隐式类型转换,常带来意想不到的结果,而更严格的 `===` 则要求类型与值都一致,是避免陷阱的首选。其次是点号与括号的访问方式,虽然点号是主流,但括号能支持动态属性名,这为重构复杂的 `switch` 语句为更灵活的查找表提供了可能。 而最核心的困惑点,莫过于 JavaScript 中的函数上下文(`this`)。作者清晰地拆解了三条关键规则:默认情况指向全局对象;作为对象方法调用时指向该对象;以及在事件处理等异步回调中,`this` 往往会意外地指向触发事件的 DOM 元素,而非预期的对象。这些差异正是许多莫名 bug 的根源。理解这些“怪癖”,能帮助开发者从底层看懂代码执行的逻辑,写出更健壮、可预测的 JavaScript。

本机暂存
IT 前端/ 2015-02-06 22:16:24 / 累计浏览 3,929

小tip:纯CSS让overflow:auto页面滚动条出现时不跳动

这篇讲的是前端开发中一个很常见但恼人的体验问题:当页面内容动态加载导致滚动条出现时,采用 `margin: 0 auto` 的水平居中布局会发生“跳动”。作者指出,传统的解决方案,如直接给 body 加 `overflow-y: scroll`,虽然能阻止跳动,但会在内容未超一屏时强行显示一个丑陋的滚动条,破坏了现代浏览器的视觉设计。 文章的核心亮点在于,利用 CSS3 的 `calc` 计算函数和视口单位 `vw`,提供了一个极其简洁的纯 CSS 解决方案。只需在主体的父容器上添加一行 `margin-left: calc(100vw - 100%);`,即可让页面在任何情况下(包括滚动条出现或消失时)都保持居中,且滚动条仅在内容确实溢出时才自然出现。 作者详细解释了原理:`100vw` 包含了浏览器视口的完整宽度(含滚动条),而 `100%` 是元素的可用宽度(不含滚动条),两者之差恰好就是滚动条的宽度。这个方案兼容 IE9+ 及现代浏览器,并且作者还贴心地给出了在窄屏幕下可能需要添加媒体查询进行响应式处理的建议。对于追求页面平滑与布局稳定的前端开发者来说,这是一个非常实用且优雅的技巧。

本机暂存
IT DevOps/ 2015-02-06 22:13:57 / 累计浏览 4,202

Linux系统的CPU使用率和Load

这篇文章详细拆解了Linux系统中两个核心但常被混淆的性能指标——CPU使用率与系统负载(Load)。作者没有停留在概念定义,而是深入剖析了它们的统计口径与内在关联。 文章指出,CPU使用率直观反映CPU时间片的占用情况(如%user, %system, %iowait等),可通过top、sar等命令查看。而Load则是一个更综合的“压力”度量,它不仅包含正在运行和等待运行的进程(R状态),还包含了处于不可中断睡眠状态(D状态,通常因等待I/O)的任务,这是两者最关键的区别。 作者通过具体场景澄清了常见的困惑:当系统运行CPU密集型程序时,CPU使用率和Load通常会同步升高;但若是I/O密集型任务或内存不足触发Swap,你可能会看到Load值很高,而CPU使用率却并不高。对于“多少Load算高”,作者给出的经验法则是,当Load持续接近或超过CPU核心数时,就值得深入排查。 文章最后推荐了sar -u、sar -q等实用命令组合,并提供了官方手册和延伸阅读资料,帮助读者建立更完整的认知。对于想厘清性能监控基础概念的运维和开发人员,这篇内容提供了清晰、实用的梳理。

本机暂存
IT 后端/ 2015-02-06 22:12:17 / 累计浏览 2,156

java中文乱码解决之道(四)—–java编码转换过程

这篇文章深入拆解了Java程序从编码到输出的完整数据流,帮你从根源上理解中文乱码的产生。作者从一个.java文件被编辑器保存开始讲起,系统默认编码(如GBK)决定了它的存储格式。接着,javac编译器会读取这个文件,将其转换为JVM内部统一的Unicode表示,并存入.class文件。 真正的复杂性发生在运行时。文章细致地对比了三种典型场景:在命令行Console运行时,输入输出都依赖于操作系统的`file.encoding`;在Servlet/JSP中,容器接收客户端数据默认使用ISO-8859-1编码解码,输出时也默认按此编码发送,这就为中文传输埋下了隐患;而通过JDBC操作数据库时,驱动默认也会用ISO-8859-1来转换Unicode数据。 通过拆解这一步步的编码“接力”,文章揭示了问题的核心:数据在不同环节流转时,如果使用的编码字符集不一致且未显式指定,乱码就必然发生。理解了这个从文件系统、编译器到运行时容器的全链路编码过程,你才能真正抓住解决Java中文乱码的“命门”,而不仅仅是记住几个转换代码的补丁。

本机暂存
IT 后端/ 2015-02-06 22:10:40 / 累计浏览 2,161

java中文乱码解决之道(三)—–编码详情:伟大的创想—Unicode编码

中文乱码问题的根源往往在于不同编码体系的碰撞。这篇文章聚焦于编码史上的关键一步——Unicode编码的诞生与核心设计。作者从各国各自为政的编码方案导致的信息混乱讲起,解释了Unicode如何以“字符大容器”的理念,为全球每个字符赋予唯一二进制编码,从根本上为跨语言、跨平台文本处理铺平了道路。 文章并未止步于概念,而是深入剖析了Unicode的实现细节。它重点对比了UTF-8、UTF-16、UTF-32等主流转换格式,并着重讲解了当前最流行的UTF-8编码。通过汉字“严”的编码实例,清晰展示了Unicode码点到UTF-8变长字节序列的转换规则。此外,文中还探讨了字节序(大端/小端)问题及其标识方法,并借助Windows记事本中同一字符在不同编码(ANSI、Unicode、UTF-8)下的十六进制存储对比,直观地揭示了它们在实际存储中的差异。

本机暂存
IT 后端/ 2015-02-06 22:09:37 / 累计浏览 3,013

java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**

这篇讲的是字符编码的“地基”怎么打。作者从计算机如何存储文字这个最基本的问题出发,系统梳理了编码、字符、字符集这些核心概念,重点对比了为西欧语言设计的ASCII和为汉字设计的GB系列编码的根本差异。 ASCII用1个字节表示128个字符,完美覆盖英语字母和符号。但汉字数量庞大,ASCII的“小房子”根本住不下。于是中国的GB2312标准采用双字节编码,用“两个大于127的字节”组合出超过6000个常用汉字,还巧妙兼容了ASCII。随后GBK和GB18030不断扩展,GB18030更采用单字节、双字节、四字节混合编码,终于将少数民族文字等也纳入其中,成为国家强制标准。 文章清晰地展示了编码标准如何随着需求而演进,从ASCII的128个字符到GB18030的庞大字符集,核心就是解决“如何用有限的数字组合,表示世界上尽可能多的文字”。这种从基础出发的梳理,能帮你彻底理解中文乱码的历史根源。

本机暂存
IT 后端/ 2015-02-06 22:08:04 / 累计浏览 3,790

java中文乱码解决之道(一)—–认识字符集

这篇讲的是Java开发中常见的中文乱码问题,但它并没有直接跳进解决方案,而是从更底层的字符编码原理出发。作者从计算机如何识别和存储文字讲起,解释了为什么不同编码体系(如ASCII、GB2312、GBK、Unicode)会共存,以及Java内部使用Unicode编码与外部环境交互时,编码转换步骤出错是产生乱码的根本原因。 文章对几种关键编码做了通俗的对比:ASCII用一个字节处理西欧字符;GBK和GB18030通过双字节或可变字节方案扩展了中文支持,解决了生僻字显示问题;而Unicode(特别是UTF-8)则以变长编码实现了跨语言、跨平台的统一标准。作者点明了UTF-8是当前互联网上最主流的Unicode实现方式。 作为系列开篇,本文的目标是先帮读者建立对字符集的清晰认识,为后续具体排查和解决乱码问题打下基础。内容虽然涉及不少编码细节,但讲解循序渐进,适合遇到此类问题想探本溯源的开发者。

本机暂存
IT 前端/ 2015-02-06 22:06:06 / 累计浏览 14,851

图片动态局部毛玻璃模糊效果的实现

作者从一个可拖动的模糊方块效果出发,拆解了“图片动态局部毛玻璃”这一视觉特效的核心实现。原理很直观:用一个带有模糊滤镜(CSS3 `filter: blur()`)的局部覆盖层,叠放在原始清晰背景图之上,拖动覆盖层即可实现动态局部模糊。 关键难点在于如何让模糊层与背景图精准对齐,文章给出了两种巧妙方案:一是通过JavaScript动态计算并调整覆盖层的 `background-position`;二是利用 `background-attachment: fixed` 的特性让背景图相对视口固定,从而免去计算,但后者仅适用于无滚动的场景。文章进一步展示了该技术在文字模糊、以及模拟iOS毛玻璃效果中的潜力。 最后,作者提供了一个全兼容(支持IE7+及现代浏览器)的实战案例——百度图片首页的局部动态模糊,并分享了其利用SVG `foreignObject` 将页面内容转换为图片来实现更复杂模糊效果的思路。

本机暂存
IT 后端/ 2015-02-06 22:05:02 / 累计浏览 3,611

nginx location在配置中的优先级

这篇讲的是Nginx中`location`指令的优先级规则,一个看似简单实则容易踩坑的配置细节。作者从常见的配置困惑出发,系统对比了四种`location`表达式类型:精确匹配(`=`)、前缀停止匹配(`^~`)、正则匹配(`~`和`~*`)以及普通前缀匹配,并清晰地给出了它们的优先级排序。 文章的核心价值在于明确了“配置顺序影响不大,表达式类型才是关键”这一原则,并用具体的请求路径示例,比如请求`/images/1.gif`为什么命中`^~`而非正则,来直观展示匹配逻辑。理解这套优先级体系,能帮你精准控制请求路由,避免因配置不当导致的意外行为或安全漏洞。 对于需要精细管理反向代理、静态资源或错误页面的Nginx用户来说,搞清楚这套规则能避免很多排查时的“想当然”。

本机暂存
IT 后端/ 2015-02-06 22:03:03 / 累计浏览 3,009

一起空指针引发的程序问题的排查过程

这篇讲的是一个空指针引发的程序崩溃案例,作者从一次测试中的突发崩溃出发,详细还原了完整的排查过程。 问题现象是程序在某个功能函数中崩溃,初步日志显示崩溃发生在处理数据库超时异常的流程中。通过分析堆栈和参数,排查迅速聚焦到崩溃行的具体代码:一个指针变量 `pReq` 被用来访问结构体成员,但该指针本身可能有问题。 根源在于一个细节:在向数据库发送消息时,传入的 `para` 参数是空指针且长度为0。这导致在后续复用存储空间的 `DlgBuf` 中,对应的 `para` 字段未被赋值,依然是初始化时的空指针。当数据库无应答触发超时处理时,程序用同一个序列号去取这个空指针并试图解引用,自然就崩溃了。作者通过修改调用代码,传入有效的结构体指针进行验证,问题得以解决。 这个案例很典型,它揭示了在C语言中对指针“先检查、后使用”的必要性,尤其是在异常处理和超时等非主流程路径上。文章最后的总结经验——对重要指针务必校验非空,将其视为一种异常保护手段——对处理类似底层内存问题很有参考价值。

本机暂存
IT 后端/ 2015-02-06 22:02:17 / 累计浏览 1,898

Java修饰符类型(public、protected、private)小结

这篇讲的是Java开发者必须掌握的“看家本领”之一:访问修饰符。 文章系统地梳理了public、private、protected以及默认(package-private)这四种修饰符的核心差异。作者没有停留在概念层面,而是清晰地指出了它们各自在“能见度”上的根本区别:从允许跨包访问的public,到仅限类内部使用的private,再到专为子类设计的protected,以及限制在同包内的默认级别。 更实用的部分在于,文章分别结合类、变量和方法这三个核心场景,用表格的形式具体说明了每种修饰符的应用效果和细节。例如,它强调了被private修饰的构造器的特殊用途,以及protected变量允许子类跨包访问的特性。对于理解Java面向对象编程中的封装原则和API设计,这篇文章提供了一份简洁明了的速查指南。掌握这些修饰符的合理运用,是编写出健壮、安全且易于维护的Java代码的基础。

本机暂存
IT DevOps/ 2015-02-03 22:19:33 / 累计浏览 1,809

CentOS配置vsftpd服务器

这篇文章记录了作者在CentOS上配置vsftpd、搭建允许匿名用户上传下载的FTP服务器时,遇到并解决的三个典型故障。 首先是上传时遇到“550 Permission denied”错误,根源在于配置文件中未开启写入权限。其次,启动时出现“500 OOPS: refusing to run with writable anonymous root inside chroot”的报错,这是一个安全限制,原因是FTP根目录对匿名用户拥有写权限,将其所属权改回root后问题解决。最后,上传的文件无法下载,通过调整`anon_umask`参数从默认的077改为022,赋予文件其他用户可读的权限,才得以解决。 作者在排查过程中参考了`man vsftpd.conf`手册,这对于理解配置项的含义和默认值非常有帮助。文中提供的最终配置文件也值得作为参考。这些从实际配置中总结出的经验,对于其他需要搭建类似FTP服务的运维人员来说,能直接避开常见的权限与安全配置陷阱。

本机暂存