0%

Vue 生命周期函数 也叫 Vue 生命周期钩子,就是 Vue 实例在某一时间点自动执行的函数。具体如下:

  • beforeCreate : 创建Vue实例前的时候执行
  • created : 创建Vue实例完成后执行,完成了data数据的初始化
  • beforeMount : Vue实例开始渲染前执行
  • mounted : Vue实例渲染完成后执行
  • beforeUpdate : Vue实例修改前执行
  • updated : Vue实例修改完成后执行
  • beforeDestroy : Vue被销毁前执行
  • destroyed : Vue实例被销毁后执行
  • activated :组件激活时调用。该钩子在服务器端渲染期间不被调用
  • deactivated :组件停用时调用。该钩子在服务器端渲染期间不被调用
父组件与同步子组件加载顺序:

父组件 beforeCreate -> 父组件 created -> 父组件 beforeMount -> 子组件 beforeCreate -> 子组件 created -> 子组件 beforeMount -> 子组件 mounted -> 父组件 mounted。

父组件与异步子组件加载顺序:

父组件 beforeCreate -> 父组件 created -> 父组件 beforeMount -> 父组件 mounted -> 子组件 beforeCreate -> 子组件 created -> 子组件 beforeMount -> 子组件 mounted。

人工神经网络(ANN)

在介绍卷积神经网络之前,先来了解一下人工神经网络。

概念

人工神经网络(Artificial Neural Network,简称ANN ),以数学模型模拟神经元活动,是基于模仿大脑神经网络结构和功能而建立的一种信息处理系统。神经网络是一种运算模型,由大量的节点(或称“神经元”)和之间相互的联接构成。每个节点代表一种特定的输出函数,称为激励函数、激活函数(activation function)。每两个节点间的联接都代表一个对于通过该连接信号的加权值,称之为权重


结构

神经网络包含三层:输入层、隐含层(可以有多层)、输出层。

sWHm2d.png

  • Inputs:输入,输入的是向量
  • Weights:权重
  • Bias:偏置
  • Activationfunction:激活函数
阅读全文 »

通俗理解word2vec

Word2vec,是一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏层。

这个模型是如何定义数据的输入和输出呢?一般分为CBOW(Continuous Bag-of-Words,词袋模型 )与Skip-Gram两种模型。CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。

阅读全文 »

计算属性computed

用法
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
<div id="box">
<input type="text" v-model="message">
<p>{{changeMessage}}</p>
<p>{{changeName}}</p>
</div>


el: '#box',
data: {
message: '123',
name: 'Silence'
},
computed: {
// 这是属性
changeMessage() {
return this.message;
},
// 这是属性
changeName: {
get(){
return this.name;
},
set(val){
this.name = val;
}
}
},
概念
  • computed计算属性,当依赖的属性的值(data中声明过或者父组件传递的props中的数据)发生变化时触发更改,否则使用的是缓存中属性值;
  • computed中有两个方法get()set(),如果computed的属性值是函数,那么默认会走get方法,函数的返回值就是属性的属性值;
  • 可以通过自定义set方法来给计算属性赋值;
  • computed的计算属性需要映射到DOM上,否则无效,即计算属性须被模板使用;
  • 不支持异步,当computed内有异步操作时无效,无法监听数据的变化。
阅读全文 »

什么是防抖与节流

有这样一种应用场景,在滚动事件中做一个复杂取值计算或者频繁的触发一个事件,这是很影响性能并容易导致页面卡顿的,所以要合并多次请求,通过函数做一个精确操作。这时就会用到函数防抖或者函数节流。

  • 函数节流是:在固定的时间内触发事件,每隔n秒触发一次
  • 函数防抖是:当你频繁触发后,n秒内只执行一次

防抖

触发高频函数事件后,n秒内函数只能执行一次,如果在n秒内这个事件再次被触发的话,那么会重新计算时间。

实现:每次触发事件时都取消之前的延时调用方法,直到在规定时间内事件没有再被触发时执行事件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function debounce(fn) {
let timeout = null; // 创建一个标记用来存放定时器的返回值
return function() {
clearTimeout(timeout); // 每当用户输入的时候把前一个 setTimeout clear 掉
timeout = setTimeout(() => { // 然后又创建一个新的 setTimeout, 这样就能保证输入字符后的 interval 间隔内如果还有字符输入的话,就不会执行 fn 函数
fn.apply(this, arguments);
}, 500);
};
}

function sayHi() {
console.log('防抖成功');
}
let box = document.getElementById('box')
box.addEventListener('click', debounce(sayHi))
阅读全文 »

遍历

every() :

返回值为boolean类型,每次遍历的结果都为true则返回true,有任何一个返回不为true时,则返回false。

1
2
3
4
5
6
7
8
9
var array = [1, 2, 3, 4, 5];
var flag = array.every(function (element, index, arr) {
// 不写return时返回undefined
if (element < 5) {
return true;
}
})

// flag结果为false,因为当index = 4时不满足,故最后结果为false;
filter() :

返回值为数组,当遍历时的结果为true,则将该结果写入新数组中,最后返回该新数组。

1
2
3
4
5
6
7
8
9
var array = [1, 2, 3, 4, 5];
var newArr = array.filter(function (element, index, arr) {
if (element > 2) {
return true;
}
return false;
})

// 最后newArr = [3, 4, 5]
foreach()

无返回值,纯数组操作。

1
2
3
4
5
6
var array = [1, 2, 3, 4, 5];
array.foreach(function(element, index, arr) {
log.info(element)
})

// foreach方法最大的问题是无法跳出循环,哪怕是return了或者抛异常,它都会看作continue操作,直到执行完所有的遍历操作为止。
阅读全文 »

String.prototype.anchor()

anchor()方法用于创建一个html描元素

1
2
const str = '我是html内容'.anchor('我是name属性值')
console.log(str) // "<a name="我是name属性值">我是html内容</a>"
String.prototype.bold()

bold()方法用于创建html元素

1
2
const str = 'aaa'.bold()
console.log(str) // "<b>aaa</b>"
String.prototype.charAt()

charAt()方法用于返回字符串指定位置的字符

1
2
'amz'.charAt() // 'a'  不传索引则默认为0
'amz'.charAt(1) // 'm'
String.prototype.concat()

concat()将多个字符串拼接在一起

1
2
3
4
const a = 'aaa'
const b = 'bbb'
const c = 'ccc'.concat(a, b, 'ddd')
console.log(c) // 'cccaaabbbddd' hs
String.prototype.endsWith()

endsWith()方法用于判断当前字符串是否以另一个给定字符串结尾

1
2
3
4
5
const name = 'my name is amz' 
name.endsWith('z') // true
name.endsWith('mz') // true
name.endsWith('amz') // true
name.endsWith('is') // falsejs
阅读全文 »

在做django项目时,难免会需要对数据库中的数据进行筛选,django有自己的数据库过滤语法。

1
users = User.objects.filter()

其中有多种参数:

  • __contains :包含, like ‘%aaa%’; __icontains :包含( 忽略大小写) ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于 icontains
  • __exact :精确等于, like ‘aaa’ ;iexact 精确等于(忽略大小写) ilike ‘aaa’
  • __gt 大于
  • __gte 大于等于
  • __lt 小于
  • __lte 小于等于
  • __in 存在于一个list范围内
  • __startswith 以…开头
  • __istartswith 以…开头 忽略大小写
  • __endswith 以…结尾
  • __iendswith 以…结尾,忽略大小写
  • __range 在…范围内
  • __year 日期字段的年份
  • __month 日期字段的月份
  • __day 日期字段的日
  • __isnull=True/False 空查询

“Q() |” 或 ;“&”与(逗号效果一样) ; “~”非(不等于)

1
2
3
from django.db.models imports Q

XXX.objects.filter(Q(id__gt=3)|Q(bread__gt=2))

URL路径:http://localhost:8080/#/test?userid=1

1
<router-link :to="{path:'/test',query: {userid: id}}">跳转</router-link>

接收数据:

1
var id = this.$route.query.userid

二、this.$router.push()

1、使用path+query

URL路径:http://localhost:8080/#/selectCate?userid=1

发送数据:

阅读全文 »

调用

1、导入Paginator

1
from django.core.paginator import Paginator

2、创建分页对象

1
2
3
paginator = Paginator(list, 2)  
# 第一个参数是访问数据库返回得到的一个对象
# 第二个参数表示每一页显示几条信息

3、创建单个页面的对象

1
2
page = paginator.page(page_index)
# 参数为页码
阅读全文 »