0%

这里只是简要说明如何连接和基本使用mysql,不详细展开。主要是为方便我本人查阅;

表结构

1
2
3
4
5
6
7
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| username | varchar(100) | NO | | NULL | |
| password | varchar(50) | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+

本文采用的是jpa方式

1.配置

pem.xmldependencies中加入以下依赖

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

新项目可以在创建时选择两个依赖

  • jpa
  • mysql
Read more »

第一次工作环境用ubuntu,配vscode官网下载慢,上了snap的贼船。

结果却是个阉割版,不支持中文输入;但此时安装原版deb却没用, 一打开就闪退,任凭你怎么删除配置扩展文件;

无奈让snap版本vscode支配了我几天工作;

Read more »

废话不多说, 直接上代码

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
/**
* 获取数组最大连续数字
*
* @param array $arr 一维数字数组
* @param boolean $asort 是否从小到大排序
* @return void
*/
function array_max_continuity_number(array $arr, bool $sort = true) {
if (!in_array(0, $arr)) {
array_unshift($arr, 0); // 从0开始, 避免1被忽略
}

$arr = array_unique($arr);
if ($sort) {
sort($arr);
}

$i = 0;
do {
$cur = $arr[$i];
$i++;
} while (count($arr) > $i && $cur+1 == $arr[$i]);

return $cur;
}


$arr1 = [1,2,3,4,5,6,7,90];
var_dump(array_max_continuity_number($arr1));
// int(7)

$arr1 = [1,2,3,4];
var_dump(array_max_continuity_number($arr1));
// int(4)
Read more »

相信大多数人在vue中都遇到过一个问题,就是对象变量a赋值给一个新的变量b,在修改b属性时 a也被修改了



这个准确的说不是vue的特点, 而是js的,估计是为了性能和效率优化,当对象变量赋值时,传递的是引用,相当于两个变量指向共同一个内存地址;

1
2
3
4
5
6
7
8
let test = { name:'特朗普' }
let woc = test
woc.name = "马克龙"
console.log(woc)
console.log(test)
---
{ name: '马克龙' } // woc
{ name: '马克龙' } // test



所以导致了, 上述问题的发生; 然而在js的5个基础类型中并不会使用引用赋值, 而且解决办法就是用深浅拷贝

浅拷贝

1
Object.assign()

如果我没记错的话, 好像是es6的特性, 浏览器要考虑ie和老旧浏览器解释引擎的问题; nodejs typescript之类的不用考虑, 他们会经过一个编译的工序使其兼容较早的es规范




使用示例

1
2
3
4
5
6
7
8
9
10
let test = { name: 66, sex:0}
let woc = Object.assign({}, test)

woc.sex = 7
console.log(woc)
console.log(test)

----
{ name: 66, sex: 7 } // woc
{ name: 66, sex: 0 } // test

注意:叫浅拷贝是有原因的, 它只能让一维属性不采用引用方式,如果你的对象中包涵对象、数组请使用深拷贝

深拷贝

1
2
JSON.stringify()
JSON.parse()

把对象变量转换成字符串, 再解析给另一个变量。 完全重新解析的, 自己申请开辟内存空间,就是感觉上不怎么优雅;

1
2
3
4
5
6
7
8
let test = { name: 66, sex:0}
let woc = JSON.parse(JSON.stringify(test))
woc.sex = 5
console.log(woc)
console.log(test)
---
{ name: 66, sex: 5 } // woc
{ name: 66, sex: 0 } // test

事出缘由

     领导让我来看一台公司的服务器问题,就说php一直登录不了, 写不了session,服务器储存空间爆满了

但用df之类的命令没有找到爆满的位置和原因;

经过几轮操作,我找到是/var/spool/exim/input这个目录爆满,占了非常大;

再查阅了一下了解到exim是一个邮件队列,好像是没发送出去的队列会被保存;而exim属于directadmin控制面板的东西。

如果你没有用到这个面板, 就没用, 可以删除。 我的情况是查询到directadmin被删除了, 而exim还保留着并且没用还是累赘才决定删除的。

解决办法

1.把exim停止,有下面两个方式

1
2
3
4
service exim stop

# 记不得是不是这个路径, 你可以用whereis exim 查找一下
mv /var/sbin/exim /var/sbin/exim.old

2.删除input中的队列

1
2
3
4
5
6
rm -rf /var/spool/exim/input/*
有的可能爆满了rm命令无法执行, 尤其是exim还在往里面塞东西的时候, 可以先改名字

mv /var/spool/exim/input /var/spool/exim/input.old
rm -rf /var/spool/exim/input.old
mkdir /var/spool/exim/input

其他参考

写在后面

这玩意有多恐怖, 就在我给input改名为input.old时, 它自己又创建了input并写入了156个文件。。。。

    
    遇到以下类似问题,你就可以看下去了,只要包涵open_basedir几乎就是通用的解决办法。

1
PHP Warning:  Phar::mapPhar(): open_basedir restriction in effect. File(/usr/local/bin/composer) is not within the allowed path(s): (/home/wwwroot/star/:/tmp/:/var/tmp/:/proc/) in /usr/local/bin/composer on line 23

首先我们来了解一下open_basedir是什么?

    
    根据官方对它的解释是安全设置,没有在设置中的路径将没有权限使用fopen等乱七八糟的东西,防止php触及一些不该操作的地方, 被人利用;

    
    这项配置是从php5.3.0开始的,有的例如宝塔可能会给你配置好; 自己撘的环境需要自己设置




解决办法

    
    综上所述,以及按错误提示。 我们只需要在php.iniopen_basedir中添加/usr/local/bin即可解决;


首先, 我们找到php.ini的位置,并使用vim打开它

1
2
3
4
5
# 会返回php.ini配置文件所在位置, 假定在 /usr/local/php/php.ini
$ php --ini

# 编辑
$ vim /usr/local/php/php.ini

输入/open_basedir 加回车搜索,并添加你的白名单目录

示例:我这里添加 /usr/local/bin

1
open_basedir = "/usr/local/bin/:/root/:/tmp/:/var/tmp/:/proc/"

问题

express中使用express-jwt却不能运行, 出现如下报错

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
Debugger listening on ws://127.0.0.1:41149/3e64451b-210f-40d5-b0fa-c71b0caf4a78
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.

> woc-api@0.0.0 start /home/edk24/Desktop/code/woc-api
> node ./bin/www

Debugger listening on ws://127.0.0.1:38411/ed607848-ff76-4e67-96d2-f4fce9e93a93
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
Waiting for the debugger to disconnect...
/home/edk24/Desktop/code/woc-api/node_modules/express-jwt/lib/index.js:22
if (!options.algorithms) throw new Error('algorithms should be set');
^

Error: algorithms should be set
at module.exports (/home/edk24/Desktop/code/woc-api/node_modules/express-jwt/lib/index.js:22:34)
at Object.<anonymous> (/home/edk24/Desktop/code/woc-api/app.js:19:3)
at Module._compile (internal/modules/cjs/loader.js:1138:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
at Module.load (internal/modules/cjs/loader.js:986:32)
at Function.Module._load (internal/modules/cjs/loader.js:879:14)
at Module.require (internal/modules/cjs/loader.js:1026:19)
at require (internal/modules/cjs/helpers.js:72:18)
at Object.<anonymous> (/home/edk24/Desktop/code/woc-api/bin/www:7:11)
at Module._compile (internal/modules/cjs/loader.js:1138:30)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! woc-api@0.0.0 start: `node ./bin/www`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the woc-api@0.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /home/edk24/.npm/_logs/2020-07-31T09_18_16_982Z-debug.log
Waiting for the debugger to disconnect...

从错误信息中得到一个异常错误algorithms should be set,意思告诉我们没有设置算法。

但这是从官方示例中copy的啊, 还能有错?

结果是确实要设置一个算法,HS256这种, 可能是官方示例没有更新的原因, 导致初次使用的我栽到这个坑里了

解决办法

中间件配置处设置算法, 如(HMAC SHA256)HS256

1
2
3
app.use(
jwt({ secret: "woc123", algorithms: ["HS256"] }).unless({ path: ["/login"] })
);

本文仅从本人认知的角度来看待和描述指针/内存和引用, 是不太正规个人笔记, 欢迎留言讨论交流.

取内存地址

&变量名

1
2
int a = 100;
cout << &a << endl;

引用

int *变量 = &被引用变量

——- 等同 ——-

int *变量;

变量 = &被引用变量

1
2
3
4
5
6
7
int a = 100;
int *b = &a;
cout << a << endl;
cout << *b << endl;
*b = 80;
cout << a << endl;
cout << *b << endl;
1
2
3
4
100
100
80
80

结果相同, 无论a*b谁的值改变了, 都会同步. 因为*b指向a的内存地址

*b 是int指针类型, 它指向a

Read more »

Gitbook

使用Git和Markdown的现代书籍格式和工具链

Modern book format and toolchain using Git and Markdown

这是官方介绍和机翻译文

安装

1
2
3
$ npm install -g gitbook-cli
# 或者 (如果安装了cnpm)
$ cnpm install -g gitbook-cli

然后输入gitbook验证安装, 如果安装成功但找不到命令。 需要手动软连接一下。

Read more »