PHP部分
1.nginx设置反向代理,获取真实客户端ip
upstream这个模块提供一个简单方法来实现在轮询和客户端IP之间的后端服务器负荷平衡。
upstream abc.com {
server 127.0.0.1:8080;
server 127.0.0.1:80;
server 127.0.0.1:8000;
}
server {
listen 80;
server_name www.test.com;
location / {
proxy_pass http://abc.com;
proxy_set_header Host $host;#保留代理之前的host
proxy_set_header X-Real-IP $remote_addr;#保留代理之前的真实客户端ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;#在多级代理的情况下,记录每次代理之前的客户端真实ip
proxy_redirect default;#指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
}
}
- yii和thinkphp,laravel区别
- tcp三次握手四次挥手
- 抽象类和接口的区别
- redis 和memchech 区别,
- redis 和memcache分布式 ,
- mongodb 如何扩容
- PHP和go 区别,优势
- 常用的shell 命令,
- awk 如何分割参数
- git merge和rebase区
- mysql索引优化
- mysql主从复制原理
- mysql 存储引擎有几种以及区别
- mysql 大分类关联小分类数据库设计,在不使用中间表的情况下(标签??)
- 批量更新mysql数据表(如:其中一个用户发生变化,其他多个与之对应的用户发生改变)
golang部分
1.go切片作用,切片与数组的区别? 什么场景用切片,什么场景用数组
Go 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。
数组:
arr1 = [5]int{2, 3, 4, 5, 6} // 长度和元素类型都相同,可以正确赋值
- 数组定义:由若干相同类型的元素组成的序列
- 数组的长度是固定的,声明后无法改变
- 数组的长度是数组类型的一部分,eg:元素类型相同但是长度不同的两个数组是不同类型的
- 需要严格控制程序所使用内存时,数组十分有用,因为其长度固定,避免了内存二次分配操作
切片:
- 指针:指向底层数组
- 长度:切片中元素的长度,不能大于容量
- 容量:指针所指向的底层数组的总容量
//使用数组来初始化切片
arr := [5]int{1, 2, 3, 4, 5}
slice := arr[0:3] // 左闭右开区间,最终切片为 [1,2,3]
2.闭包函数作用:
Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。
package main
import "fmt"
func getSequence() func() int {
i:=0
return func() int {
i+=1
return i
}
}
func main(){
/* nextNumber 为一个函数,函数 i 为 0 */
nextNumber := getSequence()
/* 调用 nextNumber 函数,i 变量自增 1 并返回 */
fmt.Println(nextNumber())
fmt.Println(nextNumber())
fmt.Println(nextNumber())
/* 创建新的函数 nextNumber1,并查看结果 */
nextNumber1 := getSequence()
fmt.Println(nextNumber1())
fmt.Println(nextNumber1())
}
以上代码执行结果为:
1
2
3
1
2