docker部署nginx

在宿主机器创建以下目录

1
2
3
mkdir -p /var/www/docker/nginx/log    # nginx 日志
mkdir -p /var/www/docker/nginx/conf # nginx 配置文件
mkdir -p /var/www/docker/nginx/html # 项目目录

URL中 utm_source, utm_medium 等参数的约定

参数 名称 示例 说明
utm_source 广告来源 utm_source=xxx 这个广告投放在xxx渠道中
utm_medium 广告媒介 utm_medium=QRCode 这个广告是以二维码方式展现
utm_campaign 营销活动名称 utm_campaign=20190101-xxx 这个广告投放在20190101日的xxx活动中
utm_content 广告按内容定位 utm_content=textlink 用于A/B测试和按内容进行定位的广告。
utm_term 广告关键字 utm_term=xxxx 用于付费搜索。使用utm_term来注明此广告的关键字

理解 MySQL 中的四种隔离级别

隔离级别

数据库事务有不同的隔离级别,不同的隔离级别对锁的使用是不同的,锁的应用最终导致不同事务的隔离级别。
实现隔离级别的方式就是加锁

隔离级别的分类

  • 读未提交 Read Uncommitted(在本次事务中可以读到其他事务中没有提交的数据-脏数据)
  • 读已提交 Read Committed (只能读到其他事务提交过的数据。如果在当前事务中,其他事务有提交,则两次读取结果不同)
  • 可重复读 Repeatable Read (默认,保证了事务中每次读取结果都相同,而不管其他事物是否已经提交。会出现幻读)
  • 序列化 Serializable (隔离级别中最严格的,开启一个serializable事务,那么其他事务对数据表的写操作都会被挂起)

Phaser 常用方法速查表

sprite.input.useHandCursor = true; // 鼠标移上去变手型
sprite.events.onInputDown.add(fn, this); //鼠标按下事件

text2.resolution = 2; //设置文字高分辨率,文字更清晰

  1. 游戏画布的尺寸
    var width = game.width,
    height = game.height;

  2. 中心点坐标
    var game = new Phaser.Game(…);
    var centerX = game.world.centerX,
    centerY = game.world.centerY;

  3. 随机坐标
    var randomX = game.world.randomX,
    randomY = game.world.randomY;

  4. 精灵对象常用方法
    var player = game.add.sprite(…);
    //动画
    player.animations.add(…);
    player.animations.play(‘’);
    //倾斜
    player.angle = 45;

  5. 基本图形
    var line = new Phaser.Line(0,0,120,120);
    var circle = new Phaser.Circle(game.world.centerX,100,64);
    var rect = new Phaser.Rectangle(x,y,width,height);

  6. 判断PC或手机

if(game.device.desktop){
//desktop
}
else{
//mobile
}

  1. 判断横屏还是竖屏
    if(game.scale.isLandscape){
    //横屏
    game.scale.correct = true;
    }
    else{
    //竖屏
    game.scale.correct = false;
    }
  1. 设置全屏世界
    var width = window.innerWidth 或 100%,
    height = window.innerHeight 或 100%;
  1. 定时器
    game.time.events.loop(300,callback,this);
  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

var playerW = this.player.width;
//是否正在触摸
var touching = false;
//监听按下事件
game.input.onDown.add(function(pointer){
//palyer.x是主角的横向中心,判断是指触摸点在主角的最左侧到最右侧的坐标范围内,
//就是点击的是小人本身,未判断y坐标
if(Math.abs(pointer.x - player.x) < player.width/2){
touching = true;
}
});
//监听离开事件
game.input.onUp.add(function(){
touching = false;
});
//监听滑动事件
game.input.addMoveCallback(function(pointer,x,y,isTap){
if(!isTap && touching){
x = mid(x, playerW/2, gWidth - playerW/2);
player.x = x;
}
});

function mid(mid,min,max){
if(typeof min === undefined || min == null){
min = Number.NEGATIVE_INFINITY;
}
if(typeof max == undefined || max == null){
max = Number.POSITIVE_INFINITY;
}
return Math.min(Math.max(min,mid),max);
}

【每周一文】javascript面向对象之公有、私有、静态属性和方法详解

这篇文章主要详细介绍了js面向对象之公有、私有、静态属性和方法,并附上详细的示例,非常的细致全面,这里推荐给大家,有需要的小伙伴可以参考下

现下,javascript 大行其道,对于网站开发人员来说,javascript 是必需掌据的一门语言,但随着jquery等框架的流行和使用,许多人对于原生 javascript 缺乏深入的理解,习惯了函数式的编辑风格,对于闭包、原型总是说不清道不明.对于js面向对象蹩脚的用着,而要了解 js 面向对象,就必需先了解 js 中什么是公有方法、特权方法、静态方法