主要分为“基础+战略+心态”三方面做讲解把,菜鸟的一点分享,望大佬们不要笑我。
有啥错误或者需要改进建议的地方可以留言,我会进行斟酌修改,谢谢大佬们
另外分享一位巨佬的心得,希望能帮到大家:
https://wenbochang.cnblogs.com/p/10317715.html?from=timeline&isappinstalled=0
一、基础
要肝大厂,需要有针对性地准备大厂面试会问到的知识,个人感觉需要的基础主要包括下面几个方面:
先讲一本书,内推军的《研发类面试真题及其解析》,这本书很叼,我后面也会说到这本书,不是打广告,建议买一本。
-
数据库
个人只用过Mysql 和 Redis,所以只推荐这两种数据库需要看的书单跟资源
Mysql:《高性能Mysql》这本书图书馆就能找得到,不需要全部看懂,只需要挑一些重要的,个人感觉里面必看的有 优化器、索引优化、复制原理、关于数据大小的介绍、引擎,缓存(我也忘得差不多了,可能讲的不对)。
视频资料可以找尚硅谷的《mysql高级》,这套视频可以学习 mysql索引优化 的知识,这也是面试常问的,必看,视频有个特点是,容易理解但是耗时长,我是挑了2天晚上通宵时间看完的这套视频,因为真的没啥时间
Redis:
《Redis设计与实现》
《Redis开发与运维》
这两本书都很经典,特别经典,吃透吧。《Redis设计与实现》里面讲了Redis的数据结构的实现、AOF、RDB、复制功能、Sentinel主从复制、集群实现原理,都已经剖析得很清楚了,拿着应付面试完全够了,不够这本书比较难啃,我是把书撕成一章一章,再用订书机钉起来,慢慢啃的。
说一下面试被问过的几道题,只能说这本书很强了,可以带着这些问题啃这本书。
(1)Redis跳表的实现
(2)AOF、RDB的实现,优缺点对比
(3)为什么Redis要使用单线程模型(去看本书的文件时间模型跟时间事件模型)
(4)如何构建一个高可用稳定性高的存储系统(直接本书把Sentinel主从复制那套吹一下)
(5)主从复制是怎么实现的,里面又有研发类面试真题及其解析:
这本书有讲Mysql的面经题,个人感觉很全了,可以看完
一个博客 :
程序员江湖,这老哥也很牛逼,他的总结也挺好的,他写的关于Mysql和Redis的总结传送门:
-
Java基础(最重要)
(1)JVM
JVM推荐周志明的《深入理解Java虚拟机 JVM高级特性与最佳实践》
另外,个人之前最怕的一个面试题:如果遇到OOM问题怎么办,现在我知道怎么回答这个问题了,你们可以去看慕课网一套课程《Java生产环境下性能监控与调优详解》,只能说很牛逼,讲了如何发现问题,处理问题。获取方式:可以去吾爱破解网、CSDN花积分下,网上完全可以轻松找到免费资源,不过有钱人还是支持正版吧~~嘻嘻。(2)集合
很重要,优先复习
看博客、看源码、看面经
(3)多线程与JUC
推荐两本书跟一套视频
书:《Java并发编程艺术》《java多线程核心技术》,这两本书很牛逼,特别是《Java并发编程艺术》,看10遍都不嫌多,反正我看了7、8遍了。
视频:尚硅谷的《juc》,同样,这套视频,我花了两个晚上的时间看完的。一边穿插着看《研发类面试真题及其解析》。
-
框架
SpringBoot就很重要了,有时间的话,可以把源码看一下,推荐一本书
赫佳的《Spring源码深度解析》,这本书很强,直接贴上源码讲Spring实现,不过有时间再看,我曾经暑假花了本个月啃到想死,才啃完了IOC跟AOP,而且老是忘。
随便说说:
Ioc:控制反转怎么生成Bean的过程,Bean的生命周期,依赖注入是怎么注入的,依赖注入怎么解决循环依赖问题,ioc里面的单例跟原型分别怎么实现的,很多东西,可以带着这些我说的这些问题看。
Aop: 首先了解JDK动态代理和CGLIB代理实现, 其实你如果看了IOC的话再看AOP会发现不会那么吃力了,IOC是最难看懂的,AOP就是到最后生成一个代理对象,代理对象的方法执行的时候会先执行拦截器方法,看懂觉得好神奇啊
springmvc: 这个我了解不多,看了忘了,吹不动。没法大概点一下~
事务: 原理跟Aop类似,他的实现机制主要也是利用拦截器,判断有没有抛RuntimeException,有的话回滚,回滚操作主要用了数据源的回滚以及标记,而数据源的标记及回滚也是底层用了JDBC的标记跟回滚,其实很简单,剖析完觉得很明朗很舒服。
数据源:可以简单理解成封装了JDBC操作把,阿里巴巴的数据源还加了监控操作,有空再研究
上面这本书,只挑你们想看的看就行,千万不要整本从头看到尾,很耗费时间,而且看到想死。
之后再看一套视频:尚硅谷的《spring注解驱动开发》,这套视频建议看完书之后拿来补充复习,很有用。
-
算法
先推荐一下一套视频,免得你们略过了,牛客网左神的一套算法视频《直通BAT算法精讲》,直接csdn上就能下载到。重点看里面排序算法的实现,里面讲了排序算法最好的写法,比你自己去网上看博客好一千万倍,相信我。
个人算法真的软肋,不过我也花了很多功夫,说一下个人的经历吧,不过不一定好,当参考吧,我是真菜鸡,算法真不行。个人的路线中没刷过leetcode,因为没时间,别人说leetcode里面的题目很高频,确实好,不过我没时间啊,所以我觉得更好的方法就是刷往年的笔试真题。
推荐书籍《剑指offer》
(1)一开始我一道题都不会做,很尴尬,找了一本书《剑指offer》,记得我花了2周多刷了第一遍,很粗略地看完了,真没时间。记得那阵子每天从8点起床刷到晚上12点睡觉,这种状态持续了2周多,经常跑到班里大白大佬宿舍常驻,问问题。感谢大佬的有耐心孜孜不倦地照顾我这个弟弟。
(2)之后就尝试敲了一些题,在牛客网上AC了它们,牛客网剑指offer传送门
https://www.nowcoder.com/ta/coding-interviews
不过这阶段很粗略把。(3)之后刷往年的笔试真题,牛客网上有的,传送门:https://www.nowcoder.com/activity/oj 自己找吧。这段时间我还看了牛客网左神的一套算法视频《直通BAT算法精讲》,里面也讲了很多《剑指offer》的题目
(4)后来我发现剑指offer的题目忘记了,那时候大概10月份了把,因为面试的算法题需要的是最优解,而剑指offer突然就适合这个需求了,而且面试也很喜欢从里面挑题目,我花了一周的时间,把里面所有的题目都看了一遍,基本都敲了代码实现了。
(5) 这个时候主要是面试环节了,面试的算法题不会很难,不过要最优解,最好的方法:
你去网上找一大堆面经,把里面的算法题整理一波,全放一起,一波带走,然后有空拿出来复习~~这个方法是最有用的。心得:
个人感觉对像我这样子的零基础的算法菜鸡来说,我只能做到这样的,真的很需要时间的,而且做题也很耗费时间,有时候一整天做不出一道题目,所以你要自己把握好时间,我之前是找个大佬的,一直问他问题,一道题绝对不能耗费太长时间。
我之前就是这么做的,我不是推荐大家也这么做,只是讲一下我的策略,仅供参考把。
没办法,我算法菜只能这样速成了,我算法现在还是很菜,也打算现在加强,现在也慢慢在看在学。 -
计算机网络、操作系统、linux
(1)直接看《研发类面试真题及其解析》、
(2)学校教学的教材、
(3)百度搜一下一些大佬的总结,很多人写过知识点总结,自己百度发掘一下
(4)linux 肯定要会操作指令,如果更深入就好了,如果没时间,就去面经搜一波基本的操作指令背下来,有空用一用,推荐《鸟哥的linux私房菜》,不过等有时间再慢慢看把~~
这方面个人研究也不深,没啥心得,个人的学习路线如下:
linux方面我属于会操作指令,面试也不看面经,靠平常实操瞎吹的。
计网我是看《研发类面试真题及其解析》加面经,再次强调《研发类面试真题及其解析》很牛逼,他里面说到的计网的知识你全部都要会,然后再去看面经,面经点到的知识点复习一下就差不多ok了。
操作系统我是看了面经吧,根据面经决定学什么,根据面经去翻书。
二、现阶段战略与打法
如果你现在大三,建议马上找个实习把,6月份之前找到,然后干到8月中旬,干2个半月至少,看自己的情况,如果觉得公司能学到很多东西,就留下继续干。如果觉得公司日常只是写crud对你秋招没什么帮助,就先辞职回校,专心复习秋招~
我当初是第二种做法,因为觉得再呆下去学不到东西,还是补基础更重要点。我也见过一个大佬,他是现在在一家大厂实习1个多月了,春招拿了另外一个大厂offer,暑假过去实习,这种大神就真的牛逼,我说的辞职就不推荐了,毕竟大厂实际工作学的肯定吊打我们自习的,看个人情况自己选择。
没实习经验,如何找实习呢?首先如果学java的话,Spring+ Springmvc + Mybatis一定要会的,自己看黑马或者尚硅谷的视频入门把~或者直接看书也行~不过一开始就看书可能会看不懂,效率方面要考虑清楚再做选择。而要去实习肯定需要一个项目拉,项目可以是课程设计,也可以是自己瞎写的,最好是SpringBoot+Mybatis的架构的吧。或者更牛逼的商业项目也行,如果之前有过实习经验就更棒啦。
如果学完了Spring,Mybatis, 可以找慕课网上搜实战教程,或者黑马的那套学习资料里面有个4、5天做完商城,然后拿着一个项目去面试。没有项目经验是没面试机会的,做完项目之后就去投简历了,之前你要完善你简历,首先把项目亮点写清楚,还要对项目够熟悉,才能吹。最好6月初找到实习把~,没啥时间了的。
找实习投简历可以去拉勾网,boss直聘,实习僧投递。这些平台都是可以进行聊天的~多沟通吧,可能hr觉得你有礼貌或者讲
话比较多比较积极就给机会去面试了
实习过程,要了解清楚公司的技术栈,主动去发掘公司项目的优化点,比如我实习的项目是一个管理系统,功能是真的简单,crud,而且数据量不大,面试根本吹不动。面试官又不喜欢听这种crud的东西。怎么办?记住,你的实习经历是你面试的时候展示自己很重要的一方面,如果实习了之后没收获,只是写crud,那么就很失败。
后来我只能自己发掘,因为数据量是3个星期多了1W多条数据,这个时候查表可能会很慢。
(1)所以我根据自己项目的select操作对数据库增加了索引(实际项目是没有的,我趁着在公司的空闲时间,自己做了实操,并记录下最终优化过后的结果),
(2)自己尝试了分库分表操作,跟面试官说,如果以后数据量大了,会尝试分库分表,但是这的前提是要懂分库分表的方案。
(3)后来我又发现一个问题,项目里面用了一个定时器,调接口拿数据保存到数据库,拿怎么尽量保证这个操作一定会执行,避免因为网络问题造成请求失败却没记录呢,那么可以试着做错误重试操作,并打日志拉。(项目里面没有写的,因为没有这个需求,但是我就后来自己构想了解决方案。)
项目亮点都是靠自己去挖掘的噢,实习的打法很重要,不然实习就没收获了。
三、心态与面试技巧
如果现在是大三了,建议该收收心了,想想以后的就业情况,好好为将来打算。
秋招就再9月份突然间打响,到时候所有人都蓄势待发,你会看着身边的人都在学习,学得快的offer拿到手软。
不好好准备的话,9月份10月份会很难受,当时自己没offer,看着别人手头的offer,讨论最近又去哪里面试了,当时心情真的很酸。我校有个大神大二就开始刷面经了,牛逼的要死的巨佬,都怪之前没好好学习。
心态很重要
面试不过很正常~ 基本前2、3次面试都是被虐的,收学费,多面几次就行了。我试过一个宿舍3个人过去面同家公司,结果就我一个人孤零零回来,另外俩人都到达hr面。也试过二面完感觉不错,能过了,但是等了2个星期都没消息的情况,很难受很失落,怀疑自己不ok想要放弃,心想着:“要不先找个小公司呆算了,这几年好好努力再进大厂”。早点睡一觉休息一下,第二天继续肝。
做好承受很大压力的准备
从5月份到11月份这差不多半年,每天都在学习,基本都是8点多起床,然后去上班,或者去图书馆。而下班回来之后继续学习,地铁上也是看书,怎么说呢,争分夺秒吧。一本书《图解HTTP》,印象很深刻,这本书我在上下班地铁路上看完的,历时两周左右。《JAVA并发编程原理》也是在上下班的地铁上看了大部分的。如果不上班的话,每天8点多起来去图书馆,图书馆关门就回宿舍继续看,看到12点至少就睡觉,好几次利用晚上通宵看视频,因为没时间,第二天11点多起床吃午饭完继续看书,我个人感觉过得并不比考研的轻松。
要坚持,至少要坚持要11月中旬吧
我们这届的offer大概都是10月多拿的,如果就算9月、10月过了,也不要灰心,秋招的后期也是有很多offer的,多尝试多面试最重要。
学会面试技巧
(1)首先自我介绍很重要,把你的项目优点,你会的东西跟面试官说,目的是引导面试官问你会的东西。
(2)面试是聊天的过程,首先技术肯定要过硬,但是更重要的是聊天的方式,面试最好的氛围是有问有答,像聊天那样。要跟面试官聊天,而不是单纯回答面试官问题。
忌面试官问一个问题,你就讲一大堆,不给面试官讲话机会,你应该分点讲,比如一个最简单的问题,“ Synchronized跟Lock的区别”, 你可以这么讲:
-
Synchronized是java关键字,底层是jvm利用对象头信息判断是否获得锁,jdk1.6之后对该锁进行了优化,而lock是一个类,底层使用CAS实现。
-
Synchronized不需要手动释放资源,lock需要
-
Synchronized可重入 不可中断 非公平,Lock 可重入 可判断 可公平
-
Synchronized跟Lock非公平状态性能差不多,而Lock公平状态下性能比Sychronzed差很多,
好处:
分点讲,每一点只讲关键,个人最先一开始就讲很深入,结果面试官听了有点不耐烦,直接叫我行了,不用讲了。
后来我知道了,这样可能讲了面试官不想听的东西,所以我总结了一下,“分点讲,每点只讲关键不深入”,面试官如果想知道你的真实水平,他会再问你某一点的深入解析,比如说上面的问题,他会问“你说,jdk1.6之后对该锁进行了优化,那你讲讲怎么优化“, 或者会问”拿你说说什么是cas“。
面试官一般都是抓住一点,一直挖深看看你了解的水平的。个人的回答方式是,一开始先点一下就可以,让面试官知道你知道,他再根据你的回答选择他想问的,这也是一个引导的过程。
最重要的是,聊得对方开心拉,他一开心就给你过了,我们也可以主动问他一些关于他公司业务的问题,比如公司的技术栈,针对该技术真我们如何学习,有啥学习资料,学习路线,他是怎么解决某些情况的某些问题的。
其他的面试技巧要靠自己总结啦。
大家聊的开心最重要,总之就一个字:”舔“。