上海的网站名运城小程序开发公司

张小明 2026/1/2 20:36:43
上海的网站名,运城小程序开发公司,七牛云招聘,网站给假冒伪劣产品做推广一、进程调度 Ⅰ、进程调度概念 Linux 的进程调度#xff0c;是内核借助 “调度器” 这个组件#xff0c;按照预设的调度算法#xff0c;来分配 CPU 执行权的管理过程#xff0c;解决 “CPU 单时刻只能跑一个任务#xff0c;但系统里同时堆了一堆进程 / 线程要执行” 这…一、进程调度Ⅰ、进程调度概念Linux 的进程调度是内核借助 “调度器” 这个组件按照预设的调度算法来分配 CPU 执行权的管理过程解决 “CPU 单时刻只能跑一个任务但系统里同时堆了一堆进程 / 线程要执行” 这个矛盾的管理过程 —— 核心管三件事选哪个任务用 CPU、给它用多久、啥时候让它把 CPU 让出来注“调度” 是分配 CPU 执行权的整体过程而 “调度算法” 是支撑这一过程的具体规则决定 “给谁先分配、分配多久、啥时候让他把cpu让出来”为啥要做这事因为 CPU 是 Linux 里最金贵的硬件资源但它 “一心不能二用”可你开的终端、后台的服务、跑的程序都等着抢 CPU 干活。调度的目标让这些任务 “看着像同时在跑”、别让 CPU 空着浪费还得保证高优先级的任务比如系统服务能先抢到资源。它是 Linux 能实现多任务并发的 “幕后指挥”也是把 “一堆待执行的任务” 和 “CPU 硬件” 连起来的核心纽带。Ⅱ、位图bitmap中位的定位与状态判断​代码语言javascriptAI代码解释### 位图bitmap中位的定位与状态判断 在优先级调度的位图机制中通过以下方式定位指定序号N对应的比特位并判断其状态 1. 定位所在char元素 i N / (sizeof(char)*8) sizeof(char)*8是单个char的比特数通常为8i表示N对应的比特位所在的char数组下标 2. 定位char内的比特位 pos N % (sizeof(char)*8) pos表示N在当前char元素中的具体比特位下标 3. 判断比特位是否置1 实际操作应为 b.bits[i] (1 pos) 通过位运算判断该比特位是否被标记为1Ⅲ、进程调度流程【简略版运行队列结构体】​​这两个指针数组分别存储了140个优先级对应的进程队列普通优先级我们只关心下标100139我们都是普通的优先级想想nice值的取值范围可与之对应实时优先级099不关心​进程被调度时会按照从上到下从左到右的顺序进行轮换调度这个时候有人就会有疑问了进程被调度时如果调度过程中突然有新进程插进来怎么办其实完全不用担心新进程插入会打乱现有队列秩序 —— 这类新进程会被精准插入到waiting数组对应优先级的队列和running数组完全一样并且是直接追加到队尾不会插队到当前正在排队的进程前面原有进程的排队顺序完全不会被改动。​调度的顺序是先把running数组里的进程调度完再去调度waiting数组里的进程。​这里的run和wait两个指针就是用来管理这两个数组的run指针负责指向running数组wait指针负责指向waiting数组。等要切换调度的数组时不用动数组里的进程数据只需要把这两个指针存储的地址交换一下就能从调度running数组的进程切换到调度waiting数组的进程了。【总流程梳理】1 基于优先级的时间片轮转调度算法选进程运行遍历普通优先级队列queue[100~139]取首个非空队列的队首进程通过上下文切换使其进入运行态R 态占用 CPU 执行。监控切换触发条件进程运行中触发任意情况则立即执行进程切换被动切换 1当前进程时间片耗尽被动切换 2有更高优先级进程就绪抢占 CPU主动切换当前进程请求 I/O/ 调用sleep()主动放弃 CPU。切换后的即时处理调度收尾完成进程切换后对原运行进程做状态 队列安置时间片耗尽保持R 态尾插到原优先级队列队尾被抢占保持R 态回到原优先级队列队首主动放弃 CPU进入可中断睡眠态S 态移出运行队列runqueue加入等待队列wait queue。回到调度起点重复步骤 1从运行队列选新进程运行。2 阻塞进程的后续处理仅针对主动放弃 CPU 的场景当处于等待队列的S 态进程完成等待事件如 I/O 结束后从等待队列wait queue移出尾插到原优先级的运行队列runqueue恢复为R 态等待下一轮调度。“遍历 queue [140]哪怕只看 [100,139] 区间虽然时间复杂度是常数但每次判空都要逐个检查队列是否为空实际还是不够高效因此这时候就用到了我们先前说的位图用char bits[5]共 40 个比特位的每一位对应一个优先级队列位为 1 表示对应队列非空位为 0 表示对应队列为空。这样不需要遍历数组直接通过位运算就能快速定位到第一个非空的队列彻底解决了‘遍历判空低效’的问题。​【总结】这整个流程是标准的O (1) 调度算法从位图快速定位非空队列、调度时直接取队列头进程执行到新进程队尾插入、交换 run/wait 指针切换调度数组所有关键操作均只需固定步数完成耗时与进程 / 队列数量无关整体为常数时间复杂度。二、进程切换Ⅰ、进程切换概念进程切换操作系统中CPU 从正在执行的 A 进程暂停其运行并切换到 B 进程继续执行的核心操作。核心是 “保存 加载” 上下文先把A 进程的运行现场执行位置、寄存器数据、地址映射等保存到进程控制块PCB再从B 进程的 PCB 中加载其上下文并恢复让 B 进程从上次暂停的节点无缝继续执行最终实现多进程 “并发”宏观同时运行微观 CPU 轮流执行。Ⅱ、进程上下文是什么进程上下文进程运行的完整 “现场快照”是进程能被暂停后无缝恢复执行的核心依据包含进程继续运行所需的所有关键信息可分为四大类核心组成每类都对应实际运行必需的功能1、CPU 执行相关核心中的核心程序计数器PC记录 CPU 下一条要执行的指令地址确保恢复时知道 “从哪继续跑”。通用寄存器存储当前执行的中间数据比如计算结果、变量值切换时必须完整保存 / 恢复否则数据丢失。状态寄存器、栈指针SP、基址指针BP记录 CPU 运行状态、栈空间地址范围保障函数调用、数据存取的连续性。2、内存映射相关页表记录进程虚拟地址与物理内存地址的映射关系确保恢复后 CPU 能精准找到进程的代码、堆、栈数据。地址空间信息进程专属的虚拟地址范围如代码段、数据段、堆、栈的边界避免与其他进程内存冲突。3、进程资源相关打开的文件句柄比如进程正在读写的文件、网络套接字切换后仍能正常操作这些资源。信号掩码与处理函数记录进程能响应的信号、以及信号触发后的处理逻辑避免信号处理混乱。I/O 设备状态如打印机、键盘等设备的连接状态确保恢复后 I/O 操作能继续4、进程管理相关进程状态R/S/D/T 等标记进程当前是就绪、阻塞还是运行态。优先级与时间片决定进程下次被调度的顺序和可占用 CPU 的时长。进程控制块PCB指针上下文的所有信息最终都存储在 PCB 中切换时直接操作 PCB 即可。总之进程上下文就是进程运行的完整现场快照核心目的是让进程被切换后重新调度时能无缝衔接上次的执行状态就像从未被打断过一样。Ⅲ、cpu中的寄存器是什么CPU 寄存器是CPU 内部的高速存储单元用于临时存放进程运行的关键数据属于进程上下文的核心部分特点是速度远快于内存主要作用是支撑进程的高效执行和进程的关系寄存器里存的是当前进程的临时数据属于进程上下文的一部分 —— 进程切换时这些数据会被保存到 PCB恢复时再加载回寄存器确保进程能无缝续跑。【问题】为什么函数返回值会被外部拿到函数执行完return a对应mov eax 10后外部代码会把寄存器如 EAX中的值 “拷贝” 到自己的变量中—— 比如外部写int b func()汇编层面会执行mov b, eax把 EAX 里的返回值拷贝到变量b的内存地址中。【问题】系统如何知道进程当前执行到哪行代码靠程序计数器PC/EIP 寄存器这个寄存器专门记录 “当前进程正在执行的指令的下一行指令地址”进程运行时CPU 会根据 PC/EIP 的地址取指令执行进程切换时PC/EIP 的值会随上下文保存恢复时就能精准回到上次的执行位置。Ⅳ、如何进行进程切换【小故事】学生当兵你是个大二高个男生某天在食堂门口瞥见 “大学生士兵招募” 的海报 —— 服役一年就能返校接着读书你揣着好奇报了名居然一路通关选上了。 兴奋冲昏了头你踹开宿舍门吼“哥几个我去当兵了明年见” 转身就走 —— 可转念一想这一年不上课、不考试回来怕是要被退学。 赶紧找辅导员救命他一拍桌子“得先办‘保留学籍’” 第二天他塞给你个牛皮档案袋沉甸甸的“这里面是你这学期的成绩单、学到哪章的进度表还有你的学籍信息 ——这袋东西就是你的‘全部家底’退伍回来必须原封不动给我我才能把你‘接回’大二。” 揣好档案袋你才算踏实入伍。 一年后扛着行李返校没急着进教室先攥着档案袋找辅导员 —— 他对着袋里的进度表核对半天把你塞进了这届大二的班级“跟上从你去年停的那章接着学。” 这个事儿和操作系统里的 “进程切换” 简直是一个模子刻的你 进程是要干的 “活儿”你学知识进程算数据那个档案袋 进程上下文装着你 “接着干” 的所有信息档案袋存学习进度上下文存寄存器、执行位置办保留学籍 保存上下文先把 “干活的状态” 存好去当兵 进程离开 CPU暂时停下把核心资源让出去返校复学 恢复上下文把存好的状态调出来接着从上次停的地方干。说白了进程切换不是 “说停就停、说开就开”—— 得先把 “干活的摊子” 收好腾地方回来再原样摆开接着干就像你揣着档案袋去当兵回来还能续上大二的课。【进程切换核心步骤】1、保存当前进程上下文进程离开 CPU 时将其寄存器、PC、内存映射等信息写入自身 PCB相当于 “存档案”2、调度器选择目标进程由进程调度器从运行队列队列中选一个待执行的进程3、恢复目标进程上下文从目标进程的 PCB 中把之前保存的信息加载回 CPU 寄存器、更新内存页表相当于 “取档案恢复状态”4、CPU 执行目标进程目标进程从上次暂停的位置继续运行三、环境变量Ⅰ、环境变量概念环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数格式变量名 变量值键名通常大写值可是字符串、路径或路径列表。作用动态传递配置如路径、身份标识替代硬编码适配不同环境。特点全局可见进程可继承、可临时 / 永久修改系统自带或用户自定义均可。如我们在编写 C/C 代码的时候在链接的时候从来不知道我们的所链接的动态静态库在哪里但是照样可以链接成功生成可执行程序原因就是有相关环境变量帮助编译器进行查找。问题 1为什么系统指令不用加./就能直接执行自己写的指令却需要因为系统中有PATH环境变量它存储了系统指令的默认搜索路径执行指令时系统会依次在PATH的路径中查找找到对应程序就直接执行系统指令在PATH路径里所以不用加./而自己写的指令不在PATH默认路径中所以需要用./指定当前目录。问题 2如何查看环境变量echo $NAME //NAME:你的环境变量名称 例在终端执行echo $PATH即可显示PATH中所有的默认搜索路径多个路径用冒号:分隔。问题 3如何让自己写的指令不用加./就能执行把自己写的指令所在目录添加到PATH中临时生效的命令是expor PATHPATH:指令所在目录路径比如PATHPATH:/home/whb/108/lesson13添加后系统会在新路径中搜索指令此时直接输入指令名即可执行。PATH给PATH环境变量 “赋值 / 重置” 的语法开头$PATH代表当前已有的PATH内容保留原有的所有搜索路径避免覆盖:是路径的分隔符Linux 中用冒号分隔多个路径指令所在目录路径要追加的新目录比如/home/whb/108/lesson13即让系统以后在这个目录下搜索指令。此时直接输入mytest无需加./即可执行输出结果为 “我是一个进程PID15019”—— 这说明自定义指令已能通过PATH搜索到并正常运行。问题 4不小心覆盖了系统指令的默认搜索路径怎么恢复只需重新登录 Xshell 即可恢复 —— 因为临时修改的PATH仅在当前终端会话生效会话关闭重新登录后会自动加载系统默认的PATH配置。Linux 终端比如 Xshell启动时会从系统 / 用户的配置文件如/etc/profile、~/.bashrc中读取默认PATH并加载到当前会话的内存里。 当你在终端里临时修改PATH比如执行PATH/错误路径这个修改只在当前会话的内存中生效并没有写入任何配置文件。一旦关闭终端或重新登录当前会话的内存数据会被清空新会话启动时会重新从配置文件加载默认PATH自然就恢复成系统原始配置了。 简单说临时修改是 “内存级的临时变量”没动到存储配置的文件所以重启会话就能恢复问题 5为什么登录系统后会直接进入家目录因为HOME环境变量记录了当前用户的家目录路径系统登录流程会自动读取HOME的值然后切换到对应的目录比如 root 用户的HOME是/root普通用户的HOME是/home/用户名。问题 6echo $SHELL输出/bin/bash是什么意思$SHELL是记录当前用户默认 Shell 程序的环境变量/bin/bash是该 Shellbash在系统中的实际存储路径 —— 即当前用户登录后默认用 bash 进行命令交互。问题 7$SHELL的核心作用是什么核心作用是告诉系统 “当前用户登录后默认使用哪个 Shell 程序进行命令交互”其输出的路径对应该 Shell 程序在系统中的存放位置比如默认 Shell 是 zsh 时echo $SHELL会显示/bin/zsh。env命令作用用于查看当前终端的所有环境变量【核心环境变量表格】环境变量名核心作用示例值实用场景PATH系统搜索可执行命令的路径列表决定输入命令时系统去哪里找程序/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin1. 不用加./ 直接执行自定义程序需把程序路径加入 PATH2. 系统指令如 ls/cd能直接执行的核心原因HOME当前用户的家目录路径登录后默认进入的目录/home/ljh普通用户、/rootroot 用户1. cd ~/cd $HOME 一键回到家目录2. 存储用户个人配置文件如.bashrcSHELL当前用户默认使用的 Shell 解释器路径/bin/bash最常用、/bin/zsh决定终端的命令交互规则如语法、快捷键新手主要用 bashUSER当前登录的用户名ljh、root区分当前操作的用户身份权限相关操作如 sudo会用到PWD当前所在的工作目录路径/home/ljh/code-under-linux/Test-course等同于 pwd 命令的输出脚本中可动态获取当前目录LANG系统语言 / 字符编码设置en_US.utf8、zh_CN.utf8决定终端 / 程序的字符显示格式避免中文乱码TERM终端类型适配终端的显示 / 交互规则xterm-256color确保终端能正常显示颜色、光标、快捷键等Xshell/SSH 登录时自动适配LOGNAME当前登录用户的名称和 USER 基本一致ljh脚本中判断当前操作用户身份OLDPWD上一次所在的工作目录路径/home/ljh执行 cd - 可一键回到上一次的目录新手快速切换目录常用PS1终端命令行提示符的格式决定 [ljhlocalhost ~]$ 这类显示[\u\h \W]$自定义提示符样式如显示当前路径、用户名新手了解无需修改HISTSIZE控制终端保存的历史命令数量是 “按上下键调取历史指令” 的功能源头30001. 按↑/↓键快速调取之前执行过的命令2. 调整数值可增加 / 减少历史命令的存储条数环境变量如何被组织每个程序都会收到一张环境表环境表是一个字符指针数组每个指针指向一个以 ’\0’ 结尾的环境字符串Ⅱ、命令行参数我们编写代码时写的 main 函数实际是有参数的只不过我们先前用不到罢了 —— 而这些参数对应的就是命令行参数比如在终端执行./mytest arg1 arg2时程序名./mytest后面跟着的arg1、arg2就是命令行参数。这些内容会被传递给 main 函数的参数让程序能根据输入的不同参数执行对应的逻辑。常用的main函数参数int argc全称argument count参数个数作用记录终端执行程序时传入的 “命令行参数的总数量”。注意程序名本身会被算作第 1 个参数。char* argv[]全称argument vector参数向量 / 数组作用是一个字符串数组存储了终端传入的每一个命令行参数。argv[0]默认是程序本身的路径 / 名称argv[1]第 1 个用户传入的参数argv[2]第 2 个用户传入的参数…… 以此类推最多有argc个元素。在 C 语言的char* argv[]数组中该数组也被称为“命令行参数表”无论参数数量是多少argv的最后一个有效元素的下一个位置即argv[argc]会被系统自动初始化为 NULL。在执行命令./test a b c时这些参数会按顺序存入char* argv[]这个字符指针数组具体对应关系是argv[0]存储第一个参数./test程序本身的路径 / 名称argv[1]存储第二个参数aargv[2]存储第三个参数bargv[3]存储第四个参数c补充说明终端中参数之间的空格是分隔符所以./test a b c会被拆分成 4 个独立的字符串依次填入argv数组的对应位置既然 main 函数可以接收 argc 和 argv 参数这就直接证明 main 函数并非程序运行的 “原生起点”—— 程序启动时操作系统先调用启动函数如Startup()或CRTStartup()不同编译环境命名略有差异由这些启动函数完成程序运行前的基础初始化比如内存分配、运行环境配置最终再由启动函数主动调用 main 函数并将命令行参数封装为 argc 和 argv 传递给它。简言之操作系统 → Startup/CRTStartup启动函数 → main函数接收参数执行main 函数的参数正是这一调用链的直接体现。Q为什么要让 main 函数支持命令行参数argc/argv核心是为指令、工具、软件等提供命令行选项的支持—— 通过在执行程序时传入不同参数能让同一个程序实现不同功能。比如ls -lls是程序-l是命令行参数传入-l就能让ls以详细列表形式显示文件不传则是默认格式灵活适配不同使用场景。如果想实现多选项可以用循环遍历所有参数 逐个匹配判断示例代码代码语言javascriptAI代码解释#include stdio.h #include string.h int main(int argc, char* argv[]) { // 1. 无参数时打印用法提示argc1 表示只有程序名 if (argc 1) { printf(Usage: %s -[a|b|c|d] [多个参数可叠加]\n, argv[0]); printf(示例: %s -a -b -c\n, argv[0]); return 1; // 退出程序避免后续逻辑执行 } // 2. 遍历所有传入的参数i从1开始跳过argv[0]程序名 for (int i 1; i argc; i) { // 逐个判断参数匹配则执行对应功能 if (strcmp(argv[i], -a) 0) { printf(执行功能1参数-a\n); } else if (strcmp(argv[i], -b) 0) { printf(执行功能2参数-b\n); } else if (strcmp(argv[i], -c) 0) { printf(执行功能3参数-c\n); } else if (strcmp(argv[i], -d) 0) { printf(执行功能4参数-d\n); } else { // 3. 识别到非法参数时提示并继续处理其他参数 printf(警告无效参数 %s仅支持 -a/-b/-c/-d\n, argv[i]); } } return 0; }C环境变量参数实际上我们也可以通过main函数的环境变量参数如char *envp[]获取当前程序所在 bash 进程的所有环境变量。envp和argv是同类型的字符指针数组都属于 “参数向量表”envp对应的是环境变量表由于环境变量的数量不固定所以需要通过envp末尾的NULL指针来判断遍历的结束。Ⅲ、如何获取和设置环境变量G如何获取环境变量前面已经讲了 3 种获取环境变量的方式终端中通过echo命令如echo $PATH直接打印单个环境变量的值终端中通过env命令查看所有环境变量的列表C 程序中通过main函数的环境变量参数如char *envp[]在代码中获取环境变量。接下来我再讲解一种通过C语言接口获取环境变量的方法。S如何设置环境变量1、临时添加环境变量仅当前终端会话生效基本语法代码语言javascriptAI代码解释export 环境变量名值示例说明export的作用是将变量标记为 “环境变量”使子进程可以继承该变量关闭终端后该环境变量会失效。2、永久添加环境变量所有终端会话生效需将设置指令写入 Shell 配置文件以 Bash 为例编辑配置文件代码语言javascriptAI代码解释echo export 环境变量名值 ~/.bashrc示例代码语言javascriptAI代码解释echo export MYENVhello world ~/.bashrc✅当前终端进程想用新配置→ 必须执行source ~/.bashrc相当于 “给当前 Shell‘刷新内存’”✅不想执行 source→ 直接关闭当前终端重新打开新终端即可新终端启动时会自动读取修改后的~/.bashrc。说明不同 Shell 对应的配置文件不同如 Zsh 对应~/.zshrc配置文件修改后新启动的终端会自动加载该环境变量。3、临时取消仅当前终端生效关闭终端即失效核心命令unset代码语言javascriptAI代码解释# 取消单个环境变量比如你设置的MYENV unset MYENV # 验证是否取消输出为空则成功 echo $MYENV补充清空 PATH慎用如果想临时清空某个环境变量的值而非彻底取消可以直接赋值为空代码语言javascriptAI代码解释# 仅清空值变量仍存在不推荐容易踩坑 MYENV # 验证输出为空但变量还在 env | grep MYENV # 仍能看到MYENV4、永久取消所有终端生效需删除配置文件中的定义针对你之前写到~/.bashrc里的export MYENVhello world操作步骤编辑配置文件删除环境变量定义代码语言javascriptAI代码解释# 用vim打开~/.bashrc vim ~/.bashrc # 操作步骤 # 1. 按G跳到文件最后一行 # 2. 找到你添加的export MYENVhello world这一行 # 3. 按dd删除该行或在行首加#注释掉 # 4. 按ESC → 输入:wq 保存退出让修改生效代码语言javascriptAI代码解释# 刷新当前终端的配置立即永久取消不想用该指令重新打开终端也会生效 source ~/.bashrc # 验证无论当前终端/新终端echo $MYENV 都为空 echo $MYENV # 输出空Ⅳ、环境变量的继承性 全局属性 本地变量1、继承性父进程Shell通过export MYENV123456设置环境变量后子进程./test程序能通过getenv继承并读取该值运行./test输出 “获取到的 MYENV 值123456”2、全局属性环境变量的 “全局” 是父→子进程链条内的单向共享子进程会继承父进程的环境变量但子进程修改的是独立副本不影响父进程。子进程会继承父进程的环境变量子进程对环境变量的修改不影响父进程Q为啥子进程修改环境变量不影响父进程这是因为进程的环境变量是 “复制继承” 而非 “共享”底层逻辑是当父进程创建子进程时会把自己的环境变量完整复制一份给子进程 —— 子进程拿到的是 “副本”不是和父进程共享同一份数据。所以子进程修改的是 “自己的副本”不会动到父进程的原始数据就像你复制了一份文件修改副本不会影响原文件是一个道理。3、本地变量本地变量是仅在当前 Bash 进程内生效的变量不加export的变量不会被 Bash 的子进程继承。证明本地变量不会被继承4、内建命令和常规命令之前我们认为 “所有命令都会以 Bash 进程的子进程形式执行”这个说法其实不准确。实际使用中Shell 命令可以分为两类常规命令和内建命令。1. 常规命令常规命令的执行是通过创建子进程来完成的—— 这些命令是独立的程序Bash 会启动一个新的子进程让子进程去运行这个程序程序跑完子进程就结束。2. 内建命令内建命令的执行Bash不会创建子进程而是由 Bash 自己直接执行 —— 相当于 Bash 调用了自己内置的功能类似 Bash 自己写好的函数不用额外开新进程。执行./test常规命令时Bash 会创建子进程但父进程的本地变量不会传给子进程所以./test读不到MYENV而echo是内建命令执行时 Bash 不会开子进程直接在自身进程内运行因此能访问到父进程的本地变量所以echo $MYENV能输出123。【模拟cd内建指令】在 Shell 中cd是内建指令它的底层是通过chdir系统调用函数实现的。chdir函数函数原型int chdir(const char *path);功能用于修改当前进程的工作目录。参数path字符串形式的目标路径支持绝对路径 / 相对路径。返回值成功返回0失败返回-1同时会设置errno标识错误原因代码语言javascriptAI代码解释#include unistd.h #include stdio.h int main(int argc, char *argv[], char *envp[]) { sleep(20); // 延迟方便观察进程状态 printf(change begin\n); if (argc 2) // 接收命令行参数作为目标路径 { chdir(argv[1]); // 调用chdir修改当前进程的工作目录 } sleep(20); return 0; }第一次change begin前指向的是原目录/home/lih/code-under-linux/Test-course第二次change begin后指向的是目标目录/home/lih—— 说明chdir确实成功修改了子进程的工作目录ls -ld /proc/[进程ID]/cwd作用查看cwd进程工作目录的软链接自身信息
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

石家庄哪里有做外贸网站的公司网页设计导航栏尺寸

课题介绍 本课题聚焦自然灾害频发地区数据零散、风险研判滞后、应急响应效率低的痛点,开展基于PythonDjango的自然灾害频发地区情况数据分析系统的设计与实现工作。系统以Python作为核心开发语言,依托Django框架搭建高效稳定的后端服务架构,负…

张小明 2026/1/2 2:38:10 网站建设

搜索别人的网站是带logo的请问怎么做的网站建设中心

摘 要 新世纪的到来,伴随着计算机信息化的不断发展,以及校园网的广泛应用,考试的不断增多,传统的考试模式已经满足不了现在学校的发展。计算机的出现带动了信息化的发展,越来越多的系统正在通过在线审核创建。世界各…

张小明 2026/1/1 4:54:34 网站建设

centos7.2做网站网站建设基本知识代码

3步零代码快速上手JimuReport:从报表小白到数据可视化高手 【免费下载链接】JimuReport jeecgboot/JimuReport: JimuReport是一个开源的轻量级报表工具,提供零编码数据可视化能力,支持多种数据库类型,能够快速生成各种复杂报表并实…

张小明 2026/1/2 2:38:08 网站建设

深圳云网站建站公司石景山做网站

Android虚拟相机VCAM完全指南:从核心原理到实战应用 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam Android虚拟相机VCAM是一款基于Xposed框架的开源项目,通过摄像…

张小明 2026/1/2 2:38:13 网站建设

网站建设合同2018最新网站建设哪家公司好

LogViewer终极指南:快速掌握高效日志分析技巧 【免费下载链接】LogViewer 项目地址: https://gitcode.com/gh_mirrors/logvie/LogViewer 在日常开发和系统维护中,日志分析是每个技术人员的必备技能。面对海量的日志数据和复杂的格式要求&#xf…

张小明 2026/1/2 2:38:11 网站建设

邯郸网站建设哪家专业wordpress金融插件

2025轻量级多模态革命:DeepSeek-VL2-Tiny如何重塑终端AI交互 【免费下载链接】deepseek-vl2-tiny 融合视觉与语言理解的DeepSeek-VL2-Tiny模型,小巧轻便却能力出众,处理图像问答、文档理解等任务得心应手,为多模态交互带来全新体验…

张小明 2026/1/2 2:38:11 网站建设