查看: 108|回复: 0

C++怎么学?怎么准备面试?机械专业还有必要转型吗?

[复制链接]

8

主题

13

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2022-11-30 16:00:32 | 显示全部楼层 |阅读模式
今年秋招很多人看到计算机找工作也不容易了,机械专业也有车企大厂给出不错的薪资,这个时候不少机械专业的小伙伴儿对于转型就有非常大的困惑,机械专业还有必要转型吗,我的建议是如果你能进大厂做结构、有限元等相关的技术性工作,那是建议你继续做机械,深耕自己的技术;如果没有找到合适的工作,那是建议你把编程学起来,都知道制造业的发展必然是智能化,现在很多公司数字化还没有完全实现,所以说智能制造是需要很长的路要走。实现智能制造的大致路径就是,数字化-》信息化-》智能化,制造业实现数字化都是非常困难的事情,更不用说智能制造了,我一直都是在做C++工业软件,日常工作基本也都是围绕着基于工业软件完善企业的数字化和信息化流程,真正的智能化还需要比较多的时间。


我一直觉得走出适合自己的独特道路,才能最大限度地避免内卷。职业发展永远要去看长线,不要觉得一时找到了轻松地工作就飘飘然,事实上机会都是非常公平的,当你面临选择的时候,你总是选择简单的路线,那你的职业发展很可能会陷入内卷。如果你总是选择最难的路线,风险虽然很大,但是当你选择的路线深耕2-3年有起色的时候,这种成就感足以让你不惧怕职场的任何困难。越是经济下行的时候,可能有想法的人越容易脱颖而出,从而获取丰厚的回报。
0、自己转型的经历

我是普通本科机械专业,考研985机械,研究生期间做的课题主要是智能制造相关。我的经历对于机械专业的小伙伴儿应该是非常值得参考的,我没有一头扎进去互联网行业去卷,而是把自己的专业知识、数学、编程、英语都实现了深度的融合,深度融合的意思就是每天的工作几乎都要涵盖这些点,久而久之就会很自然。比如经常用的矩阵变换,我可以不用翻书就能在几十秒内写出准确无误的旋转矩阵,这些基础的知识已经深度的融入到自己的工作中,每天用这些知识的时候并不好感觉痛苦,反而是有慢慢的成就感。很多数学的知识点你长时间不用跟没有什么区别,遇到问题还是去查课本,比如 AB=I,A、B都是n阶方阵 ,那么为什么 矩阵B 就是矩阵 A 的逆矩阵呢?怎么快速地证明 BA=I 呢?这些知识点在你学线性代数做题的时候可能会感觉很自然,但等你工作之后真正用这些知识去解决问题的时候,这些知识点用起来就没有那么自然了。为什么?根本原因就是你没有找到适合自己的理解方法!!!
我遇到这些问题都会去Google查资料,去找适合自己的理解方法,或者说是找最简洁的证明方法,只有足够的简洁自然,当你下次遇到这问题的时候,你才不会惧怕这个知识点。还是以 AB=I,A、B都是n阶方阵 为例,显然 A和B 满秩,进一步可以直接构造出BAB-BI=(BA-I)B=0,B^{T}(BA-I)^{T}=0 ,因为 A和B 都是满秩的,那么 B^{T}X=0只有零解,那不就是说 B^{T}(BA-I)^{T}=0 只有零解,直接可以导出 BA=I ,这不就说明B是A的逆矩阵了吗?


这些知识点并不难,但是这些基础的东西卡壳的时候,更难地算法公式根本就推不动了,比如一个坐标变换矩阵T=\begin{bmatrix}      A & b\\      0 & 1 \end{bmatrix} ,假设只有旋转和平移,那么很显然的问题就是矩阵 A 的列有正交的性质,也就是说 A^{T}A=I ,那么根据分块矩阵的规则可以直接推导出矩阵 T 的逆矩阵是 \begin{bmatrix}      A ^{T}& -A^{T}b\\      0 & 1 \end{bmatrix} ,验证一下 \begin{bmatrix}      A &  b\\      0 & 1 \end{bmatrix}\begin{bmatrix}      A ^{T}& -A^{T}b\\      0 & 1 \end{bmatrix}=\begin{bmatrix}      A A^{T}&  b-AA^{T}b\\      0 & 1 \end{bmatrix}=I 。在CAD中坐标变换一般都是包含旋转、平移和缩放,这种情况下 A^{T}A=diag(\alpha_{1},\alpha_{2},\alpha_{3}) ,按同样的思路去推导矩阵 T 的逆也是很简单的事情。这些算法如果是在工作中应用,那是可以显著的提高算法效率的,因为逆矩阵的你算速度效率一般比较低,这种推导出来的逆矩阵就是转置和简单的矩阵乘法而已,代码也变得很简洁。
1、在学校本科和研究生

感觉现在的的机械专业小伙伴儿对未来更加恐慌了,不少人一入学就感觉要准备转专业、考研、保研等等,都想去计算机这些好专业,但是并不是每个人都适合去卷计算机啊,机械专业至少70%的人事卷不到也卷不动去计算机,那怎么办呢?我读大一的时候,我的想法就是大学期间我要忘记自己的专业,不要整天把自己当成是机械专业的人,专业很多都是随便选的,大学就是短短四年而已,怎么能让这四年决定自己一生的走向呢?我一直的想法就是,大学我必须探索明白我未来想做什么?搞清楚我真正对什么感兴趣?擅长什么?
多问自己为什么,这些问题只要在大一大二找到答案,大学四年过得就会非常的充实。这其实是在找内心深处认可的目标,一旦找到了自己内心深处渴望达成的目标,这个时候才会义无反顾地全身心投入进去。很幸运,我大一就思考明白了这些问题。我大一上学期军训完每天就去图书馆,随随便便地去看书,图书馆比较安静,看的东西多了,在安静的的氛围下也就突然想明白了,我真正感兴趣的是数学的工程化应用,想达成这样的目标,我大一大二给自己定的小目标就是搞数学、数学建模、物理、力学这些基础学科竞赛,至于大三大四参加什么比赛,我的想法是大一大二学科竞赛我的能力强了之后自然会遇到志同道合的人去参加比赛。我大二的时候拿到了学校高等数学竞赛二等奖、大学物理竞赛二等奖、数学建模竞赛等等各种奖项之后,我就感觉大一大二过的特别充实,没有觉得自己被困在什么专业,而是一直在为达成自己的目标做事情。
建议大一大二大三机械专业的小伙伴儿,不要只顾着去卷GPA、卷考研、卷保研等等,是时候静下来好好思考一下行业的发展趋势什么,自己怎么做才能发挥出自己独特的价值,职场是非常残酷的,HR面试经常问的一句话就是:你自己和别人有什么不同?你最有成就感的事情是什么?我觉得大学期间做好自己规划的话,比如我拿过学校的高等数学竞赛特等奖,那我找工作和考研面试的时候底气都是更足的,你的信心、底气来源于你成功地做过多少事情。哪怕是你大学期间对专业不感兴趣,去运营了一个自媒体账号,如果做得很好,这也是你非常有成就感的事情。信心比黄金更宝贵,一旦自己的信心激活了,未来发展那是势不可挡的。
2、即将毕业或者已经工作转型的小伙伴儿

我转型的时候就是研究生毕业找工作的时间,当时找了几个结构工程师的工作保底,那时候结构也有12k以上,待遇不比现在的应届生差多少,但是我不想做结构,更不想做工艺,找工作的时候一个公司的工艺老大跟我聊了近3个小时,他看我的笔试成绩比较好,而且他们的工艺部门一直缺少人才,就想让我去做,公司虽然很有诚意但是我对传统机械的工作非常抗拒。找了一段时间工作之后,别人都去投简历的时候,我就在啃C++,啃1-2周有点小自信了就去投简历面一下,面试的过程中进步非常快,面多了之后面试官问的问题都是大同小异的,现在软件这个行业比前几年卷了一些,面试难度会更大一些,但是基础扎实的情况下,我觉得转型并不是很难。工作之后经常去当面试官帮助公司招C++的人,面试了几十个人之后,发现小公司基本都是转型的,转型的人有个共同的特点,基础非常非常差,特别是问到一些数据结构的空间和时间复杂度的时候,都开始懵了。
比如常用的std::vector和std::array,很多人习惯用[]去访问元素,而不是at(),这两个区别很多工作1-2年的C++程序员都不知道,如果用[]产生隐藏的bug查起来非常困难,特别算法复杂的时候。所以说学C++的时候,不要大量去看视频,而是要去看书,这些使用的知识好的C++资料都会写的很清晰的,而且会多次强调。具体参考下面的图就知道了,这些都是我看书的时候圈出来的重点,一本600页的C++书,不用从头看到尾,只要看这些关键点,然后用代码去搞明白这些知识点。



[]和at()的区别(C++20入门实践)

再比如C++中常用的const(看书一定要做好笔记,看第二遍的时候效率非常高),课本上针对const的用法讲解的非常到位,实际开发的时候getValue也都是这么写的,代码写的规范了,隐藏的bug就很少。代码规范之后,编译器可以帮你检查出有问题的代码,k编译器比程序员更靠谱。



const实际应用(C++20入门实践)

再比如自定义链表数据结构的实现,可以自己跟着课本先实现单链表,再去自己实现双向链表、环形链表等等,实现完链表基础的数据结构之后,可以去实现链表的快速排序、归并排序等等排序算法,实现这些基础算法的时候不就是在锻炼写代码的能力了吗?



自定义链表数据结构(C++20入门实践)

再比如链表中如何自己实现算法,删除一个节点,结合示意图、算法描述和代码非常容易理解。



链表删除节点(C++20入门实践)

再比如析构函数一个小技巧就实现了整个链表内存的释放,实际写算法的时候链表很多要自己实现的,这种小技巧就能节省一些代码,而且可靠性好,理解起来非常简单。比如释放链表头指针内存的时候会调用Package的析构函数,而析构函数中的delete m_next会去调用下一个节点的析构函数释放内存,很显然这就是一个递归调用析构函数释放内存的过程。



析构函数实现链表内存释放(C++20入门实践)

想看这些资料的小伙伴儿就去学吧,在学习上的投入是性价比极高的选择。C++20入门实践我已经看过一遍了,重点内容已经标记好了,总体而言这本书是非常适合入门的。
一本好的编程入门资料最重要的是要有电子版代码,看着纸质版书上的代码自己敲简直就是C++入门小伙伴儿的噩梦,如果你自学过程中遇到一个bug几天都解决不了那是会严重打击自信心的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表