0%

1、安装Package Control

自动安装

1、按Ctrl+Shift+P打开命令行

2、输入并执行Install Package Control

提示:可能需要爬梯子

阅读全文 »

1、基本数据类型与包装类型

1、整数类型

数据类型 内存空间 取值范围
byte 8位(1个字节) -128~127
short 16位(2个字节) -32768~32767
int 32位(4个字节) -2147483648~2147483647
long 64位(8个字节) -9223372036854775808~9223372036854775807

2、浮点类型

数据类型 内存空间 取值范围
float 32位(4个字节) 1.4E-45~3.4028235-E38
double 64位(8个字节) 4.9E-324~1.7976931348623157E-308

3、字符类型

数据类型 内存空间 取值范围
char 16位(2个字节) 0~65535

4、布尔类型

数据类型 内存空间 取值范围
boolean 8位(1个字节)或32位(4个字节) true,false

当声明一个 boolean 变量时占用4个字节,当声明一个 boolean 数组时占用1个字节。

5、包装类型

基本类型对应的包装类型

基本类型 包装器类
boolean Boolean
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double

装箱与拆箱

装箱:基本数据类型转换成包装数据类型
如:int 转换成 Integer

拆箱:包装数据类型转换成基本数据类型
如:Integer 转换成 int

2、数组操作

1、遍历

1、通过索引遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void ergodic(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public static void ergodic(int arr[][]) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println("");
}
}

2、使用 foreach 遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void ergodic(int arr[]) {
for (int x : arr) {
System.out.println(x);
}
}
public static void ergodic(int arr[][]) {
for (int a[] : arr) {
for (int x : a) {
System.out.print(x + " ");
}
System.out.println("");
}
}

2、填充

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* 
* Arrays.fill(Object[] a, Object value);
* a:要进行元素填充的数组
* value:填充值
*/

/*
* Arrays.fill(Object[] a, int fromIndex, int toIndex, Object value);
* a:要进行元素填充的数组
* fromIndex:填充起始位置
* toIndex:填充结束位置
* value:填充值
*/

import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int arr[] = new int[10];
Arrays.fill(arr, 1); // 全部填充为1
Arrays.fill(arr, 0, 10, 5); // 填充[0,10),填充值为5
}
}

3、排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
* Arrays.sort(Object a[])
* a:要排序的数组
*/

/*
* Arrays.sort(Object a[], int fromIndex, int toIndex)
* a:要排序的数组
* fromIndex:排序的起始位置
* toIndex:排序的结束位置
*/
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int arr[] = { 5, 0, 4, 7, 0, 0, 3, 8, 3, 8 };
Arrays.sort(arr); // 数组排序
Arrays.sort(arr, 0, 10); // 数组[0,10)排序
}
}

4、复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* Object b[] = Arrays.copyOf(Object a[], int newLength)
* a:要复制的数组
* newLength:要复制后数组长度,如果<a.length,复制前[0,newLength);如果>a.length,后面补初始值(整数补0;char补null;)
*/

/*
* Object b[] = Arrays.copyOfRange(Object a[], int fromIndex, int toIndex)
* a:要复制的数组
* from:复制开始位置
* to:复制结束位置
*/

import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int arr[] = { 5, 0, 4, 7, 0, 0, 3, 8, 3, 8 };
int arr2[] = Arrays.copyOf(arr,arr.length); //复制arr数组
int arr3[] = Arrays.copyOfRange(arr, 0, 10); //复制arr[0,10)
}
}

3、字符串操作

1、查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/*
* int idx = str.indexOf(String substr)
* substr:要搜索的子串
* idx:返回子串在str中第一次出现的位置,如果没有返回-1
*/

/*
* int idx = str.lastIndexOf(String substr)
* substr:要搜索的子串
* idx:返回子串在str中最后一次出现的位置,如果没有返回-1
*/

/*
* char ch = str.charAt(int index)
* index:下标
* ch:str中下标为index的字符
*/

public static void main(String[] args) {
String str = "Hello World!";
int firIdx = str.indexOf("o");
int lastIdx = str.lastIndexOf("o");
char ch = str.charAt(3);
}

2、替换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
* String newStr = str.replace(char oldChar, char newChar)
* oldChar:被替换的字符
* newChar:替换的字符
* newStr:替换所有匹配位置后的字符串
*/

/*
* String newStr = str.replace(CharSequence target, CharSequence replacement)
* target:被替换的字符串
* replacement:替换的字符串
* newStr:替换所有匹配位置后的字符串
*/

/*
* String newStr = str.replaceAll(String regex, String replacement)
* regex:正则表达式,或字符串
* replacement:用于替换的字符串
* newString:替换所有匹配位置后的字符串
*/

/*
* String newStr = str.replaceFirst(String regex, String replacement)
* regex:正则表达式,或字符串
* replacement:用于替换的字符串
* newString:只替换第一个匹配位置后的字符串
*/

public static void main(String[] args) {
String str = "Hello World!";
str = str.replace('!', '.');
str = str.replace("World", "Java");
str = str.replaceAll("[A-Z]", "*");
str = str.replaceAll("o", "*");
str = str.replaceFirst("[A-Z]", "#");
str = str.replaceFirst("l", "#");
}

3、比较

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/*
* boolean bool = str.equals(String str1)
* str1:要比较的字符串
* bool:比较结果,相等为true,不相等为flase
*/

/*
* boolean bool = str.equalsIgnoreCase(String str1)
* str1:要比较的字符串
* bool:忽略字母大小写的比较结果,相等为true,不相等为flase
*/

/*
* boolean bool = str.startWith(String prefix)
* prefix:指作为前缀的字符
* bool:比较结果,如果prefix是str的前缀则为true,否则为flase
*/

/*
* boolean bool = str.startWith(String prefix, int offset)
* prefix:指作为前缀的字符
* offset:从str的offset位置开始
* bool:比较结果,如果prefix是str从offset开始的前缀则为true,否则为flase
*/

/*
* boolean bool = str.endWith(String suffix)
* suffix:指作为后缀的字符
* bool:比较结果,如果suffix是str的后缀则为true,否则为flase
*/

/*
* String newStr = str.toLowerCase();
* newStr:大写字母全部替换为小写字母后的字符串
*/

/*
* String newStr = str.toUpperCase();
* newStr:小写字母全部替换为大写字母后的字符串
*/

public static void main(String[] args) {
String str = "Hello World!";
boolean bool1 = str.equals("Hello");
boolean bool2 = str.equalsIgnoreCase("hello world!");
boolean bool3 = str.startsWith("Hello");
boolean bool4 = str.startsWith("ello",1);
boolean bool5 = str.endsWith("World!");
str = str.toLowerCase();
str = str.toUpperCase();
}

4、分割

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* String[] subStrs = str.split(String sign)
* sign:分隔符,可以使用正则表达式
* subStrs:str分割后的字符串数组
*/

/*
* String[] subStrs = str.split(String sign, int limit)
* sign:分隔符,可以使用正则表达式
* limit:限制的分割份数
* subStrs:str分割后的字符串数组
*/

public static void main(String[] args) {
String str = "Hello World!";
String strs[] = str.split(" ");
String strs1[] = str.split(" ", 1);
}

5、格式化

常规转换符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* String.format(String format, Object... args)
* format:格式化格式
* args:要被格式化的数据
*/

public static void main(String[] args) {
System.out.println(String.format("%b、%B", 1==1,1==1));
System.out.println(String.format("%h、%H", "Hello","Hello"));
System.out.println(String.format("%s、%S", "Hello","Hello"));
System.out.println(String.format("%c、%C", 'a','a'));
System.out.println(String.format("%d", 16));
System.out.println(String.format("%o", 16));
System.out.println(String.format("%x、%X", 16,16));
System.out.println(String.format("%e %E", 16.0,16.0));
System.out.println(String.format("%a %A", 16.0,16.0));
System.out.println(String.format("%% %s","Hello"));
}
转换符 说明 示例
%b、%B 结果被格式化为布尔类型 true、TRUE
%h、%H 结果被格式化为散列码 42628b2、42628B2
%s、%S 结果被格式化为字符串类型 Hello、HELLO
%c、%C 结果被格式化为字符类型 a、A
%d 结果被格式化为十进制整数 16
%o 结果被格式化为八进制整数 20
%x、%X 结果被格式化为十六进制整数 10、10
%e 结果被格式化为用计算机科学计数法表示的十进制数 1.600000e+01 1.600000E+01
%a 结果被格式化为带有效位数和指数的十六进制浮点值 0x1.0p4 0X1.0P4
%% 结果为字面值 % % Hello
时间和日期格式转换符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
* String.format(String format, Object... args)
* format:格式化格式
* args:要被格式化的数据
*/
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date data = new Date();
System.out.println(String.format("%tH", data));
System.out.println(String.format("%tI", data));
System.out.println(String.format("%tk", data));
System.out.println(String.format("%tl", data));
System.out.println(String.format("%tM", data));
System.out.println(String.format("%tS", data));
System.out.println(String.format("%tL", data));
System.out.println(String.format("%tN", data));
System.out.println(String.format("%tp", data));
System.out.println(String.format("%tz", data));
System.out.println(String.format("%tZ", data));
System.out.println(String.format("%ts", data));
System.out.println(String.format("%tQ", data));
System.out.println(String.format("%tF", data));
System.out.println(String.format("%tD", data));
System.out.println(String.format("%tc", data));
System.out.println(String.format("%tr", data));
System.out.println(String.format("%tT", data));
System.out.println(String.format("%tR", data));
}
}
转换符 说明 示例
%tH 2位数字的24时制的小时(00~23) 23
%tI 2位数字的12时制的小时(01~12) 05
%tk 2位数字的24时制的小时(0~23) 9
%tl 2位数字的12时制的小时(1~12) 6
%tM 2位数字的分钟(00~59) 44
%tS 2位数字的秒数(00~60) 52
%tL 3位数字的毫秒数(000~999) 558
%tN 9为数字的微秒数(000000000~999999999) 558000000
%tp 制定语言环境上下午标记 下午
%tz 相对于GMT RFC 82 格式的数字时区偏移量 +0800
%tZ 时区缩写形式的字符串 CST
%ts 1970-01-01 00:00:00 到现在经过的秒数 1595951092
%tQ 1970-01-01 00:00:00 到现在经过的毫秒数 1595951092558
%tF “年-月-日”格式(4位年份) 2020-07-28
%tD “月/日/年”格式(2位年份) 07/28/20
%tc 全部日期和时间信息 周二 7月 28 23:44:52 CST 2020
%tr “时:分:秒 PM(AM)”格式(12时制) 11:44:52 下午
%tT “时:分:秒”格式(24时制) 23:44:52
%tR “时:分”格式(24时制) 23:44

6、StringBuilder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
* builder.append(Object obj)
* obj:追加在builder末尾的值
*/

/*
* builder.insert(int offset, Object obj)
* offset:插入位置
* obj:要插入的值
*/

/* builder.delete(int start, int end)
* start:开始位置(包含)
* end:结束位置(不包含)
*/

/* builder.deleteCharAt(int index)
* index:要删除字符的位置
*/

public static void main(String[] args) {
StringBuilder builder = new StringBuilder("Test");
//在末尾添加
builder.append("string");
builder.append((int)10);
builder.append((Boolean)true);
//...
System.out.println(builder);

//插入
builder.insert(2, "123");
builder.insert(2, (int)999);
builder.insert(2, (CharSequence)"***");
//...
System.out.println(builder);

//删除
builder.delete(2, 3);
builder.deleteCharAt(0);
System.out.println(builder);

//转换
String str = builder.toString();
builder = new StringBuilder(str);
}

7、扩展:正则表达式

1
2
3
4
5
6
7
8
9
10
/*
* boolean bool = str.matches(String regex)
* regex:正则表达式
* bool:判断str是否符合正则表达式,符合则为true
*/
public static void main(String[] args) {
String str = "Hello";
boolean bool = str.matches("[A-Z][a-z]{4}");
System.out.println(bool);
}

正则表达式中的元字符

元字符 正则表达式中的写法 含义
. . 代表任意一个字符
\d \\d 代表0~9的任何一个数字
\D \\D 代表任何一个非数字字符
\s \\s 代表空字符,如\t\n
\S \\S 代表非空字符
\w \\w 代表可用作标识符的字符,但不包括$
\W \\W 代表不可用于标识符的字符
\p{Lower} \\p{Lower} 代表小写字母{a~z}
\p{Upper} \\p{Upper} 代表大写字母{A~Z}
\p{ASCII} \\p{ASCII} 代表 ASCII 字符
\p{Alpha} \\p{Alpha} 代表字母字符
\p{Digit} \\p{Digit} 代表十进制数字{0~9}
\p{Alnum} \\p{Alnum} 代表数字或字母字符
\p{Punct} \\p{Punct} 代表标点符号 ```!@#$%^&*()-=_+[]\{}\ ;:’”,<.>/?`~```
\p{Graph} \\p{Graph} 代表可见字符[\p{Alnum}\p{Punct}]
\p{Print} \\p{Print} 代表可打印字符[\p{Graph}\x20]
\p{Blank} \\p{Blank} 代表空格或制表符\t
\p{Cntrl} \\p{Cntrl} 代表控制字符[\x00-\x1F\x7F]

正则表达式中的限定符

限定修饰符 意义 示例
? 0次或1次 A?
* 0次或多次 A*
+ 0次或多次 A+
{n} 正好出现n次 A{2}
{n,} 至少出现n次 A{3,}
{n,m} 出现 n~m 次 A{2,6}

方括号中元字符含义

字符 含义
[abc] 表示a、b或者c
[^abc] 表示除a、b、c以外的字符
[a-zA-Z] a~zA~Z的任何字符
[a-d[m-p]] a~dm~p的任何字符
[a-z&&[def]] 表示d、e或者f
[a-z&&[^bc]] 除b、c以外a~z的所有字符
[a-z&&[^m-p]] m~p以外a~z的所有字符

1、npm 安装插件速度慢

1、方法一:切换源

1
npm config set registry https://registry.npm.taobao.org

2、方法二:使用cnpm

执行完下列命令后,当要用到npm命令时就可以使用cnpm代替

1
npm install -g cnpm --registry=https://registry.npm.taobao.org
阅读全文 »

1、Hexo搭建博客

1、Hexo 初始化

在本地新建一个文件夹,并在该目录下执行hexo init命令,使用Hexo的初始框架。

2、博客配置

接下来可以根据自己的兴趣喜好来配置自己的博客。

可以使用hexo n "title"来新建一个页面。

3、本地测试

在博客的根目录下执行命令,让其在本地运行。

1
2
3
4
5
6
7
8
9
10
# 清理缓存
hexo clean

# 博客生成
# hexo g
hexo generate

# 在本地运行
# hexo s
hexo server

2、在 GitHub 上发布

1、创建仓库

仓库名称随意(网上的教程仓库名称都是用户名+github.io。随意名称的话,最后发布的时候改一下发布的仓库就可以了。)

在仓库的设置中设置 GitHub Pages。

创建仓库-1 创建仓库-2

2、在本地配置GitHub信息

在命令行中执行git config --global user.email "Your Email"git config --global user.name "Your Name"Your EmailYour Name换成你的用户名和邮箱。

3、添加SSH

在命令行中执行ssh-keygen -t rsa -C "youremail@example.com"生成 SSH 。

找到生成的 id_rsa.pub文件,通常是在C:\Users\"Your UserName"\.ssh目录下。

然后在GitHub中的个人设置中添加SSH,将 id_rsa.pub文件的内容复制进去。

添加SSH-1 添加SSH-2 添加SSH-3

4、修改博客的发布地址

修改博客根目录下的_config.yml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: https://"用户名".github.io/"仓库名称"/
root: /"仓库名称"/
permalink: :year/:month/:day/:title/
permalink_defaults:
pretty_urls:
trailing_index: true # Set to false to remove trailing 'index.html' from permalinks
trailing_html: true # Set to false to remove trailing '.html' from permalinks

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: git@github.com:"用户名"/"仓库名称".git
branch: master

5、发布

在博客的根目录下执行命令发布到 GitHub

1
2
3
4
5
6
7
8
9
10
# 清理缓存
hexo clean

# 博客生成
# hexo g
hexo generate

# 在本地运行
# hexo d
hexo deploy

在发布过程中遇到个小错误。。。。

发布-1

执行npm install --save hexo-deployer-git来解决问题。

3、Hexo双线部署

同时部署到 GitHub PageGitee Pages 。除了Gitee Pages还可以部署到Coding Pages,在部署到Coding Pages时宕机了好几次所以用了Gitee Pages

1、创建仓库

新建仓库,仓库名称与你的用户名相同,就像GitHub Pages那样。

Gitee创建仓库

2、开启Gitee Pages服务

进入仓库开启Gitee Pages服务

开启Gitee Pages服务-1 开启Gitee Pages服务-2

3、添加SSH

进入Gitee的个人设置,添加SSH,与Github使用相同的SSH就可以。

Gitee添加SSH

5、修改Hexo配置文件

修改_config.yml文件

1
2
3
4
5
6
7
8
9
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo:
github: git@github.com:504703038/504703038.github.io.git
gitee: git@gitee.com:Oort_t/Oort_t.git
# coding: git@e.coding.net:oort/oort.coding.me.git
branch: master

4、在百度收录网站

在百度收录网站,使得网站能够在百度搜得到。因为GitHub禁止了百度爬虫,所以要实现双线部署,让百度爬虫从Gitee收录。

0、查看网站是否被收录

输入 site:域名 来查看域名是否被搜索引擎收录

查看收录状况

1、在百度资源平台添加网站

百度资源平台

1、添加网站

在百度资源平台添加网站-1

2、验证

验证使用HTML标签验证

在百度资源平台添加网站-2

将验证标签<meta name="baidu-site-verification" content="**********" />放到./themes/next/layout/_partials/head/head.swing文件的前几行

1
2
<meta charset="UTF-8">
<meta name="baidu-site-verification" content="**********" />

完成之后发布博客来完成验证。

2、提交百度搜索

1、主动推送

安装插件npm install hexo-baidu-url-submit --save,并在_config.yml中添加配置

1
2
3
4
5
6
# 百度推送
baidu_url_submit:
count: 100 # 提交最新的多少个链接
host: oort_t.gitee.io # 在百度站长平台中添加的域名
token: **************** # 密钥
path: baidu_urls.txt # 文本文档的地址, 新链接会保存在此文本文档里

其中 token可以再链接提交中找到

主动推送-1 主动推送-2

更新_config.yml配置

1
2
3
4
5
6
7
8
9
10
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
- type: git
repo:
github: git@github.com:504703038/504703038.github.io.git
gitee: git@gitee.com:Oort_t/Oort_t.git
# coding: git@e.coding.net:oort/oort.coding.me.git
branch: master
- type: baidu_url_submitter # 百度主动推送

在执行hexo d部署时就会自动推送,成功推送的标志

主动推送-3

注意_config.yml中的url要与平台中添加的网站一致

2、自动推送

将自动推送的代码放到./themes/next/layout/_third-party/baidu-push.swing文件中

自动推送

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{%- if theme.baidu_push %}
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
{%- endif %}

更新./themes/next/_config.yml配置,将baidu_push设置为true(大约在500行左右)

1
baidu_push: true

0、参考

Hexo 博客提交百度、谷歌搜索引擎收录

1、安装Git

Git 官网 下载安装包进行安装

验证:

1
git --version

2、安装NodeJs

NodeJs 官网 下载安装包进行安装

验证:

1
2
node -v
npm -v

3、安装Hexo

1
npm install -g hexo-cli

验证:

1
hexo -v

1、安装git

1
2
3
4
sudo apt-get install git

# 验证
git --version

2、安装nodejs

1
2
3
4
5
6
sudo apt-get install nodejs
sudo apt-get install npm

# 验证:
node -v
npm -v

3、安装hexo

1
2
3
4
sudo npm install hexo-cli -g

# 验证:
hexo -v

1、通用

保存&恢复
  • [x] 切换文件时自动保存对上个文件的更改

2、外观

字体大小

自定义 16px

状态栏
  • [x] 显示状态栏
侧边栏
  • [x] 侧边栏的大纲视图允许折叠和展开
主题

Night 主题

阅读全文 »

0、基本配置

1、字体大小

​ 在设置中搜索font,将Font Family的值改为Consolas, 'Courier New', monospace

字体设置

阅读全文 »

1、字体大小

1、编辑区字体大小

Window -> Preferences -> General -> Appearance -> Colors and Fonts -> Basic -> Text Font

阅读全文 »

0、配置文件路径

default.conf所在位置,若未打开过CodeBlocks先打开一次才会有

C:\Users\"Username"\AppData\Roaming\CodeBlocks\default.conf

~/.config/codeblocks/default.conf

阅读全文 »

1、预处理器指示符

当嵌套包含文件时可以用如下代码避免重复编译。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef BOOKSTORE_H
#define BOOKSTORE_H
/* Bookstore.h 的内容 */
#endif

/*
#ifndef x 判断x是否被定义,若x未被定义则为真,否则为假。
...
#endif 标志#ifndef的结束

#ifdef x 判断x是否被定义,若x未被定义则为假,否则为真。

#define x 定义x。
*/
阅读全文 »