golang写acm模式笔试大坑
今天用go写的字节和网易笔试,一看题目都不难,但是莫名其妙超时或者不通过,后来仔细研究了一下发现如下两个坑:
1. 使用fmt.Scan()读输入数据很慢,今天有一道差分+前缀和的题,时间复杂度O(n),已经没有运算更快的写法了,一直给我算超时,搞了半天发现是fmt.Scan()的锅,换用bufio.NewScanner(os.Stdin),一次性读取scanner的字符串、再Split、再Atoi就可以,我在本地测试的使用scanner要比fmt.Scan()快100倍
2. 默认的bufio.NewScanner()其实有容量限制,为bufio.MaxScanTokenSize = 64*1024 = 65536个,也就是说默认情况下只能读取65536个byte的长度,如果读取的一行字符串的字节长度超过65536,就会报错bufio.Scanner: token too long,可以用scanner.Buffer()调大缓冲区最大读取大小解决
用了两个大厂笔试踩坑呜呜
1. 使用fmt.Scan()读输入数据很慢,今天有一道差分+前缀和的题,时间复杂度O(n),已经没有运算更快的写法了,一直给我算超时,搞了半天发现是fmt.Scan()的锅,换用bufio.NewScanner(os.Stdin),一次性读取scanner的字符串、再Split、再Atoi就可以,我在本地测试的使用scanner要比fmt.Scan()快100倍
2. 默认的bufio.NewScanner()其实有容量限制,为bufio.MaxScanTokenSize = 64*1024 = 65536个,也就是说默认情况下只能读取65536个byte的长度,如果读取的一行字符串的字节长度超过65536,就会报错bufio.Scanner: token too long,可以用scanner.Buffer()调大缓冲区最大读取大小解决
用了两个大厂笔试踩坑呜呜
全部评论
字节踩第一个坑,下午看到你回我的评论,改用scanner,成功踩到第二个坑
现在打算以后用 ReadString
也还好,看一下go的oj怎么写的就行,反倒是我一开始go写不顺手的时候转py,惊讶地发现py的闭包支持做的跟go不一样,不支持闭包外变量的修改,做函数内dfs就很不习惯
相关推荐
理性的杰克刷牛客:ai肯定要有的,最好学一下agent方向加一个智能客服什么的进去,并且多加点什么skill,mcp啥的,另外你现在的项目深度有些浅,这些功能都太简单了,而且也不是真正能扛高并发的实现,没有什么太大的亮点,可以去网上找点更有深度的项目。可以先投一些中小厂,有实习经历以后再去大厂,你现在这个大厂可能机会不大
点赞 评论 收藏
分享
04-29 12:45
内蒙古大学创业学院 C++ bangbangba...:感觉三个项目可以融在一起,比如上层是用手写的epoll,然后到tcp聊天层,然后你写了一个后台监控(不过我也不懂c++,但是感觉写一个大项目比三个小项目要好)
点赞 评论 收藏
分享
查看18道真题和解析