Golang题 一揽子方案
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题 一揽子方案相关推荐
- Golang基础 一揽子方案
1. go mod tidy 自动下载所有依赖 2. 安装ptotobuf https://github.com/protocolbuffers/protobuf/releases go instal ...
- KDD CUP 2022 风能预测赛题冠军方案分享
KDD CUP竞赛是由ACM 的数据挖掘及知识发现专委会(SIGKDD)主办的数据挖掘研究领域的国际赛事,从1997年开始,每年举办一次,被称为数据挖掘领域的"世界杯",是该领域水 ...
- 2019年全国大学生电子设计大学(D 题)简易电路特性测试仪(1)整题思路方案分析
2019年全国大学生电子设计大学(D 题)简易电路特性测试仪,此题是特别经典的一道题,对于不选控制类题目的同学,这个题非要有必要训练一下,这个题综合性比起2021年E题收发器难度会差一些,但是还是很考 ...
- gRPC 一揽子方案
gRPC是Google开发的高性能.通用的.开源的远程过程调用( RPC)技术框架,主要面向移动应用开发并基于HTTP/2协议标准而设计,基于Protobuf(Protocol Buffers)序列化 ...
- 2021年全国大学生电子设计大赛G题无人机方案
无人机踩坑提醒: 比赛前报名表千万别填第一个,不然你将会是踩坑小组,评委会把所有评分点以及扣分点通过你总结出来(文章会随时补充) 方案介绍: 本人比赛期间采用的是纯光流加openmv视觉闭环,这里建议 ...
- 15行代码AC——ZOJ - 4118 Stones in the Bucket(思维题+优化方案)(第十届山东省ACM程序设计竞赛F题)
励志用少的代码做高效表达. 思路分析 题意:给定n个数,问最少操作几次,使数列中的数全部相等. 操作一:将数列中任意数减一. 操作二:将数列中任意数减一.任意数加一(相当于把1挪过去) 涉及到最少的题 ...
- MYSQL一揽子方案汇总
MySQL-5汇总 一.数据库操作语句 mysql -hlocalhost -p3306 -uroot -proot SHOW DATABASES; SHOW CREATE DATABASE db_n ...
- PHP基础之一揽子方案
P4-PHP基础4(类型转换,运算符,分支结构) 一.PHP类型转换,必须是同类型才能运算 变量类型转换分:自动转换和强制转换.//使用时注意了:()包括在int上,如(int)4.5; // ...
- H5+CSS一揽子方案
H5网络 ononline,onoffline,window.addEventListener("onlinne/offline") 全屏 div.[webkit|moz|ms|o ...
最新文章
- 一步步学习微软InfoPath2010和SP2010--第三章节--表单设计基础:处理InfoPath布局、控件和视图(4)--控件属性功能区...
- nth-child(n)和nth-of-type(n)
- php基础是什么,php基础学什么?
- js 点击闭包_【JS进阶】Javascript 闭包与Promise的碰撞
- 火狐用有道词典不能屏幕取词的解决办法
- 双层pdf软件free_如何一键下载网上文档以及pdf
- css 背景图片虚化磨砂效果
- 软件测试教程第2版(宫云战主编)
- Java日志系列——概述,JUL
- bzoj 4518: [Sdoi2016]征途
- 什么是代理IP?怎么在浏览器中配置代理IP?
- nvm 卸载详细流程
- 银联基于OpenStack 的“五高”生产金融云技术白皮书
- 七彩虹平板刷成android,大功告成 七彩虹G808首个MIUI ROM移植
- 微信小程序海报生成图片合成工具类
- 编译内核 解决 Gentoo 在 AUSU P5B SE 板载网卡 无法上网
- 再谈目前QQ空间主流的赚钱方法
- 通过开源项目SoundTouch实现类似Tom猫的变声功能
- 计算机二级笔试题好难,计算机二级考试试题经验分享
- 乐观,积极,踏实,静心,排解
热门文章
- CentOS7 Hadoop 2.7.3 Hive 2.1.1
- Android 第三方加固方案 对比
- iphone微信 电脑连接到服务器,简单几步,让 iPhone 无线访问 Windows 传文件
- 基于Socket编程的聊天工具【Java实现】
- Android小钢琴案例
- Java——命令jps、jstat、jmap、jstack、jhat、jinfo
- 1Whatsup-gold14.2安装及激活
- ios------app跳转到appStore评分
- 如何在webstorm中使用jQuery库
- FFTW库三个lib库的应用与区别