【Linux】Linux基础开发工具从入门到实践

前言:学了Linux的指令,再就是Linux基础开发工具,熟练掌握基础开发工具是提升效率的关键。本文学习Linux的基础开发工具,无论是软件安装、代码编辑,还是编译调试、版本控制,一套顺手的工具链能让你在开发路上少走很多弯路。本文将结合实战,详细讲解 Linux 下核心开发工具的使用方法。

一、软件包管理器

1.1 什么是软件包/软件管理器?

软件包:简单来说就是,开发人员把软件提前编译好,并且做成软件包(即安装程序)放在服务器上(APP)
软件管理器:通俗来说就是管理软件包的(应用商店),能自行解决依赖关系、下载和安装软件包。

  • yum(yellow dog updater modified):Linux下非常常用的一种包管理器,主要用于Centos,RedHat等
  • apt:也是一种包管理器,多用于Ubuntu

1.2 Linux软件生态

操作系统的好坏评估,就是看其生态问题,首先有一个问题:为什么会有人免费给特定社区提供软件,还发布?还提供云服务器让你下载?
是因为要提供相关软件与云服务,构建专属生态,增强社区粘性与影响力。一个软件有一个好的生态环境,就会有更多人去使用,讨论问题,分享经验,解决问题,如Linux的生态环境。
在这里插入图片描述

  • 下载软件的图示过程:
    在这里插入图片描述

还有一个问题,国外发行的软件版本,国内是怎么用上的呢?
国内的一些社会性公司会购买国外的软件包服务器,将该服务器内的软件等拷贝到国内的软件包服务器上,然后上线到国内的一些网站上,即镜像网站。

一些镜像网站:
  • 阿里云:https://developer.aliyun.com/mirror/
  • 清华大学:https://mirrors.tuna.tsinghua.edu.cn/
  • 中科大:http://mirrors.ustc.edu.cn/
  • 北交大:https://mirror.bjtu.edu.cn/
  • 中科院软件研究所:http://mirror.iscas.ac.cn/
  • 上交大:https://ftp.sjtu.edu.cn/

1.3 具体操作:查装卸

(1)基础操作对比(centos vs ubuntu)

操作需求Centos(yum)Ubuntu
查看软件包(如lrzsz)yum listgrep lrzsz
安装软件sudo yum install -y lrzszsudo apt install -y lrzsz
卸载软件sudo yum remove -y lrzszsudo apt install -y lrzsz
清理缓存sudo yum clean allsudo apt clean
(2)注意事项:
  • 安装/卸载需sudo 权限(修改系统目录)
  • 同一时间只能执行一个 yum/apt 操作(防冲突)

二、编辑器vim:Linux下的“代码神器”

Vim 是 Linux 下功能最强大的文本编辑器之一,兼容 Vi 且支持语法高亮、多模式编辑,掌握它能极大提升代码编写效率。本节聚焦 Vim 核心模式与实用操作,帮你快速上手。

IDE例子:

在这里插入图片描述

2.1 核心认知:Vim和Vi的区别

  • vi :Linux的原生编辑器,功能基础
  • vim :vi的升级版,支持语法高亮、可视化操作,兼容所有vi命令,可视化操作不仅可以在终端运行,也可以运行于 x window、mac os 、windows等

2.2 vim的三大核心模式:切换是关键

三大核心模式:命令模式(command mode)、插入模式(insert mode)和底行模式(last line mode)

模式名称功能描述进入方式退出方式
命令模式控制屏幕光标移动,字符、字或行的删除,复制或进入insert mode/last line mode打开vim默认进入;其他模式按 Esc-
插入模式输入文本内容命令模式下按i(光标前)/a (光标后)/o (新行)Esc
底行模式
文件的保存/退出、查找、列行号等全局操作
命令模式下按shift+;(即:)Esc或执行命令后自动返回

在这里插入图片描述

2.3 vim的实用操作:从入门到高效

(1)vim基础操作:
  • 进入vim,在系统提示符输入vim 文件名称,即可进入vim全屏幕编辑画面,但是刚进入时是处于正常模式,要切换到插入模式才可以输入文字
  • 正常模式切换至插入模式:直接输入==a/i/o==
  • 插入模式切换至正常模式Esc
  • 正常模式切换至底行模式shift+;
  • 退出vim模式并且保存文件:在正常模式下,按shift+; (即 : )进入底行模式后,输入下面的命令:
命令功能
w保存当前文件
wq存盘并退出vim
q!不存盘,强制退出vim
wq!存盘并强制退出vim
(2)vim正常模式命令集:
1.插入模式:
  • 正常模式下按i进入插入模式后是从光标当前位置开始输入文件
  • a 进入插入模式是从当前光标所在位置的下一个位置开始输入文字
  • o 进入插入模式是插入新的一行,从行首开始输入文字
2.移动光标:
  • vim可以直接用键盘上的光标来上下左右移动,即小写英文字母的h、j、k、l,分别控制光标左、下、上、右
  • G:移动到文章的最后
  • $/^:移动到光标所在行的行尾/行首
  • w/e:光标跳到下个字的开头/字尾
  • b:光标回到上个字的开头
  • nl:光标回到该行的第n个位置,如:5l,6l
  • gg:进入到文本开始
  • shift+g:进入到文本末端
  • Ctrl+b/f:屏幕往后/前移动一页
  • ctrl+u/d:屏幕往后/前移动半页
3.删除文字:
  • x:每按一次,删除光标所在位置的一个字符
  • nx:即删除光标所在位置的“后面(包括自己在内)”n个字符(n代表数字)
  • X:大写的X,每按一次,删除光标所在位置的“前面”一个字符
  • nX:即删除光标所在位置的“前面”n个字符(n代表数字)
  • dd:删除光标所在行
  • ndd:从光标开始删除n(n代表数字)行
4.复制
  • yw:将光标所在之处到字尾的字符复制到缓冲区
  • nyw:复制n个字到缓冲区
  • yy:复制光标所在行到缓冲区
  • nyy:拷贝n行到缓冲区
  • p:将缓冲区的字符贴到光标所在位置
5.替换:
  • r:替换光标所在处的字符
  • R:替换光标所到之处的字符,直到按下ESC键为止
6.撤销上一次的操作:
  • u:撤销(相当于Windows的CTRL+z)
  • ctrl+r:对 u的恢复,即撤销u
7.更改:
  • cw:更改光标所在处的字到字尾处
  • cnw:更改n个字
8.跳至指定的行:
  • ctrl+g:列出光标所在行的行号
  • nG:移动到光标至文章的第n行行首
(3)vim底行模式命令集:

在使用底行模式之前,先按ESC键确认已处于正常模式,再按shift+;进入底行模式

命令功能
set nu列出行号
n(n代表一个数字)输入n后,再按回车键,就会跳转到文章的第n行
/或?+关键字查找想要的关键字,按n键往后寻找

在这里插入图片描述

2.4简单配置:更好用

vim配置分为两类,推荐自定义,用起来更顺手(不影响系统全局)

  1. 进入用户主目录:cd ~
  2. 编辑配置文件:vim .vimrc
  3. 常用配置项如下(举例):
syntax on " 开启语法高亮 
set nu " 显示行号 
set shiftwidth=4 " 缩进4个空格 
set tabstop=4 " Tab键对应4个空格

【注】还有很多配置,可以按照喜好配置

三、GCC/G++编辑器:从源代码到可执行文件

GCC(C编辑器)与G++(C++编辑器)是Linux下编译C/C++代码的核心工具,掌握其编译流程与参数,能更好的理解代码“如何变程序”

3.1编译四步曲:层层递进的过程

以C语言代码为例,GCC编译选项:gcc 选项 要编译的文件 选项 目标文件
.c源代码到可执行文件,需经历:预处理->编译->汇编->链接四步,每一步都可通过GCC选项独立控制:

  • -E:让gcc在预处理结束后停止编译过程
  • -o:是指目标文件
  • .i:文件为已经过预处理的C原始程序
  • -S:进行查看,该选项只进行编译而不进行汇编,生成汇编代码
  • -c:查看汇编代码是否已转化为二进制代码了
步骤功能描述GCC选项输出文件后缀命令示例
预处理宏定义,文件包括,条件编译,去注释-E.igcc -E hello.c -o hello.i
编译检查代码语法,将预处理文件转为汇编代码-S.sgcc -S hello.o -o hello.s
汇编将汇编代码转为机器码(二进制目标文件)-c.ogcc -c hello.s -o hello.o
链接链接目标文件无(默认)无(自定义)gcc hello.o -o hello

在这里插入图片描述

3.2 核心概念:静态链接VS动态链接

链接本质:关联代码与依赖库(如printf依赖于libc.so)
(1)静态链接:编译时将库代码全部嵌入可执行文件,生成文件大,所以运行时无需再依赖库(.a), 在执行的时候运行速度快,编译命令:gcc hello.c -o hello -static(需提前安装静态库)
静态链接的缺点很明显:

  • 浪费空间:每个可执行程序中对所有需要的目标文件都要有一份副本,若是多个程序对同一个目标文件都有依赖,导致同一个目标文件都在内存存在多个副本
  • 更新比较困难:每当库函数的代码修改了,这个时候就需要重新进行编译链接形成可执行程序。
    在这里插入图片描述

(2)动态链接:编译时仅记录库依赖,运行时家住在系统中的动态库(后缀.so),生成文件小,节省内存,编译命令:gcc hello.o -o hello(在执行中更常用动态链接,所以默认是动态连接的)

  • 可通过ldd 可执行文件名查看依赖的动态库

在这里插入图片描述
【注 】:

  • Linux下,动态库是XXX.so,静态库是XXX.a
  • Windows下,动态库是XXX.dll,静态库是XXX.lib

3.3 常用GCC选项:调试与优化

选项功能描述应用场景
-g生成调试信息(供GDB使用)调试阶段:gcc test.c -o test -g
-wall显示所有警示信息(避免潜在信息)开发阶段:gcc test.c -o test -wall
-O0/O1/O2/O3编译优先级别(0无优化,3最高优化)发布阶段:gcc test.c -o test -O3

四、Makefile:自动化构建的“工程管家”

当项目有多个源文件时,手动执行gcc命令效率极低。Makefile定义了编译规则,只需一个make命令即可完成自动化构建,是大型项目的必备工具。

  • make是一条命令,Makefile是一个文件,两个搭配使用,完成项目的自动化构建

4.1 核心逻辑:依赖关系与依赖方法

Makefile的核心是:目标文件->依赖文件->编译命令,即:

目标文件:依赖文件1 依赖文件2 ...编译命令 (必须以Tab开头)
基本使用操作:

示例代码:myfile.c

#include<stdio.h>int main()
{printf("hello world\n");return 0;
}

Makefile文件:

//目标:myfile,依赖:myfile.c
myfile:myfile.cgcc -o myfile myfile.c //编译命令
//伪目标:clean(清理生成文件,总是被执行,即每make一次,文件的属性时间就更新一次)
.PHONY:clean
clean:rm -f myfile //清理命令:删除可执行文件

推导过程:

myfile:myfile.ogcc myfile.o -o myfile
myfile.o:myfile.sgcc -c myfile.s -o myfile.o
myfile.s:myfile.igcc -S myfile.i -o myfile.s
myfile.i:myfile.cgcc -E myfile.c -o myfile.i.PHONY:clean
clean:rm -f *.i *.s *.o myfile

4.2 进阶用法:变量与函数

通过变量和函数简化Makefile(适配多文件项目),示例如下:

BIN=myfile
CC=gcc
SRC=$(wildcard *.c) //使用wildcard函数,获取当前所有的.c文件
OBJ=$(SRC:.c=.o) //将SRC的所有同名.c替换成为.o形成目标文件列表
LFLAGS=-o
FLAGS=-c
RM=rm -f$(BIN):$(OBJ)@$(CC) $(LFLAGS) $@ $^        //$@代表文件名;$^代表依赖文件列表@echo "linking... $^ to $@"   
%.o:%.c                           //%.c展开当前目录的所有.c;%.o同时展开所有同名的.o@$(CC) $(FLAGS) $<            //%<:对展开的依赖.c文件,一个一个交给gcc@echo "compling ... $< to $@" //@:不回显命令.PHNOY:clean
clean:$(RM) $(OBJ) $(BIN)            

五、实践:编写第一个Linux程序–进度条

掌握了前面的工具,那么来实战编写一个动态进度条,理解“行缓冲区”“回车换行”等Linux终端特性

5.1 补充知识:回车(\r)与换行(\n)

  • 换行:光标移动到下一行开头
  • 回车:光标移动到当前行开头(不换行)
  • 动态进度条的核心:用\r覆盖当前行内容,实现“实时更新”效果

5.2 核心原理:行缓冲区刷新

printf输出默认会缓存,需手动刷新缓冲区(fflush(stdout))才能实时显示,对比示例:

#include<stdio.h>int main()
{// 示例1:无 \n 且不刷新,3秒后才显示 printf("hello"); sleep(3); // 示例2:加 fflush 实时显示 printf("hello");fflush(stdout); sleep(3);return 0;
}

5.3进度条代码实现(含Makefile)

(1)文件结构
progress/ 
├── process.c # 进度条逻辑 
├── process.h # 函数声明 
├── main.c # 主函数(模拟下载) 
└── Makefile # 自动化构建
(2)核心代码(process.c)
#include "progress.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>// 进度条长度(100个字符对应100%)
#define BAR_LENGTH 100// 基础版进度条:模拟从0%到100%的过程
void progress_basic() {// 存储进度条字符char bar[BAR_LENGTH + 1] = {0};// 旋转光标字符集(实现动画效果)const char *spin = "|/-\\";int spin_index = 0;// 从0%循环到100%for (int i = 0; i <= 100; i++) {// 填充进度条memset(bar, '=', i);// 计算旋转光标位置spin_index = i % 4;// 输出进度条:// [%-100s] 左对齐,占100个字符宽度// %d%% 显示百分比// %c 显示旋转光标// \r 回到行首printf("[%-100s][%3d%%][%c]\r", bar, i, spin[spin_index]);// 手动刷新缓冲区fflush(stdout);// 延迟50ms,控制进度条速度usleep(50000);}// 进度完成后换行printf("\n");
}// 进阶版进度条:支持自定义任务量和样式
void progress_advanced(int total, int current, char style) {// 边界检查if (current < 0) current = 0;if (current > total) current = total;// 计算进度百分比int percent = (int)((float)current / total * 100);// 构建进度条char bar[BAR_LENGTH + 1] = {0};int filled = (int)((float)current / total * BAR_LENGTH);memset(bar, style, filled);// 输出进度信息printf("Progress: [%-100s][%3d%%] %d/%d\r", bar, percent, current, total);fflush(stdout);// 完成时换行if (current == total) {printf("\n");}
}

(3)头文件(process.h)

#ifndef PROGRESS_H
#define PROGRESS_H// 基础版:固定样式进度条
void progress_basic();// 进阶版:可自定义参数的进度条
// 参数:
//   total: 总任务量
//   current: 当前完成量
//   style: 进度条填充字符
void progress_advanced(int total, int current, char style);#endif

(4)测试主程序(main.c)

#include "progress.h"
#include <unistd.h>int main() {// 测试基础版进度条printf("基础版进度条演示:\n");progress_basic();printf("\n");// 测试进阶版进度条(模拟文件下载)printf("进阶版进度条演示(模拟文件下载):\n");int file_size = 1024;  // 模拟文件大小1024KBfor (int downloaded = 0; downloaded <= file_size; downloaded += 32) {progress_advanced(file_size, downloaded, '#');usleep(100000);  // 延迟100ms}return 0;
}
(5)Makefile
# 编译器
CC = gcc
# 编译选项:显示警告,生成调试信息
CFLAGS = -std=c99 -Wall -g
# 目标可执行文件
TARGET = progress_bar
# 源文件
SRCS = progress.c main.c
# 目标文件
OBJS = $(SRCS:.c=.o)# 默认目标:编译程序
all: $(TARGET)# 链接目标文件生成可执行文件
$(TARGET): $(OBJS)$(CC) $(CFLAGS) -o $@ $^# 编译源文件生成目标文件
%.o: %.c$(CC) $(CFLAGS) -c $< -o $@# 清理编译生成的文件
clean:rm -f $(OBJS) $(TARGET)# 伪目标:避免与同名文件冲突
.PHONY: all clean

效果展示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94846.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马点评|项目日记(day02)

目录 一. 全局id生成器 1.为什么需要全局id生成器 2.传统方式的缺陷: 3.典型全局 ID 生成方案的设计思路 二.优惠券秒杀-Redis实现全局唯一id 三.优惠券秒杀-添加优惠券 四.优惠券秒杀-实现秒杀下单 五. 一人一单问题 1.单体项目下 1,超卖问题思路分析 2.乐观锁解决问…

shell脚本编程规范与变量

文章目录Shell编程文档整理一、Shell介绍1.1 简介1.2 Shell解释器二、快速入门2.1 编写Shell脚本2.1.1 创建脚本示例2.1.2 赋予执行权限2.2 执行Shell脚本三、Shell程序&#xff1a;变量3.1 语法格式3.2 变量使用3.3 变量类型四、字符串4.1 单引号4.2 双引号4.3 获取字符串长度…

【AGI使用教程】Coze 搭建智能体(1)

欢迎关注【AGI使用教程】 专栏 【AGI使用教程】GPT-OSS 本地部署&#xff08;1&#xff09; 【AGI使用教程】GPT-OSS 本地部署&#xff08;2&#xff09; 【AGI使用教程】Coze 搭建智能体&#xff08;1&#xff09; 【AGI使用教程】Coze 搭建智能体&#xff08;2&#xff09; 【…

(二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵

首先要明确二分查找算法如何实现&#xff0c;是采用左闭右闭还是左闭右开 左闭右闭 第⼀种写法&#xff0c;我们定义 target 是在⼀个在左闭右闭的区间⾥&#xff0c;也就是[left, right] &#xff08;这个很重要⾮常重要&#xff09;。 区间的定义这就决定了⼆分法的代码应…

损失函数,及其优化方法

什么是损失函数&#xff1f;损失函数&#xff0c;也称为代价函数&#xff0c;是一个用来​​衡量机器学习模型预测结果与真实值之间差距​​的函数。损失函数的优化方法有哪些&#xff0c;各自优缺点是什么&#xff0c;他们的应用范围是什么&#xff1f;方法类别代表算法核心思…

pyqt+Python证件号智能校验工具

目录 一、引言 二、GUI界面设计 1.相关提示 2.效果演示 3.界面设计.py 三、主要程序详解 1.导入相关模块 2.初始化设置 3.校验过程 四、总程序代码 一、引言 在数字化转型加速的背景下&#xff0c;证件信息核验已成为金融、政务、安防等领域的刚需。传统人工校验存在…

主流技术栈 NestJS、TypeScript、Node.js版本使用统计

&#x1f4ca; 2024年主流技术栈版本使用统计&#x1f527; TypeScript 采用情况全球采用率: 38.5% 的开发者使用 TypeScript&#xff08;Stack Overflow 2024&#xff09;增长趋势: 从 2017年的 12% 增长到 2024年的 35%&#xff08;JetBrains 调研&#xff09;TypeScript vs …

Techub News 与 TOKENPOST 达成战略合作以推动中韩 Web3 资讯互通

Techub News 消息&#xff0c;香港 Web3 媒体 Techub News 与韩国区块链媒体 TOKENPOST 达成战略合作。TOKENPOST 将开设香港内容板块&#xff0c;由 Techub News 提供本地化行业资讯&#xff1b;同时 Techub News 将推出韩国内容专栏&#xff0c;内容源由 TOKENPOST 支持。这一…

Java面试实战系列【JVM篇】- JVM内存结构与运行时数据区详解(私有区域)

文章目录一、前言1.1 什么是JVM内存结构1.2 JVM内存结构与Java内存模型的区别1.3 为什么面试官爱问JVM内存结构二、JVM运行时数据区总览2.1 运行时数据区域划分2.2 线程私有区域 vs 线程共享区域三、线程私有区域详解3.1 程序计数器&#xff08;PC Register&#xff09;3.1.1 定…

鸿蒙中使用极光推送

官方给出的步骤是对的&#xff0c;就是一时不知道从何下手&#xff0c;自己整了下&#xff0c;按照这个来就行 1.步骤 打开 APP 通知功能 1.先按照这个页面进行配置SDK 集成指南 - 极光文档&#xff0c;主要就是下载极光sdk&#xff0c;然后在AGC里开通推送服务&#xff0c;配…

ruoyi_wvp流媒体[海康 大华 GB1812 onvif rtsp]

ZLMediaKitxiaz: https://download.csdn.net/download/jinhuding/91775096 webrtc: https://download.csdn.net/download/jinhuding/91764243 yoloonnx(v3,v7,v8s,v9c)&#xff1a;https://download.csdn.net/download/jinhuding/91775170 项目部署步骤 1.后端目录结构 2.前端…

强化学习笔记(二):有限马尔可夫决策过程(一)

有限马尔可夫决策过程 基本概念 多臂老虎机仅涉及评价性反馈&#xff0c;即动作的即时奖励&#xff0c;估计每个动作 aaa 的价值 q∗(a)q_*(a)q∗​(a)。 有限马尔可夫决策过程&#xff08;Finite MDP&#xff09;引入了关联性因素&#xff0c;即在不同状态&#xff08;情境&am…

Maven项目中settings.xml终极优化指南

文章目录1. 基础优化2. 镜像源优化&#xff08;国内推荐&#xff09;3. 插件仓库优化4. 并行构建提升 30%-80%5. 下载可靠性优化6. CI/CD 环境优化7. 进阶&#xff1a;依赖锁定与预下载8. 实现效果Maven settings.xml 终极优化指南&#xff0c;重点是&#xff1a;构建速度提升、…

RCC_APB2PeriphClockCmd

RCC_APB2PeriphClockCmd 函数在STM32的标准外设库中扮演着“电源开关”的角色。要理解这个函数&#xff0c;我们需要明白STM32微控制器的几个关键概念&#xff1a;1. 外设时钟与低功耗设计STM32内部有非常多的外设&#xff0c;如GPIO&#xff08;A, B, C...D&#xff09;、USAR…

用大语言模型实现语音到语音翻译的新方法:Scheduled Interleaved Speech-Text Training

用大语言模型实现语音到语音翻译的新方法:Scheduled Interleaved Speech-Text Training 在人工智能领域,语音到语音翻译(Speech-to-Speech Translation, S2ST)一直是极具挑战性的任务。传统的做法是将语音识别、文本翻译和语音合成三个步骤串联起来,而近年来,端到端的S2…

LLM学习:langchain架构——模型IO

1、什么是模型IO模型 I/O&#xff08;Model I/O&#xff09; 是 LangChain 框架中最核心的模块之一&#xff0c;负责处理与语言模型&#xff08;LLM&#xff09;交互的输入构建、模型调用和输出解析全流程。它主要分为三个模块&#xff1a;Prompts&#xff08;输入构建&#xf…

Windows系统下python新一代三方库管理工具uv及VSCode配置

python新一代三方库管理工具uv uv是什么&#xff1f; uv是用RUST语言写的一个python三方库和项目管理工具&#xff0c;详见官网&#xff08;uv&#xff09;。 uv的安装 官网上提供了两种安装方式&#xff0c;第一种需要在PS终端里运行一下命令进行安装&#xff1a; powersh…

Node.js 多版本管理工具 nvm 的安装与使用教程(含镜像加速与常见坑)

适用人群&#xff1a;前端/后端/全栈开发者&#xff0c;Mac/Linux/Windows&#xff08;nvm-windows&#xff09;用户&#xff1b;需要在多项目间快速切换 Node 版本、或在国内网络环境下稳定安装 Node。一、为什么要用 nvm&#xff1f;一机多版本&#xff1a;不同项目依赖不同 …

Unity Shader unity文档学习笔记(二十一):几种草体的实现方式(透明度剔除,GPU Instaning, 曲面细分+几何着色器实现)

1.透明度剔除&#xff08;性能较差&#xff0c;不同颜色时需要不同材质会导致多个dc&#xff09; clip(_Color.a - _Cutoff); 传入值为0时 剔除 类似的草体效果&#xff1a; 2.GPU Instaning(可以自定义一次性合批最多1023个&#xff0c;能够传递颜色值等等&#xff08;做草…

UX 设计入门终章:让洞察落地!用用户流程图、IA 和旅程图,设计用户与产品的互动故事

欢迎来到本系列课程的最后一课。 如果你把之前的学习比作是绘制一份建筑蓝图&#xff0c;那么今天&#xff0c;你将根据自己收集到的所有用户数据&#xff0c;描绘出空间布局&#xff08;用户流程图&#xff09;、理清结构关系&#xff08;信息架构&#xff09;&#xff0c;并最…