2021年6月最新面试记录

举报
lxw1844912514 发表于 2022/03/27 01:06:50 2022/03/27
【摘要】 PHP部分 1.nginx设置反向代理,获取真实客户端ip upstream这个模块提供一个简单方法来实现在轮询和客户端IP之间的后端服务器负荷平衡。upstream abc.com { server 127.0.0.1:8080; server 127.0.0.1:80; server 1...

PHP部分

1.nginx设置反向代理,获取真实客户端ip


  
  1. upstream这个模块提供一个简单方法来实现在轮询和客户端IP之间的后端服务器负荷平衡。
  2. upstream abc.com {
  3. server 127.0.0.1:8080;
  4. server 127.0.0.1:80;
  5. server 127.0.0.1:8000;
  6. }
  7. server {
  8. listen 80;
  9. server_name www.test.com;
  10. location / {
  11. proxy_pass http://abc.com;
  12. proxy_set_header Host $host;#保留代理之前的host
  13. proxy_set_header X-Real-IP $remote_addr;#保留代理之前的真实客户端ip
  14. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  15. proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;#在多级代理的情况下,记录每次代理之前的客户端真实ip
  16. proxy_redirect default;#指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值
  17. }
  18. }

  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:元素类型相同但是长度不同的两个数组是不同类型的
  • 需要严格控制程序所使用内存时,数组十分有用,因为其长度固定,避免了内存二次分配操作

切片:

  • 指针:指向底层数组
  • 长度:切片中元素的长度,不能大于容量
  • 容量:指针所指向的底层数组的总容量

  
  1. //使用数组来初始化切片
  2. arr := [5]int{1, 2, 3, 4, 5}
  3. slice := arr[0:3] // 左闭右开区间,最终切片为 [1,2,3]

2.闭包函数作用:

Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。


  
  1. package main
  2. import "fmt"
  3. func getSequence() func() int {
  4. i:=0
  5. return func() int {
  6. i+=1
  7. return i
  8. }
  9. }
  10. func main(){
  11. /* nextNumber 为一个函数,函数 i 为 0 */
  12. nextNumber := getSequence()
  13. /* 调用 nextNumber 函数,i 变量自增 1 并返回 */
  14. fmt.Println(nextNumber())
  15. fmt.Println(nextNumber())
  16. fmt.Println(nextNumber())
  17. /* 创建新的函数 nextNumber1,并查看结果 */
  18. nextNumber1 := getSequence()
  19. fmt.Println(nextNumber1())
  20. fmt.Println(nextNumber1())
  21. }
  22. 以上代码执行结果为:
  23. 1
  24. 2
  25. 3
  26. 1
  27. 2

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

文章来源: blog.csdn.net,作者:lxw1844912514,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/lxw1844912514/article/details/118092661

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。