https://raw.githubusercontent.com/dillonzq/LoveIt/master/exampleSite/assets/images/avatar.png

basic

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.

caddy

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.

concurrency

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的应对策略: 不做任何处理: 此时服务还能正常进行 ,只是用户等待时间边长 限流:超过特定流量的请求将被拦截,牺牲部分用户

go architecture

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 是什么? 无论执行多少次,系统的状态都不会变

float

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 }