Navicat 连接远程服务器里 docker 中的 mysql(已解决)
辞寒oo
Linux服务器dockermysql
1.开启端口映射在docker中,我们需要将允许外界访问的端口通过配置文件映射出来,本文不需要将3306端口映射,但是该部分还是有实际用途的,因此在此记录。着急可以跳过第一部分。在创建并运行镜像的时候,我们会初始化参数,例如:dockerrun-p20000:22-p3000:3000--namemy_docker_sercer-itddocker_image:1.0#创建并运行docker_im
【系统设计】服务型软件的部署方式
乘风而来的思绪
系统设计系统架构系统设计软件软件部署SaaS私有化部署
文章目录部署方式的诉求SaaS软件私有化部署之私有云部署私有化部署之机房部署挑战案例部署方式的诉求在云计算的时代,以IaaS、PaaS、SaaS等为代表的XaaS风靡一时,尤其是其中作为软件服务提供商,市值3000亿美元的Salesforce给大家看到了SaaS软件的巨大价值,不少公司将其作为构建未来软件的目标。但在toB领域,尤其是涉及到数据隐私等问题时,客户的定制难以避免,因此也一直有着独立部
拿下国产高端市场第一背后,vivo与苹果、华为的共性
何玺
华为
出品|何玺排版|叶媛国内高端手机市场格局生变据数据机构Counterpoint在8月24日公布的第二季度中国高端智能手机市场报告,vivo在刚刚过去的第二季度中表现抢眼,获得了13%的市场份额,成为仅次于苹果的高端手机品牌厂商。01国内高端手机市场变局笔者至今清楚记得,在10余年前智能手机行业刚刚兴起的阶段,苹果手机在用户心目中的地位,与“高端”二字是直接划等号的。相关数据显示,从2011年至今,
华为OD机试2024年E卷-数组拼接[100分]( Java | Python3 | C++ | C语言 | JsNode | Go)实现100%通过率
梅花C
华为OD题库华为od
题目描述现在有多组整数数组,需要将它们合并成一个新的数组。合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。输入描述第一行是每次读取的固定长度,0<长度<10第二行是整数数组的数目,0<数目<1000第3-n行是需要合并的数组,不同的数组用回车换行分隔,数组内部用逗号分隔,最大不
Python 变量和简单数据类型(变量)
钢铁男儿
Python从入门到精通python开发语言
变量每个变量都存储一个值——与变量相关联的信息。变量的命名规则①变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如,可将变量名message_1,但不能将变量名1_message。②变量名不能包含空格,但可使用下划线来分割其中的单词。例如,变量名greeting_message可行,但变量名greetingmessage会引发错误。③不要将Python关键字和函数
C语言程序设计——手机通讯录系统
green qwq
C和C++语言程序综合设计实践c语言
题目【难度系数】3级【任务描述】模拟手机通信录管理系统,实现对个人通信录的管理。【功能描述】通讯录信息管理:包括添加、删除、修改、查询、保存、浏览等操作。通讯录信息主要包括:编号、姓名、电话号码、分类(例如包括:A办公类;B个人类;C商务类等)、电子邮件、生日等。具体信息可参照设计者的手机通讯录结构。查询功能:选择此功能时,列出用户类别,例如:A办公类;B个人类;C商务类。根据选中的类别,显
MATLAB代码实现的是对电机控制系统中自适应优化控制器与传统滑膜控制器性能的对比仿真
go5463158465
MATLAB专栏matlab
clear;%%初始参数设置motor_power=750;%电机额定功率(W)motor_speed_ref=3000;%电机额定转速(rpm)simulation_time=0.2;%仿真时间(s)sampling_time=0.001
MarsCode青训营打卡Day9(2025年1月22日)|稀土掘金-367.好子数组的计数、291.禁着点方案数
Aqua Cheng.
MarsCode青训营算法数据结构java
资源引用:367.好子数组的计数291.禁着点方案数今日小记:平台提交系统出现故障,正在维修中~。稀土掘金-367.好子数组的计数(367.好子数组的计数)题目分析:给定一个正整数数组nums,给定一个正整数k,求nums中有多少个连续的子数组中恰好包含k个不同的整数,即“好子数组”的数量。解题重点:用哈希表记录增广窗口确定的连续子数组中的不同整数,哈希表的长度即为连续子数组所包含的不同整数的个数
华为OD机试E卷 - 最大值(Java & Python& JS & C++ & C )
算法大师
最新华为OD机试华为odjavapythonjavascriptc++华为OD机试E卷C语言
最新华为OD机试真题目录:点击查看目录华为OD面试真题精选:点击立即查看题目描述给定一组整数(非负),重排顺序后输出一个最大的整数。示例1输入:[10,9]输出:910说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数。输入描述数字组合输出描述最大的整数示例1输入109输出910说明解题思路题目要求是:给定一组
找鞍点(Java)
wzx_Eleven
java蓝桥杯算法
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。输入格式:输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。输出格式:输出在一行中按照“行下标列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。输入样例1:417414836161
Redisson 实现分布式锁
程序员jin
编程开发数据库分布式数据库redis
文章目录一.锁介绍二.什么是分布式锁三.为什么需要分布式锁四.分布式锁实现五.分布式锁注意事项六.看门狗机制七.Redisson实现分布式锁一.锁介绍单机锁:用于一台服务器的同步执行。分布式锁:用于多台服务器之间的同步执行。有限资源的情况下,控制同一时间(段)只有某些线程(用户/服务器)能访问到资源。Java实现锁:synchronized关键字、并发包的类。Javasynchronized实现锁
字符串重新排列
无限码力
华为OD算法刷题笔记算法开发语言笔试真题华为od华为odE卷真题数据结构
字符串重新排列真题目录:点击去查看E卷100分题型题目描述给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:单词内部调整:对每个单词字母重新按字典序排序单词间顺序调整:统计每个单词出现的次数,并按次数降序排列次数相同,按单词长度升序排列次数和单词长度均相同,按字典升序排列请输出处理后的字符串,每个单词以一个空格分隔。输入描述一行字符串,每个字符取值范围:[a-zA-z0-9
类与对象中的六大默认成员函数万字详解
kk\n
c++开发语言
目录1、类的6个默认成员函数2、构造函数2.1、概念2.2、特性3、析构函数3.1、概念3.2、特性4、拷贝构造函数4.1、概念4.2、特性5、赋值运算符重载5.1、运算符重载5.2、赋值运算符重载5.3、前置++和后置++重载1、类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用
c语言通讯录二分查找,C语言程序设计 通讯录程序.doc
weixin_39674028
c语言通讯录二分查找
《C语言程序设计通讯录程序.doc》由会员分享,可在线阅读,更多相关《C语言程序设计通讯录程序.doc(28页珍藏版)》请在人人文库网上搜索。1、目录:课程设计任务书2目录:3一、目的4二、基本情况5三、时间安排5四、设计和调试过程规范化要求5五、设计内容和设计要求6六、考核方式7一通讯录的主要功能:8一、问题描述:8二、功能要求:8三、算法提示:8四、测试数据:9二、课题的主要功能模块划分:9三
Android系统开发(二十):字体活起来,安卓自定义字体改造指南
刘争Stanley
Framework框架大师Android开发巅峰之路android
为什么要写这篇文章?你是否厌倦了千篇一律的安卓默认字体?想让你的设备从“乏味的配角”变成“炫酷的主角”?好消息!从Android12到Android15,自定义字体变得更简单、更强大。尤其是表情字体的更新,不仅可以定制,还能支持未来的更新,让个性化和兼容性不再对立。本篇博客将揭示如何用代码创造属于自己的字体世界。不论是设计自家的品牌风格,还是满足本地市场的特殊需求,自定义字体都让你“字”由发挥!一
P1089 [NOIP2004 提高组] 津津的储蓄计划
沉睡的雄虱
算法c++
目录题目描述输入格式输出格式输入输出样例思路分析:代码实现:总结题目描述P1089[NOIP2004提高组]津津的储蓄计划-洛谷|计算机科学教育新生态津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%20%还给津津。因此津津制定了一
天梯赛 L3-009 长城 计算几何
样例过了就是过了
算法数据结构c++
一题目二思路这道题就是找凸点的个数,就是答案。可能有些人会说,那不就是大于左右两边就是凸点吗,只对了一半,如下图所示,B点也是算凸点,但是并没有大于左右两边。因此,我们判断凸点的依据,是看AB的斜率是否大于AC的斜率,如图所示,AB的斜率大于AC的斜率,所以是凸点。反之,不是。此外,我们用一个栈去维护凸点,就可以得到凸点的个数,也就是答案。三代码#include#include#defineint
网站HTTP改成HTTPS
Gworg
httphttps网络协议
您不仅需要知道如何将HTTP转换为HTTPS,还必须在不妨碍您的网站自成立以来建立的任何搜索排名权限的情况下进行切换。为什么应该从HTTP转换为HTTPS?与非安全HTTP于不同,安全域使用SSL(安全套接字层)服务器上的加密代码来加密从用户计算机发送到他们正在访问的网站的信息。因此,外部来源无法解密此语言。安全URL可让您的客户的个人和付款信息保持安全,免受黑客窃取其身份的侵害。因此,安全域已成
读后感:《The Missing README: A Guide for the New Software Engineer》
rongqing2019
读后感软件工程
最近在读一本书,中文版的书名叫《程序员的README》,我觉得非常有收获,但是觉得标题翻译的不好,原名就见名知意,这本书是在阿里云开发者公众号上看到了一篇读书笔记让我觉得这本书的内容真好(读书笔记|程序员的README),自己正在实习,这个“README文档”帮助我慢慢解开了一直以来的疑惑,完整的介绍了现代软件工程的细节,边工作边看,具象了许多。先简单介绍一下作者ChrisRiccomini(详细
基于django+vue高校实验室预约系统【开题报告+程序+论文】-计算机毕设
煜文学长_毕设
djangovue.js课程设计
本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的快速发展,高校实验室作为实践教学与科研活动的重要基地,其利用率与管理效率直接关系到教学质量与科研成果的输出。然而,传统的手工预约和管理方式已难以满足日益增长的实验室使用需求,存在信息不对称、预约流程繁琐、资源分配不均等问题。因此,开发一套高效、便捷、
c++瓷砖
橙子亿
c++开发语言
今天的题目叫“瓷砖”,是“DFS深度优先搜索递归”一类的。题目描述在一个w×h的矩形广场上,每一块1x1的地面都铺设了红色或黑色的瓷砖。小谢同学站在某一块黑色的瓷砖上,他可以从此处出发,移动到上、下、左、右四个相邻的且是黑色的瓷砖上。现在他想知道,通过重复上述移动所能经过的黑色瓷砖数。输入第一行为两个数h和w,2≤w,h≤50,之间有一个空格隔开。以下为一个w行h列的二维字符矩阵,每个字符为“.”
LeetCode--33. 搜索旋转排序数组【直接二分】
Rinai_R
LeetCodeleetcode算法职场和发展笔记学习经验分享golang
LeetCode-33.搜索旋转排序数组前言关于这道题,我最开始想把这个旋转数组还原回去,但是后来发现没有那么麻烦,直接二分即可,重点在于关于当前区间的有序判断,故来写一份题解来分享一下。正文首先我们看看题目要我们干什么,题目大意就是给定一个经过轮转的有序数组和一个target值,要我们找到这个target在数组中的下标,没有则返回-1.既然有序,那么便能和二分扯上关系,但是这个数组经过了轮转,这
[2940]基于JAVA的货架销售智慧管理系统的设计与实现
阿鑫学长【毕设工场】
java开发语言毕业设计课程设计
毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的货架销售智慧管理系统的设计与实现指导老师(一)选题的背景和意义随着信息技术的快速发展,越来越多的企业开始关注信息化管理。而零售行业作为与人们生活息息相关的重要领域,其管理系统的智能化和自动化程度直接影响着企业的运营效率和服务质量。基于Java的货架销售智慧管理系统的设计与实现正是针对这一需求,旨在为企业提供一个高效、便捷、智能的管理系统。
毕设分享 深度学习街道行人流量计数系统
fawubio_A
毕业设计python毕设
文章目录0前言1项目运行效果2设计概要2原理介绍2.1目标检测概况什么是目标检测?发展阶段2.2行人检测行人检测简介行人检测技术难点行人检测实现效果4最后0前言这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要
python算法毕业设计开题答疑
DD项目分享家
毕业设计python毕设
文章目录0简介1如何选题2最新软件工程毕设选题3最后0简介丹成学长,搜集分享最新的软件工程业专业毕设选题,难度适中,适合作为毕业设计,大家参考。学长整理的题目标准:相对容易工作量达标题目新颖选题指导,项目分享:见文末1如何选题最近非常多的学弟学妹问学长关于选题的问题,所以今天学长来教大家如何进行毕业设计选题!毕业设计的选题尤为重要,选好题目是最终完成毕业设计的第一步。因为题目的选择跟之后的设计实现
Linux编辑器——vim的基础使用
Yui_
Linuxlinux编辑器vim笔记经验分享
文章目录1.vim的基本概念2.vim的基本操作3.vim命令模式命令集3.1移动光标3.2删除文字3.3复制3.4替换3.5撤销3.6更改3.7跳到指定的行1.vim的基本概念本文将介绍vim的三种模式,分别位:命令模式、插入模式、低行模式。他们的功能区分如下:正常/普通/命令模式控制屏幕光标的移动、字符、字或行的删除、移动某区段及进入插入模式,或者到末行模式插入模式只有在插入模式才可以做文字输
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