学习编程是一场修行,要经历从 0 到 1,普通人从自己的错误中学习,聪明人从别人的错误中学习。
授人以鱼不如授人以鱼杆儿,无论你刚刚毕业还是已经自学了 Hello World,又或是已经有了一分增删改查的工作,可能你一直困惑,如何成长,如何进 BAT 大厂修炼一下技术刷一下履历,这些困惑我都经历过,我分享下我的经验,或许能帮到你。
从国企辞职到成为一个程序员
我从进入 IT 行业到现在已经 8 年了,回想起我刚刚毕业就选择在读书城市的国企联通公司上班,刚刚进去一个月两千块的月薪,每天瞎忙也不知道自己要干嘛,也不知道以后的出路在哪里,联通公司经常和领导闹吵架,一言不合我就骂领导,一个劝架的大姐跟我说:你不像联通的人,你像楼下华为的程序员。实在太没意思,当时我没当回事儿,没想到后来真的走上了这条路,辞掉了国企的工作。
兜里仅剩 1400 元的我来到北京,在北京找了一个床位,一个月 400 块,就这样,我每天晚上回去睡觉,白天就找个能上网的肯德基带着电脑去学习,用了 30 天时间把 Java 基础看了一遍,SSH 了解了一点,JSP 了解一下,迫于压力,我没钱了,我必须出去找工作,我简历编造了一年工作经验,先骗到了一些初创公司的面试机会。因为我怕我写上中国联通的工作经验连面试机会都没有。
就这样,我陆陆续续面了十几家公司,带上录音笔。把所有面试题目都记下来。开始背,慢慢的总能覆盖其他面试官的问题,功夫不负有心人,我终于找到了一份外包公司 Java 开发工作,工资 4000,试用期 3200 三个月,整整 45 天,来北京 45 天,那个时候,吃一顿盖浇饭都觉得挺奢侈了,大部分时候都是路边摊买。
现在来看,4 千块月薪这个起点真的是太低了,但是那时候我只需要会一点点 Java 技术,懂点 SSH/M 的知识就能找到工作,这点知识放在 2019,2020 年再找一份工作恐怕不行了。
2020 年一线大厂面试法宝 - 分布式技术
我在专栏简介里说到我帮一个写 Java 的同事推荐工作,猎头费劲周折没推出去,说今年互联网不好找工作,猎头给出的原因我大概总结了一下:
从市场角度分析:
- 猎头推荐的坑位本身就比较高端,要求也比较高。这也就是说不是找不到工作了,自己还可以找要求低一点的,不如直接联系企业自己投简历。
- 简历需要 “单闪”,我也是第一次听说这个词,单方面有闪光点。
- 对技术水平要求高,往年刷题就可以搞定,现在要考察你对技术是否真的知其所以然,还有就是业务能力,你是否对项目有全面的认识。
- 高潜:年轻的潜力高,贵的。
- 市场依旧很缺人,朋友圈 HR 和猎头一直抱怨技术岗太难招人。
从面试者角度分析:
通过近半年时间去经营我的公众号,我积累了很多关于准备入行或者刚刚入行不久的初级程序员在学习工作中遇到的问题,有在校大学生(高中生 or 大学生,相关专业 or 完全外行),也有毕业不久的同学,还有一些工作多年对现在工作不满意想转行学编程的同学,更有 70 后的大哥哥也会咨询我想要学习编程,真实 360 行,行行转 IT。
从他们目前的现状来看,我总结了以下几点:
- 一部分人还停留在语言阶段,纠结学 Java 好还是 Python 好,哪个好找工作,我学到什么程度能找到工作。
- 一部分人还停留在写简单的增删改查,单体式服务,也叫单机版服务,对大型系统设计没有概念。
- 想进大厂,不知道如何准备面试,大公司是如何开发千万级用户系统的。
总结,“有一定的语言基础,如何面试大厂?”,作为过来人,我想说忘掉你的 SSH/M 三层框架,忘掉你的 CRUD,接下来明确一个学习目标:“如何构建一个高性能,高并发,分布式系统”,搞定分布式,就基本搞定了 BAT 面试了,跟我来学吧,市场没有那么残酷,最重要的是提高自己。
网友问答场景重现
Q:我今年多大,我是学 Java 好还是 Python 好,我要学到什么程度,我现在还来得及吗?能找到工作吗?
嘿,眼界放开点,别纠结学什么语言,语言只是工具,往更远地方看,再说,只会一门语言也找不到工作。
Q:我也想进 BAT 这样的大公司,有戏吗?
A:如果想拿到一个 offer,或者满意的 offer,编程语言只是基础,光靠学一门语言就想找到一份工作应该很费劲,分布式系统相关的知识很重要,这才是重点。
Q:学完这些课程我真的能面过大厂吗?
A:我不是神仙肯定不能保证,面试考的知识点太多了,语言基础、数据库、各种开源框架,这些知识你面什么公司都会问的。刚刚入行的或者已经工作一两年的人经常问我,我会 xxx,可以吗?其实大的互联网公司对” 高可用,高并发,分布式系统相关的知识点 “一定是必不可少的,为什么?因为大公司的后台系统都很复杂庞大,这不是面试造火箭,工作拧螺丝的原理题,算法题,这是工作中真真切切会遇到的问题,初学者一点不会肯定不行。很多初入行的朋友意识不到这个问题,针对这个问题我决定开设本专栏。
我的初衷是通过这个专栏的知识,让大家学会带着问题去学习具体某一门技术,最后达到的目的让没有大型系统开发经验的初级工程师对大型系统的架构有一个宏观的认识,知道自己在今后的开发中可能会遇到哪些问题,解决思路是怎样的,带着这些问题再去学习,我想这样会少走很多弯路吧,这也会让面试官认为,你在开发中遇到同类问题时你是有思路的,你能通过百度解决这些问题,语言和框架只是程序员的工具。
我通过各种社区和一些人交流过程中,发现很多人语言基础知识还是很不错的,常用框架也会了解一下,会做一些简单的管理系统,这一类初学者只是缺少了一些大型系统的开发经验,不知道大公司的系统到底是怎么运作的,如果面试者都是这种情况,而你对系统架构方面了解到比别人多,你就能打动面试官,让他觉得就是你了。
Q:课程的内容到底对我今后的职业生涯有多少帮助?仅仅是讲面试题吗?
A:虽然专栏内容是面试主题,但是我写专栏的初衷绝不是罗列一堆面试题目然讲答案,如果是这样,网上随便一搜,铺天盖地的面试题应有尽有,想要哪家都能找到,那我何必在这里多费口舌。
通过多年的工作经验,我总结出一个道理:学习过程中,真正难学的并不是知识本身,而是经验,经验才是最你个人最宝贵的东西。网上的技术贴铺天盖地,知识本身是免费的,但是没人告诉你哪些才是你现阶段的学习重点,怎样学效果更好,经验是无价的。
专栏的整体思路并不会去具体讲解哪一门技术,我主要通过工作中真实的项目去让大家理解如何建设一个高可用,高并发分布式系统。
通过工作中遇见的真实问题具体案例具体分析,问题驱动学习。
从今天起,我们的座右铭修改为:“要好好学习,不然别人只会指着你的鼻子说:‘你看那个人,除了帅,一无是处’。”