解决hexo图片无法显示问题
好长时间没写过带有图片内容的hexo博客了,之前这个问题在刚开始建立hexo博客的时候就解决过,但是今天又炸了。只能又重新在网上搜索解决办法了😭
解决步骤1.安装hexo-asset-image插件安装代码,在根目录安装
1npm install https://github.com/CodeFalling/hexo-asset-image --save
2.修改根目录下_config.yml文件的配置将post_asset_folder: false修改为post_asset_folder: true。
3.新建post此时就不可以随便创建文件了,推荐比如新建一篇名为blog的文章在命令行输入
1hexo new post blog
这样在/source/_posts路径下就会有与你文章同名的文件夹/source/_posts/blog,将想要插入文章的图片存在这个文件夹中。
4.插入文章图片的引用路径假设在blog文件夹中已经存有图片img.jpg。我们的引用方式应该严格如下:
1![](./blog/img.jpg)
注意121.一定要以相对路径写法./开头。(这次炸掉就是因 ...
tomcat究竟是如何运行的
web服务器简单来说只要Web上的Server都叫Web Server,但是大家分工不同,解决的问题也不同,所以根据Web Server提供的功能,每个Web Server的名字也会不一样。
但是按功能来分web服务器主要分为http server和application server
123456|- Web Server |- Http Server |- Application Server |- Servlet Container |- CGI Server |- ......
htt服务器HTTP Server本质上也是一种应用程序——它通常运行在服务器之上,绑定服务器的IP地址并监听某一个tcp端口来接收并处理HTTP请求,这样客户端(一般来说是IE, Firefox,Chrome这样的浏览器)就能够通过HTTP协议来获取服务器上的网页资源。
一个HTTP Server关心的是HTTP协议层面的传输和访问控制,所以在Apache/Nginx上你可以看到代理、负载均衡等功能。
HTT ...
sql应该避免的一些情况
sql语句平时写的很多,但是经常会写一些根本不推荐的低效写法。今天就在这里整理一下自己遇到的一些低效写法。
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0
应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num=10 or num=20也可以这样查询:select id from t where num=10 union all select id from t where num=20
in 和 not in ...
编码那些事
原因是今天写项目的时候,引入github上面的xml文件,还有就是执行SQL命令的时候出现了编码错误。虽然idea给出了一键解决方法,但是这个编码错误让我想起了以前做汇编实验的时候也出现许多由于编码错误而出现的乱码。于是就称今天的时间,好好的研究一下编码这回事。
什么是编码编码是信息从一种形式或格式转换为另一种形式的过程,也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。 这是从百度百科里面抄下来的专业术语。其实简单来说就是计算机只能储存0,1这两种信号。所以当我们要储存英文字母,中文字符或者更加复杂的字符时。就要按一定的规则,将字符转换为计算机可以储存的0,1信号。这个转换的过程就是所谓的编码和解码。
编码的种类和历史常用的编码方式
ASCII 码
扩展的ASCII码
Unicode符号集
UTF-8
GBK/GB2312/GB18030(win10中文系统默认编码方式一般是GBK)
编码 ...
java算法笔记-双向链表和约瑟夫环
双向链表概念介绍顾名思义,如果你知道单向链表只能朝着一个方向遍历的话,那么双向链表就是可以向两个方向遍历。双向链表每个结点存在两个指针域,分别存储该结点的前驱结点引用和后继结点引用,从任意一个结点出发,都能通过前驱引用以及后继引用完成整个链表结点的访问。
所以不难看出,单向链表能干的事,双向链表也能干!但是正是因为这一特性,相比于单链表,双向链表在访问其他结点上带来方便的同时,将占用更多的资源,因此在使用的时候可以根据自己的场景来决定使用何种数据结构。
节点结构123456789101112131415161718class DataNode{ int date; DataNode pre; DataNode next; public DataNode(int num){ this.date=num; } @Override public String toString() { return "DataNode{" + ...
java算法笔记-单链表
概念介绍链表的结构很简单,就是一个个节点连接在一起,形成一个完整的链条,每个节点包含2部分,数据域,和一个指向下一个节点引用的指针next,具体的更详细的大家可以参考相关资料解释,再说说删除操作,同样需要找到数据所在的位置,然后进行删除,不同的是,删除的时候,链表只需要改变一下前后节点的引用关系即可,就完成了节点的删除,而没有像数组那样触发一次全部数据的移动,从这个描述来看,链表在进行删除的时候,速度比数组快链表有很多种形式包括单链表,双向链表,循环链表等,本文主要内容是单向链表。
创建节点类123456789101112131415161718//链表类,并重写了toString方法class HeroNode{ public int no; public String name; public HeroNode next; public HeroNode(int no,String name){ this.name=name; this.no=no; } @Override public Stri ...
java笔记-4-反射
什么是Java的反射反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。
通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。
Java反射优缺点
优点 : 可以让咱们的代码更加灵活、为各种框架提供开箱即用的功能提供了便利
缺点 :让我们在运行时有了分析操作类的能力,这同样也增加了安全问题。比如可以无视泛型参数的安全检查(泛型参数的安全检查发生在编译时)。另外,反射的性能也要稍差点,不过,对于框架来说实际是影响不大的
反射的应用场景
JDBC中,利用反射动态加载了数据库驱动程序。
Web服务器中利用反射调用了Sevlet的服务方法。
Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。
很多框架都用到反射机制,注入属性,调用方法,如Spring。
这些框架中也大量使用了动态代理,而动态代理的实现也依赖反射。比如下面是通过 JDK 实现动态代理的示例代码,其中就使用了反射类 Method 来调用指定的方法
123456789101112131415161718public class Deb ...
java笔记(3)常用集合
Java中集合的作用为了保存数量不确定的数据,以及保存具有映射关系的数据Java 提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。
集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)
集合类型Java 集合类型分为 Collection 和 Map,它们是 Java 集合的根接口,这两个接口又包含了一些子接口或实现类
Collection的子接口及其实现类
Map 的子接口及其实现类
上图中接口所代表的作用如下表
接口
作用
Iterator 接口
集合的输出接口,主要用于遍历输出(即迭代访问)Collection 集合中的元素,Iterator 对象被称之为迭代器。迭代器接口是集合接口的父接口,实现类实现 Collection 时就必须实现 Iterator 接口。
Collection 接口
是 List、Set 和 Queue 的父接口,是存放一组单值的最大接口。所谓的单值是指集合中的每个元素都是 ...
算法笔记-数组实现循环队列
队列介绍队列是一个有序列表,可以用数组和链表来实现(这里采用数组实现的方式)
队列有一个原则。即:先存入队列的数据要先取出。后存入的要后取出。
思路分析因为队列的输出、输入分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着输出而改变,而rear则是随着数据输入而改变。而MaxSize则是数组队列的大小。
创建一个数组队列的类,其中需要包含以下几个方法:
oolean isFull():判断队列是否已满
boolean isEmpty():判断队列是否为空
void add(int date):添加数据
int get():取出数据
void show():遍历队列
代码实现要用Java实现的话,首先定义一个数组队列的类ArryQueue,其中含有四个属性:
int front:指向队列第一个数据的位置
int rear:指向队列最后一个数据后一个的位置
int MAXSIZE:表示队列的大小
int arr[]:用于存储队列数据
以及一个带参构造方法
12345678910111213public class ...
java笔记(2)-快速排序
什么是快速排序快速排序是一种效率很高的排序方式,假设对于某一数列进行增序排列,那么这个过程(快排)可以概括为:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
假设数列为{4,9,1,5,3,8,7,6,2}
我们先选取4为基准数,进行第二步排序可以得到的新数列为
{1,3,2,4,9,5,8,7,6}
那么此时可以得到2个字数列
{1,3,2},4,{9,5,8,7,6}
并且也确定了2个数子列的位置,接下来继续用同样的法方法处理子序列直到所有子数列都只有一个值,那么排序便完成了。
代码实现123456789101112131415161718192021222324252627282930313233public static void QuickSort(int[] arr,int low ,int high ) { //low代表数组第一个值的下表,high代 ...