emmmm,如果华为不算互联网,滴滴不算一线的话,其实我只只拿了一个腾讯的offer,留下了没有技术的战五渣之泪。所以这题目有点吹牛皮哈哈哈哈,那又如何呢,你点进来我肯定会给你点东西的,哪怕是让你嘲讽一波的笑料~
首先简单说一下自己的情况吧:末流本硕(除了华为基本不看学历),学渣一枚,艰难上岸,拿了滴滴(实习转正)、华为、腾讯、富途证券、中邮消费,跪了的有阿里云(一面15分钟)、虎牙(CTO面挂了)、顺丰科技(HR面后无消息)、(二面后没下文)、忘记还有哪家了,基本上广东地区的大一些的厂,除了头条,百度(投了简历很久没下文,后面拿了腾讯offer后约我面试,没鸟他们)我都有面过。
也没做准备,就是想起来今天还没更新,所以打算写篇面经凑凑数。enmmmmm,暂定从以下几个方面写:简历-面试技巧-必备知识-个人被虐经历。
简历篇
模板:首先给大家安利个很好用的简历模板网站“超级简历”,自己上去找找吧,他会根据行业给你推荐简历模板,还能打分呵呵呵呵呵呵。作为程序员的简历呢,简单干净就好了,别整那么多花里胡哨的。我就见过有同事看到那些带封面的简历,翻都不翻直接扔了。大家都挺忙的,最好一页就展示完了,大家都挺忙的,谁那么有空给你翻页呢,是吧?给个样例吧,像下面这样就让人看着很舒服。
简历模板内容:主要内容的话一般包括教育经历、获奖经历、基本信息、专业技能、工作经历或者实习经历、项目经历这些,什么个人兴趣爱好、在学生会当过部长之类的就不要写了。这里我主要讲一下专业技能和项目经历怎么写吧(一般我找简历的话也是看这两个点)。专业技能的话一般是会什么写什么就可以了,程序员的话,一般包括语言、系统、工具、框架、数据库等生产工具。切记不要吹牛,能来面试你的都是资历很深的工程师,随便一问就可以知道你是什么货色了。举个例子:你如果对C++比较熟的话可以说熟练掌握C++,只是看过Go语言的manual,写过几个demo的话可以说了解Go,经常玩Linux可以说熟练掌握Linux编程环境。
项目经历的话,主要的点应该包括:参与的项目,用到的技术,负责的模块,量化的产出(性能提升了多少、并发量提高了多少)。我建议可以按照这个模板来描述:XX时间在XX公司XX部门参与了XX项目,该项目主要是用来XXXXXXXX的,采用了XXXXX技术,我参与了其中XXX模块的开发,负责后台/前端/测试,相比XXX性能/吞吐量/工程质量提升了XX%。当然了,对于你想展示的点你可以多强调一些,比如腾讯喜欢问网络编程的东西,而你又比较熟,你就可以强调一些你们项目中用到的网络编程相关的技术,像是基于UDP在应用层定义了一套可靠传输协议、开发了一些RPC框架性能比Thrift高多少之类的。这样面试官才能跟你有话题聊,你也才能更多地向面试官展现你的技术,从而更容易得到面试官的认可(当然也有可能翻车,所以得往你擅长的地方扯)。
学会包装自己,举个反例啊,比如某个靓仔的项目描述如是这样的:我负责这个系统中爬虫模块的开发,终端控制管理,店铺管理。看到这样的简历如果你是HR或者面试官是不是一点走下一步流程的欲望都没有,完全没有亮点。如果改成这样:独立开发多线程影片信息爬虫工具,并针对线程池性能、网络异常以及反爬虫措施进行多次优化,容错性良好并达到并发请求30+的QPS,是不是看起来就顺眼多了。当然了包装要有度,可以适当夸大,但是自己一定要hold住面试官的问题,否则就是给自己挖坑。
面试技巧篇
自己简历上写的东西一定要hold住,这都是你挖的坑,是准备给面试官作为切入点交流的,不要弄巧成拙面试过程免不了会紧张,尤其是前几次,建议先从小公司入手锻炼下面试经验根据不同的面试方式,采取不同的应对措施。电话面试建议找个人少安静的地方坐着回答,并且建议拿纸笔多做记录多画多写。视频面试其实和电话类似,只是可以实时写代码,面试官能看到你的表情。这里还是要放松,如果你比较紧张,可以不直视镜头,好好想问题就是了,因为很多面试官你答得好也会面无表情(因为毕竟工科男,你懂的),然后你看到他们没表情的表情肯定会受影响。现场面,最重要的是和面试官互动了,注意几个地方吧:语气要轻松点,多点肢体动作有助表达,多笑;不太好说清的就用笔在纸上画,一遍画一边讲,面试官也会更容易和你交流。平等交流,你就想是在跟未来的同事对话就好了0_0。其实有一点你要清楚,面试是个双选的过程,他可以拒绝你,你也可以拒绝他。千万不要太上赶着,反而会影响自己正常的表达和逻辑。学会一个知识点由浅入深讲解给面试官,这样他可以愉快的往下问,你可以愉快的往后答题。举个例子:Q:说说HashMap吧A:你可以先说说hashMap的设计原理,底层结构(链表+数组)扩容方式等,从这你就可以说说这种设计好在哪里(比如讲一讲put是如何做hash的),这时候你可以说这种hash可能会有冲突,hashMap也是做了相应设计的。Q:那怎么解决冲突呢?A:你可以再给他讲讲解决hash冲突的三种通常方式,而hashMap用的是链式法,然后可以说到这样会有隐患就是hash链过长。Q:面试官再问,你会给他讲解决复杂度高的长链用了红黑树的结构,这里还可以延伸到红黑树的特点或者jdk7和jdk8的不同实现A:这时候你可以说解决hash冲突,但hashMap还会有并发和同步的问题。Q:再深入讲讲A:你可以说说hashtable是线程安全的,怎么实现的(sync函数),并不好,从而引出更好的juc包,说说concurrentHashMap,之后又可以说道锁分段原理,弱一致性迭代器,concurrentHashMap的锁粒度(java7和java8不同),同包的CopyOnWriteArray等等。你还可以延伸说到锁(重量、轻量、悲观乐观各自实现、底层源码等等)、缓存(因为很多时候Map的结构可以作为缓存,从而可以说到缓存系统的设计,kv原理,分布式缓存redis、memcashed等等)这样由浅至深的好处是可以让面试官知道你对这个只是掌握的比较牢固,无论是用法还是底层的实现甚至是优化方向你都知道,这样自然能够得到面试官的认同。如果真的不巧聊到不擅长的地方,学会转移话题,从一个点中聊自己感兴趣或是有把握的方面(比如你对消息队列不太熟但是redis用的熟,你就可以在问到消息队列的时候说,因为之前都是自己做的项目嘛,性能方面没有考虑到最优,一些异步的方式还是靠redislist去实现的,虽然redis的消息机制并不常见,但当时还是满足了需求,之后可以考虑性能方面的提升和技术评估;又比如问你