MongoDB GO Driver 实现模糊查询
使用MongoDB官方驱动实现MongoDB GO Driver 实现模糊查询
使用GitHub Action自动部署Hexo
本文主要介绍如何通过GitHub Action自动部署Hexo博客到GitHub Page以及自己的服务器
如何读一本书
阅读是一个很好的习惯,那么我们该如何取阅读一本书呢,是走马观花的浏览,还是系统的阅读呢?系统的阅读有有助于我们对文章的理解和知识的掌握。
2020年个人总结
前言
2019年总结
不知不觉间,一年又这么过去了,每到了这个时候总会去感慨一年过得是那么快,今年虽然因为疫情的原因,但是感觉自己过得还算很精彩,今年也依旧发生了很多故事,前半年比较平淡,疫情后就正常上班下班,下半年比较刺激,离开了广州,辗转反侧了几个城市,一边看路边的风景,一边找工作,历时三个月,最后回到了重庆,在曾经的大学附近找到了一份自己满意的工作并安定下来。
时间轴
1月17日:下班后直奔姑姑家,准备第二天坐车回家
1月18日:启程回家
1月20日:回到阔别半年的家乡,倍感亲切
2月21日:疫情解封,返程广州
2月26日:返岗上班
6月23日:学校发放毕业证,终于毕业
6月25日:搬家去公司附近
8月7日:离职,准备回重庆
8月13日:结束单身,回到云阳
8月18日:去重庆,开始找工作
9月13日:前往成都
9月24日:回到重庆,回家过国庆
10月5日:再回广州
10月9日:飞往杭州,与女友分手
10月24日:再回重庆,结束流浪
11月1日:师父生日上,遇到她
11月3日:再次结束单身,与她在一起
11月13日:找到理想工作工作
11月15日:时隔三个 ...
leetcode-数组系列1
169.多数元素
解题思路:
利用哈希表存储每个字符出现的个数,出现次数大于n/2的即为多数元素
根据题意,多数元素的个数大于n/2,每次遇到多数元素就将个数+1,否则减一,值为负数时则证明当前选取的这个数不是多数元素,则更换多数元素继续循环(摩尔投票法)上图来着,题169解解摩尔投票法
排序,取下标为len(nums)/2的值
示例代码:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253// map解法func majorityElement(nums []int) int { mapArr := make(map[int]int) for _, v := range nums { if _, ok := mapArr[v]; !ok { mapArr[v] = 1 } else { mapArr[v]++ } } for k, v := range map ...
MySQL分页查询优化
前言Mysql慢查询优化,一直是开发中不可避免的问题,当然面试的时候也是。
今天的面试中,面试的最后一道题:“如何提供分页查询”,我自信的写下 LIMIT,认为此题十拿九稳,面试官此后的问题为当 offset到一定数量的时候怎么优化,因为之前没有遇到过类似的问题,而且也没有量特别大的分页,所以这个问题只能作罢。
复盘回家后弄了个大概有快20W数据的表,实测一下,查询速度是否会因为 limit边大而边长。
如上图所示,同样的查询条件下,因为 limit增大查询速度确实变慢了很多。
why?对于limit子句 LIMIT [offset,] row_count,官网说明如下
Theoffset specifies the offset of the first row to return. Theoffset of the first row is 0, not 1.
Therow_count specifies the maximum number of rows to return.
翻译一下就是:
offset参数指定要返回的第一行的偏移量。第一行的偏移量为0,而不是1。
coun ...
Go爬虫初体验
前言 闲来无事的时候,偶尔也会看看漫画,但是鹅厂的操作大家都懂,想看最新的你就得给钱,本着白嫖精神,我找到了扑飞漫画,但是这网页的阅读体验一言难尽,他家的APP也是,动不动就加载失败,一等一半天。思来想去,还是弄个爬虫把图片都爬下来,然后想法弄到kindle里面岂不美哉。因为不会Python,所以只好用GO来写了,虽然没写过,但是可以现学嘛。
初识爬虫 网上找了下资料,go的写爬虫也太简单了吧,几行代码就搞定了,比如下面这样,几行代码就把整个页面拿到了。
12345678910111213141516171819202122package mainimport ( "fmt" "io/ioutil" "net/http")func main() { resp, err := http.Get("https://www.baidu.html") if err != nil { fmt.Println("http get error", err) return & ...
广州一年记
随着房租和押金的缴纳,我定下了未来一年居住的房子,回头一看,来广州已经差不读一年有余。
一年的光阴辗转而逝,我从成都到了广州,从初入社会的应届生变成了一个初级社畜,从一无所有到有了那么一丢丢存款,我变了好多好多,又似乎啥也没变。
初到广州,城中村与高楼大厦组成的城市,让我感到无比陌生。在这个完全没有伙伴的城市,我感到孤独。开始了工作日两点一线,周末死宅在家的固定生活,就这样一年过去了。
在这一年里,我依稀记得我就出过一次门,那时元旦跨年夜,我决定出去走走,一个人看了电影,一个人吃了烧烤,一个人喝了小酒,那时我已习惯孤独,我开始学会享受孤独。在这样的环境下我开始自律,我开始习惯看书、写日记、记账、规划自己的道路…
我还是会整体每天没心没肺的嘻嘻哈哈,但是好像没有人再会和我一起欢笑,我的标志性的笑仿佛成了缓解尴尬的一种方式,我其实并不开心,但这又有什么关系,在这个常住人口一千万多人的城市,又有几个人关心或是在意你呢,收起自己的情绪,努力前进才是你该做的。
在这样环境下,我积压着大量的情绪无处发泄,太多太多的话无处倾述,身为话痨的我,也变得无话可说。偶尔与老友聊天时, ...
Golang小技巧——不定时更新
1、函数返回值定义一般的函数定义都是:
1func Test(a,b int) (int, int){}
然而go却可以这样:
1func Test(a, b int) (c,d int) {}
你可能觉得没什么,但是对于我这种懒人来说,这东西可太方便了,因为go没有 try...catch,所以所有的错误都需要自己手动抛出,一个函数里你可能有N个↓
123if err != nil { return err}
实际中,你绝对不会只返回一个 err,可能还夹杂着各种乱七八糟的东西,写一次还好,写多了你真的不会烦吗?然而有了第二种定义方式,不过你又多少个返回值,只需要一个 return即可搞定。
12345func (b buriedPoint) Retention() (channel, projectId, startTime, endTime string, list []dbmodel.BuriedPointKey, data []map[string]string, err error) { //... ...
高性能消息队列NSQ---GO--demo
前言 关于NSQ是什么,NSQ是做什么的,怎么启动,网上的资料太多太多,详情请移步分布式实时消息平台NSQ,里面讲的很详细,还附带demo。
客户端/生产者(producer) NSQ发送消息非常简单,分两步完成:
创建Producer实例
调用Publish发送一个新的消息到指定的topic中具体实现如下所示1234567891011func main(){ cfg := nsq.NewConfig() nsqd := "127.0.0.1:4150" producer, err := nsq.NewProducer(nsqd, cfg) if err != nil { log.Fatal(err) } if err := producer.Publish("test", []byte("Hello NSQ")); err != nil { log.Fatal("publish error:" + err.Error ...