Python技术迷

某HR吐槽:面试了不下千人,我最反感求职者面试时一直追问说这个岗位是干什么的,这只会暴露你的不重视、无知,毫无自主思考性

刚看到个贴子,说有HR吐槽:面试了上千人,最反感求职者追问“岗位具体干啥”,觉得这是不重视、无知。

Image

我觉得这事吧,站在HR角度,确实希望候选人提前做功课,至少要知道岗位的大致职责,不然像是连简历都没读就跑来面试。但换个角度想,很多JD写得云里雾里,堆一堆“负责沟通协作、推动落地”这种话,求职者想问清楚细节,也很正常。

网友们的回复我看了看,有的说这是应聘者态度问题,有的觉得是岗位描述不透明。我比较认同后一种。岗位到底干什么,本来就是双向确认的环节,问清楚才能避免入职后鸡同鸭讲。与其觉得冒犯,不如HR也多点耐心,讲清楚对方未来要做的事,这才是负责任。【备注:文末可领最新资料】

面试题:赢得比赛的大学

小伙伴们我刚在公司楼下等外卖,顺手把这个题过了一遍…就是那个“赢得比赛的大学”,名字挺朴素,但别小看,很多同学在细节上丢分。啊对,我就按口语说说,别介意有点碎。

给一堆比赛记录,每条里有两所大学(或者直接有个winner字段),问最终哪所大学赢的场次最多。要是并列呢?一般按字典序最小,或者按出现最早,这个要看题目说法。没有特别说明我就用字典序吧,省事儿。

思路就两个字:计数

就是哈希表(dict)累加胜场。遍历每条比赛,把胜者的计数+1。最后从计数表里挑最大值;遇到并列,按字典序挑小的。数据量再大也就 O(n),内存 O(k)(k 是学校种类数)。这玩意儿稳定靠谱。

from typing import List, Dict, Tuple, Optional

defwinning_university(
    matches: List[Dict[str, str]],
    winner_key: str = "winner",
    tiebreak: str = "lex"# "lex" 或 "first"
)
 -> Optional[str]:

"""
    matches: 每场形如 {"home": "A", "away": "B", "winner": "A"} 或至少有 "winner"
    winner_key: 胜者字段名(有的题叫"winner"、"winner_university"之类)
    tiebreak: 并列时如何打破;"lex"按字典序,"first"按首次出现顺序
    返回赢得最多场次的大学;若无比赛返回 None
    """

ifnot matches:
returnNone

    wins: Dict[str, int] = {}
    order: Dict[str, int] = {}  # 记录首次出现顺序,给 tiebreak="first" 用
    idx = 0

for m in matches:
if winner_key notin m:
# 如果没给 winner,就根据其他字段自己判断;这里保守处理
raise ValueError("比赛记录缺少胜者字段")
        w = m[winner_key].strip()
if w == "":
# 空 winner 跳过或报错,看题意;我这里跳过
continue
if w notin order:
            order[w] = idx
            idx += 1
        wins[w] = wins.get(w, 0) + 1

ifnot wins:
returnNone

if tiebreak == "first":
# 先按胜场降序,再按首次出现升序
        best = min(
            wins.items(),
            key=lambda kv: (-kv[1], order[kv[0]])
        )
else:
# 默认字典序打平:先按胜场降序,再按学校名升序
        best = min(
            wins.items(),
            key=lambda kv: (-kv[1], kv[0])
        )
return best[0]


# 小测一下
if __name__ == "__main__":
    data = [
        {"home": "PKU", "away": "THU", "winner": "THU"},
        {"home": "FDU", "away": "PKU", "winner": "PKU"},
        {"home": "SJTU", "away": "THU", "winner": "THU"},
        {"home": "FDU", "away": "THU", "winner": "FDU"},
        {"home": "PKU", "away": "SJTU", "winner": "PKU"},
    ]
    print(winning_university(data))              # 默认字典序打平
    print(winning_university(data, tiebreak="first"))

遍历一次 O(n),找最大也就 O(k)。这俩都线性,放心跑。

昨晚十一点多小李还在问我:1)winner 字段可能有前后空格,strip 一下,别阴沟里翻船。2)并列规则一定看清楚,有的题要输出所有并列大学,用列表排序返回。3)大小写不统一?统一成大写或小写再计数。4)输入可能为空或全是脏数据,记得返回 None 或空数组,别抛异常把评测机吓到。

行了我外卖到了…你先把并列规则定一下,要改我那行 key 函数就行,其他不动。

-END-

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

🔥虎哥私藏精品🔥

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