hexo + Butterfly + busuanzi无法统计访客量
问题描述在使用 Hexo 搭建博客时,在博客中集成了站点访问数据量统计插件 busuanzi。在本地启动服务后,统计数据无法加载。 问题分析静态网站是无后台服务支撑的,大多数情况下都需要借助第三方的插件实现相关功能。 具体的原因博主也没有弄清楚。猜测是在本地部署时,未检测到busuanzi插件,或是博客主题(butterfly)中安装新的插件导致无法检测busuanzi插件 解决方法修改主体下的D:\blog\butt\node_modules\hexo-theme-butterfly\ _config.yml(我的目录:D:\blog\butt\ _config.butterfly.yml,可以将主题下的配置文件复制粘贴到根目录下改名为 _config.butterfly.yml),搜索inject,新增如下参数: 1- <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script> 预览效果开启本地server 1h...
hexo + Butterfly本地搜索功能
安装依赖前往博客根目录,打开cmd命令窗口执行 1npm install hexo-generator-search --save 注入配置 修改站点配置文件_config.yml,添加代码如下: 123456search: path: search.xml field: post content: true format: html limit: 10000 修改主题配置文件修改主体下的D:\blog\butt\node_modules\hexo-theme-butterfly\ _config.yml(我的目录:D:\blog\butt\ _config.butterfly.yml,可以将主题下的配置文件复制粘贴到根目录下改名为 _config.butterfly.yml),搜索search,修改为如下参数 12345678910111213141516171819202122232425search: # 选择:algolia_search / local_search / docsearch # 如果不需要搜索功能,保持为空 use: local_s...
C++音视频HONOR外包
问题1:C++语言面相对象,谈谈你对面相对象怎么理解?与面相过程有什么区别?回答:面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。对象是类的实例,类定义了对象的属性和方法。OOP的核心概念包括封装、继承、多态和抽象。 封装:将数据和行为包装在一起,并隐藏内部实现细节,只暴露必要的接口。 继承:允许创建新的类(子类)从已有的类(父类)继承属性和方法,从而实现代码重用。 多态:允许不同的对象对同一消息做出不同的响应,通常通过虚函数实现。 抽象:忽略不必要的细节,只关注本质特征,通过抽象类和接口实现。 与面向过程编程(POP)的区别: 面向过程编程以函数为中心,将程序分解为一系列步骤,每个步骤由一个函数实现。数据与函数是分离的。 面向对象编程以对象为中心,将数据和对数据的操作封装在一起,更易于管理复杂的程序,提高代码的可重用性、 问题2:STL模版库有哪些?回答:STL(Standard Template Library)是C++标准库的一部分,提供了一系列通用的模板类和函数,主要包括: 容器(Containers):用于存储数据的类模板,如vector、li...
文件操作
文件的概念文件标识 1、每个文件要有一个唯一的文件标识,以便于用户识别和引用 2、文件标识包含3部分:文件路径+文件名+文件后缀。 3、同一系统下不存在两个完全相同的文件标识 文件分类根据其数据存储方式和内容的特点: 文本文件: 是一种计算机文件,其中存储的是纯文本数据,通常使用ASCII码或Unicode编码进行表示。它包含的内容通常是人类可读的文本,比如字母、数字、标点符号和其他可打印字符,而不包含二进制数据或特殊格式。 格式:txt、csv、xml、html 二进制文件: 是一种计算机文件,其中存储的是以二进制形式表示的数据二进制文件可以包含各种类型的数据,如图片、音频、视频、可执行代码等。它们通常由特定的程序或应用程序进行创建和处理。 格式:JPEG、MP3、MP4、EXE 文本文件 二进制文件 存储方式 文本形式存储的文件,使用字符编码(如ASCII或Unicode)来表示字符 字节(8位)的形式 内容表示 内容是以可读的文本形式呈现,可以直接打开并查看。 通常是非文本数据,如图像、音频、视频等,不可直接阅读。 可编辑性 可以使用文本编辑器直接编辑...
自定义类型
结构体结构体类型的声明结构体是一种用户自定义的数据类型,用于存储不同类型的数据,可以包含多个不同的成员变量。 12345struct 结构体名 { 类型 成员变量1; 类型 成员变量2; //...}; 注意:1、{ }内部是结构体的成员变量2、结构体结尾时,最后的分号不能丢 特殊声明匿名结构体声明可以在定义一个结构体类型的同时,直接定义变量,可以不给结构体起名字 使用场景:一次性使用的结构体类型 12345678910struct{ int age; char name[20];} person;struct{ int age; char name[20];} person[20]; 结构体成员也是结构体类型结构体可以作为另一个结构体的成员 1234567891011121314151617181920212223242526#include <stdio.h>struct Date{ int year; int month; int...
指针
指针的定义用来存放内存单元地址,内存单元地址唯一标识一块内存空间 指针定义方式:数据类型 *变量名; 12345678int main(){ int a = 10; //在内存中开辟一块空间 printf("%p\n",&a); //通过&(地址运算符)获取变量a的内存地址值:0x6ffee666d6f int * pa = &a; //定义指针,并将a的地址赋值给指针 printf("%p\n",pa); //打印指针:0x6ffee666d6f return 0;} 结论: 1、指针就是变量在内存中单元中的地址值;2、地址值是整数值;3、一般用“%p”的格式,以十六进制显示。 12345678910111213141516171819202122232425262728293031323334353637383940#include <stdio.h>#include <stdlib.h>int main(){ int...
数组
数组介绍数组指的是一种容器,可以用来存储同种数据类型的多个值 数组的初始化C语言中的数组必须先定义,然后才能使用数组中保存的数据所谓初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程 不初始化格式:数据类型 数组名[数组长度]; (数组元素值是不确定的,是内存中原有的数据) 例如:int arr[3]; 部分初始化例如:int arr[10] = {1,2,3}; (不完全初始化,剩余的元素默认初始化为0) 全部初始化格式:数据类型 数组名[数组长度可以省略] = {元素1,元素2,元素3,….}; 例如:int arr1[] = {11,22,33}; int arr2[3] = {11,22,33}; 规定:数组一旦确定下来,长度不会再发生变化 数组元素的访问格式:数组名[索引或者下标]; 索引:索引是数组容器中每个元素的编号,编号从0开始,逐个+1增长 12345678910int arr[5] = {1,3,5,7,9};printf(“%d\n”,arr[2]);//输出arr数组2号...
函数
函数的概念是一段具有特定功能的代码块,可以在程序中被重复调用 函数的格式函数的定义返回值类型 函数名(参数列表)//形参{ 函数体;} 函数体:函数定义中的代码块,用于实现函数的具体功能。函数体包含在花括号{}中。返回类型:当函数需要返回一个值时,需要在函数声明中指定返回类型,并在函数体中使用return语句返回相应的值。 函数名:软硬要求:见名知义硬性规定: (1)只能由字母、下划线、或数字组成,且数字不能开头;(2)不能是关键字;建议:使用匈牙利或者下划线方式命名 参数列表:格式: 数据类型 参数名称说明(1)数据类型:函数参数必须指定参数的数据类型;(2)参数名称:符合标识符的特点;(3)出现多个参数,用逗号分开。 函数的调用函数名(参数)//实参 注意: 实参与参数列表中的 类型、个数、顺序必须保持一致,否则调用不成功 参数的传递方式:(1)C语言中参数的传递方式有值传递和地址传递两种。(2)值传递是将实参的值拷贝给形参,而地址传递是将实参的地址传递给形参 123456789101112131415int getSum(int ...
分支、循环结构
顺序结构C语言程序默认的执行流程,按照代码的先后顺序,从上到下依次执行 分支结构if结构的三种格式if第一种格式:单分支if (关系表达式){ 语句体; } 执行流程:(1)首先计算关系表达式的值(2)如果关系表达式成立时就执行语句体(3)如果关系表达式不成立就不执行语句体(3)继续执行后面的其他语句 if第二种格式:双分支if (关系表达式){ 语句体1; }else{ 语句体2;}执行流程:(1)首先计算关系表达式的值(2)如果关系表达式的值为true就执行语句体1(3)如果关系表达式的值为false就执行语句体2(4)继续执行后面的其他语句 if第三种格式:多分支if (关系表达式1){ 语句体1; }else if(关系表达式2){ 语句体2;}…..else{ 语句体n;} 执行流程:(1)首先计算关系表达式1的值如果为true就执行语句体1;(2)如果为false就计算关系表达式2的值如果为true就执行语句体2;(3)如果为false就计算关系表达式3的值(4)……(5)如果所以关系表达式结果都为false,就执行语句体n+...
操作符/运算符详解
算数操作符12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182#include<stdio.h>int main(){ int a = 10; float b = 2.5; //printf("%d\n",a + b);//有警告,类型不一致,打印结果不正确。 b = 30;//隐式类型转换 //从左到右,由大到小 short ----- int ----- long ----- float ----- double //printf("%d\n",a + b);//有警告,类型不一致,打印结果不正确。 printf("%f\n",a + b); //除法运算符(/):当两个操作数都是整数时,...









