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

最新文章

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

IT 前端/ 2015-02-03 22:17:55 / 累计浏览 2,434

小tip:CSS计数器+伪类实现数值动态计算与呈现

这篇讲的是如何用纯CSS实现动态计数和计算,完全不需要JavaScript的参与。作者从CSS计数器的基本用法出发,展示了它与伪类(如`:checked`)结合后产生的有趣化学反应。 文章通过两个具体Demo来演示这种能力:第一个是一个“冰淇淋选择器”,页面会实时显示你勾选了多少种;第二个是一个数值计算小游戏,只有当复选框组合的运算结果恰好为72时,才会显示成功提示。这两个案例都仅依靠HTML结构、CSS计数器(`counter-reset`与`counter-increment`)以及选择器的状态判断来完成。 核心实现原理很精巧:通过为不同的复选框状态设定不同的计数增量(例如+64、-32),让计数器承担了“累加器”的职责。再利用相邻兄弟选择器和`:checked`状态组合,就能在CSS层面“判断”出最终的运算结果是否符合预期,并据此改变呈现内容。这相当于在样式层实现了基础的逻辑判断,展现了CSS在交互潜力上的另一面。

本机暂存
IT 开发者/ 2015-02-03 22:13:35 / 累计浏览 4,118

在回调和闭包中的内存泄漏

这篇讲的是事件编程中回调和闭包常见的内存泄漏陷阱。作者从自己遇到的实际问题出发,展示了 kraih 提供的一个经典案例:在闭包外声明的变量,被闭包内递归调用的子程序所引用,导致变量引用计数无法归零,内存就泄露了。 文章不仅指出了问题,还给出了具体的检测方法。比如使用 Devel::Cycle 模块可以直接找到循环引用,或者更简单粗暴地用压力测试(一个无限循环配合 ps 命令)观察内存占用(RSS)是否快速飙升。根因被归结为闭包无意中捕获了外部变量的引用。 对于修复,作者分享了两个经验:一是显式地将函数自身作为参数传递,避免它引用外部的同名变量;更推荐的方式则是将逻辑封装成类(例如用 Moo),让闭包通过 `$self` 来调用方法,这样既能清晰地管理状态,又能避免回调嵌套导致的复杂引用链。对于依赖 AnyEvent、Mojolicious 等框架进行异步编程的开发者,理解并避开这些坑至关重要。

本机暂存
IT 前端/ 2015-02-03 22:12:27 / 累计浏览 2,509

Firefox 开发者工具之调试控制台 Console 的使用

作者从自己作为Firefox深度用户的实际需求出发,写给那些不了解前端开发的运维和运维开发人员。文章围绕Firefox原生的调试控制台(Console)展开,强调了它作为一款无需插件、开箱即用的调试工具,其功能其实相当强大和好用。 内容具体讲解了Console的核心功能:它不仅可以输出与浏览器显示无关的调试信息(如用 `console.log` 打印变量或结构化对象),更在前后端分离、JavaScript主导页面逻辑的当下,成为前端沟通的关键桥梁。文章演示了几个实用技巧,包括如何用 `console.time` 与 `console.timeEnd` 测量一段代码的执行耗时,使用 `console.group` 组织具有层级关系的日志输出,以及通过 `console.dir` 深入检查某个DOM元素的属性结构。 这篇文章旨在帮助非前端背景的开发者快速上手这款内置工具,掌握几种高效的调试方法,从而更好地理解网页背后JavaScript的运行逻辑。文末附上了Mozilla官方文档的中文翻译链接,便于读者进行延伸阅读。

本机暂存
IT 后端/ 2015-02-03 22:10:54 / 累计浏览 2,986

Email精粹

这篇讲的是电子邮件背后的传输机制——当你点击“发送”后,那封简单的文本文件是如何穿越网络最终抵达收件箱的。 文章从邮件的原始结构切入:它本质上只是一段带有特定格式“headers”的纯文本。接着,作者用一段真实的SMTP交互日志,清晰展示了邮件客户端如何与邮件服务器“对话”,一步步完成投递。这里有个关键细节:SMTP协议中的`MAIL FROM`和`RCPT TO`命令,可以与你看到的邮件正文头信息(From/To)完全不同,这正是BCC(密送)能隐藏收件人的底层原因。 那么,发送邮件的服务器如何找到目标邮箱的服务器?文章解释了DNS中的MX记录的作用,并通过`dig`命令实例加以演示。邮件在服务器间每跳转一次,都会添加一条`Received`头信息,由此可以完整追溯一封邮件的旅程。 文章也讨论了SMTP协议的先天不足——它源自一个更“单纯”的年代,缺乏验证机制,这为垃圾邮件和邮件伪造提供了便利。为此,作者简要介绍了SPF、DKIM、DMARC等现代邮件认证技术,它们共同构成了验证发件人身份、提升邮件可信度的体系。整体而言,这是一篇由表及里、揭开电子邮件技术面纱的扎实科普。

本机暂存
IT 前端/ 2015-02-03 22:07:12 / 累计浏览 2,186

JavaScript:多维数组像ORDER BY一样实现多键值排序

这篇讲的是如何让JavaScript的数组排序,像SQL查询里的`ORDER BY`一样,支持按多个字段进行排序。 文章从JavaScript最基础的`sort()`方法说起,它默认只按字符序排列。但在实际开发中,我们常常需要对更复杂的数据结构——比如多维数组——进行排序,这时就需要自定义排序函数。作者清晰地拆解了这个排序函数的返回值逻辑:负值、零、正值分别代表什么。 核心在于处理多键值时的嵌套比较。文章直接给出了关键代码:通过一个简洁的三元运算符嵌套,依次比较目标列。例如,要按第5、9、3列排序,函数会先判断第一键值是否相同,不同则直接比较它;相同则继续判断第二键值,以此类推。这种逻辑完美复现了`ORDER BY col5, col9, col3`的优先级规则。 作者还特别区分了数字和字符串两种场景。数字可以直接相减,字符串则需要调用`localeCompare()`方法进行比较。这种针对性的实现说明,让方案变得非常实用。最终,通过扩展`sort()`的功能,我们能在纯前端环境中实现数据库式的灵活排序。

本机暂存
IT 算法/ 2015-02-03 22:03:04 / 累计浏览 4,564

PHP概率算法(适用于抽奖、随机广告)

这篇讲的是一个简洁高效的PHP概率算法实现,特别适合用于抽奖系统或随机广告位分配等场景。 文章的核心是一个名为 `get_rand` 的函数。它的巧妙之处在于通过逐步缩小概率范围来工作:给定一个概率数组,函数首先计算总概率值,然后从1到总值之间随机取数。如果随机数落在当前奖项的概率区间内,则返回该奖项;否则,从总值中减去该奖项的概率,并继续判断下一个。这个过程就像从一个箱子里依次摸奖,只要奖项设置好概率,算法总能准确“命中”一个结果,且时间复杂度为O(n)。 文章接着展示了如何将此算法应用到实际抽奖逻辑中。通过一个二维数组配置好各奖项及其对应的整数概率值(v值),总和越大,概率精度越高。后端通过循环提取概率值,调用算法获取中奖ID,然后将中奖结果与未中奖信息分别整理,最终以JSON格式返回给前端。整个实现清晰直接,代码量少,在数据量较大时也能保持出色的性能。

本机暂存
IT 设计/ 2015-02-03 21:56:55 / 累计浏览 1,478

产品经理都是潜伏在公司里的创业者

这篇文章探讨的是产品经理的终极职业路径——它并非一个岗位的线性晋升,而是“产品经理、创业者、投资人”三位一体的演进过程。 作者的核心观点是,这三者在本质上共享同一套底层能力:对“做什么”的判断与投资。产品经理在公司内部做功能选择,是在练习创业思维;创业者本身必须是产品的第一个负责人;而投资人则是在对项目进行更宏观的投资。三者的区别在于影响范围和杠杆大小:从改变产品/公司的局部,到掌控整体,再到用资本助力多个主体。 文章具体描绘了这条路径:从大公司产品岗位起步锻炼技能,时机成熟时可选择创业或负责独立业务,最终凭借积累转向投资。作者特别指出,好的投资人往往需要兼具创业经历和产品视角,这解释了为什么许多创业者希望拿到这类投资人的钱。这种“经历不白费、积累可变现”的视角,为技术从业者规划长期职业生涯提供了一个清晰的、以能力复用为核心的框架。

本机暂存
IT 数据库/ 2015-02-03 21:54:38 / 累计浏览 2,591

给你的rman备份集加上密码锁

备份是数据保护的最后一道防线,但如果备份集本身没有防护,泄露的风险同样存在。这篇文章从这个角度出发,讲解了如何为Oracle RMAN备份集加上密码锁,实现加密存储。 作者从数据安全的现实威胁切入,指出RMAN备份集若被窃取,其数据风险等同于生产库被入侵。解决方案是利用RMAN在10.2及以上企业版中提供的`set encryption`命令,在备份过程中直接设置加密密码。文章详细演示了从配置加密算法(支持AES128/AES256等)到执行加密备份的完整步骤,并特别提醒:加密仅对`backupset`有效,`copy`方式不支持;若需备份到带库,则必须使用Oracle Secure Backup。 最具说服力的部分是实操验证。作者创建了测试表空间和数据,进行了加密备份,随后模拟数据文件丢失并尝试恢复。结果显示,在不知道密码的情况下恢复会报错;即使设置错误密码也无法成功。只有使用正确的密码才能顺利完成恢复,这直观地证明了加密机制的有效性。 整篇文章实操性强,不仅提供了命令行的具体操作,更通过正反验证让读者清晰看到加密带来的保护效果,对于关注数据库备份安全性的DBA来说,是一个直接可落地的加固方案。

本机暂存
IT 前端/ 2015-02-03 21:53:10 / 累计浏览 2,358

table-cell的手机应用场景

这篇讲的是如何利用一个有点“过气”的 CSS 属性 `display: table-cell` 来解决移动端开发中棘手的垂直居中问题。作者从一篇老文章出发,重新审视了 `table-cell` 在当前移动场景下的价值。 文章先盘点了传统的垂直居中方案,如 `position` 配合负 `margin`,虽然兼容性好但必须预先知道元素高度,内容超出时容易“走光”。作者指出,这些方案在需要内容自适应垂直居中的移动 H5 页面里显得力不从心。 核心方案在于利用 `table-cell` 模拟表格单元格的行为。只需父元素设为 `display: table`,子元素设为 `display: table-cell` 并加上 `vertical-align: middle`,就能让内容在容器内完美垂直居中,无需知晓具体高度。作者还分享了一个关键的踩坑经验:必须避免在 `table-cell` 元素上同时使用 `position` 定位,否则效果会失效。 总的来说,这篇文章为移动端,特别是单屏滚动的 H5 活动页开发,提供了一个轻巧、可靠的垂直居中思路,非常适合那些对布局高度自适应有要求的场景。

本机暂存
IT DevOps/ 2015-02-03 21:50:28 / 累计浏览 3,670

FreeBSD常用的110条命令

这篇讲的是 FreeBSD 系统管理员和高级用户必备的“瑞士军刀”。作者将日常操作中最常用的 110 条命令进行了系统性的梳理,从系统状态监控、硬件与分区管理,到网络配置和软件安装,几乎覆盖了从开机到关机的所有关键操作环节。 文章并非零散的命令堆砌,而是构建了一个实用的排查与管理流程。例如,它详细说明了如何使用 `systat` 和 `netstat` 实时查看网络流量,如何通过 `vmstat` 和 `gstat` 深入分析内存与磁盘 I/O 状况。更重要的是,它直接切入了真实场景中令人头疼的问题——比如升级内核后无法启动、忘记 root 密码,或是系统断电后如何修复——并给出了一步步的解决方案,从进入单用户模式到使用 `fsck` 检查文件系统,操作路径清晰明确。 此外,文章也深入到软件生态的细节,不仅包含了 `ls`、`find` 等基础命令的进阶用法,还详细记录了从编译安装 Apache/PHP/MySQL 栈,到解决 XMMS 中文乱码、挂载 NTFS 分区等具体应用问题的过程。对于希望系统化掌握 FreeBSD 操作精髓的读者来说,这篇汇总无疑是一份可以直接对照执行的实用手册。

本机暂存
IT 后端/ 2015-02-03 21:46:32 / 累计浏览 2,239

组织解构,个体凸显,关系重组

这篇讲的是互联网如何从电子商务开始,逐步解构传统组织、放大个人价值,并最终推动生产关系变革的逻辑与趋势。 作者以一个简单对比切入:大型卖场受到电子商务冲击最大,而楼下小卖部却依然稳固。这背后是信息传递效率的提升直接击穿了旧的生产组织方式。随后,文章聚焦O2O的演进,从大众点评的信息连接,到团购的线上交易闭环,再到以易到用车为代表的共享经济模式,呈现了一个组织不断被解构、个人服务价值不断被凸显的进程。 文中特别辨析了易到用车与Uber在模式上的本质区别:前者在效率与个性化服务间寻求平衡,最大限度激励司机提升服务、建立个人品牌;后者则因系统派单的效率优先逻辑,在一定程度上抑制了个体的差异化价值。 作者最终指出,组织解构与个体价值凸显的趋势将渗透至生活各处。未来,鼓励个体发挥价值的平台将更受欢迎,高频服务会形成头部平台并整合长尾服务,一个全新的基于共享经济的大平台时代即将到来。

本机暂存
IT 开发者/ 2015-02-03 21:34:49 / 累计浏览 4,236

保持高效与精力的一些方式

这篇讲的是作者被同事追问“为何能高效工作12小时”后,整理出的一套个人精力与效率管理方法。他并非谈论高深理论,而是从极其具体的日常细节切入:比如固定在7:50起床、严格按时吃饭,用日历明确每件事的“人、地、目标”。 文章最精彩的部分在于对“开会”的拆解——会前定目标,会中能站不坐、能手写不打字,讨论不清的暂放,明确的立即落实责任人与时限,严控会议不超过45分钟。这套流程像给会议装上了“效率阀门”。 他还分享了一些简单却容易被忽视的习惯:睡前用“脑内复盘”享受解决问题的快感,并梳理未解决的难题;用一个不妥协的闹钟战胜赖床;多和同事开玩笑,让自己常笑。 最后作者很实在地提到,别被不切实际的鸡汤绑架,多想想如何把手头的事做顺;得意时听听批评,失意时看看鼓励。整个分享没有宏大口号,全是可复用的具体动作,核心是建立节奏、保持实在。对于同样面对高强度多任务工作的人来说,这套从作息到心态的“土方法”或许比任何时间管理理论都来得直接有效。

本机暂存
IT 后端/ 2015-02-03 21:29:26 / 累计浏览 7,338

程序中的“多线程”

这篇讲的是程序设计中“多线程”的基础概念,作者从大家熟悉的“工厂流水线”比喻切入,清晰地区分了“单线程”与“多线程”的工作方式。单线程像严格的流水线,必须前一步完成后才能做下一步;而多线程则允许不同任务并行执行,互不阻塞。 文章用生成、上传、删除话单文件的实例,对比了两种模式的流程图。单线程是顺序的三步走,多线程则是三个线程同时运行,各自负责独立的功能。这种对比直观展示了多线程如何实现真正的并行处理。 作者接着总结了多线程在大型软件中的优势:让程序逻辑更清晰、易于阅读;通过并行执行提升效率;同时增强模块化,便于问题追踪。这些好处都源于其将大任务拆解为可独立运行的小流程的设计思想。 总的来说,这篇文章用通俗的比喻和具体的代码场景,阐明了多线程作为一种核心编程方法的价值——它不仅是技术实现,更是一种让软件变得更高效、更健壮的设计哲学。

本机暂存
IT DevOps/ 2015-01-27 22:36:36 / 累计浏览 2,800

Linux修改用户密码-交互式与非交互式

这篇文章从实际运维需求出发,介绍了Linux系统中修改用户密码的几种实用方法。作者对比了交互式与非交互式操作的核心差异,并提供了可直接复用的代码示例。 对于交互式场景,文章以`passwd`命令为例,展示了手动输入新密码并确认的完整流程,适合单机或少量用户的操作。而针对需要脚本化、批量执行的运维任务,作者重点讲解了非交互式方案:使用`chpasswd`命令通过管道一次性传入`用户名:密码`对,或结合`passwd --stdin`重定向密码输入,这两种方法都无需人工干预,特别适合自动化部署。 文章进一步探讨了更灵活的`expect`脚本方案。该脚本能模拟交互式过程,自动响应密码提示并完成修改,解决了`passwd --stdin`在某些发行版中不可用的问题。作者还贴心地解释了脚本中TCL语法的巧妙之处,即利用反斜杠将注释延续到下一行,避免`exec`重复执行。 从简单的命令行操作到自动化的脚本实现,这篇文章覆盖了从手动到全自动的完整路径,为不同场景下的密码管理提供了清晰的选择依据。

本机暂存
IT DevOps/ 2015-01-27 22:35:32 / 累计浏览 1,894

awk调用shell,并将变量传递给shell

这篇讲的是在awk脚本中调用Shell并传递变量的一个具体技巧。作者从一个常见的开发场景切入:当awk处理流程需要借助外部Shell命令完成时,如何让Shell能“感知”到awk上下文中的变量。 文章聚焦于实现这一操作的核心函数`system()`,并指出了一个容易忽略但至关重要的语法细节:调用Shell脚本时,命令字符串的拼接需要特别注意空格的使用,正确的写法是`system("sh my.sh " $var)`。通过提供的简单示例,可以清晰看到变量是如何从awk环境传递到Shell脚本内部,并被正确处理的。 对于经常编写文本处理流水线或复杂运维脚本的开发者来说,掌握这种跨语言调用的变量传递方法,能极大增强脚本的灵活性和自动化能力,是提升工作效率的一个实用知识点。

本机暂存
IT DevOps/ 2015-01-27 22:33:37 / 累计浏览 3,919

Linux上删除空行的方法

处理文本数据时,清理空行是常见需求。这篇文章系统介绍了 Linux 下四种最常用的工具:grep、sed、awk 和 tr,它们都能轻松达成目标,但各有其巧妙的切入点。 作者没有止步于罗列命令,而是细致地指出了它们的关键差异。例如,`grep .` 和 `grep -v '^$'` 都能过滤空行;而 `sed '/^\\s*$/d'` 和 `awk NF` 则能更进一步,连只含空格、制表符等“空白内容”的行一并删去。这个细节在处理格式不规整的日志或配置文件时非常有用。 文章还特别提到了一个挺有意思的细节:在处理海量数据时,`grep .` 这种写法的执行效率通常比较高。这从侧面提醒我们,选择工具不仅要考虑功能是否满足,性能表现也是重要的考量因素。整体来看,文章通过具体的命令示例和对比,为读者提供了一个清晰实用的命令行工具选用指南。

本机暂存
IT 开发者/ 2015-01-27 22:32:54 / 累计浏览 3,601

Python文件操作函数简介

作者从Python与C语言的文件操作对比切入,展示了两者在函数层面的一一对应关系。文中列出了open、read、write、seek等关键函数,并指出Python在语法上更为简洁直观。 文章的核心价值在于其实用性。作者没有停留在理论对比,而是直接进入IDLE环境,用一份具体的TestFile.txt文件,逐步演示了每个函数的用法。从用不同模式打开文件,到读取全部或单行内容,再到写入字符串和利用seek进行精确定位,每个步骤都附有清晰的交互代码和结果。 这种“边学边练”的写法,让读者能立刻在本地环境中复现实验。对于刚接触文件处理的开发者而言,这无疑比纯理论讲解更友好,能帮助他们快速建立对Python文件I/O的直观认知并掌握基础操作。

本机暂存
IT 前端/ 2015-01-27 22:26:42 / 累计浏览 4,609

小tips: 使用等空格实现最小成本中文对齐

这篇讲的是用几个特殊空格字符,在不借助复杂CSS的情况下,轻松实现中文排版的等宽对齐。作者从自身多年前的一篇旧文谈起,核心是介绍了 和 这两个“宝藏”空格。 它们的关键特性在于宽度稳定: 的宽度正好是中文字符的一半(1/2),而 的宽度则等同于一个完整的中文字符(1/1)。利用这个特性,只需在汉字之间插入对应数量的这些空格,就能实现“姓名”、“手机号”等不同字数中文的两端对齐,代码简单直观。 此外,文章还引入了全角空格 作为新成员,它同样占据一个汉字宽度。作者分享了如何用字符实体表示它,并提供了将任意字符转换为HTML识别格式的小工具。最后提到,由于IE6已退出历史舞台,这个原本受兼容性困扰的轻量方案现在可以放心使用了。

本机暂存
IT DevOps/ 2015-01-25 22:32:24 / 累计浏览 4,503

查询Linux系统最后重启时间的三个方法

这篇讲的是如何在Linux系统中快速查明最后一次重启时间。作者没有停留在单纯介绍命令,而是梳理了三种不同思路的方法,并对比了它们的直接程度和适用场景。 最直接的是`who -b`,一条命令就能清晰看到系统启动的日期和时间。而`last reboot`则提供了更丰富的历史视角,它通过“reboot”这个伪用户的登录记录,不仅能看到最近一次重启,还能回溯过去多次的启动历史,方便进行时间线分析。 `uptime`虽然不直接显示启动时间点,但巧妙地利用了“当前时间”和“已运行时长”这两个信息。通过简单相减,我们就能推算出启动时刻。这更像是一个实用的逆向推算技巧。 文章的价值在于,它不仅仅给了你三个“答案”,更是呈现了三种不同的技术思路:直接查询、历史追溯与间接推算。无论是运维人员想快速获取信息,还是开发者需要理解系统行为,都能从中找到适合当下场景的解法。掌握这些基本命令,能帮你更高效地与系统“对话”,摸清它的运行状态。

本机暂存
IT DevOps/ 2015-01-25 22:31:32 / 累计浏览 3,416

Linux上的Shebang符号(#!)

这篇讲的是Linux和Unix系统里那个常见的符号“#!”。作者从它的名字“Shebang”说起,解释了这个名称其实来源于“SHArp”(#)和“bang”(!)的组合,还提到了Unix之父丹尼斯·里奇本人对命名的回忆,为这个技术细节增添了历史趣味。 文章的重点在于阐述这个符号的实际用途:它是脚本第一行的解释器指令,告诉系统该用哪个程序来执行这个文件。作者清晰地列出了几种常见情况:比如没有#!行时默认使用当前Shell;如果指定的解释器路径不存在或没有执行权限,系统会报出具体的错误信息;值得注意的是,#!后面必须写绝对路径,它不会去$PATH里自动查找。这些细节对于脚本编写和调试很有帮助。 最后,文章通过一个简单的“hello world”脚本示例,演示了从编写#!行、赋予执行权限到直接运行的完整过程,让抽象的概念变得具体可操作。对于刚接触Shell脚本或偶尔使用但想弄明白原理的开发者来说,这是一篇不错的速查小指南。

本机暂存