系统的监控体系

1.监控

系统硬件网络层面利用zabbix,top,netstat这些工具监控

2.日志

程序内部日志收集,内嵌日志组件,也可并入分布式的日志收集系统

3.APM:应用性能监控

单个部署应用的性能监控,从业务层面上更细,有开源的内嵌代码的方式,也有嵌入第三方的监控还能报警

优化sql

0.一定要先用分析工具查找费时的sql.

a)sqlserver:profile
b)mysql:explain,开启慢查询日志再使用mysqladminslow工具读出来

1.优化查询结果,尽量不用select(*)//在sqlserver中建议,在mysql中影响不大

2.避免全表扫描 !!!重点,(最容易产生问题的地方)

a)like 前置通配符一定会全表扫描,后置通配符如果匹配结果太多还是会扫描,一定要用:使用后置来解决
b)not in 和in的使用:用exists或者between代替
c)is null和is not null:尽量在数据插入时,不在存在null的情况,或者is null数据使用组合索引
e)or 连接的条件字段中没有索引:尽量使用索引字段或者建立字段
f)对字段有操作的函数:如datediff:使用>和<解决
g)对字段有表达式计算的:如 where num/2=100:num=200

3.尽量使用索引字段作条件

4.优化子查询及复杂语句

5.修改存储过程中的游标

zookeeper和keepalive

相同点:
1.都能作为高可用
不同点:
2.与业务系统的关联性:
zk实现lb需要业务系统编码才能实现,所以与业务系统的结合比较密切,实现上增加了难度
kp使用vrrp协议监控可用性,与业务系统关联性比较小

3.是否有存储机制
zk是有基于目录树结构的存储(zNode),能存储数据
kp只是单一的lb

4.用途:
正因为zk有存储机制,还能作为消息队列,分布式锁

作为容灾,dns也可以实现,在web领域常用.

vue面试复习

1.vue.js的两个核心是什么?

答:数据驱动、组件化系统
a)数据驱动原理:通过Object.defineProperty来实现数据劫持,再通过观察者模式,发布订阅到相关dom节点.
b)组件化:扩展html元素,封装可重用的代码

2.vue不建议操作dom,如果要操作dom,给元素一个属性ref,类似于id

a)语法:返回的是原生元素对象
<div ref="div1"></div>
在vue里使用:this.$refs.div1.innerHTML:

b)当定义到组件时,返回的是组件

3.数据驱动视图修改时,是以队列的形式一一来修改,所以此时获取视图里的元素还是修改队列之前的数据;需要使用nextTick解决(this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行,也就是修改队列完整之后)

  this.msg = "hello msg";  //修改msg的数据库hello msg,会加入修改队列
  this.msg1 = this.$refs.msg.innerHTML; //获取msg视图的数据,此时队列并未执行,所以还是msg修改之前的数据.
   this.$nextTick(() => {
          this.msg2 = this.$refs.msg.innerHTML;
        });

4.ref属性类似于id选择器

5.常用基础指令:

v-if/v-else,v-show,v-bind,b-for,v-model,v-on,v-cloak
a)v-model
“`
//radio和checkbox的v-model绑定

vue
react
jquery

//如果要在事件方法中使用v-model绑定的对象:需要使用nextTick
checkboxClick: function() {
this.$nextTick(() => {
console.log(this.js)
})

            }

“`
b)v-bind:动态地绑定一个或多个特性

6.全局方法:created,methods,filters,computed,watch

a)computed:计算属性

7.绑定事件的修饰符:

修饰符:

.stop - 调用 event.stopPropagation()。
.prevent - 调用 event.preventDefault()。
.capture - 添加事件侦听器时使用 capture 模式。
.self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。
.{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。
.native - 监听组件根元素的原生事件。
.once - 只触发一次回调。
.left - (2.2.0) 只当点击鼠标左键时触发。
.right - (2.2.0) 只当点击鼠标右键时触发。
.middle - (2.2.0) 只当点击鼠标中键时触发。
.passive - (2.3.0) 以 { passive: true } 模式添加侦听器

8.购物车中的总计金额的两种方式:

a)使用计算属性,比如Sum:computed….,会自动监听数据变化,而不需要对点击事件定义
computed: {
sum: function() {
var sum = 0;
for (var i = 0; i < this.checkgroup.length; i++) {
sum += this.checkgroup[i].num * this.checkgroup[i].price;
}
return sum;
}
}

b)使用methods的方法,比如getSum(),方法遍历选中数据,该会自动监听数据变化,而不需要对点击事件定义
getSum: function() {
var sum = 0;
for (var i = 0; i < this.checkgroup.length; i++) {
sum += this.checkgroup[i].num * this.checkgroup[i].price;
}
return sum;
}

9.xmlhttprequesst,fetch

a)这两个都是浏览器要实现并提供的网络请求接口.
b)promise对象是方便链式调用方法.
c)axios.js是js库,使用了xmlhttprequest和promise.



10.全局组件:

a)基本写法:
Vue.component('my-component-name', { /* ... */ })//第一个参数是名字,第二个是对象
b)第二个对象中的写法与new vue中的写法除了data写法不一样,其他都一样
Vue.component("navbar", {
data: function() { //data只能用函数式写法,作用域原因
return {
title: "卖座"
}
},
template: "<nav><button @click='handleClick'>返回</button><span>{{title}}</span><button>主页</button></nav>", //模板内容,有仅只能有一个root元素
methods: { //其他都一样
handleClick: function() {
console.log(1111)
alert(22222)
}
},
created: function() {}, //其他都一样
computed: {} //其他都一样
})

### 11.局部组件,new Vue默认看成一个root父组件:
在父组件中定义components对象
components: { //定义子组件
childnav: {
template: "<span>navchildbar</span>"
}
}

在父组件的模板中使用
template: "<nav><button @click='handleClick'>返回</button><span>{{title}}</span><button>主页</button><commonbar></commonbar> <childnav></childnav></nav>", //模板内容

### 12.通信
a)父传子:属性传值,props(如果使用生产版本,使用属性验证时会不报错)
//父组件中
<navbar myname="关于" :myshow="true"></navbar>

//子组件中
//对象写法,启用属性认证
props: {
myname: String,
myshow: Boolean
}
//数组写法,不验证
props:['myname','myshow']

b)子传父:自定义事件传值,$emit
//父组件中,声明自定义事件
<navbar myname="关于" @myevent="handleEvent"></navbar>

//子组件中使用事件
template: "<nav><button @click='handleClick'>返回</button><span>{{title}}</span><span v-show='myshow'>{{myname}}{{myshow}}</span><button>主页</button></nav>", //模板内容
props: {
myname: String,
myshow: Boolean
},
methods: {
handleClick: function() {
this.$emit("myevent", this.title); //使用emit方法触发事件冒泡
}
}

c)子组件与子组件的相互操作,可以利用子传父,父传子的方式

13.vue-cli3安装使用

14.style 作用域:scoped

15.