- 博客(41)
- 收藏
- 关注
原创 一篇搞定:Linux 网络包发送全流程源码分析
本篇文章分析了Linux网络发送数据包的全流程源码分析,深入了解整个网络数据包的发送过程,并且结合源码实现,并且本专栏也有eBPF的监测程序,来帮助大家分析并学习Linux网络。
2025-03-12 11:23:12
817
原创 跟踪napi_gro_receive_entry时IP头信息缺失的分析
发现读取到的IP头部信息(iphdr结构中的内容)是空的,但是可以确定获取到了skb以及iphdr结构体。以上给出了deepseek的解释,但是本人并没有验证,后期会去深入源码实现来探讨这个问题。的初始化可能延迟到分片重组完成后进行。过早访问会导致读取到内核未初始化的内存区域。可能触发内存越界,因为克隆操作的元数据更新存在延迟。可能仅指向首个分片的头部位置。内核跟踪点时,发现获取到的IP头部字段(如。GRO机制会对多个分片报文进行重组,此时。)时,多个副本共享数据缓冲区。可能尚未更新为有效偏移量。
2025-03-11 11:17:35
448
原创 深入解析:(基础篇)Linux中KVM虚拟化技术
深入分析Linux中虚拟化技术的实现----KVM技术,从KVM技术的简介、技术架构、以及虚拟机和宿主机交互的重要处理逻辑出发,深入探究KVM技术的实现。
2025-03-06 13:48:50
1075
原创 深入分析XDP技术的实现流程
下图是eBPF的整体执行流程,接下来会从:第二步加载开始分析,并且使用一个XDP程序举例说明整个eBPF程序加载执行过程。首先,编写好一个XDP程序,接下来我们分析这个程序是如果一步一步的加载运行的。先展示一下结果:先介绍一下 XDP的三种实现方式:XDP(eXpress Data Path)提供了一个内核态、高性能、可编程BPF 包处理框架。这个框架在软件中最早可以处理包的位置(即网卡驱动收到包的时刻)运行 BPF 程序。
2025-03-06 11:27:31
830
原创 深入探析 eBPF:从程序编写到执行的全流程解析
这篇文章介绍了eBPF(扩展的伯克利包过滤器)技术从程序的编写、验证到执行的全过程。深入分析了eBPF程序从源码到字节码的转换、验证机制以及通过JIT(即时编译)在内核中的运行过程。通过这些步骤的详细描述,读者可以更好地理解eBPF程序的执行原理。本文旨在为对eBPF感兴趣的技术人员提供入门指导,并为进一步深入研究打下基础。
2024-09-28 18:13:38
1485
原创 Linux物理页面分配算法----伙伴算法
伙伴算法是用于分配和回收固定大小的连续内存块的方法。其核心思想是将可用的物理内存划分为大小为2的整数次幂的块。而伙伴的意思是:大小相同、物理地址连续的两个页块被称为伙伴。伙伴系统采用一个free_area数组,来记录空闲的物理页:
2023-10-27 16:45:10
421
原创 Linux下程序从编写到装入内存的全过程(附实验):
一个c代码是怎么一步一步变为一个可以在电脑上运行的一个程序的呢?本章介绍了程序从编写到执行的整个流程,并且通过打印进程的虚拟地址空间的分布情况这一实验,说明了可执行文件到内存中虚拟地的具体分配情况。
2023-10-17 14:11:36
446
原创 task_struct结构体:
Linux中把对进程的描述结构叫做task_struct,也被叫做PCB。它是一个庞大的结构体,将它的所有域按其功能可分为以下几类:
2023-10-05 18:49:20
981
原创 通过系统调用体验进程的生命周期
介绍fork()、wait、execlp()等系统调用,并通过一个实例来观测进程的生命周期。fork()方法是用来创建一个进程的,fork()函数创建的进程为子进程,调用fork()函数的进程称父进程。
2023-10-02 12:19:43
126
原创 中断概述+实现通过中断来查看网卡每次产生中断的时间间隔
/13号中断// 自定义中断处理函数//irq是对应中断的中断号/*调用函数request_irq( )申请中断,irq指中断编号,irq_handler是中断处理函数,IRQF_DISABLED是中断类型,“A_New_Device”指中断设备名,NULL指设备,设备为NULL说明设备不真实存在,NULL这个位置与共享设备有关,用于标识中断服务程序*///显示申请结果return 0;//释放申请的中断return;
2023-09-13 12:48:04
391
原创 MySQL高级部分知识整理
一、索引介绍:1.什么是索引? 官方的解释是这样的:索引(Index)是帮助MySQL高效获取数据的数据结构。由这句话我们可以得到索引的本质:索引就是数据结构。那么,在我的理解看来,索引最好的解释是这样“索引是排好序的,可以快速查找数据结构”。怎么理解这句话呢?除了数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构即使索引。 一般来说索引本身也很大,不可能全部存储...
2021-03-12 00:04:19
246
原创 Mybatis重要知识总结
1.#{}和${}的区别是什么?${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。#{}是sql的参数占位符,Mybatis会将sql中的#{}替换为?号,在sql执行前会使用PreparedStatement的参数设置方法,按序给sql的?号占位符设置参数值,比如ps.setInt(0, parameterValue),#{item.name}的取值方式为使用反射从参数
2021-01-17 20:45:45
167
原创 JSTL标签库
1.什么是JSTL? JSTL的英文全称是JavaServer Pages Standard Tag Library,中文全称是JSP标准标签库,是一个不断完善的开放源代码的JSP标签库。 EL表达式主要是为了替代jsp中的表达式脚本,而标签库是为了替代代码脚本。这样会使得整个jsp页面更加简洁。2....
2020-10-10 12:06:49
138
原创 EL表达式中11大隐含对象
首先,我们先来了解一下EL表达式中的11大隐含对象有哪些:变量 类型 作用 pageContext PageContextImpl 它可以获取jsp中的九大内置对象 pageScope Map<String,Objexct> 它可以获取pageContext域中的数据 requestScope Map<String,Objexct> 它可以获取Request域中的数据 sessionScope Map<S
2020-10-08 11:19:41
1597
原创 EL表达式
1.什么是EL表达式?EL表达式的全称是:Expression Language。是一种表达式语言。EL表达式的作用是:EL表达式主要代替JSP页面中的表达式脚本在JSP页面中进行数据的输出。
2020-10-03 09:12:36
243
原创 Listener监听器
1.什么是Listener监听器?Listener监听器是JavaWeb的三大组件之一。三大组件分别是:Servlet、Listener、Filter过滤器。 Listener它是JavaEE的规范,就是一个接口。 监听器的作用是监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。2.ServletContextListener监听器ServletContextListener可以监听ServletContext对象的创建与销毁。 ServletContext对象在w
2020-09-23 09:46:28
187
原创 JSP详解
1.JSP是什么? JSP的全名是:Java Server Pages ,由它的全名可知。它就是java的服务器页面。因为用Servlet传html页面很繁琐,所以出现了Jsp来回传html页面数据。 Jsp的本质其实就是一个servlet程序。 原因:Tomcat服务器在解析项目时,会将.jsp文件翻译为.java和.class文件。 .jsp文件被服务器翻译为.java文件后,我们发现其继承了HttpJspBase,而HttpJspBase又继承了HttpServlet,...
2020-09-23 09:26:09
702
原创 JavaWeb中相对路径和绝对路径
1.Web中的相对路径和绝对路径相对路径: . 表示当前目录 .. 表示上一级目录 资源名 表示当前目录/资源名绝对路径: http://ip:port/工程路径/资源名...
2020-09-20 10:32:38
129
原创 Servlet
一、什么是Servlet?Servlet是javaEE规范之一。规范就是接口。 Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器。 Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送的请求,以及响应数据给客户端。二、整个Servlet类的继承体系:在这里,我用图形关系来解释它们之间的关系:三、...
2020-09-02 15:21:08
116
原创 Mybatis源码分析
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。那么,MyBatis底层源码到底时什么样的结构呢?首先,mybatis的实现主要依赖于一下四句代码: InputStrea...
2020-08-06 09:57:05
157
原创 初识Maven
1,首先,我们搭建好Maven环境后,配置pom文件。<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVe
2020-07-30 10:57:44
160
原创 MyBatis用法
题目:对数据库中User表进行相应的操作。1,先建立项目,下图为项目目录:2.完成db.properties配置文件的编写3. 编写mybatis-config.xml文件来配置mybatis。<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd
2020-07-23 10:29:49
168
原创 行级锁,表级锁,乐观锁,悲观锁简介
行级锁,表级锁,乐观锁,悲观锁简介名词解释:表级锁:一般是指表结构共享锁,是不可对该表执行DDL操作,但对DML操作都不限制。行级锁:一般是指排它锁,即被锁定行不可进行修改,删除,只可以被其他会话select。行级锁之前需要先加表结构共享锁。是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个.
2020-07-22 15:15:56
857
原创 常见面试题
一、抽象类为什么不能创建对象1.子类更具体,父类更抽象,直接创建父类对象本身没有意义。2.如果创建的是父类对象再调用方法的时候,调用的父类中的方法,而非子类的方法,它违背了多态的这种思想和设计3.因为父类引用指向子类对象时,调用的方法是子类重写的方法,一般父类中的描述不够具体,并不是说抽象类的构造方法没有意义,那么在创建子类对象时需要先调用父类的构造方法。4.抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误。虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或
2020-07-18 17:01:54
98
原创 对JDBC的简易封装
这是我们需要进行封装的代码:import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class Test { public static void main(String[] args) throws ClassNotFoundException, SQLE
2020-07-08 09:42:34
137
原创 MySQL——基础入门
我们通过一个练习来具体学习MySQL的基本知识。题目:现在有一教学管理系统,具体的关系模式如下: Student (no, name, sex, birthday, class) Teacher (no, name, sex, birthday, prof, depart) Course (cno, cname, tno) Score (no, cno, degree)其中表中包含如下数据:Cours...
2020-07-07 18:18:32
217
原创 例题:数组
例一:问题:分析: 1.首先,这里我们并不能确定数组的长度大小,所以,我们就要让数组动态扩容。 2.由输出的结果可知,每个数字出现的次数只用打印一次,而且结果已经排好序,所以我们要对数组排序。 3.我们对已经排好序的数组进行连续相等问题的解决方法就可以输出正确的结果。代码实现:import java.util.Scanner;class Text...
2020-02-24 12:22:30
272
原创 五子棋游戏
本章,我将给大家展示并解析我所做的简易五子棋游戏。首先,要做一个五子棋游戏,我们要列出流程是什么: 1.首先,我们需要创建一个棋盘,这里我用了二维数组来创建棋盘。 2.棋盘创建好了以后,就可以在棋盘上下棋了,所以,第二步开始游戏,黑白双方开始下棋。 3.在每一步棋下完以后进行判断,是否有五个棋子连一起。 4.如果某一方胜...
2020-02-20 14:52:39
246
原创 排序(选择、冒泡、插入、计数)
1.选择排序:当前元素和之后所有元素进行比较,如果当前大于后者,则交换。2.冒泡排序:从左到右相邻两者之间依次进行比较。
2020-02-18 17:05:23
213
原创 数组
1.首先,我们来了解一下什么是数组: 之前我们基本都是用变量来解决一些问题,可是,当我们程序中变量很多,而且这些变量的数据类型都是相同的,我们就可以用一个容器将所有的数字进行管理,类似于字符串,字符串就是将若干个字符放一起的容器。而数组就是一系列空间大小相等且地址连续的一片存储空间。2.接下来,让我们对数组有一个更深入的了解:1.数组主要解决多变量多数据的存储问题,方...
2020-02-15 16:55:41
283
原创 例题:函数
本章,我将给大家讲解一下如何用函数来解决简单的问题。例1:问题:编写一个方法,计算一个整数各位数字之和,使用下面的方法头: public static int sumDigits(long n) 例如:sumDigits(234),返回9(2+3+4)。分析: 1.首先我们先定义主函数,来接受一个整数,并且调用sumDigits()方法。 2....
2020-02-13 14:13:35
860
原创 函数
本章, 我来给大家介绍一下什么是函数。首先,让我们来认识函数:函数存在的意义? 函数主要解决的是那些重复的且具有独立功能的代码段。将这些具有独立功能的代码段可以进行再次封装,得到的就是函数。定义函数降低了代码冗余,将主函数进行适当的拆分,降低了主函数代码量,以便内存的优化。函数是如何定义的?函数格式: 访问限权 函数类型 返回值类型 函数名(参数...
2020-02-11 15:06:52
202
原创 例题:流程控制语句
本次总结我将总结关于for循环语句的例题:例1:问题:如何用for循环来实现数字金字塔?分析:1.先输出每行的左边空格部分。2.因为我们发现这些数字都是2的次幂,并且,左半边是2的次幂递增,右半边是2的次幂递减。所以,我们可以分成左半边和右半边打印。3.因为输出的数字是整齐对称的,所以我们必须格式化输出数字。代码实现:class jinZiTa{ pu...
2020-02-09 12:30:05
212
原创 流程控制语句简介
流程控制语句流程控制语句可以分为以下三种方式:顺序结构 选择结构 循环结构接下来,我来一一介绍上面的三种结构。1.顺序结构: 顺序结构就是我们经常碰到的结构,是按代码书写顺序从上到下执行的结构,也是一种宏观的代码运行结构。2.选择结构: if-else语...
2020-02-08 17:09:56
356
原创 基本数据与运算符的简介
标识符: 标识符是为了标识程序中诸如类、方法和变量的元素而采用的命名。且其命名有一定的规则:• 标识符是由字母、数字、下划线(_) 和美元符号($) 构成的字符序列。• 标识符必须以字母、下划线(_)或美元符号($) 开头,不能以数字开头。• 标识符不能是保留字。• 标识符不能是true、false 或null。• 标识符可以为任意长度。变量:...
2020-02-06 17:58:52
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人