现在大厂全部都在卡学历。。
刚看到个贴子,说大厂现在全都在卡学历,有位阿里出来的高级架构师,跳槽外企干了两年,结果离职三周面试都没回音,要不是211/985统招本科就直接被pass,感觉真的挺无语😓。
其实网友们有说“能力重要”“学历只是敲门砖”,但现在很多大厂的HR压根不跟你谈技术,简历扫一眼,第一学历大专直接拜拜。说白了,现在招聘流程越来越像筛身份证,连面试的机会都不给你。
不过话说回来,学历卡得这么死,也是因为卷太厉害,岗位少人多,HR懒得多花时间,直接用学历来过滤。你说无解吗?未必。毕竟技术牛的人在小厂、创业公司,甚至搞自由职业,也能混得开。
但大厂想混饭吃,学历的门槛可能越来越高了。现实点讲,提升自己是王道,但别把希望全押在大厂,路还多着呢。💪【备注:文末可领最新资料】
面试题:位1的个数
下班地铁上,正好碰到隔壁部门那个搞嵌入式的小王。他突然问我,"你用Python写过那种‘位1的个数’的题没?"我当时有点懵,手机掉了一下地上,差点把屏幕摔了...反正路上也没啥事儿,我俩就这么边聊边回家了。
其实这个"位1的个数"啊,英文里叫 Hamming Weight 或者 popcount,面试特别喜欢考。什么意思呢?给你一个无符号整数,让你数一下它的二进制表示里有几个1。比如说9,二进制就是1001,所以答案就是2,挺简单的,看着没啥难度,但代码其实能写出很多种骚操作。
说实话最最直观的写法,就是不断右移,判断最后一位是不是1,比如:
defhammingWeight(n):
count = 0
while n:
if n & 1: # 判断最后一位是不是1
count += 1
n >>= 1# 右移一位
return count
这种写法就跟我早上起来迷迷糊糊刷牙那感觉,最直接,脑子还没转过弯的时候就用这招...
不过你要说最骚、最极致的写法,那得提一下Brian Kernighan算法(名字特长,经常记不住,反正面试官爱问)。这个做法的精髓就是,每次把n和n-1做&运算,相当于每次都把最右边的那个1抹掉——你们自己脑补下那个二进制怎么变的哈,就像剃胡子,每次都剃掉最右边那根...所以代码是这样:
defhammingWeight(n):
count = 0
while n:
n &= n - 1
count += 1
return count
上次小李还跟我吐槽说他一直没想明白为啥能这样抹1,其实自己写个数,比如13是1101,每次n & (n-1)看看结果就行,直观。
再说个我亲身踩坑的,之前写刷题的时候偷懒,直接用Python的bin函数,像这样:
defhammingWeight(n):
return bin(n).count('1')
其实你要是面试碰到比较佛系的公司,或者人家不要求你不用库,这一行就解决了,像小黄在家带娃写代码就喜欢这样糊弄,但我劝你别在大厂面试现场这么写,面试官肯定追问底层原理。
对了,突然想起来,前阵子加班加到凌晨,我手一抖把n写成负数了,python处理负数二进制跟别的语言还不太一样(补码啥的),所以记得题目一般说是"无符号整数",你要多想想平台和数据类型,尤其是C或者Java,32位64位差别还挺大。Python这玩意直接无限精度,也坑...
说回正题,其实你再细抠还能玩位运算分治啥的,比如LeetCode上有高赞用掩码的:
defhammingWeight(n):
n = (n & 0x55555555) + ((n >> 1) & 0x55555555)
n = (n & 0x33333333) + ((n >> 2) & 0x33333333)
n = (n & 0x0f0f0f0f) + ((n >> 4) & 0x0f0f0f0f)
n = (n & 0x00ff00ff) + ((n >> 8) & 0x00ff00ff)
n = (n & 0x0000ffff) + ((n >> 16) & 0x0000ffff)
return n
不过你让我手写,半夜打游戏回来我估计能写错,还不如直接老老实实一个个数。反正平时工作中真用到这种位运算还挺少的,主要还是算法面试喜欢折腾。
最后再说一句,很多人一看是Python就觉得位运算没必要,其实正经写性能关键的部分还是挺香的,像搞爬虫或者加密那帮哥们,私下老玩这些小技巧。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领