Base64介绍
Base64介绍Base64是一种基于64个可打印字符来表示二进制数据的表示方法,从本质上看Base64编码就是将三字节转四字节。如将字符串“Man”用Base64编码。
如果数据的长度不是3的整数倍,就要在后面补0再计算,每补2个0就再Base64串后加上1个‘=’。
Base64编码表如下:
Base64的不足之处
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充’=’号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
Base64的应用场景, 可移步点击此处查看。
git stash-用于储藏一些没到提交时候的更改
文章开始之前分享一些git常用命令
git push -u 或 git push --set-upstream用于推送的同时设置默认上游分支, 用于 git pull/push 不指定分支时的默认拉取的分支(可以配置多个)。
git stash -u 或 git stash --include-untracked命令可以保存包括未跟踪文件(即新添加的文件)在内的所有更改。
git reset 分支^ 重置分支到前一次(^)变更, 且已commit的提交会 重新回到工作区。
git rebase -X ours dev 在 Git 中,-X 和 --strategy-option 都是用来设定合并策略选项的参数。不过 -X 是 --strategy-option 的简写形式,这两者在功能上是完全相同的。
git reflog 查找没有任何指针, 仅有sha1哈希的commit。 (指针包括: 分支指针、标签指针、stash指针…..等等, 如果一个commit分支的某个节点往后没有这些指针中的任何一个, 那么它们将不会被显示, 触发你使用此命令才能够显示。只有显示了, 才有办 ...
git add 时如何将单份文件的更改内容分为多个提交
前言应团队要求, 提交内容必须符合管理规定, 保持清晰。 但有些时候, 在自己分支开发的时候, 往往写着写着就写嗨了, 造成本来不应该在同一个提交里的改动与更新出现在同一份文件中, 而git add 又是以单个文件为单位的提交, 不符合团队提交规范。因此, 解决这个问题, 需要用到git add -p对更改做拆分, 可以选择性的把需要的内容加入至暂存区, 然后就可以commit了。
‘git add -p’ 的使用使用此指令提交后, 需要知道以下这些子操作的含义, 以便进一步处理:
1234567891011121314y - 取了n - 不取q - 我不干了,啥也别add,退出吧a - 取了这个和此文件后续所有的d - 这个不取了,此文件后续所有的我也不取了g - 搜索以跳到某个hunk/ - 以正则搜索某个hunkj - 这个未决, 并跳到下一个未决hunkJ - 这个未决, 并跳到下一个hunkk - 这个未决, 并跳到上一个未决hunkK - 这个未决, 并跳到上一个hunks - 这个hunk太大了,拆分成更小的hunks吧e - 手动编辑当前hunk? - 显示当前帮助信息 ...
如何合并多个提交为一个提交
前言之前在pr代码时, 被要求将某几个提交合并为一个提交后重新提交。这里需要用的git rebase -i来完成。
‘git rebase -i’的简单使用git rebase -i的作用很多, 可以在本文末尾点击官网链接查看, 我们这里只介绍涉及到前言需求的压缩提交这一个用途:压缩提交通过交互式变基工具,也可以将一连串提交压缩成一个单独的提交。 在变基信息中脚本给出了有用的指令:
123456789101112131415161718192021222324## Commands:# p, pick <commit> = use commit# r, reword <commit> = use commit, but edit the commit message# e, edit <commit> = use commit, but stop for amending# s, squash <commit> = use commit, but meld into previous commit# f, fixup <commit ...
Go 临时对象池pool
介绍
此介绍部分转载自 [1], 在此标明: 转载时请随底部声明一并注明出处。
临时对象池(pool)的设计目的是用来保存和复用临时对象,以减少内存分配,降低CG压力。
垃圾回收一直是Go语言的一块心病,在它执行垃圾回收的时间中,你很难做什么。
在垃圾回收压力大的服务中,GC占据的CPU有可能超过2%,造成的Pause经常超过2ms。垃圾严重的时候,秒级的GC也出现过。
如果经常临时使用一些大型结构体,可以用Pool来减少GC。
123456789101112131415161718192021222324252627282930313233343536373839package mainimport ( "fmt" "sync" "time")type structR6 struct { B1 [100000]int}var r6Pool = sync.Pool{ New: func() interface{} { return new(struc ...
C++ 关于Qt的ui自动槽函数
关于Qt的ui自动槽函数
首先,引入ui,你的ui相关控件的初始化就在与你自定义类同名的Ui::Widget中查看(当然这个Ui::Widget是我默认举得例子,具体与你自定义类名相同)。
1在这里面,你会发现里面定义了你再ui设计师界面中所拖拽的控件,而这些控件的初始化都在setupUi()这个方法中进行。->而这些都是由Qt帮你做的,大多时候你无需关心具体细节。
其次,如果你仔细观察,你会发现今天的主人公 ‘QMetaObject::connectSlotsByName();’
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117这个方法 ...

.png)