go面试算法系列记录

面试 最近从阿里离职,开始准备面试,刷了一个月左右的leetcode,然后实践出真知,去面试了几家公司。 shopee 算法一面 螺旋矩阵,反向螺旋矩阵 描述要求 给定一个n x n的,打印出一个螺旋矩阵,比如: 输入n= 3, 输出,则打印 9 8 7 2 1 6 3 4 5 思路和解决 其实考察的是对数组的理解,还有矩阵的理解,就是找到矩阵的上下左右边界,遍历即可。反向的话,无非是从高到低遍历,正向的话,是从低到高遍历。 代码 func main() { matrix := generateMatrix(3) printMatrix(matrix) } func printMatrix(matrix [][]int) { if matrix == nil || len(matrix) == 0 { return } n := len(matrix) for i := 0; i < n; i++ { for j := 0; j < n; j++ { fmt.Printf("%d ", matrix[i][j]) } fmt.
Read more →

How to install archlinux on a m1 mac

Reason I just have installed archlinux on a m1 mac. The reason is that I have a m1 mac. How to install Like this: Download the archlinux iso Mount the iso Copy the archlinux folder to the root of the iso Unmount the iso Boot the iso Install the archlinux Reboot the mac Enjoy your new linux wait wait ??? right now is 2022, why the steps are so complicated?
Read more →

华为社招机考-字符串解压缩

缘起 最近参加华为的社招,有个牛客网的机考题。总分400分,共两道题,任选一道题,160分即可算即可。 从网上搜索了下,题目是这样的 字符串解压缩 题目介绍 将一段压缩后的字符串解压缩,并且排序输出。 解压规则: 每个字符串后面跟着一个数字,表示这个字符串的重复次数。例如,”a5”解压后的结果为”aaaaa”;’abc3’解压后的结果为”abcabcabc”。 排序规则: 1、根据每个字符串的重复次数升序排序,然后输出结果。例如,”a3b2”,输出的结果为”bbaaa”。 2、如果字符重复次数一样,则根据ASCII编码顺序做升序排序,然后输出结果。例如,”b2a2”,输出的结果为”aabb”。 输入描述: 输入的原始字符串仅包含字母与数字 输出描述: 输出的结果字符串仅包含字母 示例1 输入 a11b2bac3bad3abcd2 输出 abcdabcdbbbacbacbacbadbadbadaaaaaaaaaaa 我的实现 func decompress(s string) string { // using map to store freq freq := make(map[string]int) var key = "" var num = 0 for i := 0; i < len(s); i++ { v := s[i] if v >= '0' && v <= '9' { //store string frequency num = num*10 + int(s[i]-'0') //for keeping get numbers for i+1 < len(s) && s[i+1] >= '0' && s[i+1] <= '9' { num = num*10 + int(s[i+1]-'0') i++ } // set freq freq[key] = num //set key = "" and num = 0 key = "" num = 0 } else { // set new key key = key + string(v) } } // sort nums freq low to high sortRes := sortFreq(freq) //print numbers var res = "" for k := 0; k < len(sortRes); k++ { f := freq[sortRes[k]] for j := 0; j < f; j++ { res = res + sortRes[k] } } return res } type kv struct { Key string Value int } func sortFreq(m map[string]int) []string { var kvs []kv for k, v := range m { kv := kv{ Key: k, Value: v, } kvs = append(kvs, kv) } sort.
Read more →

Go slice的一个坑

问题 最近在刷leedcode,求二叉树的路径和,给定一个二叉树,求所有符合条件的路径。原题见 113. Path Sum II 这道题需要遍历所有的节点,并且记录遍历路径上的节点,可以使用回溯法,深度优先的方法。 不过最近用习惯了广度优先的方法,把二叉树变成一个有序的队列,这种思想很好玩,把多个选择的,需要遍历的变成一个有序的来进行遍历即可,就是一个万能模板。 下面贴下代码 var result [][]int var ch = make(chan *TreeNode, 100) var sumChan = make(chan int, 100) var nodes = make(chan []int, 100) for len(ch) > 0 { for i := 0; i < len(ch); i++ { //获取当前节点 cur := <-ch //获取父节点的总和 parentSum := <-sumChan //获取父节点的所有路径节点序列 parents := <-nodes //当前节点的总和 curSum := parentSum + cur.Val //当前节点的序列 curNodes := append(parents, cur.Val) if cur.Left == nil && cur.
Read more →

«七年就是一辈子»读后感

Read more →

Now-Go-Build-Werner-Vogels 观后感

Read more →

别让眼界限制了你

前言 人是会成长的。 人跟人的区别就是,有些人是吃了亏后才长大的,有些人是直接有人指点后长大的。 简单分享下自己最近十年吃了没文化的亏。 吃亏一:比特币的认知 我是在上大学期间知道比特币的。 当时是2013年,价格从年初13美元涨到高峰期1000美元。得知的是挖矿就能挖到,一个就可以卖几百美元,自己当时每月生活费只有1000元,挖一个的话,一个月生活费就有了。 所以在我的华硕AMD笔记本上安装了挖矿程序,配置好,开机挖了一天,屁都没有挖到,而后就结束了,也没有深入去研究,当时对比特币的认知,只是了解到这是一个搞外快的。 2014年大学毕业,工作后自己有了点钱,时间来到了2015年,这时候自己又开始关注比特币了,对比特币有了个中等程度的研究,知道这个是未来,开始看一些文章,准备买一些比特币。年少的我看了一些国内的所谓科技博客、媒体文章,文章里充斥着一些交易所的黑暗爆料,交易所坐庄、低价买高价卖,中间吃点等,自己就信以为真,为了不让交易所赚自己钱,又错过了第二次上车的机会。 2020年,9月份左右,比特币又开始涨起来了,这次认真分析并且研究透彻,但我又害怕风险,时间拖了下去。刚好10月1日,马云在上海外滩金融峰会的演讲,他讲到,做没有风险的创新,就是最大的风险。同理可证,如果一个投资没有了风险,那就没有了收益。马老板的一番话,给了我另外的见解,所以果断买入了比特币,同时看了下虚拟货币排名,发现以太坊排名第二,但比比特币便宜的多,想着就多买几个,反正亏了就当打水漂了。 我得到的教训: 不看国内的新闻、文章等,卸载各种国内新闻app、微博、资讯app,仅保留了微信。 2018年开始到现在,我也过的好好的:) 投资有风险,风险越大,收益越大 要去关注新鲜事物,并且有自己的研究和认知,要独立思考 吃亏二:技术的认知 我的10年技术人生 c++ -> 易语言 -> php -> js -> node -> go -> java 我的技术启蒙是从大学的 c++ 课程开始的,虽然当时的课程索然无味,但我觉得编写c++很酷,可以操作计算机,避免重复劳动。 兴起-贴吧抢楼 真正让我燃起对技术的热情是百度贴吧抢楼。大学的时候整天泡在贴吧,自己混学校贴吧,混一些小说的贴吧。贴吧是有等级的,需要经验才能升级,所以需要签到,发帖,抢楼,尤其是抢二楼,可以得到别人的回复,可以得到更多贴吧经验,实现快速升级。 插入个题外话,贴吧是一个很好的论坛产品,是我最爱之一,无人超越,要不是sb百度过度商业化,铺天盖地广告,也不会变成现在的垃圾站。 这时候开始鼓捣 易语言 ,写了一个windows软件,名称叫做「黑猫抢二楼」,分发给自己的吧友,自己的小弟,软件支持以下功能: 登陆百度账户 指定抢几楼(比如2楼) 一键转帖(搬运帖子) 验证码,百度的验证码是一个九宫格的汉字验证码,这个我当时都忘了自己是怎么支持的,当时花了一天搞这个,不知不觉就过去了,犹记得当时搞出来后的兴奋样子 后续产生一个新问题,抢二楼需要挂着机器,需要自己开着电脑,但我们宿舍晚上是要断电的,断电后,电脑没电,也没有网了,晚上不能抢了。 当时是2013年,各种应用容器百花齐放,比如google的gae,新浪的sae、百度的bae,因为玩百度贴吧,所以就用到了bae,心想百度自己的机器,延迟肯定是最低的,抢楼快。而且bae是支持 php 代码的,只要写好代码,上传上去,设置好定时,一分钟执行一次。也是从这里开始接触到了php,这下子打开了新的大门,原来代码可以这样用,可以这样玩,可以做这么多事情,把贴吧抢二楼换成了php版本,挂在了bae上。而且写了一个教程,分发给了几个同学和吧友,遥想当年,各个热门小说吧的二楼都被我们霸占了,没有人抢得过我们,一时风头无两。 泡贴吧的过程中,又刷到了chrome、firefox吧,此时开始学习 js,接触到了油猴,可以自己定制贴吧样式,去广告,回帖加小尾巴,js+chrome,所见即所得,太棒了,一度认为js是最好的语言。 第一份工作 2014年毕业,参加工作后,进入了一个人数10+的小公司,干了半年广告运营。当时业务发展较快,写代码的就一个,需求却很多,技术缺人。当时的技术大哥得知我之前用过php写过软件,就发给我一个 node 的教程,让我看一下,不懂得问他,当时被那连环的callback搞晕了,仅仅记住了怎么用,why 我是不知道的,不过当时也是缺人,我看完文档,实现一个小功能,而后就直接上了,直到后续整个项目交接给我自己维护。 2016年,无事可做,另外一个同事不会node,但打算用 php 重构 node 之前的代码,又重新写了一遍php,当时会node后,我是瞧不起php的:) 2016年,同年,公司开始搞很多站群,淘宝买了一堆php的cms 站点,开始学习运维,各种 shell 脚本玩的很溜,因为流量大,图片都放在了cdn。又由于要更新网站内容,都是复制粘贴操作,看到cms有一个接口可以提交更新,就开始学习爬虫,搞成自动化任务,每天自动爬一些资讯,然后post到cms。这时候开始学习 go 这里面有两点,一个是运维,当时看了鸟哥的linux私房菜,tcp ip 详解,shell脚本写的很多,把很多工作都自动化掉了,也让我对运维有很深的执念,以至于2017年很想做一个运维,当个划水的运维。直到后来到大公司,发现根本不是那回事,而且运维也早已经被sre给取代掉了。 另外一点是自己开始学习go,写了很多爬虫,爬一些资讯、八卦、优惠信息。go真的小巧,不占内存,写爬虫分分钟,对于内容而言,就是首页、列表页、详情页三个页面,采集规则落一下,而后监控一下更新就可以的。当时每天上班都是划水,打游戏,看书。当年竟然看了80本书,可见我有多么闲。 第二份工作 2017年,从北京来到了杭州,进入一家云通信公司,人数100+,这家公司技术栈就比较现代了(相比较原来北京的小公司),技术栈是 java+mq+mongo+redis+jstorm+odps.
Read more →

谈谈加密货币 下一波浪潮

Read more →

如何优雅地在软路由上挖矿-chia挖矿

缘起 又到一年618,家里软路由上挂载的移动硬盘已经5年了,十分担心它突然一天就驾鹤西归,没有一句临别赠言。所以开始物色新的移动硬盘,结果发现由于硬盘币chia的火热,大容量硬盘已经高了50%以上。 硬盘价格肯定是美亚便宜了,亚马逊海外购买了一个wd mybook 8T 的硬盘,含税到手价1100左右。 折腾硬盘 硬盘格式化 买来的硬盘默认格式exFat,由于自己不需要在windows 和 mac 混用,而且是挂载在自己的软路由使用的,所以直接格式化成linux 友好的 ext4的格式 fdisk /dev/sdb # 删除已有分区,重新建立一个linux分区 mkfs.ext4 /dev/sdb1 # 格式化成ext4 mount /dev/sdb1 /data #挂载到/data 目录备用 硬盘参数&速度测试 smartctl -a /dev/sdb 各参数含义,可以看看你的硬盘是不是全新的,通电时间多少 Temperature_Celsius 温度 Power_On_Hours 通电时间 Power_Cycle_Count 通电周期 我的硬盘通电时间是0,看样子没有被使用过 型号是 WD80EDAZ-11TA3A0, 不是氦气盘,是一个空气盘 5400 rpm 256m cache 使用pv 命令测试下硬盘的速度 fallocate -l 1G /tmp/test.img pv /tmp/test.img /data/test.img 硬盘是通过usb3.0 连接在软路由上的,测试写速度是200MiB+,还是可以的,不愧是企业级硬盘 老硬盘到新硬盘 老硬盘全部复制到新硬盘,让老硬盘光荣退休,而不是在工作岗位猝死 小试chia挖矿 闲着也是闲着,刚好试下硬盘挖矿,非专业韭菜入场了 pre: 官网教程直接上,安装好备用 https://github.com/Chia-Network/chia-blockchain/wiki/INSTALL#centosred-hatfedora 一:chia 钱包设置&查看 chia keys generate #生成钱包 chia keys show --show-mnemonic-seed #查看钱包 可以看到你的公钥,私钥,私钥是以24个助记词来展示的,记好备用
Read more →

谈谈加密货币-为啥要有加密货币

Read more →