从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

200 阅读10分钟

前言

先来自我介绍:

老家农村,家里好不容易把我送到大城市读书,大学非985,211,但在我们老家,能出一个本科大学生也是非常不容易的。因为农村信息的相对闭塞,我对大学专业一无所知,加上分数并非前茅,最后被调剂一个我并不喜欢的专业,这里就不透露自己是什么学校了,只能说毕业之后为了能多赚点,选择了送外卖,这一送就送了将近3年的时间。

为什么学编程?

接触到编程是一次很偶然的机会,有一次送外卖,对方是自己的学长,他是计算机专业的,毕业后就进了一线互联网公司,那之后就偶尔有跟他聊人生聊未来,一次契机,他劝我何不自学编程,来做程序员?后来考虑了很久,自己也综合对比了各行各业的发展,最后决定学习编程,选择了Java方向。

拼多多大厂录取通知

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

自学方法有哪些?
学习类网站:这类网站主要包括了各种语言与各种原理的学习,基本上覆盖了需要,很完整的一套视频教程.\

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

博客类网站:这类网站可以吸收一下大牛的思想,顺便可以供自己做一下笔记,"有事没事"就写一篇博客.\

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

书本:书本的话也是一个自学的好途径,这个要看自己的需要,是编程语言方面的还是系统方面的还是网络方面的。一本好的书可以帮助你少走很多的弯路。\

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

自学的方法有哪些?
1.自学于文本
第一级,是有一个问题,你能不能从一堆书里找到答案。一个问题要是用搜索引擎就能解决,那就太简单了。我们关注的是你在学业中自发地冒出来的大问题。比如你用一本中国出版的教科书学量子力学,公式和做题你都会了,但是你感觉自己对“不确定性原理”这个概念没有搞清楚,那你怎么办?课本只是指向月亮的一根手指,我们追求的是月亮本身,多参考几根手指更容易定位。有时候你会惊讶地发现像“不确定性原理”这么基本的概念,不同的书讲法都不一样,而有的书明显是讲错了!这能让你收获一股巨大的自信力!你的见识,超过了那个作者。
第二级,是建立自己的系统。知识是个系统。而作为自学者,你的个人知识系统应该是具体的 —— 也就是说你得把它写下来。你应该对每一个课题都有一个笔记本,根据自己的思路划分章节和专题,用自己的语言整理好所有的要点、心得和应用技巧。这个系统是你自己的,而你的关注点跟别人完全不同,所以没必要事无巨细,要字字见血,直指人心。 但是这个系统得有一定的完备性。最好从学习一开始就有所规划,这门学问有哪些要点和问题,你要得到什么,自己给自己一个教学大纲。完备性的好处是能让你发现系统的漏洞。你需要再想办法弥补。系统要不断地完善。面对一个形成实体的系统,你会有一种强烈的成就感。我上大学的时候有好几个笔记本。为了准备GRE物理专项考试,我还弄了一个综合所有课程的复习要点手册。那个手册其实对别人没用,但我当时的成就感实在太强,以至于专门让校印刷厂把它装订成了一本小书的样子。有了系统,你在文本意义上的学习就算差不多了。但是文本学习还远远不够。

2.自学于操作
我们学习并不是为了一讲话能说出个一二三四、摆个有学问形象。我们学习是为了应用。你需要在实践中得到反馈。你需要找人切磋一下,参加一个什么测试甚至比赛,才知道自己学的到底怎么样。现在人们对网络公开课的一个诟病就在于它在反馈这方面不如线下,不过考虑到大多数人在学校里上课的时候也没有得到太多反馈,我到是觉得为了网课的高效率而牺牲一点反馈机会是值得的。但是你仍然需要反馈! 自学最大的坑在于没有精准的反馈,于是做过的事就不知对错,就没有意义。所以,自学最关键的问题就是要找到尽量精准反馈渠道。你不需要等到实际工作才能获得反馈。你可以把自己的作品放网上让人看看。而像数学和编程这样的项目特别适合自学,因为会不会、做得对不对,你立即就能知道。答案和结果就是反馈。数学和编程不是文化欣赏项目。对于一个严肃的学习者,这些是训练项目。上课只是提供一个交流平台,真正的功夫都在自己的练习之中。你的信心和水平只能在每一次成功解题和程序成功运行中提高。真正的程序员不可能去专门报个什么班来学习一种新出的编程语言。是先有一个什么需求,现用现学。现用现学听起来有点不靠谱,但这才是最原始的学习冲动和最实在的学习行为。我要用,我不会,那我就学呗?你要做的是上网找个最简单的教程现用现学,先把这个问题对付过去再说。现在人们对 YouTube 和 B站的一个用法,就是想干什么事儿不会,上去看看别人干这件事儿的视频。我就曾经跟着 YouTube 给厨房换了一个下水道搅拌机,还给汽车换了个门把手。 b站是个自学的好地方,很冷门的单证考试都有大量考过人员的心得分享、推荐教材,以及各种专业技能的培训课程。这种自学可以说是“自学于无形” —— 不需要什么仪式,没有那么多情绪波动,我们需要用啥就能学啥,学啥就能会啥 —— 这岂不就等于说,没有我们不会的东西了吗?而反过来说,大多数人学英语最大的问题恰恰是学而不用,把学英语变成了健身项目和行为艺术。

拼多多面试经历:(还原现场五面)

1.拼多多Java一面:

HashMap和HashTable以及CocurrentHashMap详细说明

网络IO模型?什么是多路复用IO?select和epoll的差别?

TCP三次握手的过程,如果没有第三次握手有什么问题?

常用的线程池有哪些?各自的应用场景?

Java类加载机制?双亲委派模型的好处?

JAVA并发包组件了解多少?

什么时候多线程会发生死锁?怎么来预防

操作系统的用户态和核心态切换条件以及为什么要切换

数据库事务特点?事务隔离级别?项目中的事务实现?脏读、不可重复读、幻读各举个例子?

2.拼多多 Java二面:

有接触过哪些消息队列中间件?如何来选型?

谈谈你对SOA以及微服务的理解?

具体谈谈Spring Cloud服务和注册?

分布式的cap了解么,分别指什么?

网络编程nio和netty相关,netty的线程模型,零拷贝实现?

spring 和 springboot的关系你是怎么理解的?

Spring IOC和AOP说一下你的理解

为什么用消息队列?

对于消息的重复消费你有什么设计方案吗?

3.拼多多Java三面:

数据库索引?B+树?为什么要建索引?什么样的字段需要建索引,建索引的时候一般考虑什么?索引会不会使插入、删除?

设计模式,单例模式,怎么保证线程安全?锁效率太低,怎么提高效率?

CAS?CAS本质是什么?什么是原子性?Compare and Swap两步***作,为什么能保证原子性(涉及到CPU指令)?

分布式锁的实现知道到哪些?你更推荐哪一种锁?

Redis的持久化操作有哪些?

如何利用redis处理热点数据

为什么选择Redis作为缓存?

为什么Redis的性能十分的高?

说一下单进程、单线程的Redis和你平时写的多线程程序的对比

10个多线程保证 i从0加到10 (差点翻车,主线程忙等另外10个线程完结)

反转链表

上台阶(n=80)

4.拼多多Java 四面:

你怎么学的Java啊?

设计模式了解吗?单例讲一下,懒汉饿汉double-check,怎么实现。策略模式,外观模式,适配器模式,装饰器模式,分别讲一下

联合索引什么时候不会触发索引?

AOP了解么,有什么好处,如何使用,怎么实现的?

支付宝到银行的转账业务怎么实现?

redis实现分布式锁

三台机器集群,按不同权重访问,怎么做?

谈谈高并发场景下削峰,限流的实现?

你之前工作的项目里个人最满意的,谈谈你的架构设计思路?

5.拼多多多Java五面:

为什么要从上一家公司离职?

为什么要选择这里?

如何看待加班问题?

平时自己是怎么学习技术的,除了Java相关,还会去了解其他什么技术?

期待的薪资是多少?

未来2年是怎样打算的?

在基础不好的背景下如何更好的学习?

01.多刷题冲刺:

面试之前,可以多刷题冲刺,下附最新Java面试合集

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

02.可多读源码,看些实战笔记,学习大神的思路

程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

Spring源码深度解析:

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

Mybatis 源码深度解析:

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

Redis学习笔记:

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

Spring Boot核心技术-笔记:

从外卖员到程序员,自学3年转行成功,三面“拿下”拼多多offer

03.多看视频资料,理解更透彻:

B站上也有很多学习视频,唯一的缺点就是免费的容易过时

后话:只有技术过硬,在哪儿都不愁就业,“万般带不去,唯有业随身”学习本来就不是在课堂那几年说了算,而是在人生的旅途中不间断的事情,行动起来,让学习成为一种享受。