一个朴实无华的0基础土木转行前端经验分享贴
今天三方已签,总体来说结果比较满意,目前无论从哪方面来看,转行后的工作都比从事本专业的工作要好。本次转行也算是一次比较大的抉择,遂写下这篇帖子记录一下自己的历程,也为广大处在天坑专业的朋友的就业方向提供一个参考。
个人背景
- 学历:双非力学本,末流985土木工程硕,转行之前完全没怎么接触过计算机编程,纯纯力工
- 求职岗位:前端开发工程师
- offer情况:美团、拼多多 、shopee、快手、360、小红书,当然还有一些不太知名的公司(包括转转、途虎养车、富途、shein、欢聚时代、大华、端点、用友等等)
题外话:我是2018年研究生入学,三年制硕士应当是21届毕业。但是选择了延毕到22年毕业,参加的是22届校招。
接下来就可能对大家有帮助的几个问题展开说一下:
薪资情况
大家可能比较关心的问题就放到最前面吧😁
今年互联网给应届生的工资都相当高,好一点的学校的计算机专业的话,除去考公务员的,今年40w+的offer因该是计算机学院大部份人的情况。
对于作为非科班的我来说,薪资稍微差那么一些,不过绝对比传统土木行业的工资要高很多,这也是出乎我预料的地方,具体情况可以去offershow小程序上看看 。我自己在秋招过程中斩获的offer薪资范围是:大厂一般在40w+,小厂一般25w~30w不等。
互联网比较公平的一点是,大部门公司根据面试表现给薪资,当然也有少部分企业是按照学历等级划分薪水等级的。总的来说,只要你面试表现够优秀,八股文背到位,按照正确的学习路线掌握知识,刷一些中等的算法题,双非本的薪资超过985硕也是很正常的。(如果你有任何疑问也可以来咨询我相关的学习信息)
为什么不去从事土木本专业?
当你找到这个帖子的时候, 肯定就知道为什么不去从事土木行业了,一切尽在不言中。 你只是需要在转行和公务员之间做抉择
关于土木的就业,知乎、土木工程吧逛一圈就啥都明白了,现在B站也成了土木劝退重灾区了,这世界上还真就存在钱多,事少,离家近,三个一样都不沾的工作。
最近刚好刷到一个比较权威的公众号发的文章,对这个行业不了解的可以参考参考。笑死我了,土木行业真是惨
正是察觉到行业的没落, 以及难以改变的行业现状, 所以哪怕7年沉没成本巨大也要强行跑路,有时候真的不是个人问题, 而是整个行业的恶性循环导致的工作环境恶劣,能跑尽早跑。
为什么选择延期毕业?
在我意识到土木就业不行的时候已经是研二的上学期了,那时候正处于疫情,自由时间比较多,开始规划自己的就业了,在家看了很多帖子,咨询了很多前辈,最后果断决定转行,当时罗列的方向还挺多的,小学老师,银行,选调生、互联网产品经理。没有去求职任何土木相关的岗位。
不过因为信息闭塞,缺乏有效的前辈指导,在21届秋招的求职中没有明确的方向,像无头苍蝇一样乱撞,虽然经历了将近3个月的秋招,仍然是颗粒无收。最后12月还去参加了选调生考试,自己感觉希望最大的选调生也没有上岸,当时我们学院基本人人都在考,而一个岗位就招那么一两个人,竞争难度可想而知。
21届秋招以失败告终,最暴力的方式就是延毕一年,去好好准备2022届的秋招。当然这个想法非常大胆,非科班+延毕+0实习,到时候真的会有企业要吗?延毕一年会不会到时候连去打灰的资格都没了?那段时间每天都在自我怀疑和焦虑中度过,偶然有一天我在牛客刷到了一篇帖子,而且这篇帖子居然还是我同校的材料学师兄发的,师兄他也是转行产品经理失败,延毕一年转战java成功上岸。这里附上链接:我菜故我在——转行遇上新冠的故事_笔经面经_牛客网
师兄的经历就像给了我一丝曙光,告诉我延毕这条路是可行的,之后我也走上了延毕的不归路。
我选择延期毕业的原因有两点:(1)给自己争取足够的自由学习时间,准备充足后再次出发;(2)如果不延期毕业,第二年是以非应届的身份参加互联网秋招,没有秋招提前批,秋季校招,春招提前批,春季校招,浪费了很多优秀的招聘机会,而且只能参加社招,竞争激烈
为什么选择互联网以及选择前端岗位?
- 第一,毫无疑问,高薪是一个很重要的原因,拿着一样的学历,学的各种力学也挺难的,加着同样的班,而计算机的同学第一年就拿你工资的两三倍,而且人家是在舒服的写字楼里面,前景和工作环境对比之下谁不破防呢?
- 第二,互联网的包容性够大,一开始我也不相信一个和计算机毫不相干的专业可以顺利拿到这么高的offer,但是我身边有这样的例子发生以后我就有信心了。
- 第三,相较于传统工科行业,互联网的前景还算不错,虽然这些年来一直有人唱衰互联网,但是总体来说还不算那么夕阳。互联网正在走下坡路吗?
最终我选择的是前端开发岗,因为前端的竞争会比java后端,算法岗这些小很多(科班大部分人的求职方向就是java或者算法),对于非科班的我来说:
- 这个岗位不要求特别好的算法基础、计算机核心课程以及数据库等,你只需要有针对性的去学习前端的知识。
- 学习曲线平缓,前期只要努力坚持下去,就能掌握企业要求的能力标准,不过后期需要大量学习新知识。这一点对于我来说很合适,因为我的学习能力不算强,我的目标就是在有限的时间内,学会一门技能,然后拿到offer即可(当时也没想着能去大厂)。如果换做是java和算法岗,我可能还没学会这一个学期就结束了
- 学习的时候,可以实时预览自己的编程成果,正反馈效应高
互联网有专业歧视吗?
首先说结论,除了国企之外90%的互联网企业都不会。剩下的10%我的确遇到过由于专业原因在面试的时候直接劝退我的.
有一次某公司复试,面试官一个技术问题都没问我,全程在跟我说土木多么多么好,你这样太可惜了🤣哈哈哈,劝完之后反手一个挂。但是绝大部份公司看重的是你的掌握的基本功,你的代码能力。面试的问题和算法都能回答出来,他就没有理由淘汰你。甚至会由于你是非科班而对你的自学能力有一个好印象。
再说说我周边的情况,在求职的时候我也在牛客上认识了很多非科班转前端的队友,化学的,机械的,材料的,土木的各种各样都有吧,除了文科确实是比较少见。而且经过交流这些同学基本也拿到offer了。所以结论是互联网基本不会歧视你的专业,哪怕你和计算机毫无关联, 哪怕你没有实习经历,面试就像考试一样,你面试得到的分数及格了就能通过,其它的因素并不能决定你的结果。
我的前端学习之路
我是从2020年12月份正式开始前端学习的,学了大概一个多月后坚定延毕参加22年秋招的想法后,才向导师沟通,这里也十分感谢导师理解我,同意我的决定。
我是0基础开始转计算机,起步的两三个月确实比较痛苦。我一开始是通过看视频的方式来学习,入门了之后就开始看书和帖子,因为视频虽然简单易懂但是效率太低。
整体掌握的技术栈并不全面,但是针对校招也足够了,主要如下:
- 前端三大件:html, css, javaScript
- 前端框架:vue
- 计算机网络, 数据结构与算法,以及一点点的操作系统
- node和webpack(了解基本即可)
html:这个没什么好说的,基本一两天就学完了,面试也不怎么问。在bilibili上看了pink老师的教学视频。
css: 也是先在bilibili上看了pink老师的教学视频,然后尝试着写了个静态网页。后面又看了绿叶学习网的教程,《CSS进阶之旅》《HTNL5+CSS3修炼之道》
javaScript: 可以说JS是前端的重中之重了,也是我接触的第一门编程语言,在JS上面花了比较多的时间。视频:pink,尚硅谷。书籍:《JavaScript高级程序设计》《ES6标准入门》
vue: 比较推荐bilibili上播放量最高的视频,讲得很全,带着入门没问题的。至于源码的学习可以通过看别人总结好的帖子,然后我也看来一本关于源码的书《深入浅出Vue.js》
计算机网络:重中之重,《图解HTTP》《图解TCP/IP》然后多看博客多记忆,计算机网络还是挺多死记硬背的东西。
数据结构与算法:前端对算法难度要求是比较低的,但是在面试中占的权重是很大的,《大话数据结构》《图解算法》《数据结构与算法JavaScript描述》《剑指offer》,推荐几个有用的网站: codetop,leetcode中文网,freecodecamp
总结
- 选择永远大于努力。有人常说,选择不重要,不管选择那条路,只要我们努力就够了,但有时还真不是,你跑错道了,那你跑的再快,也可能追不上别人了。
- 顺势而为。雷总说过:站在风口上猪都能飞起来。互联网的风口或许已经过去了,但剩下的红利还是够我们吃的。下一个风口在哪?新能源?碳中和?我把握不住。
- 提早规划自己的未来。读了快20年书的我们多多少少有点生活在象牙塔里面,如果没有读博的打算,除了科研之外,应该趁早看看自己以后的工作是什么样的,衡量一下是不是自己想要的,如果不是,尽早做出改变。如果我能早一点开始编程,也不至于走这么多弯路。
写在结尾
对于天坑专业的同学来说,在人生阶段的关键节点,选择总是大于努力,因为我们不再年轻,试错成本越来越大.
当然像我一样采取延毕一年的方式转行有些极端,希望有转行或者考公想法的同学早早开始吧,因为时间过得真的很快!希望这个帖子能够对于你们的求职方向的抉择给予一些参考.
面试经历
最后附上这5、6个月以来的面经回馈牛客(之前没有发出来过,有些很常规的八股问题也忘了,就把印象比较深的写一下吧. 后面会专门开一帖详细写写面经)
虾皮
虾皮提前批一面:
- 手写题:有效的括号(leetcode原题)
- xss、csrf的攻防
- Web Worker及Service Worker
- 看代码说输出
虾皮提前批二面:全程在问计算机网络,问得很细很细。
虾皮正式批一面
- 手写题:函数柯里化(实现sum(1)(2)(3))
- 性能优化的手段。
- 看代码说输出
function Foo() { console.log(this) this.getName = function () { console.log('1') } return this } Foo.getName = function () { console.log(2) } Foo.prototype.getName = function () { console.log('3') } var getName = function () { console.log('4') } function getName() { console.log('5') } // 打印 Foo.getName() //2 getName() //'4' Foo().getName() //window, '1' getName() //'1' new Foo.getName() //2 new Foo().getName() //Foo实例对象,'1'
- 减少回流和重绘的方法
虾皮正式批二面
手写题:手写instanceof
手写题:promise异步任务调度,每次最多执行两个,当执行完一个之后立马加入下一个,用最快的速度执行完全部任务
class Scheduler { constructor() { this.tasks = [], // 待运行的任务 this.usingTask = [] // 正在运行的任务 } // promiseCreator 是一个异步函数,return Promise add(promiseCreator) { return new Promise((resolve, reject) => { promiseCreator.resolve = resolve if (this.usingTask.length < 2) { this.usingRun(promiseCreator) } else { this.tasks.push(promiseCreator) } }) } usingRun(promiseCreator) { this.usingTask.push(promiseCreator) promiseCreator().then(() => { promiseCreator.resolve() this.usingMove(promiseCreator) if (this.tasks.length > 0) { this.usingRun(this.tasks.shift()) } }) } usingMove(promiseCreator) { let index = this.usingTask.findIndex(promiseCreator) this.usingTask.splice(index, 1) } } const timeout = (time) => new Promise(resolve => { setTimeout(resolve, time) }) const scheduler = new Scheduler() const addTask = (time, order) => { scheduler.add(() => timeout(time)).then(() => console.log(order)) } addTask(400, 4) addTask(200, 2) addTask(300, 3) addTask(100, 1) // 2, 4, 3, 1
虾皮hr面
- 本科和研究生成绩及排名
- 土木专业的为什么想要做前端
- 你是如何学习前端的
- 对工作地点的看法
- 职业规划
- offer选择问题
拼多多
拼越计划一面
一上来先写了三个题:
- CSS两栏布局,但是要求右边栏写在前面,两种方法实现
- 防抖节流
- 无重复字符的最长字串
- 八股文:HTTP2.0,多路复用那里问得比较详细,HTTP3.0,QUIC
拼越计划二面
- 问了问项目
- 图片懒加载的实现方式,尽可能多说几种
- 手写防抖
- vue源码中令你影响比较深刻的地方
- 说说自己JS中学的最深入的三个点
- CSS两栏布局,一共要求说了七八种实现手段
拼越计划三面
上来也是三个手写题:
- 螺旋矩阵(leetcode原题)
- 大数相加
- 反转ul里面的一千个li
- 写出http常见的头部字段
- 说说http缓存
拼越 计划hr面
- 三轮面试的感受
- 为什么想来上海
- 其它offer情况
- 能否接受加班
美团
一面: 主要是手写题
- 手写promise.all
- 手写一个闭包
- 二叉树的前序遍历(写出递归和非递归两种方式)
二面
- 随机打乱一个数组(洗牌算法)
- 智力题:一副扑克牌去掉大小王后,每人任意抽两张牌,至少要有多少人,才能保证其中有2人抽出的两张牌花色相同?
- 场景题:设计一个百度搜索框
快手
一面
- 看代码说输出
- 手写bind
- 爬楼梯
二面:全程都在写代码,没有让回答八股文
- 目标和(leetcode原题),一开始用回溯写的,但是后面要求优化时间复杂度,也就是用动态规划写。
- 手写clearfix
- 手写promise.all
- 写一个promise串行加载数组里面的异步任务
三面
- 获取数组的维度
- 反转ul里面的li(用js写出来之后又被问到了如何用css来实现,其实就是用transform:rotate)
四面: 四面没有写代码了,但是问得八股比较偏僻,面试官说这是管中窥豹
- 看代码说结果:[ ]==[ ], [ ]==![ ], ![ ]==![ ]
- typeof typeof null
- ajax的状态码有哪些,并且01234分别代表什么含义
- ajax如何取消请求,abort
最后,一个人的转行路总是孤单且信息滞后,我和一起转行的大佬朋友们一起建了个转行前端开发的交流群,欢迎各种非科班想转行前端的同学进群抱团👋👋👋。
#前端##面经##秋招##学习路径##校招##延期毕业##转行#有想进群的小伙伴直接私信我, 或者在下方留言.