Python技术迷

外包天天晚上王者在线,却说没精力加班,怎么办?

刚刷到个贴子,说外包同事天天晚上王者排位火力全开,一提加班就说没精力,这事真让人哭笑不得。

Image

作为程序员,我觉得问题关键不是他打不打游戏,而是他有没有把交付做好。职场里讲的是价值,而不是你下班怎么玩。网友们有人吐槽这是摆烂,也有人说管不着别人。我部分同意:如果他影响了团队进度,那就不是“个人自由”,而是连累别人。

换个角度想,打王者可能是他缓解压力的方式,但加班是团队需要时的责任。就像代码里单个模块bug没修复,系统迟早挂掉。要么他就别接活,要么就把活干到位,别拿“没精力”当挡箭牌。

总的来说,职场靠的是结果导向,甭管下班你是打王者还是打太极,只要能按时交付,高效可靠,那才是真正的职业素养。【备注:文末可领最新资料】

面试题:验证IP地址

昨晚十一点多,我在公司楼下吹风,手机一震,我们组小李又来问:“哥,判断一个字符串到底是IPv4还是IPv6,有没有简单点儿的写法?”我嘟囔着还以为是八卦,结果一看是面试题,算了顺手聊聊思路,顺便把代码贴给你们,省得半夜翻文档。

给你一个字符串,比如“172.16.254.1”或者“2001:0db8:85a3:0000:0000:8A2E:0370:7334”,要判断它是“IPv4”、“IPv6”,还是“Neither”。这里我们按严格格式来:IPv4要四段十进制、每段0~255、不能有前导零(单独一个“0”除外);IPv6要八段、每段1到4位十六进制(0-9a-fA-F),不考虑“::”省略写法,面试里多数也是这么要求,省得扯一堆边界。

就是两个判定器:先看有没有点还是冒号。点就按IPv4规则切四段,一段一段校验;冒号就按IPv6切八段,每段看长度和字符合法性。其它情况直接“Neither”。注意空串、结尾多一个分隔符、段里有“+”“-”之类,都要一票否决。就这么直白。

defvalidIPAddress(queryIP: str) -> str:
if queryIP.count(".") == 3and":"notin queryIP:
return"IPv4"if _is_ipv4(queryIP) else"Neither"
if queryIP.count(":") == 7and"."notin queryIP:
return"IPv6"if _is_ipv6(queryIP) else"Neither"
return"Neither"

def_is_ipv4(s: str) -> bool:
    parts = s.split(".")
if len(parts) != 4:
returnFalse
for p in parts:
# 不能有空段
ifnot p:
returnFalse
# 只能是数字
ifnot p.isdigit():
returnFalse
# 前导零不行,除非就是"0"
if len(p) > 1and p[0] == "0":
returnFalse
# 数值范围
try:
            v = int(p)
except ValueError:
returnFalse
if v < 0or v > 255:
returnFalse
returnTrue

def_is_ipv6(s: str) -> bool:
    parts = s.split(":")
if len(parts) != 8:
returnFalse
    hexdigits = set("0123456789abcdefABCDEF")
for p in parts:
# 每段1~4位
if len(p) == 0or len(p) > 4:
returnFalse
# 只能是十六进制字符
ifnot all(ch in hexdigits for ch in p):
returnFalse
returnTrue

# 小测一下
tests = [
"172.16.254.1",               # IPv4
"172.16.254.01",             # 前导零 -> Neither
"256.0.0.1",                 # 超范围 -> Neither
"1e1.4.5.6",                 # 非纯数字 -> Neither
"2001:0db8:85a3:0000:0000:8A2E:0370:7334",  # IPv6
"2001:db8:85a3::8A2E:0370:7334",            # 有::省略 -> Neither(本实现不支持)
"02001:0db8:85a3:0000:0000:8A2E:0370:7334", # IPv6段前导零合法,但这段5位 -> Neither
"",                           # 空 -> Neither
]
for t in tests:
    print(t, "=>", validIPAddress(t))

我昨儿在便利店排队的时候想了下,面试里最爱卡三件事:第一,IPv4的“00”“01”这种,肉眼看着像,规则说不行;第二,IPv6别偷偷把“::”也实现了,除非题目明确要求,否则越写越乱;第三,分隔符边界,比如末尾一个点“1.1.1.”,split会给你空串,记得拦掉。还有个小细节,IPv4段里“+1”“-0”这种,isdigit()直接否,省心。

整活就是线性:按字符数扫描一遍,O(n),常数也小。空间除了分割出来的列表,没额外花里胡哨。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领