从源码到可执行文件:揭秘程序编译与执行的底层魔法

2025-08-17
阅读 4 分钟
1.7k
当你敲下 gcc hello.c -o hello 并运行 ./hello 时,计算机内部究竟发生了什么?让我们一起踏上这场从高级语言到机器指令的奇妙旅程。

从硅到速度:一文看懂计算机硬件的组成与协作

2025-08-17
阅读 4 分钟
2.8k
在键盘轻敲与屏幕闪烁之间,是一台计算机硬件以微秒乃至纳秒级的协作,完成你交给它的每一次任务。本文以“计算机硬件组成部分”为主线,带你系统认识硬件由哪些模块构成、各自负责什么、以及它们如何默契配合将比特流转为体验与成果。文末配有一张结构图与两个真实工作流案例,帮助你将抽象概念落到实际。

从“存储程序”到现代芯片:一文读懂冯·诺依曼结构为何统治世界

2025-08-17
阅读 4 分钟
2.8k
它之所以成为事实标准:通用性强、编程模型统一、工程上最可行、生态成熟(编译器/OS/工具链/软件海量积累),并且可以通过微架构与层级存储持续优化性能。

Flutter 插件工作原理深度解析:从 Dart 到 Native 的完整调用链路

2025-08-15
阅读 4 分钟
2k
作为 Flutter 开发者,我们经常使用各种插件来访问原生平台功能,但很少深入了解插件是如何工作的。本文将从源码层面深入分析 Flutter 插件的完整工作机制,揭示从 Dart 代码到 Native 代码的完整调用链路。
封面图

Flutter Provider 完全指南:从入门到精通

2025-08-14
阅读 9 分钟
2.2k
在Flutter开发中,状态管理一直是开发者面临的重要挑战。随着应用复杂度的增加,如何优雅地管理和共享状态变得至关重要。Provider作为Flutter官方推荐的状态管理解决方案,以其简洁的API和强大的功能赢得了广大开发者的青睐。本文将带你从零开始,深入理解Provider的核心概念、使用方法以及高级技巧。

Flutter AnimatedList 完全指南:打造流畅的动态列表体验

2025-08-12
阅读 22 分钟
1.6k
在移动应用开发中,列表是最常见的UI组件之一。用户经常需要在列表中添加、删除或修改项目,而这些操作如果没有适当的动画效果,会显得生硬突兀。Flutter 的 AnimatedList 正是为了解决这个问题而生,它能为动态列表变化提供流畅的过渡动画,大大提升用户体验。

在线富文本编辑器初探

2022-04-27
阅读 2 分钟
7.8k
在线富文本编辑器是用于在 Web 浏览器中编辑文本的界面,它为用户呈现所见即所得(WYSIWYG)的编辑区域。它的优势是充分利用 HTML 的丰富表现能力,减少用户对文本格式转换的工作量。这里的富文本是相较于纯文本而言,与纯文本不同的是它具有样式、排版等信息。
封面图

Vue 响应式原理

2022-03-06
阅读 6 分钟
3.6k
Vue 最独特的特性之一,是非侵入式的响应系统。数据模型仅仅是普通的 JavaScript 对象。而当你修改它们时,视图会进行更新。聊到 Vue 响应式实现原理,众多开发者都知道实现的关键在于利用 Object.defineProperty , 但具体又是如何实现的呢,今天我们来一探究竟。
封面图

深入浅出 Angular 变更检测

2022-02-05
阅读 5 分钟
8.6k
Angular 中的变更检测是一种用来将应用程序 UI 的状态与数据的状态同步的机制。当应用逻辑更改组件数据时,绑定到视图中 DOM 属性上的值也要随之更改。变更检测器负责更新视图以反映当前的数据模型。阅读本文之前,建议先查看我的前两篇和变更检测紧密相关的博文,即《 揭秘Angular 生命周期函数》 和 《 Angular 之 zon...

Angular 之 zone.js 介绍

2022-02-02
阅读 4 分钟
4.1k
或许你听说过 Angular 使用了zone.js, 但 Angular 为什么要使用zone.js, 它能够提供哪些功能呢?今天我们单独写一篇文章聊聊zone.js,关于它在 Angular 框架中发挥的作用将在下一篇文章讲述。

Angular 依赖注入原理

2022-01-25
阅读 4 分钟
3.5k
依赖注入是 Angular 的一大特性,通过它你能够写出更加易于维护的代码。但 JavaScript 语言本身并没有提供依赖注入的功能,那么 Angular 是如何实现依赖注入功能的呢?阅读本文,你就能够找到答案了。

前端构建工具对比

2020-09-20
阅读 1 分钟
4k
上文介绍过前端模块化的发展,但是它们都有一个共同点:源代码无法直接运行,必须通过转换后才可以正常运行。 构建就是做这件事,将源代码转换成可执行的JavaScript、CSS、HTML代码,包括如下内容:

前端模块化的发展

2020-09-19
阅读 1 分钟
2.7k
近年来Web应用变得更加复杂与庞大,Web前端技术的应用范围也更加广泛。通过直接编写JavaScript、CSS、HTML开发 Web 应用的方式已经无法应对当前 Web 应用的发展

Angular如何由模板生成DOM树

2019-12-22
阅读 3 分钟
2.7k
这种模板写法并不是HTML原生支持的,那么Angular又是如何转换这些代码,并显示成我们期望的界面呢? 首先我们来看看Angular把上述代码编译成什么样子:

Go语言的类型系统

2018-07-31
阅读 3 分钟
2.8k
我们用关键字var创建了类型为user且名为zuckjet的变量。当声明变量时,这个变量对应的值总是会被初始化。这个值要么是用指定的值初始化,要么用零值来初始化。对数值来类型来说,零值是0;对字符串来说,零值是空字符串。下面我们来看一下如何声明一个user类型的变量,并使用某个非零值作为初始值。

跨站脚本攻击XSS

2018-03-18
阅读 1 分钟
3.6k
跨站脚本攻击,英文全称是Cross Site Scrit,本来缩写是CSS,但是为了和层叠样式表(Cascading Style Sheet, CSS)有所区别,所以在安全领域叫做"XSS".

浏览器安全之同源策略

2018-03-18
阅读 2 分钟
4.6k
同源策略是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能会受到影响.可以说Web是构建在同源策略的基础之上的,浏览器只是针对同源策略的一种实现.

浏览器工作原理

2018-03-17
阅读 1 分钟
2.8k
浏览器的主要功能就是向服务器发出请求,在浏览器窗口展示您选择的网络资源.这里所说的资源一般是指HTML文档,也可以是PDF,图片或其他的类型.浏览器解释并显示HTML文件的方式是在HTML和CSS规范中指定的.这些规范由网络标准化组织W3C进行维护.浏览器的用户界面有很多彼此相同的元素,其中包括:

网络的全貌

2018-03-17
阅读 2 分钟
2.7k
首先我们来看一下浏览器访问Web服务器这一过程的全貌.访问Web服务器并显示网页这一过程包含了浏览器和Web服务器之间的一系列交互,主要是下面这样的交互.

clientWidth offsetWidth等视窗尺寸

2018-03-09
阅读 3 分钟
7.3k
是一个只读属性,返回一个元素的布局宽度。一个典型的offsetWidth是测量包含元素的边框、水平线上的内边距、竖直方向滚动条(如果有的话)、以及CSS设置的宽度(width)值。用法:var offsetWidth = element.offsetWidth;

由float引发的思考

2018-03-07
阅读 4 分钟
2.5k
最近工作中不时会遇到float使用问题,由于CSS是一系列属性叠加的结果,float经常会和BFC,外边距折叠等一起出现,故而原本简单的问题却让人老是觉得迷糊,本文记录一下float的使用以备日后查阅.首先我们来看一下最基本的代码:

IndexedDB

2018-02-22
阅读 2 分钟
2.8k
IndexedDB是一个功能强大且高度灵活的存储系统,你可以使用它在用户浏览器中存储你希望存储的任何数据。不过,出色的功能和灵活性致使其API不像Web存储那么友好。你还会发现,移动端浏览器对IndexedDB的支持还不是很友好,即使支持。

Web存储

2018-02-22
阅读 1 分钟
2.8k
通常我们所说的本地存储技术,就是Web存储。Web存储有两个版本:本地存储(Local Storage)和会话存储(Session Storage).两者使用完全相同的API,但本地存储会持久存在(或直到用户清除),而会话存储只要浏览器关闭就会消失。和Cookie类似,Web存储是与域名一一对应的。和Cookie不同的是,无法让app.foo.com使用www.foo.com...

使用cookie

2018-02-14
阅读 2 分钟
2.9k
虽说在现代Web开发过程中讨论Cookie有些不合时宜,但是这是开发人员如今可以使用的最古老、最稳定的客户端存储形式。当然,我们并不推荐使用Cookie,只是说它是一种选择。

客户端数据存储概述

2018-02-14
阅读 1 分钟
3.1k
过去十年中,浏览器已经发展成为一个强大的工具。这是一个缓慢的过程,伴随着许多成长之痛。现在,增强型布局控件、3D图形和游戏,甚至是音乐都可以在小而古老的浏览器中实现。客户端数据存储是一个更加令人兴奋的特性。

二分查找

2018-02-11
阅读 2 分钟
2.7k
假设要在电话簿中找一个名字以K打头的人,可以从头开始翻页,直到进入以K打头的部分。但你很可能不这样做,而是从中间开始,因为你知道以K打头的名字在电话簿中间。又假设要在字典中找一个以O打头的单词,你也将从中间附近开始。

JavaScript中__proto__和prototype

2018-02-10
阅读 1 分钟
2.5k
基本概念 proto 每个JS对象一定对应一个原型对象,并从原型对象继承属性和方法。对象的__proto__属性的值就是它所对应的原型对象 prototype 不像每个对象都有__proto__属性来标志自己所继承的原型,只有函数才有prototype属性。 示例 {代码...} 输出结果如下: 补充 Function本身就是函数,Function.__proto__是标准的内...

JavaScript中constructor属性

2018-02-09
阅读 2 分钟
7.9k
hasOwnProperty方法是来判定对象是否包含指定名称的属性,不会向原型链搜索。要想搜索原型链可以用in关键字(’constructor’ in obj)。

html标签属性为布尔值

2018-02-09
阅读 2 分钟
8.6k
在开发公司的一个内部系统时,用到了AntDesign框架。我要让Button在可点击和不可点击两种状态之间切换。 {代码...} 结果我的Button标签确实不可点击了,但是eslint却报错如下: {代码...} 后来把代码给成这样: {代码...} eslint报错就消失了。 后来在Stack Overflow参考到了答案: {代码...} *Note that this means tha...

二叉树

2018-02-04
阅读 1 分钟
3.4k
二叉树的第i层至多拥有2^(i-1)个节点数;深度为k的二叉树至多总共有2(k+1)-1个节点数(定义根节点所在深度k0=0),而总计拥有节点数匹配的,称为”满二叉树“;深度为k有n个节点的二叉树,当且仅当其中的每一个节点,都可以和同样深度为k的满二叉树,序号为1到n的节点一对一对应时,称为”完全二叉树“。对任何一颗非空的二叉树...