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

前端

共 1396 篇文章

IT 2015-01-21 23:43:40 / 累计浏览 2,742

JavaScript的作用域和提升机制

这篇讲的是 JavaScript 开发者经常踩坑的两个核心机制:作用域与提升。作者从一个看似矛盾的代码案例切入——明明声明了变量,输出却不符合直觉,从而引出语言设计的底层逻辑。 文章清晰地区分了 JavaScript 的“函数级作用域”与 C 族语言的“块级作用域”,指出前者是许多混淆的根源。随后深入剖析了“提升(Hoisting)”机制,说明 JavaScript 解释器会将变量声明和函数声明“无形中移动”到作用域顶部,但仅声明部分被提升,赋值则保留在原位。对于函数,整个函数体会被提升,但通过函数表达式(如 `var foo = function(){}`)声明的则只有变量名被提升。 作者还探讨了名字解析顺序的细节,例如函数声明优先于变量声明,以及命名函数表达式的特殊行为。最后给出了实用编码建议:始终使用 `var` 显式声明,并推荐采用单 var 模式与 JSLint 检查,以规避潜在问题。整篇文章从迷惑现象出发,追溯语言标准解释,最终落脚于清晰、健壮的编码实践。

本机暂存
IT 2015-01-21 23:42:41 / 累计浏览 2,123

每一个JavaScript开发者应该了解的浮点知识

这篇讲的是JavaScript开发者几乎都会遇到的“经典困惑”:为什么`0.1 + 0.2`的结果不等于`0.3`?文章从最基础的数字表示出发,解释了问题的根源。 作者指出,我们日常使用的十进制小数,在计算机内部是以二进制浮点数存储的。例如十进制的`0.1`,在二进制中是一个无限循环小数(`0.00110011...`)。由于计算机存储位数有限(JavaScript使用IEEE 754双精度,尾数位为52位),必须进行舍入,这就带来了无法消除的精度误差。 文章进一步拆解了IEEE 754标准的64位结构:1位符号位、11位指数位和52位尾数位。正因如此,`0.1 + 0.2`在二进制层面的计算结果并非精确的`0.3`,而是带有微小误差,导致直接比较返回`false`。 面对这个“数字表示的固有缺陷”,作者不建议自己发明轮子。他提到,一个常见的思路是将数值存储为整数(如将美元转为美分),但这在处理非十进制货币时并不通用。更推荐的方案是借助专门的数学库(如math.js)来处理需要精确计算的场景。对于格式化显示,`toPrecision()`和`toFixed()`方法有用,但需牢记它们返回的是字符串,不能直接用于后续的算术运算。

本机暂存
IT 2015-01-21 23:42:04 / 累计浏览 2,924

重温CSS:Border属性

这篇文章重新审视了 CSS 的 border 属性,作者指出它远不止 `1px solid black` 这么简单。文章从最基础的复合属性与单属性拆分讲起,重点展示了拆分属性(如 `border-color`)在状态切换时的优雅之处,并为后文的高级技巧埋下伏笔。 核心篇幅则聚焦于 `border-radius` 这一 CSS3 特性。作者不仅回顾了其基本用法和分角设置,更演示了如何通过组合不同角的圆角值,创造出如“柠檬”形状这样的自定义图形,摆脱了对背景图像或切图的依赖。这部分内容生动体现了 CSS 的设计潜力。 在扩展部分,文章开始介绍边的更多玩法,例如设置不同的边框样式(`border-style`)。整体而言,这篇“重温”不仅巩固了基础,更揭示了简单属性背后的灵活创造力,让读者对这个最熟悉的属性有了新的认识。

本机暂存
IT 2015-01-21 23:40:47 / 累计浏览 1,883

JavaScript对象继承一瞥

这篇讲的是JavaScript中如何用构造函数实现对象继承。作者从早期模仿Java的构造函数模式出发,指出了其内存浪费的问题,从而引入了原型链机制。 文章随后展开了对几种经典继承模式的剖析与对比。它先展示了最常用的“默认模式”(将子类原型设为父类实例),并一针见血地指出了其三个缺点:子类实例无法继承父类属性、污染子类原型、constructor属性丢失。 为了解决这些问题,作者逐步介绍了“借用构造函数”(使用call方法复用父类构造逻辑)、“共享原型”(直接共享父类原型,避免实例属性污染)以及“临时构造函数”(创建空函数作为中间层,既隔离原型又不影响父类)等方案。 最终,文章将这些思路整合,给出了一个被称为“圣杯”的综合解决方案。这个模式清晰地展示了如何优雅地在保留原型继承优点的同时,规避其典型陷阱。整体上,文章清晰地梳理了JavaScript继承这一核心概念的演进逻辑与实践细节,参考了《JavaScript模式》一书,并带着作者自己的学习目的。

本机暂存
IT 2015-01-20 23:40:21 / 累计浏览 3,422

认识javascript中的作用域和上下文

这篇讲的是JavaScript中作用域和上下文这两个常被混淆却至关重要的核心概念。作者首先澄清,作用域是函数调用时变量的可访问范围,每次调用独立;而上下文主要指this关键字的值,取决于函数的调用方式。 文章深入剖析了两者的差异与关联:局部与全局变量的作用域区别,并指出ES6的let带来了块级作用域;this在不同调用场景(对象方法、new创建实例、默认调用、严格模式)下的不同绑定结果。作者还详解了执行上下文与作用域链的机制,说明变量查找如何沿链上溯。 在此基础上,文章展示了这些概念如何支撑JavaScript的高级模式。闭包通过维持对外部函数作用域的引用实现数据封装,并衍生出模块模式和IIFE(立即调用函数表达式)来保护全局命名空间。而call、apply和bind方法则提供了动态控制函数执行上下文的能力,在面向对象编程和事件处理中解决上下文丢失问题。 对于想深入理解JavaScript语言机制和设计模式的开发者而言,厘清作用域与上下文是绕不开的关键一步。

本机暂存
IT 2015-01-20 23:34:42 / 累计浏览 2,220

有趣的JavaScript原生数组函数

这篇讲的是 JavaScript 中那些原生数组方法的深度探索与趣味应用。文章没有停留在基础的 `for` 循环,而是系统梳理了数组原型上一系列强大而实用的方法。作者从数组创建的基本概念(如 `typeof` 返回 “object” 与 `instanceof Array` 的区别)切入,为后续理解铺平了道路。 接下来,文章像一份精选菜单,逐一剖析了每个方法的用途和细微差别。你不仅能复习 `forEach`、`map`、`filter` 这些循环与转换利器,还能深入理解 `some` 与 `every` 在条件判断上的逻辑分野。对于像 `join`(字符串化)与 `concat`(合并)这样容易混淆的操作,文章厘清了它们的核心差异。同时,它涵盖了模拟栈与队列操作的 `pop`、`push`、`shift`、`unshift`,用于数据规约的 `reduce`,以及负责元素增删查改的 `slice`、`splice` 和 `indexOf`。甚至 `in` 操作符与 `reverse` 这类小工具也被纳入讨论范围。 这不仅仅是一份 API 列表。作者将每个方法置于实际场景中,探讨了它们如何让数据处理变得更简洁、更声明式。如果你想跳出死记硬背,真正理解这些内置函数如何提升代码的优雅度与执行效率,这篇文章提供了一个扎实且有趣的视角,建议你在阅读后打开浏览器控制台亲手试试。

本机暂存
IT 2015-01-20 23:33:04 / 累计浏览 4,903

在JavaScript中什么时候使用==是正确的?

这篇讲的是JavaScript中==和===操作符的正确使用场景。作者从初学者的常见建议出发,深入剖析了为什么即使在一些看似合理的场合,也应该坚持使用严格相等===。文章核心对比了两种操作符的关键差异:==在比较前会进行隐式类型转换,而===直接比较值和类型,不进行转换。 作者列举了五个具体案例来论证观点。例如,在与undefined和null比较时,`x == null`虽然能同时检测两者,但意图不够清晰,可能让

本机暂存
IT 2015-01-20 23:31:04 / 累计浏览 4,324

了解JavaScript的执行上下文

这篇讲的是JavaScript里一个常被提及却少有人深究的概念——执行上下文。文章从代码运行时的三种执行环境(全局、函数、eval)入手,指出执行上下文本质上就是当前代码的“作用域环境”。 作者没有停留在定义上,而是用图示清晰地展示了执行栈如何管理这些上下文:浏览器作为单线程,会将全局上下文作为初始栈帧,每次调用函数就压入一个新的栈帧,函数执行完毕再弹出。这个机制解释了代码的执行顺序和异步事件排队的原理。 文章的核心价值在于深入执行上下文内部,剖析了它被创建时的两个阶段。尤其在“创建阶段”,解释器会预先扫描并初始化变量对象(AO/VO),将函数声明完整提升,而将变量声明初始化为 undefined。这就从根源上解释了“变量提升”和“函数声明可提前使用”这些常见现象的背后机制,而不仅仅是告诉读者一个规则。

本机暂存
IT 2015-01-20 23:22:01 / 累计浏览 3,341

CSS3 动画系列

这篇讲的是作者对CSS3动画核心概念的温故知新,重点厘清了新手容易混淆的两大类型:Transition(过渡)和Animation(动画)。 文章开篇从个人经历切入,指出CSS3动画从早期仅Webkit支持,到如今已成为前端必备技能。核心对比在于:两者都是实现平滑变化的“补间动画”,但控制精度不同。Transition像是一个简单的“开始-结束”开关,你只能定义起点状态、终点状态以及中间的耗时和速度曲线,适合实现类似“hover时颜色渐变”这类单一段落的变化。 而Animation则提供了更强大的分段控制能力。通过定义关键帧(Keyframes),你可以在动画序列中插入任意多个中间状态,精确安排“第一秒放大、后两秒变色并还原”这样的复杂流程。文章还特别用示意图直观地展示了这种区别。 简单说,如果只需要状态A平滑过渡到状态B,用Transition;如果要编排一段包含多个状态变化的完整“动画片”,就得请出Animation了。作者在最后也提到了,有过Flash动画经验的同学理解起来会特别快。

本机暂存
IT 2015-01-20 23:14:33 / 累计浏览 3,306

JavaScript 类型浅解

作者从JavaScript类型的核心议题出发,深入浅出地解析了这门语言的类型体系。文章首先厘清了基本类型(如Undefined、String)与引用类型(如Object、Array)的根本区别——前者值存于栈内存,后者通过指针引用堆内存中的实体。 接着,作者指出常用的typeof和instanceof在类型判断上存在诸多“不靠谱”的坑,并给出一个利用Object.prototype.toString.call实现的可靠判断函数。在类型转换部分,重点解释了“+”运算符的双重角色如何导致令人困惑的结果。 文章的核心难点在于引用类型的复制。作者详细演示了直接赋值导致多个变量指向同一对象、修改相互影响的现象,进而引出“浅拷贝”与“深拷贝”的概念。通过Array.slice和循环遍历实现浅拷贝后,进一步展示了嵌套对象中浅拷贝的局限性,并提供了一个支持深拷贝的递归copy函数实现方案,清晰展示了如何逐层复制以完全解耦原始对象与新对象。

本机暂存
IT 2015-01-20 23:13:28 / 累计浏览 3,362

JavaScript 函数、作用域和继承

这篇讲的是 JavaScript 中几个最核心也最容易让新手困惑的概念:函数、作用域和继承。作者从最基础的函数声明形式聊起,解释了函数体内部可以使用的参数、函数名、`this` 上下文和 `arguments` 对象,并用一个简洁的代码示例让这些抽象概念变得直观。 接着文章深入到作用域和闭包。作者用一个“外部不能访问内部变量,内部可以访问外部变量”的规则来解释闭包,并通过代码对比了 JavaScript 的函数级作用域与其他语言块级作用域的不同。特别值得注意的是对“变量提升”(hoisting)机制的剖析,文章展示了未声明变量与函数提升后的代码实际执行顺序,点明了初学者容易掉入的陷阱。 至于继承,作者没有堆砌代码,而是推荐了几篇经典的外部文章,引导读者去理解封装、构造函数继承和非构造函数继承等不同模式的设计思路。文章通篇用具体的代码片段来阐释概念,风格亲切但知识点扎实,非常适合想要理清这些基础但复杂概念的开发者。

本机暂存
IT 2015-01-20 23:12:37 / 累计浏览 2,721

JavaScript优化循环

这篇讲的是JavaScript中一个常被忽视的性能优化点:for循环。作者从最基本的循环结构出发,指出许多开发者习惯的写法其实暗藏性能损耗。 文章系统地拆解了循环的四个部分,并给出了对应的优化思路。比如,在初始化阶段缓存数组长度,避免每次迭代都重新查询 `length` 属性;在逻辑代码中,将频繁访问的数组元素赋给临时变量,减少对象属性查询次数。文章还对比了正序与倒序循环,分析了它们在变量数量和指令开销上的差异。 这些优化看似微小,但在处理大规模数据或高频循环的场景下,累积效果显著。作者用清晰的代码对比和流程分析,让这些底层的优化技巧变得易于理解和实践。

本机暂存
IT 2015-01-19 23:58:46 / 累计浏览 2,283

使用window.postMessage实现跨域通信

这篇讲的是如何用 `window.postMessage` 优雅地解决经典的跨域通信难题。 在 HTML5 之前,开发者们为绕过同源策略尝试过不少“偏方”,比如利用 `document.domain`、`iframe` 的 `location.hash`,甚至 Flash 和 `window.name` 的特性。这些方案各有各的限制和使用场景。 文章的核心聚焦于 `postMessage` 这个更现代、更安全的解决方案。它包括两个部分:使用 `otherWindow.postMessage(message, targetOrigin)` 方法向目标窗口发送数据,以及通过监听 `message` 事件来接收数据。文章详细解释了 `message` 和 `targetOrigin` 等参数的含义,以及事件对象中的 `data`、`origin` 等关键属性,提供了清晰的实践指南。 当然,文章也指出了现实中的兼容性考量:`postMessage` 在 IE8/9 中仅支持字符串类型的数据传输(可通过 JSON 序列化解决),而对于更老的 IE6/7,则可能需要回退到 `window.name` 等方案。 总之,对于需要在不同域名窗口或 iframe 间安全传递数据的开发者,这篇文章提供了一份从背景、方案到具体 API 和潜在坑点的实用参考。

本机暂存
IT 2015-01-19 23:55:37 / 累计浏览 14,245

HTML 5 的data-* 自定义属性

这篇讲的是HTML5如何通过 `data-*` 自定义属性,为元素规范地存储和传递私有数据。文章从 `data-*` 属性的定义切入,指出它与传统的任意自定义属性(如 `uid`)在使用上看似相似,但其核心价值在于将这类非可视数据标准化,让代码意图更清晰。 文章的重点在于对比两种存取这些数据的方法。第一种是通用的 `getAttribute` / `setAttribute` 方法,它兼容性极好,但需要写完整的属性名(如 `data-uname`),与传统方式无异。第二种则是HTML5提供的 `dataset` API,这是一种更现代、更语义化的方式。使用时,只需通过 `element.dataset` 对象即可访问,无需“data-”前缀。文章特别提醒了`dataset`的一个关键细节:如果属性名含有连字符(如 `data-date-of-birth`),在通过JS访问时会被自动转换为驼峰式命名(`dataset.dateOfBirth`)。 最终,文章清晰地给出了选择:如果追求广泛兼容或习惯传统操作,`getAttribute` 是可靠选择;若在支持HTML5的现代环境中开发,`dataset` API 提供了更优雅、更符合标准的数据交互方式。

本机暂存
IT 2015-01-19 23:53:35 / 累计浏览 3,484

利用js排序html表格

这篇讲的是作者如何用JavaScript在前端直接实现HTML表格的排序功能。他不想依赖服务器端,而是把整个问题拆解成了四个清晰的步骤来处理。 核心思路很直观:首先,通过点击表头获取需要排序的列索引,并将对应列的文本数据收集进一个数组。接着,利用数组的 `sort()` 方法,通过一个切换的标志位来实现升序与降序的交替排序。 最巧妙的步骤在于数据匹配与视图重建。排序完成后,他遍历排序后的数组,将表格中对应的原始行(``)克隆并暂存到一个隐藏的 `

` 里。最后,清空原表格,把表头克隆回去,再将暂存区的行按新顺序追加到表格中,完成刷新。 作者反复强调,在实现这类特效时,清晰的解题思路比对语言本身的精通程度更重要。文末附有完整的可运行代码与效果图,便于读者直接实践这个“收集-排序-匹配-重建”的通用流程。

本机暂存
IT 2015-01-19 23:37:38 / 累计浏览 5,142

Underscore.js-精巧而强大实用功能库

这篇讲的是JavaScript实用工具库Underscore.js如何为开发者解决日常编码中的基础却繁琐的问题。作者从其他语言转向JavaScript时遇到的典型困惑出发——比如如何实现HashMap、对象继承、通用迭代器和快速排序——引出了这个精巧的库。它并非替代原生API,而是像JDK之于Java,提供了80多个稳健的底层函数支持。 文章重点展示了其集合(数组与对象)处理的核心能力。通过清晰的Node.js环境代码示例,逐一演示了`_.each`进行循环、`_.map`转换数组、`_.reduce`聚合计算以及`_.filter`条件过滤等操作。这些函数在现代浏览器中会智能地采用原生实现,兼顾了性能与兼容性。文章也涵盖了函数绑定、模板字符串等实用功能。 总的来说,这篇文章并非泛泛介绍,而是通过具体可运行的代码片段,让读者直观感受到Underscore.js如何将JavaScript中那些需要自己反复“造轮子”的基础操作,变得标准化且高效。对于希望提升编码效率、夯实基础库认知的前端开发者而言,这些经过提炼的实用技巧具有直接的参考价值。

本机暂存
IT 2015-01-17 00:16:40 / 累计浏览 3,088

HTML head 头标签

在移动互联网时代,网页的 `` 部分,特别是那些 `meta` 元素,对浏览器的渲染和搜索引擎优化(SEO)至关重要。这篇文章从基础的 `DOCTYPE` 声明出发,系统梳理了 `` 中各个关键标签的意义与使用场景。作者解释了不同 `DTD` 声明如何决定浏览器使用标准模式还是怪异模式进行渲染,并介绍了 HTML5 简洁的 `` 写法。 文章深入到具体的 `meta` 设置,对比了新旧字符编码声明方式的等效性,澄清了中文 `lang` 属性应使用 `zh-cmn-Hans` 而非 `zh-CN` 的规范细节。对于国内环境,它提供了确保浏览器(如 360)使用最新内核、禁止百度转码等实用技巧。在 SEO 部分,文章则明确了 ``、`keywords`、`description` 等基础标签的正确配置方法。整篇文章以“一丝”的经典总结为基础扩展,旨在帮助开发者写出清晰、高效且兼容性好的 `<head>` 结构。</p> <div class="br-actions br-reader-actions"> <button type="button" class="br-button" data-reader-favorite data-type="it" data-id="7274" data-title="HTML head 头标签" data-url="/it/article/7274" data-mode="local" aria-pressed="false"> <span data-favorite-label>☆ 稍后读</span> </button> <small data-favorite-scope style="margin-left:8px;color:var(--br-faint);">本机暂存</small> </div> </article> <article class="br-card br-plain-card br-plain-card--no-thumb"> <div> <div class="br-meta"> <span class="br-source-dot">IT</span> <span>2015-01-17 00:07:51</span> <span class="br-dot">/</span> <span>累计浏览 4,300</span> </div> <h2 class="br-card-title"><a href="https://blogread.cn/it/article/7272">解决IOS点击链接触发的颜色块</a></h2> <p class="br-summary">这篇讲的是移动端开发中一个常见的视觉“坑”:在iOS设备上,手指点击链接时系统默认触发的半透明灰色高亮块,有时会影响页面设计的整洁度。作者从实际项目出发,通过对比淘宝、京东等主流网站,发现它们巧妙地避免了这一现象。 问题的根源在于iOS Safari的一个默认行为,而非CSS样式问题。作者通过审查元素,最终定位到WebKit的私有CSS属性`-webkit-tap-highlight-color`。通过将该属性的Alpha通道(即RGBA颜色值的最后一个参数)设为0,就可以完全禁用这个点击高亮效果。 文章进一步解释了该属性的完整用法,包括它支持的系统版本、适用的元素范围,以及如何利用RGBa颜色值来定义高亮色或彻底隐藏它。最后,作者还贴心地分享了苹果官方的Safari CSS参考文档,为需要在iOS上进行深度Web开发的同学提供了进一步探索的路径。</p> <div class="br-actions br-reader-actions"> <button type="button" class="br-button" data-reader-favorite data-type="it" data-id="7272" data-title="解决IOS点击链接触发的颜色块" data-url="/it/article/7272" data-mode="local" aria-pressed="false"> <span data-favorite-label>☆ 稍后读</span> </button> <small data-favorite-scope style="margin-left:8px;color:var(--br-faint);">本机暂存</small> </div> </article> <article class="br-card br-plain-card br-plain-card--no-thumb"> <div> <div class="br-meta"> <span class="br-source-dot">IT</span> <span>2015-01-17 00:06:49</span> <span class="br-dot">/</span> <span>累计浏览 3,280</span> </div> <h2 class="br-card-title"><a href="https://blogread.cn/it/article/7271">关于请求被挂起页面加载缓慢问题的追查</a></h2> <p class="br-summary">这篇讲的是前端工程师在内部系统里遭遇的一个棘手怪问题:页面请求在 Chrome 中频繁出现 “Pending” 状态,加载耗时数十秒甚至超过一分钟,却能最终成功返回,不触发超时错误。问题偶发且难以复现,给排查带来极大困难。 作者团队从几个常见方向入手,逐一排除了 Angular 框架性能、内部封装库、Chrome 插件干扰以及杀毒软件的可能性。排查的核心手段是借助 Chrome 开发者工具和 `chrome://net-internals` 捕获网络日志,通过对比正常与异常请求的详细信息来寻找线索。 经过大量搜索和尝试,最终在 Chrome 网络栈的源码中发现了关键点:问题与浏览器对域名的并发连接数限制以及 “CACHE LOCK” 机制有关。当多个标签页同时请求同一域名下的资源时,后续请求会被前置的 DNS 预解析锁住,从而陷入长时间等待。文章最后给出的解决方案是在服务器端启用 HTTP/2 协议,有效缓解了这一问题。整个追查过程展现了从现象分析到源码层面深挖的完整技术排查路径。</p> <div class="br-actions br-reader-actions"> <button type="button" class="br-button" data-reader-favorite data-type="it" data-id="7271" data-title="关于请求被挂起页面加载缓慢问题的追查" data-url="/it/article/7271" data-mode="local" aria-pressed="false"> <span data-favorite-label>☆ 稍后读</span> </button> <small data-favorite-scope style="margin-left:8px;color:var(--br-faint);">本机暂存</small> </div> </article> <article class="br-card br-plain-card br-plain-card--no-thumb"> <div> <div class="br-meta"> <span class="br-source-dot">IT</span> <span>2015-01-14 13:54:20</span> <span class="br-dot">/</span> <span>累计浏览 2,463</span> </div> <h2 class="br-card-title"><a href="https://blogread.cn/it/article/7267">从千分位格式化谈JS性能优化</a></h2> <p class="br-summary">作者从最基础的数字千分位格式化需求出发,系统性地探索了六种JavaScript实现路径。从最开始循环操作数组和字符串,到利用正则表达式匹配末尾三位,再到最终利用前瞻断言的“一行代码”方案,文章层层递进地展示了不同算法思路的演进与权衡。 真正的价值在于文末附上的性能测试数据。在对不同数量级的数字执行5000次操作后,结果清晰表明:基于字符串拼接和`slice`截取的方案(方法二与四)性能表现最佳;而看似简洁的分组合并法(方法五)耗时最高,揭示了正则表达式与字符串方法在不同场景下的性能成本差异。 这篇文章不仅仅是提供几个代码片段,它示范了一种面对常见需求的优化思维:从直观解法到性能洞察,最终通过基准测试来验证假设。对于开发者而言,其核心启示在于——选择“最优”代码,往往需要基于具体场景和实测数据,而非仅凭直觉或代码简洁度。</p> <div class="br-actions br-reader-actions"> <button type="button" class="br-button" data-reader-favorite data-type="it" data-id="7267" data-title="从千分位格式化谈JS性能优化" data-url="/it/article/7267" data-mode="local" aria-pressed="false"> <span data-favorite-label>☆ 稍后读</span> </button> <small data-favorite-scope style="margin-left:8px;color:var(--br-faint);">本机暂存</small> </div> </article> <nav class="br-pagination" aria-label="pagination"> <ul class="pagination pagination-sm"><li class="page-item"><a class="page-link" href="/it/category/7">|<</a></li><li class="page-item"><a class="page-link" href="/it/category/7/10">10</a></li><li class="page-item"><a class="page-link" href="/it/category/7/11">11</a></li><li class="page-item"><a class="page-link" href="/it/category/7/12">12</a></li><li class="page-item"><a class="page-link" href="/it/category/7/13">13</a></li><li class="page-item active" aria-current="page"><span class="page-link">14</span></li><li class="page-item"><a class="page-link" href="/it/category/7/15">15</a></li><li class="page-item"><a class="page-link" href="/it/category/7/16">16</a></li><li class="page-item"><a class="page-link" href="/it/category/7/17">17</a></li><li class="page-item"><a class="page-link" href="/it/category/7/18">18</a></li><li class="page-item"><a class="page-link" href="/it/category/7/19">19</a></li><li class="page-item"><a class="page-link" href="/it/category/7/70">>|</a></li></ul> </nav> </section> <aside class="br-stack br-sidebar" aria-label="IT sidebar"> <section class="br-side-card"> <h2>近 3 天十大热文</h2> <ol class="br-rank-list"> <li><span class="br-rank">1</span><a href="https://blogread.cn/it/article/2616?f=hot3">WEB系统需要关注的一些点<small>近 3 天 210 浏览</small></a></li> <li><span class="br-rank">2</span><a href="https://blogread.cn/it/article/140?f=hot3">图书馆的世界纪录<small>近 3 天 70 浏览</small></a></li> <li><span class="br-rank">3</span><a href="https://blogread.cn/it/article/8282?f=hot3">OKR 工作法简介<small>近 3 天 66 浏览</small></a></li> <li><span class="br-rank">4</span><a href="https://blogread.cn/it/article/8279?f=hot3">Go Reflect 性能<small>近 3 天 65 浏览</small></a></li> <li><span class="br-rank">5</span><a href="https://blogread.cn/it/article/4088?f=hot3">浅谈MySQL索引背后的数据结构及算法<small>近 3 天 46 浏览</small></a></li> <li><span class="br-rank">6</span><a href="https://blogread.cn/it/article/8497?f=hot3">SmartPerfetto 架构文章 Q&a<small>近 3 天 39 浏览</small></a></li> <li><span class="br-rank">7</span><a href="https://blogread.cn/it/article/8369?f=hot3">洋葱式信息安全观察:信息安全与业务浪涌<small>近 3 天 36 浏览</small></a></li> <li><span class="br-rank">8</span><a href="https://blogread.cn/it/article/8485?f=hot3">中文 Markdown 强调标记的渲染问题<small>近 3 天 33 浏览</small></a></li> <li><span class="br-rank">9</span><a href="https://blogread.cn/it/article/8596?f=hot3">科技爱好者周刊(第 398 期):Token<small>近 3 天 32 浏览</small></a></li> <li><span class="br-rank">10</span><a href="https://blogread.cn/it/article/8496?f=hot3">万字长文推演:手机不再从 App 开始,Ag<small>近 3 天 31 浏览</small></a></li> </ol> </section> </aside> </main> <footer class="br-shell" style="padding-top:12px;padding-bottom:20px;color:var(--br-muted);font-size:13px;"> <div style="text-align:center;line-height:1.9;"> © 2009 - 2026 by blogread.cn  ·  微博:<a href="https://weibo.com/blogread" target="_blank" style="color:var(--br-accent)">@IT技术博客大学习</a>  ·  <span class="news-footer-trust-links"><a href="/about.html">关于</a> · <a href="/contact.html">联系</a> · <a href="/privacy.html">隐私</a> · <a href="/disclaimer.html">内容来源声明</a></span>  ·  <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备15002552号-1</a> </div> </footer> <!-- Bootstrap 5 bundle (含 Popper); 不再依赖 jQuery。 --> <script src="/plugins/bootstrap-5.3.8/js/bootstrap.bundle.min.js"></script> <script src="/assets/frontend-modern/reader-actions.js"></script> </body> </html>