Python技术迷

月薪2万,在大厂干了10年被裁了,拿了30万赔偿金,五年后HR联系我,问我愿不愿意回去,但要归还30万,我该回去吗?

刚看到个贴子,说的是:月薪2万,在大厂干了10年被裁,拿了30万赔偿。五年后HR又来问,想回去可以,但钱得退回去,楼主纠结要不要回。

Image

帖子内容其实很典型,大厂兜兜转转,像分手多年又被前任联系。网友回帖我看了看,有人说“回,稳定最重要”,也有人直接劝“别回,吃相太难看”。

怎么说呢,我更偏向后者。赔偿是当年合同白纸黑字给的,不是借的,还让人退钱再回去,本质就是想低成本买回熟练工。

从我的角度看,这事不是念不念旧情,而是值不值。五年过去,岗位、话语权、发展空间都不一样了,很可能是“原地返厂”,还自降筹码。

总的来说,职场别被情怀绑架。公司算的是账,个人更要算清前途账,稳住自己,比回头更重要。

面试题:平均工资:部门与公司比较

昨天晚上快十一点,我还在公司楼下啃汉堡,HR 群里有人发了一句:”东哥,你帮我看下各部门平均工资跟公司整体比怎么样?是不是技术搬砖的又被压价了?“ 我一听这话就来劲了,这不就是算法+八卦的完美结合嘛 😂,顺手就拿这事当题目讲给你们听。 、 简单说就是: 一家公司一堆员工,每个人有三个信息:部门、名字、工资。现在要算——

  • 公司整体的平均工资
  • 每个部门自己的平均工资
  • 然后判断:这个部门的平均工资,是高于公司整体,还是低于,还是差不多

最后可以给出一个结果,比如:

  • “技术部:高于公司平均”
  • “市场部:低于公司平均”
  • “行政部:等于公司平均(这一般不太可能…浮点数你懂的)”

我之前写 Postgres 跟 MySQL 压测的时候,也干过类似的分组统计,只不过那回是在数据库里算平均,这次咱在 Python 里算而已

别一上来就想复杂的,脑子里先想一圈:

  1. 想要“公司平均工资”,是不是得把所有人的工资加起来、再除以人数?
  2. 想要“部门平均工资”,那就是每个部门单独加工资、单独数人数、再相除。
  3. 比较的时候,就拿 部门平均 跟 公司平均 比较一下,大了就是 high,小了就是 low,差不多就当 equal。

关键只是一件事:一边遍历员工,一边把这些统计信息先攒起来。 就跟点外卖一样,你不会每来一单就结一次账,你先把所有菜加进购物车,最后一算总价,对吧。

Python 大概怎么写

直接上个可跑的小例子,你们自己改字段名就能用:

from typing import List, Dict, Any

defcompare_dept_salary(employees: List[Dict[str, Any]]) -> Dict[str, str]:
"""
    employees 结构类似:
    {
        "name": "张三",
        "dept": "技术部",
        "salary": 15000
    }
    """

ifnot employees:
return {}

# 1. 公司总和 & 人数
    total_salary = 0
    total_count = 0

# 2. 部门维度的 sum & count
    dept_sum = {}
    dept_count = {}

for emp in employees:
        salary = float(emp["salary"])
        dept = emp["dept"]

        total_salary += salary
        total_count += 1

        dept_sum[dept] = dept_sum.get(dept, 0.0) + salary
        dept_count[dept] = dept_count.get(dept, 0) + 1

    company_avg = total_salary / total_count

# 3. 对比部门平均和公司平均
    result: Dict[str, str] = {}
    eps = 1e-6# 浮点数误差判断

for dept in dept_sum:
        avg = dept_sum[dept] / dept_count[dept]
if avg - company_avg > eps:
            result[dept] = "HIGHER_THAN_COMPANY"
elif company_avg - avg > eps:
            result[dept] = "LOWER_THAN_COMPANY"
else:
            result[dept] = "EQUAL_TO_COMPANY"

return result

你看,整件事就干了三件小事:

  • 一边遍历,一边统计公司总和、部门总和
  • 统一算一个公司平均
  • 再给每个部门算平均,挨个比较

时间复杂度就是 O(n),走一遍员工列表就搞定了,不会有那种一会儿 Redis 一会儿 MQ 那种“各种默认配置坑你一次”的情况

这个题表面看是“平均工资”,实际上考的都是老三件:

  • 会不会按 key 分组做统计(部门就是那个 key)
  • 会不会一边遍历一边累计(不要无脑多重循环)
  • 会不会处理一点点边界情况(空列表、小数精度)

你要是再骚一点,用 collections.defaultdict 写,会更短;或者用 pandas 一行 groupby 就完事儿。不过面试的时候,老老实实用 dict 写,思路清晰一点,更安全。

行,我先去泡个咖啡,等会儿要给我们组的小李讲这个题,他刚被 HR 问完工资的问题,整个人都不好了 😅

-END-

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

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB