当前位置:首页>面试真题>大厂 Linux 内核面试真题解析,轻松应对技术面试

大厂 Linux 内核面试真题解析,轻松应对技术面试

  • 2026-05-30 08:13:20
大厂 Linux 内核面试真题解析,轻松应对技术面试

在后端开发、嵌入式、服务器开发等岗位面试中,Linux内核一直是大厂必考核心板块。绝大多数求职者复习时杂乱无章,知识点零散不成体系,面对面试官深挖进程管理、内存布局、进程调度、网络协议栈、硬件中断五大高频模块时,常常一问就卡壳,只能背诵浅层答案,无法应对底层原理追问,最终错失offer。想要稳住内核面试环节,不能只记表面概念,必须吃透真题考点,摸清大厂真实提问逻辑与答题思路。

本文整理大厂高频Linux内核面试真题,聚焦进程、内存、调度、网络、中断五大核心模块,贴合真实面试追问节奏,从基础概念、底层原理、源码逻辑到实战场景逐一拆解,同时给出标准满分答题话术。帮助大家补齐知识短板,搭建完整内核知识体系,告别临场紧张、答题卡顿的问题,从容应对层层追问,轻松拿下Linux内核相关技术面试。

一、进程管理面试真题解析

面试题写作模版

1.1 从内核层面说一说进程和线程的本质区别?Linux为什么线程开销更小?

Linux内核不存在专门的线程结构体,进程和线程统一使用task_struct结构体描述,二者底层都是轻量级进程。二者核心区别在于资源共享程度不同,进程拥有独立完整的虚拟地址空间、独立页表、独立文件描述符表、独立信号处理上下文,进程之间完全隔离,一个进程崩溃不会影响系统其他进程。

线程共享所属进程全部地址空间、文件句柄、全局变量、信号处理方式,仅独有私有栈、寄存器、程序计数器与线程局部变量。因为线程无需切换地址空间、无需切换页表,上下文切换只需要保存少量运行寄存器,所以线程切换开销远小于进程,这也是高并发服务优先使用多线程的根本原因。

1.2 Linux进程一共有几种状态?分别什么时候出现?

Linux内核一共定义6种原生进程状态,面试重点考察5种常用状态。TASK_RUNNING运行态,包含正在CPU运行、就绪等待调度两种情况,所有可抢占进程都处于该队列;TASK_INTERRUPTIBLE可中断睡眠态,进程等待资源主动休眠,可以被信号唤醒,日常阻塞IO、sleep函数都会进入该状态

TASK_UNINTERRUPTIBLE不可中断睡眠态,多用于磁盘读写、硬件IO交互,不会被信号唤醒,保证硬件操作原子性,top命令中D状态进程就是该类型;TASK_STOPPED暂停态,收到SIGSTOP信号暂停运行,收到SIGCONT即可恢复;EXIT_ZOMBIE僵尸态,子进程退出,用户资源全部释放,内核task_struct残留未回收;EXIT_DEAD彻底消亡态,父进程回收完毕,进程彻底从内核清除。

1.3 僵尸进程如何产生?危害是什么?怎么解决?

子进程调用exit退出后,用户态代码段、堆栈、数据段全部释放,但是内核会保留task_struct进程描述符,用来存放退出码、退出状态,方便父进程获取子进程运行结果。如果父进程一直不调用wait、waitpid回收子进程,子进程就会一直滞留在内核中,形成僵尸进程。僵尸进程不占用内存和CPU,但是会持续占用系统PID号,服务器长期运行堆积大量僵尸进程,会耗尽全局PID,导致系统无法新建进程、服务无法启动。

为了直观看到僵尸进程现象,这里编写测试代码,复现完整场景:

#include <stdio.h>#include <unistd.h>#include <stdlib.h>intmain(){    pid_t pid = fork();if(pid > 0)    {//父进程休眠20秒,不做任何回收操作        sleep(20);    }elseif(pid == 0)    {//子进程直接退出,残留PCB变成僵尸进程        exit(0);    }return0;}

解决方案一共有三种:父进程主动循环调用waitpid回收子进程;父进程注册SIGCHLD信号捕捉函数,子进程退出自动触发信号批量回收;让父进程提前退出,子进程被init进程领养自动回收。

1.4 孤儿进程是什么?内核如何处理孤儿进程?

父进程提前退出消亡,子进程依旧正常运行,此时子进程就变成孤儿进程。Linux内核有完善的托管机制,一旦检测到孤儿进程,会自动将所有孤儿进程挂载到PID=1的init/systemd进程下,由一号进程统一负责后续资源回收。因此孤儿进程永远不会变成僵尸进程,不会造成系统资源泄漏,对系统无任何危害。

1.5 说一说fork函数完整执行流程,为什么fork会返回两个值?

fork是复制当前进程创建子进程的系统调用,完整内核流程分为五步。第一步内核分配全新task_struct结构体,为子进程申请进程编号;第二步浅拷贝父进程所有页表,不拷贝物理内存页面;第三步拷贝父进程打开的文件描述符、信号屏蔽字、进程上下文;第四步将子进程加入CPU运行就绪队列,等待调度;第五步分别设置返回值,父进程返回子进程PID,子进程返回0。之所以有两个返回值,是因为fork执行完毕后,系统存在两个独立进程,父子进程各自继续往下执行代码,分别拿到不同返回值,从而区分自身身份。

1.6 什么是写时复制COW?fork为什么需要写时复制?

早期Linux fork会完整拷贝父进程全部物理内存,开销极大,后续内核引入写时复制优化机制。fork创建子进程之后,父子进程共享同一份物理内存页,内核将所有内存页权限修改为只读。无论是父进程还是子进程,只要尝试修改内存数据,立刻触发CPU缺页异常,内核此时才会单独拷贝一份全新物理内存页给修改方,并且更新页表映射关系。绝大部分场景下,子进程fork之后会立刻调用exec加载新程序,无需拷贝内存,写时复制可以省去大量无效内存拷贝,极大降低fork系统调用开销。

1.7 fork之后父子进程谁先优先执行?可以控制执行顺序吗?

fork之后父子进程执行顺序完全由CPU调度器决定,内核不做任何人为干预,时序随机,无法直接固定先后顺序。如果业务需要强制控制执行流程,可以借助sleep休眠、管道阻塞、信号量同步、互斥锁四种方式人为阻塞其中一个进程,从而规定父子进程运行先后顺序。

1.8 vfork和fork区别是什么?什么时候用vfork?

第一,内存机制不同,fork使用写时复制,父子进程内存独立;vfork全程共享物理内存,没有任何内存拷贝。第二,执行流程不同,vfork保证子进程优先运行,子进程exec或者exit之后,父进程才可以继续执行。第三,使用限制不同,vfork子进程不能修改共享内存数据,不能直接return退出,只能调用exit或者exec。vfork性能高于fork,专门搭配exec函数使用,避免无意义的内存复制。

1.9 exit和_exit有什么本质区别?

_exit是原生内核系统调用,直接粗暴退出进程,清空PCB、释放进程资源,不会刷新用户态缓冲区、不会调用用户自定义析构函数。exit是库函数,内部封装了_exit,退出之前会自动刷新IO缓冲区、执行atexit注册的退出钩子函数、清理用户态资源,最后再调用内核接口退出进程。日常开发一律使用exit,底层内核开发才会使用_exit。

1.10 什么是进程上下文?进程上下文切换做了哪些工作?

进程上下文就是进程运行时所有寄存器、堆栈、页表、程序计数器、打开文件状态等全部运行现场信息。当CPU时间片耗尽或者进程主动阻塞,内核需要切换另一个进程运行,就会触发上下文切换。切换步骤分为四步:保存当前进程所有CPU寄存器现场;刷新CPU缓存与TLB页表缓存;切换全局页表目录,更换进程虚拟地址空间;加载新进程寄存器上下文,恢复运行现场。频繁上下文切换会损耗CPU性能,造成系统负载升高。

重点必看(面试必问,基础高频)——进程管理属于Linux内核面试开篇基础考题,几乎每场面试都会涉及,主要考察进程与线程底层差异、fork写时复制机制、僵尸进程与孤儿进程成因及解决办法、fork和vfork的核心区别、进程上下文切换全过程,还有exit与_exit底层调用差异。面试官通过这一部分题目,主要判断我们是否掌握Linux统一进程调度模型,能否理解fork内存优化的底层设计逻辑,同时能不能分辨异常进程状态并且给出可行解决方案。

这部分题目属于基础送分题,一旦回答出错,会直接降低面试官对你内核基础能力的整体评分。面试中常见的连环追问包含fork返回两个返回值的原因、僵尸进程和孤儿进程哪一类需要业务手动处理、实际业务开发中多进程和多线程该如何合理选型。

二、内存管理面试真题解析

面试题写作模版

2.1 为什么需要虚拟内存?没有虚拟内存会有什么问题?

物理内存直接寻址存在内存地址冲突、进程互相干扰、内存利用率低三大痛点,因此内核引入虚拟内存。虚拟内存核心作用四点:实现进程地址空间隔离,进程互不影响;屏蔽物理内存碎片,让进程使用连续虚拟地址,对应离散物理地址;支持内存换页,磁盘充当临时内存,突破物理内存大小限制;支撑写时复制、内存共享、动态库加载等内核核心机制。如果没有虚拟内存,所有进程直接访问物理内存,极易出现地址覆盖、进程互相篡改数据,系统稳定性完全无法保障。

2.2 说一说Linux四级页表寻址过程?

64位Linux内核采用四级页表完成虚拟地址转物理地址,分别是页全局目录PGD、页上级目录PUD、页中间目录PMD、页表项PTE。CPU拆分虚拟地址为四段偏移量,依次查询四级页表,逐级索引找到最终物理页起始地址,最后加上页内偏移,得到完整物理内存地址。四级分页可以节约页表内存占用,适配64位超大地址空间,同时方便内核按需分配页表,避免一次性占用大量连续内存。

2.3 什么是缺页异常?分为哪两种类型?

进程访问合法虚拟地址,但是该虚拟地址没有映射物理内存,或者页面被换出到磁盘swap分区,MMU内存管理单元触发缺页异常,陷入内核处理。缺页异常分为两大类,主缺页:内存页面不在物理内存,需要从磁盘文件/swap分区读取数据,耗时慢;次缺页:页面已经存在物理内存,只是页表没有建立映射,仅需要修改页表,无IO开销,速度极快。

2.4 什么是内存抖动(颠簸)?

系统物理内存不足,内核频繁将内存页面换出到磁盘swap分区,同时又需要立刻把磁盘页面重新换入内存,CPU大量资源消耗在内存换页IO上,业务进程几乎无法运行,整机性能断崖式下跌,这个现象就是内存颠簸。出现内存颠簸说明物理内存严重不足,需要扩容内存或者优化程序内存占用。

2.5 什么是OOM杀手?OOM打分机制是什么?

系统物理内存和swap分区全部耗尽,内核无法分配任何内存页面,为了保证内核本身不崩溃,会触发OOM杀手机制。内核会遍历系统全部进程,根据虚拟内存占用、物理内存占用、进程生命周期、是否为系统核心进程进行打分,oom_score分数越高,越容易被杀死。内核优先杀死用户态大内存进程,绝对不会杀死内核关键进程,保障系统基础运行。下面编写无限分配内存代码,直观复现OOM被杀现场:

#include <stdlib.h>intmain(){//无限申请堆内存,耗尽整机内存while(1)    {        malloc(1024*1024);    }return0;}

2.6 堆和栈在内核层面有什么区别?

用户栈内存空间固定,编译阶段就确定大小,由内核自动分配、自动释放,无需手动管理,生长方向从高地址向低地址,不存在内存碎片。堆空间由用户手动malloc、free管理,空间不固定,生长方向从低地址向高地址,堆内存分配产生大量内存碎片,堆内存扩张需要内核调用brk、mmap系统调用扩容,内核不会自动回收堆内存。

2.7 mmap内存映射原理是什么?有什么优势?

mmap直接将磁盘文件映射到进程虚拟地址空间,进程直接通过指针读写内存即可操作文件,无需经过内核缓冲区。普通read/write需要两次数据拷贝:磁盘->内核缓冲区->用户缓冲区;mmap只需要一次数据拷贝,减少内存拷贝次数,提升文件读写效率,适合大文件传输。

2.8 什么是内存泄漏和内存溢出?二者区别?

内存泄漏:程序用完堆内存不free,内存一直被占用,长期运行内存越来越少,不会立刻崩溃,属于缓慢资源消耗。内存溢出:申请内存超出进程虚拟地址空间上限,直接申请失败,程序当场崩溃。一句话区分:泄漏是内存慢慢变少,溢出是直接放不下立刻报错。

2.9 TLB是什么?为什么需要TLB?

TLB是页表高速缓存,缓存常用虚拟地址和物理地址映射关系。页表寻址需要四次内存访问,速度很慢,TLB缓存热点地址映射,命中之后直接完成地址转换,无需访问内存页表,大幅提升寻址速度。TLB miss未命中时,才需要逐级访问四级页表完成寻址。进程切换必须刷新TLB,防止地址映射错乱。

2.10 内存对齐的底层内核原因?

CPU硬件只能按照固定字节块读取内存,未对齐数据需要CPU两次读取再拼接,消耗额外时钟周期。内存对齐之后,CPU一次总线传输即可读完数据,提升内存访问效率。内存对齐由编译器完成,内核硬件层面强制要求对齐访问,避免硬件异常。

重点必看(重难点,深挖底层——内存管理是内核面试核心重难点,面试官会深度深挖底层原理,核心考察内容包含虚拟内存存在的意义、64位系统四级页表寻址流程、缺页异常分类与处理逻辑、OOM杀手机制原理与打分规则、内存泄漏和内存溢出的区分、mmap内存映射原理、TLB页表缓存作用以及内存颠簸问题成因。

面试官重点考察我们是否吃透虚拟内存进程隔离的核心本质,有没有线上服务器内存故障排查实战思路,是否掌握内核各类内存拷贝优化方案。后端开发岗位尤其喜欢结合线上事故,追问OOM触发场景、内存泄漏排查步骤。日常高频追问有系统触发OOM时内核优先杀死哪类进程、mmap相较于read/write读写文件的优势、CPU寻址为什么必须搭配TLB缓存加速。

三、进程调度面试真题解析

面试题写作模版

3.1 Linux 目前默认调度器是什么?摒弃旧时间片的原因?

Linux2.6 之后全部默认使用 CFS 完全公平调度器,彻底摒弃传统固定时间片调度。旧时间片调度不公平,CPU 密集型进程和 IO 密集型进程抢占资源不合理,交互程序卡顿。CFS 不使用固定时间片,基于虚拟运行时间 vruntime 调度,保证所有进程均分 CPU 时间,兼顾交互流畅度和后台任务公平性。

3.2 CFS 调度器核心原理?红黑树作用?

CFS 核心维护 vruntime 虚拟运行时间,进程占用 CPU 越久,vruntime 越大,优先级越低。内核将所有就绪进程放入红黑树,红黑树最左侧节点就是 vruntime 最小的进程,每一次调度直接选择最左节点运行。红黑树保证增删查改都是 O (logn) 时间复杂度,调度效率极高,同时彻底避免进程饥饿问题。

3.3 nice 值作用?普通用户为什么不能减小 nice 值?

nice 值调整普通进程静态优先级,范围 - 20~19,数值越小优先级越高。出于系统安全限制,普通用户只能调高 nice 值,只能降低自己进程优先级,不能抢占系统 CPU 资源;只有 root 管理员可以调低 nice 值,提升进程优先级,保障核心业务优先占用 CPU。

为了直观演示 nice 值如何影响进程调度优先级,我们可以通过一段代码来设置进程 nice 值并观察效果:

#include <stdio.h>#include <unistd.h>#include <sys/resource.h>intmain(){// 获取当前进程nice值int current_nice = nice(0);    printf("当前nice值 = %d\n", current_nice);// 提升nice值(降低优先级),普通用户可执行    nice(5);    printf("调整后nice值 = %d\n", nice(0));// 普通用户无法降低nice值(提升优先级),会报错// nice(-10);while(1) { }return0;}

普通用户只能增加 nice 值,无法减小;只有 root 可设置负 nice 值,直接验证了系统安全限制。

3.4 Linux 五种调度策略分别适用场景?

SCHED_NORMAL:普通前台业务进程,默认 CFS 调度;SCHED_RR:实时轮转,硬实时业务,时间片轮转抢占;SCHED_FIFO:实时先来先服务,一旦运行不主动让出 CPU;SCHED_BATCH:后台批量计算任务,降低交互响应;SCHED_IDLE:系统极低优先级后台闲置任务。实时进程优先级全部高于普通 CFS 进程。

3.5 什么是进程抢占?分为哪两种抢占方式?

CPU 强行剥夺当前正在运行进程的执行权限,切换其他进程运行,叫做进程抢占。分为时间片抢占:当前进程时间片耗尽,被调度器抢占;信号抢占:更高优先级实时进程就绪,直接抢占低优先级进程 CPU 资源。Linux 支持内核态抢占,系统响应速度更快。

3.6 IO 密集型和 CPU 密集型进程,CFS 分别如何调度优化?

IO 密集型进程大部分时间阻塞休眠,vruntime 增长很慢,优先级自动变高,唤醒之后可以立刻抢占 CPU,保证交互响应快。CPU 密集型进程一直占用 CPU,vruntime 持续上涨,优先级持续降低,自动让出 CPU,保证不会长期霸占算力。CFS 天然适配两类进程,无需人工配置。

3.7 如何降低系统上下文切换次数?

使用多线程代替多进程,减少地址空间切换;合理调整进程 nice 值,减少频繁抢占;业务线程数目等于 CPU 核心数,避免线程过多争抢时间片;关闭不必要定时器,减少定时抢占;采用 IO 多路复用,减少大量阻塞线程。

3.8 实时进程和普通进程本质区别?

普通进程基于公平调度,追求所有进程公平占用 CPU,允许抢占,延迟可控。实时进程追求最低响应延迟,优先级高于所有普通进程,专门用于工业控制、机器人、硬件实时响应场景,不遵循公平原则,优先保障实时任务优先运行。

重点必看(性能优化必考)——进程调度模块面向高并发服务开发必考,贴合服务器性能调优实际工作场景,核心考察CFS完全公平调度器工作原理、虚拟运行时间vruntime运行规则、就绪队列红黑树设计意义、nice优先级参数作用、Linux五类调度策略适配场景、进程抢占两种触发方式、CPU密集型与IO密集型进程差异化调度逻辑,以及线上系统上下文切换过高的优化方案。

面试官主要考察我们是否理解现代Linux内核调度逻辑,能不能结合实际业务场景说出调度优化思路,是否清楚上下文切换过高带来的CPU性能损耗。常见面试追问为Linux摒弃传统固定时间片调度器的原因、线上服务器监控发现上下文切换飙升完整排查流程。

四、Linux网络内核面试真题解析

面试题写作模版

4.1 描述 Linux 内核从网卡收包到应用层 recv 的全过程?

第一步网卡接收网线数据包,通过 DMA 直接搬运数据到内核内存缓冲区,全程不占用 CPU;第二步网卡发起硬中断,通知内核有数据包到达;第三步硬中断上半部快速应答硬件,不处理业务,唤醒网络软中断;第四步软中断依次经过链路层、IP 层、TCP 层协议解析;第五步内核将完整报文放入 socket 接收队列;第六步唤醒阻塞的用户进程,用户调用 recv 系统调用读取数据。

4.2 为什么网络收包要拆分硬中断和软中断?

硬中断上下文禁止睡眠、禁止长时间运行。协议解析、报文重组逻辑耗时较长,不能放在硬中断中执行。拆分上下半部,硬中断快速响应硬件,软中断异步处理复杂协议逻辑,既保证硬件响应实时性,又不阻塞系统整体运行,兼顾实时性和吞吐量。

4.3 NAPI 机制是什么?解决什么网络痛点?

传统网卡每收到一个数据包就触发一次硬中断,高并发千万级小包场景下,中断次数爆炸,CPU 被中断耗尽。NAPI 混合中断 + 轮询模式:小包流量低时使用中断;大流量高并发时关闭中断,内核主动轮询网卡批量收包,大幅减少中断次数,降低 CPU 开销,是 Linux 网络高性能核心优化方案。

4.4 Socket 在内核的本质是什么?

socket 不是文件也不是端口,内核本质是一个 struct sock 结构体,内部包含发送缓冲区、接收缓冲区、连接状态、五元组信息、协议类型。所有 send/recv 读写,本质都是读写内核 socket 缓冲区,用户进程无法直接操作网卡和协议栈,只能通过 socket 系统调用和内核交互。下面简易代码直观体现 socket 系统调用内核流转:

#include <sys/socket.h>#include <netinet/in.h>intmain(){//内核创建sock结构体,返回文件描述符int fd = socket(AF_INET, SOCK_STREAM, 0);    struct sockaddr_in addr;    addr.sin_port = htons(8080);    bind(fd, (struct sockaddr*)&addr, sizeof(addr));//内核绑定端口    listen(fd, 5);//内核创建半连接队列    accept(fd, NULL, NULL);//内核从全连接队列取连接return0;}

4.5 TCP 内核两个队列:半连接队列、全连接队列作用?

半连接队列 SYN 队列:收到客户端 SYN 报文,存放未完成三次握手的连接,防御 SYN 洪水攻击。全连接队列 Accept 队列:三次握手完全完成,连接就绪,等待应用层 accept 取走连接。全连接队列溢出会直接丢弃新连接,导致服务端无法接入新客户端。

4.6 为什么网络字节序固定为大端?主机字节序和网络字节序转换函数?

不同主机大小端不统一,跨主机通信字节错乱,TCP/IP 协议统一规定全网使用大端网络字节序。主机发送数据必须 htons/htonl 转大端,主机接收数据必须 ntohs/ntohl 转回本机字节序,保证全网设备解析一致。

4.7 什么是 TIME_WAIT 状态?为什么需要等待 2MSL?

主动关闭连接一方进入 TIME_WAIT,必须等待 2MSL 时长。两个作用:保证最后一次 ACK 报文被对方成功接收;等待网络中残留延迟报文彻底过期,避免下一条新连接收到旧连接残余报文,保证连接可靠性。

4.8 零拷贝原理?Linux 零拷贝 sendfile 优势?

传统文件发送:磁盘 -> 内核缓冲区 -> 用户缓冲区 -> 内核 socket 缓冲区 -> 网卡,四次拷贝、两次系统调用。sendfile 零拷贝:数据直接磁盘到内核缓冲区,再直接拷贝到网卡,无需用户缓冲区,全程无用户态内核态切换,减少数据拷贝次数,极大提升文件传输服务器性能。

重点必看(后端/网络岗核心)——网络子系统是后端开发、网络开发岗位核心考点,全程围绕内核网络协议栈流转展开,核心考察网卡从收包到应用层recv读取数据完整内核流程、网络收包拆分硬中断与软中断的原因、NAPI高性能收包机制原理、Socket在内核真实结构体本质、TCP半连接队列和全连接队列分工、TIME_WAIT状态2MSL等待必要性、sendfile内核零拷贝实现原理。

面试官希望我们完整梳理数据包在内核的全链路流转过程,掌握内核原生网络性能优化手段,吃透TCP在内核底层的连接管理逻辑。高频面试追问包含TCP半连接队列溢出如何防御、服务器大量TIME_WAIT连接如何调优、sendfile零拷贝适合哪些业务场景。

五、中断机制面试真题解析

面试题写作模版

5.1 中断和系统调用区别?

系统调用是用户态进程主动发起的行为,应用程序通过特定指令主动陷入内核态执行内核服务,整个过程运行在进程上下文中,执行流程依附于当前进程,执行完毕后会原路返回继续运行用户态代码。中断则是由硬件设备被动触发的信号,硬件检测到事件后主动向 CPU 发送中断请求,强行打断当前正在执行的进程,转而执行中断处理逻辑,运行在独立的中断上下文。简单来说,系统调用是程序主动向内核申请服务,属于主动交互;中断是硬件强制通知内核处理外部事件,属于被动响应。

5.2 中断上下文和进程上下文核心区别?

进程上下文是伴随进程运行而存在的执行环境,完全依附于某一个具体进程。在该环境下代码可以正常睡眠、阻塞等待资源,能够合法访问用户态地址空间,当进程时间片耗尽或主动阻塞时,内核可以对其进行调度切换,是日常业务代码主要的运行环境。中断上下文由硬件中断触发产生,不属于任何一个进程,它会直接抢占 CPU 资源运行。

该环境存在严格的限制,绝对不允许执行睡眠、阻塞类操作,也无法访问用户态内存空间,同时要求代码执行时间尽可能简短。一旦在中断上下文中调用休眠函数,由于没有对应的进程控制块来唤醒它,会造成中断永久挂起,最终导致整个系统死机崩溃。

5.3 中断上半部、下半部分工?

Linux 为了兼顾硬件响应速度与系统整体运行效率,将中断处理拆分为上半部和下半部。上半部也就是硬中断,是中断触发后最先执行的逻辑,核心任务是快速响应硬件设备,完成硬件寄存器应答、中断标记清除等极简操作,执行耗时必须极短,不会处理复杂的业务逻辑。

下半部作为延迟处理机制,承接上半部拆分出来的耗时任务,比如数据解析、报文处理、IO 读写等。这样拆分可以实现职责解耦,既保证硬件设备能被及时响应,又能避免复杂逻辑长时间占用中断资源,防止系统整体运行受阻,总结来讲就是上半部追求快速简洁,下半部负责完整处理业务。

5.4 三种下半部机制:软中断、tasklet、工作队列区别?

软中断是内核性能最高的下半部实现方式,支持在多核 CPU 上并行执行,运行过程中不允许睡眠,主要应用在网络收包、磁盘读写等高性能、高并发的场景中。tasklet 是基于软中断进一步封装而来的机制,对外提供更简单的调用接口,使用门槛更低,同一编号的 tasklet 无法在多核间并行执行,只能串行运行,同样不支持睡眠,适合功能单一、逻辑简单的中断任务。工作队列依托内核线程实现,和前两者最大的区别是允许睡眠和阻塞,专门用来处理执行耗时久、需要等待资源的任务,常见于硬件驱动中延时处理、设备状态巡检等场景。

5.5 中断嵌套 Linux 支持吗?

Linux 内核默认是支持中断嵌套的,优先级更高的中断请求到来时,可以抢占当前正在执行的低优先级中断,这种设计能够保障键盘、网卡、定时器等关键硬件的实时响应能力。但在实际使用和驱动开发中,并不建议让中断嵌套层级过深。一方面,中断栈的空间有限,嵌套过深容易出现栈溢出问题;另一方面,多层中断叠加会拉长整体处理耗时,抢占正常业务进程的 CPU 时间,最终造成系统响应卡顿、整体性能下降。

5.6 什么是中断共享?优缺点?

中断共享指多个不同的硬件设备,注册并使用同一个硬件中断号,这是 Linux 内核为解决系统中断号资源有限而设计的复用机制。当中断信号触发时,内核会依次遍历该中断号下所有设备注册的驱动处理函数,由每个驱动自行判断本次中断是否由自身设备产生,确认后再执行对应的处理逻辑。

它的优点是可以充分利用有限的硬件中断号,解决设备增多导致中断号不足的问题,提升硬件资源利用率。缺点也较为明显,每一次中断触发后,所有关联驱动都要执行判断逻辑,会增加额外的软件开销;同时一旦共享中断的某一个设备出现异常,也可能对其他设备的中断处理造成影响。

5.7 为什么中断处理函数中不能调用 sleep?

sleep 函数的本质是让当前执行单元主动让出 CPU,并进入休眠状态,等待内核调度唤醒后再继续运行。但中断上下文没有对应的进程控制块,不属于任何一个进程,内核没有机制去记录、调度和唤醒处于休眠状态的中断上下文。

如果在中断处理函数中调用 sleep 或是其他阻塞类函数,中断逻辑会永久停留在休眠状态无法恢复,直接造成对应硬件中断卡死,严重时会引发整机系统崩溃。因此内核严格规定,所有中断上下文代码,都禁止执行睡眠、阻塞、等待信号量等相关操作。

重点必看(内核底层深挖题)——中断机制属于中高级开发深度深挖考点,偏向内核底层运行环境,核心考察系统调用和中断本质区别、进程上下文与中断上下文核心差异、中断上半部和下半部分工逻辑、软中断、tasklet、工作队列三种下半部机制选型差异、Linux中断嵌套支持情况、中断共享机制优缺点,以及中断上下文禁止调用sleep休眠函数的底层原因。

面试官通过这部分题目,判断我们是否真正理解内核两种运行上下文的硬性限制,懂底层中断处理流程,具备基础驱动开发底层认知。常见深挖追问为中断上下文为什么不能使用互斥锁、业务开发中软中断和工作队列该如何选型。

五、通用面试答题思路

(1)纯分段口述,直接背诵

面对内核原理类基础考题,回答时遵循循序渐进的口述逻辑即可,首先直白解释对应内核机制的基础定义,其次完整梳理内核运行的完整执行流程,接着说明内核设计该机制想要解决什么底层问题,最后补充机制自身优缺点以及适配的业务场景,条理清晰不会出现答题卡顿。以写时复制为例,先说明写时复制是fork创建子进程配套的内存优化机制,再讲fork之后父子进程共享物理内存页面、页面统一设置为只读,只有数据修改才触发缺页异常拷贝内存,之后说明该机制是为了解决早期fork全量拷贝内存资源浪费的问题,最后补充该机制完美适配fork之后立刻调用exec加载新程序的主流业务场景。

遇到两类内核机制对比类题目,统一按照相同点、核心差异、业务选型三段式作答。先讲明二者底层同源的相同之处,再聚焦运行机制、资源开销、使用限制讲核心区别,最后结合线上真实业务场景给出明确选型建议。以进程和线程对比为例,先说明Linux下二者底层都是基于task_struct结构体的调度实体,再区分地址空间、资源共享程度、上下文切换开销三大差异,最后说明高并发IO多路复用场景优先用多线程,需要进程崩溃隔离、服务独立部署场景优先用多进程。

遇到服务器故障、内核异常类问题,按照现象描述、底层成因、内核运行逻辑、线上解决方案四段回答。先描述服务器出现的直观异常现象,再分析问题产生的直接原因,接着结合内核底层运行机制解释为什么会出现该故障,最后分临时应急、长久优化给出落地解决方案。以僵尸进程问题为例,先说明僵尸进程是子进程退出后PCB残留占用系统PID,再讲明成因是父进程没有调用接口回收子进程资源,随后补充内核保留PCB是为了存储子进程退出状态码供父进程读取,最后给出信号捕捉回收、循环waitpid回收、父进程退出移交init进程托管三种解决方案。

(2)面试答题避坑注意事项

回答内核题目有四条绝对不能出错的硬性底层规则,一旦说错直接暴露基础短板。第一,中断上下文存在严格限制,全程不允许休眠阻塞、不允许访问用户态空间,没有绑定任何进程PCB,一旦休眠会直接导致系统卡死崩溃。第二,新版Linux CFS调度器已经完全舍弃固定时间片,依靠虚拟运行时间完成调度,就绪进程统一存放在红黑树中,答题不能再提及时间片调度。第三,Socket不是端口也不是普通文件,内核真实本质是struct sock结构体,自带独立收发缓冲区,所有收发接口本质都是读写内核缓冲区。第四,fork默认开启写时复制,不会直接拷贝物理内存,而vfork全程共享父子进程内存,无任何内存拷贝操作。

日常口述答题还要规避四类常见话术误区。回答内核原理题目时,不要一开始就罗列代码,优先讲清底层内核运行逻辑,代码仅作为辅助补充,避免本末倒置。一定要严格区分进程上下文和中断上下文,牢记进程上下文可休眠,中断上下文绝对不可休眠,不要混淆二者运行权限。不要神化零拷贝,sendfile属于内核态零拷贝,依旧存在内核内部少量数据拷贝,并非完全无数据拷贝。同时不要混淆调度优先级,实时进程只保障响应速度不讲调度公平性,只有普通CFS进程才遵循公平调度原则。

面试遇到不会的内核题目,不要盲目编造答案,有三种稳妥救场方式。首先拆分题目关键词,把陌生题目拆解成自己熟悉的基础知识点,分步作答拿到基础分数。其次结合线上服务器运维、业务性能优化真实场景作答,贴合工作经验更容易加分。最后坦然说明知识边界,直白说明对应底层源码没有深入研读,但是清晰掌握该机制的核心作用和使用限制,真诚作答远比胡乱答题扣分更少。

答完所有基础内核知识点之后,可以补充内核统一设计思想升华回答,拉开和普通候选人的差距。Linux内核所有底层机制,核心设计思想统一为解耦分层、延迟处理、按需分配。中断拆分上下半部,目的是解耦硬件快速响应和耗时业务处理;写时复制、mmap、sendfile三类机制,核心目标都是减少整机数据拷贝次数,降低系统IO开销;CFS调度器摒弃固定时间片,兼顾系统调度公平性和前端交互响应速度;虚拟内存整体设计,实现进程运行隔离,同时屏蔽物理内存碎片化问题。

整体而言,Linux内核全部底层设计,本质都是以空间换时间,同时通过分层解耦的架构设计,全面提升服务器整体吞吐量和任务响应速度,面试结尾补充这句话,能够体现自己吃透内核底层设计思想,大幅提升面试官整体评分。

end

如果这篇文章对你有所启发,欢迎点赞、在看,转发三连。星标⭐账号,还可以第一时间收到推送,感谢你的收看,我们下期再见~

往期干货推荐

【专栏模块嵌入式Linux
专栏模块】性能优化
专栏模块】面试八股文
专栏模块项目实战
【硬核干货缺了这些,别说你懂 Linux内核
硬核干货】缺了这些,别说你懂 Linux C/C++
【学习思维导图】Linux内核源码自主学习路线

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-30 08:46:03 HTTP/2.0 GET : https://15386.cn/a/467734.html
  2. 运行时间 : 0.161845s [ 吞吐率:6.18req/s ] 内存消耗:4,594.73kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7c81b3bf8ddf6c267edb734ae8f04da1
  1. /yingpanguazai/ssd/ssd1/www/no.15386.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/no.15386.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/no.15386.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/no.15386.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/no.15386.cn/runtime/temp/97c957f747c268aee476c4e16775dd7c.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/no.15386.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000651s ] mysql:host=127.0.0.1;port=3306;dbname=no_15386;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000524s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000280s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000254s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000473s ]
  6. SELECT * FROM `set` [ RunTime:0.000554s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000680s ]
  8. SELECT * FROM `article` WHERE `id` = 467734 LIMIT 1 [ RunTime:0.001402s ]
  9. UPDATE `article` SET `lasttime` = 1780101964 WHERE `id` = 467734 [ RunTime:0.010111s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000661s ]
  11. SELECT * FROM `article` WHERE `id` < 467734 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001092s ]
  12. SELECT * FROM `article` WHERE `id` > 467734 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000887s ]
  13. SELECT * FROM `article` WHERE `id` < 467734 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001795s ]
  14. SELECT * FROM `article` WHERE `id` < 467734 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004003s ]
  15. SELECT * FROM `article` WHERE `id` < 467734 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002799s ]
0.164570s