- 过去的年
npm
莫言在文中讲述了自己小时候过年的经历,重点描写了辞灶日的仪式和对年夜饭的期待等,从一个孩子的视角出发,将春节的习俗和欢乐展现得淋漓尽致。
- Nginx Proxy Manager 反代本地服务502错误——基于 1panel 部署遇到的问题解决方案
nginx后端python
参考:NginxProxyManager反代本地服务502错误我的需求如下:我有一个需求:我有一台云服务器,ip地址为114.55.xxx.xxx然后在这个机器上部署了一个python服务http://114.55.xxx.xxx:8086我需要实现一个功能:部署一个nginx当我访问云服务器的80端口的时候,可以帮我反向代理访问python服务,我应该如何设置nginx呢?给我对应的配置文件配置
- 免费通配符SSL证书获取流程
https
以JoySSL为例,获取免费通配符SSL证书的流程如下一、注册并申请证书1.访问服务商官网:打开JoySSL的官方网站,找到免费证书申请页面,2.注册账号:在注册过程中,填写相关信息,并输入特定的注册码(230916)以获取免费申请名额。免费通配符SSL证书:https://www.joyssl.com/certificate/select/joyssl-dv-wildcard-free-1.ht
- SQL: 求连续登录天数,间隔1天也算作连续
问题需求:计算每个用户最大的连续登录天数,可以间隔一天。解释:如果一个用户在第1,3,5,6,9天登录游戏,则视为连续6天登录CREATETABLElog(idVARCHAR(1),timedate);insertintologvalues('A','2024-12-20');insertintologvalues('A','2024-12-24');insertintologvalues('A'
- OP-TEE环境飞腾密码引擎编程指南
安全芯片运维linux内核
【写在前面】飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适配认证四大板块,旨在共享尖端技术,为开发者提供一个涵盖多领域的开发平台和工具套件。点击这里开始你的技术升级之旅吧本文分享至飞腾开发者平台《OP-TEE环境飞腾密码引
- 基于SHM的IPC库的性能和功能比较
c++ipc
使用SHM来传输tlmpayload测试前言我花了几天打算自己写一个zero-copy的版本,使用boost里现成的managed_shared_memory和interprocess_semphore,container/vector等库,但压力测试一直有问题,有的传100多笔数据就出错,有的500多笔数据出错,都是boost低层的rbtree之类的内存布局出错,调不下去,所以放弃自己写,而寻找
- 润出去又回印度 -- 一个开源软件从业者的十年心路
原文地址作者HimanshuMishra先后在Twitter,Mercari(日本闲鱼),Spotify工作。目前在DevOps领域的Harness担任产品经理。这篇文章登上了HackerNews头版。盐湖城的一次技术会议刚结束,我是发言人之一。这对我有特别的意义:我第一次来美国时,也是在会议上担任发言人。美国签证官员问:「你刚才说你是这次会议的演讲者?」然后在我的护照上盖了为期十年的B1/B2章
- 苹果 iMessage 新玩法:用一条信息就能打造你的迷你博客
文章目录通过iMessage重新定义个人博客写作什么是iMessage?为什么选择Public.me?如何使用Public.me?三步开启你的写作之旅Public.me的乐趣技术揭秘:Public.me如何工作?dockur/macosimessage-exporter如何协同工作苹果用户使用iMessage的注意事项结语本文分享一个有趣网站——Public.me,它可以让苹果用户通过简单的iMe
- 事倍功半:我学写工程准则的教训
原文地址我曾在一家做得不错的初创公司工作。它看起来很成功,因为我们的工程师人数、工作范围和团队数量都在稳步增加。这个过程中我意识到,要想在初创科技公司这个混乱的战场游刃有余,我们需要一套工程原则和进展框架来引导团队。我决定撰写一份指南,帮助团队工作得出色,且不断进步。这是个艰巨的任务,但能带来巨大的回报。我怀着极大的热情接手了这个项目,在文件中倾注我的知识。它涵盖了我能想到的每一个角落:从处理边缘
- 免费通配符SSL证书保护你的域名及其子域名
运维ssl
什么是通配符SSL证书?通配符SSL证书是一种特殊的SSL证书,可以保护一个主域名以及该域名下所有同级子域名,无需为每个子域名单独购买SSL证书。如何申请和安装合适的免费通配符SSL证书?选择证书提供商:访问提供免费通配符SSL证书的官方网站,如JoySSL。注册账户:创建账户时填写230925注册码可获取永久免费通配符证书和全程技术指导!点击:免费通配符SSL证书快速申请选择证书:在SSL证书列
- groovy性能测试,groovy和java性能对比
lilili啊啊啊
groovygroovy性能对比groovy性能测试
看groovy的接口和api很神奇的,想用用,用之前做了个小的性能测试,结果令人目瞪口呆classMain{staticmain(args){defstart=System.currentTimeMillis();for(inti=1;i<100000000;i++){Math.sin(1.5);}defend=System.currentTimeMillis();printlnend-start
- 使用 NodeLocalDNS 提升集群 DNS 性能和可靠性
本文主要分享如何使用NodeLocalDNSCache来提升集群中的DNS性能以及可靠性,包括部署、使用配置以及原理分析,最终通过压测表明使用后带来了高达50%的性能提升。1.背景什么是NodeLocalDNSNodeLocalDNSCache是一套DNS本地缓存解决方案。NodeLocalDNSCache通过在集群节点上运行一个DaemonSet来提高集群DNS性能和可靠性。为什么需要NodeL
- 一起学Hugging Face Transformers(8)- 使用Transformers 库制作一个简易问答系统
做个天秤座的程序猿
HuggingFaceTransformersAutoModelAutoTokenizerTransformerstransformer
文章目录前言一、环境准备二、数据准备三、模型选择与加载四、构建问答系统五、模型评估与优化六、部署问答系统七、实际案例分析总结参考资料前言问答系统是一种能够自动回答用户问题的人工智能应用,在许多领域具有重要的应用价值,如客户服务、教育和医疗等。HuggingFaceTransformers库是一个强大的工具,它提供了许多预训练的自然语言处理模型,简化了构建问答系统的过程。本文将介绍如何使用Huggi
- 2024年大数据最全【ES专题】ElasticSearch集群架构剖析_es集群
kenzsoft
程序员大数据elasticsearch架构
IngestNode:数据前置处理转换节点,支持pipeline管道设置,可以使用ingest对数据进行过滤、转换等操作MachineLearningNode:负责跑机器学习的Job,用来做异常检测TribeNode:TribeNode连接到不同的Elasticsearch集群,并且支持将这些集群当成一个单独的集群处理以下是一个多集群业务架构图:1.2.1.1MasterNode主节点的功能Mas
- 独家揭秘:2025年最受欢迎的免费SSL证书获取渠道
运维ssl
随着互联网安全意识的不断提高,SSL证书已成为网站安全的标配。为了帮助网站管理员和企业用户更便捷地获取免费的SSL证书,特别整理了最受欢迎的免费SSL证书获取渠道,以助力您的网站安全升级。JoySSL简介:JoySSL是国产自主品牌SSL证书服务商,提供多种类型的免费SSL证书。优势:提供免费单域名、多域名、通配符证书,支持政务版和教育版网站一年期免费证书。申请步骤注册证书管理账号:打开浏览器,进
- 走进王维的山水诗世界
typescript
王维,这位唐代山水田园诗派的代表诗人,以其清新自然、意境深远的诗作,为我们描绘出一幅幅绝美的山水画卷,引领我们走进一个宁静祥和的诗意世界。王维的山水诗,常常融入禅意。在《山居秋暝》中,“空山新雨后,天气晚来秋。明月松间照,清泉石上流”,雨后的山林,清新空寂,明月透过松林洒下清辉,清泉在石间潺潺流淌。这不仅是一幅生动的山水画面,更蕴含着诗人对自然的热爱与对宁静生活的向往。在空灵的意境中,我们能感受到
- 使用DockerCompose部署服务
由于格式或图片解析问题,为了更好的阅读体验,可前往阅读原文以前我们总是用命令管理每个容器的启动、停止等等,若有多个容器时可能还存在启动优先级的问题,那就要等到指定的容器启动后再去启动另一个容器,对于整体的应用服务管理极其不方便,简单的dockerrun命令更适合初学者或者调试使用,docker提供dockercompose来解决多容器部署。DockerCompose是Docker官方提供的一个工具
- Linux 下的模糊查找神器 fzf 使用教程
linux
简介fzf是一款功能强大且用途广泛的Linux命令行模糊查找器。它允许用户使用模糊匹配高效地搜索和过滤文本、文件和命令历史记录。它是一个交互式过滤程序,适用于任何类型的列表;文件、命令历史、进程、主机名、书签、git提交等。它实现了一种“模糊”匹配算法,因此可以快速键入带有省略字符的模式,并且仍然可以得到想要的结果。安装Debian/UbuntusudoaptinstallfzfRedHat/Ce
- c++实现waveinopen录音功能
C++中使用waveInOpen实现录音功能的详解在C++中,通过调用Windows的多媒体API(WindowsMultimediaAPI),可以实现音频的录制功能。本文将详细解析使用waveInOpen函数进行录音的示例代码,逐步解释每一部分的功能和实现原理,帮助您深入理解录音过程并应用于实际项目中。示例代码概览以下是一个基本的C++示例,展示了如何使用waveInOpen函数录制音频数据,并
- 访问网站显示不安全?免费解决方案在此!
ssl
当你在浏览器中访问某个网站时,如果看到“不安全”的警告,这通常意味着该网站可能存在一些安全隐患。别担心,我们来一起看看这些问题可能是什么,并提供一些简单的解决方法。常见问题及解决方案1.没有SSL证书问题描述:如果网站没有安装有效的SSL证书,所有数据传输都是明文的,任何人都能窥探到用户输入的信息。解决方案:网站管理员需要申请并安装由受信任的证书颁发机构(CA)签发的SSL证书。好消息是,JoyS
- c++实现waveinopen录音功能
C++中使用waveInOpen进行音频录制的详细解析在C++中进行音频录制时,可以使用Windows提供的WaveformAudioAPI,其中waveInOpen函数是用于启动音频输入设备录音的关键函数。本文将详细介绍如何使用waveInOpen进行音频录制,并通过回调函数处理录音数据,同时讲解每一部分代码的作用与原理。1.函数概述与基本结构waveInOpen是一个用来打开音频输入设备(如麦
- 政务网站选用SSL证书推荐
https
政务网站特别是政务门户网站,其在选择SSL证书时应该慎重考虑多方面因素,确保数据安全传输,符合法律要求,线面是具体的选择推荐一、验证类型推荐政务网站首推OV类型SSL证书,OV证书在颁发前会对申请组织的身份进行严格验证,包括单位名称、地址、电话号码等信息的审核。证书颁发后,会在证书信息中展示组织名称。有助于提升网站的公信力,防止假冒网站,保护品牌形象和声誉。OV证书适合需要展示组织身份、提升网站信
- 百万架构师第八课:设计模式:设计模式容易混淆的几个对比|JavaGuide
后端
设计模式容易混淆的几个对比.md1、代理模式跟委派模式混淆委派就是说全权代理代理只参与某一个环节,委派参与整个环节委派可以说是一个静态代理Porxy传一个接口,传实现类不行吗?Java核心思想:面向接口编程OOP:用代码来解释生活接口:只是一种规范,做任何事前以前先思考好以后,再去动手(制定好规范),三思而后行实现类:必须先有接口,开发顺序天生决定了中介:租房子代理人(专业化),要租房子的人,也
- pandas判断某列是否已按从小到大排序
在使用Pandas进行数据分析时,判断某一列是否已按从小到大排序是一个常见的操作。本文将详细介绍如何使用Pandas判断某列是否按升序排列,并提供多种解决方案和详细解释,确保您能够在实际应用中轻松实现这一功能。判断列是否按升序排序的方法使用is_monotonic_increasing方法Pandas提供了一个便捷的方法is_monotonic_increasing,用于判断某一列是否按从小到大排
- PCB 过孔尺寸和焊盘尺寸指南
David WangYang
硬件工程
PCB设计和布局的一些方面看似简单,但答案却很复杂,与制造的许多重要方面有关。这些设计方面之一是PCB过孔尺寸和焊盘尺寸之间的匹配。显然,这两点是相关的;所有PCB过孔都有(或应该有)一个着陆焊盘,用于支撑过孔并提供将走线路由到过孔焊盘的位置。但是,在匹配焊盘和过孔尺寸时,需要遵循一些重要的尺寸指导原则,这种匹配是DFM和可靠性的重要元素。您为设计选择的焊盘尺寸与制造过程中发现的另一个重要设计方面
- ASP.NET Core--环境搭建和命令行CLI入门
sufengmarket
NETCOREasp.netcore安装cli命令行
文章目录.NETCore安装命令行dotnetrestoredotnetbuilddotnetrundotnetpackdotnetpublishdotnettest.NETCore.NETCore是开放源代码的通用开发平台(是一个“平台”),基于这个开放平台我们可以开发像ASP.NETCore应用程序,Windows10通用Windows平台(UWP),Tizen等等,而我们系列教程就是用.NE
- 探索Qwen-VL:一个全栈式的视觉语言模型开发框架
钟洁祺
探索Qwen-VL:一个全栈式的视觉语言模型开发框架Qwen-VLTheofficialrepoofQwen-VL(通义千问-VL)chat&pretrainedlargevisionlanguagemodelproposedbyAlibabaCloud.项目地址:https://gitcode.com/gh_mirrors/qw/Qwen-VL项目简介是一款由QwenLM开发的全栈式视觉语言(V
- shell 脚本中 wait 和 sleep 的区别
shell
在shell脚本世界中,理解各种命令之间的细微差别对于编写高效的脚本至关重要。两个经常引起混淆的命令是wait和sleep。虽然它们看上去很相似,但在脚本执行中每个都有其独特的用途。ThesleepCommandsleep命令用于在脚本执行过程中延迟一个固定的时间。用于暂停执行一段指定的时间。Syntax:sleepNUMBER[SUFFIX]...NUMBER可以是整数或浮点数。SUFFIX可以
- MySQL之show profile相关总结
MySQL中的SHOWPROFILE性能分析详解在数据库优化过程中,SHOWPROFILE是MySQL提供的一个强大工具,用于分析查询的执行性能。通过展示查询在不同阶段的执行时间和资源消耗,开发人员可以精准定位性能瓶颈,从而进行有效优化。本文将详细介绍如何使用SHOWPROFILE进行性能分析,并结合实例解释其应用方法。1.SHOWPROFILE概述SHOWPROFILE用于分析单条查询语句的执行
- python程序设计期末大作业,python大作业代码100行
chatgpt001
人工智能
大家好,小编来为大家解答以下问题,python期末大作业代码200行带批注,python程序设计期末大作业,今天让我们一起来看看吧!#题目:利用Python实现一个计算器,可以计算小数复数等importredefcalculator(string):#去除括号函数defget_grouping(string):flag=Falseret=re.findall('\(([^()]+)\)',stri
- 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