# 常用方法
# 1.如何判断浏览器类型?
使用userAgent。例如判断是微信环境
if(navigator.userAgent.toLowerCase().indexOf('miniprogram') != -1){
console.log("微信小程序");
} else if (navigator.userAgent.toLowerCase().indexOf('micromessenger') != -1){
console.log("微信内置浏览器");
}
2
3
4
5
# 2.千万级别的门户网址需要怎么设计?
1.CDN 服务器部署的地区,该地区用户访问块,其它地区相对较慢。这种情况就需要使用CDN。 CDN将数据内容缓存到运营商机房,用户访问先从最近的运营商获取数据,大大减少了 网络访问的路径
2.反向代理 部署在网址的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的 数据返回给用户,如果没有缓存数据才会继续访问应用服务器获取,这样做减少了获取数据的 成本。nginx
3.硬负载 应用服务器作为网址的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。 应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求发到多个节点。 负载均衡技术硬件有F5,。软件有LVS,Nginx,HAProxy。LVS是四层(传输层)负载均衡。
4.使用Nosql和搜索引擎 Nosql有mongodb,hbase,redis。搜索引擎有lucene,solr,elasticsearch
5.消息队列 随着业务扩展,应用程序变得非常臃肿,我们需要将程序进行拆分。每个业务应用负载相对独立的业务运行。 业务之间通过消息进行通行或者共享数据库来实现。
6.分布式文件系统 分布式文件系统GFS,HDFS,TFS。而我们业务线主要用FASTDFS
7.前后端分离 降低耦合度
# 3.默认使用地址,端口
docker默认地址172.17.0.1
# 4.你如何自动发现热点缓存问题
一般出现缓存热点的时候,你的每秒并发肯定是很高的,每秒都是几十万甚至上百万的请求,此时完全可以基于 大数据领域的流式计算技术来进行实时数据访问次数的统计。比如storm,spark streaming,flink。 比如一秒之内,某条突然访问次数超过1000,就立马判定为热点数据,可以将发现出来的热点数据写入到 zookeeper中。
# 5.长连接
多次通过一次连接发送请求和返回响应 短连接:一个连接建立之后,然后发送请求,接着就断开
# 6.json与js对象的关系
总结: json数据类型为String.(json是一个特殊格式的字符串) Object数据类型Object
json通常用于服务端交换数据,在向服务器发送数据时一般是字符串
# 7.如何查看php.ini信息
谁便一个方法返回phpinfo()就行 public function actionShowInfo() { phpinfo(); }
# 8.订阅号,服务号,企业号,测试账号
测试号相当于服务号,用于测试 订阅号:用于个人的 服务号:用于商家的 企业号:用于企业的
# 9.Linux目录结构和作用
Linux目前采用多级树型结构 /根 /tmp(temporary) 存放临时文件。重启就会被删除 /bin 存放二进制可执行文件。常用命令一般都在这里(ls,cat,mkdir等) /etc(etcetra directory) 存放系统管理和配置文件 /home 存放所有用户的根目录,是用户主目录的基点。用户user主目录就是/home/user.可以用~user
var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
2
# host设置
# 1.ubuntu/linux/mac设置
1.修改hosts
sudo vim /etc/hosts
2.设置host
127.0.0.1 localhost
3.重启网络
sudo /etc/init.d/networking restart
也可以直接点击右上角的网络连接图标,选择断开,然后再选中连接即可。
2
3
4
5
6
7
# 2.window设置
1.修改hosts
windows hosts位置: c:\windows\system32\drivers\etc\hosts
2.修改之后刷新缓存
cmd中执行:
ipconfig /flushdns
2
3
4
5
# node安装的全局插件(如cnpm,vue),命令执行找不到
# 1.ubuntu/linux
1.需要软连接到bin目录,(就可以全局使用了)
sudo ln -s /home/user/Downloads/node-v8.9.2-linux-x64/bin/cnpm /usr/local/bin
2
# 2.window
需要配置环境变量
# 11.h5手机号,验证码校验
<input v-model="phone" type='tel' placeholder="手机号" onkeyup="this.value=this.value.replace(/[^\d]/g,'')" onafterpaste="this.value=this.value.replace(/[^\d]/g,'')" oninput="if(value.length>11)value=value.slice(0,11)"/>
<input class="captcha" @blur="scrollBack" v-model="captcha" type='tel' placeholder="验证码" onkeyup="this.value=this.value.replace(/[^\d]/g,'')" onafterpaste="this.value=this.value.replace(/[^\d]/g,'')" oninput="if(value.length>6)value=value.slice(0,6)"/>
2
# 12.跨域请求要想带上cookie,必须要在ajax请求里加上xhrFields: {withCredentials: true}, crossDomain: true。
在做登录认证的时候,会出现请求未登录的情况,查看请求头的时候发现并没有把登录时的cookie设置到第二次的请求头里面。查看资料才知道跨域请求要想带上cookie,必须要在ajax请求里加上xhrFields: {withCredentials: true}, crossDomain: true。自从HTML5利用CORS实现了跨域资源共享之后,无论是POST方式还是GET方式,我们都可以用ajax来跨域访问资源,但是我们要怎么用CORS 因为在默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据。如果服务器接收带凭据的请求,会用下面的HTTP头部来响应。 虽然设置了widthCredentials为true的请求中会包含远程域的所有cookie,但这些cookie仍然遵循同源策略,所以外域是访问不了这些cookie的,现在我们就可以安全地跨域访问啦。
window.$.ajax({
url: '',
type: '',
xhrFields: {
withCredentials: true
},
success: res => {
}
})
2
3
4
5
6
7
8
9
10
# 13.请求头中的X-Requested-With: 对于非同一域名下的,需要传特别的校验header, key是X-Requested-With,值为固定值XMLHttpRequest.
用于校验
# 14.加密方式
1、MD5
一种被广bai泛使用的密码散列函数,可以du产生出一个128位(16字节)的散列值zhi(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。
2、对称加密
对称加密采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
3、非对称加密
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
/**
* openssl_encrypt加密
* @param data 加密明文
* @param key 加密秘钥
* @param method 加密方式(默认aes-128-ecb)
*/
public static function encrypt($data, $key, $method = 'aes-128-ecb')
{
$encryptData = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA);
return base64_encode($encryptData);
}
/**
* openssl_decrypt解密
* @param data 加密密文
* @param key 加密秘钥
* @param method 加密方式(默认aes-128-ecb)
*/
public static function decrypt($data, $key, $method = 'aes-128-ecb')
{
$data = base64_decode($data);
return openssl_decrypt($data, $method, $key, OPENSSL_RAW_DATA);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 质料
优化性能 (opens new window) Linux目录结构和作用 (opens new window)