生而为人

程序员的自我修养

0%

1.1 Can not alter table when there are temp partitions in table

原因是之前进行过改表操作,还没有完成

可以通过SHOW ALTER TABLE COLUMN; 查看改表的进度

1.2 timeout

1
set query_timeout=60;

1.3 Memory exceed limit. Hash join doris

1
SET exec_mem_limit = 8589934592;

1.4 Unexpected exception: No value present

1.5 there is no scanNode Backend doris

1.6 bitmap_union_int cause ‘be’ node hang

1.7 Failed to get scan range, no queryable replica found in tablet

2.1 分区报错

注意:

  1. 已经划分好的区间分区,不能在被切分,即分区(1,3),不能被拆分为(1,2)和(2,3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
alter table topic_smart_user_group_detail_2 add partition IF NOT EXISTS p2 values less than (3);
insert into topic_smart_user_group_detail_2 VALUES (2, 1, '1004230612'),(2, 1, '1047296444'),(2, 1, '1053250666');

org.jkiss.dbeaver.model.sql.DBSQLException: SQL 错误 [1064] [42000]: errCode = 2, detailMessage = Syntax error in line 1:
...ISTS p2 values less than (3)
^
Encountered: INTEGER LITERAL
Expected: COMMA

less than () 括号中必须是字符串

alter table topic_smart_user_group_detail_2 add partition IF NOT EXISTS p2 values less than ("3");
insert into topic_smart_user_group_detail_2 VALUES (5, 1, '1004230612'),(5, 1, '1047296444'),(5, 1, '1053250666');

all partitions have no load data
表示没有创建需要的分区

参考资料

  1. Doris建表 FAQ
  2. Hive To Doris 数据同步事故
  3. Doris使用FAQ(持续更新中)

How to Avoid the ReceiverDisconnectedException

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
21/08/19 02:18:45 ERROR TaskSetManager [task-result-getter-0]: Task 32 in stage 73.0 failed 4 times; aborting job
21/08/19 02:18:45 ERROR FileFormatWriter [stream execution thread for [id = 5f382b82-2006-49a4-a657-5512d5bc6cce, runId = e783c09d-8ea7-4848-b018-2422590426ce]]: Aborting job 6d36e286-ecb0-4a8e-9928-5ac7a0fbb7d2.
org.apache.spark.SparkException: Job aborted due to stage failure: Task 32 in stage 73.0 failed 4 times, most recent failure: Lost task 32.3 in stage 73.0 (TID 18190, wn126-msnbi.awfbdxsze1iudhhki0l2sbzfaf.bx.internal.cloudapp.net, executor 8): java.util.concurrent.CompletionException: com.microsoft.azure.eventhubs.ReceiverDisconnectedException: New receiver 'spark-26-18237' with higher epoch of '0' is created hence current receiver 'spark-8-18190' with epoch '0' is getting disconnected. If you are recreating the receiver, make sure a higher epoch is used. TrackingId:ddef38220000007a00008bf9611dbf7b_G4_B16, SystemTracker:msnsam-prod:eventhub:sambeacon-ueq~4223|$default, Timestamp:2021-08-19T02:18:45, errorContext[NS: msnsam-prod.servicebus.windows.net, PATH: sambeacon-ueq/ConsumerGroups/$Default/Partitions/32, REFERENCE_ID: LN_23ed71_1629339510773_d5c9_G4, PREFETCH_COUNT: 500, LINK_CREDIT: 200, PREFETCH_Q_LEN: 0]
at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:292)
at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:308)
at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:607)
at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:591)
at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
at com.microsoft.azure.eventhubs.impl.ExceptionUtil.completeExceptionally(ExceptionUtil.java:116)
at com.microsoft.azure.eventhubs.impl.MessageReceiver.drainPendingReceives(MessageReceiver.java:505)
at com.microsoft.azure.eventhubs.impl.MessageReceiver.onError(MessageReceiver.java:490)
at com.microsoft.azure.eventhubs.impl.MessageReceiver.onClose(MessageReceiver.java:790)
at com.microsoft.azure.eventhubs.impl.BaseLinkHandler.processOnClose(BaseLinkHandler.java:73)
at com.microsoft.azure.eventhubs.impl.BaseLinkHandler.handleRemoteLinkClosed(BaseLinkHandler.java:109)
at com.microsoft.azure.eventhubs.impl.BaseLinkHandler.onLinkRemoteClose(BaseLinkHandler.java:51)
at org.apache.qpid.proton.engine.BaseHandler.handle(BaseHandler.java:176)
at org.apache.qpid.proton.engine.impl.EventImpl.dispatch(EventImpl.java:108)
at org.apache.qpid.proton.reactor.impl.ReactorImpl.dispatch(ReactorImpl.java:324)
at org.apache.qpid.proton.reactor.impl.ReactorImpl.process(ReactorImpl.java:291)
at com.microsoft.azure.eventhubs.impl.MessagingFactory$RunReactor.run(MessagingFactory.java:784)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.microsoft.azure.eventhubs.ReceiverDisconnectedException: New receiver 'spark-26-18237' with higher epoch of '0' is created hence current receiver 'spark-8-18190' with epoch '0' is getting disconnected. If you are recreating the receiver, make sure a higher epoch is used. TrackingId:ddef38220000007a00008bf9611dbf7b_G4_B16, SystemTracker:msnsam-prod:eventhub:sambeacon-ueq~4223|$default, Timestamp:2021-08-19T02:18:45, errorContext[NS: msnsam-prod.servicebus.windows.net, PATH: sambeacon-ueq/ConsumerGroups/$Default/Partitions/32, REFERENCE_ID: LN_23ed71_1629339510773_d5c9_G4, PREFETCH_COUNT: 500, LINK_CREDIT: 200, PREFETCH_Q_LEN: 0]
at com.microsoft.azure.eventhubs.impl.ExceptionUtil.toException(ExceptionUtil.java:43)
at com.microsoft.azure.eventhubs.impl.MessageReceiver.onClose(MessageReceiver.java:789)
... 15 more

Driver stacktrace:
at org.apache.spark.scheduler.DAGScheduler.org$apache$spark$scheduler$DAGScheduler$$failJobAndIndependentStages(DAGScheduler.scala:1889)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1877)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$abortStage$1.apply(DAGScheduler.scala:1876)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
at org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:1876)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:926)
at org.apache.spark.scheduler.DAGScheduler$$anonfun$handleTaskSetFailed$1.apply(DAGScheduler.scala:926)
at scala.Option.foreach(Option.scala:257)
at org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:926)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:2110)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2059)
at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2048)
at org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:49)
at org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:737)
at org.apache.spark.SparkContext.runJob(SparkContext.scala:2065)
at org.apache.spark.sql.execution.datasources.FileFormatWriter$.write(FileFormatWriter.scala:167)
at org.apache.spark.sql.execution.streaming.FileStreamSink.addBatch(FileStreamSink.scala:131)
at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$org$apache$spark$sql$execution$streaming$MicroBatchExecution$$runBatch$5$$anonfun$apply$17.apply(MicroBatchExecution.scala:537)
at org.apache.spark.sql.execution.SQLExecution$$anonfun$withNewExecutionId$1.apply(SQLExecution.scala:78)
at org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:125)
at org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:73)
at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$org$apache$spark$sql$execution$streaming$MicroBatchExecution$$runBatch$5.apply(MicroBatchExecution.scala:535)
at org.apache.spark.sql.execution.streaming.ProgressReporter$class.reportTimeTaken(ProgressReporter.scala:351)
at org.apache.spark.sql.execution.streaming.StreamExecution.reportTimeTaken(StreamExecution.scala:58)
at org.apache.spark.sql.execution.streaming.MicroBatchExecution.org$apache$spark$sql$execution$streaming$MicroBatchExecution$$runBatch(MicroBatchExecution.scala:534)
at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$runActivatedStream$1$$anonfun$apply$mcZ$sp$1.apply$mcV$sp(MicroBatchExecution.scala:198)
at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$runActivatedStream$1$$anonfun$apply$mcZ$sp$1.apply(MicroBatchExecution.scala:166)
at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$runActivatedStream$1$$anonfun$apply$mcZ$sp$1.apply(MicroBatchExecution.scala:166)
at org.apache.spark.sql.execution.streaming.ProgressReporter$class.reportTimeTaken(ProgressReporter.scala:351)
at org.apache.spark.sql.execution.streaming.StreamExecution.reportTimeTaken(StreamExecution.scala:58)
at org.apache.spark.sql.execution.streaming.MicroBatchExecution$$anonfun$runActivatedStream$1.apply$mcZ$sp(MicroBatchExecution.scala:166)
at org.apache.spark.sql.execution.streaming.ProcessingTimeExecutor.execute(TriggerExecutor.scala:56)
at org.apache.spark.sql.execution.streaming.MicroBatchExecution.runActivatedStream(MicroBatchExecution.scala:160)
at org.apache.spark.sql.execution.streaming.StreamExecution.org$apache$spark$sql$execution$streaming$StreamExecution$$runStream(StreamExecution.scala:281)
at org.apache.spark.sql.execution.streaming.StreamExecution$$anon$1.run(StreamExecution.scala:193)

1
import org.apache.flink.streaming.api.scala._

[toc]

梳理

解题思考

  1. 每个题的时间/空间复杂度是多少,及最好/最坏情况的时间/空间复杂度

算法框架

前缀和

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

差分数组

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

双指针

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

滑动窗口

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

二分查找

解决的问题:

  1. 查找某个数
  2. 确定左/右边界线

题目特点(如何辨析是否使用):

经典题目:

  1. ⼒扣第 34 题「在排序数组中查找元素的第⼀个和最后⼀个位置」
  2. 力扣875. 爱吃⾹蕉的珂珂(中等)
  3. 力扣1011. 在D天内送达包裹的能⼒(中等)

田忌赛马

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

  1. 力扣870. 优势洗牌(中等)

链表操作递归秘籍

解决的问题:

  1. 翻转链表
  2. 部分翻转链表

题目特点(如何辨析是否使用):

经典题目:

  1. LeetCode 206. 反转链表(简单)

  2. LeetCode 92. 反转链表 II(中等)

    ---------

括号题目

解决的问题:

  1. 平衡括号串(一)p119
  2. 平衡括号串(二)p120

题目特点(如何辨析是否使用):

经典题目:

  1. ⼒扣第 921 题「使括号有效的最少添加」
  2. ⼒扣第 1541 题「平衡括号字符串的最少插⼊次数」

单调栈

解决的问题:

  1. 后面第一个更大的数

思考:

  1. 为什么要用从后往前的方式入栈?
    1. 因为最后要输出的是更大的数的值,而不是索引,如果是从前往后入栈,入栈的元素就只能存入值,它的索引就丢了,而最终的结果是要按照这个索引把值替换掉,所以不能这么解

题目特点(如何辨析是否使用):

经典题目:

  1. LeetCode 上拿下如下题⽬:

    \496. 下⼀个更⼤元素I(简单)

    \503. 下⼀个更⼤元素II(中等)

    \739. 每⽇温度(中等)

    ----------

单调队列

解决的问题:

  1. 滑动窗口

题目特点(如何辨析是否使用):

经典题目:

  1. \239. 滑动窗⼝最⼤值(困难)

去重算法

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

  1. LeetCode 上拿下如下题⽬:

    \316. 去除重复字⺟(中等)

    \1081. 不同字符的最⼩⼦序列(中等)

LRU

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

LFU

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

常数时间随机读取/删除数组元素(P153)

数据结构设计题

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

  1. LeetCode:

    \380. 常数时间插⼊、删除和获取随机元素(中等)

    \710. ⿊名单中的随机数(困难)

如何在无限序列中随机抽取元素(P611)

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

  1. 去 LeetCode 上拿下如下题⽬:

    \382. 链表随机节点(中等)

    \398. 随机数索引(中等)

笔记框架

解决的问题:

题目特点(如何辨析是否使用):

经典题目:

麦肯锡问题分析与解决技巧

失败的逻辑

数据技术篇

第2章 日志采集

2.0 要点

  1. 如何埋点数据,已保证能统计所需的业务数据,并适应不断增加的需求
  2. 如何过滤数据,清除掉攻击、爬虫等影响正常业务统计的数据
  3. 数据完善,根据某些手段对缺失信息进行补充。比如用登陆后的用户名,回填之前未登录时的用户名字段。但这样就不能区分是不是登陆操作了,如需要,可以增加字段标示。

第3章 数据同步

第4章 离线数据开发

第5章 实时技术

5.2.2 数据处理

1. 去重指标
2. 数据倾斜
3. 事务处理

第6章 数据服务

第7章 数据挖掘

数据模型篇

第8章 大数据领域建模综述

8.4 典型的数据仓库建模方法论

8.4.1 ER模型

建模过程分为三个阶段

  • 高层模型
  • 中层模型
  • 物理模型(底层模型)

8.4.2 维度模型

8.4.3 Data Vault模型

8.4.4 Anchor模型

第9章 阿里巴巴数据整合及管理体系

9.3 模型设计

9.3.2 模型层次

操作数据层(ODS)
公共维度模型层(CDM)
应用数据层(ADS)

9.3.3 基本原则

听社会的意见,保留自己的判断

即将离开 谈谈自己的感悟 关于工作 关于生活
校招加入MT,最近经历了一些很恶心的事情准备跑路。我的经历不能代表整个公司,因此不说具体的细节,只讲一些经验和教训。正好公司在大力发展校招,希望我的经验能够帮助刚工作的同学们避一避坑吧

1.对你好的领导比什么都重要。

(一开始想写好领导的,后来改成了对你好的领导)。在社会上,遇到一个赏识自己的人真的很难,而且是可遇不可求的。怎么看他对你好不好,我想到了下面几点:

看给你做的事情是不是核心
是不是关心你做的东西(总是催着你查问题不算关心)
给你的绩效是否满意(如果你做得很好结果绩效系数连1都没给到,这种就算了)
就是鉴别是否有pua你的行为(不知道什么是职场pua的 可以看https://zhuanlan.zhihu.com/p/158898013)
是否在给你的意见中只跟你说一些很空的话,比方说什么要有产品思维啊,要站在更高的角度看啊,业务要有更深的理解啊。为了引起注意我把只这个字单独标出来了。这属于很万金油的说法,如果他这么讲说明他根本没想过这个问题
应该有不少人做的都是打杂的事情,没什么技术挑战,一大坨杂事,做得好也不出彩。其实能来到MT的,大部分能力和责任心都差不多。换言之一个项目一开始交给谁做结果可能都差不太多,做杂活的干得再好,上限也就是个B+。如果领导肯把核心的项目交给你,那么说明领导很器重你。如果一直让你做打杂的事情,即使你做出花来还是打杂,那么就准备跑路吧。打杂的经历不会给自己提升自己的竞争力,只能让你见识到职场的险恶

2.有效沟通,一定要合理表达自己诉求。如果被分配了打杂的活,做的东西不满意了,跟领导沟通,争取。年终奖觉得发少了,多问一句。哪怕问一句不会改变这个结果,但是能让对方知道你的想法和态度。这方面我自己做得很差,久而久之别人就不拿你当回事了。

3.技术只是手段而不是目的。选择岗位的时候,离业务近一点可能杂事很多,但是会更核心。很多人总觉得我只要技术好了,就不会遇到裁员和35岁危机。这种想法很naive,可能你觉得自己技术好了公司就离不了你了。这种想法很荒谬,站在公司的角度,公司不可能离了某个人就开不下去,所以公司的诉求是抹平员工之间的差异,每个人都是螺丝钉,坏了或者不好了马上换新的(大厂应该都是这样),这应该就是程序员35岁到头的理论依据吧。以前上学的时候说什么要做不可替代性强的岗位,现在想想这本来就是一个很矛盾的事情。站在公司的角度,也能够理解。所以一定不要把自己的圈子局限的很小,多接触圈子外的事情。提前给自己找条后路

4.做得好不如说得好。这一点在我司体验的非常明显。领导很忙,要拿你的成果向上汇报。你如果直接给领导写好了汇报材料岂不是省了他很多事情。说的时候要讲究技巧,如果有效果就摆数字,如果没效果就画饼,说我们这么做以后的应用前景很广阔等等。能用复杂的方案就别用简单有效的,因为讲出来太low(我称之为“逆奥卡姆剃刀原则”)。既然上面喜欢能说的,那为什么不这么做呢

5.如果可以的话,对身边的人好一点。一起合作的同事,只要没有故意做过让人不爽的事情,说话什么最好都和和气气的。大家生活都不容易,互相体谅下,换位思考。当然了,对那些故意给人添恶心的人也不用客气,有的人真的是欺软怕硬。需要通过某些方式让人知道你不是个好欺负的人。说话再急也不是什么话都能讲的,如果之前说了很过分的话,事后道歉说我就是急性子请你谅解的,这种人可以直接拉黑。

进入社会,最大的体会就是自己的力量太渺小了。自己能提升的只有技术,但是技术在职业发展中的重要性原来越小。我曾经和你们一样,热爱技术,希望一心钻研技术来给公司带来更大的收益,达到双赢的效果。但是在经历了18年底那波寒冬之后就知道了这是不可能的,想混得好,可能多多少少都要做一些自己不喜欢的事情

因为马上就不能访问内网了,提前把可能会被diss的问题和回应写上:

Q1:题主太菜了,所以才在这里散播技术无用论

A1:首先本人从未散播过技术无用论。如果不是热爱技术也不会选择这个行业,我说的是,圈子大一点,别只盯着技术看。后面如果跳槽选择offer的时候,技术是否有挑战性也只是一个方面而不是全部。

而且个人认为自己也不算很菜,大厂的offer基本拿了个遍。

Q2:我就是只一心做技术,也没你说的这么多问题啊

A2:你大概了遇到了一个好领导。他可以给你核心的,有技术挑战的事情做,给你符合预期的绩效,调薪和晋升。让你能够一心一意的做技术。如果遇到这样的领导,好好回报他吧

Q3:你看人家谁谁谁,背景不好,一心钻研技术,最后成了某某公司的高管

A3:这种文章的出处一般都是某个大公司的公众号发出来的。我从不否认这样做的真实性,但这是典型的幸存者偏差。钻研技术是称为高管的既不充分也不必要条件。如果真的是技术至上,那么应该有一个相对明确的上升路径,比方说我掌握了高并发系统的设计,我就至少能到那个职位,拿多少工资。 而不是告诉你,谁谁谁这么干就成功了,那个人为什么不能是你。加油,奥利给!

最后,祝公司的同事们发展的越来越好,祝愿公司越来越好。希望大家对既往的都别恋了,我先纵情向前了。

收起
239回帖邀请125个回复11580次浏览
提醒仅供公司内部学习与交流,未经公司授权切勿外传
共125个回复最新排序最热排序
头像蓝莓煎肉松
我挺支持楼主所说的,作为一个RD,发展技术不是职业的全部,也需要八面玲珑的沟通能力。在今天的任何一家大公司里,想做一个一心专研技术的美男子还行不行了?答案是:不行。

分享一个某老大在某次会议上的观点(你可以猜猜是谁),原话我找不到了,但有几个点让我印象深刻:

职场人必须要合作要频繁沟通,让别人理解你的工作是你的责任(我:这里当然也包括对上沟通);
为什么早年有一些高P不带人,象牙塔里的科学家的岗位?因为在互联网早期,懂技术的人才非常稀缺,要想办法把只懂技术不懂沟通的人也充分利用起来,保留下来,典型的形式就是“高P不带人”,这是一种在人才稀缺情况下组织架构的妥协;
但随着时间推移,互联网人才积累到了一定程度,在绝大多数一般的技术岗位有得选择了,“高P不带人”的好处变少了,坏处相应就变多了(我:这类人不懂沟通),我们应该避免这种情况。
越是允许员工懂技术不懂沟通,就越不会逼着大家锻炼沟通。

收起
52个评论回复时间:4小时前
头像蓝莓煎肉松
回复 @葡萄焖鸭翅:
意思是有些技术能力稀缺的人因为不懂沟通,而被安排在了不带人的位置上。

0回复1小时前
头像葡萄焖鸭翅
“不带人”就一定“是不懂沟通”吗?

0回复1小时前
头像蓝莓煎肉松
以上是为什么RD也得搞好沟通。接下来说说要是你遇到一个傻X领导怎么办?

  1. 首先你要明白,在打工人这一辈子里,在傻X领导下面工作是常态。长大后,你也会成为他。

很多人可能没意识到,MT现在正在不断向基层管理者授权。就这半年来,公司一系列举措:职级层数减少,绩效层数减少,薪酬带宽变大,薪酬浮动比率变大…这才只是个开始,未来基层管理者将拥有更多的权利。

但基层管理者并没有都成长起来。大多管理者只懂干事,不懂带人。面对这些权利会抓狂,甚至会滥用。比如,不会识别优秀,也不会区分激励。结果就是好人走了,业绩毁了。

但这是管理层成长必须要有的代价,每个管理者除了听一堂管理ABC的课,基本就得靠这些傻X的错误中获得成长。公司也会去刺激管理者成长:更多招名校毕业生,更多内部提拔,强调1v1等管理基本功,提出管一层看两层的要求…

所以,打工人要理解打工人。谁也不是娘生下来就会干管理的,他管理干得不好,是常态。

  1. 傻X老板没长大,为啥要我来承担结果?

7 habits第一条:积极主动。你要相信,你是有选择的。MT这家公司还是相当不错的,业务处理一个好的位置上,就像一部内饰破烂的快车,驶在正轨上,但你坐那个座非常难受。

选择一:换个座。官方活水制度和民间网友攻略读起来,能找到个舒服点的座,就能让你坚持久一点。

选择二:改造座。leader是傻X,但如果你牛X的话是有机会反馈和帮助他成长的,这个过程如果你俩真的建立了信任,搞不好是互为贵人,相互支撑的职场搭档;

选择三:忍着。只要车的方向是对的,忍几年怎么了?何况这年年拥抱变化,搞不好环境又重置了呢。

选择四:下车。快车也不止一辆,要能找着好的,那就换一辆吧。但不能老换,换多了简历碎掉了基本也就gg了。

Steven Covey告诉我:无论我选哪一个,都是咱无怨无悔的自主选择。