My Little World

learn and share


  • 首页

  • 分类

  • 标签

  • 归档

  • 关于
My Little World

正则表达式

发表于 2017-03-06

判断邮箱格式

1
2
var match = /.+@.+\.[a-zA-Z]{2,4}$/;
match.test(变量)

输入框input只允许输入数字

在input标签里添加:
onKeyUp=”value=value.replace(/[^\d]/g,’’)”

以上方法input 限制了仅输入数字,但更换中文输入法之后还能输入出数字之外字符
解决办法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
html:
<input type="text" class="form-control form-filter" id="inputorp_i" autocomplete="off" ng-model="min_score" placeholder="正整数">
js:
var bind_name = 'input';
   if (navigator.userAgent.indexOf("MSIE") != -1){
   bind_name = 'propertychange';
  }
   $('#inputorp_i').bind(bind_name, function(){
  clearNoNum(this);
   })
$('#inputorp_i1').bind(bind_name, function(){
  clearNoNum(this);
   })
function clearNoNum(obj)

{
//先把非数字的都替换掉,除了数字
obj.value = obj.value.replace(/[^\d]/g,"");
}

判断输入值是否是url

1
2
3
 javascript
var match = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/;
match.test(变量)

常用正则表达式

My Little World

图的存储结构

发表于 2017-03-01

1.邻接矩阵

1.无向图

graph1
一个一维数组存储图中顶点信息,

顶点数组 v0 v1 v2 v3

一个二维数组(邻接矩阵)存储图中边或弧的信息
0表示不存在顶点间的边,1表示顶点间存在边

v0 v1 v2 v3
v0 0 1 1 1
v1 1 0 1 0
v2 1 1 0 1
v3 1 0 1 0

无向图构成的邻接矩阵为对称矩阵,对角线值为0
—–顶点Vi在邻接矩阵中第i行(或第i列)的元素之和为该顶点的度
—–扫描矩阵中第i行元素,元素为1的列为顶点Vi的邻接点

2.有向图

graph2
一个一维数组存储图中顶点信息,

顶点数组 v0 v1 v2 v3

坐标[Vi][Vj]的值,1表示Vi指向Vj的弧存在,0表示不存在

v0 v1 v2 v3
v0 0 0 0 1
v1 1 0 1 0
v2 1 1 0 0
v3 0 0 0 0

第Vi列的元素之和为顶点Vi的入度
第Vi行的元素之和为顶点Vi的出度

3.网

tu3
邻接矩阵各元素的值不再用0/1表示,而是用权表示
顶点间若不存在弧,则用\infty无穷表示,顶点自己到自己的权为0

v0 v1 v2 v3
v0 0 \infty \infty 18
v1 8 0 2 \infty
v2 4 \infty 0 \infty
v3 \infty \infty \infty 0

2.邻接表

无向图

顶点用一个一维数组存储
每个顶点Vi的所有邻接点构成一个线性表,由于个数不确定,用单链表来表示
tu4
tu5

有向图

把顶点当弧尾建立邻接表,邻接表长度就是该顶点出度
tu6
把顶点当弧头建的表叫逆邻接表,邻接表长度就是该顶点入度
tu7

网

在边表结点定义中再增加一个数据域来存储权值
tu8

3.十字链表(有向图)

顶点表结构

|data|firstIn|firstOut|
data:顶点数据
firstIn:第一个入边表的指针
firstOut:第一个出边表的指针

边表结点结构 表示以条边

tailVex headVex headLink tailLink

tailVex:该弧起点的顶点在顶点表的下标
headVex:该弧终点的顶点在顶点表的下标
headLink:指向headVex的弧的指针
tailLink: 从tailVex出发的弧的指针
graph2
tu9

4.邻接多重表(无向表)

关注对象是图中的表不是顶点
|iVex|iLink|jVex|jLink|
iVex和jVex是与某条边依附的两个顶点在顶点表中的下标
iLink:指向依附顶点iVex的下一条边,
jLink:指向依附顶点jVex的下一条边,
tu10

5.边集数组

由两个一维数组构成
一个是存储顶点的信息
另一个存储边的信息
边数组的每个数据元素由一条边的起点下标(begin)、终点下标(end)和权(weight)组成

tu11

顶点数组 v0 v1 v2 v3
边数组 begin end weight
edges[0] 0 3 5
edges[1] 1 0 4
edges[2] 1 2 3
edges[3] 2 0 8
My Little World

日期格式兼容

发表于 2017-02-26

IE11/chrome/360/火狐兼容日期格式兼容

$scope.date= new Date().toLocaleDateString().replace(/\//g,’-‘);
获取到的”year-month-day”格式支持/chrome/360/火狐,但到了IE11就变成”year年month月day”

var date = new Date();
var y = date.getFullYear();
var m = date.getMonth()+1;
var d = date.getDate();
var day = date.getDay();
var dateString=y+”-“+m+”-“+d;
$scope.date= dateString;

这样获取的”year-month-day”格式支持以上四种浏览器

My Little World

AngularJs自定义指令实现图片上传

发表于 2017-02-22

//定义file-Model指令的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MetronicApp.directive('fileModel', ['$parse', function ($parse) {
return {
restrict: 'A',
link: function(scope, element, attrs, ngModel) {
var model = $parse(attrs.fileModel);
var modelSetter = model.assign;
element.bind('change', function(event){
scope.$apply(function(){
modelSetter(scope, element[0].files[0]);
});
//附件预览
scope.file = (event.srcElement || event.target).files[0];
scope.getFile();
this.value = ''; //清除已上传的文件,否则无法连续上传相同文件
});
}
};
}
])

//在HTML使用时的代码

1
2
3
4
5
6
7
8
9
10
 <div class="form-group">
<label class="control-label col-md-3">图片上传</label>
<div class="col-md-9 fileinput">
<img src="{{detaildata.banner}}" name="img" style="width:40px;height: 40px;">
<span class="btn red btn-outline btn-file" style="margin-left: 10px;margin-top:0px;">
<span class="fileinput-new"> 重新上传 </span>
<input type="hidden"><input id="upload" type="file" file-model="myFile" name="..." accept="image/*" >
</span>
</div>
</div>

//Controller中上传图片时的js函数

1
2
3
4
5
6
7
8
$scope.getFile = function () {
var postData = {
fileName: $scope.file
};
fileReader.readAsDataUrl($rootScope.settings.url + "", postData).success( function(response) {
$scope.detaildata.banner = response;
});
};

//定义fileReader服务的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
angular.module('MetronicApp')
.factory('fileReader', ["$http", function($http){
var readAsDataURL = function (url, data) {
var fd = new FormData();
angular.forEach(data, function(val, key) {
fd.append(key, val);
});
var args = {
method: 'POST',
url: url,
data: fd,
headers: {'Content-Type': undefined},
transformRequest: angular.identity
};
return $http(args);
};
return {
readAsDataUrl: readAsDataURL
};
}])

整个上传的过程,点击“重新上传”按钮,file-model指令绑定的change事件会检测本次选择的图片与上次是否为一致,不一致则会执行file-model定义时的代码
element.bind(‘change’, function(event){
scope.$apply(function(){
modelSetter(scope, element[0].files[0]);
});
//附件预览
scope.file = (event.srcElement || event.target).files[0]; //给Controller 中$scope.file赋值
scope.getFile(); //调用Controller 中 $scope.getFile();
this.value = ‘’; //清除已上传的文件,否则无法连续上传相同文件
});
控制器中的$scope.getFile()函数用到fileReader.readAsDataUrl函数上传图片给后台,这个函数在定义fileReader时被定义

定义指令时,若没有清除已上传文件,连续多次上传时,将导致无法连续上传相同图片的bug.

My Little World

图

发表于 2017-02-22

图的定义

图:由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),
—-G表示一个图,V是图G中顶点的集合,E是图G中边的集合
| | 线性表 | 树 | 图 |
| ————- |:—————-:| —————–:|
| 数据元素 | 元素 | 结点 | 顶点 |
| 没有数据元素 | 空表 | 空树 | 不能没有顶点,有穷非空 |
| 数据元素间关系 | 相邻之间:线性关系| 相邻两层:层次关系 | 任意两个顶点之间都可能有关系顶点之间逻辑关系用边表示,边集可以是空的|
无向边:顶点Vi到Vj之间的边没有方向,用无序偶(Vi,Vj)表示
有向边/弧:顶点Vi到Vj之间的边有方向,用有序偶<Vi,Vj>表示,Vi称为弧尾,Vj称为弧头
简单图:在该类图结构中,不存在顶点到其自身的边(自己指向自己)且同一条边不重复出现
无向完全图:在该类图结构中,任意两个顶点之间都存在边,含n个顶点的无向完全图有n(n-1)/2条边
有向完全图:在该类图结构中,任意两个顶点之间都存在方向互为相反的两条弧,含n个顶点的有向完全图有n
(n-1)条边
稀疏图:边或弧数小于nlogn(n是顶点的个数)
稠密图:边或弧数大于n
logn(n是顶点的个数)
权:图的边或弧带有的与它相关的数字
网:带权的图
子图:图G1(V1,E1),和G2(V2,E2),如果V2 \subseteq V1,E2 \subseteq E1 ,V2 属于 V1,E2 属于 E1则称G2为G1的子图
http://blog.csdn.net/sanqima/article/details/48576361
邻接点:无向图G=(V,E),如果边(V1,V2)属于E,则称顶点V1和V2互为邻接点,即V1和V2相邻接
——-边(V1,V2)依附于顶点V1和V2,或者说边(V1,V2)与顶点V1和V2相关联
顶点V的度:和顶点V相关联的边的数目,记为TD(V)
邻接:有向图G=(V,E),如果边<V1,V2>属于E,则称顶点V1邻接到顶点V2,顶点V2邻接自顶点V1
顶点V的入度:以顶点V为头的弧的数目,记为 ID(V)
顶点V的出度:以顶点V为尾的弧的数目,记为 OD(V)
TD(V) = ID(V) + OD(V);
路径:图G=(V,E)中从顶点V1到顶点V2的路线叫从顶点V1到顶点V2的路径,注意有向图和无向图的区别
路径的长度:路径上边/弧的数目
回路/环:第一个顶点和最后一个顶点相同的路径
简单路径:序列中顶点不重复出现的路径
简单回路/简单环:除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路
连通:在无向图G中,如果顶点V1到顶点V2有路径则称V1和V2是连通的
连通图:图中任意两个顶点Vi和Vj都是连通的,则称G是连通图
连通分量:无向图中的极大连通子图
—-连通的子图
—-连通子图含有极大顶点数
—-具有极大顶点数的连通子图包含依附于这些顶点的所有边
强连通图:在该类有向图G中,每一对Vi到Vj都存在路径
强连通分量:有向图中的极大强连通子图
非强连通图有强连通分量,强连通分量不止属于强连通图
连通图的生成树:极小的连通子图,它含有图中全部n个顶点,但只有足以构成一棵树的n-1条边
有向树:如果一个有向图恰有一个顶点入度为0,其余顶点入度为1,则该图将生成有向树,从而构成森林

My Little World

《穷爸爸富爸爸》摘抄

发表于 2017-02-18
  1. 富人买入资产,穷人只有支出,中产阶级购买自以为是资产的负债
  2. 资产是能把钱放进你口袋里的东西,负债是把钱从你口袋里取走的东西
  3. 为了财务安全,人们需要关注自己的事业,你的事业的重心是你的资产项,而不是你的的收入项。要知道资产与负债的区别,并且去买入资产。富人关心的焦点是资产而其他人关注的是收入。
  4. 资产分类:
    a.不需要我到场就可以正常运作的业务。我拥有他们,但由别人经营和管理。如果我必须在那里,那它就不是我的事业而是我的职业了
    b.股票
    c.债券
    d.共同基金
    e.能够产生收入的房地产
    f.票据(收据)
    g.版税,如音乐,手稿,专利
    h.其他任何有价值,可产生收入或有增值潜力,并且有良好的销路的东西
    5.
拥有公司的富人 为公司工作的人
挣钱 挣钱
支出 缴税
缴税 支出

=>拥有由资产组成的公司

  1. 财商:
    a.财务知识,会计,阅读理解数字的能力
    b.投资策略
    c.市场,供给,与需求
    d.法律规章
  2. 理财能手:
    a.如何寻找其他人都忽视的机会
    b.如何增加资金
    c.怎样把精明的人组织起来
  3. 管理技能:
    a.对现金流的管理
    b.对系统(你本人,时间及家庭)的管理
    c.对人员的管理
  4. 克服困难:恐惧心理、愤世嫉俗、懒惰、不良习惯、自负
  5. 开发
    我需要一个超现实的理由—-精神的力量
    每天做出自己的选择—-选择的力量
    慎重的选择朋友—-关系的力量
    掌握一种模式,然后在学习一种模式—-快速学习的力量
    首先支付自己—-自律的力量
    给你的经纪人以优厚的报酬—-好建议的力量
    用资产来购买奢侈品—-专注的力量
    对英雄的崇拜—-神话的力量
    先予后取—-给予的力量
My Little World

阿里巴巴iconfont使用

发表于 2017-02-18

1.登录http://iconfont.cn/plus/home/index?spm=a313x.7781069.1998910419.2.QImsN2 进入搜索界面
2.通过输入关键字搜索自己想要的图标
3.将鼠标放到自己想要的图标会出现选择层,点击第一个购物车图标,添加入库
4.将所有想要的图标添加完后,点击右上角购物车图标打开项目添加页,点击“加入项目”右侧图标,为选择的图标新建项目,点确定
iconfont1
iconfont2
5.关闭项目添加页,点击导航栏的“图标管理”,进入“我的项目”栏目


图片名称
图片名称

6.使用图标到我们的HTML代码中,可以通过线上链接使用,也可以通过下载至本地使用

通过线上链接使用

1.点击查看在线链接,复制代码到项目的静态资源的css文件中一般在src/assets/css路径下的文件
2.设置一个类icon,通过这个类的属性改变图标样式,同时在HTML中引用这个类

1
2
3
4
5
6
7
8
9
10
11
.icon {
font-family: "iconfont" !important;
font-style: normal;
display: inline-block;
vertical-align: middle;
background-size: 100% auto;
background-position: center;
-webkit-font-smoothing: asntialiased;
-webkit-text-stroke-width: 0.2px;
-moz-osx-font-smoothing: grayscale;
}

3.在标签中添加icon类,在标签中间加入图标代码,例如: 

下载至本地

1.点击下载至本地
2.将在线链接代码中用到的文件放到项目静态文件夹中,
3.将在线链接代码中文件的路径更改为项目中的文件路径,
4.其他步骤同线上路径
5.也可直接打开下载文件的IconFontDemo/assets/iconfont/的demo.html代码,看如何使用

My Little World

git问题处理

发表于 2017-02-18 | 分类于 categories

git pull 更新代码出现问题

1
2
3
4
5
6
7
8
9
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream-to=origin/<branch> develop_hotfix

解决办法
git branch -D 分支名 ##删除本地待更新分支
git checkout 分支名 ##将待更新分支切回来
Git pull 再更新

git remote add origin 遇到远程分支已存在的情况

解决办法
git remote rm origin ##先删除远程分支
git remote add origin 地址 ## 再修改远程仓库地址

git push 遇到问题

1
fatal: unable to access 'https://github.com/YooHannah/WeiXindemo.git/': Failed to connect to github.com port 443: Timed out

解决办法
先删除远程分支 git remote rm origin
再将本地分支的上游分支设置为远程分支同时push
git push –set-upstream origin master
以后再执行git push 就不会出现报以上错误或一直没反应的状况

1
error:src refspec master does not match any

只进行了init,没有add和commit,本地版本库为空, 空只进行了init,目录不能提交

1
2
3
If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

解决方法:
rm -f ./.git/index.lock

npm 运行项目错误

npm run dev error [npm ERR! code ELIFECYCLE]
node_modules安装问题,执行以下:
rm -rf node_modules rm package-lock.json npm cache clear –force npm install

git merge 之后,git commit 出现问题

husky > pre-commit hook failed (add –no-verify to bypass)
git merge 之后,git commit 出现问题,解决:
出现这样的原因在于楼主使用了husky,并且配置了”precommit”: “npm run lint”
因此会在你git commit的时候执行npm run lint 也就是eslint –ext .js src test
如果报错的话,会返回非0,从而组织代码commit。
因此有两种方式解决:

  1. 执行npm run lint, 根据提示修改错误,如果是其他人的报错,请求别人协助(推荐)
  2. git commit -m ‘’ -n 强制推送
    3.更新远程分支列表
    git remote update origin –prune

IE报vuex requires a Promise polyfill in this browser问题解决

第一步: 安装 babel-polyfill 。 babel-polyfill可以模拟ES6使用的环境,可以使用ES6的所有新方法
npm install –save babel-polyfill
第二步: 在 Webpack/Browserify/Node中使用
在webpack.config.js文件中,使用
module.exports = {
entry: {
app: [“babel-polyfill”, “./src/main.js”]
}
};

git 分支处理

背景

A同学提交了两次代码,但在第二次提交代码前,B同学有提交自己的代码,并且在合并代码时,
将A同学第一次提交的代码merge丢弃了,导致A同学第一次代码无法合并到主分支

原理知识

git reset 可以撤销commit命令的提交
git rebase 把分叉提交历史’整理’成一条直线
git stash 可以把工作现场’储藏起来’,等以后恢复现场后可以继续工作

分析

在分支代码处理时,A同学本地有主分支host(公共分支)和自己的本地分支local,
工作流程是
在自己本地分支local分支开发完毕后,
切换host分支,git pull 拉取远端分支更新后,
将本地分支local合并merge到host分支
然后git push到远端

而B同学直接在本地的主分支(公共分支)开发,git push时冲突,
git pull 拉取远端A同学第一次的代码时,直接将代码变更进行了丢弃
然后push了自己的代码到远端分支

A同学第二次提交时,并不知道B同学丢弃了自己第一次提交的代码,
在进行第二次提交时,在host上拉取远程更新之后,
继续合并推送最终结果就是自己的第一次代码丢失了

解决

利用A同学本地分支local没有合并远程分支的间隙,将A同学的两次提交保存下来,回到两次提交前的状态
然后拉取B同学的提交,再将A同学的两次提交拿出来进行合并,这样就可以实现三次提交都保存下来,再提交到远端

在A同学的本地分支进行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1.在主分支host上取消第二次提交
git reset --hard HEAD~1

2.将远端第二次提交撤销掉,让分支保留在B同学提交的状态
git push --force

3.切换本地分支local,回滚版本到两次提交前
git reset HEAD^^

4.保存两次提交 可以通过git stash list查看保存状态
git stash
git stash list

5. 合并主分的B同学的提交到本地分支local,这时本地分支就有B同学的代码变更了
6. 取出A同学的两次提交,与B同学代码进行提交
git stash pop
7. 切换主分支host,合并本地分支local,推送到远端

My Little World

git使用

发表于 2017-02-15

链接虚拟机基本步骤

1.打开git bash
2.执行命令“ssh root@环境地址” 例:ssh root@172.16.6.213
3.输入对应密码
4.执行命令“cd 代码在该虚拟机的存放路径” 例:cd /usr/share/nginx/html/projrctname
5.git branch #查看本地分支
6.git checkout 分支名 #切换分支
7.git pull 更新代码

更新远程仓库地址

命令行界面操作

显示当前远程仓库:git remote -v
删除当前远程仓库:git remote remove origin
添加新的远程仓库:git remote add origin 远程仓库地址
git1

使用source tree

1.在 SourceTree 里打开对应的代码库。
2.点击右上角设置按钮
git2
3.点击选择当前远程仓库路径,编辑和移除按钮恢复可用,点击“移除”
4.点击“新建”,“远程(仓库)名称”填入“origin”,“URL/路径”填入项目在Git服务器的地址
5.点击“确定”
6.点击设置页面”确定”
git3

My Little World

赫夫曼编码

发表于 2017-02-12

赫夫曼编码可以构造出一种不等长的二进制,使编码后的电文长度最短,且保证不产生二义性

赫夫曼树

相关定义

权:树结点间的连线相关的数
结点的路径长度:从根结点到该结点的路径上的连接数
树的路径长度:树中每个叶子结点的路径长度之和
结点带权路径长度:结点的路径长度与结点权值的乘积
树的带权路径长度(WPL):树中所有叶子结点的带权路径长度之和。 WPL越小,说明二叉树性能越优。

构造赫夫曼树

1.在森林中选出两颗根结点的权值最小的二叉树,权值小的放左边,权值大的放右边
2.合并两颗选出的二叉树:增加一个新结点n作为新二叉树的根,权值为左右孩子权值之和
3.回到森林中,选出权值最小的根结点,与刚刚形成的结点n比较,小的放左边,大的放右边
4.返回步骤二,直到森林中的树被选完


图片名称
图片名称

赫夫曼编码

一些名词

定长编码:规定位数表示字符
变长编码:单个编码长度不一字,可以根据整体出现频率来调节
前缀码:没有任何码字是其他码字的前缀

赫夫曼编码思路

1.根据输入字符串,统计字符出现次数,建立优先级队列
2.根据优先级队列建立输入字符串的赫夫曼树
3.遍历赫夫曼树,左1右0,建立字符编码表
4.编码encode:根据字符编码形成字符串编码
5.解码decode:根据编码字符串遍历赫夫曼树,左0右1,找到叶子结点的字符,从而解码字符。
代码链接

1…212223…26
YooHannah

YooHannah

260 日志
1 分类
23 标签
RSS
© 2025 YooHannah
由 Hexo 强力驱动
主题 - NexT.Pisces