我来分享:那些你可能随口都在说,但其实可能也不怎么理解的编程概念。

阿喆
和汗青且浅,相去复几许,盈盈一水间,脉脉不得语。

我们今天的目的不为别的,不为炫技,就只为让纯小白能够把编程领域的常用概念摸清楚。废话不多说,现在开始。


字符串:只由一个或以上字符构成的一串文本。你可以把它理解为计算机里的“文字串”。它可以有很多种编码方式,比如国际通用的 UTF-8(能显示全世界各种语言),或者中文常用的 GBK、GB2312。如果编码方式选错了,你看到的就会是一堆乱码。


变量:就像一个个贴了标签的小盒子,可以存放数字、文字等各种数据,并且里面的内容可以随时更换。比如你定义一个盒子叫“年龄”,一开始装的是18,明年就可以换成19。变量名就是盒子上贴的标签,方便你随时找到它。


数据类型:用来区分数据是什么种类,比如整数(1、2、3)、小数(3.14)、文字(字符串"Hello")、真假值(布尔值 true/false)等。计算机很笨,必须提前告诉它数据的类型,它才知道该给这个数据分配多大的内存空间,以及能对它们进行什么运算(比如数字能相加,但文字不能)。


函数:一段有名字的代码块,可以反复调用。它就像做菜的菜谱或者一台榨汁机——你给它输入水果(参数),它按照固定的步骤操作,最后给你输出一杯果汁(返回值)。把常用的功能写成函数,能避免重复写相同的代码。


循环:让同一段代码重复执行多次。比如“从1数到100”,你肯定不想手动写100行打印代码,用循环语句(如 for 或 while)只需要写几行,告诉计算机“从1开始,每次加1,直到100为止”,它就能瞬间帮你搞定。


条件语句:根据不同的情况执行不同的代码,就像生活中的岔路口。最经典的是 if-else 结构,比如“如果(if)下雨,就带伞;否则(else)不带”。计算机通过判断条件的真假,来决定接下来走哪条路。


数组:一个能装很多同类数据的“列表”或“连续盒子”。每个数据都有一个编号(索引),需要特别注意的是,编程里的索引通常是从 0 开始的。你可以通过编号快速找到它,就像一排储物柜,通过柜门上的号码就能直接打开对应的柜子。


对象:一种更复杂、更贴近现实的数据结构,里面可以包含多个属性(特征)和方法(行为)。就像一个人的“档案”或一个“智能音箱”——属性有姓名、年龄、颜色、音量;方法(动作)有走路、说话、播放音乐。它是面向对象编程的核心。


类:创建对象的“模具”或“蓝图”,定义了一类事物共有的属性和行为。比如“汽车类”是一张图纸,规定了汽车都有四个轮子和方向盘;而根据这张图纸造出来的“一辆具体的红色宝马”,就是对象。类是抽象的,对象是具体的。


继承:一个类可以“继承”另一个类的属性和方法,就像孩子继承父母的基因。比如“狗类”继承了“动物类”的“吃”和“睡”的方法,同时自己再增加一个“看家”的方法。这样可以省去重复编写代码的麻烦,实现代码复用。


接口:约定好的规则或契约,规定一个对象“必须”有什么方法,但不关心具体怎么实现。就像墙上的电源插座,它规定了孔的形状和电压(接口规则),至于你插进去的是手机充电器还是电脑电源(具体实现),插座并不关心,只要符合规则就能通电。


异常:程序运行时出现的意外错误,比如“除数为0”、“内存不够”或“文件找不到”。如果不处理,程序就会直接崩溃。我们需要提前准备应对措施(如 try-catch 语句),就像在走钢丝下面铺一张安全网,即使出错了也能接住,防止程序直接死掉。


调试:查找并修复代码中错误的过程,就像侦探破案。你可以设置“断点”(案发现场标记),让程序一步步慢动作运行,检查每一步的变量值(嫌疑人动向),从而精准定位到底是哪行代码出了问题。


编译器:把人类写的高级代码(如 C++、Java)翻译成计算机能直接执行的底层机器语言(0和1)。它就像个全职翻译官,会把整本书翻译完后,一次性生成一个独立的可执行文件(如 .exe),以后运行就不需要翻译官在场了。


解释器:逐行读取并执行代码,例如 Python 和 JavaScript。它就像同声传译,每读到一行就立刻翻译并运行一行,不生成独立的可执行文件。优点是跨平台性好(换个系统也能跑),缺点是运行速度通常比编译后的代码稍慢。


IDE(集成开发环境):把代码编辑器、编译器、调试器、版本控制等工具打包在一起的“全家桶”软件,比如 Visual Studio Code、IntelliJ IDEA。它让写代码变得极其方便,提供代码自动补全、一键运行、错误高亮等功能,就像一辆带导航、倒车影像和自动泊车的车。


Git:目前最流行的分布式版本控制工具,用来记录每次代码的修改历史。它方便你随时回退到之前的版本,也方便多人协作开发,好比写作文时保存的无数个不同版本的草稿,而且能清楚看到谁在什么时间修改了哪句话。


HTTP:超文本传输协议,是浏览器与服务器之间通讯的“通用语言”。你访问网页时,浏览器就用 HTTP 给服务器发请求(比如“给我首页”),服务器收到后返回页面内容。常见的状态码如 200 代表成功,404 代表找不到页面。


API:应用程序编程接口,就像餐厅的菜单。你(前端)看着菜单点菜(发出请求),厨房(后端程序)按照菜单上的规则(API接口定义)给你做菜(返回数据)。它是前后端分离开发中,双方沟通的唯一桥梁。


JSON:一种轻量级的数据交换格式,用“键值对”表示数据,比如 `{"name":"小明", "age":18}`。它长得像代码里的字典或对象,人类读起来清晰,计算机解析起来也快,是目前程序之间(尤其是前后端之间)传递信息最流行的格式。


XML:另一种数据格式,用成对的标签包裹数据,比如 `小明`。它的层级结构很清晰,但标签太多显得非常啰嗦。早期非常常用,但现在在数据交换领域,基本已经被更简洁的 JSON 取代了。


正则表达式:一种用来匹配文本模式的“神器”规则。虽然语法看起来像天书,但极其强大。比如你可以写一条规则,用来检查用户输入的字符串是不是有效的手机号,或者从一篇几万字的长文中一键提取出所有的邮箱地址。


算法:解决问题的具体方法和步骤。比如“如何把一堆乱七八糟的数字从小到大排序”。不同的算法效率天差地别,就像从北京去上海,你可以选择坐飞机(快但成本高),也可以选择走路(慢但省钱)。评价算法好坏通常看它的时间和空间消耗。


数据结构:组织和存储数据的方式,比如数组、链表、树、图。数据结构是算法的载体,就像装东西的容器。不同的数据特点适合不同的容器,比如排队买票适合用“队列”,而撤销操作适合用“栈”。


栈:一种“后进先出”(LIFO)的数据结构,像一叠盘子——你只能从最上面拿盘子,也往最上面放。最后放进去的盘子,会被最先拿出来。浏览器的“后退”按钮、函数的调用过程,底层都是栈结构。


队列:一种“先进先出”(FIFO)的数据结构,像排队买票——谁先来排队,谁就先被服务。先放进去的数据,会被先拿出来。打印机处理多个打印任务、消息排队,用的都是队列。


链表:由一个个节点串起来的数据结构,每个节点存着数据和指向下一个节点的“指针”。它像一列火车车厢,或者寻宝游戏——每个宝箱里写着下一个宝箱的坐标。它的优点是插入和删除数据极快,缺点是查找数据慢。


树:由节点和层级组成的数据结构,像电脑里的文件夹目录,或者公司的组织架构图。最上面一个“根节点”,分出很多“子节点”,子节点还能继续分。常见的有二叉树、DOM树等,非常适合表示有层级关系的数据。


图:由节点和连接线(边)组成的数据结构,可以表示复杂的网络关系。比如地铁线路图、微信好友关系(无向图)或微博关注关系(有向图)。导航软件计算“从A到B的最短路线”,底层就是在图结构上跑算法。


哈希表:通过“键”直接找到“值”的数据结构,查找速度非常快(接近瞬间)。就像字典——根据拼音(键)直接查到对应的字(值),不用从第一页开始翻。编程语言里的字典(Dictionary)或映射(Map)底层通常就是哈希表。


递归:函数自己调用自己。通常用来解决可以拆分成更小同类问题的情况,比如计算阶乘、遍历文件夹。用递归就像查字典时看到“详见第50页”,翻到50页又看到“详见第20页”。但一定要记得设置“终止条件”,否则会无限死循环导致程序崩溃。


迭代:重复执行某段逻辑,通常用循环实现。它的特点是每次都在上一次的结果基础上进行更新,就像滚雪球,每次把新的结果当作下一次的输入,直到满足某个条件为止。


排序:把一堆数据按某种顺序排列,比如从小到大、从字母A到Z。常见的算法有冒泡排序(简单但慢)、快速排序(复杂但快)等。排序是编程中最基础也最重要的操作之一,很多高级功能都依赖它。


查找:从一堆数据里找到某个特定的元素。比如在电话簿里找出某人的号码。如果数据没排序,只能“顺序查找”(一个个看);如果数据已经排好序,就可以用“二分查找”(每次排除一半),速度会呈指数级提升。


时间复杂度:衡量一个算法运行快慢的指标,通常用大O表示,比如 O(n)、O(n^2)。它不计算具体的秒数,而是看“当数据量变大时,运行时间增长的趋势”。比如 O(n) 表示数据量翻倍,运行时间也大约翻倍;O(1) 表示无论数据量多大,时间都不变。


空间复杂度:衡量一个算法运行时需要占用多少额外内存大小的指标,同样用大O表示。有时候为了追求极致的运行速度(时间复杂度低),我们会牺牲一些内存(空间复杂度高),这叫“以空间换时间”。


面向对象:一种主流的编程思想,把代码和数据封装成一个个“对象”,通过类和继承来组织代码。它比传统的“面向过程”(按步骤一步步写)更符合人类的思维方式,让大型程序更容易维护、扩展和复用。


封装:把数据和操作数据的方法打包在一起,对外只暴露必要的接口,隐藏内部实现细节。就像电视机或手机,你只需要按按钮(调用接口),不用管里面的电路板是怎么焊接的。这能防止外部错误修改内部数据,提高安全性。


多态:不同对象对同一消息(方法调用)做出不同的响应。比如定义一个“动物”类,有个“叫”的方法。狗对象调用就“汪汪”,猫对象调用就“喵喵”。多态让代码具有极强的灵活性,增加新对象时不用修改原有代码。


抽象:提取事物的核心特征,忽略不重要的细节。比如定义一个“车”的抽象类,只规定它有“驾驶”和“刹车”方法,不管你是开奔驰、宝马还是自行车。抽象帮我们理清复杂系统的骨架,是面向对象设计的第一步。


单例模式:一种经典的设计模式,保证某个类在整个程序运行期间只有一个实例,并提供一个全局访问点。比如全局配置管理器、数据库连接池。就像一个国家只能有一个总统,避免创建多个实例造成资源浪费或状态冲突。


工厂模式:用专门的“工厂”函数或类来创建对象,而不是在代码里到处直接 new。就像汽车制造厂,你只需要告诉工厂“我要一辆SUV”,工厂就会把车造好给你。这样方便统一管理对象的创建过程,后期修改创建逻辑时只需改工厂。


观察者模式:一个对象(主题/发布者)状态变化时,自动通知所有依赖它的对象(观察者/订阅者)。就像微信公众号发文章,所有订阅者都会收到推送;或者你在网购时设置了“降价提醒”,价格一变系统就通知你。


MVC:一种经典的软件架构模式,把程序分为三部分:Model(模型,管数据和业务逻辑)、View(视图,管界面展示)、Controller(控制器,管接收请求和调度)。就像餐厅:Model是厨房,View是餐桌,Controller是服务员。各司其职,方便团队协作。


RESTful:一种目前最流行的 API 设计风格。它把服务器上的数据都看作“资源”,用 HTTP 动词来表示对资源的操作:GET(获取)、POST(新增)、PUT(修改)、DELETE(删除)。风格直观、统一、无状态,非常符合 Web 的特性。


SQL:结构化查询语言,专门用来和关系型数据库(如 MySQL、PostgreSQL)沟通的“方言”。比如“SELECT * FROM users WHERE age>18”就是让数据库把所有年龄大于18岁的用户信息都查出来。掌握 SQL 是后端开发的必修课。


数据库:长期存储在计算机内的、有组织的、可共享的数据集合。它就像一个大型电子表格仓库,但比 Excel 强大无数倍,能处理海量数据,保证数据不丢失、不冲突,并支持多用户同时访问。


表:关系型数据库里的基本结构,像 Excel 里的一个工作表。有行和列,专门用来存放某一类数据,比如“学生表”、“订单表”。表与表之间可以通过外键建立关联。


行:表中的一条具体记录(Record)。比如“学生表”中,代表某一个具体学生的所有信息(张三、18岁、男)就填在一行里。


列:表中的一个字段(Field),代表数据的某个属性。比如“姓名”、“年龄”、“性别”都属于列。每一列都有固定的数据类型,比如“年龄”列只能存数字。


索引:类似书的目录,能帮数据库快速找到数据,不用一页页全表扫描。但建立索引会占用额外的存储空间,且在插入/修改数据时需要维护索引,会稍微降低写入速度。所以不能盲目给所有列都加索引。


事务:一组数据库操作要么全部成功,要么全部撤销(回滚),保证数据的一致性。最经典的例子是银行转账:A扣钱和B加钱必须同时完成,如果中途断电或报错,必须把A的钱退回去,绝不能出现钱扣了但没到账的情况。


NoSQL:非关系型数据库的统称。它不强制使用严格的表格结构,数据格式非常灵活(如文档、键值对),适合处理海量数据和高并发场景。常见的有 MongoDB(文档型)、Redis(键值型)、Elasticsearch(搜索型)。


Redis:一种基于内存的键值数据库,因为数据直接存在内存里,所以读写速度极快(每秒可达十万次)。常用来做缓存(减轻数据库压力)、分布式锁、排行榜或临时数据存储。


缓存:把经常读取的、不常修改的数据临时存到高速介质(如 Redis 内存)里。下次再需要时直接从缓存拿,避免去慢速的数据库里重复查询。就像把常用的工具放在手边,不用每次都去远处的工具箱拿。


Cookie:网站存在用户浏览器本地的一小段文本数据。用来记录用户的登录状态、个性化偏好等。每次浏览器向该网站发请求时,都会自动带上 Cookie。缺点是容量小,且存在被窃取的安全风险。


Session:服务器端保存的用户会话信息。因为 Cookie 存在客户端不安全,所以服务器把真实数据存在自己的 Session 里,只给客户端发一个 Session ID(通常存在 Cookie 里)。客户端拿着 ID 来认领数据,比纯 Cookie 更安全,但会占用服务器内存。


Token:一串加密后的凭证字符串。用户登录成功后,服务器颁发一个 Token 给客户端。以后客户端每次发请求,都在请求头里带上这个 Token,服务器验证通过就放行。它不依赖服务器的 Session,非常适合移动端和前后端分离架构。


JWT:一种自包含的 Token 格式(JSON Web Token)。它的特别之处在于,Token 本身就包含了用户信息(如用户ID、过期时间),并用数字签名保证内容不被篡改。服务器验证签名即可,不需要去数据库查,实现了真正的“无状态认证”。


跨域:浏览器的一个安全机制(同源策略)。它禁止网页向不同域名、不同端口或不同协议的服务器发起 Ajax 请求,防止恶意网站窃取数据。解决办法通常是后端配置 CORS(跨域资源共享)允许特定域名访问,或者在前端开发时使用代理服务器。


Ajax:一种在网页前端发起异步请求的技术。最大的功劳是“局部刷新”——不用重新加载整个网页,就能在后台偷偷向服务器要数据并更新页面的某一部分。比如微博点赞后,数字立刻变了,但页面没有重新加载。


异步:程序不等当前耗时任务(如网络请求、读文件)完成,就继续往下执行其他代码。等任务完成后,再通过回调或事件通知主程序。就像去餐厅点餐,点完不用站在厨房等,先玩手机,菜好了服务员会叫你,这样就不会卡住界面。


回调:把一个函数(回调函数)作为参数传给另一个函数,等异步操作完成后,再调用这个传进来的函数。就像“你做完这件事再告诉我”。但如果嵌套太多层,就会形成“回调地狱”,代码缩进得像金字塔,极难阅读和维护。


Promise:一种更优雅的异步编程解决方案,代表一个未来才会完成(或失败)的结果。它有三种状态:等待中、已成功、已失败。最大的好处是支持“链式调用”(then/catch),能把扁平化的回调地狱变成线性的代码,逻辑更清晰。


async/await:现代 JavaScript 中处理异步的终极语法糖。使用 `async` 标记函数,用 `await` 等待 Promise 的结果。它的神奇之处在于,能让异步代码看起来、写起来就像同步代码一样直观,彻底解决了异步逻辑难以阅读的问题。


线程:CPU 调度和运行的最小单位。一个进程可以包含多个线程,它们共享同一块内存空间并发执行。就像一个车间(进程)里有多个工人(线程)一起干活,沟通方便(共享内存),但如果不小心同时修改同一个零件,就会出错。


进程:正在运行的程序实例,是操作系统分配资源(如内存)的最小单位。比如你打开了一个 Word 文档,操作系统就创建了一个 Word 进程。每个进程都有自己独立的内存空间,进程之间相互隔离,一个崩溃了通常不会影响其他进程。


并发:多个任务在宏观上看起来是同时执行的。但在单核 CPU 上,其实是 CPU 在多个任务之间快速切换(时间片轮转),因为切换速度极快,人类感觉像是同时在跑。就像一个厨师同时炒三个菜,靠快速切换锅铲来实现。


并行:多个任务真正在同一物理时刻同时执行。这需要多核 CPU 的支持,每个核心处理一个任务。就像多个厨师每人负责炒一个菜,真正同时开工。并发是“交替做”,并行是“同时做”。


锁:一种同步机制,用来防止多个线程同时读写同一块共享数据造成混乱。就像厕所的门锁,进去一个人就反锁,其他人必须在外面等。常见的有悲观锁(进门就锁)和乐观锁(进门不锁,出门时检查数据有没有被别人改过)。


死锁:两个或多个线程互相等待对方释放锁,结果谁也动不了,程序永远卡死。就像十字路口四个方向的车互不相让,或者两个人过独木桥,走到中间都不肯退让。写多线程代码时必须小心避免死锁。


内存泄漏:程序在运行中动态分配了内存,但用完后忘记释放,导致可用内存越来越少。长期运行下去,最终会把系统内存吃光,导致程序崩溃。就像水龙头开着不关,水池迟早会溢出来。


垃圾回收(GC):一种自动内存管理机制。程序运行时,系统会自动监测哪些内存已经不再被使用了,然后自动把它们回收清理掉。Java、Python、Go 等语言都有 GC,让程序员不用像写 C/C++ 那样手动管理内存,大大减少了内存泄漏的风险。


版本控制:管理代码历史变更的系统。可以记录每次修改,随时回到任意历史版本,多人协作时还能合并各自的修改。目前最流行、最强大的是分布式版本控制系统 Git。


分支:从主线(通常叫 main 或 master)分出来的独立开发线。就像树干上长出的树枝。你可以在自己的分支上开发新功能或修复 Bug,完全不影响主线代码。开发测试通过后,再把分支合并回主线。


合并:把一条分支上的修改整合到另一条分支上。比如把“新功能分支”的代码合并回“主线分支”。Git 会自动处理大部分合并工作,但如果两人修改了同一处,就需要人工介入。


冲突:合并代码时,如果两个人修改了同一个文件的同一处代码,Git 无法自动决定该保留谁的修改,就会报“冲突”。这时需要开发者手动打开文件,对比两人的代码,商量保留哪部分,然后标记冲突已解决。


Pull Request(PR):一种代码审查和合并请求机制(在 GitLab 中叫 Merge Request)。开发者在自己的分支上写完代码后,发起一个 PR,请求团队其他成员审查(Code Review)。大家确认代码没问题后,再由管理员点击合并到主分支。


持续集成(CI):一种开发实践。开发人员频繁地(每天多次)把代码合并到主分支,每次合并都会自动触发服务器进行代码构建和自动化测试。这样能尽早发现集成错误,就像工厂流水线,零件一组装好就自动上测试台检验。


部署:把写好的程序代码打包,放到测试环境或生产环境的服务器上运行,让用户能够真正访问和使用。就像把后厨做好的菜端到客人的餐桌上。现代部署通常结合 CI/CD 流水线实现自动化。


容器:一种轻量级的虚拟化技术。它把应用程序及其所有的依赖环境(库、配置文件等)打包在一起,形成一个标准的单元。保证应用在任何机器上运行效果都完全一致,彻底解决了“在我的电脑上明明能跑”的千古难题。最流行的是 Docker。


Docker:用来创建和管理容器的开源工具。你只需要写一个配置文件(Dockerfile),描述好应用需要的环境,Docker 就能一键构建出“镜像”(安装包),并运行起“容器”(正在运行的实例)。它比传统的虚拟机更轻量、启动更快。


虚拟机:通过软件模拟出来的一台完整计算机。它有自己的 CPU、内存、硬盘,可以安装独立的操作系统(如在 Mac 上装 Windows)。虚拟机比较“重”,每个虚拟机都要占用独立的系统资源,启动慢,但隔离性极强。


云计算:通过互联网按需使用计算资源(如服务器、存储、数据库、人工智能服务等),用多少付多少,不用自己买硬件建机房。就像用水用电一样,打开水龙头就有水。常见的服务商有阿里云、腾讯云、AWS 等。


前端:用户直接看到、听到和操作的界面部分。主要负责页面布局、样式美化、动画效果和用户交互。核心技术是 HTML(骨架)、CSS(皮肤)和 JavaScript(肌肉/神经),现代开发常配合 Vue、React 等框架。


后端:隐藏在服务器上,处理核心业务逻辑、数据计算和数据存储的部分。用户看不见,但它决定了系统的功能是否强大、数据是否安全。常用语言有 Java、Python、Go、Node.js 等,常配合 Spring Boot、Django 等框架。


全栈:同时掌握前端和后端开发能力,甚至懂一点运维和数据库的“多面手”。全栈工程师能独立完成一个完整 Web 应用的开发,沟通成本极低,在初创公司或独立开发项目中极具价值。

发表于:2026-07-11 19:38
1个回复
您还没有登录,登录后才可回复。 登录 注册