0%

浅拷贝

object.assign

扩展运算符

concat (数组)

sblice (数组)

深拷贝

JSON.stringfy()

手写递归实现

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
let obj1 = {
a: {
b: 1,
},
};

function deepClone(obj) {
let cloneObj = Array.isArray(obj) ? [] : {};

for (let key in obj) {
//遍历

if (typeof obj[key] === "object") {
cloneObj[key] = deepClone(obj[key]); //是对象就再次调用该函数递归
} else {
cloneObj[key] = obj[key]; //基本类型的话直接复制值
}
}

return cloneObj;
}

let obj2 = deepClone(obj1);

obj1.a.b = 2;

console.log(obj2); // {a:{b: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
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const isComplexDataType = (obj) =>
(typeof obj === "object" || typeof obj === "function") && obj !== null;

const deepClone = function (obj, hash = new WeakMap()) {
if (obj.constructor === Date) return new Date(obj); // 日期对象直接返回一个新的日期对象

if (obj.constructor === RegExp) return new RegExp(obj); //正则对象直接返回一个新的正则对象

//如果循环引用了就用 weakMap 来解决

if (hash.has(obj)) return hash.get(obj);

let allDesc = Object.getOwnPropertyDescriptors(obj);

//遍历传入参数所有键的特性

let cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc);

//继承原型链

hash.set(obj, cloneObj);

for (let key of Reflect.ownKeys(obj)) {
cloneObj[key] =
isComplexDataType(obj[key]) && typeof obj[key] !== "function"
? deepClone(obj[key], hash)
: obj[key];
}

return cloneObj;
};

// 下面是验证代码

let obj = {
num: 0,

str: "",

boolean: true,

unf: undefined,

nul: null,

obj: { name: "我是一个对象", id: 1 },

arr: [0, 1, 2],

func: function () {
console.log("我是一个函数");
},

date: new Date(0),

reg: new RegExp("/我是一个正则/ig"),

[Symbol("1")]: 1,
};

Object.defineProperty(obj, "innumerable", {
enumerable: false,
value: "不可枚举属性",
});

obj = Object.create(obj, Object.getOwnPropertyDescriptors(obj));

obj.loop = obj; // 设置loop成循环引用的属性

let cloneObj = deepClone(obj);

cloneObj.arr.push(4);

console.log("obj", obj);

console.log("cloneObj", cloneObj);

js 8 种数据类型

image-20210111181230568

typeof

image-20210111180636320

instanceof

image-20210111180709997

myInstanceof

image-20210111180815057

Object.prototype.toString.call()

image-20210111181005227

通用的数据类型判断方法

image-20210111181129536

杜甫

八月秋高风怒号⑴,卷我屋上三重茅⑵。茅飞渡江洒江郊,高者挂罥长林梢⑶,下者飘转沉塘坳⑷。

南村群童欺我老无力,忍能对面为盗贼⑸。公然抱茅入竹去⑹,唇焦口燥呼不得⑺,归来倚杖自叹息。

俄顷风定云墨色⑻,秋天漠漠向昏黑⑼。布衾多年冷似铁⑽,娇儿恶卧踏里裂⑾。床头屋漏无干处⑿,雨脚如麻未断绝⒀。自经丧乱少睡眠⒁,长夜沾湿何由彻⒂!

安得广厦千万间⒃,大庇天下寒士俱欢颜⒄,风雨不动安如山。呜呼⒅!何时眼前突兀见此屋⒆,吾庐独破受冻死亦足⒇!

李白

君不见黄河之水天上来,奔流到海不复回。
君不见高堂明镜悲白发,朝如青丝暮成雪。
人生得意须尽欢,莫使金樽空对月。
天生我材必有用,千金散尽还复来。
烹羊宰牛且为乐,会须一饮三百杯。
岑夫子,丹丘生,将进酒,君莫停。
与君歌一曲,请君为我侧耳听。
钟鼓馔玉不足贵,但愿长醉不愿醒。
古来圣贤皆寂寞,惟有饮者留其名。
陈王昔时宴平乐,斗酒十千恣欢谑。
主人何为言少钱,径须沽取对君酌。
五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。

苏轼

大江东去,浪淘尽,千古风流人物。
故垒西边,人道是,三国周郎赤壁。
乱石穿空,惊涛拍岸,卷起千堆雪。(穿空 一作:崩云)
江山如画,一时多少豪杰。

遥想公瑾当年,小乔初嫁了,雄姿英发。
羽扇纶巾,谈笑间,樯橹灰飞烟灭。(樯橹 一作:强虏)
故国神游,多情应笑我,早生华发。
人生如梦,一尊还酹江月。(人生 一作:人间;尊 同:樽)

译文

大江之水滚滚不断向东流去,滔滔巨浪淘尽千古英雄人物。
那旧营垒的西边,人们说那就是三国时周郎大破曹兵的赤壁。
岸边乱石林立,像要刺破天空,惊人的巨浪拍击着江岸,激起的浪花好似千万堆白雪。
雄壮的江山奇丽如图画,一时间涌现出多少英雄豪杰。

遥想当年的周瑜春风得意,小乔刚刚嫁给了他做妻子,英姿雄健风度翩翩神采照人。
手摇羽扇头戴纶巾,谈笑之间,就把强敌的战船烧得灰飞烟灭。
如今我身临古战场神游往昔,可笑我有如此多的怀古柔情,竟如同未老先衰般鬓发斑白。
人生犹如一场梦,且洒一杯酒祭奠江上的明月。

转自:https://so.gushiwen.org/mingju/juv_2f2012ed6c86.aspx

连接pgsql数据库

1
2
3
4
5
6
7
8
9
10
11
$host        = "host=xxx";
$port = "port=5432";
$dbname = "dbname=xxx";
$credentials = "user=postgres password=xxx";

$db = pg_connect( "$host $port $dbname $credentials" );
if(!$db){
echo "Error : Unable to open database\n";
} else {
echo "Opened database successfully\n";
}

查询数据库输出图片

方法一 base64格式
1
2
3
4
5
6
7
8
9
10
11
$sql =  "SELECT id,encode(picture, 'BASE64') as picture FROM water_flow_pictures_data WHERE id=".$_GET['imgid'];

$ret = pg_query($db, $sql);
if(!$ret){
echo pg_last_error($db);
exit;
}
while($row = pg_fetch_row($ret)){
// 方法一
echo '<img src="data:image/jpg;base64,' . $row[1] .'"/>';
}
方法二
1
2
3
4
5
6
7
8
9
10
11
12
$sql =  "SELECT id,picture FROM water_flow_pictures_data WHERE id=".$_GET['imgid'];

$ret = pg_query($db, $sql);
if(!$ret){
echo pg_last_error($db);
exit;
}
while($row = pg_fetch_row($ret)){
// 方法二
header("Content-Type: image/jpeg");
echo pg_unescape_bytea($row[1]);
}

缩放后输出(也可压缩质量)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 获取原图属性
list($width, $height, $type, $attr) = getimagesizefromstring(pg_unescape_bytea($row[1]));
$newWidth = $_GET['width']?$_GET['width']: $width;
$newHeight = $height/$width * $newWidth;

$image =imagecreatefromstring(pg_unescape_bytea($row[1]));
$quality = 0; // 图片输出质量,0 为最低


// Create a blank image and add some text
$im = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresized($im,$image,0,0,0,0,$newWidth,$newHeight,$width,$height);
// $text_color = imagecolorallocate($im, 233, 14, 91);
// imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

// Set the content type header - in this case image/jpeg
header('Content-Type: image/jpeg');

// Output the image
imagejpeg($im, null, $quality);

// Free up memory
imagedestroy($im);

关闭数据库

1
pg_close($db);

参考

https://www.php.net/manual/en/ref.image.php
https://www.runoob.com/php/php-image-gd.html

migration

php artisan make:migration create_tasks_table
php artisan migrate

model

php artisan make:model User

contorller

php artisan make:controller UsersContorller –resource

快速创建软链接

php artisan storage:link

注意

请使用 nerd-fonts 字体, powerline fonts 字体,部分图标可能无法显示

安装 windows Terminal

  1. windows 应用商店安装
  2. github 下载安装

安装 powershell 7

github 下载安装
如果继续使用 powershell 5.1

  1. 可能需要 Change the execution policy
    1
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
    1
    Get-ExecutionPolicy -List
  2. 升级 PowerShellGet (否则接下来无法安装 PSReadline)
    Windows PowerShell 5.1 comes with version 1.0.0.1 of PowerShellGet preinstalled.
    This version of PowerShellGet has a limited features and doesn’t support the updated capabilities of the PowerShell Gallery. To be supported, you must update to the latest version.
    1
    2
    Install-Module -Name PowerShellGet -Force
    Exit

安装 powershell 插件

1
2
3
4
5
6
7
8
# 1. 安装 PSReadline 包,该插件可以让命令行很好用,类似 zsh
Install-Module -Name PSReadLine -AllowPrerelease -Force

# 2. 安装 posh-git 包,让你的 git 更好用
Install-Module posh-git -Scope CurrentUser

# 3. 安装 oh-my-posh 包,让你的命令行更酷炫、优雅
winget install JanDeDobbeleer.OhMyPosh -s winget

安装字体

安装字体,否则乱码

nerd-fonts(推荐)

  1. 下载安装(推荐)
    nerd fonts 官网
    Meslo下载地址 (推荐)
    解压
    进入 ttf 文件夹
    双击字体文件依次安装 或 全选-》右键-》安装
  2. 命令安装(beta,需要管理员身份)
    oh-my-posh font install

powerline fonts

1
2
3
4
5
git clone https://github.com/powerline/fonts.git
cd .\fonts\
.\install.ps1
cd ..
del .\fonts\ -Recurse -Force

配置 windows Terminal

  1. 可视化界面配置
  2. json 文件配置
    guid 需要生成,文章末尾有生成 guid 的网站
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // 默认的配置就是我们的新 powershell(重要!!!)
    "defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",

    {
    // Powershell 7.1.0-preview.6 配置
    "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
    "hidden": false,
    "name": "pwsh",
    // -nologo 去掉启动时的logo等信息输出
    "commandline": "D:/Program Files/PowerShell/7-preview/pwsh.exe -nologo",
    "icon": "D:/Program Files/PowerShell/7-preview/assets/Powershell_avatar.ico",
    //"source": "Windows.Terminal.PowershellCore",
    // 启动菜单一定要设置为 <.>,否则后面重要的一步将会无效!
    "startingDirectory": ".",
    // 字体
    "fontFace": "Fira Code",
    "fontSize": 11,
    "historySize": 9001,
    "padding": "5, 5, 20, 25",
    "snapOnInput": true,
    "useAcrylic": false,
    // 颜色方案
    // "colorScheme": "Homebrew"
    },

添加 Powershell 启动参数

1
notepad $PROFILE # 打开配置文件

如果上面代码报错找不到文件,新建一个

1
New-Item -Path $PROFILE -Type File -Force
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

#------------------------------- Import Modules BEGIN -------------------------------
# 引入 posh-git
Import-Module posh-git

# 初始化 oh-my-posh 并设置 PowerShell 主题
oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\paradox.omp.json" | Invoke-Expression
# oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\jandedobbeleer.omp.json" | Invoke-Expression
#------------------------------- Import Modules END -------------------------------





#------------------------------- Set Hot-keys BEGIN -------------------------------
# 设置 Tab 键补全
# Set-PSReadlineKeyHandler -Key Tab -Function Complete

# 设置 Ctrl+d 为菜单补全和 Intellisense
Set-PSReadLineKeyHandler -Key "Tab" -Function MenuComplete

# 设置 Ctrl+d 为退出 PowerShell
Set-PSReadlineKeyHandler -Key "Ctrl+d" -Function ViExit

# 设置 Ctrl+z 为撤销
Set-PSReadLineKeyHandler -Key "Ctrl+z" -Function Undo

#------------------------------- Set Hot-keys END -------------------------------


参考:
on-my-posh 官网
https://www.cnblogs.com/Rohn/p/12940312.html
https://zhuanlan.zhihu.com/p/137595941
https://blog.csdn.net/WPwalter/article/details/100159481
字体:
https://sspai.com/post/52907
powershell 乱码,vscode 乱码 :
https://zhuanlan.zhihu.com/p/51901035
其他:
guid 生成工具
https://www.qvdv.com/tools/qvdv-guid.html

添加用户

两种方式

  1. 控制面板-用户帐户-用户帐户-管理其他帐户-添加用户账户
  2. 服务器管理器-工具-计算机管理-系统工具-本地用户和组-用户-右键新用户-记得右键设置密码

赋予远程控制组

两种方式

  1. 上一步第二种方法直接右键用户选属性-隶属于选项卡-添加 Remote Desktop Users 组
  2. 右键这台电脑-属性-更改设置-远程选项卡-选择用户-添加相应用户

参考:
https://blog.csdn.net/zhuge_Spring/article/details/107005114
补充:
ie增强的安全配置如何关闭
https://jingyan.baidu.com/article/ce09321b63a43c2bfe858f5f.html