编程导航大数据话题讨论

大数据

102 参与
分享

快来分享你的内容吧~

点击登录,快来和大家讨论吧~
表情
图片
话题
打卡
综合
交流
文章
问答

亲历烂尾项目:职场风暴

简介AI总结,标题AI生成。 补充了一些之前没有分享的东西 ### 聊聊面试 是外企德科主动联系我的,说有华为的工作机会 HR给我表示: * 有两个岗位,一个是传统开发岗位 * 一个是现在最火最火的大数据岗位 那从发展来说,肯定要去大数据岗位,发展良好。传统开发CRUD技术有啥好的。 那时候没有AI,大数据是真的高薪岗位。 网上不止一个人有这么一个论点: > java8 + 传统CRUD,传统业务,发展受限,要学习最新的技术才有发展 那我肯定要发展的啊。 实际狠狠的打了我的脸:入职一个半月直接被裁了。 ### 聊聊华为的面试流程 华为的面试分为:机考、心理测试、一面、二面、最终面。一共五轮。面试了2个月多点。 我机考满分,最后HR告诉我:定级14级。我当然就觉得自己是14级了。 网友就开始踩我,说你是个der的14级,你就是外包的OD2。 * 你14级 和OD2是同一个工资级别,但是你是外包,以后不要叫自己14级,丢人 ### 聊聊华为和OD 华为自己开了两家公司: * 华为 * 外企德科 外企德科是华为自己名下的公司,然后外企德科以人力公司的身份招聘员工,然后进入华为工作。 华为是自己开了一家外包公司,然后外包到华为工作。所以叫内包。 还有一些,就是外协。这些就是传统外包。 华为就有正编、OD、外包的区别。 由于华为经常接移动的项目,所以华为也是个大外包公司。 ### 去南京 面试通过了,HR告诉我:你3.8号入职。现在准备收拾行李去南京。 我就去了南京。在南京租好了房子。一年付。押三付一。然后介绍费一个月房租,一共交了5个月。 还有个:体检自费,然后拿着体检费用去报销。报销时间可能是2个月左右。 去了南京以后,迟迟没有收到入职通知。 就问了HR,HR表示:背调没通过,说是有创业经历。原因是:简历里面有创业两个字。 我说:那是创业公司!我简历里面写的是在创业公司工作1年!! 华为确认了一下,又给我发了offer。 就:告诉你面试通过了,让你租好房子去南京等着。最后告诉你背调没通过。你可以回去了。 你打电话问华为怎么背调的,华为说背调弄错了,又给你发了offer。 ### 聊聊薪资级别 HR给我透底了:薪资是18K。 我主动降低了4K,拿了14K。为什么,因为有导师有资源,我自己很难独立完成一个项目。 入职以后,领导承诺说:任何情况下绩效都是2个月,就是一年发14薪。你绩效保底是B。 ### 领导请吃饭 + 导师请吃饭 入职第三天,领导请吃饭。带我们中午出去吃了一顿饭。 吃的不错。 我问了:项目有什么资源?领导没有任何表态。拒绝回答。 然后领导又要求导师请吃饭,又吃了一顿饭。 吃的不错。 然后我又问导师:项目有什么资源? 导师表示:遇见任何问题问产品,不要问我,我什么都不会。 我那时候还有点骄傲。但凡入职过大大厂就知道: * 去了以后觉得自己能进入大厂,那肯定有点本事,能大展拳脚 * 什么导师资源,都是无能的体现,导师不给资源,那就加班学习,遇见问题就解决问题 然后领导入职以后给帮我扛了一下电脑。 ### 项目开始 然后就是入职的时候,产品过来和甲方开了一个会。 这是个移动的项目,华为去竞标这个项目,3.10号左右 这个会挺有意思: * 甲方当场表示,这个项目我兴趣不大,我觉得可以不做 * 产品表示,可以做,可以做,太可以了,做做做,表示5.1号是个好日子,可以上线,因为五一劳动节 * 剩下的时间甲方表示有安排,不适合上线,51也不太适合上线 * 产品表示合适合适,麻烦了 * 甲方不说话,默认了 事情就这么定了。 你甲方都不愿意做了,华为剃头挑子一头热非要做? 我啥都不知道啊。 这个项目是干嘛的?这个项目背景是什么?这个项目能不能按期交付? 而且工期为什么定到5月1号??? 大数据应该如何开发我也不知道啊??? ### 和导师沟通 拿到项目的第一时间我又去找导师。因为实在工期太短,他级别高,帮我排期要资源啥的都比较方便。 然后导师表示:我不懂啊,我是学C的,大数据我啥都不会,怎么帮?你去找产品去。这样:我负责情感辅导,技术上任何问题都不要问我,问产品。 我懵了,我说:那项目开发工期什么的? 导师:我啥都不会你问我干啥?我负责情绪辅导。 我:那如何启动开发项目啥的? 导师:问产品。 这个导师是技术出身,开发经验10年左右,级别很高。拒绝提供任何帮助。 ### 排队做核酸 因为我去的时候是疫情,而且我是千里迢迢去南京的。去南京,当场领7天连续核酸大礼包。 想进入华为,要出示核酸码。你要是不连续7天做核酸,当场红了。你连进华为都进不去,而且整个华为就炸了。 想去做核酸,需要排两个小时的队。 我请假去做核酸。下午5点出去,然后排队两个小时去做核酸。 领导不高兴!!! 我觉得自己委屈的不行:我自己千里迢迢的去南京上班,然后每天下班前要排两个小时的队去做核酸。我多难啊。 在领导眼里:这个人刚入职就早退,然后还连续7天,给他批假很费劲。 ### 写周报 写周报日报。 我觉得5.1号上线根本不现实: * 导师导师没了 * 甲方甲方不合作 * 资源资源没有 * 工期只有40天 怎么写? 但是不写又不行,于是我就: * 把工期删了,说我承诺将这个项目上线 然后拿到我的日报以后,领导当场把我叫到他工位:你为什么不写工期?smart原则不知道?去看看smart原则的r。 要求我提供具体的日程点: * 什么时候开发完成 * 什么时候调优? * 什么时候上线? 我回去以后,发现还是写不了。风险太高。 于是开始装傻。 入职以后就要写Q2计划,总结Q1。 我没有任何办法,于是就开始装糖: * 什么Q2计划?我没看到,开完周会我去补,抱歉,非常抱歉 ### 开始查询文档 为了开发,领导把该项目所有的文档都给了我。包括源代码和文档。 文档是按照日期排布的。而且有对应的负责人。一共是两个。 * 项目开发了3个月后上线了,然后功能太差,导致甲方拒绝验收 * 然后就给了两个负责人时间进行优化,一共两个月时间 * 两个月时间没优化出来 我就去搜索两个负责人的名字,搜到了:已经离职。 华为把这两个负责人给裁了。 ### 周会情况 周会的时候,有个同事还没有入职,就安排了一个烂尾项目的拯救。 这个烂尾项目: * 有个同事一直在开发,一直在开发 * 突然有一天屎山塌了,华为就把负责这个项目的同事给裁了 * 然后又招聘了一个外包来帮忙解决屎山 这就裁员三个??可是整个项目组才不到8个人啊,开发只有5 - 6个人,你裁了3个?? 没入职的同事直接麻了:我不知道怎么救啊,屎山塌了流的到处都是,文档缺失、人又被裁,压力直接拉闷了。 然后领导表态:把接口整理成excel,然后确定输入输出,你就知道怎么做了。 然后:同事就整理出来了。 我:???屎山塌了,整理个excel就能解决???? 我这边也是一个烂尾项目,他这边也是一个烂尾项目,华为你项目烂尾率有点高啊。 ### 领导情况 领导有点歇斯底里。 领导给我讲,不允许在办公室吃饭,但是大家可以去喝茶,有饮水机。 我就拿了一瓶可乐到工位上,领导就表示:不是不让你在办公室吃饭嘛,有饮水机接水去。 不是??我喝可乐你要管? 然后就是:实习生投诉我,说中午休息的时候我在打字影响他休息,然后告领导。 不是,项目都快烂尾了你知道不?我中午工作你领导不应该夸奖? 然后领导就说:实习生告到我头上了,说你影响他休息。 * 人才啊领导 * 而且中午工作不休息,你不夸奖就算了???还没问你要加班费呢。 然后就是:搞读书月和算法题考试。劝大家多读书。 这都没问题,问题是:项目烂尾了是你裁的,你是一个项目制的领导。你搞啥读书月? 领导又自述:他自己被压力太大了,容易歇斯底里,听不得坏消息。 任何字他都不会签。 正常应该签的,那他要自行判断是否应该签,否则不签。 而且签字之前,先把让他签字的人骂一顿,然后才会签。 ### 同事投诉 我刚入职,然后一个外包同事给我说:我给你安排个工作。给你电子流了。 我:我没有电子流啊。什么电子流。 就是一个问题单。或者叫TT、工单、问题单、bug修复、issue。 然后我给他提出来他代码写错了,然后给他提示了错的地方。然后给他写了文档。 他直接骂骂咧咧的过来说:我给了你10天的时间,你连这点事情都做不到?? 我:????? * 你不是产品,不是领导,也不是我直属上级 * 你给我安排上活了?? 我有点郁闷:是个人就开始给我安排活了,你正编安排活也就算了,一个外包给我安排上了。 ### 产品组会 既然我不写,那就产品写。 产品表示: * 10天处理数据 * 10天开发 * 10天调优 产品又表示:实际开发实际分工我不管,是开发的事情,你们内部讨论就行。我要5.1日上线。 ### 被HR叫过去 然后入职不到10天,被HR叫过去,说:你遇见了什么问题,我们得解决啊。 华为来告状了。 我就反馈: * 导师和我切割了 * 产品和我切割了 * 实习生和我切割 * 然后,还被同级别的同事骂,给我安排工作 我压力很大,不知道怎么按期交付。 产品:你去找导师啊。 我:导师已经切割了。怎么问都没办法。 HR肯定是不相信的,于是说:你没问,不可能切,这样:你再去问一次,他能给你解决被同事骂的问题。 我就和导师聊了聊。 导师表示:他只是态度不好,不是给你安排活。 我:不是,他原话就是给你10天时间,你都没有搞定,电子流给你了,你应该开发。这不是安排活出什么?他就是给我安排活啊。 最后导师反馈给领导,同事就被领导骂了。 我就继续:那项目需要资源? 导师:产品。 ### 开始开发 然后周会上,领导问:你开发了嘛。权限要了吗? 我:什么权限? 领导:你不知道?黄区的权限啊。 我:我不知道啊 导师和我切割了,我怎么知道??? 领导:你得先接黄,才能开始开发啊。还有你这个权限怎么没有? 我:我不知道啊。 领导:那你接黄去。开始开发。 后来我才知道:华为分为红区、黄区和绿区 * 红区是独立办公室,保密级别最高 * 黄区是开发的权限,想要提交代码,部署各种服务必须黄区 * 绿区就是运维实施 但是导师和我切割了,导致我根本不知道。 领导不知道导师和我切割了,他在询问我开发进度的时候,发现我连开发的权限都没申请。 至于为啥没问导师:我第一时间就问了啊,导师让我去找产品。 产品表示开发的事情他不管。 我拿着文档进行了接黄。 ### 同事切割 我是大数据组的,所以入职以后,我就问同事:你给我测试环境的账号密码。我需要开发一个功能。 同事:自己部署一个环境。 我:???机器呢? 同事给了我一台机器。我打开一看:37G的硬盘。 37G硬盘,做大数据分析??就一台???还要自己部署? 然后我就去问运维:你能给我个测试环境账号密码嘛? 然后运维给了我一个机器,然后给了我一个文件夹。意思就是:让我自己部署。 我自己水平不太够,尝试启动了,发现他是一个集群的节点,就是这个节点已经被摘下来了。 我得自己改。需要大概3天时间 我懵了: * 问同事测试环境账号密码,不给? * 运维帮我部署个hadoop环境,不部署? 我自己工期只有40天,拿3天的时间部署一套hadoop?这不太对吧。 导师切割,同事切割,运维切割。还有能切割的嘛? ### 请假审批流程 我有一天忘了打卡,然后走请假流程。 提交了以后,被驳回,然后把我骂了一顿。然后在周会上讨论。 周会讨论结果:事情非常严重。 然后表示:你捅了马蜂窝了。 不是??这只是忘打卡??? 然后我就去问了其他华为项目组的,他们说:很好审批啊,你项目很奇怪啊。 于是我就提交给了领导的领导+2。然后导师就过来了:你入职培训怎么做的?不知道怎么请假?? 我就问:华为入职有个培训啊,我参加了,说直接提交请假流程即可。而且截图了给导师。 导师:我们项目组不遵守华为的规范,我们有自己的规则。 * 华为可以弹性上班,我们不弹 * 华为他可以请假,但是我们请假很麻烦 然后导师就走了……走了…… ### 没有测试环境 然后我后来发现:华为他没有测试环境,也没有测试数据。 所有开发都基于正式环境。 正式环境跑通了。改改就成为正式环境的代码。 那人家怎么可能把账号密码给你,正式环境搞挂了怎么办? 至于他们?他们自信 redis是这样: * redis 0是正式环境 * redis 1是测试环境 所以你想测试,自己部署一套。我们不可能把账号密码给你 ### 实习生和我切割 实习生又和我切割:他说他不参与实际开发,负责后期给甲方演示。 产品表示:你们自己讨论。 入职啥都没干,基本上切割完了: * 导师和我切割 * 产品和我切割 * 运维和我切割 * 同事和我切割 * 实习生和我切割 * 领导把我叫过去,要求我提高工作能力 * 我拒绝写日报和Q2报告 ### 汇报情况 然后就开始汇报,我实在没法汇报,Q2你不写,周报总得有点东西来说。 那同事写的代码是什么,我就开始讲: * 之前两个同事开发了一个XX功能 * 这个功能的底层实现是XX * 我整理了一个文档 然后领导表示:我要的不是这个。 领导要承诺,比如:什么时候上线,上线的效果怎么样。要我画给甲方的大饼。 我这个东西太技术性了,领导不关心。这东西没有。 ### 领导开始施压 领导就开始施压,他走到我工位上,然后和别人闲聊讲招聘一个人力成本有多贵: * 现在招聘一个人花了多少钱 * 算算工位费用,各种成本 * 除了工资以外,还得给外企德科签字费,签字费1W 你什么意思?嫌贵?? 你闲聊随便聊啊,跑我工位1米附近上说刚入职的新员工太贵?就是说给我听的。 14 * 14K,大小周,大周周六加班,但是给双倍。 ### 又被HR叫过去 然后入职到20天,又让HR叫过去,说项目组对你不满意。 我说: * 导师和我切割了 * 产品和我切割了 * 实习生和我切割 * 切完了 工期根本就就做不到啊,巧妇难为无米之炊,现在压力很大。 HR:导师不帮,你就继续询问,询问高级别的同事,其他同事,把所有的人都问一遍。 我:这能行嘛?? HR:我之前遇见了一个无法解决的问题,他就这么做的,最后我问了几十个人,都说做不了,领导表示:那不用做了。因为比你牛的都做不了,那的确有客观难度。 我:懂了。 我这个人主打一个听劝。 **虽然导师和我切割了,但是我只要热脸去贴,他总不可能见死不救吧? 虽然同事和我切割了,但是我只要低头去求,他总会给点帮助吧? 虽然实习生切割了,但是我至少是负责人,他总不会不管不问吧?** 贴贴了! ### 领导继续施压 我就到处问。 * 现在情况有一些困难,这些如何解决,如何破局 * 问产品,问同项目组的开发,问运维,问实习生 领导表态: * 我们项目组必须情绪稳定,现在项目组内部有一些低气压分子,我们会处理掉情绪不稳定的同事,因为影响非常大 * 华为内部有寒气,任何人都可能被裁 * 在周会上表态,问项目烂尾应不应该裁员? 产品也表示,说: * 遇见困难就克服困难,不要抱怨 * 技术的事情不要反馈给产品,产品无法解决 就40天工期,两个周就要上线了,现在连个毛都没出来。光内耗去了。 你这个领导红线有点多啊。 ### 数据本身 由于环比是一个月的环比,而数据只有3个月,一共38W条数据。 这就是甲方不太愿意合作的情况: * 移动他只找了一个外包的运维和我们对接,根本就不是甲方的专业人员 * 至于运维,话都说不明白,就是个拉过来充数的 * 然后华为领导一看,对着甲方的外包运维一通施压,表示我们项目很急,必须这些数据 然后运维不情不愿的点头:行。 然后抠出来了38W条数据。3个月8个字段的。 然后数据给了数据测的同事,他处理以后: 环比中66.6%的数据为空的,报错NaN。而且所有环比报NaN。 然后我懵了,直接问数据侧的同事:全是NaN怎么办? 数据侧:塞默认值不会? 我:那你塞啊 数据侧:你自己不会塞? 我:…… 然后就是:数据侧提供的数据全错了。 我又去找数据测,要求数据侧进行更正。在周会上进行了汇报。 然后数据侧又回去改。 然后数据又全错了。 我又去找数据侧,又要求数据侧进行更正。 数据侧又去改。 连续6次,数据侧表示:我天天加班,你能不能不要找了? 问题是数据的确是错的啊……你给个对的,我不就不找了?? 谁家大数据分析,给38W条数据?但是,没办法,华为给的工资高。 ### 事情发展 我又查询了之前同事给的文档,发现同事提供的参数是过拟合的。 因为数据少、数据量很差,所以想要区分出数据,就只能强行过拟合。 跑N次,取效果最好的那个作为参数。 结果非常惨:上线炸了,连7% - 11%都没保住。 7 -11%那还是理论值。连玩具都算不上。 我就把过拟合的参数调小,直接不区分。 ### 代码的问题 代码也有问题:他是通过index定位的,不知道每个列是干嘛的。 比如说: ``` list[1] = list[2] * list[3] ``` 你不知道他在干嘛,也完全没有注释。 数据是存在hadoop里面的,但是同事不给。是个HDFS的链接。 因为开发的时候给了第二套数据,所以我就一直没有去拉取第一套hadoop环境的数据。所以放弃了。 ### 实习生的情况 实习生表示:既然领导让我们做,我们就能做。我们直接把学习参数 * 10,然后跑100次。 这个模型比较奇怪,他返回的参数是有随机性的。跑100次总有几次效果很好。 实习生就截图,表示优化提升了30%。 产品疯狂竖大拇指,然后表示可以上线。 问题是:上线就死。甲方不验收可真的会裁员。 我表示:不对。拒绝上线。 产品脸直接黑了。 ### 项目难题 项目组只愿意提供3个月的数据。只有8个参数。数据质量非常差。 我一看效果不好,那就:能不能提供更长时间的数据? 同事表示:没法提供。 然后我又问:那能不能提供更多字段? 同事表示:没法提供。 然后我问:那其他项目组的支持? 同事表示:没法支持。 我问:那帮忙找一些懂业务的甲方? 同事表示:难。 问啥啥没有。 ### 数据的质量太差 然后我对数据进行了分析,发现数据质量太差。 至于为什么?因为产品拉了一个成功项目组的数据,也是8个参数。 我拿着两个不同项目组的数据进行了比对,发现我们的数据问题非常大: 其他省的数据,用户付费意愿和播放正相关。我们基本无关。 我就拿到两个差异数据,向产品进行确认,表示数据有问题。 然后产品表示:是你的统计方式有问题,不全面。你进行了抽样,抽样会影响;然后就是中位数不能说明什么。 然后我改进了我的方案,使用了全量数据,然后展示了中位数、方差、中数,并且进行了排序。 你说我统计方案有问题,那就提供一个你认可的统计方案。 产品表示:是浙江的用户太有钱了,项目继续。 反正就是:不管数据质量有多差,你必须给我拿出一个效果。 ### 数据怎么办? 既然数据质量不行,那就开始从头问起:首先是提供数据的甲方。 他直接给了一个sql。别的啥都没有。 对:整个项目就一个sql。 然后运维导出38W条数据,需要跑这个sql整整1天。 然后为什么这样,运维他说不清楚。 我:???????? 然后就是:上一任同事入职的时候接手了这个项目,他有3个月的数据,拿出来? 没了…… 不是,这个项目他已经上线了,而且甲方验收不合格下线了,也就是在生产环境跑了整整6个月,外加6个月的灰度数据,全没了?? 没了。 数据分析岗位,最重要的就是数据,已经有了12个月数据,然后告诉我没了?? ### 被实习生反咬一口 既然项目有问题,我就先和实习生去聊。 为什么?因为我和实习生他是一个团队,我在上面讲,实习生在下面拆,那太不现实了。 然后我就把统计的数据给了实习生,实习生表示:可能有这个问题。 然后在周会上,产品表态:项目很重要。 实习生立刻向产品表忠心,然后开始反咬我:我让你给骗了。你说的都不对,产品说的对!! ### 项目情况 现在问题就出现了:我上一任的两个同事,上线了,然后验收失败导致被裁。 你可以给甲方承诺效果很好,但是甲方发现效果达不到预期,做不到PPT,人家拿着PPT问责。表示不验收、不打款。 那整个项目组就承压了。 我这时候才发现:甲方没有定验收标准。 我就说:既然数据质量不够,那就定个验收标准。 产品:85%以上。 我:7- 11%。 产品:最差70%,但是后期得验收到85%。 我:7 - 15%,优化后25%。 产品直接表示:无法接受。 我:我反馈过,数据质量不够,该层数据质量就只能做到7 -11%。 * 想要更好的效果,得更多的数据,更多的字段,其他项目组的支持,甲方的支持 * 我现在就去问询我的导师,他会有办法的 * 如果实在不行,我们拉成功的项目组进行一个排查 然后产品继续拒绝。表示方法应该技术去想。 ### 聊聊长尾问题 我定位的是数据质量太差,没有区分度。 然后找了数据侧的同事,同事表示:这是长尾问题。 我听不懂,实习生表示:是的是的,就是长尾问题。 我:…… 数据侧:那我们就按照长尾问题来定位。 会后,我去问实习生:请问什么是长尾问题。 实习生:我不知道啊。你去问数据侧。 我:你不是在会上表示是长尾问题嘛? 实习生:我只是一个实习生。 ### 承压位 我在华为刚入职一个月,实习生入职5个月。 然后遇见了问题,实习生当场表示:我不清楚,我不负责,去找青碧凝霜。 我懵了:我XX也是实习生啊。我刚入职,你们就开始表示这个不行那个太慢,一个个都切了。 然后产品给我说:你是中级开发,是公司的中流砥柱。 我:…… 我后来想了想:我机考满分,然后工资级别多了4000元。所以我要给你兜底、给项目兜底,做项目负责人? ### 聊聊对接人 同事告知:和我们对接的甲方同事他是个外包,他这几天准备离职。你得快速推进项目,否则项目会出现问题。 不是???? 和我们对接的不是甲方懂业务的正编人员,是个外包,而且这个外包还要离职??? 前几天华为的产品刚把这个甲方的外包骂到狗血淋头,然后外包表示不值得离职了??? ### 烂尾负责人,要被裁员 然后我就和父母聊天,表示:快被裁了。 我妈:你刚入职一个月,就让你负责一个项目,这不可能、不现实。华为几万人,就拉着你一只羊去薅?你还是没有沟通好,你多沟通。 你看:同事切割了,然后我得过去贴,贴完以后还被一脚踢开。 ### 甲方负责人出面 最后,在项目快要到deadline的时候,甲方终于接了。 我是真的急,于是当场问了几个很要命的问题: * 项目现在需要XX业务的数据,你们有没有?比如说更长时间的数据,更多的字段 * 然后就是业务背景,你们是怎么地推的? 现在想一想,我们到底在忙啥?项目都快到deadline了,甲方才姗姗来迟。 然后产品就打断了,说你不要那么急,态度要好一点,有耐心。 ### 周会汇报 然后就在周会,聊了一句:项目出现了卡点。就这么一句话。 然后领导看了,表示:该议题不讨论。 是应该帮你,但是我们今天先不讨论这个问题。因为项目组有更核心的议题。 议题是什么:读书月。 华为这个领导他表示,大家每个月都要读书,然后把读书的心得给大家分享。 项目组一共8个人,其中每个人整理一本书来读,可以水两个小时的周会时长。 然后就是每个周大家都要刷几个算法题。 然后就是close各种议题。 我的需求,比读书月这个事情优先级低一点。所以我们要先搞搞读书月、算法题。 ### 头脑风暴 既然项目快要烂尾,产品也急啊。 每天开1个半小时的会议。连续开了12天。 我把问题和风险抛出,表示卡住了。 然后产品第一天直接给出了12个方案,然后要求我去验证。 第二天又是十几个方案 第三天又是十几个方案 连续12天,一共出了接近200个方案,都尝试过了。 头脑风暴的意思就是:不管这个方案有多无厘头,有多不切实际,都得尝试。但凡有一点机会,都要尝试。 而且一天给出12个方案,这12个方案必须当场验证,第二天周会要汇报结果。 整个项目组直接被压闷了:12天,18个小时周会,文档满天飞,整个公司都知道项目卡住了。 我也知道这个情况不好,但是: * 之前华为已经裁掉了2个闷葫芦了,而且人家至少还上线了 * 我不汇报风险,也过不了试用期 没办法。 ### 如何提高工作量 然后我就去问了导师:请问华为是怎么评估能力的? * 职级考试 * 然后文档 * 项目 那太好了,我也准备考试去。 我也想刷算法题,但是问题是:你天天刷算法题,项目烂尾不好解释:时间拿去刷题了,没时间做项目? 于是我准备裸考职级考试。 每天整理文档。 一天写个几千字,包括但不限于:对于项目的思考,对于项目的总结,如何提升。 写的多,写得好。至于项目:救不了。 和实习生表示:我发现数据质量有问题,我去处理数据质量,你去做下游。 然后实习生同意了。 开会和产品要各种资源。 然后就是假装加班,实际上抓紧机会和同事聊天。 ### 被裁 然后就是结果:他们说和同事制造矛盾。被裁。 ### 请假 我还有个假没批。 就那个忘打卡的事情。 我直接找到领领导的领导,然后领导的领导表示:不批。 我:我已经被辞退了,走不了正常流程,请特殊处理。 然后领导的领导直接@我的领导,表示是否在岗。 我这个领导是有问题的:他正常不会审批任何流程,就算正常的审批他也不批,还把人叫过去骂一顿,你现在让他签字,他内心得把你骂1000顿。 但是我已经被裁了啊。而且是他主动汇报的。领导气的牙根痒痒,就回了两个字:在岗,确认。 字越少,事情越大。 然后领导表示:你现在就把截图内容 + 领导确认邮件截图发过来,然后我给你准假。 就这样,请假通过了。 ### 实习生的问题 这时候,实习生拿着新出的算法,开始给领导汇报:我找到了一个可以上线的算法。 领导竖起了大拇指,表示可以上线。 问题是:上线就死啊。 我想了想实习生他这几天的所作所为,直接不管了。 等上线后让实习生抗压去。 ### 清算导师 你导师入职第一天就和我切割,你切割的倒是快啊。来,到会议室讨论一下,先讨论三个小时。 导师:我有事。 我:你现在走,我就找领导。坐这。 然后导师就不走了,坐在这边。 年薪百万的导师,让我硬控了3个小时,晚饭都没法吃。 我让你走了,你才能走。 导师:你这不行啊。华为规范。 我:我已经被裁了,我是华为人吗?你切割的倒挺快啊。情感导师都来了?? 最后我放他走了。 ### 培训 华为有个培训,有个我不认识的人问我:你要参加入职培训。 我人都懵了:不是,我被裁员了,然后入职培训才开始? 我根本不搭理他。继续摸鱼。 然后她就@我,问我为什么不参加。 我说:试用期被裁了,参加什么? ### 然后找HR 事情是这样的:我走离职流程,需要我自己去打印离职申请书。然后找领导签字。 然后HR找我,说我必须把这个事情干了,否则怎么怎么样。 不是,我正找不到发泄口呢,你过来给我上眼药?我说:有时间。 HR:不行。 行,你也别走了。 你有事是吧?先把事情停一停。我的事情优先。 我就问他:我给你反馈过,项目出现了问题,项目不给资源,你是否知情? HR:之知情。 我:既然你知道,那现在裁员,不是我的问题。 HR:你是外包,甲方是华为。他说啥就是啥。 我:那太好了,你回去吧,我有时间给你走流程。 HR:不行,你得走流程啊。 我:说我必须把这个事情干了,否则怎么怎么样。这是你说的啊。不是很NB嘛。我都被辞退了,你给我说什么流程? 然后,HR直接冲进正在开会的领导会议室,然后逼着领导把离职通知书上的字签了。 我:?????????? 不是,你要是不把我干掉,你自己就得被干掉?? 然后:我反馈一条,他就给我申请1天的工资。 我反馈了12条,他补了12天的工资。 * 社保给你发到下一个月 * 休假给你发工资 * 钱到位了 然后告诉我:后面那几天也不用来,钱照发。 然后把我送出华为。 ### 房租问题 然后就出现了一个严重的问题:房租我是交了4个月的,加介绍费5个月。一个半月就被裁了。 工作一凉凉,直接损失三个月房租。 问题是: * 我在济南有工作,你南京是请我过去,然后承诺这个承诺那个 * 去了以后 不到10天全切割,40天裁员 * 房租水电哪个不要钱? 然后就在南京投了一个半月。 0面试。 事情是这样的:南京这边好像不太愿意招聘,一个是是211本科转专业有点低了,第二个是跨城市招聘稳定性不佳。 最后收拾收拾,去了北京。 ### 聊聊情绪 首先:项目本身出现了不止一个问题,几百个都有了。 流程僵化到死,各种压力怪。而且项目本身烂尾。互相都有怨气。 但是钱到位,大家能保持表面的和平。 你可以说华为有各种问题,但是钱是给得到的。 我去了以后,发现项目已经烂尾了,非人力所能挽救。 正常应该走的,但是我这个人比较财迷,觉得有机会。 给领导施压,领导如果真的找到能人,说不定能救。 觉得华为比较正规。14 * 14的工作不好找。 所以一边做压力怪压力整个华为团队,一边承担华为的压力。 ### 聊聊奶茶外交 然后我把这个事情分享到网上,网友的评价是:我导师好,他帮了我。 * 导师手把手,不给业务压力 * 然后5个月以后,进行正式开发 * 你菜你就承认,给你5个月你都开发不出来 我:…… 然后就是奶茶外交。 请负责人喝奶茶、请吃饭,然后人家才帮你。 我想了想,项目性质实在太差了,喝杯奶茶溅一身屎。人家都和你切割了。 然后就是:不管公司是否给资源,是否项目有可行性,你作为负责人就得给他兜底。 * 运维切割,那就在运维切割的情况下干活 * 全切了,那就啥资源都不要,强行上线 然后和父母去聊,父母又改口了: * 项目烂尾了,你是负责人,那你肯定要负责的 不是?你之前可不是这么说的。 ### 影响 首先就是:不做项目负责人。 太恶心了。从头到尾恶心到浑身难受。 有几个项目组给我发了offer,让我去做项目负责人,我直接拒。 然后就是:不接受高风险项目。

入职半年技术提升慢,是否应转向AI岗位?

### 学习目标 AI大模型的学习路径以及后续相关的规划 ### 个人情况 当前是在一家中厂中做数据开发工程师(24年毕业,这是第二家公司,目前入职大概半年多),但是当前AI对数据感觉不是很能够用的上,公司中数据安全也很机密,不能轻易做尝试。另外的话有消息传出后续可能会进行裁员;另外当前很少有能够自己做设计的地方,每天“杂事”(数据质量、数据治理、口径不统一等)相关的沟通的内容很多,感觉很消耗自己的“心力”。想着学下AI,后续能不能去做AI相关的开发。 ### 学习内容 自己学过的技能有:JAVA\各类数据库\py写一些自动化脚本(主要用AI来做)以及一些离线的数据相关能力 ### 学习问题 每天的需求感觉很满,而且多数都是在沟通、确认、自己的开发能力感觉提升很少,另外AI的出现并没有很明显像前后端一样提升效率或者给自己减负。繁杂但没有技术性的东西做的很多,而且加班很多,感觉很消耗且技术能力没有得到明显提升 ### 已有尝试 当前尝试过搭建一些工作流、学习prompt工程、以及了解claw等工具 ### 期望帮助 1. 希望能够指出我当前的困惑以及是否是属于正常的(入职半年多感觉技术提升不是很明显) 2. 要坚持数据做下去吗?(写SQL我倒还能接受,但是感觉每天的杂事特别多,专注开发很少)想学习AI并后续转到AI大模型岗位来为后续道路做规划是否合理? 3. 我还有其他需要做的点或是您能给我些其他的职业建议吗?

让老弟做个数据同步,结果踩了 7 个大坑!

你是小阿巴,刚入职一家电商公司。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/VPV854MMHG8l7pqk.webp) 第一天上班,老板就交给你一个艰巨的任务:**定期把公司的订单数据同步到数据分析仓库。** 一听到数据同步这 4 个字,你立刻汗流浃背了。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/CClmWOgYLnvPnjFV.webp) 你的哥哥程序员鱼皮,曾经就是在大公司负责数据同步。结果双十一当天,近 2 小时的订单数据没有同步过去。数据分析团队看到的数据是 2 小时前的,以为销量没达到预期,就没有及时给热销商品补货。最终错失了 1 个多亿的销售额!鱼皮也因此被老板优化掉了。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/70zqBebsNGG9a0zp.webp) 作为一名程序员,怎能轻易退缩?你握紧拳头,一定要完成好这个任务! ![](https://pic.code-nav.cn/post_picture/1601072287388278786/nwzJn53wzwrQE6tu.webp) > 建议观看本文对应视频版:https://bilibili.com/video/BV1Xvnoz7EKJ ## 全量同步 什么是数据同步呢?就像你有两个手机,要把其中一个手机的照片复制到另一个手机里。数据同步就是把一个数据库的数据,定期复制到另一个数据库里。 你心想:这还不简单吗?我写个定时任务,**每天** 把整个订单表的数据 **全部查出来**,然后 **一股脑插入** 到数据仓库! ![](https://pic.code-nav.cn/post_picture/1601072287388278786/OF8Ng6qDwdiZIqZy.webp) 这种方法叫 **全量同步**,不管数据有没有变化,每次都把所有数据重新复制一遍,简单粗暴。 ```python # 查出全部订单 orders = db.query("SELECT * FROM orders") # 清空已有老数据 warehouse.execute("DELETE FROM orders") # 插入新值 warehouse.insert(order) ``` 第一天,公司有 1 万条订单数据。你的程序跑了 3 个小时,同步成功! 老板看着数据夸到:不错啊小阿巴,开发神速啊! ![](https://pic.code-nav.cn/post_picture/1601072287388278786/kH9fSYzx8sCmoTm6.webp) 你内心暗爽:高端的功能往往只需要最简单的代码。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/wc5E02uJXsMWXnD8.webp) ## 基础告警 第二天一早,你还没到公司,就收到了运营小姐姐的夺命连环 call:“小阿巴!出大事了!昨天晚上的数据同步失败了,现在老板还没看到昨天的数据,他正在会议室发火呢!” ![](https://pic.code-nav.cn/post_picture/1601072287388278786/E5YQOOjIBiH6lSPu.webp) 你意识到:现在的程序是不可靠的,如果因为网络等原因同步失败了,可能要到第二天才会发现。 于是你给程序加了一段逻辑:如果同步失败,会记录错误日志,同时发邮件通知管理员,并且把数据库回滚到同步前的状态。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/NxzVyuqmzlswT7F4.webp) 这样如果出了问题,你会比老板先发现,手动重新执行一遍同步任务就好。 ## 增量同步 过了几天,老板黑着脸找你了:“小阿巴,为什么今天数据还没同步完?” 你看了下订单数据,立刻发现了问题。现在有 10 万条数据,程序跑了 30 个小时还没结束;这样下去,如果有 100 万条数据,估计要 300 个小时! 老板:少废话,快点解决,不然送你到隔壁餐饮部沉淀沉淀。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/Fc4071NIinxF6I7p.webp) 你开始思考:既然全量同步太慢,那我只同步每天新增的订单不就行了? ![](https://pic.code-nav.cn/post_picture/1601072287388278786/10Y2AAvaSUueLom9.png) 这就是 **增量同步**,约定每天 0 点执行同步任务,只同步昨天 0 点之后创建的订单。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/kumblgBPKZ4q6iRd.webp) 这样大大减少了每次同步的数据量,任务的执行时间不再线性增加了。 但很快,你发了一个问题,订单的状态是会发生变化的,比如用户付款后又退款。 如果使用订单创建时间作为增量同步的分界标志,**只能同步新增的订单**,但是订单状态的更新不会同步! ![](https://pic.code-nav.cn/post_picture/1601072287388278786/VbL9PmFXcaeGbUOb.webp) 于是,聪明的你使用 updated_time 字段进行增量同步,这个字段会在每次数据变化时自动更新。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/XJoQL9SMIoIKSfsg.webp) 这样新增和修改的数据都能同步了! 你内心窃喜:聪明如我小阿巴,老板夸我好开发。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/LYMEwMffzVyQQrHQ.png) ## 批处理 过了几天,公司搞了一波大促活动,当天订单量比平时多了几倍,老板请大家通宵狂欢开 party。 结果正在你欢唱 “只因你太美” 的时候,突然公司的运维大叫:不好了不好了,我们的项目服务器卡死了,用户无法下单! 你看了看时间,0 点多,不正是数据同步任务的执行时间么?你瞬间汗流浃背,放下麦克风,赶回公司修 Bug。 原来是因为一次查询出来的订单数据太多了,都加载到内存,导致服务器 OOM 内存溢出了。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/r7BBApn0v8rncgOC.webp) 你悔不当初:唉,早该想到这个问题,既然单次处理数据量太大有风险,那我就 **分批处理**。 每 100 条数据为一批,每次只从数据库中分页查询出这一批数据,同步完这一批,再执行下一批。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/n2sq4kWMuzn18hPi.webp) 这样每次只处理少量数据,内存压力小;而且如果某一批处理失败,只需要回滚和重新同步这一批,而不是全部重来。 问题算是解决了,但是今夜你彻夜难眠,你似乎成了公司业务增长后,唯一不开心的那个人。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/nx81b8mVjPL9e2QN.webp) 希望今后不会再遇到这种闹心事了吧。 ## 游标机制 但生活总是这样,屋漏偏逢连夜雨。两天后,你又收到了老板的咆哮:“狗阿巴,这就是你做的数据同步?你自己看看丢了多少数据!” 你大惊,丢失数据?不应该啊。。。 经过仔细排查,你发现了问题:如果在分页查询的过程中,有新的数据被插入或更新,就会导致数据偏移和丢失! 比如查询第 1 页时,符合条件的订单有 4 条: ```python 订单 A:updateTime=08:00 订单 B:updateTime=09:00 订单 C:updateTime=09:30 订单 D:updateTime=09:50 ``` 执行第 1 页查询,每页 2 条,偏移量为 0: ```sql SELECT * FROM orders WHERE updated_time >= '2025-09-08' and updated_time < '2025-09-09' ORDER BY updated_time LIMIT 2 OFFSET 0; -- 每页 2 条,第 1 页 ``` 查询结果返回订单 A(08:00)和订单 B(09:00),同步完成后将偏移量调整为下一页 `OFFSET=2`。 可就在查询下一页前,订单 B 因为 “修改订单状态” 被更新,这时订单 B 的更新时间就不在查询范围内了。 这就导致查询下一页 `OFFSET=2` 时,直接跳过了前两条订单 A 和 C,从 D 开始同步,导致订单 C 丢失。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/6IdQE3n7rZ7PSm7K.webp) 怎么解决这个问题呢? 这可难不倒你小阿巴,既然 **动态数据集** 中使用 SQL 自带的 OFFSET 偏移作为分页起点会出问题,那不妨 **自定义一个标志来记录下一批要同步的起点**。 这就是游标机制。 比如我约定自增的主键 id 作为游标,每查询一批数据之后,把这批数据的最后一条记录作为新的游标值;查询下一批数据时,只查询 id > 游标的数据。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/ev6FWxCT5NLrxEsm.webp) 这样不仅防止数据丢失,还避免了 OFFSET 深度分页带来的性能问题。 此外,如果把游标想象成进度条的断点,可以更清晰地记录同步进度,失败后可以从断点继续。 做完这一通优化后,你长吁了一口气,工作看来是保住了。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/sS5YQU3cMa8uja9M.webp) ## 性能优化 你以为终于可以安稳一段时间了。但没想到,公司的好日子才刚刚开始。 随着老板大力扩张业务,公司每天的订单量可以达到百万条,你的同步任务每次要跑几个小时才能完成。 更要命的是,老板现在对数据的依赖越来越强,要求每隔 2 个小时就要同步一次数据! 怎么能够让任务执行更快呢? 这时,你想起了曾经在 [程序员面试神器 - 面试鸭](https://www.mianshiya.com) 上背过的各种性能优化八股文。好家伙,终于能派上用场了! ![](https://pic.code-nav.cn/post_picture/1601072287388278786/spqX2wklNTfxPPRa.webp) 首先,修改插入数据库的操作方式。之前是一条一条地插入订单数据,改为执行一条批处理语句来同时插入同一批内多个订单数据,减少了跟数据库通信的次数,性能大幅提升。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/zAsEc3dZFeRcsaF0.webp) 但是你觉得还不够快,于是优化了批处理的流程。之前是等一批同步完再同步下一批,串行执行;现在你启动了多个线程,每个线程负责处理一批订单的同步,多个线程可以同时搬砖干活,效率大幅提高。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/EyhN8ETmrGVdGCbG.webp) 这一通操作下来,老板都激动了:“小阿巴,你这技术可以啊!好好干,我给你升职加薪!” 你笑了,有了老板这句话,你想继续努力给公司卖命了。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/Ym8uyqauv0dAUDwK.webp) ## 实时同步 两年后,随着你头发的消逝,公司总部决定要上市了! ![](https://pic.code-nav.cn/post_picture/1601072287388278786/PZUFMTG9RgfN5Z9Z.webp) 老板找到了你:“阿巴阿巴,咱们的数据同步能不能做到实时?我想给投资人展示实时的业务监控。最好是用户刚下单,投资人立刻就能在大屏幕上看到!" ![](https://pic.code-nav.cn/post_picture/1601072287388278786/V9zN4W2LR8nZtxKJ.webp) 你早料到会有这个需求,帅气地甩出一句话:“交给我吧,我让你见识一下企业级方案!” ![](https://pic.code-nav.cn/post_picture/1601072287388278786/TX6NIzWMDE10GESC.webp) 这两年你也没闲着,像实时数据分析这种典型需求的实现方案,你早已烂熟于心。 普通的定时任务已经无法满足实时性的要求,只能搬出 **CDC + 消息队列** 这两大杀器了。 CDC(Change Data Capture)就像给数据库安装了一个 24 小时实时监控的摄像头,数据有任何变化,摄像头都能立刻发现。 消息队列就像一个快递中转站。数据库变化的消息先发送到这个中转站,然后同步数据的程序从中转站取出数据并写入到数据分析仓库中。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/rDGMx4YdCBw5ho4T.webp) 有了中转站后,如果消息特别多,程序来不及处理,也不会丢失数据。 实现了这套方案之后,用户只要一下单,100 毫秒内老板就能在仪表盘上看到。而且保险起见,你还给消息队列加了个监控,如果消息堆积太多,就会自动告警。 他开心得像个孩子:“小阿巴,我给你升职加薪,还给你带新人!” 你又笑了,开始幻想着你和新人坐在高高的办公桌上,你给他讲述自己光辉事迹,他向你投来羡慕的目光。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/ES4ZVfaLrTThacW4.webp) ## 方案完善 半个月后,公司迎来了双十一大促活动。 你正在和新来的实习生阿坤吹牛皮,没想到瞬间产生了大量订单,像洪水一般,让你的实时同步系统出现了各种异常: - 有些订单重复同步了 - 有些订单的状态变化顺序错乱了 - 还有大量消息堆积在消息队列里处理不过来,导致数据没有及时同步 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/ZqXEabczMckjdxix.webp) 监控大屏上各种告警此起彼伏,老板的脸色越来越难看:“狗阿巴,这就是你说的企业级方案?” 这一刻,你有点恍惚:“我只是知道可以这么实现,但没人告诉我出了这些问题怎么解决。。。” 这时,你身旁的实习生阿坤说话了:“我来!” ![](https://pic.code-nav.cn/post_picture/1601072287388278786/XZgBcTrQd1BTcg8V.webp) 只见他对着电脑一通操作,嘴里振振有词: 1)消息重复问题,可以通过幂等机制解决。给每条消息一个唯一编号,处理过的消息编号记录下来,就不会重复处理了。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/umXfoIiYiJjY1ock.webp) 2)消息乱序问题,可以通过分区解决。把相关的消息放到同一个分区,保证同一个订单的消息按顺序处理。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/58obEcYi5snA1zyO.webp) 3)消息堆积问题,可以通过搭建集群和动态扩容,增加对消息的处理能力。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/yT3xNosyV2CKert8.webp) “这些点在使用消息队列来实现数据同步的时候就要考虑到才对呀!” 你听着阿坤说的话,默默低下了头,内心五味杂陈,这就是应届生的水平么? 阿坤看着你的代码接着说:“不是哥,做个数据同步要这么麻烦么?DataX、Canal、Debezium,这么多现成的企业级数据同步工具你不用?非要自己写代码?” ![](https://pic.code-nav.cn/post_picture/1601072287388278786/wuGoCh4iuKPogFzz.webp) 你无言以对,内心感受到了来自实习生的一吨暴击。 阿坤甚至一脸嫌弃地看着你:“不是哥们,连数据对账都不做么?你自己都不定期检查同步前后的数据是否一致么?我这有份数据同步的企业级方案,你好好看看吧。” ![](https://pic.code-nav.cn/post_picture/1601072287388278786/PxJfIlHiJolPmYJH.webp) ![](https://pic.code-nav.cn/post_picture/1601072287388278786/7BaHT1HSTPoq5Xbd.webp) 老板拍了拍阿坤的肩膀:“小伙子优秀,导师的导师,今后公司的未来就靠你了,我给你升职加薪。至于老阿巴,你好自为之吧。” 这个城市,又多了一个伤心的人,给个点赞收藏三连,帮忙回回血吧。 ![](https://pic.code-nav.cn/post_picture/1601072287388278786/MPl78algawwkdNxl.webp) ## 更多 💻 编程学习交流:编程导航:https://www.codefather.cn/ 📃 简历快速制作:老鱼简历:https://laoyujianli.com ✏️ 面试刷题神器:面试鸭:https://mianshiya.com 📖 AI 学习指南:AI知识库:https://ai.codefather.cn/

国庆也不能松懈,来道SQL题😀 表: Calls​ +--------------+----------+​ | Column Name | Type |​ +--------------+----------+​ | caller_id | int |​ | recipient_id | int |​ | call_time | datetime |​ +--------------+----------+​ (caller_id, recipient_id, call_time) 是这个表的主键。​ 每一行所含的时间信息都是关于caller_id 和recipient_id的。​ 编写一个 SQL 查询来找出那些ID们在任意一天的第一个电话和最后一个电话都是和同一个人的。这些电话不论是拨打者还是接收者都会被记录。​ 结果请放在一个任意次序约束的表中。​ 查询结果格式如下所示:​ 输入:​ Calls table:​ +-----------+--------------+---------------------+​ | caller_id | recipient_id | call_time |​ +-----------+--------------+---------------------+​ | 8 | 4 | 2021-08-24 17:46:07 |​ | 4 | 8 | 2021-08-24 19:57:13 |​ | 5 | 1 | 2021-08-11 05:28:44 |​ | 8 | 3 | 2021-08-17 04:04:15 |​ | 11 | 3 | 2021-08-17 13:07:00 |​ | 8 | 11 | 2021-08-17 22:22:22 |​ +-----------+--------------+---------------------+​ 输出:​ +---------+​ | user_id |​ +---------+​ | 1 |​ | 4 |​ | 5 |​ | 8 |​ +---------+​ 解释:​ 在 2021-08-24,这天的第一个电话和最后一个电话都是在user 8和user 4之间。user8应该被包含在答案中。​ 同样的,user 4在2 021-08-24 的第一个电话和最后一个电话都是和user 8的。user 4也应该被包含在答案中。​ 在 2021-08-11,user 1和5有一个电话。这个电话是他们彼此当天的唯一一个电话。因此这个电话是他们当天的第一个电话也是最后一个电话,他们都应该被包含在答案中。

运气和努力的成果--我来还愿了!

# 社招不到一年经验,成功转型大数据工作 大家好啊,好久不见。最近没有在星球打卡学习,是因为在疯狂投简历面试。功夫不负有心人,在今天一家中大厂下了offer,激动的心,颤抖的手,起初还担心自己无法成功转入真正的大数据行业,因为之前做的是传统行业的数据分析,难免有些偏差,好在offer到手,希望试用期通过。接下来做一个简单的个人分享。 ![48A7F432.jpg](https://pic.code-nav.cn/post_picture/1611273898647617537/Z4tVfd3expSJGXi5.jpg) ## 一、学习相关专业内容 因为之前做的是传统行业的开发,用到的技术和技术栈其实也是比较落后的,接触不到先进的业务和技术,如之前用的多数是**MySQL、Java、Python**用来写些工具脚本等,虽然有BI平台,但好多都是不方便的,不如大厂的如**dataworks**等工具顺手。步入正题,如果大家有同样想转行大数据的或是做这方面的,学习内容主要围绕下面几个部分展开。 1. **SQL**这是最基本的,也是贯穿整个开发过程必备的技术能力,日常开发,取数,做报表都离不开。主要学习基本语法,开窗函数、存储过程(这个传统行业用的多一些),学习HQL、SparkSQL等,大同小异,可以去牛客和力扣练习。 2. 编程语言:这里建议学习**Java**语言,因为好多大数据组件其实也是Java开发的,另外后期做实时开发的话会Java也会好理解很多,况且现在Java新特性也很多,写起来会比之前更加方便,这里可以根据**鱼皮哥的JAVA学习路线**学习,只学习基础即可,会简单的crud,会写接口,能看懂代码。如果有余力也可以学习Python语言,日常做一些简单的工具也是很方便的,可以帮助你提升效率,早早下班! 3. 大数据组件:依次学习**Hadoop、Hive、Spark**、Kafka、**Flink、Doris**、Clinkhouse等其他组件。要了解他们的底层原理、熟悉他们的执行流程(这个面试经常会问到),其次就是学习他们的API开发和SQL语法了。 ![b5fc6f68-aa5f-48f5-99ac-bee4a707c6f3.jpg](https://pic.code-nav.cn/post_picture/1611273898647617537/5LKY3W44qO26hKQM.webp) 4. 数据建模:学习完上部分内容后,可以了解学习一下建模理论,主要是维度建模,清楚为什么要使用维度建模,为什么要进行分层,如何去规划数仓等。 5. 假如你已经学习完了上面的所有内容,恭喜你基本的开发能力已经有了,后续主要去了解学习**数据质量、数据安全、数据计算、数据资产**等相关内容,确保我们开发后的模型更加可靠,好用!能够发挥出**数据的价值**。 学习完上面的内容就可以好好改改简历进行投递了!!! ## 二、简历书写 这部分重要程度五颗星!!!好的简历可以让面试官眼前一亮,在几百份的简历中脱颖而出。要知道这可是投递简历的第一步! ![image.png](https://pic.code-nav.cn/post_picture/1611273898647617537/nhD0yI3eS3xtGB2F.webp) 大家觉得上面图片中的简历如何呢?其实我们还有优化的点,我们可以使用**star法则**来进行书写,既突出重点,也能让面试官觉得你的简历有条理。我们可以重点交代出**项目的背景、项目描述、项目过程、项目产生的价值**(这部分一定要进行量化,突出工作量及重点,如:成功将xxx指标优化,数据访问时间由xxx分钟提升到xxx分钟) ![1.png](https://pic.code-nav.cn/post_picture/1611273898647617537/PhJi8XEAaQ97yvWs.webp) 具体的也可以看编程导航中的相关简历书写内容https://www.codefather.cn/post/1808580073557721089 ## 三、投递简历与复盘 投递简历时,也有些技巧。我们可以在投递简历前认真的书写下**打招呼语**,是的,这一部分也很重要,直接影响到HR能否让你投递简历或者做更深的了解,试想一下如果我们只是说句您好,那么HR并不知道你到底有几年的经验,之前做过哪些内容,容易造成《已读不回》。之前鱼皮哥也有讲。可以看https://www.codefather.cn/post/1831925979148251138 这个文章,一定要提前写好这部分根据自己的实际情况。 有了打招呼语后我们可以先在自己不想去的城市去撒网投递,可以当练练手,避免真正想去的公司面试紧张导致机会丢失,等到熟练之后就可以针对性的投递了。 我们最好选择**周一到周四**进行投递,周五大家其实都有惰性,可能投递了简历HR也不会认真去看,去筛选了,避免石沉大海。和HR聊也尽量态度谦卑友好些,即使你知道这家公司其实你并不感冒,但是为了面试机会练练手,还是三十六计忍为上。有了面试机会就成功一半了。另外我是社招,会多数存在要线下面试的情况,这种可以根据把握或者离自己远近而定去或者不去,我个人是线下的都拒绝了。 其他内容按照鱼皮之前的分享准备就好,这里不做赘述了。 如果!如果面试没有通过,那么我们其实也不用灰心,因为不一定是自己的问题,有时候岗位的匹配度、其他人选、公司内部决策等各种因素都会导致面试不过。但我们需要的是**及时复盘**,我们在面试完一家公司后,及时的做总结,把问到的问题,答上来的、没答上来的、几家公司相同的问题等都记录下来,及时复习,方便自己在后续面试中游刃有余。例如下面是我做的一些简单的复盘记录。 ![image.png](https://pic.code-nav.cn/post_picture/1611273898647617537/hBxZgOCyeFLeMONc.webp) ## 四、其他的碎碎念 除了上述的内容,我们更重要的是要保证自己良好的心态,工作说到底也只是一份工作,人生是旷野呀!短期找不到工作也不用焦虑,行动是解决焦虑的最好办法。另外我们也需要保持持续学习的态度,偶尔也需要卷起来! 人生不相信眼泪,命运鄙视懦弱! 最后放一张鱼皮哥的公众号封面,还愿啦! ![Snipaste_2025-09-05_20-46-23.png](https://pic.code-nav.cn/post_picture/1611273898647617537/b5NiFSlyU4aymcx5.png)

Hive3的安装配置

### 1.<font style="color:rgba(58, 64, 73, 0.97);">上传安装包 解压</font> ```shell tar zxvf apache-hive-3.1.2-bin.tar.gz # 解决Hive与Hadoop之间guava版本差异 cd /export/server/apache-hive-3.1.2-bin/ rm -rf lib/guava-19.0.jar cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/ ``` ### 2.修改配置文件 1. **hive-env.sh** ```shell cd /export/server/apache-hive-3.1.2-bin/conf mv hive-env.sh.template hive-env.sh vim hive-env.sh export HADOOP_HOME=/export/server/hadoop-3.3.0 export HIVE_CONF_DIR=/export/server/apache-hive-3.1.2-bin/conf export HIVE_AUX_JARS_PATH=/export/server/apache-hive-3.1.2-bin/lib ``` 2. **<font style="color:rgba(58, 64, 73, 0.97);">hive-site.xml</font>** ```shell vim hive-site.xml ``` ```xml <configuration> <!-- 存储元数据mysql相关配置 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node1:3306/hive3?createDatabaseIfNotExist=true&amp;useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>你的数据库密码</value> </property> <!-- H2S运行绑定host --> <property> <name>hive.server2.thrift.bind.host</name> <value>node1</value> </property> <!-- 远程模式部署metastore metastore地址 --> <property> <name>hive.metastore.uris</name> <value>thrift://node1:9083</value> </property> <!-- 关闭元数据存储授权 --> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> </configuration> ``` ### 3.初始化元数据 ```shell # 上传mysql jdbc驱动到hive安装包lib下 cd /export/server/apache-hive-3.1.2-bin/ bin/schematool -initSchema -dbType mysql -verbos #初始化成功会在mysql中创建74张表 # 在hdfs创建hive存储目录 hadoop fs -mkdir /tmp hadoop fs -mkdir -p /user/hive/warehouse hadoop fs -chmod g+w /tmp hadoop fs -chmod g+w /user/hive/warehouse ``` ### 4.<font style="color:rgba(58, 64, 73, 0.97);">启动hive</font> 1. **启动metastore服务 ** ```shell #前台启动 关闭ctrl+c /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore #前台启动开启debug日志 /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console #后台启动 进程挂起 关闭使用jps+ kill -9 nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore & ``` 2. **启动hiveserver2服务** ```shell nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 & #注意 启动hiveserver2需要一定的时间 不要启动之后立即beeline连接 可能连接不上 ``` 3. **<font style="color:rgba(58, 64, 73, 0.97);">beeline客户端连接</font>** ```shell # 拷贝node1安装包到beeline客户端机器上(node3) scp -r /export/server/apache-hive-3.1.2-bin/ node3:/export/server/ # 连接访问 /export/server/apache-hive-3.1.2-bin/bin/beeline beeline> ! connect jdbc:hive2://node1:10000 beeline> root beeline> 直接回车 ``` ### 所需要的文件 [apache-hive-3.1.2-bin.tar.gz](https://www.yuque.com/attachments/yuque/0/2024/gz/34310486/1708588493356-d6226ea1-e5b0-4864-a3e3-27202cc04de8.gz) [mysql-connector-java-5.1.32.jar](https://www.yuque.com/attachments/yuque/0/2024/jar/34310486/1708588481658-f9a3f3d5-61ef-4eca-883f-6a92cd68e78c.jar)

Hadoop3的配置信息

## 一、修改配置文件 ### 1.hadoop-env.sh ```shell export JAVA_HOME=/export/server/jdk1.8.0_65 #文件最后添加 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root ``` ### 2.core-site.xml ```xml <!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 --> <property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> </property> <!-- 设置Hadoop本地保存数据路径 --> <property> <name>hadoop.tmp.dir</name> <value>/export/data/hadoop-3.3.0</value> </property> <!-- 设置HDFS web UI用户身份 --> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> <!-- 整合hive 用户代理设置 --> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> ``` ### 3.hdfs-site.xml ```xml <!-- 指定secondarynamenode运行位置 --> <!-- 设置SNN进程运行机器位置信息 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>node2:9868</value> </property> ``` ### 4.mapred-sit.xml ```xml <!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- MR程序历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> ``` ### 5.yarn-site.xml ```xml <!-- 设置YARN集群主角色运行机器位置 --> <property> <name>yarn.resourcemanager.hostname</name> <value>node1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 是否将对容器实施物理内存限制 --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <!-- 是否将对容器实施虚拟内存限制。 --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <!-- 开启日志聚集 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置yarn历史服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://node1:19888/jobhistory/logs</value> </property> <!-- 保存的时间7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> ``` ### 6.workers ```shell vi workers node1 node2 node3 ``` ## 二、分发安装包并启动 ```shell cd /export/server scp -r hadoop-3.3.0 root@node2:$PWD scp -r hadoop-3.3.0 root@node3:$PWD # 添加环境变量 vim /etc/proflie # Hadoop3 export HADOOP_HOME=/export/server/hadoop-3.3.0 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native:$HADOOP_COMMON_LIB_NATIVE_DIR" export YARN_HOME=$HADOOP_HOME export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop #有个警告信息就是处理不了,解决了踢我谢谢 #WARNING: YARN_CONF_DIR has been replaced by HADOOP_CONF_DIR. Using value of YARN_CONF_DIR.Stopping nodemanagers #export YARN_CONF_DIR=$YARN_HOME/etc/hadoop export HADOOP_LOG_DIR=$HADOOP_HOME/logs export HDFS_CONF_DIR=$HADOOP_HOME/etc/hadoop export PATH=.:$JAVA_HOME/lib:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH source /etc/profile # 首次启动 格式化namenode hdfs namenode -format # 一键启动 start-dfs.sh start-yarn.sh ``` Web UI页面 + HDFS集群:[http://node1:9870/](http://node1:9870/) + YARN集群:[http://node1:8088/](http://node1:8088/) ### 所需要的文件 [jdk-8u65-linux-x64.tar.gz](https://www.yuque.com/attachments/yuque/0/2024/gz/34310486/1708587800524-9f18f67f-2832-4abd-af54-e5c4189992d6.gz) [hadoop-3.3.0-src.tar.gz](https://www.yuque.com/attachments/yuque/0/2024/gz/34310486/1708587914996-b503c3fb-283e-4109-a43a-d878e2c4650e.gz)

大数据|京东数开校招面经

1、夹角余弦 2、过拟合,训练误差、测试误差、验证误差 3、Python类的第一个参数名 4、Hadoop定义一个结构化对象需要什么接口 5、循环队列为空时,头尾指针关系 6、合并排序法遵循什么法则—分治法 7、正则表达式 8、ID3算法以什么指标作为度量—信息增益 9、新复极差法 10、方差分析又称变异数分析,利用F检验 11、简单选择排序 12、数据库的基本封锁类型 13、HDFS的架构形式:主从架构Master-Slave 14、用来管理线程的模块是:threading 15、Numpy统计数组元素个数的方法:size, len 16、Shell里case对应的结束语句:esac 17、贪心算法两道算法题:动态规划和图

社招裸辞,找数据开发岗,该如何学习?

### 求职目标 在7月底(8月初)拿到不少于10k薪资的数仓开发(数据开发)岗位 ### 个人情况 4月底裸辞后,6月开始补充知识技能和项目,目前学的都是大数据,数仓相关的内容 ### 求职困惑 还能增添什么内容来增加自己的竞争力?简历可以写AI智能体项目吗?以此来突出还有AI相关的经验 ### 期望帮助 是否需要增添这部分内容,还是说只需要把大数据相关的内容写好即可

数据挖掘分类任务深度分析报告

## 数据挖掘分类任务深度分析报告 **核心定义**:分类(Classification)是一种**监督学习任务**,通过已知标签的历史数据训练模型,预测新样本的离散类别标签(如“欺诈/非欺诈”“疾病类型”)。 --- ### 一、分类任务的本质与数学表达 #### 1. 核心目标 给定数据集 \( D = \{ (\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), ..., (\mathbf{x}_n, y_n) \} \): - \(\mathbf{x}_i \in \mathbb{R}^d\) 为 \(d\) 维特征向量(如用户年龄、交易金额) - \(y_i \in \{C_1, C_2, ..., C_k\}\) 为离散类别标签(如 \(C_1=\text{"正常"}, C_2=\text{"欺诈"}\)) 构建映射函数 \( f: \mathbb{R}^d \rightarrow \{C_1, ..., C_k\} \) 预测新样本 \(\mathbf{x}_{\text{new}}\) 的类别。 #### 2. 关键评价指标 | **指标** | **公式** | **适用场景** | |--------------------|------------------------------------|--------------------------| | 准确率 (Accuracy) | \(\frac{TP+TN}{TP+TN+FP+FN}\) | 类别均衡时 | | 精确率 (Precision)| \(\frac{TP}{TP+FP}\) | 重视降低误报(如垃圾邮件)| | 召回率 (Recall) | \(\frac{TP}{TP+FN}\) | 重视减少漏报(如癌症检测)| | F1-Score | \(2 \times \frac{P \times R}{P+R}\) | 均衡精确率与召回率 | | AUC-ROC | ROC曲线下面积 | 类不平衡模型综合评估 | --- ### 二、主流分类算法原理与对比 #### 1. 基础算法:决策树(Decision Tree) - **核心思想**:通过树形结构递归划分特征空间,每个叶节点对应一个类别。 - **关键机制**: - **分裂准则**:信息增益(ID3)、增益率(C4.5)、基尼指数(CART) - **剪枝策略**:预剪枝(限制深度)、后剪枝(CCP代价复杂度剪枝) - **优势**:可解释性强、支持类别型特征、无需特征缩放 - **局限**:容易过拟合、对数据波动敏感 #### 2. 集成学习:随机森林(Random Forest) - **核心思想**:集成多棵决策树,通过投票机制降低方差。 - **关键机制**: - **Bagging**:有放回抽样生成训练子集 - **特征随机**:每棵树分裂时仅考虑随机子集的特征(如 \(\sqrt{d}\) 个) - **优势**:抗过拟合、高鲁棒性、支持并行训练 - **局限**:模型解释性弱、内存占用高 #### 3. 边界优化:支持向量机(SVM) - **核心思想**:在特征空间中寻找最大化类别间隔的超平面。 - **数学本质**:求解凸优化问题: \[ \min_{\mathbf{w},b} \frac{1}{2}\|\mathbf{w}\|^2 + C\sum_{i=1}^n \xi_i \quad \text{s.t.} \quad y_i(\mathbf{w}^T\mathbf{x}_i + b) \geq 1 - \xi_i \] - **核技巧(Kernel Trick)**:通过 \(\phi(\mathbf{x})\) 映射到高维空间(如RBF核 \(\exp(-\gamma \|\mathbf{x}_i - \mathbf{x}_j\|^2)\)) - **优势**:高维数据有效、理论保证强(结构风险最小化) - **局限**:计算复杂度高(\(O(n^3)\))、难解释 #### 4. 概率模型:朴素贝叶斯(Naive Bayes) - **核心思想**:基于贝叶斯定理与特征条件独立假设: \[ P(y|\mathbf{x}) \propto P(y) \prod_{j=1}^d P(x_j|y) \] - **变体**: - 高斯朴素贝叶斯(连续特征) - 多项式朴素贝叶斯(文本词频) - **优势**:训练快(\(O(nd)\))、小数据表现好 - **局限**:特征独立假设不成立时性能下降 #### 5. 深度学习:神经网络(Neural Network) - **核心结构**:多层感知机(MLP) \[ \mathbf{h}^{(1)} = \sigma(W^{(1)} \mathbf{x} + \mathbf{b}^{(1)}), \quad \hat{y} = \text{softmax}(W^{(2)} \mathbf{h}^{(1)} + \mathbf{b}^{(2)}) \] - **优化机制**: - 反向传播(Backpropagation) - 激活函数:ReLU、Sigmoid - **优势**:自动特征工程、处理复杂模式(图像/语音) - **局限**:需大量数据、黑盒模型、训练成本高 #### 6. 其他重要算法 | **算法** | **核心思想** | **典型场景** | |-------------------|----------------------------------|--------------------------| | K近邻 (KNN) | 基于距离的局部投票 | 小规模数据、低维特征 | | 逻辑回归 (LR) | 线性分类器 + Sigmoid概率输出 | 金融风控、医学诊断 | | 梯度提升树 (GBDT) | 迭代训练弱学习器拟合残差 | 搜索排序、CTR预估 | --- ### 三、算法选择决策树 ```mermaid graph TD A[数据规模] -->|小样本| B[朴素贝叶斯/KNN] A -->|大规模| C{特征类型} C -->|高维稀疏| D[线性模型:LR/SVM] C -->|复杂结构| E[深度学习:DNN] C -->|混合特征| F[树模型:RF/GBDT] G[可解释性要求] -->|强| H[决策树/LR] G -->|弱| F ``` --- ### 四、现实挑战与解决方案 #### 1. 类别不平衡(Class Imbalance) - **问题**:欺诈检测中正负样本比例 1:1000 → 模型偏向多数类 - **解法**: - **数据层**:过采样(SMOTE)、欠采样(Tomek Links) - **算法层**:代价敏感学习(加大少数类错分惩罚) - **评价指标**:用 AUC/F1 替代 Accuracy #### 2. 特征高维与稀疏 - **问题**:文本分类中词向量维度 >10,000,多数特征为0 - **解法**: - 特征选择(卡方检验、信息增益) - 嵌入降维(PCA、AutoEncoder) - 选择稀疏友好模型(LR + L1正则) #### 3. 概念漂移(Concept Drift) - **问题**:用户行为随时间变化 → 模型性能衰减(如推荐系统) - **解法**: - 在线学习(增量更新模型) - 定期重训练(滑动窗口采样) --- ### 五、典型应用场景分析 | **领域** | **问题** | **算法优选** | **关键特征工程** | |----------------|------------------------|-------------------|------------------------------| | 金融风控 | 欺诈交易识别 | GBDT/RF | 交易频次、IP异常、设备指纹 | | 医疗诊断 | 癌症病理分类 | SVM/DNN | 基因序列、医学影像像素 | | 电商推荐 | 用户兴趣分类 | LR/FM | 历史点击、协同过滤向量 | | 工业质检 | 产品缺陷检测 | CNN | 高分辨率图像、缺陷区域分割 | --- ### 结论 1. **任务本质**:分类是构建 **\( \mathbf{X} \rightarrow y \) 的映射函数**,核心在于**最大化泛化性能**与**平衡效率/解释性**。 2. **算法选型**: - 追求解释性 → 决策树/逻辑回归 - 需高精度 → 随机森林/梯度提升树 - 处理非结构化数据 → 深度学习 3. **落地关键**: - **数据质量 > 算法复杂度**:90%时间应用于特征工程与数据清洗 - **场景适配**:医疗诊断需高召回率,金融风控重高精确率 > “没有最好的分类器,只有最合适的分类器” —— 根据问题特性匹配算法,才是数据挖掘的终极智慧。

下载 APP