variables python:
动态类型 无需声明; 区分 全局/局部变量: function can access global , but can’t change it 1 2 3 4 x = 100 def hello(): y = 200 complex data types iterators 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class MyRange: def __init__(self, start, end): self.start = start self.end = end def __iter__(self): self.current = self.start return self def __next__(self): if self.
Caddyfile Concepts — Caddy Documentation - https://caddyserver.com/docs/caddyfile/concepts
config servers server’s global configure
1 2 3 4 5 6 7 8 9 10 11 12 13 14 { servers { timeouts { read 30s write 30s idle 5m } max_header_size 8192 protocol { allow_h2c experimental_http3 } } } time=“2023-12-09T01:54:31+08:00” level=error msg=“Panic recovered: runtime error: invalid memory address or nil pointer dereference\nPOST /api/v1/aimoss/draw/message/page HTTP/1.1\r\nHost: api.molica.com.cn\r\nAccept: application/json\r\nAccept-Encoding: br,gzip\r\nApi-Ver: 2.0\r\nContent-Length: 65\r\nContent-Type: application/json; charset=UTF-8\r\nPlat: android\r\nUid: fbf06feef03d5858\r\nUser-Agent: molica-app/1.
qps qps, qpm: query per seconds/minutes: 每秒/分钟查询数
查询:是泛指, 可以指任何类型的接口,包括get,post,put,delete
qps = total finish request count / total request time in a range
finish rquest count: 在那个时间段接受并完成响应的请求;
qps 的估算:
总的qps: 日活 1w , 每人平均120请求 , 则 平均 qps 120/24/3600=13 qps 峰值qps 约四倍 = 52 qps
上传图片接口的qps 日活1w,每个用户平均上传一次, 则 1w/ 24/3600= 0.1次 峰值 四倍 =0.4
超过qps的应对策略:
不做任何处理: 此时服务还能正常进行 ,只是用户等待时间边长 限流:超过特定流量的请求将被拦截,牺牲部分用户
project-layout/README_zh.md at master · golang-standards/project-layout
paper-code/package-oriented-design/packageorienteddesign.md
How to Keep Your Code Clean With Object Encapsulation
Golang 依赖注入最佳指南 - TeHub - https://tehub.com/a/c0W0jZ5qR8
Solid 核心目标:
最小化修改: 当需要修改的时候,只修改最小的一部分:单一职责 容易拓展:当需要拓展时候,不改变原有代码,只需要增添新增的部分: 依赖倒置 易阅读,易测试:单一,依赖导致; 在具体实现上:
面相接口编程:将需要的功能尽可能的抽象成接口,并依赖这些接口 接口要分离: 如果实现类并不不需要接口的全部功能,则将接口分离; 划分好类的职责 single responsibility 单一职责
只负责一类事情 只有当这类 事情发生变化的时候才需要修改代码 example: 负责 user 相关信息的增删改查
1 2 3 4 5 6 7 8 userclase{ queryuser adduser insertuser updateUser } how to do:
选择某个角度去划分职责,同时该项目其他类也尽量按照这个角度 工作流程: 下单,支付,发货 功能模块: 订单管理,支付管理 用户角色:管理员,普通用户 Dependency Inversion 依赖反转:
反转高层对底层的依赖, 高层和底层都依赖于一个抽象类 不依赖具体类, 只依赖抽象类; 依赖注入: 依赖反转 的实现方式;
接口幂等性这么重要,它是什么?怎么实现?-腾讯云开发者社区-腾讯云 - https://cloud.tencent.com/developer/article/1511743
是什么?
无论执行多少次,系统的状态都不会变
IEEE-754浮点数那些坑:0.1加0.2不等于0.3! | 随笔 - https://fasionchan.com/posts/ieee754-traps/
float 精度问题 why 二进制无法表示准确的小数?
二进制表示整数是 2^(+n): 101: 2^2+0+2^0
表示小数则是 2^-n 0.11: 2^-1 + 2^-2=0.5+0.25;
二进制表示小数就注定无法精确表述,只能无限接近
cause problem 无法比较 1 0.1+0.2>0.3 解析成json数字很长 1 2 3 { "price":0.1000000022 }