1.Go的XSS(跨站脚本攻击)的防护应该结合以下两种方式。

1.1 验证所有输入数据,有效检测攻击。
1.2 对所有输出数据进行适当的处理,以防止任何已成功注入的脚本在浏览器端运行。
func HTMLEscape(w io.Writer, b []byte) // 把 b 进行转义之后写到 w
func HTMLEscapeString(s string) string // 转义 s 之后返回结果字符串
func HTMLEscaper(args ...interface{}) string // 支持多个参数一起转义,返回结果字符串
使用template.HTML()转义用来正常显示输入。

2. defer、return、返回值三者的执行先后逻辑

2.1 多个defer的执行顺序为“后进先出”;
2.2 defer、return、返回值三者的执行逻辑应该是:return最先执行,return负责将结果写入返回值中;接着defer开始执行一些收尾工作;最后函数携带当前返回值退出。

3.Go设计模式

Golang设计模式目录 https://www.jianshu.com/p/b31f34cddf81
常见设计模式——go实现 https://zhuanlan.zhihu.com/p/91997566

3.1.1 单例模式(懒汉模式)

type Singleton struct{}
var Instance *Singleton

func GetInstance() *Singleton {
    if Instance == nil {
        Instance = &Singleton{}
    }
    return Instance
}

3.1.2 Once实现懒汉模式

var Instance5 *Singleton
var once sync.Once

func GetInstance5() *Singleton {
    once.Do(func() {
        Instance5 = &Singleton{}
    })
    return Instance5
}

3.2.1 单例模式(饿汉模式)

type Singleton struct{}
var Instance2 *Singleton = &Singleton{}

func GetInstance2() *Singleton {
    return Instance2
}

3.2.2 双重锁的懒汉模式

var Instance4 *Singleton
var mut2 sync.Mutex
func GetInstance4() *Singleton {
    if Instance4 == nil {
        mut2.Lock()
        defer mut2.Unlock()
        if Instance4 == nil {
            Instance4 = &Singleton{}
        }
    }
    return Instance4
}

3.3.1 简单工厂

type Factory struct {
}
type Product interface {
   create()
}
func (f Factory) Generate(name string) Product {
   switch name {
   case "product1":
      return Product1{}
   case "product2":
      return Product2{}
   default:
      return nil
   }
}
//使用
factory := new(Factory)
product1 := factory.Generate("product1")

3.3.2 工厂模式

type FactoryInterface interface {
   CreateProduct(t string) ProductInterface
}
type Factory1 struct {
}
func (f Factory1) CreateProduct(t string) ProductInterface {
    switch t {
    case "product1":
        return product1{}
    default:
        return nil
    }
}
//使用
f := new(Factory1)
p1 := f.CreateProduct("product1")

4. 浅谈 Golang struct 与 PHP class 的相似

Golang 中的 struct 与 PHP 的 class 在使用方式上差不多。
struct 中的成员可以类比 class 中的属性,struct 中的成员函数可以类比 class 中的方法。
对比示例:
// Golang
type CollectorOption func(*Collector)
type Collector struct {
    UserAgent string
    MaxDepth int
}
func NewCollector(options ...CollectorOption) *Collector {

}
func (c *Collector) Visit(URL string) error {
}

// PHP
$options = function (&instance) {
}
class Collector {
  public $userAgent;
  public $maxDepth;

  public function visit(string $url): string
  {
    //
  }
}

function NewCollector(...$options) Collector {
}

5.redis持久化
Redis的持久化有两种方式:RDB和AOF,redis默认采用的是RDB的方式。

RDB:(快照持久化)

触发生成rdb快照文件的方式主要有五种(会生成一个dump.rdb文件):配置文件自动触发、执行save命令、执行bgsave命令、执行shutdown命令、执行flushall命令。
redis.conf 中配置项dbfilename dump.rdb,save m n 同步操作save 60 10000,异步操作bgsave再redis命令行里执行SHUTDOWN或bgsave

AOF(文件追加持久化)

配置文件开启aof持久化方式:appendonly yes appendfilename appendonly.aof
AOF的三种写入策略appendfsync always|everysec|no
redis提供了重写机制来解决对同一个key做多次写操作,从而产生大量文件日志。
可以通过下面命令手动触发重写:bgrewriteaof,也可以通过配置文件自动触发重写:
auto-aof-rewrite-percentage 100:当文件的大小达到原先文件大小
auto-aof-rewrite-min-size 64mb:文件重写的最小文件大小
使用redis-check-aof --fix命令修复AOF文件错误

混合持久化:通过 aof-use-rdb-preamble 参数来开启

在写入的时候先把数据以 RDB 的形式写入文件的开头,再将后续的写命令以 AOF 的格式追加到文件中。

RDB和AOF对比

RDB的优点:节省内存、速度快(二进制形式写入)、适合全量备份和复制场景
RDB的缺点:服务器宕机易丢数据,数据量大易阻塞
每次保存RDB的时候,Redis都要fork出一个子进程,这个过程是阻塞的,如果数据集巨大,那阻塞的时间就会很长。

AOF的优点:数据完整性高,不易丢失,日志文件可读,AOF文件可修复
数据更加完整,丢失数据的可能性较低;
AOF日志文件可读,并且可以对AOF文件修复。
AOF的缺点:AOF日志记录在长期运行中逐渐庞大,恢复很耗时,需定期瘦身处理,恢复备份速度较慢。

6. nodejs部署的服务访问异常

nodejs部署的服务用localhost+端口curl http://localhost:8089可以访问,换成ip+端口curl http://192.168.0.201:8089就无法访问
解决方法1:(无效,防火墙已关闭,添加开放端口无效)
/sbin/iptables -I INPUT -p tcp --dport 8089 -j ACCEPT
service network restart
解决方法2:(有效)
修改或添加online-store\webpack.config.js的port:8089上的host: '0.0.0.0'(不能是127.0.0.1)
再次执行npm run dev出现Project is running at http://0.0.0.0:8089/即可

Golang题 一揽子方案相关推荐

  1. Golang基础 一揽子方案

    1. go mod tidy 自动下载所有依赖 2. 安装ptotobuf https://github.com/protocolbuffers/protobuf/releases go instal ...

  2. KDD CUP 2022 风能预测赛题冠军方案分享

    KDD CUP竞赛是由ACM 的数据挖掘及知识发现专委会(SIGKDD)主办的数据挖掘研究领域的国际赛事,从1997年开始,每年举办一次,被称为数据挖掘领域的"世界杯",是该领域水 ...

  3. 2019年全国大学生电子设计大学(D 题)简易电路特性测试仪(1)整题思路方案分析

    2019年全国大学生电子设计大学(D 题)简易电路特性测试仪,此题是特别经典的一道题,对于不选控制类题目的同学,这个题非要有必要训练一下,这个题综合性比起2021年E题收发器难度会差一些,但是还是很考 ...

  4. gRPC 一揽子方案

    gRPC是Google开发的高性能.通用的.开源的远程过程调用( RPC)技术框架,主要面向移动应用开发并基于HTTP/2协议标准而设计,基于Protobuf(Protocol Buffers)序列化 ...

  5. 2021年全国大学生电子设计大赛G题无人机方案

    无人机踩坑提醒: 比赛前报名表千万别填第一个,不然你将会是踩坑小组,评委会把所有评分点以及扣分点通过你总结出来(文章会随时补充) 方案介绍: 本人比赛期间采用的是纯光流加openmv视觉闭环,这里建议 ...

  6. 15行代码AC——ZOJ - 4118 Stones in the Bucket(思维题+优化方案)(第十届山东省ACM程序设计竞赛F题)

    励志用少的代码做高效表达. 思路分析 题意:给定n个数,问最少操作几次,使数列中的数全部相等. 操作一:将数列中任意数减一. 操作二:将数列中任意数减一.任意数加一(相当于把1挪过去) 涉及到最少的题 ...

  7. MYSQL一揽子方案汇总

    MySQL-5汇总 一.数据库操作语句 mysql -hlocalhost -p3306 -uroot -proot SHOW DATABASES; SHOW CREATE DATABASE db_n ...

  8. PHP基础之一揽子方案

    P4-PHP基础4(类型转换,运算符,分支结构) 一.PHP类型转换,必须是同类型才能运算 变量类型转换分:自动转换和强制转换.//使用时注意了:()包括在int上,如(int)4.5;     // ...

  9. H5+CSS一揽子方案

    H5网络 ononline,onoffline,window.addEventListener("onlinne/offline") 全屏 div.[webkit|moz|ms|o ...

最新文章

  1. 一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(4)--控件属性功能区...
  2. nth-child(n)和nth-of-type(n)
  3. php基础是什么,php基础学什么?
  4. js 点击闭包_【JS进阶】Javascript 闭包与Promise的碰撞
  5. 火狐用有道词典不能屏幕取词的解决办法
  6. 双层pdf软件free_如何一键下载网上文档以及pdf
  7. css 背景图片虚化磨砂效果
  8. 软件测试教程第2版(宫云战主编)
  9. Java日志系列——概述,JUL
  10. bzoj 4518: [Sdoi2016]征途
  11. 什么是代理IP?怎么在浏览器中配置代理IP?
  12. nvm 卸载详细流程
  13. 银联基于OpenStack 的“五高”生产金融云技术白皮书
  14. 七彩虹平板刷成android,大功告成 七彩虹G808首个MIUI ROM移植
  15. 微信小程序海报生成图片合成工具类
  16. 编译内核 解决 Gentoo 在 AUSU P5B SE 板载网卡 无法上网
  17. 再谈目前QQ空间主流的赚钱方法
  18. 通过开源项目SoundTouch实现类似Tom猫的变声功能
  19. 计算机二级笔试题好难,计算机二级考试试题经验分享
  20. 乐观,积极,踏实,静心,排解

热门文章

  1. CentOS7 Hadoop 2.7.3 Hive 2.1.1
  2. Android 第三方加固方案 对比
  3. iphone微信 电脑连接到服务器,简单几步,让 iPhone 无线访问 Windows 传文件
  4. 基于Socket编程的聊天工具【Java实现】
  5. Android小钢琴案例
  6. Java——命令jps、jstat、jmap、jstack、jhat、jinfo
  7. 1Whatsup-gold14.2安装及激活
  8. ios------app跳转到appStore评分
  9. 如何在webstorm中使用jQuery库
  10. FFTW库三个lib库的应用与区别