邓某的杂货铺

凡心所向,素履以往;生如逆旅,一苇以航。


  • 首页

  • 归档

  • 关于

  • 标签

  • 分类

JavaScript 学习笔记

发表于 2018-11-22 | 分类于 JavaScript

堆栈调用

V8 引擎:

V8 引擎包括内存堆和调用堆,内存堆是用来做内存分配的地方,调用堆是代码执行时栈帧存放的位置

调用栈:

因为 JavaScript 是单线程的,所以只有一个调用栈

调用栈是一种数据结构,记录了当前执行的操作在程序中的位置。如果运行到一个函数,就将这个函数放入放入栈顶(严格来说是将这个函数的执行上下文放入栈顶),当函数返回时,将这个函数从栈顶弹出

“堆栈溢出”: 当调用栈达到最大时触发(函数调用超过了栈的大小)

执行上下文

  • 全局执行上下文: 一个程序只会有一个全局上下文
  • 函数执行上下文: 函数被调用时创建,可以任意多个
  • Eval 函数上下文: eval()用于计算某个字符串,并执行其中代码。参数必须为原始字符串,不能传 String 对象
阅读全文 »

前端框架通识——Virtual Dom

发表于 2018-11-15 | 分类于 前端

转载自: https://juejin.im/post/5b10dd36e51d4506e04cf802

为什么需要 Virtual Dom

众所周知,操作 DOM 是很耗费性能的一件事情,既然如此,我们可以考虑通过 JS 对象来模拟 DOM 对象,毕竟操作 JS 对象比操作 DOM 省时的多。

举个例子

1
2
3
4
// 假设这里模拟一个 ul,其中包含了 5 个 li
[1, 2, 3, 4, 5]
// 这里替换上面的 li
[1, 2, 5, 4]

从上述例子中,我们一眼就可以看出先前的 ul 中的第三个 li 被移除了,四五替换了位置。

如果以上操作对应到 DOM 中,那么就是以下代码

1
2
3
4
5
6
7
8
9
// 删除第三个 li
ul.childNodes[2].remove()
// 将第四个 li 和第五个交换位置
let fromNode = ul.childNodes[4]
let toNode = node.childNodes[3]
let cloneFromNode = fromNode.cloneNode(true)
let cloenToNode = toNode.cloneNode(true)
ul.replaceChild(cloneFromNode, toNode)
ul.replaceChild(cloenToNode, fromNode)

阅读全文 »

Vue 学习总结

发表于 2018-09-19 | 分类于 JavaScript

MVVM 设计模式

先从 MVC 模式说起

1.png

MVC 模式将软件分为三个部分:

  • View:用户界面,可以传送指令到 Controller
  • Controller: 业务逻辑, 处理业务,改变 Model 状态
  • Model: 数据层, 用于展示到 View 中

MVP 模式

1.png

MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向:

  • 各部分之间的通信,都是双向的。
  • View 与 Model 不发生联系,都通过 Presenter 传递。
  • View 非常薄,不部署任何业务逻辑,称为”被动视图”(Passive View),即没有任何主动性,而 Presenter非常厚,所有逻辑都部署在那里。
    阅读全文 »

Flux 布局

发表于 2018-09-07 | 分类于 CSS

基本概念:

在 flex 容器中默认存在两条轴,水平主轴(main axis) 和垂直的交叉轴(cross axis),这是默认的设置,当然你可以通过修改使垂直方向变为主轴,水平方向变为交叉轴,这个我们后面再说。

在容器中的每个单元块被称之为 flex item,每个项目占据的主轴空间为 (main size), 占据的交叉轴的空间为 (cross size)。

这里需要强调,不能先入为主认为宽度就是 main size,高度就是 cross size,这个还要取决于你主轴的方向,如果你垂直方向是主轴,那么项目的高度就是 main size。

Flex 容器:

首先,实现 flex 布局需要先指定一个容器,任何一个容器都可以被指定为 flex 布局,这样容器内部的元素就可以使用 flex 来进行布局。

.container {
    display: flex | inline-flex;       //可以有两种取值
}

分别生成一个块状或行内的 flex 容器盒子。简单说来,如果你使用块元素如 div,你就可以使用 flex,而如果你使用行内元素,你可以使用 inline-flex。

需要注意的是:当时设置 flex 布局之后,子元素的 float、clear、vertical-align 的属性将会失效。

有下面六种属性可以设置在容器上,它们分别是:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content
阅读全文 »

MySQL 数据库操作常用命令

发表于 2018-09-06 | 分类于 数据库

基本命令

create database <name>; // 创建数据库
use <database-name>; // 切换数据库
drop database <name>; // 删除数据库
show tables/databases; // 显示所有表/数据库
describe <table-name>; // 显示表的详细信息
select version(),current_date; // 显示当前 MySQL 和当前时间
flush privileges; // 刷新数据库

基本技巧

shell> net start/stop mysql
shell> service mysql restart
shell> mysql -u root -p
// 修改 root 密码
mysql> update password=password("123456") where user='root'; 
// 授权访问
mysql> grant all privileges on *.* to root@'%' identified by ’设置密码’ with grant option;
mysql> revoke all privileges on *.* from root@'%';
// 备份数据库
shell> mysqldump -h host -u root -p dbname >dbname_backup.sql
// 恢复数据库
shell> mysqladmin -h myhost -u root -p create dbname
shell> mysqldump -h host -u root -p dbname < dbname_backup.sql

Github 使用技巧

发表于 2018-08-05 | 分类于 开发工具

github 多账号配置

  • 指定文件名生成新的秘钥

    $ ssh-keygen -t rsa -f ~/.ssh/id_rsa_second -C "second@mail.com"
    
  • 将公钥添加到 SSH agent

    $ ssh-agent bash
    $ ssh-add ~/.ssh/id_rsa_second
    
  • 在.ssh目录下,增加config配置

    #Host myhost(这里是自定义的host简称,以后连接远程服务器就可以用命令ssh myhost)[注意下面有缩进]
    #User 登录用户名(如:git)
    #HostName 主机名可用ip也可以是域名(如:github.com或者bitbucket.org)
    #Port 服务器open-ssh端口(默认:22,默认时一般不写此行
    #IdentityFile 证书文件路径(如~/.ssh/id_rsa_*)
    
    • 具体实例

      # first.github (first@gmail.com)
      Host github.com
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa
      
      # second (second@gmail.com)
      Host github-second
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa_second
      
  • 添加远程仓库地址

    git remote add origin git@github-second:second/test.git
    # 并非原来的git remote add origin git@github.com:second/test.git
    
  • 修改用户信息

    //设置global
    git config --global user.name "AustinDeng"
    git config --global user.email "nidhogg.dxx@gmail.com"
    
    //设置仓库的user.email和user.name
    git config  user.email "nidhogg.dxx@gmail.com"
    git config  user.name "AustinDeng"
    

使用 gist 来分享代码/文章

基本操作

  • 打开 https://gist.github.com/
  • 可以发布一个私密的 gist, 这样只有在浏览器中输入其 URL 才可见
  • 可以使用 Markdown 格式,注意文件名要带有 .md 后缀

进阶操作

  • 使用 http://www.roughdraft.io/ 发布你的 Gist
  • 使用 https://bl.ocks.org/ 将你的 Gist 托管为一个页面

Vim生存之道

发表于 2018-07-19 | 分类于 开发工具

Vim.gif

阅读全文 »

数据结构与算法

发表于 2018-07-15 | 分类于 C++

线性表

线性表的线性存储结构

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include<iostream>
using namespace std;

struct node{
int data;
node *next;
};

typedef node *position;
typedef node *LIST;

void createList(LIST &); // 构建线性表
void readList(LIST &); // 读取线性表
position end(LIST); // 返回尾部节点,可以用于尾插法
void insert(int, position); // 在某一节点的下一位插入节点
void deleteNode(position); // 删除节点的下一个节点
position Local(int, LIST);// 返回元素为 x 的第一个节点
position makeNull(LIST &); // 线性表置空

int main(){
LIST L = NULL;
createList(L);
readList(L);
return 0;
}

void createList(LIST &L){
// 直接操作 L 会导致段错误
position p1, p2;
cout << "Enter the Data or -1 to end:" << endl;

while(1){
p1 = new node;
cin >> p1->data;
if(p1->data == -1){
break;
}
if(L == 0){
L = p1;
p2 = p1;
}
else{
p2->next = p1;
p2 = p1;
}
}
p2->next = NULL;
}

void readList(LIST &L){
position p = L;
for(; p ; p = p->next){
cout << p->data << '\t';
}
cout << endl;
}

position end(LIST L){
position q;
q = L;
while (q -> next != NULL){
q = q -> next;
}
return q;
}

void insert(int x, position p){
position q = new node;
q -> data = x;
q -> next = p -> next;
p -> next = q;
}

void deleteNode(position p){
if (p -> next != NULL){
position q = p -> next;
p -> next = q -> next;
delete q;
}
}

position Local(int x, LIST L){
position p;
p = L;
while (p -> next != NULL){
if (p -> data == x){
return p;
} else {
p = p -> next;
}
}
return p;
}

position makeNull(LIST &L){
L = new node;
L -> next = NULL;
return L;
}
阅读全文 »

Git 常用命令

发表于 2018-07-15 | 分类于 开发工具

创建

  • 拉取远程仓库

    $ git clone ssh://user@domain.com/repo.git
    
  • 初始化本地仓库

    $ git init [project-name]
    

配置

  • 显示当前 Git 配置

    $ git config --list
    
  • 编辑 Git 配置文件

    $ git config -e [--global]
    
  • 编辑用户信息

    $ git config [--global] user.name "[name]"
    $ git config [--global] user.email "[email]"
    

本地操作

  • 查看状态

    $ git status
    
  • 查看 different

    $ git diff
    
  • 添加当前修改

    $ git add .
    
  • 添加某个文件的修改

    $  git -p <file>
    
  • 提交本地所有修改

    $ git commit -a
    
    阅读全文 »

Linux 下各文件夹的结构说明及用途介绍

发表于 2018-06-25 | 分类于 Linux

文件夹结构

  • /bin: 二进制可执行命令
  • /dev: 设备特殊文件
  • /etc: 系统管理和配置文件
  • /etc/rc.d: 启动的配置文件和脚本
  • /home: 用户家目录
  • /lib: 标准程序设计库,又叫动态链接共享库
  • /sbin: 系统管理命令
  • /tmp: 存储公用的临时文件
  • /root: 系统管理员主目录
  • /mnt: 用于临时挂载其他文件系统
  • /lost+found: 系统非正常关机而留下“无家可归”的文件就存放于此
  • /proc: 虚拟目录,是系统的内存映射,可直接访问这个目录来获取系统信息
  • /var: 某些大文件的溢出区,各种服务的日志文件就是存放于此
  • /usr: 最庞大的目录,要用到的应用程序和文件几乎都在这个目录下
    • /usr/x11r6: 存放 x window 的目录
    • /usr/bin; 众多的应用程序
    • /usr/sbin: 存放一些超级用户的管理程序
    • /usr/doc: linux 文档
    • /usr/include: linux 下开发和编译应用程序所需要的头文件
    • /usr/lib: 常用的动态链接库和软件包的配置文件
    • /usr/man: 帮助文档
    • /usr/src: 源代码。内核源代码存放在该文件夹下的 linux 文件夹下面
    • /usr/local/bin: 本地增加的命令
    • /usr/local/lib: 本地增加的库根文件系统
      阅读全文 »
1234
Austin Deng

Austin Deng

凡心所向,素履以往;生如逆旅,一苇以航。

32 日志
16 分类
34 标签
© 2021 Austin Deng