git提交commit message规范
业界通用的 git 提交规范有哪些?
1.commitizen
AngularJS 在 github上 的提交记录被业内许多人认可,逐渐被大家引用。
格式:type(scope) : subject
scope选填表示commit的作用范围,如数据层、视图层,也可以是目录名称subject必填用于对commit进行简短的描述type必填表示提交类型,值有以下几种:
feat - 新功能 feature
fix - 修复 bug
docs - 文档注释
style - 代码格式(不影响代码运行的变动)
refactor - 重构、优化(既不增加新功能,也不是修复bug)
perf - 性能优化
test - 增加测试
chore - 构建过程或辅助工具的变动
revert - 回退
build - 打包
MySQL 8.0 及以上版本默认启用了 ONLY_FULL_GROUP_BY SQL 模式,这要求 SELECT 子句中的所有列要么出现在 GROUP BY 子句中,要么在聚合函数中使用
实际生成中遇到的sql问题,记录一下。包含场景复现sql,隐藏实际数据。
解决方法方法一:修改 GROUP BY 子句
将 sys_user.real_name、swimplat_member_record.cost_count 和 swimplat_member_ticket.type 添加到 GROUP BY中。但是这可能会返回更多的行,具体取决于这些列的值是否唯一。
123456789101112131415SELECT sys_user.real_name AS 姓名, sys_user.phonenumber AS 电话, swimplat_member_record.cost_count AS 消费次数, swimplat_member_ticket.type AS 套票类型FROM swimplat_member_recordLEFT JOIN swimplat_member_card ON swimplat_member_card.id = swimplat_member_record.member_card_idLEFT JO ...
多种编程语言接入ChatGPT详细教程:Python、JavaScript、Java、C#
使用多种编程语言接入 ChatGPT 的详细教程准备工作API 密钥获取要接入 ChatGPT,首先需要一个 OpenAI API 密钥。请按照以下步骤获取你的 API 密钥:
访问 OpenAI 官网.
登录你的账号。如果没有账号,注册一个新账号。
在用户界面中导航到“API 密钥”页面。
创建一个新的 API 密钥并将其保存到安全的地方。
安装和设置为了使用 OpenAI 的 API,你需要安装相应的库和工具。以下是每种语言的具体安装步骤。
Python 接入安装库在使用 Python 调用 OpenAI API 之前,你需要安装 openai 库。你可以使用以下命令通过 pip 安装它:
1pip install openai
示例代码下面是一个简单的 Python 代码示例,展示如何调用 ChatGPT API:
123456789101112import openaiopenai.api_key = "你的API密钥"response = openai.ChatCompletion.create( model="gpt-4", ...
hexo网站提高SEO优化方法
主要步骤
添加站点地图 sitemap.xml文件和搜索机器人文件robots.txt
提交站点到搜索引擎(百度和谷歌)
hexo针对搜索的优化
添加站点地图 sitemap.xml1.添加hexo插件
12npm install hexo-generator-sitemap --savenpm install hexo-generator-baidu-sitemap --save
2.修改_config.yml配置
1234sitemap: path: sitemap.xmlbaidusitemap: path: baidusitemap.xml
搜索机器人文件robots.txt在source目录下新建robots.txt文件,文件内容如下:
123456789101112131415User-agent: *Allow: /Allow: /archives/Allow: /categories/Allow: /tags/ Allow: /resources/ Disallow: /vendors/Disallow: /js/Disallow: /css/Disallow ...
md5彩虹表奇妙的比喻
如果将 MD5 哈希后的密文比作一把锁,暴力破解的方法就是现场制作各种各样不同齿形的钥匙,再来尝试能否开锁,这样耗时无疑很长很长。。。
我以前错误理解的 “彩虹表”,是事先制作好所有齿形的钥匙,全部拿过来尝试开锁,这样虽然省去了制作钥匙的时间,但是后来发现这些钥匙实在是太多了,没法全部带在身上。
而真正的彩虹表,是将钥匙按照某种规律进行分组,每组钥匙中只需要带最有特点的一个,当发现某个 “特征钥匙”差一点就能开锁了,则当场对该钥匙进行简单的打磨,直到能开锁为止。这种方法是既省力又省时的。
原生 js 解析 jwtToken 获取 token 中携带的信息
1234567const jwtToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0IiwiZXhwIjoxNzE5NDA0MDU2fQ.CZcJMXS7qYDqjJk9Dt3C3WcfmH2a4-79Q-Zenpv0jB0";let strings = jwtToken.split("."); //截取token,获取载体const userinfo = JSON.parse( window.atob(strings[1].replace(/-/g, "+").replace(/_/g, "/")));console.log("userinfo", userinfo);
python不验证密钥直接解析jwtToken第二段的内容,通过base64解析
12345def test01(): token = "t1.t2.t3" token_body = token.split('.')[1] result = json.loads(base64.b64decode(token_body + '==').decode('utf-8')) print(result)
fastapi 在响应后如果还有未被执行的 async task 将会自动执行
场景复现123456789101112async def async_test(): time.sleep(2) print("async_test", time.time()) return "success"@router.post("/test", summary="test")async def test(): task = asyncio.create_task(async_test()) # await asyncio.gather(task) time.sleep(5) return "success"
浏览器访问 /test 路由,会发现,在 5 秒后返回响应 “success” ,接着 async_test 会自动被执行,于 2 秒后打印日志。
vue页面平滑滚动到顶部或底部
使用CSS的scroll-behaviorscroll-behavior: auto | smooth | inherit | unset
一般我们使用auto和smooth就可以了,smooth表示滚动很平滑,有过渡效果,auto没有过渡效果,一闪而过。
我们一般回到顶部的话把这个属性设置在html上即可。代码如下
只使用 html a 标签实现12345678910111213<div id="container" class="box"> <p>Hello, Backtotop</p> <br/> <p>Hello, Backtotop</p> <br/> <p>Hello, Backtotop</p> <br/> <p>Hello, Backtotop</p> <br/> /* 省略部分代码 */</div><a ...
mysql limit 优化 百万至千万级快速分页
mysql limit 使用方法在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。
1SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
MySQL Limit 优化解决方案性能到底能有多高?MySql 这个数据库绝对是适合dba级的高手去玩的,一般做一点1万篇新闻的小型系统怎么写都可以。可是数据量到了10万,百万至千万,他的性能还能那么高吗?一点小小的失误,可能造成整个系统的改写,甚至更本系统无法正常运行!好了,不那么多废话了。用事实说话,看例子
数据表 collect ( id, title ,info ,vtype) 就这4个字段,其中 title 用定长,info 用 text, id是逐渐,vtype 是 tinyint,vtype 是索引。这是一个基本的新闻系统的简单模型。现在往里面填充数据,填充10万篇新闻。最后 collect 为 10万条记录,数据库表占用硬盘1.6G。
OK ,看下面这条sql语句
12sele ...