京东p7员工 什么级别_阿里巴巴P8/P7是什么级别?阿里的分级是怎样的?

本文介绍了阿里巴巴P4-P7级别的详细要求与薪酬范围,解析了不同职级的具体职责和技术路径,为求职者提供了宝贵的参考。

145549ec5cc618aac7838e6ac36a93fc.png

01P 序列和 M 序列

阿里的等级,简单的来说可以认为是 P 序列和 M 序列,因为阿里巴巴是从B2B发家的,那时候需要管理大量的销售,所以建立了强大并且领先的管理体系,这就是 M 序列,随着技术的重要性不断的提高,目前 M 序列已经不太对中下层员工开放了,所以一般都是走 P 序列,也就是“技术”路线,这里的技术是泛技术、专业能力,不是指计算机。所以做销售的也是可以是 P,做产品、运营、市场的也是 P。

02岗位和职级

阿里是典型的岗位和职级分开的,所以大部分人也不在意 Title,比如大家经常会提到的经理、总监啥的,阿里提到的很少,只是对外的时候为了个人形象,可能给自己挂个什么总经理、总监的名片标志,你收到一个名片上面写上 xxx 总经理,但是其实可能是一个 P7 的专家。

岗位和职级分开的一个好处就是可以随时响应组织变化,阿里非常非常重要的一个价值观就是拥抱变化,所以阿里每年也是常态的组织结构调整,今年可能是我带领这个团队、这个业务,明年我可能不带团队了都有可能。当然还有一个重要的作用是让那些有技术的同学可以享受更好的待遇(传统企业里,资源和待遇都是聚焦在管理者身上),这样一个有意思的现象是:我的小弟拿的钱可能会比我还要多,这在阿里也是比较普遍的现象,也有合理性和必然性。

03P4-P14 的通用标准描述

阿里官方的定义是从P1-P14,11年以前还会招P4,之后就再也没有了,校招生都是从P5+起。

我先给大家看看 P4-P14 的通用标准描述:

P4

1)有相关专业教育背景或从业经验;

2)在专业领域中,对公司职位的标准要求、政策、流程等从业所必需了解的知识处于学习成长阶段,尚需要主管或高级别人员对负责的任务和完成的产出进行清晰的定义和沟通,并随时提供支持以达到要求;能配合完成复杂任务;

3)在专业领域,具有学习能力和潜能。

P5

1)在专业领域中,对公司职位的标准要求、政策、流程等从业所必需了解的知识基本了解,对于本岗位的任务和产出很了解,能独立完成复杂任务,能够发现并解决问题;

2)在项目当中可以作为独立的项目组成员;

3)能在跨部门协作中沟通清楚。

P6

1)在专业领域中,对公司职位的标准要求、政策、流程等从业所必需了解的知识理解深刻,能够和经理一起探讨本岗位的产出和任务,并对经理具备一定的影响力;

2)对于复杂问题的解决有自己的见解,对于问题的识别、优先级分配有见解,善于寻求资源解决问题;也常常因为对于工作的熟练而有创新的办法,表现出解决复杂问题的能力;

3)可独立领导跨部门的项目;在专业方面能够培训和教导新进员工。

P7

1)在专业领域,对自己所从事的职业具备一定的前瞻性的了解,在某个方面独到,对公司关于此方面的技术或管理产生影响;

2)对于复杂问题的解决有自己的见解,对于问题的识别、优先级分配见解尤其有影响力,善于寻求资源解决问题;也常常因为对于工作的熟练而有创新的办法,表现出解决问题的能力;

3)可独立领导跨部门的项目;能够培训和教导新进员工;

4)是专业领域的资深人士;

5)行业外或公司内培养周期较长。

P8

1)在某一专业领域中,对于公司内外及业界的相关资源及水平比较了解;

2)开始参与部门相关策略的制定;对部门管理层的在某个领域的判断力产生影响;

3)对事物和复杂问题的分析更有影响力。

P9

1)是某一领域中的资深专家;

2)对某一专业领域的规划和未来走向产生影响;

3)对业务决策产生影响;

4)使命感驱动。

P10

1)在公司内部被认为是某一方面的专家或者在国内的业界范围具备知名度和影响力;

2)对公司某一方面的战略规划和未来走向产生影响;

3)在本领域的思想和研究在公司具备较大的影响力;

4)使命感驱动。

P11

1)业内知名,对国内/国际相关领域都较为了解;

2)对公司的发展做出重要贡献或业内有相当的成功记录;

3)所进行的研究或工作对公司有相当程度的影响;

4)使命感驱动;坚守信念;

5)成为公司使命感/价值观的守护者、布道者;

6)对组织和事业的忠诚。

P12及以上

1)业内顶尖人才, 对于国际上相关领域的思想/实践都有独到的见解并颇受尊重,比较有名望;

2)对公司的发展做出重要贡献或业内有相当的成功记录;

3)能领导公司相关方面的研究、开创业界一些实践;

4)所倡导或所开创一些做法对公司的未来有深远的影响;

5)使命感驱动;坚守信念;

6)成为公司使命感/价值观的守护者、布道者;

7)对组织和事业的忠诚。

了解这几个等级的要求后,我们把焦点聚集在 P4-P7,为什么这么说呢,因为这几个等级是有"捷径"可以走,掌握正确的方法就可以轻松应对,而且迈过这个门槛非常重要,这几个岗位的含义分别是初级工程师、工程师、高级工程师、专家,这4个Title。当然每个公司title名称不一样哈,举个例子把,比如阿里 P6 高级工程师可以去很多公司去担任部门技术总监了,对于很多还没有想清楚是不是要把技术一路走到底的同学来说,到达 P7 就是人生的一个重要节点,P7 就可以去很多公司去当技术负责人了。

P8 及以上需要很多机遇和时间的沉淀,所以我暂时不展开了,我认为这是分水岭,所需要的经验和技巧也是完全不同的,这个需要单独去分享。

对应的薪酬待遇也是有一些差别的哈,我这里只是按照一个平均水准来描述。

  • P4 大概的月薪应该是8K-12K左右,年薪在 10-15W 左右
  • P5 大概的月薪应该是12K-18K左右,年薪在15-20W左右
  • P6 大概的月薪应该是25K-32K左右,年薪在30-40W左右
  • P7 大概的月薪应该是35K-45K左右,年薪在50-60W左右
以上年薪包含可能的年终奖。

可能有的同学说我阿里同学没有这么多啊,我需要提醒大家的是阿里员工有股票的,这些都是你的收入哦。所以基本上你可以得到一个结论,靠谱的技术同学3年买车、甚至买房都有可能的,不要小看程序员哦,都是超级潜力股。

阿里巴巴从11年开始就通过晋升委员会的方式来运作员工晋升,每个人想要晋升下一个层级,都需要高两级的专业评委投票来决定,我也经历了几次的变革和调整,还好一路下来比较成功,每次晋升都要掉层皮的,非常累心、累身体。

2d4d9145b20e2e64852bb5016520a7ba.png
<think>根据用户需求,要在Kotlin中创建一个全局变量,其结构类似于Lua中的表:`{ [801] = "buy_p1", [701] = "buy_p2", ... [202] = "buy_p11" }`。这是一个从整数索引到字符串值的映射。在Kotlin中,我们可以使用Map来实现类似的结构。 由于这个映射是全局的,并且内容在初始化时就已经确定(虽然用户给的例子中索引是分散的,但我们可以假设这些键值对是固定的),我们可以使用一个不可变的Map(如`mapOf`)来定义。但如果后续需要修改,则需要使用可变的Map(如`mutableMapOf`)。 根据用户提供的例子,索引是整数,值是字符串,且索引不是连续的(从801跳到701,再到202等)。因此,使用Map是最合适的。 ### 实现步骤: 1. 定义一个全局的Map变量,键为Int,值为String。 2. 在定义时直接赋值,使用`mapOf`函数,并传入键值对(使用`to`操作符或Pair对象)。 ### 示例代码: ```kotlin // 全局变量定义 val globalMap: Map<Int, String> = mapOf( 801 to "buy_p1", 701 to "buy_p2", // ... 其他键值对 202 to "buy_p11" ) // 使用示例 fun main() { println(globalMap[801]) // 输出: "buy_p1" println(globalMap[202]) // 输出: "buy_p11" } ``` ### 说明: - 使用`val`声明,表示这个Map引用不可变(即不能重新赋值),但Map本身是不可变的(由`mapOf`创建),所以内容也是不可变的。 - 如果需要后续修改,可以改为使用`mutableMapOf`,并将变量声明为`var`(但通常全局变量不建议可变,除非必要): ```kotlin // 可变的全局Map var mutableGlobalMap: MutableMap<Int, String> = mutableMapOf( 801 to "buy_p1", 701 to "buy_p2", 202 to "buy_p11" ).also { map -> // 也可以在这里进行一些初始化操作 } // 后续可以添加或修改 mutableGlobalMap[500] = "buy_p12" ``` ### 与Lua表的区别: - Lua中的表(table)是动态的,可以随时添加或删除键值对。而Kotlin中不可变的Map一旦创建就不能修改,可变的Map(MutableMap)则允许修改。 - 在Kotlin中,访问不存在的键会返回null,而Lua中默认返回nil(在Kotlin中可以使用`getOrElse`或`getOrDefault`处理)。 ### 如果键值对非常多,且键是连续的整数(或几乎连续)? 如果键是连续的整数(例如从1到1000),那么使用数组(Array)或列表(List)可能更高效。但根据用户提供的例子(801,701,202),这些键是不连续的,所以使用Map更节省内存。 ### 动态初始化键值对 如果键值对有一定的规律(例如,键是递减的,值有固定的前缀和递增的后缀),我们可以使用更简洁的初始化方式,例如: ```kotlin val keys = listOf(801, 701, 202) // 定义键的列表 val globalMap = keys.mapIndexed { index, key -> key to "buy_p${index+1}" }.toMap() // 或者更直接地,如果我们知道键和值的对应关系,可以这样: val globalMap = mapOf( 801 to "buy_p1", 701 to "buy_p2", 202 to "buy_p11" ) ``` ### 注意: 如果键值对数量很大(比如成千上万),我们可以考虑使用序列(sequence)来生成,然后再转为Map,以避免创建中间集合。 ### 总结: 对于用户的需求,使用不可变的Map(`mapOf`)来定义全局变量是最简单直接的方式。如果后续需要修改,则使用可变的Map(`mutableMapOf`)。 ### 相关问题: 1. Kotlin中Map和MutableMap的主要区别是什么? 2. 如何在Kotlin中处理Map中不存在的键? 3. Kotlin中如何高效地初始化一个大型Map? </think> 在 Kotlin 中实现类似 Lua 的全局表结构 `{ [801] = "buy_p1", [701] = "buy_p2", ... [202] = "buy_p11" }`,可以通过以下两种方式实现: --- ### 方法 1:使用不可变 Map(推荐) ```kotlin // 全局常量定义(类似 Lua 表) val globalTable: Map<Int, String> = mapOf( 801 to "buy_p1", 701 to "buy_p2", 202 to "buy_p11" // 添加更多键值对... ) // 使用示例 fun main() { println(globalTable[801]) // 输出: "buy_p1" println(globalTable[202]) // 输出: "buy_p11" // 安全访问(Kotlin 特性) println(globalTable.getOrDefault(999, "default_value")) } ``` **特点**: 1. 使用 `mapOf` 创建**不可变映射**,确保线程安全 2. 语法简洁直观,类似 Lua 的表初始化语法 3. 支持 `getOrDefault` 安全访问(比 Lua 的 `nil` 更安全)[^3] 4. 编译时确定内容,无运行时开销 --- ### 方法 2:使用委托属性实现动态表 ```kotlin class LuaStyleTable { private val storage = mutableMapOf<Int, String>() // 重载索引操作符(类似 Lua 表访问) operator fun get(key: Int): String? = storage[key] operator fun set(key: Int, value: String) { storage[key] = value } } // 全局表定义(支持动态修改) val globalTable by lazy { LuaStyleTable().apply { this[801] = "buy_p1" this[701] = "buy_p2" this[202] = "buy_p11" // 可添加初始化逻辑 } } // 使用示例 fun main() { println(globalTable[801]) // 输出: "buy_p1" // 动态添加新值(类似 Lua 表扩展) globalTable[500] = "new_value" println(globalTable[500]) // 输出: "new_value" } ``` **特点**: 1. 使用类重载 `operator get/set` 实现类 Lua 语法 2. `by lazy` 延迟初始化确保线程安全 3. `apply` 块实现定义时初始化 4. 支持运行时动态添加/修改键值对 --- ### 方法 3:顶层函数 + 常量定义(纯函数式) ```kotlin // 顶层函数定义 fun getGlobalValue(key: Int): String? = when(key) { 801 -> "buy_p1" 701 -> "buy_p2" 202 -> "buy_p11" else -> null } // 使用示例 fun main() { println(getGlobalValue(801)) // 输出: "buy_p1" println(getGlobalValue(999)) // 输出: null } ``` **适用场景**: - 键值对数量较少且固定不变 - 需要完全不可变的数据结构 - 避免对象创建开销 --- ### 对比 Lua 与 Kotlin 实现 | 特性 | Lua 表 | Kotlin 实现 | |------|--------|-------------| | **初始化语法** | `{[801]="buy_p1"}` | `mapOf(801 to "buy_p1")` | | **动态扩展** | 支持 | 需使用 `MutableMap` | | **空值处理** | 返回 `nil` | 返回 `null` 或使用 `getOrDefault` | | **元表支持** | `__index`/`__newindex`[^4] | 通过委托属性模拟 | | **线程安全** | 无内置保障 | 可通过 `by lazy` 实现 | --- ### 自动生成键值对模式 如果键值对有规律(如连续数字+固定前缀),可使用: ```kotlin // 生成 {801 to "buy_p1", 802 to "buy_p2", ...} val autoTable = (800 downTo 200 step 100).associateWith { "buy_p${(801 - it)/100 + 1}" } // 结果: {801="buy_p1", 701="buy_p2", 601="buy_p3", ...} ``` --- ### 元表功能模拟(类似 Lua 的 __index) ```kotlin class MetaTable(private val fallback: Map<Int, String>) { operator fun get(key: Int): String? = when { key == 801 -> "buy_p1" else -> fallback[key] // 回退到默认表 } } // 使用 val mainTable = mapOf(701 to "buy_p2") val enhancedTable = MetaTable(mainTable) println(enhancedTable[801]) // buy_p1(自定义逻辑) println(enhancedTable[701]) // buy_p2(回退查询) ``` 此实现模拟了 Lua 元表的 `__index` 功能[^4],允许自定义查找逻辑。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值