文章 43
评论 421
浏览 88541
停更公告

停更公告

本站停止更新 由于各种各样的原因,博客迁移至Hexo搭建的新博客https://inkdp.cn,文章已经全部迁移至新博客,本站短期不会停止服务,会保持运行在https://www.inkdp.cn,感谢Solo与Bolo为我服务的两年,江湖再见

2020年个人总结

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

leetcode-数组系列1

169.多数元素 解题思路: 利用哈希表存储每个字符出现的个数,出现次数大于n/2的即为多数元素 根据题意,多数元素的个数大于n/2,每次遇到多数元素就将个数+1,否则减一,值为负数时则证明当前选取的这个数不是多数元素,则更换多数元素继续循环(摩尔投票法) 上图来着,题169解解摩尔投票法 排序,取下标为len(nums)/2的值 示例代码: // 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 mapArr { if v > len(nums)/2 { return k } } return 0 } func majorityElement0(nums []int) int { mapArr := make(map[int]int) for _,v := ....

日刷leetcode(目录篇)

日刷leetcode(目录篇)

前言 谨以此贴记录我刷题的过程,那么我为啥要刷题呢 熟悉各互联网公司的算法题目,为找工作做准备。 复习以前学过的编程语言,LeetCode支持几乎所有主流编程语言,大家可以用不同语言来做题。 熟悉常见的算法和数据结构,LeetCode提供了交流平台,一些大神会将自己的解法贴出来共享,有些巧妙的解法实在令人叫绝,虽然几乎都是英文,但上面的国人也特别多(中文拼音名字>_<)。 学习别人的编程思维,加快编程的速度,避免常见的BUG。 以上内容摘抄自网络,纯属瞎说,真是的原因是: 因为上班工作做完后,不敢明目张胆的摸鱼 下班无聊不想打游戏 算法真的很弱 ...... 时过境迁,上次打开leetcode的时候还没有中文版,而现在已经有了--力扣。 由于篇幅的问题,我觉得5题一篇,话不多说。 目录: 日刷leetcode--简单版系列(一) 日刷leetcode--简单版系列(二) 日刷leetcode--简单版系列(三) 日刷leetcode--简单版系列(四) 日刷leetcode--简单版系列(五) 日刷leetcode--简单版系列(六) 简单篇暂停更新,后续打算系....

Go面试总结

Go面试总结

面试是一个互相博弈的过程,此贴用于记录个人在面试中遇到的各种问题以及解答(不定期更新中) 面试是一个运气问题,你总会遇到一个面试官,问你的问题你都会,当然你会的越多,这个概率就越高

算法的时间复杂度计算

算法的时间复杂度计算

写在前面    时间复杂度与空间复杂度直接决定着一个算法的好坏,而大多时候在设计算法是时间复杂度要优先于空间复杂度。 时间复杂度是什么(以下内容来着维基百科) 在计算机科学中,算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。例如,如果一个算法对于任何大小为 n (必须比 n0 大)的输入,它至多需要 5n3 + 3n 的时间运行完毕,那么它的渐近时间复杂度是 O(n3)。 为了计算时间复杂度,我们通常会估计算法的操作单元数量,每个单元运行的时间都是相同的。因此,总运行时间和算法的操作单元数量最多相差一个常量系数。 相同大小的不同输入值仍可能造成算法的运行时间不同,因此我们通常使用算法的最坏情况复杂度,记为 T(n) ,定义为任何大小的输入 n 所需的最大运行时间。另一种较少使用的方法是平均情况复杂度,通常有特别指定才会使用。时间复杂度可以用函数 T(n) 的自....

MySQL分页查询优化

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。 ....

Go爬虫初体验

Go爬虫初体验

前言   闲来无事的时候,偶尔也会看看漫画,但是鹅厂的操作大家都懂,想看最新的你就得给钱,本着白嫖精神,我找到了扑飞漫画,但是这网页的阅读体验一言难尽,他家的APP也是,动不动就加载失败,一等一半天。思来想去,还是弄个爬虫把图片都爬下来,然后想法弄到kindle里面岂不美哉。因为不会Python,所以只好用GO来写了,虽然没写过,但是可以现学嘛。 初识爬虫   网上找了下资料,go的写爬虫也太简单了吧,几行代码就搞定了,比如下面这样,几行代码就把整个页面拿到了。 package main import ( "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 } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(....

广州一年记

广州一年记

  随着房租和押金的缴纳,我定下了未来一年居住的房子,回头一看,来广州已经差不读一年有余。   一年的光阴辗转而逝,我从成都到了广州,从初入社会的应届生变成了一个初级社畜,从一无所有到有了那么一丢丢存款,我变了好多好多,又似乎啥也没变。   初到广州,城中村与高楼大厦组成的城市,让我感到无比陌生。在这个完全没有伙伴的城市,我感到孤独。开始了工作日两点一线,周末死宅在家的固定生活,就这样一年过去了。   在这一年里,我依稀记得我就出过一次门,那时元旦跨年夜,我决定出去走走,一个人看了电影,一个人吃了烧烤,一个人喝了小酒,那时我已习惯孤独,我开始学会享受孤独。在这样的环境下我开始自律,我开始习惯看书、写日记、记账、规划自己的道路...   我还是会整体每天没心没肺的嘻嘻哈哈,但是好像没有人再会和我一起欢笑,我的标志性的笑仿佛成了缓解尴尬的一种方式,我其实并不开心,但这又有什么关系,在这个常住人口一千万多人的城市,又有几个人关心或是在意你呢,收起自己的情绪,努力前进才是你该做的。   在这样环境下,我积压着大量的情绪无处发泄,太多太多的话无处倾述,身为话痨的我,也变得无话可说。偶尔与老友聊天....

Golang小技巧——不定时更新

Golang小技巧——不定时更新

1、函数返回值定义 一般的函数定义都是: func Test(a,b int) (int, int){} 然而go却可以这样: func Test(a, b int) (c,d int) {} 你可能觉得没什么,但是对于我这种懒人来说,这东西可太方便了,因为go没有 try...catch,所以所有的错误都需要自己手动抛出,一个函数里你可能有N个↓ if err != nil { return err } 实际中,你绝对不会只返回一个 err,可能还夹杂着各种乱七八糟的东西,写一次还好,写多了你真的不会烦吗?然而有了第二种定义方式,不过你又多少个返回值,只需要一个 return即可搞定, func (b buriedPoint) Retention() (channel, projectId, startTime, endTime string, list []dbmodel.BuriedPointKey, data []map[string]string, err error) { //... //return channel, projectId, startTime, en....

记一次蹭车事件

记一次蹭车事件

正文     清早起床,空气好好,骑着我扫来的哈喽,愉快的奔向公司。不巧的是遇到了人行道施工,我只好下车推着我的小自行车通过路障隔开的路段,由于是在机动车道,所以我小心翼翼,没走两步,好像有啥玩意倒了,两个路障一起倒了,砸向了一辆崭新的宝马,心里顿时咯噔一下,希望没蹭出啥毛病。   说时迟那时快,车主反映比我快多了,马上下册检查他的车辆,这次老天爷没站站我这把,门把手掉了点漆(如下图所示),当时我就慌了,这怕是2-300块钱又没了哦。把路障弄开后我诚恳的道歉并询问怎么办,车主随即表示,我这昨天才买的车,牌儿还没上呢,你这就给我弄掉漆了,这整个门都得重新喷漆,去4S店怎么也得千把块,你给我1000吧。当时就直接给我弄蒙了,满脑子嗡嗡的,怎么这么贵,宝马都这么牛批吗,今天是折在这儿了,这么多能不能不给。。。然后我就沉默了,他看我沉默,就问要不然报警,我一刚出社会没几天的程序员哪儿见过阵势啊,脑子依旧嗡嗡的,然后他就巴拉巴拉开始打电话,说的粤语我也听不懂,但是我开始清醒,此时,我的智商开始逐渐占领上风,我开始怀疑车把手掉漆是否要喷整个门,然后我开始在我的所谓的小圈子内寻找答案,并借助万能的搜....

高性能消息队列NSQ---GO--demo

高性能消息队列NSQ---GO--demo

前言   关于NSQ是什么,NSQ是做什么的,怎么启动,网上的资料太多太多,详情请移步分布式实时消息平台NSQ,里面讲的很详细,还附带demo。 客户端/生产者(producer)   NSQ发送消息非常简单,分两步完成: 创建Producer实例 调用Publish发送一个新的消息到指定的topic中 具体实现如下所示 func 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()) } } 服务端/消费者(consumer)   消费者用于接收指定topic中的消息,实现需分为3步: 调用NewConsumer为指定的主题/渠道创建消费者的新实例 ....

从零开始安装 solo 博客

从零开始安装 solo 博客

之前也写过类似的帖子,但是由于那时自己的各种原因写的不是特别好,所以今天写一个聚合帖,记录从购买服务器到安装solo然后通过nginx反向代理,最后升级https的全过程。此贴献给完全无基础的人,所以废话较多,见谅 1. 购买服务器 首先你得有自己的服务器,有的话就跳过。服务商可选的有很多,比如:阿里云、腾讯云、百度云、还有一些香港的服务商以及国外的(有特殊需求的可以考虑下)。腾讯和阿里对于新用户以及学生都有很大的优惠,配置的话如果只挂solo,买最低配1G1核1M即可。国内的几家都可以关注下,不定时会有很好的优惠活动。我比较推荐阿里云,前段时间刚买了一台3年才668多,不知道活动结束没有。阿里云购买服务器时会要求你安装系统(不知道可不可以不选),推荐选择centos。 2. 购买域名(可不买) 建议还是买一个域名,直接通过IP访问的话不是特别好。购买域名时不要盯着 .com,.cn这种比较热门的域名,往往很贵。还有尽量选择可备案的域名,否则就会像鼠鼠在碎觉一样只能挂载444端口上运行。可通过域名.信息查看可备案域名。如果你服务器买着国外的话似乎就不用备案。 3. 域名解析与备案 服务....

日刷leetcode--简单版(一)

日刷leetcode--简单版(一)

返回总目录 日刷leetcode--简单版 1.两数之后 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 解题思路 1 暴力法,双循环相加结果等于 target 就返回 示例代码 func twoSum(nums []int, target int) []int { for i := 0; i < len(nums); i++ { for j := i + 1; j < len(nums); j++ { if nums[i] + nums[j] ==target { return []int{i,j} } } } return nil } 运行结果 执行用时 :56 ms, 在所有 Go 提交中击败了 32.33%的用户 内存消....

日刷leetcode--简单版(二)

日刷leetcode--简单版(二)

返回总目录 日刷leetcode–简单版 26. 删除排序数组中的重复项 题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(nums); // ....

凡打不倒我的,必使我强大!!!—— 墨殇的技术博客