- 记录 Mac M4 安装 RAGFlow 的一次排坑过程
大模型deepseek
先来看看官方文档https://ragflow.io/docs/v0.16.0/,那是相当简单1.下载gitclonehttps://github.com/infiniflow/ragflow.gitcdragflowgitcheckout-fv0.16.02.启动docker-compose-fdocker/docker-compose.ymlup-d啊,报错了nomatchingmanifes
- VSCode 中 Git 功能比较:内置 Git、GitLens 与 Git History 插件
scoone
Gitvscodegitide
在软件开发领域,版本控制是维护代码变更的重要工具。Git作为最流行的版本控制系统,被广泛集成在各种代码编辑器中。VisualStudioCode(VSCode)不仅内置了Git支持,还提供了丰富的扩展来增强Git功能。本文将对比VSCode内置Git功能、GitLens扩展以及GitHistory插件在代码比较方面的应用。VSCode内置Git功能VSCode的内置Git功能为开发者提供了一套基本
- Python Eel 与 Remi、NiceGUI 的区别:选择合适的库来创建 Web 界面
scoone
python前端开发语言
在Python社区中,有几个库可以帮助开发者快速创建基于Web的用户界面,其中PythonEel、Remi和NiceGUI是比较受欢迎的几个。本文将对比这三者的主要区别,帮助您根据项目需求选择最合适的库。PythonEel目的Eel的目标是简化将Python脚本转换为完整Web应用程序的过程。使用方式允许使用HTML/CSS/JavaScript创建前端,Python作为后端。提供简单的路由系统,
- glibc: GLIBC_2.28‘ not found
mzhan017
c/c++glibclinux运维Cglibc
在一个glibc的接口版本是GLIBC_2.25的lab上,运行不了在2.28上编译的程序。比如下面的程序运行提示/root>stracestrace:/lib64/libc.so.6:version`GLIBC_2.28’notfound(requiredbystrace)这个时候,应该怎么解决,因为当前运行的机器是低版本,而程序是高版本,解决方法,或者是将程序降级,或者将当前系统升级。看哪一个
- Python游戏辅助开发工具介绍
CrMylive.
python游戏pygame
Python是一种高级编程语言,具有丰富的库和模块,可以用于开发各种类型的应用程序,包括游戏。Python游戏辅助开发工具是一组用于游戏开发的软件工具,可以帮助游戏开发者简化开发流程,加速开发速度,并提高代码的质量。本文将介绍一些常见的Python游戏辅助开发工具。PygamePygame是Python语言下的一个跨平台游戏开发框架,它基于SDL库开发,提供了一个方便的高层级接口,可以用来开发各种
- ros2学习【5】:话题以及通信实例(C++和python示例)
宋隽颢
ROS2c++python开发语言
节点与节点之间的交流方式有四种,话题,服务,参数,动作。服务,参数,动作是在话题的基础上组合实现的。所以话题是很基本,很重要的。节点与节目之间话题交流的媒介是消息接口。目录一、C++话题示例:1.发布消息1.2工作空间+构建功能包+新建节点文件1.2:CMakeList的处理1.3:构建+测试2.订阅消息:2.1新建文件turtle_control.cpp2.2:CMakeList的处理2.3:构
- GIT工具学习【1】:基本操作
宋隽颢
Gitgit学习
目录0.本地代码分区1.配置自己的个人信息(设置一次即可)2.新建仓库3.提交代码到暂存区(加入购物车)4.从暂存区撤回(不会改变工作区文件)5.恢复指定版本(会改变工作区文件)5.1:第一种情况5.2:第二种情况5.3:第三种情况7.忽略文件8.查看信息gitstatus(暂存区和工作区的区别)gitlog(查看历史提交记录)9.乱码问题解决10.使用别名这两张图大概看看就可以,有个概念即可链接
- 波士顿动力公司退役其传奇的人形机器人Atlas
万俟淋曦
SomeInsights机器人人工智能AIAtlas波士顿动力
机器人、人工智能相关领域news/events(专栏目录)本文目录一路走来的Atlas一些思考一路走来的Atlas小时候看到各种科幻电影里的机器人,那时候就想,未来我们会有这样的朋友吗?直到十年前,在YouTube上刷到一个被各种绳子吊着的“人”,在传送带上走路,那时还想,老美的实验真是。。。后来才发现那是一个机器人,叫Petman,由波士顿动力公司在DoDCBD计划的资助下开发,用于测试为危险环
- 关于pycharm 和idea 安装同时破解出现只能使用一个
Lucky GGBond
小Bug专栏pycharmide
项目场景:破解pycharm跟idea的时候只能破解一个,两个一块破解只能使用一个可以说是相当的麻烦。问题描述提示:这里描述项目中遇到的问题:idea跟pycharm的破解不能够两个都使用一种方式进行破解。当时小编两个软件都是使用的这一种方式破解的的,然后就出现了破解成功一个后另外一个就不可以使用了,反正就是两个你只能使用一个。本来两个都是使用的这一种方式进行激活。原因分析:提示:这里填写问题的分
- 史上最全Android-build-gradle配置详解(1),实现原理讲解
m0_63102527
程序员学习androidlog4j
versionName“1.0”//版本名称testInstrumentationRunner“android.support.test.runner.AndroidJUnitRunner”//表明要使用AndroidJUnitRunner进行单元测试}applicationId:指定了项目的包名。minSdkVersion:指定项目最低兼容的版本,如果设备小于这个版本或者大于maxSdkVers
- 【STM32】编写程序控制开发板的RGB LED灯
不被定义的~wolf
STM32stm32嵌入式硬件单片机
目录1、原理图2、文件结构3、使用寄存器模式点亮3.1、什么是寄存器3.2、寄存器开发的本质3.3、寄存器开发步骤3.4、主要源码3.4.1、main.c3.4.2、drv_gpio.h3.4.3、drv_gpio.c3.4.4、使用BSRR和BRR影子寄存器优化`drv_gpio.c`3.4.5、效果演示4、使用标准库模式点亮4.1、使用标准库模式的好处4.2、主要源码4.2.1、main.c4
- Resilio Sync神器:2人点对点同步,3人以上必备NAS!
程序员
ResilioSync神器:2人点对点同步,3人以上必备NAS!ResilioSync(简称RS或Sync,原名BTSync)是一个基于P2P技术的文件同步工具。这个名字虽然不太好记,但可以理解为:Resilio=Resilient(弹性的)+io(输入输出),Sync=Synchronization(同步)。简单记忆为"弹性同步"或"韧性同步"。你是否遇到过这些烦恼?多台设备间传文件太麻烦网盘下
- git警告:warning: LF will be replaced by CRLF
爱思考的People
git
该警告表示在Git中发现了换行符的不一致性。在Windows系统中,默认使用CRLF(回车加换行符)作为行尾符,而在Unix/Linux系统中,默认使用LF(换行符)作为行尾符。这个警告通常出现在跨平台协作或在不同平台上使用Git时,例如在Windows和Unix/Linux之间切换。Git会自动进行换行符的转换,以便确保文件在不同系统上的一致性。在这种情况下,Git发现你的代码中使用了LF作为行
- **深度剖析与体验:钓鱼网站URL检测神器**
平奇群Derek
深度剖析与体验:钓鱼网站URL检测神器去发现同类优质开源项目:https://gitcode.com/互联网早已融入我们生活的每一个角落,然而随之而来的网络威胁也日渐增多,尤其是那些试图通过伪装网站进行信息盗取的钓鱼行为。在这个背景下,PhishingURLDetection——一个集数据科学与机器学习之力打造的反钓鱼利器应运而生。项目介绍:守护网络安全的第一道防线在当今数字化时代,个人信息安全成
- 推荐开源项目:基于Panda3D的延迟实时渲染管线
曹俐莉
推荐开源项目:基于Panda3D的延迟实时渲染管线去发现同类优质开源项目:https://gitcode.com/在这个充满创新与活力的开源世界中,我们发现了【RenderPipeline】——一个为Panda3D游戏引擎打造的延迟实时渲染管线,它采用了物理基础的着色方式,带来震撼的视觉效果和高级后期处理功能。项目介绍RenderPipeline是一个强大的图形渲染框架,它提供了物理基础的着色、延
- Qt creator中项目的构建配置和运行设置
freedom273239
qt开发语言
一.构建影子构建(Shadowbuild)QtCreator默认使用影子构建方式(Shadowbuild),这种构建项目的方式是将构建过程中的中间文件和目标程序都放到独立的构建目录中,实现源代码目录和构建目录的彻底分离,这对程序源代码的发布很方便,不会将构建过程中的中间文件混杂进来。对于项目HelloWorld,它的源代码路径是D:\QtDemo\HelloWorld,而影子构建的目录是在D:\Q
- 自然语言处理NLP星空智能对话机器人系列:Facebook StarSpace框架案例数据加载
段智华
NLP星空智能对话机器人
自然语言处理NLP星空智能对话机器人系列:FacebookStarSpace框架案例数据加载目录FacebookStarSpace案例脚本FacebookStarSpace案例数据AG新闻主题分类数据集简介标签类别文件训练数据文件测试数据文件星空智能对话机器人系列博客FacebookStarSpace案例脚本先看一下FacebookStarSpace官方源码中提供的一个示例代码classifica
- 【Git】“LF will be replaced by CRLF“警告详解
Orangejuz
编程发现问题git
一、背景在Windows中使用CRLF标识一行的结束,而在Linux/UNIX系统中只使用LF标识一行的结束。CRLF即Carriage-ReturnLine-Feed的缩写。通常情况下,Git库不会自动修改文件内容,但是默认会将入库的文件的行尾符设置为LF,会将检出的文件的行尾符设置为CRLF。但是在执行如下操作时出现如下警告:gitaddtest.pywarning:LFwillberepla
- Vue学习记录之二十 postcss自定义插件及Unocss的使用
LvManBa
vue.js学习postcss
一、实例1使用postCss自定义px转vw插件编写css插件:一、在项目根目录下建立一个plugins文件夹,然后建立一个postcss-px-to-viewport.ts文件。//vite内置了postCss无需安装import{Plugin}from'postcss'//定义一个变量constOptions={viewportWidth:375,//UI设计稿上的宽度,这里我们默认的视口宽度
- 运行git命令出现lf will be replaced by crlf 的解决方法!
CarbenChueng
git
运行git命令出现lfwillbereplacedbycrlf的解决方法!-Win7系统之家
- 使用Python+Flask开发博客项目,并实现内网穿透_flask框架内网攻击
2401_84182428
程序员pythonflask数据库
ifrequest.method=='GET':returnrender_template('login.html')elifrequest.method=='POST':username=request.form.get('username')password=request.form.get('password')user=User.query.filter_by(username=usern
- CSS 尺寸 (Dimension)
wjs2024
开发语言
CSS尺寸(Dimension)在网页设计中,CSS(层叠样式表)的尺寸属性是控制元素大小和位置的关键。本文将详细介绍CSS尺寸相关的概念、属性及其应用。1.CSS尺寸概述CSS尺寸主要包括宽度和高度,这些属性可以应用于各种HTML元素,如div、p、img等。通过合理设置尺寸,可以使网页布局更加美观、合理。2.CSS宽度和高度属性2.1宽度(Width)宽度属性用于设置元素的宽度。以下是一些常用
- 重磅!理想汽车开源星环OS,成全球首家汽车操作系统开源企业
CSDN资讯
汽车开源理想汽车星环OS
在2025中关村论坛年会上,理想汽车董事长兼CEO李想宣布理想汽车成为全球首家开源汽车操作系统企业,并分享星环OS的自研历程和技术优势,其性能超越行业主流闭源AUTOSAR系统。理想汽车于2021年启动星环OS自研项目,投入200人团队及超10亿元研发资金,历经方案选型、架构设计和落地,于2024年实现首个版本量产。相较于传统AUTOSAR,星环OS采用创新跨系统架构设计,优化全链路性能,使多个控
- Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file:
fzip
JavaFlinkflink大日志文件
执行hdfs命令查看目录时,控制台上有这么一句警告JVM报错:共享内存文件空间不足df-h以可读性较高的方式来显示磁盘使用信息可以看到主盘已使用100%暴力解决办法:找到对应占用磁盘的文件,然后rm-f,再重启造成大日志文件的程序我的原因是flink的taskmanager的日志很大,删除日志之后需要重新启动flink集群,防止问题重复发生,需要找出taskmanager日志很大的原因:我的原因是
- 说一下你知道的HTTP状态码,以及他们代表什么意思?
海姐软件测试
软件测试面试通关秘籍http网络协议网络
以下是常见的HTTP状态码及其含义,适合测试、开发人员快速定位问题:1xx信息响应(临时响应)100Continue:客户端应继续发送请求的剩余部分(用于大文件上传前的确认)。101SwitchingProtocols:服务器同意客户端请求切换协议(如WebSocket升级)。2xx成功响应200OK:请求成功(最常用,如GET返回数据)。201Created:资源创建成功(如POST新增数据后返
- 遇到sql在navicat里面执行成功,在mybatis的xml文件里运行报错的情况### Error querying database. Cause: com.baomidou.mybatisp
ekkcole
数据库sqlmybatis
遇到sql在navicat里面执行成功,在mybatis的xml文件里运行报错的情况###Errorqueryingdatabase.Cause:com.baomidou.mybatisp如果sql没问题不要怀疑自己在sql对应的Mapper.java类的方法上加上注解@SqlParser(filter=true)publicinterfaceBaseEntMapperextendsBaseMap
- LC17. 电话号码的字母组合
996冲冲冲
LC回溯Python回溯算法电话号码字母组合字符串操作
classSolution(object):defletterCombinations(self,digits):""":typedigits:str:rtype:List[str]"""res=[]s=""map=["","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"]iflen(digits)==0:return[]defbacktra
- Web开发基础
星星不打輰
JavaWebjava后端
Web开发基础URL(统一资源定位符)格式:协议://服务器的ip地址:服务器的端口号/项目名/资源路径例子:jdbc:mysql//localhost:3306/数据库名服务器:分为软件和硬件硬件服务器:构成包括处理器,硬盘,内存,系统总线等和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力,稳定性等方面要求更高软件服务器:本质上是一个应用程序(有代码编写而成),运行在服务器设
- Mybatis基于注解开发
星星不打輰
Mybatismybatis
Mybatis基于注解进行开发基于注解形式开发Mybatis省去XML的SQL映射配置文件(只需要在Mybatis的核心配置文件中设置要扫描的接口通过Mapper标签中的子标签指定要扫描的包)注意:在进行想改的SQL操作的时候首先要注意数据表的字段的约束问题,例如字段username有一个唯一约束那么就不能设置多个增加用户:@Insert/***添加用户*@paramuser一个user对相关信息
- c++将字符转换为数字
笑对明天 守望幸福
c++蓝桥杯开发语言
将字符数组中的字符‘1到9转换为整数数字#includeusingnamespacestd;intchnum(chara[]);intmain(){charar[5]={'3','5','3','7','4'};cout='0'&&str[i]#include//头文件usingnamespacestd;intchnum(string);intmain(){stringstr="234";cout
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include