0%

MySQL安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo apt update
sudo apt install mysql-server

# 运行安全脚本
sudo mysql_secure_installation

# 验证MySQL安装
systemctl status mysql.service

# 验证MySQL安装
sudo netstat -tap | grep mysql

# 检查mysql是不是在运行
sudo service mysql status

# 登录
sudo mysql -uroot -p
阅读全文 »

git命令

  • 初始化一个git目录git init

  • 添加单个文件到暂存区 git add <file>

  • 添加所有文件到暂存区 git add .

  • 添加文件到本地仓库 git commint -m <message>

  • 查看git仓库状态 git status

  • 查看工作区和暂存区的的差异 git diff <file>

  • 查看暂存区和本地仓库的差异 git diff --cached

  • 查看工作区和本地仓库的差异 git diff HEAD -- <file>

  • 场景1:当在工作区修改了某个文件,但还没add,使用git checkou -- <file>可以丢弃修改

  • 场景2:当修改了某文件,还add到了暂存区,使用git reset HEAD <file>就回到了场景1继续即可

  • 场景3:修改文件并commit到版本库,想撤销本次提交,使用git reset --hard commit_id

  • commint_id是由SHA1计算而来,使用十六进制表示。显示从最近到最远的日志 git log

  • 显示简洁版日志 git log --pretty=online

  • 显示分支合并图 git log --graph --pretty=oneline --abbrev-commit

Git中HEAD表示当前版本,上一版本是HEAD^,上上版本是HEAD^^,往上100个版本是HEAD^100

  • 查看命令历史git reflog

  • 使用git rm <file>可以删除一个文件,然后commit到版本库即可

阅读全文 »

端口占用

  1. 查看哪个进程占用了8000端口
1
netstat -ano | findstr 8000
  1. 查看对用pid的进程详细信息
1
tasklist | findstr xxxx
  1. 杀掉xxx进程
1
taskkill /pid xxxx /F

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
rem auther:zhanghui
rem date:20181122
rem ******MySQL backup start********
@echo off
rem forfiles /p "G:\bupt_backup" /m backup_*.sql -d -30 /c "cmd /c del /f @path"
rem forfiles 用来对备份目录下的过期备份进行删除。
rem “E:\mysql\MySQL BackUp”是备份文件所在的路径,可以自行修改。
rem “backup_*.sql”指的是该路径下所有以“backup_”开头,以“.sql”作为后缀的数据库备份文件。
rem 而后面的数字“30”表示30天过期。

robocopy G:\APUE G:\backup-test /E /R:5 /W:60 /LOG+:G:\backup-test\copyLog.txt
rem 路径前者为需要备份的文件路径,后者为备份路径。
rem /E 表示复制子目录,包括空的子目录(不设置这个就只复制当前文件夹文件不复制子文件夹)
rem /MAXAGE:2 表示最长的文件存在时间,排除早于2天的文件(没有这个就是全部复制)
rem /W:n :: 两次重试间的等待时间: 默认为 30 秒。
rem /R:5 表示失败副本的重试次数(建议要设,默认值为一百万 = =)
rem /LOG+:D\xxx.txt 将状态输出到日志文件(附加到现有日志中)
rem 更多用法可在cmd中输入:help robocopy查看

set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"
rem 使用set命令来定义一个名为“Ymd”的变量,这个变量的值就是后面的一大串规则,简单说就是当前的日期和时间
E:\Software_work\xampp\mysql\bin\mysqldump --opt --single-transaction=TRUE --user=root --password=root --host=127.0.0.1 --protocol=tcp --port=3306 --default-character-set=utf8 --single-transaction=TRUE --routines --events "bupt" > "G:\bupt_backup\backup_%Ymd%.sql"
rem @echo on
rem ******MySQL backup end********

数据库引擎

MyISAM:

  • 不支持事务,但是每次查询都是原子的;
  • 支持表级锁,即每次操作是对整个表加锁;
  • 存储表的总行数;
  • 一个MYISAM表有三个文件:索引文件、表结构文件、数据文件;
  • 采用非聚簇索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本一致,但是辅索引不用保证唯一性。
阅读全文 »

事务

事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。

ACID

1.原子性(Atomicity)

事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。回滚可以用回滚日志来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。

阅读全文 »

节点结构

1
2
3
4
struct node{
int data;
node* next;
}

1.删除指针指向的结点(非头非尾)

狸猫换太子 : 当前结点与其后结点交换

1
2
3
4
5
6
7
8
9
bool deleteNode(node* pCur){
if(pCur == NULL || pCur -> next == NULL)
return false;
node* pNext = pCur -> next;
pCur -> next = pNext -> next;
pNext -> data = pCur -> data;
free(pNext);
return true;
}
阅读全文 »

二叉树的镜像

题目描述
操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树

    8
   /  \
  6   10
 / \  / \
5  7 9 11
镜像二叉树
    8
   /  \
  10   6
 / \  / \
11 9 7  5
阅读全文 »

二维数组中的查找

题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

阅读全文 »

1. 判断两棵二叉树是否相同

情况1:左右子结点不可旋转
情况2:左右子结点可旋转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool is_equal(BiTree* node1,BiTree* node2){
if(node1==NULL && node2==NULL)
return 1;
if( !node1 || !node2)
return 0;
if(node1->data == node2->data)
return is_equal(node1->lchild,node2->rchild)&&is_equal(node1->rchild,node2->rchild);
else
return 0;
/*
若可旋转,return 语句改为
return (is_equal(node1->lchild,node2->lchild)&&is_equal(node1->rchild,node2->rchild)) || (is_equal(node1->lchild,node2->rchild)&&is_equal(node1->rchild,node2->lchild))
*/
}
阅读全文 »

二叉树遍历

二叉树结构

1
2
3
4
5
struct BiTree{
int data;
BiTree* lchild;
BiTree* rchild;
};

先序遍历

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
void PreOrder(BiTree* root){
if(root == NULL)
return;
cout<< root->data <<endl;
PreOrder(root -> lchild);
PreOrder(root -> right);
}

/*
二叉树的非递归前序遍历,前序遍历思想:先让根进栈,只要栈不为空,就可以做弹出操作,
每次弹出一个结点,记得把它的左右结点都进栈,记得右子树先进栈,这样可以保证右子树在栈中总处于左子树的下面。
*/
void PreOrder_Nonrecursive(BiTree* root){
if(!root)
return ;
stack<BiTree> s;
s.push(root);
while(!s.empty()){
BiTree* temp = s.top();
cout << temp->data <<" ";
s.pop();
if(temp->rchild)
s.push(temp->rchild);
if(temp->lchild)
s.push(temp->lchild);
}
}
阅读全文 »

单例模式

保证类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享

单例模式的要点有三个:

  1. 单例类只能有一个实例
  2. 必须自行创建这个实例
  3. 必须自行向整个系统提供这个实例

注意点

  1. 实例控制: 单例模式会阻止其他对象实例化自己的单例对象的副本,从而确保所有对象都访问唯一实例
  2. 灵活性: 因为类控制实例化过程,所以类可以灵活更改实例化过程
  3. 开销: 虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销,这个问题可以通过静态初始化解决此问题。定义一个私有的静态指针instance,和一个公有的静态函数 GetInstance()。
阅读全文 »

分治

对于海量数据,无法一次性装进内存处理,通过hash映射分割成相应的小块数据,然后对各个小块数据操作

例 1 :a、b文件中相同的 url

给定a、b两个文件,各存放50亿个 url , 每个 url 各占64字节,内存限制是 4GB ,找出a、b文件中相同的 url ?
5*64=320GB

方法1:

  1. 遍历a,对每个url求取hash(url)%1024 , 1024个小文件,每个大约300MB;
  2. 遍历b,1024
  3. 处理后,相同的url都在对应的小文件,(a0vsb0,a1vsb1……a1024vsb1024),不对应的小文件不可能有相同的url处理后,相同的url都在对应的小文件
  4. a存入hasf_set,遍历b
阅读全文 »

目的: 保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享

用途: 系统的日至输出、GUI应用单鼠标、操作系统只能有一个窗口管理器、一台PC连一个键盘、避免两个打印作业同时输出到打印机中等

阅读全文 »

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Generate and deploy

1
$ hexo g -d