• 2021年6月最新面试记录


    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头域数值
            }
    }

    1. yii和thinkphp,laravel区别
    2. tcp三次握手四次挥手
    3. 抽象类和接口的区别
    4. redis 和memchech 区别,
    5. redis 和memcache分布式 ,
    6. mongodb 如何扩容

    1. PHP和go 区别,优势
    2. 常用的shell 命令,
    3. awk 如何分割参数
    4. git merge和rebase区
    5. mysql索引优化
    6. mysql主从复制原理
    7. mysql 存储引擎有几种以及区别
    8. mysql 大分类关联小分类数据库设计,在不使用中间表的情况下(标签??)
    9. 批量更新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

    参考:https://www.cnblogs.com/caidingyu/p/11077194.html

    赞赏码

    非学,无以致疑;非问,无以广识

  • 相关阅读:
    linux中iptables的用法
    Git介绍及安装配置
    第一个shell脚本
    Nginx配置优化解读
    Python中print格式化输出
    python 程序构架浅析
    Python 常用字符串操作
    Python入门学习:网络刷博器爬虫
    vSphere SDK for Java
    vROPS中获取虚拟机在VC中的UUID
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452551.html
Copyright © 2020-2023  润新知