等到了研究生阶段,由于面临着找实习的压力,完善简历成为了这一时期最艰巨的任务。研究生两年期间,我大大小小修改简历不下20次,当然我这里说的是大改动,而不是改一两个错别字这种情况。
当时我找的实习类型全都是技术岗,除此之外我也为游戏策划岗位准备了简历,后来我投入到研发工作后,游戏策划的方向也基本放弃了,因为没有实习经历和日常积累,简历上也写不出什么好东西。
一份好的技术简历大概需要包括以下几个部分:
1 学校经历
那写些什么呢,其实写一下学校,院系,专业就行了。另外还有在读时间也要写上。所修课程可以不必写,当然你如果有比较拿手的课程可以写上去,笔者所学课程和岗位没有太大关系,所以都没有写。
2 实习经历
要想在秋招找一份好工作,那么实习经历基本上是必不可少的,当然有的同学的项目经历丰富,做的东西也都有板有眼,可以cover实习经历的缺失。、
但是实习经历确实是一个加分项,毕竟在大公司工作中,能学到的东西不止是项目中做的那些东西,还有流程,协作,内部技术交流等等。很多面试官喜欢跟你聊实习的经历,有的一聊就是一二十分钟,可以让你过滤掉很多技术问题。当然前提是你对你的经历很熟悉,有话可说,说得清楚。
所以建议大家先好好找实习,一段好的实习经历是未来拿到offer的一个重要前提。有些硕士可能被导师看的比较严,那么实习经历可以改成在实验室的项目经历。另外自己可以在根据方向自己做一些项目。很多面试官也会认可你在实验室的项目的。
实习经历一般可以分三部分写:
1 公司,岗位,时间
2 项目概述和你负责的内容,分点写
3 技术栈总结
这是我在两年时间修改简历的过程中总结的,比起那些写的毫无章法,没有顺序,讲不清楚是自己做的还是别人做的的项目经历来说,这样的描述无疑是非常加分的。
3 项目经历
项目经历和实习经历的描述方法类似,只不过把公司名称换成项目名称就可以了。至于做什么项目,怎么做,我的建议是找一些课程跟着做,这样的项目一般架构清晰,功能明确,更有开发指导以及一些核心代码的提供,可以为你的项目落地保驾护航。另外项目可以上传git,按版本发布,为你的GitHub加分。
4 个人技能
个人技能可以说是最最需要费心思去完成的模块了。
因为这些技能,首先不能太多,其次,你要非常熟悉,最好看过书,甚至源码,然后有过实践经验,想想看要满足这三个条件你需要为每个技能花多少时间。
然后,技能要分点写,比如计算机网络和操作系统可以写在一起。
Java技术栈的技能点可以写在一起。web相关的技术可以写在一起,以此类推,比如数据库,分布式等等,每个点的描述清晰,能够在对方提问时自圆其说。
显然,如果你能写上7-10条的技能内容,那么你已经在这个方向有所建树了,当然了,这些技能一定要符合你的意向岗位需求,并且能够cover你的项目和实习经历。
最后,除了技能点之外,你的博客,你的GitHub等其他资源,也可以写在这一部分,当然你也可以把这两个链接放在简历最显眼的位置,当然前提是你对你的博客和GitHub非常自信,否则你不写也无妨。
5 奖励荣誉
很多acm大佬会问了,怎么你的奖励荣誉放到最后写啊,因为我实在没什么拿得出的奖项啊。acm和各种竞赛论文owner当然可以把奖励荣誉放在最前面写。像我这种0竞赛的人只能老老实实做项目,攒实习,写博客了。
可能你的奖励很多,但是也只要写一些能体现你在意向岗位有优势的奖励就可以了,比如笔者写了一个是考研的成绩,在150人中排第三,还有学习委员,奖学金,优秀干部之类的奖项,然后就是本科的一些奖项。我一共写了五条,说实话已经够用了。
互联网公司排行
一线:bat 微软 谷歌 亚马逊 hulu 头条 滴滴 网易游戏
这一类的特点要么是工资高。要么是平台大,技术好。要么就是外企光环。总的来说可以优先选择,一般不会错。当然这一类公司的笔试面试难度比较大,尤其是几个外企。
二线:小米,美团,京东,网易,华为,大疆,科大讯飞。
严格来说美团可以归入一线,小米上市后只能算二线了,京东,网易可以稳居二线。还有华为,大疆创新,科大讯飞这类非互联网但是专业性强的公司。
二点五线:商汤,face++,猿辅导等AI主导公司,b站,拼多多, 知乎,斗鱼,虎牙,链家等,海康威视,深信服。
这些属于新上市或即将上市企业,这些企业有部分还处于发展期,上升机会比较大。其中有些企业可以给出高的恐怖的工资。
三线:携程,爱奇艺,唯品会,新浪,蘑菇街,58同城
这些属于近几年发展速度较慢的互联网企业,也不会给出高工资。
四线:360,搜狐,cvte,好未来,顺丰,苏宁,vivo, oppo等企业
这些互联网企业中比较靠后,对程序员来说发展前景相对来说不是很好。
五线:听都没听过的公司
游戏公司排名
阿里游戏不清楚,百度游戏很垃圾
外企:暴雪上海,2k,育碧上海,巴拉巴拉
一线:腾讯,网易游戏
二线:完美世界,搜狐畅游,多益,巨人
三线:盛大,游族,光宇,网龙
四线:非游戏公司的游戏部门
银行、金融公司
一线:摩根士丹利,蚂蚁金服
二线:陆金所,老虎证券,京东金融,微众银行,招行信用卡,银联,浦发
三线:携程金融,滴滴金融,小米金融,证券公司金融部门
第一:搜集校招信息
所谓知己知彼,百战百胜。信息不对称往往会让你失去先机,所以搜集足够的信息是你在校招中成功的重要前提。
搜集信息贵精不贵多,我总结了几个比较重要的渠道,适合大家经常去看看。
1 你想去的公司的微信公众号
2 一些比较官方的校招QQ群或者学校招聘群
3 牛客网,可以解决很多问题
4 还有拉勾,脉脉,技术论坛等渠道
第二:确定你的岗位和简历
首先,你必须选择一个与你匹配的岗位,然后为这个岗位来准备一份简历,接下来你就可以拿着这份简历去投各种公司了,当然你最好为每个公司的简历做点个性化改造。
第三:搞懂内推的作用
首先,内推一般是通过公司内推人员提供某种渠道,比如内推码,内推链接,或者直接使用应聘者信息进行内推操作。一般内推可以免除简历筛选,少数公司可以免除笔试。
随着内推网站的发展,内推渠道越来越多,导致内推泛滥,越来越不值钱了。所以如果不能联系上内推人的话,内推的价值就大大降低了。
第四:搞懂提前批的意义
现在很多大公司都喜欢搞一个提前批招聘,目的在于提前选拔优秀人才,所以提前批一般会比较严格地筛选简历,有些公司还会安排笔试。
提前批最早可能在七月开始,最晚八月开始,一般在九月之前完成,依据公司情况来定。
一般提前批和秋招是互不相干的,不会互相影响,不过有时候秋招面试官会看到提前批面试的记录,不同公司的情况不一样。
刚才说了,提前批是筛选优秀人才的,机会只留给有准备的人,如果你觉得复习的挺好,简历也不错,那就上吧,提前批一般在八月份就会完成大部分流程,当别人还在准备笔试面试的时候,你就可以拿着offer放松心情了。
第五:笔面试流程和技巧 对于非技术岗的同学,可能很少有笔试,一般会有群面,考察的内容和技术同学不同,我们今天来谈谈技术同学的面试。
笔试:秋招的笔试内容依据公司而定,有的公司喜欢考高难度算法,有的公司喜欢考察基础,有的公司两者结合。但是万变不离其宗,你最好要掌握基础算法,打好技术基础。
面试:面试一般会有多轮,根据公司要求会有二到四轮,有的公司面的轮次更多,但正常情况下是一到三轮技术面,一轮HR面。
技术面:技术面根据岗位和公司要求来考察,一般都会全方位考察技术基础,特别是简历上写的内容。并且大部分公司都要求能够手写代码或者口述代码过程。所以,技术面试考的就是算法加基础。
HR面:一般考察的性格等各方面素质,你应该表现出乐观,上进和易相处的一面,对待尖锐问题也应该从容回答,总之尽量表现出好的方面。
作为一个互联网从业者(码农),我觉得不仅需要写得一手好代码,自身对行业变化的嗅觉也应该要更加灵敏,毕竟这个时代变化这么快,也许下一个风口就是你能把握住的。
互联网风云变幻几十年,如今依然是势头强劲,快速发展。
今天我们来回顾一下这些年来互联网行业的变迁,然后再来看看现状。
1 PC时代到来,人人用上电脑
比尔盖茨的Windows将个人PC概念带入现代社会,越来越多的人开始享受计算机带来的便利和快乐。与其不同的是,IBM专注于企业级市场,而苹果电脑则专注于高端市场。
2 早期门户网站网易,新浪,搜狐形成三巨头。
互联网时代带来的第一个浪潮就是媒体行业的巨变,新媒体行业出现,随着浏览器的发展,门户类网站成为了用户的主要入口,当时只要霸占了访问入口,基本上就是称霸互联网的存在了,所以网易,新浪和搜狐是当时最强大的三个公司。
3 阿里,腾讯,百度纷纷崭露头角,BAT时代到来
随着时代发展,传统的门户网站已经不在有主导力量,越来越多的新技术,新产品带来了更多的互联网应用。
电商概念出现,马云抓住机会造出了淘宝,而马化腾买下QICQ,为腾讯抓住了社交的商机,李彦宏则复制Google的成功,做出了百度。
三家公司的商业价值远超传统门户网站,bat时代到来。
4 移动互联网时代到来,百度逐渐掉队。
随着Google推出安卓,苹果手机问世,移动互联网开始进入人们的视野,与此同时运营商提供了可靠的网络速度,WiFi变得常见。
最重要的变化就是,应用入口大量转移到移动设备,手机app和浏览器的用户量开始反超PC浏览器。
所有公司必须向移动互联网时代靠拢,新浪在这个阶段推出微博,网易稳扎稳打做手游,搜狐此时基本出局,而百度在这个时期没有靠谱的移动产品,渐渐被AT拉开差距。
5 云计算和大数据,动荡不安的年代,依然是寡头说的算
云计算和大数据技术兴起,概念被炒上天,各种公司强势入局,但是最后幸存下来的都是少数,因为核心技术和话语权都在大公司手里,毕竟这两个技术的基础分别是资金和数据量,大公司在这方面绝对是统治级的。
可以看到bat和华为,网易等公司都开始做公有云,而大数据平台基本上每个公司都会安排上。
这个时代就是技术实力说话的时代,不需要做出特别出众的产品,技术和数据是最有力的资本。
6 娱乐至死的时代,直播,游戏,视频等泛娱乐产业兴起
随着动漫,综艺,游戏等泛娱乐文化逐渐深入人心,年轻人成为了消费时代的主力军,与此同时,许多互联网公司抓住机遇,开始进行商业化运作。
从最早的yy到斗鱼,再到现在斗鱼虎牙相争,直播行业格局已定。视频行业则把握在腾讯,爱奇艺,优酷三家手中,其实就是BAT之争,外加搅局者B站。
游戏行业格局基本已定,但是视频行业则开始被颠覆,短视频app出现,快手,抖音等应用的出现打破了视频行业的生态平衡。
7 今日头条打破BAT格局,独角兽破茧成蝶
基于AI算法和大数据技术的信息流应用今日头条是近几年互联网的最大黑马,用内容推荐抢占了大部分移动端流量,抖音,内涵段子,今日头条等爆款app,不断地撼动着BAT等巨头的流量霸主地位。
时代不同了,流量为王,字节跳动(今日头条母公司)掌握了流量入口,在广告变现,商业价值等方面势不可挡,未来会怎么样,谁也说不清楚。
与今日头条崛起时间相近的小米,美团,滴滴等公司,作为行业独角兽,开始走上了上市,扩张和收购的道路。也许未来几年内,BAT的B可能要换成别的字母了。
8 AI时代到来,大小公司纷纷入局。
AI时代到来,比起云计算和大数据,AI炒概念就更是炒上了天。AI技术远比前两种技术要难以落地,并且必须建立在前两者的技术基础上才有可能实现,所以一些只玩概念的公司很快就会出局。
目前只有几家行业先驱解决了融资问题的同时又完成了一些落地方案,非常值得期待,比如商汤科技,第四范式等公司。
9 人人都做互联网金融,上市热潮不要停
互联网金融早已不是什么新鲜词,只不过在支付宝的成功之后,越来越多人开始看到了它的商业价值,自从马云把支付宝独立设置成蚂蚁金服公司以后,蚂蚁金服就成为了中国最大的互联网金融公司。
蚂蚁金服如今市值已经超过百度,完全是独立运作的公司了。
其他有钱有闲的公司当然也不会错过机会,B和T就不用说了,还有京东,携程,网易等公司开始入局。同时美团,小米,滴滴,这些独角兽也不会错过这等好事。
除此之外,其他一些公司如陆金所,少数P2P公司也能做到非常高的市值。
10 区块链概念兴起,泡沫化严重
在区块链火起来之前,比特币率先出现在人们视野,这个被日本老人造出来虚拟货币,从刚开始的不值钱,到单价几百,几千,最后到几万元,让多少炒币者经历冰火两重天。
区块链也在这个时候进入人们视野,虽然只是概念性技术,基础设施还很不成熟,所以很多公司都是轻度布局,主要观望,但是炒概念的公司越来越多,泡沫越来越严重。
不过未来会有什么公司在这方面成功,我觉得肯定还是大公司,因为区块链技术太依赖基础设施了。
总结:除了上述提到的这些变化以外,其实还有很多没有提到的行业,公司。比如最近上市的拼多多,令人期待的无人车,梦想破灭的乐视,等等等等。
互联网每天都在发生不同的事,每一天可能都是新的互联网时代。
作为一个程序员,我们只能老老实实地码代码,但是我们应该更关注行业动态,成为更专业的互联网人。
作为一个希望进入互联网行业的同学,不管你是做技术还是做产品,运营等等,如果你希望加入一个大公司,就必须要了解公司的各方面内容,包括公司的行业地位,发展空间,薪资福利,以及部门情况。
但是作为一个学生,如何去了解那么多公司的内部情况呢,这就是信息不对称的问题了,作者我以前也为这个问题发愁,但是空谈误国啊,实干才能兴邦,我通过各种渠道了解到BAT各部门的一些情况,大家可以参考。
首先作为一家互联网公司,并且是有一定实力的公司,抛开行政部门和一些基础技术部门。的比如说基础架构部门,大数据部门,搜索部门以及AI部门等等。这些部门不在我们的讨论范围之内。
百度
1 三大布局
百度在去年开发者大会上宣布了三个布局,分别是手机百度,阿波罗无人车生态,DuerOS生态。当然对应的,百度也设立了这三大部门。
2 基础技术部INF
当然,它们也需要其他基础部门的支持,比如大数据,ai部门,基础架构部门。无人车部门又和百度地图部门紧密结合。
3 大搜索部门
除此之外,百度的大搜索部门是公司的核心部门,百度云也是一个不错的部门。
上述这些部门都是需要新鲜血液的部门,当然除此之外还有一些比较边缘的部门,发展相对比较缓慢。
4 其他
百度还有其他部门,比如百度金融,百度音乐,以及传统的浏览器,输入法等部门,但是众所周知百度的产品上不了台面,就不一一列举了。
腾讯
腾讯的部门体系是比较公开的,在招聘官网就可以看到,主要按照事业群来划分,首先是最火爆的IEG和WXG。
1 IEG:
ieg主要都是游戏部门,自己为游戏提供服务的部门,内部又会划分工作室,这是腾讯最赚钱的部门,也是游戏爱好者趋之若鹜的部门,当然难度也是比较大的。
2 WXG
WXG是微信事业群,负责有关微信的一切事务。其中包括微信,微信支付,小程序,公众平台等等。微信事业群是出了名的要求严格,还会专门设置面委会进行评审。
3 TEG
然后teg则是腾讯的基础技术部门,负责腾讯的基础架构工作,里面全都是技术大咖所以要想去这个部门的话,技术实力非常重要。
4 SNG
则是老牌的社交网络事业群,主打qq系列产品,最近在做短视频也就是微视,来抗衡抖音。
除此之外,腾讯云也在sng事业群,这也是很有意思的一件事,偷偷透露一下,sng有很多Java岗位,Java技术栈的同学可以尝试一下,毕竟腾讯还是被c++主宰的公司。
5 其他
除此之外,omg主打视频和体育,mig则主要负责浏览器,电脑管家等应用,cdg则负责广告,金融等方面的业务。
总的来说腾讯的事业群分工还是非常明确的,并且信息公开,有兴趣的同学也可以自己去查询。
对了,腾讯音乐已经独立成立公司进行运营。
阿里
相比腾讯按照事业群来划分职责,阿里则更倾向按部门来划分。当然首先要提的是已经独立运营的几个公司,分别是蚂蚁金服和菜鸟网络。
除了这个巨头之外,阿里内部主要的部门有以下几个。
1 淘宝和天猫部门
这两个部门其实是分开的,是阿里的立根之本,不过现在业务已经非常成熟了,基本上搞不了什么大动作,另外阿里妈妈则是助力电商的广告算法部门。
还有就是阿里在做海外淘宝,虽然名气不大,但是也是淘宝系重要一环。
2 阿里云
阿里云已经发展了很多年,在国内是当之无愧的老大,更方面的云服务都做的比较完善,如今公司内部业务应该也在逐步上云,具体进度不太清楚,同时阿里云也在不断更新服务能力,在未来几年里仍有较大空间。
3 五新和达摩院
阿里在2017年提出了五新+2H。五新:新零售、新制造、新金融、新能源、新技术。2H:文娱、健康。
新零售是阿里未来几年来需要做的一件大事,新零售部门也逐渐进行布局了,盒马生鲜也是阿里新零售的一个发力点。
新金融主要是蚂蚁金服做的事情。
新技术则主要指阿里巴巴设立的达摩院,听起来玄乎,其实就是要培养一些研究型的人才,作为未来新技术研发的储备人才。
4 大健康和大文娱
2H指的就是健康和文娱,健康方面其实阿里投入了不少心血,但是作为普通用户看不出有多大能耐。
文娱方面则主要是收购的优酷,优酷在文娱方面的表现还是不错的的,不过比起腾讯视频和爱奇艺还有一段路要走。另外阿里也在做游戏,只不过产出比较缓慢。
不过”没文化“的阿里在文娱方面的投入应该会一直扩大下去,所以相信未来这些部门也会逐渐发展起来。
5 飞猪,钉钉,UC
钉钉是阿里打造的企业级社交工具,目前在国内公司的覆盖率还是非常高的。
而飞猪是旅游app,在和携程,去哪儿等老牌旅游应用相比也有一定距离。
UC也是阿里在移动端的另一重要入口。
6 ofo,饿了吗,口碑,高德地图
ofo和饿了吗是阿里收购的公司,这两家公司都是阿里最重要的线下入口。
而口碑外卖则是阿里一直扶不起的阿斗,但是如今也独立成部门,因为其也承担了打通阿里线下场景的重要责任。
高德地图毋庸置疑也是阿里基础设施中很重要的一环。
7 中间件部门
阿里巴巴有一个专门研究中间件的部门,独立于其他基础架构部门,主要负责阿里系系统组件的研发和维护,支撑所有的业务部门。
所以其对技术要求也是比较高的,同时主要是对Java中间件的打造,所以对Java要求比较高。
以上就是对BAT部门的大概总结了,当然对某些部门的解释可能不够准确,并且有很多部门没有提起,毕竟知识面有限,还请见谅。
但是以上内容可以作为大家选择岗位和部门的一个参考内容,如有建议或意见,欢迎交流。
应届生必须参加校园招聘
校园招聘是一个人20年甚至更长时间的学习历程中最后的阶段,比起高考,它可能没有那么紧张刺激,那么无路可退,九死一生。比起考研和留学,它可能更加关键和值得思考。
一:只有一次机会
为什么它那么重要呢,因为每个人只有一年时间参加校园招聘,更具体来说是只有一个暑假来参加校园招聘,这个暑假的付出和收获将决定了你人生中的第一份工作。
人生有这么多第一次,第一次上学,第一次出国等等,而第一次职业选择和你在大学时候选专业时一样重要。
如果说一所好大学决定了你的人生高度,而一份好工作则决定着你人生的宽度,以及今后人生的走向。
可能很多人觉得以后还有机会更换工作,或者可以选择先就业再择业,醒醒吧,那都是学校就业中心为了追求院校高就业率的好名声而说出的不负责任的话。
校园招聘是学生进入一些大公司的最好机会,甚至对于一些政府单位,国企事业单位等公司来说,应届身份是唯一进入这些单位工作的机会。
第二:难度较低,规模较大
相对于社会招聘来说,校园招聘更加正规,具有规模,看重院校背景和综合素质,以全面的标准评判一个学生,可以说是一个很公平的竞技场。
对于一些大企业来说,社会招聘的要求远高于校园招聘。
第三:培养比较正规,决定着你的起点
一般大公司对校招的新人培养都特别上心,会全方位地培养你的能力和综合素质,为你的职业起点开了个好头。
而且首家公司也决定了你下一份工作的起点,以及你未来个人职业发展的格局。第一份工作一般至少要做个两三年才好跳槽或变动,所以一定要重视。
总结:
校园招聘的结果决定着你事业的起点,为了给你的职业生涯开一个好头,加油吧少年,用你学生时代的最后一些时间好好拼搏一次,为你的后半生开个好头。
校园招聘时间点
金九十,银三四
时间点一:提前批
互联网企业的招聘集中在暑假期间,这个时期主要是内推和提前批
时间点二:正式秋招
9月和10月会有大量企业进入校园召开宣讲会,这个时期是正式的校园招聘,会有很正规的流程,一般都要有面对面交流。
时间点三:春招补招
如果错过了秋招或者没有找到理想工作,那么秋招结束后到春招开始这段期间需要进行反思和总结,以便来年春天参加春季招聘。
现如今春季招聘基本上是招收实习生为主,而应届生的补招岗位会比较少,但是也有很多公司在招,原因是应届生可以立刻入职,成本很低。
春季招聘则主要集中在春节后的三四月,这段时间是你参加校园招聘的最后机会。
在这以后,你只能以社会招聘的身份进行求职了。
Java开发工程师一般负责后端开发,当然也有专门做Java Web的工程师,但是随着前后端的分离,越来越多的Java工程师需要往大后端方向发展。
今天我们就来介绍一下Java后端开发者的书单。
首先要感谢一下江南白衣大大的后端书架,让我在初学阶段读到了很多好书,直到现在都印象深刻。
我在两年的学习历程中看了很多的书,其中不乏XXX入门到精通,XXX王者归来,XXX指南什么的。
虽然这类书确实毛病很多,但是作为非科班的我来说,当时还是看的津津有味。直到后来我看到一些优秀的书籍,以及白衣哥的书架,我才逐渐认识到看一些精品书籍的好处。
所以我们今天就从这些精品书籍中挑选一些优秀书籍来推荐给大家,当然其中有一些书我自己也没有时间看完。
接下来我们按照后端技术栈各个部分的内容来推荐书籍。
网络
这本其实我刚开始没看太懂,可能是当时太水的原因,但是一般是大牛力荐的书。
2 计算机网络:自顶向下
这本从应用层讲到物理层,感觉这种方式学起来更轻松,我比较推荐小白看这本。
3 图解HTTP和图解TCP/IP
相较于前两本大厚书,这两本书更加亲民,小白可以买来看看,还是很适合入门的。
4 计算机网络
没错,就是这本教材,作为非科班选手自己看这本书,那叫一个欲仙欲死啊,看完就忘记了。
操作系统
这本书不是严格意义上的操作系统书籍,而是对计算机基础和操作系统做了一个串联,可以解决你很多对于计算机的疑惑,并且对操作系统有一定理解。
其实这本书还是很厚的,有一定难度,建议有一些基础后再看。
这本书其实我没怎么看,比较详细地讲解了操作系,但是也是大家都比较推崇的书,还是那句话,很厚,慎看。
当你对操作系统有一定理解以后,这本书将为你打开学习Linux内核的大门,当然在此之前你得有一定的c语言开发能力,以及对Linux的了解。反正,我现在还没开始准备好看这本书。
这两本书的厚度绝对让你感到绝望,其实就是讲解了Unix内核是如何实现网络通信的,其中涉及到很多网络,操作系统的知识,并且你要熟悉c语言。总之,这是一本奉为网络编程神书的存在,不过我等新手还是拿他压压泡面就好了。
网上有很多博客会参照该书的内容,可以去看看它们。
数据结构与算法
不瞒你说,由于我非科班,所以算法基础比较差,数据结构是考研时跟着天勤考研指南学的,学习算法也是一路坎坷,举步维艰。还是分享几本比较靠谱的书吧。
1 算法导论
你问我是不是认真的,我就是说说而已,这本书我买来没看过。
2 数据结构与算法(Java版)
这本书对于初学者来说还是比较友好的,当然学Java的看这本。
3 算法图解,啊哈算法
这两部书籍非常适合学习算法的入门,前者主要用图解的形式覆盖了大部分常用算法,包括dp,贪心等等,可以作为入门书,后者则把很多常用算法都进行了实现,包括搜索,图,树等一些比较高级的常用算法。
这本书还是要强烈推荐的,毕竟是面试题经常参考的书籍,当然最好有前面基本的铺垫再看,可能收获更大,这本书在面试之前一般都要嚼烂。
5 LeetCode
这不是一本书,是一个题库,算法么,终究还是要靠刷题来提升熟练度的。
Java基础
1 Java编程思想
这本书也是被誉为Java神书的存在了,但是对新手不友好,适合有些基础再看,当然要选择性地看。我当时大概只看了1/3
2 Java核心技术卷一
这本书还是比较适合入门的,当然,这种厚皮书要看完还是很有难度的,不过比起上面那本要简单一些
Java进阶
1 深入理解JVM虚拟机
这本书是Java开发者必须看的书,很多jvm的文章都是提取这本书的内容。JVM是Java虚拟机,赋予了Java程序生命,所以好好看看把,我自己就已经看了三遍了。
2 Java并发编程实战
这本书是Java 并发包作者写的书,所以非常权威,但是比较晦涩难懂,我看的云里雾里的,大家可以按需选择。
3 Java并发编程艺术
这本书是国内作者写的Java并发书籍,比上面那一本更简单易懂,适合作为并发编程的入门书籍,当然,学习并发原理之前,还是先把Java的多线程搞懂吧。
4 Effective Java
这本书和Java编程思想一样被称为神书,主要讲的是Java的一些优化技巧和规范,没有一定开发经验的人看这本书会觉得索然无味,不知所云,所以,先搁着吧。
5 Java性能调优指南
说到JVM调优,可能会有很多的面试题浮现在你的脑海里,这本书比较权威地讲解了Java的性能调优方法,不过我还没怎么看,有空好好看看。
6 Netty权威指南
Netty是基于NIO开发的网络编程框架,使用Java代码编程,其实这本书也可以放在网络或者Java Web部分。不过NIO属于JDK自带的一部分,是必须要掌握的,而对于Netty,大家如果学有余力的话也可以看看。
JavaWeb
0 深入JavaWeb技术内幕
这本书是Java Web的集大成之作,涵盖了大部分Java Web开发的知识点,不过一本书显然无法把所有细节都讲完,但是作为Java Web的入门或者进阶书籍来看的话还是很不错的。
1 How Tomcat Works
Java Web很重要的一部分内容就是Tomcat,作为应用服务器,Tomcat使用Java开发,其源代码和架构设计都是经典之作。
这是一本讲解Tomcat基本原理的书籍,很好地通过剖析源码来讲解Tomcat的内部结构和运行机制,但是需要一定的基础才能够看懂,我还没看这本书,日后再拜读。
和上面这本书类似,主要讲解Tomcat原理和架构,,要看懂这本书的话,前提是你要对Java基础,NIO以及设计模式有所了解。这本书我也还没看。
3 Spring实战
这本书适合作为Spring的入门书籍,把Spring的概念,使用方式等内容都讲的比较清楚。并且也介绍了Spring MVC的部分内容,Spring框架还是更注重实践的,所以跟着书上的内容去做吧。
学会Spring基础后,可以花点时间看看这本讲源码的书了,这本书对于新手来说不太友好,主要也是因为Spring的代码结构比较复杂,大家也可以看一些博客来完成对源码的学习。
5 Spring MVC学习指南
本书是一本Spring MVC的教程,内容细致、讲解清晰,非常适合Web开发者和想要使用Spring MVC开发基于Java的Web应用的读者阅读。但是由于出的比较早,所以不太适合现在版本。
Maven是Java Web开发中不可缺少的一部分,如果想要全面了解其实现原理的话,可以看看这本书。
数据库
0 数据库原理
数据库原理应该是教材吧,这本书作为数据库入门来说还是可以的,毕竟不是专门做DB的,看大厚书用处不大,这本书把数据库的基本概念都讲完了。
1 sql必知必会
这本书主要是讲解sql语句怎么写,毕竟数据库最重要的一点就是要熟练地使用sql语句,当然这本书也可以当做工具书来使用。
这本书适合作为MySQL的学习书籍,当你有了一定的MySQL使用经验后,可以看看它,该书从数据库的基础、开发、优化、管理维护和架构5个方面对MySQL进行了详细的介绍,讲的不算特别深,但是足够我们使用了。这本书我也只看了一部分。
看完上面那本书以后,对MySQL算是比较熟悉了,不过对于面试中常考的innodb引擎,还是推荐一下这本书把,专门讲解了innodb存储引擎的相关内容。我还没有细看,但是内容足够你学好innodb了。
4 高性能Mysql
这本书可以说是很厚了,更适合DBA拜读,讲的太详细了,打扰了。
5 Redis实战
和MySQL一样,学习Redis的第一步最好也是先实战一下,通过这本书就可以较好地掌握Redis的使用方法,以及相关数据结构了。
6 Redis设计与实现
该书全面而完整地讲解了 Redis 的内部运行机制,对 Redis 的大多数单机功能以及所有多机功能的实现原理进行了介绍。这本书把Redis的基本原理讲的一清二楚,包括数据结构,持久化,集群等内容,有空应该看看。
分布式
0 分布式Java应用
这本书是淘宝大牛写的书,主要讲的就是使用rpc来构建分布式的Java应用,讲了很多基础的东西,可以作为入门书籍,不过这本书我之前没有遇到,所以没看过。
1 大型网站技术架构
这本淘宝系技术指南还是非常值得推崇的,可以说是把大型网站的现代架构进行了一次简单的总结,内容涵盖了各方面,主要讲的是概念,很适合没接触过架构的同学入门。看完以后你会觉得后端技术原来这么博大精深。
2 大型分布式网站架构设计与实践
这本书与上面一书相比更倾向于实践,主要讲的是分布式架构的一些解决方案,但是如果你没有接触过相关的场景,可能会看的云里雾里。
3 分布式服务框架原理与实践
上面那本书讲的是分布式架构的实践,而这本书更专注于分布式服务的原理讲解和对应实践,很好地讲述了分布式服务的基本概念,相关技术,以及解决方案等,对于想要学习分布式服务框架的同学来说是本好书。
4 大型网站系统与Java中间件开发实践
话说这些书的名字真实够长的。这本书也是阿里系出品,主要讲的是大型网站系统以及使用的相关中间件,毕竟阿里是中间件大户,所以很多中间件对应用再网站系统中,对于想学习这方面技术的同学来说可以一看。
5 从Paxos到Zookeeper分布式一致性原理与实践
说起分布式系统,我们需要了解它的原理,相关理论及技术,这本书也是从这个角度出发,讲解了分布式系统的一些常用概念,并且带出了分布式一哥zookeeper,可以说是想学分布式技术的同学必看的书籍。
6 大规模分布式存储系统
在这里插入图片描述
这本书是阿里巴巴oceanbase核心开发大佬写的书,讲的是分布式存储相关的原理和解决方案,该书不是很厚,如果想做存储方向的同学可以看看。
云计算
云计算方面的内容主要是我在实习阶段接触的,如果只是应用开发方向的话这块不懂也罢。主要还是看个人兴趣。
1 OpenStack设计与实现
OpenStack是基于KVM技术的一套私有云生态。这本书很好地讲解了OpenStack的一些基本原理,包括各个组件的设计与实现,比起另一本《OpenStack王者归来》简单易懂的多。当然,前提最好是你对Linux内核和网络有所了解。
docker是现在应用部署的主流方案了,所以了解一下还是挺有必要的,这本书作为入门书籍足够让你会使用docker了。
kubenetes是docker的集群解决方案,也是一个微服务的解决方案,所以这本书涉及的内容非常多,需要有网络,操作系统以及docker相关的基础。我看这本书的时候可以说是非常晕的。
大数据
和云计算一样,大数据方面的内容也不算是Java后端技术栈所需要的,但是这也能为你加分,并且让你跟大数据开发的岗位沾点边,何乐而不为。
1 大数据技术原理与应用
作为大数据方面的一本教材,厦大教授写的这本书还是非常赞的,从最基础的原理方面讲解了Hadoop的生态系统,并且把每个组件的原理都讲得比较清楚,另外也加入了spark,storm等内容,可以说是大数据入门非常好的一本书了。
2 Hadoop实战
这本书很厚,我买的时候大概看了一遍,一头雾水。所以建议先看上面那本书,再来看更加进阶的书籍,否则可能就是浪费时间了。
这本书主要对Hadoop生态中组件进行详细讲解,有点太详细了,如果不是做大数据方向的话,可以不看。
其他:
1 Git权威指南
Git是现在大公司主流的代码协同工具,如果你想要了解其底层原理,可以看看这本书。
这本书主要介绍的是代码重构的一些指导思想和最佳实践。有重构需求的同学可以看看。
3 - n
其他方面的书籍就太多了,比如软件工程方面的,测试方面,Linux方面,以及讲一些程序员自我提升的书籍,就不一一列举了,因为这部分的内容可以不归入Java后端的技术栈。
应届生如何获取招聘信息
原创: h2pl 程序员江湖 8月26日
本文出自我的公众号:程序员江湖。满满干货,关注就送。
招聘网站:
这年头互联网公司盛行,很多岗位都是技术岗位,这种岗位对学生的要求和其他岗位不太一样。所以我们先来说说一般情况下,有哪些渠道获取招聘信息,主要是指那种面向所有公司的招聘网站。
1 应届生求职网
评分:2.5星
这个网站可以说是无所不包,不管什么样的岗位都有,什么样的公司也都有,当然全部都是针对校园招聘的。所以可想而知,要找到符合你目标公司和目标岗位的难度也会比较大。虽然大而全,但是筛选率差,缺少专业性。
2 智联招聘,前程无忧
评分:2.5星
这两个网站是老牌招聘网站了,但是随着互联网时代发展,这些网站早已掉队,网站排版混乱不堪尚且不说,还有很多虚假信息,培训广告。当然对于校园招聘可能还好一点,因为和一些公司有合作,开辟校招通道,但是如果要自己去检索的话,抢龙不推荐。
3 58同城,赶集网
评分:2.5星
这两个网站的定位和其他几家不同,不适用于咱们大学生的校园招聘,也是专门给普通无业人员提供找工作服务的,基本上可以涵盖所有品类。所以这两个网站咱们也可以直接忽略了。
4 猎聘网,中华英才网,大街网
评分:3.5星
这几个网站成立的时间比较晚,所以整体的网站风格比较符合互联网风格,除此之外也不会像前几个网站那样到处打小广告,整体的招聘公司质量比较高,同时,这几个网站也尝试着做职场社交,只不过都做的不咋地。
5 拉勾网,实习僧,校园招
评分:4星
为啥把这三家放在一起呢,首先实习僧只针对实习生的招聘,校园招是和它合作的校招网站,这两个网站打算把实习和校招全包了。当然拉勾网可不干,因为它也涵盖了实习和校招两个业务。
然后回答一下第一个问题,这三家招聘网站主要都是针对互联网公司或者五百强企业提供招聘服务,主打的也是专业性和优质性,如果你是互联网从业者,这几家网站绝对不容错过。
不过就目前看来拉勾网逐步显露出颓势,毕竟实习和校招的业务糅杂在一起会降低用户体验。而实习僧和校园招的前景应该会比较好,因为在细分领域还有无限的机会等他们去扩展。
6 牛客网
评分:4.5星
牛客网可能不是信息最全的,也不是招聘公司入驻最多的,但他却解决了很多希望进入互联网公司的同学们的痛点,比如说它提供了线上笔试服务,提供了讨论区进行面试交流,内推信息发布,以及笔试面试题库等等服务。
牛客打造的是一个招聘社区,只要人头够多,他们的服务就能越做越好,目前看来牛客是最能解决应届生校招痛点的网站了,除了上面所讲的内容,牛客还提供了公司校招时间表,简历投递渠道,以及交流群等服务,可以说是麻雀虽小五脏俱全。相信以后能够提供更多服务。
其他渠道:
除了招聘网站以外,其实还有很多渠道可以获取招聘信息,下面我们就来梳理一下这些渠道吧。
0 企业官网
我这不就是废话吗,企业官网当然要去看了,但是你也不可能天天去看所有企业的官网啊,所以这个方式就不说了。
1 公司招聘公众号
基本上所有大公司都会有招聘公众号,你需要花一些时间进行收集和关注,并且经常查阅,基本上可以了解官方的招聘动向,当然,官方的东西数量有限,你还得花点时间去收集一些内推信息。
2 招聘服务公众号
里指的是有一些公众号从业者提供的招聘公众号服务,它们一般会收集很多公司的招聘信息,并且包装成推文后再推送给用户,并且通过用户转发分享来拉人头,从中获取广告收益,这类公众号不胜枚举
有一些公众号更是为了拉人头而不择手段,发布虚假或者过时招聘信息,比如”内推军“。当然也有一些相对靠谱的,虽然也拉人头,但是起码消息都是真的,比如”柠檬校招“,”校招日历“等。
大家一定要擦亮了双眼,不要为无良商人浪费了宝贵时间。、
3 知乎,V2EX等社区
两个社区都是比较出名的程序员社区,里面常常混迹大神以及大公司的员工,所以经常就可以刷到一些招聘信息,当然有时候这些内容可遇不可求,检索起来也不大方便,所以大家可以关注自己想去的公司和一些求职版块,以免错过信息。
4 LinkedIn,脉脉
两个玩意众所周知都是做职场社交的,只不过脉脉是模仿LinkedIn做出来的产品,更接地气一点,LinkedIn我的使用感觉是风格过于洋气,使用体验一般,相比来说脉脉更加方便一点,可以很快捷地勾搭各界职场人士,非常精准。
当然脉脉也经常传出负面新闻,窃取用户隐私,强行读取数据等等,可惜了这么好一个产品,非要这样杀鸡取卵,但是对于防盗能力强的职场人士来说,还是可以用用的。
5 QQ群
有一个重要的渠道就是QQ群了,不管是企业还是私人,都会拉一些招聘qq群,不管它们是出于什么目的,但我们一般都能得到一些有用的信息,但是缺点也很明显,就是太多人喜欢水群了,搞得你找不到有价值的信息,所以啊,屏蔽那些话痨把,要不然就直接到忽略这个群吧。
总结:以上这些渠道都是我在两年找实习和找工作期间使用过并且对比过的,其中有很多坑,并且了解这些渠道也需要很多时间,所以在这里做一个聚合,也希望大家能够从中获益。
微信公众号:程序员江湖。
分享程序员最关心的那些事。
少侠既然来了,何不关注一下。
一份好的实习经历是还在秋招成功的基础,如果能去大厂实习,可能就更加加分了,所以如何找实习成为了一个很重要的话题。今天我们就来从几个方面讲一下如何找到一份出色的实习把。
0 明确找实习的时间段
日常实习生一般很多公司全年在招,当然也有一些公司会统一安排春招,集中在三月和四月,这些公司一般不会开放日常实习生通道,这样的公司有腾讯,阿里等大厂。
1 确定好你的空余时间
有些同学没有大段实习时间,可能就只有暑假可以实习,有些硕士必须得待在实验室,没机会实习。所以找出你的空闲时间,是一个前提。
2 确定好你的岗位方向
和找工作一样,找实习也必须要确定一个岗位方向,然后准备一份简历。
3 找实习的简历怎么写
在此之前你可能没有实习经历,所以写好你的项目经历,或者一些小厂的实习经历,也是不错的选择。
4 你能实习多少时间
这是实习面试时经常问的问题,面试官会根据这个来筛选候选人,所以我们一般可以说3到6个月或者6个月以上。
5 日常实习生和统招实习生
日常实习生也叫散招,一般不是通过春招统一招聘进入公司的,而是招人的部门通过一些招聘网站进行招聘的,一般面试难度较低,流程也比较不正规,所以做的事情也相对比较水。
统招实习生指的是通过春季招聘进入公司实习的,流程规范,有的公司的面试难度堪比秋招,
很让人头大。这类的实习生转正的机会会更大,并且做的工作相对会更有挑战性。
6 找实习上哪找
一般公司的官方网站不会公布日常实习生的招聘,只有春季招聘才会有正规安排。所以日常实习生的招聘可以到牛客网,实习僧,拉勾等网站找,或者通过微信公众号和QQ群来获取信息。
7 找实习时必须知道的事情
问清楚实习的工作和部门情况,尽量避免打杂。
问清楚实习能否转正,转正流程的大概情况。争取找一个可以转正的靠谱公司,当然如果志不在此,那么能否转正也无所谓。
了解以上这几点以后,就可以好好地去找实习了。相信你能找到一个令你满意的实习工作。
后面我会针对几个问题在写一篇文章。
一是“实习阶段应该做哪些事情”。
二是“实习转正与秋招,如何权衡与抉择”
欢迎大家继续关注。
上次我们讲述了如何寻找实习工作,今天我们来讲一下找到实习以后应该做什么正确的事情。
首先我把我自己的实习经历作为一个比较反面的教材。
其实我自己的实习总结下来就这么几个词,悠哉干活,做完就行,偶尔健身,经常早退。
当然我也会去听听讲座,看看度学堂,但是总体来说还是比较散漫。
我在实习期间确实是比较划水的,确实有一些遗憾,所以我在这里进行回忆与反思,总结一下实习期间应该做的事情。
1 做好本职工作
首先,你需要做好你的本职工作,保质保量,按时交付。这样你的同事和领导都会肯定你的能力,也会逐渐把一些进阶的任务交给你做,让你得到更多锻炼的机会。
2 多找同事请教
然后,和同事愉快相处,多多请教交流,学习大牛身上的优点。大公司的员工一般技术水平都比较高,一开始你一定会觉得不太适应,但是不要有压力,多向他们学习,你会知道你应该向什么方向努力。
3 搞懂项目架构
搞懂部门的技术架构,项目代码,了解相关技术栈,为以后你讲述实习经历时打好基础。
我在百度的时候第一次接触云计算相关的技术栈,为了搞懂这方面的技术,啃了很多书,也看了很多相关的代码,才让我逐渐能够理解项目的架构以及代码。
这件事需要花比较多的时间,需要循序渐进,而不是一口气吃成胖子。
4 学习公司技术
多参加技术讲座,学习内部技术交流,让你对公司整体情况有比较好的掌握。
百度经常用一些大大小小的技术讲座,各部门之间都会进行一些技术分享和交流,利用这些机会,你可以很好地了解公司的一些核心技术,慢慢地你也会更加理解公司的路线和布局。
5 利用内网资源
合理利用内网资源,看一些在线课程,或者其他大牛的经验分享。同时后端同学可以利用公司的服务器集群做一些平时单机做不了的事。
同样是在百度,我经常在“度学堂”中学习一些课程,里面会讲解很多百度内部的技术,有助于你理解平时使用到的一些东西。
6 记录你的进步
记录日常工作,和周报类似的作用,但是是你对自己工作的一个记录和总结,对以后你回顾和总结项目有帮助。
我一般会用有道云笔记记录日常事务,学习新技术或者一些工具的时候,会相应地写一些博客,养成这样一种习惯,会让你的实习生活更充实。
7 了解你的公司
趁着在公司的机会多了解内部信息,比如部门,内推,薪资福利等等,以后找工作选公司的时候,心里更有数,有参考标准。
一般内网里对这些信息还是比较公开的,所以可以去了解一下你感兴趣的部门,以及相关的招聘信息,为将来的职业选择作参考。
8 生活小贴士
租房子慎重签合同,以免被坑,除了日常实习工资以外,注意补贴的使用和报销,我就经常忘记报销。
了解以上这些内容以后,相信你可以在实习中扮演自己的角色,并且能够在实习中得到能力上的提升,这将会为你将来的求职,工作道路上带来很多的便利和好处。
腾讯SNG
后台开发工程师
大概是8月初投的简历,当时没有选事业群,第二天直接被sng捞了,抓着我一顿面试。
一周内就面完了三次面试,接着就开始无尽的等待,整整等了三周左右,终于完成了四面和HR面。
整个过程还是比较曲折的,技术面试的难度也挺大的,不过他们部门也是Java线,所以还比较有的聊。结果目前还不知道。
1一面
一面:
1 有序数组排序,二分,复杂度
2 常见排序算法,说下快排过程,时间复杂度
3 有N个节点的满二叉树的高度。1+logN
4 朋友之间的点对点关系用图维护,怎么判断两人是否是朋友,并查集,时间复杂度,过程。没讲清楚
研发工程师(Java)
我参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头offer。这是我的面经,在这里分享给大家。
一面:
1 自我介绍
2 项目中做了什么,难点呢。
3 Java的线程池说一下,各个参数的作用,如何进行的。
4 Redis讲一下
5 分布式系统的全局id如何实现。用zookeeper如何实现的呢,机器号+时间戳即可。
6 分布式锁的方案,redis和zookeeper那个好,如果是集群部署,高并发情况下哪个性能更好。
7 kafka了解么,了解哪些消息队列。
8 想做业务还是研究。
9 然后出了一道题,linux的访问权限是rwx格式的。使用一个类支持访问权限的增删改查,并且注意使用的数据格式以及方法效率,规范。给了一个多小时写题。
耗时将近30分钟。
二面:
1 介绍你做的项目和其中的难点。
2 上次面试官问的问题,反射的作用是什么。
3 数据仓库,多线程和并发工具等。
4 私有云,docker和k8s等。
5 了解哪些中间件,dubbo,rocketmq,mycat等。
6 dubbo中的rpc如何实现。
7 自己实现rpc应该怎么做
9 dubbo的服务注册与发现。
10 听说我是非科班,于是问了些排序算法
耗时将近30分钟。
三面:
三面不是面试,而是笔试,耗时三个小时,考的是Java核心的基础。但是好像不能透题,就不说了。都挺有难度的。
大概说一下就是有几个考点,Java并发的知识点,集合类,线程池,多线程之间的通信等。
HR面:
聊人生谈理想,HR小姐姐非常温柔,交流十分愉快。30分钟。
百度智能云
软件研发工程师
百度今年的提前批有点奇怪,好像都不走流程,牛客上好几个百度内推的帖子,我投了几个,基本上都是百度智能云的。
然后这些部门都安排了面试,没有冲突,所以没有动静的小伙伴可以投投别的部门试试。
下面是我的两篇面经,后续会继续更新,每个部门侧重点不太一样。
百度智能云研发岗
好像是做控制台方面的组
一面:
1自我介绍,项目
2 static关键字有什么用,static修饰不同东西时有什么作用,内部类用static修饰和不用static修饰有何区别。
3 hashmap,hashtable,concurrenthashmap区别和场景
4 volatile关键字有什么用
5 jvm分区讲下,作用讲下,gc算法讲一下,gc是否会有停顿或者延迟。
6 讲一下OOM和内存泄漏的例子,为什么有GC还会出现内存泄漏和内存溢出呢
7 线程和进程的区别,通信方式的区别。
8 悲观锁和乐观锁,说一下Java和数据库分别怎么实现的。
9 数据库索引说一下,除了B+树索引还有什么索引。
10倒排索引说一下,如果关键字很多,怎么优化。使用前缀树和hashmap优化。
11 前缀树的结构和原理说一下。
12 浏览器发起http请求过程,越详细越好。
13 缓存和数据库的一致性怎么保证
14 网上写代码,写了一个快排
15 没了。
二面:
1 自我介绍
2 项目中难点,用到的技术
3 多线程,说一下线程的状态和状态转换,详细问
4 多线程的sleep方法和wait方法为什么来源不同,一个是object方法,一个是Thread的方法。
5 为什么object的wait和notify必须在同步块中使用,不在同步块使用会报错么,编译报错还是运行报错。
6 jvm讲一下gc吧,两个对象的引用循环依赖,会不会被垃圾回收,什么情况下会什么情况下不会呢
7 GC root是哪些位置呢,我说记不起来,他说你不用记,其实就是运行时的一些对象和变量,比如局部变量表,方法区的元数据比如fianl,static变量,本地方法栈执行的方法。
8 数据库了解哪个。Redis说一下为什么是单线程的,不会很慢么,有什么好处。
9 Redis的IO请求模型,是不是IO多路复用呢。
10 Spring的interceptor和filter有什么区别。我说没区别,错!
11 网络这块,说一下dns请求的过程吧,dns是否会访问缓存呢,缓存在本地和浏览器,还有dns服务器上是不是都有。
12 get和post的区别讲一下,底层的实现有区别么,都是基于TCP,那么如何限制get的url长度,在哪一层限制的。
13 数据结构熟么,讲一下树和图吧,树的层次遍历使用什么结构,相应的图的遍历呢。讲讲最小生成算法,还有迪杰斯特拉。
14 数组,找到唯一一个出现两次的数。
刚开始听错,说了位运算。
a 然后讲了数组计数,hash计数,排序比较。
b 然后面试官说条件给的是1到N-1的N个数字,重新想一下。
c 说了根据数组位置和数字比较进行判断。面试官最后说可以用相加求差值来判断。
15 一个10000以下的数组,内存够。里面只有1,2,3。排下序。
a 普通排序O(nlogn)
b 荷兰旗问题,双指针解决。O(N)
c 统计数量,重放数组O(2N)
d 另外搞一个数组,把1放头,3放尾,也是双指针。O(N)。空间复杂度O(N)
16 没了。
全程50分钟
三面HR
巴拉巴拉巴拉。基本上问题都大同小异。
百度智能云 数据库部门
一面:
1 数据库的事务,四个性质说一下,分别有什么用,怎么实现的。一致性没讲好。
2 讲到了redo和undo日志,问我分别有什么用,说redo日志说错了。
3 数据库的隔离性如何保证,使用悲观锁和乐观锁有何区别。MVCC的设计目的是什么,怎么使用版本号判断数据的可见性。
4 问了一道算法,1到N的所有数字,按照字典序打印,怎么做。
说了用数组排序,问复杂度,扯了半天。
怎么优化,按照数字特征顺序打印,问这个东西和什么结构比较像。提示是树,然后说了个多叉树,问我怎么实现,最后其实使用dfs遍历树的每个分支。
5 多线程并发的同步实现,有两个方法,每个方法里有a部分代码和b部分代码,我要让两个线程分别执行两个方法,并且让他们运行完a部分代码再一起向下执行,如何实现。
6 我说了用cyclicbarrier实现,互相等待await。
然后他问我怎么用信号量实现,并且提示可以再用一个线程。
然后我说了个方案。
7 问了项目
8 如何把优化递归的代码
改成尾递归或者循环。
面试官说不是,引导说用栈实现递归。
问我栈中需要压入哪些数据。他说应该是方法参数,返回值,以及返回地址。
二面:
1 自我介绍,项目 10分钟过去
2 服务器如何负载均衡,有哪些算法,哪个比较好,一致性哈希原理,怎么避免DDOS攻击请求打到少数机器。
3 TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作用是什么,为什么要time wait,为什么是2msl。
4 数据库的备份和恢复怎么实现的,主从复制怎么做的,什么时候会出现数据不一致,如何解决。
5 今天面试太多了,记不清了。。。
6 开源的技术看过用过么,分布式存储的了解么。
7 想做什么方向的开发。
8 Linux查看cpu占用率高的进程
9 查看占用某端口的进程和某进程监听的端口
10 如何查询日志文件中的所有ip,正则表达式
三面(8.3号更新):
数据库部门真的很严格,问题都挺难的。
1 讲一下项目
2 平时了解什么操作系统
Linux,说一下Linux排查问题常用的命令,ps,top,netstat,free,du等等
3 Linux的内存管理算法,问了一下是不是页面置换算法,他说是。
说了lru和fifo,问我lru有什么缺点,没答上来。
4 Linux的文件系统了解么,讲了一下inode节点,文件和目录的原理。他问我了不了解具体的文件系统ext2,ext3,答不会。。
5 进程通信方式有哪些,问我分别怎么使用,管道有哪些类型,各有什么优缺点。
6 问我服务器硬件了解么。。一脸懵逼,问了我懂不懂Raid,瞎扯了几句就说不懂了。
7 shell了解么,没怎么写过。
8 听说你会Java,说一下JVM内存模型把,有哪些区,分别干什么的
9 说一下gc算法,分代回收说下。
10 设计模式了解么,说了7种,问我分别怎么用,实际应用过吗,稍微扯了一下。
11 MySQL的引擎讲一下,有什么区别,使用场景呢。
12 查询最新的10条数据,想了好一会,order by id desc limit 10
13 MySQL的union all和union有什么区别,我瞎掰了一下,应该不对。
14 MySQL有哪几种join方式,底层原理是什么,答不会,只知道表现形式。
15 Redis了解哪些啊,数据结构和基本原理把。
问我Redis怎么做集群,答了主从哨兵和cluster。
Redis的持久化怎么做,aof和rdb,有什么区别,有什么优缺点。
16 Redis使用哨兵部署会有什么问题,我说需要扩容的话还是得集群部署。
17 分布式系统了解么,说一下Hadoop了解啥。
我说基本组件稍微了解过,简单搭过环境。
18 MapReduce的combiner干啥的,我说是合并结果的,问我啥时候会用到,答不知道。
19 Hadoop分发任务时,有个job失败了,hadoop会怎么处理,我答不知道,猜是会继续执行。。
20 hadoop分发任务,如果有一个节点特别慢拉慢了整体速度怎么办。我猜测是通过yarn分配相同的资源给每个任务,可以避免这种情况,他好像不太满意。
21 hadoop答得很烂。问了我两个10g文件比较,2g内存,重复率很高,筛选出不同的内容。我说拆成十份hash,每份两两比较hash的结果集,貌似他说OK。
22 排序算法了解哪些,巴拉巴拉。
23 用队列计算一个树的高度,我说用层次遍历记录节点高度。
24 一个黑名单集合,数据量很大,快速查询一个值是否在集合里,怎么设计,我说布隆过滤器。
25 还是上一题,说这个黑名单可能需要动态地增删改,如何设计才能避免访问响应太慢。我没思路,瞎扯了一下加硬件,用内存存,都被驳回了。然后他说算了。
26 上一题的黑名单做成分布式,怎么做。说了分片的方案,根据地址的hash值确定分片所在节点。
27 分布式数据库了解么,我不太明白他问的是啥,说不了解,感觉应该是问数据库的分布式方案。
28 有什么想问的,据他所说还有2-3轮面试,惊了。
全程50分钟,可以说是迄今为止难度最大的一个?
蚂蚁金服中间件
蚂蚁财富
研发工程师
之前面了阿里中间件的提前批,不过没走流程。同期还面了蚂蚁中间件的两轮面试,被告知不走流程就不能面了,所以也没面完。
后来走了蚂蚁金服财富事业群这边的流程。前几天刚刚面完HR。
正好今天分享一下面经,大家可以多交流交流哈。
1:蚂蚁中间件(面了三次,两次一面,一次二面)
2:蚂蚁财富(1+2+交叉+HR)
1一面
蚂蚁金服中间件一号机
一面:
自我介绍
1Java中的多线程了解么,线程池的增长策略和拒绝策略了解么,说一下。
2讲一下线程增加的过程和拒绝策略的执行。
3讲了一下fixthreadpool的增长策略,然后几种拒绝策略。
4高并发情况下,如何使用线程池,用哪个,问了一下线程结束要多久,是否在下一个线程结束前完成(我想的是cachethreadpool,其实思路错了)。
5表示并发量比较大,所以我说可以考虑并发量是否大于队列长度加上最大线程数量和,如果不超过的话可以是用fixthreadpool。
6并发juc了解么,有哪些线程安全的list。说了个copyonwritelist,想了半天说不出第二个了。尴尬,那就vector把,不是juc里的。
貌似并发包里确实没有其他list啊。
还问了concurrenthashmap1.8的改动。
7HTTP协议了解么,和tcp有什么区别。
8http1.0和2.0的区别。
答了TCP连接复用,加入ssl,以及压缩请求头。
其中哪个更新比较有意义,为什么。我说的是压缩请求头,这样可以优化HTTP服务的性能。
9Java的网络编程,比如NIO和Socket了解么。
说下BIO和NIO的区别把。
我说了BIO的阻塞用法,以及NIO的IO多路复用用法,说了selector,seletedkey,channel等类的使用流程,以及单线程处理连接,多线程处理IO请求的好处。
10说一下NIO的类库或框架
讲了netty,写过服务端和客户端的demo,没有在生产中实践。
1 channelhandler负责请求就绪时的io响应。
2 bytebuf支持零拷贝,通过逻辑buff合并实际buff。
3 eventloop线程组负责实现线程池,任务队列里就是io请求任务,类似线程池调度执行。
4 acceptor接收线程负责接收tcp请求,并且注册任务到队列里。
11倒排索引了解么,我说不了解。
其实就是搜索引擎的基础索引,根据关键字到文档的映射关系建立索引,中文关键字可以使用中文分词,查询时通过关键字来定位索引,并且进行排序后得到文档结果集。
然后面试官说讲一下数据库把,说下sql优化的方式
我说的是MySQL,先讲了一下sql使用索引的优化,然后基于索引说了几条优化方案。
12索引什么时候会失效变成全表扫描
说了联合索引的前缀匹配,跳跃索引,聚合函数,判空和<>这些情况。
13分布式的paxos和raft算法了解么
了解过,但是讲不清楚。
paxos:多个proposer发请提议(每个提议有id+value),acceptor接受最新id的提议并把之前保留的提议返回。当超过半数的accetor返回某个提议时,此时要求value修改为propeser历史上最大值,propeser认为可以接受该提议,于是广播给每个acceptor,acceptor发现该提议和自己保存的一致,于是接受该提议并且learner同步该提议。
raft:raft要求每个节点有一个选主的时间间隔,每过一个时间间隔向master发送心跳包,当心跳失败,该节点重新发起选主,当过半节点响应时则该节点当选主机,广播状态,然后以后继续下一轮选主。
14中间件知道哪些,阿里的dubbo,rocketmq的事务消息,问了TCC回答说这个之前没看明白。
说了mycat实现分表分库,消息队列kafka和rabbitmq等。
15平时看什么书,怎么学习的。还跟我说他们部门3个华科的,校友多多。
16Spring和Springmvc讲一下。讲了Spring的ioc和aop,Springmvc的基本架构,请求流程。
蚂蚁金服中间件二号机
一面:
1 自我介绍
2 讲一下ArrayList和linkedlist的区别,ArrayList的扩容方式,扩容时机。
3 hashmap的实现。
4 NIO了解么,讲一下和BIO的区别,AIO呢。阻塞,非阻塞,异步。具体。
5 你说了解分布式服务,那么你怎么理解分布式服务。
6 你说了解Tomcat的基本原理,了解的是哪一部分,基本架构,connector和container
7 你在项目中怎么用到并发的
8 docker和虚拟机讲一下。
9 有啥想问的
蚂蚁金服中间件二面
1 项目
2 说一下Spring源码把,它的架构,流程。
3 Spring的bean如果要在实例化过程中修改其某一个成员变量,应该怎么做呢。不通过构造方法,并且AOP也并不能实现。
4 Tomcat的类加载器了解么,回答不了解只了解Java的类加载器。
5 自定义类加载器怎么实现,其中哪个方法走双亲委派模型,哪个不走,不走的话怎么加载类(实现findclass方法,一般用defineclass加载外部类),如何才能不走双亲委派。(重写loadclass方法)
6 布隆过滤器了解么,讲了ip地址过滤的布隆过滤器实现。
7 听说你项目用过docker,讲一下docker的实现原理,说了虚拟机一般要对内核进行虚拟化,docker则用cgroup和namespace分别进行硬件和命名空间的隔离。
8 项目中遇到的最大挑战。
9 项目中学到最多的东西
10 有什么想问
蚂蚁财富事业部
一面:
1 亿级ip地址过滤
2 排序算法和适用场景
3 数据库的事务有什么用
4 数据库的悲观锁和乐观锁
5 数据的索引有什么用,怎么实现
6 联合索引的匹配原则
7 数据库万级变成亿级,怎么处理。分库分表,分片规则hash和取余数。使用mycat中间件实现。
8 redis这种nosql和mysql有什么区别,讲了一遍redis
9 Spring了解不,用到了哪些设计模式,说了四个,单例,工厂,代理,观察者,模板其实也算。
10 web请求的过程,讲了浏览器到http服务器的过程,再讲了mvc的请求处理过程。
11 你的职业规划
12 没了。
二面:
没有二面,好像说是跳过了一轮,直接技术主管面。
三面:
1 项目中的多线程,为什么用chm,还有什么可以避免并发问题。
2 平时在看什么,写什么博客,我说分布式,关注什么内容,大后端,Hadoop生态。
3 dubbo了解么
4 dubbo的基本架构,几个组件说一下
5 服务生产者和消费者怎么进行rpc调用
6 怎么进行服务注册发现 zk实现具体说说
7 dubbo的负载均衡怎么做,讲一下具体代码实现。
8 dubbo的服务容错怎么做,怎么知道服务器宕机了 zk的心跳机制维持服务器连接
9 好了我要问的差不多啦。
交叉面:
隔壁部门的技术主管,问了一道算法题。。就没问别的了。。我也是很醉。。。
题目是链表的排序,扯了4、5种方案,转成数组,直接排序,拆分再排序,顺序连接等等。。然后我表示不能再优化了。他就说没别的问题了。。。有点吃惊。
HR面:
1 兴趣爱好
2 三年到五年的职业规划
3 意向公司和城市
4 实习经历和收获
5 实习中最大的困难
6 为什么换公司,为什么拒绝菜鸟实习offer
7 你的缺点和优点
8 你觉得你比其他人优秀的地方说三个
9 为什么想来我们部门
10 巴拉巴拉
软件研发工程师
基础研发工程师
百度智能云
百度核心搜索部
百度今年的提前批有点奇怪,好像都不走流程,牛客上好几个百度内推的帖子,我投了几个,基本上都是百度智能云的,当然也有其他部门。
下面是我的面经,包括三个部门的面试,每个部门侧重点不太一样。
1一面
百度智能云 账号和消息部门
一面:
1 项目
2 讲一下AOP吧
3 动态代理和静态代理有什么区别
4 TCP和IP报文是否会分片,分别在什么情况下会分片。
TCP分包之后是否还会进行ip分片
5 做个题
无限长轨道。两辆车同方向开,车会滴水,怎么让他们相遇。这题简直像脑筋急转弯。
6 写一个斐波那契数列
递归式,要求改进
dp方式,要求优化空间
用三个变量代替数组进行dp,要求改进
我说数学公式,OK。
7 讲一下Linux的内存结构,我说只会JVM的,他让我说一下。
两者的内存如何映射,是什么关系,不会。
8 没了
二面:
1 项目讲一下,10多分钟去了。
2 排序算法,复杂度,比较。快排的空间复杂度是logn
3 讲一下OSI七层模型,我说了5层模型,然后他让我再补充一下,问了每层的作用,问了wifi属于哪一层。
4 线程间的同步用什么方式,说了object方法。
问我使用hashmap时重写哪两个方法,为什么要重写,巴拉巴拉,什么场景下重写。
5 平时用过什么数据结构,list用哪些有啥区别。
6 Spring中的ioc和aop。ioc的注解有哪些。
autowired和resource有什么区别,作用域有哪些。
autowired如何配置两个类中的一个吗
7 写一个单例模式,有点忘却了,巴拉巴拉搞出一个双重检测的,中间改了多次。
8 Java会有内存泄漏吗,三个区分别什么情况下会产生内存泄漏
三面:
1 主要了解哪些技术
2 分布式系统怎么设计,说了CAP和BASE,最终一致性
3 问我最终一致性是什么,举一下强一致性和最终一致性的例子。分布式事务和消息队列
4 分布式事务的消息id怎么确认顺序,我说使用zk
5 zk的性能瓶颈怎么克服,我说使用redis和redis集群。
6 跨机房的网络延迟怎么解决,我说不懂,他让我猜一侠华北到华南的延迟时间大概是多久,我说大概十秒内。
7 网络这块熟么,说一下socket编程吧。说了一下java的socket
8 网络编程的NIO和BIO区别,阻塞指的是什么意思呢。
9 socket客户端和服务端的连接过程和通信过程说一下。
10 操作系统熟么,一般版,shell和命令熟么,不熟。
11 算法熟么,答不熟。
12 系统怎么设计,设计模式怎么用
13 系统优化怎么做,cpu,IO,内存分别怎么排查问题和调优
14 家乡,女朋友,巴拉巴拉
百度核心搜索
一面:
1 自我介绍
2 docker和k8s了解多少
3 研究生学了哪些课程
4 操作系统了解么,讲一下进程和线程
5 死锁和处理方式
6 内存,虚拟内存和页面置换
7 网络了解么,讲一下三次握手和四次挥手
8 数据库了解多少,mysql索引,事务,锁讲了一些
9 Redis呢,讲了一下数据结构,持久化方式,使用场景
10 分布式了解哪些,负载均衡有哪些方式,说了dns,nginx,lvs和硬件,一致性问题怎么解决,说了2pc,3pc,raft和paxos,zab
10 mysql大表数据查询,怎么优化,分表,分库。
11单链表判环
使用快慢指针解决
12 完全二叉树判断:
二面:
1 项目
2 docker和kubenetes的原理和了解程度
3 docker的cgroup了解么
4 kubenetes的架构,扩容是怎么完成的。
5 Java的四种引用
6 Java的线程通信方式
7 Linux的进程通信方式
8 Java的线程池
9 算法
1 - N + 1这些数中取出N个,问剩下的是哪个。。
我说加起来相减,面试官说取巧了,不能这样。
我说比较数组下标,他还是说取巧。
于是我让他提示我一下,他说了排序再找。。额
然后想了两个空间换时间的办法,一个是用hashmap遍历两个数组。一个是合并数组后统计数字出现次数,也是hashmap
给定一串数字,找出所有可能的IP地址组合,比如192168111,组合是192.168.1.11,192.168.11.1。
应该LeetCode的题。之前自己没写完整,现场憋出来了。
这个代码应该没错。面试官看了二十分钟才说ok。
然后我们就这样沉默了20分钟,中间他就说了几句话。
三面:
1项目
2家庭情况
3学习生活的挑战
4学新技术的方式
5解释一下docker
6意向城市和岗位方向
百度智能云
基础研发工程师
一面
1 项目
2 队列和栈区别
3 两个栈实现队列,两个栈实现最小值栈
4 数据库的事务性质,如何实现这些性质
5 事务隔离级别有哪些,默认是什么级别。
6 已提交读有什么问题,用于什么场景
7 二叉树了解么,平衡二叉树呢,有什么场景会用到呢。
8 僵尸进程和孤儿进程是什么,分别有什么危害。
9 主从复制怎么实现。
10 Redis你用来做什么,为什么不用mq做异步队列
11 分布式文件系统了解么,HDFS讲一下原理
12 Java中一般用什么类型表示价格。
13 Java如何把byte类型转换成字符串
14 Java的string类型为什么是不可变的
15 有什么问题
今日头条上海
后台开发工程师
今日头条
后端研发工程师
找牛客大佬要了白金码,跳过死亡笔试,直接视频面,从3点开始,断断续续到晚上8点结束。
每个面试官给我的感觉都是怎么这么高冷啊。
1一面
一面:
1 写一个题,找一个无序数组的中位数
2 写了个快排,然后让我找到无序数组第k大的一个数,我说先排序再找,实际上可以用快排的partition函数。
3 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少,nlgn。
4 操作系统了解么,Linux和windows
5 说说Linux的磁盘管理,一脸懵逼
6 Linux有哪些进程通信方式,五大件
7 Linux的共享内存如何实现,大概说了一下。
8 共享内存实现的具体步骤,我说没用过
9 socket网络编程,说一下TCP的三次握手和四次挥手,中间网络不好,面试官都没听清楚,很尴尬
10 跳过网络,问了项目的一些东西
11 问我如何把docker讲的很清楚,我从物理机,虚拟机到容器具体实现稍微说了下。
12 问我cgroup在linux的具体实现,不会。
13 多线程用过哪些,chm和countdownlatch在实习用过
14 不得不吐槽下今天牛客的视频网速,不知道啥原因卡的一比,明明下载网速很正常啊,牛客视频每秒才20k。。疯狂掉线搞得很蛋疼。
二面:
1 自我介绍
2 Java的集合类哪些是线程安全
3 分别说说这些集合类,hashmap怎么实现的,扯了很多
4 MySQL索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
5 MySQL的事务隔离级别,分别解决什么问题。
6 Redis了解么,如果Redis有1亿个key,使用keys命令是否会影响线上服务,我说会,因为是单线程模型,可以部署多个节点。
7 问我知不知道有一条命令可以实现上面这个功能。不知道
8 Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么,不清楚。
9 Redis的list是怎么实现的,我说用ziplist+quicklist实现的,ziplist压缩空间,quicklist实现链表。
10 sortedset怎么实现的,使用dict+skiplist实现的,问我skiplist的数据结构,大概说了下是个实现简单的快速查询结构。
11 了解什么消息队列,rmq和kafka,没细问
12 写题时间到。第一题:写一个层序遍历。
13 第二题:写一个插入树节点到一颗排序树的插入方法,使用递归方式找到插入位置即可。
14 第三题:一个有向图用邻接矩阵表示,并且是有权图,现在问怎么判断图中有没有环。
15 我说直接dfs走到原点即为有环,刚开始写的时候我又问了一嘴是不是只要找到一个就行,面试官说是的,然后我说这样应该用bfs,有一次访问到原节点就是有环了。
16面试官问我不用递归能不能做这个题,其实我都还没开始写。然后我就说没有思路,他提示我拓扑图。我没明白拓扑图能带来什么好处。现在一想,好像当访问过程中找不到下一个节点时就说明有环。做一个访问标记应该就可以。
17 第四题:一个二叉树,找到二叉树中最长的一条路径。
我先用求树高的方式求出了根节点的左右子树高度,加起来便是。
18 然后面试官提示需要考虑某个子树深度特别大的情况,于是我用遍历的方式刷新最大值,用上面那个方法遍历完整个树即可。
19 面试官说复杂度比较高,但是由于时间问题就说结束了。
三面:
三面的面试官真的高冷啊,不苟言笑就算了,我问他问他他都不爱搭理的,搞得我内心慌得一比,感觉凉凉。
1 介绍一下项目
2 你谈到的并发技术,chm和countdownlatch怎么使用的
3 为什么要这么处理,使用线程池是不是也可以。我说也可以
4 操作系统的进程通信方式,僵尸进程和孤儿进程是什么,如何避免僵尸进程,我说让父进程显示通知,那父进程怎么知道子进程结束了,答不会。
5 计算机网络TCP和UDP有什么区别,为什么迅雷下载是基于UDP的,我说FTP是基于TCP,而迅雷是p2p不需要TCP那么可靠的传输保证。
6 他说不对,我说是不是因为要建立连接,开销比较大,他说不对
7 我说p2p的发送节点很多,所以不是那么需要各种传输保证,他说不对。
8 我说TCP会自动分包而TCP可以自己定义数据长度。。他还是说不对。
最后他说算了。我们问下一个吧。
9 操作系统的死锁必要条件,如何避免死锁。
10 写一个LRU的缓存,需要完成超时淘汰和LRU淘汰。
我说用lhm行不行,他说用linkedlist和hashmap可以。
于是我就写了put和get函数,进行了队头队尾操作。
他说get复杂度会不会太高,我瞎掰了半天没找到办法,他说那就这样吧,今天面试到这。
11 妈蛋,过期淘汰的处理我还没写呢,你就说结束了,感觉凉了啊,我说我要不要把剩下逻辑下完,他说不用,心凉了一大截~
12 然后HR小姐姐让我等结果了。溜了溜了
网易云音乐
Java开发工程师
再次回到老东家网易,久违的熟悉感。
面试持续了一个下午,从早上11点开始,到下午五点。
技术面试两轮,每轮四十多分钟,hr面试半个小时左右。
1一面
一面:
1 Java的集合类,hashmap如何处理冲突,除了使用红黑树和重写hashcode外还有哪些方法。
2 Java的多线程的使用方法,用过哪些。
3 Java的单例模式写一下,写了枚举类。
4 设计模式的几个原则说一下
5 spring的单例模式是怎么实现的。
6 类加载机制说一下,除了双亲委派,再说一下更具体的过程,什么时候进行静态变量的初始化。
7 mysql的索引讲一下,一级和二级索引的区别,什么时候可以不用查一级索引。答覆盖索引。
8 MySQL的事务性质怎么实现的,其中的持久性和隔离性说一下。隔离级别有哪些,解决哪些问题,默认级别是哪个,通过什么实现的。
9 redis了解哪些数据结构,使用keys的话会有什么问题,如何解决这个问题。
10 什么时候会发生死锁,有哪些必要条件,有哪些解决办法。
11 http请求过程会发生什么。
12 算法题,云音乐的歌单列表,调整顺序后需要保存到数据库,如何让每次保存的数据量最小,答使用数组标识该歌单是否有顺序调整,最后只更新有发生变化的那些数据。
二面:
1 说一下你擅长的东西,博客里写了什么东西。
2 Java的集合类,说一下hashmap都用到了啥。
3 Java的hashmap,头插法和尾插法有什么区别呢,会有什么问题。
4 1.7和1.8有哪些区别,chm呢。aqs呢
5 多线程了解哪些,说一下闭锁和屏障的用法和原理,写一个多人赛跑的线程实例,同时出发并且记录所用时间。
写了半天,然后巴拉巴拉
6 说一下springboot,说一下他有什么优点。并且他的注解是怎么使用的,有哪些注解,其实我忘了。
Java的反射讲一下,如何获取重载方法和私有吵架。
7 springmvc中的内容讲一下。disp。。说下,怎么使用的,做了哪些事情,如何进行初始化的。我说了它两个父类的作用,然后说了基本的转发过程。
http协议有哪些内容,cookie是哪个字段,在文本中如何确定哪个是字段哪个是值。巴拉巴拉,问的很详细。
8 web.xml怎么使用的?有哪些组件,怎么配置的。
9 servlet有哪些方法,init方法实在什么时候执行的。
10 有哪些自己觉得比较好的地方说一下
巴拉巴拉了网络编程,分布式,大数据,云计算。
11 Linux命令了解哪些说一下。
hr面:
hr小姐姐有点好看的。点赞。
1 自我介绍
2 实习经历
3 实习收获
4 评价一下云音乐,和qq音乐比较一下。
5 有什么爱好
6 城市选择,公司选择啥的
大概就是这些啦。
快手:Java研发工程师
面试共有三轮
技术面试两轮,一面40分钟,二面1个小时。
拼多多:业务平台研发工程师
在武汉进行的现场面试。共三面,耗时两个小时。
祝大家早日拿到满意的offer。
有问题想要和我交流的朋友也可以直接加我微信,扫码即可。今天我们建立一个微信群,方便大家交流学习,希望大家踊跃加入。
1一面
拼多多:业务平台研发工程师
在武汉进行的现场面试。共三面,耗时两个小时。
一:先面了hr面
1 项目情况
2 实习收获
3 老家和期望城市
4 对拼多多有什么了解
5 对拼多多的11 10 6怎么看,可以接受么
二:技术面
1 讲一下项目
2 做的主要是Java对吧,讲一下多线程把,用到哪些写一下
3 写了thread和runnable,然后写了线程池,她问我线程池由哪些组件组成,有哪些线程池,分别怎么使用,以及拒绝策略有哪些。
4 什么时候多线程会发生死锁,写一个例子吧,然后我写了一个两个线程,两个锁,分别持有一个,请求另一个的死锁实例。
5 集合类熟悉吧,写一个题目,一个字符串集合,找出pdd并且删除,我直接写了一个list然后for循环判断相等时删除,她说明显问题,我才发现list直接删位置会出错,于是我说改用数组,她说不太符合要求,所以应该使用iterator删除会好一点,修改会反映到集合类,并且不会出错。
6 然后说一下Redis吧,是单线程还是多线程,Redis的分布式怎么做,说了集群。
7 RPC了解么,我说了主要是协议栈+数据格式+序列化方式,然后需要有服务注册中心管理生产者和消费者,他问我注册中心宕机怎么办,我说可以做高可用,他说要问的不是这个,是想问我注册中心宕机时消费者是否能访问生产者。
我说消费者本地有缓存,可以访问缓存中的生产者。
8 实习最大的收获是什么。
9 TCP三次握手的过程,如果没有第三次握手有什么问题。
三面:技术面
1 自我介绍
2 讲一下项目的主要架构,你在里面做了什么
3 有什么比较复杂的业务逻辑讲一下。
4 最大的难点是什么,收获是什么。
5 MySQL的主从复制怎么做的,答日志,具体原理是什么,有什么优缺点。
6 Redis了解哪些内容,是单线程么,为什么是单线程呢,数据一定是存在物理内存中么,我不懂这话啥意思,就问了一下是不是指可能也在虚拟内存中。他说那讲一下虚拟内存的机制把,我就讲了分页,页表,换页这些东西。
7 项目用到了多线程,如果线程数很多会怎么样,我说会占内存,还有就是切换线程比较频繁,他问切换线程会发生什么,应该就是CPU切换上下文,具体就是寄存器和内存地址的刷新。
8 计算机如何访问一个文件的字节流呢,讲一下过程,说了Linux从inode节点找到磁盘地址,进行读取,他问我是直接读取么,我就说还会有读缓存,其实还应该说一下DMA的。
问了我知道swap分区么,我说不太清楚。
9 分布式了解哪些东西,消息队列了解么,用在什么场景,说了削峰,限流和异步。说了kafka,问我怎么保证数据不丢失,以及确保消息不会被重复消费。还问了消息送达确认是怎么做的。
10 cap了解么,分别指什么,base呢,强一致性和弱一致性有什么方法来做,2pc了解么,说一下大概过程。
11 负载均衡怎么做的呢,为什么这么做,了解过集群雪崩么。
12 这样一个题目,一个节点要和客户连接建立心跳检测,大概有百万数量的连接,并且会定期发送心跳包,要写一个update方法和check方法,update方法更新心跳状态,check删除超时节点,怎么做,刚开始做了个hash发现check要轮询太慢了,然后用计时器和开线程检测也不行,最后说了个LRU,他说OK的。
13 写一道题,二叉树的后序遍历,非递归算法。
用一个栈可以实现,先压自己,再压右节点,再压左节点。不过我卡在一半没写完,面试官说有思路就行了,今天就面到这,然后就溜了,发现已经没人了。
用一个栈可以实现,先压自己,再压右节点,再压左节点。不过我卡在一半没写完,面试官说有思路就行了,今天就面到这,然后就溜了,发现已经没人了。
快手面经
一面:
1 写一个选择排序或者插入排序
2 写一个生产者消费者
3 Java多线程了解么,什么时候一个int
类型的操作是不安全的,自加呢,赋值呢。
如果使用volatile修饰的话有什么作用。
4 MySQL和redis的区别是什么
5 为什么MySQL和Redis都要使用独立进程来部署,开放端口来提供服务,为什么不写在内核中。
6 有一个场景,多线程并发,为每个线程安排一个随机的睡眠时间,设想一种数据结构去唤醒睡眠时间结束的线程,应该用哪种结构,答应该用优先级队列,也就是小顶堆,顶部是剩余睡眠时间最短的那个线程。
7 好像就是这些了。
二面:
1 项目
2 多线程
3 一道算法题,一个二维矩阵进行逆置操作,也就是行变列列变行。刚开始我理解错了,直接用一维数组转储再重新填入新数组。
面试官说可以不用一维数组么
然后解答的过程中才发现我理解错了。改了一会才搞定。
4 扩展一下,二维数组存在500g的文件中,怎么做才能完成上面算法的操作,我就说先按行拆分,最后再拼接。
5 扩展两下,一行数据就会超出内存,应该怎么做,那就按列拆分,最后合并。
6 知道服务的横向扩展和纵向扩展么,刚开始理解错了,后来就说是提高单机性能,以及扩展成集群。
7 cap介绍一下吧,为什么只能3选2
8 线程与进程
9 tcp和udp的区别
10 get和post的区别
11 并发量大概多少,做过优化吗
HR面:
老生常谈了,就不贴了。
京东Java工程师
美团点评 后台开发工程师
1
京东提前批Java开发
电话面试
本来想等面完再发个面经,等了半个月了没等到。
一面:
0 自我介绍,讲一下项目中的多线程实现
1 Java的线程池的参数,拒绝策略,阻塞队列等实现和使用
2 fixethreadpool使用的是什么阻塞队列,如果使用arrayblockingqueue或者linkedblockingqueue会有什么问题。
3 ArrayList和linkedlist有什么区别,扩容呢
4 hashmap,hashtable,concurrenthashmap1.7和1.8选一个说一下。
5 jdk1.8针对hashmap使用红黑树优化目的是什么,红黑树的结构说一下。
红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
6 JVM了解么,说一下内存结构,堆区的分代,垃圾回收以及所用算法。
7 为什么要划分年轻代和老年代,方法区是否会垃圾回收,还问了gc时要扫描哪些位置,说了gc root,他问具体呢,虚拟机栈的局部变量,然后说其他忘了。
在Java虚拟机中判断一个对象是否可以被回收,有一种做法叫可达性分析算法,也就是从GC Root到各个对象,如果GC Root到某个对象还有可达的引用链,那么这个对象就还不能被回收,否则就等着被收割吧。
这里既然提到了GC Root,那么哪类对象可以作为GC Root呢,这是一个在面试中经常被问到的问题。
《深入理解Java虚拟机》一书中是这么说的,一下几种对象可以作为GC Root:
虚拟机栈中的引用对象
方法区中类静态属性引用的对象
方法区中常量引用对象
本地方法栈中JNI引用对象
8 MySQL了解么,说一下建立索引要考量的点,说了索引筛选率,过滤使用的字段,以及explain查看是否使用了索引等。
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、频繁进行数据操作的表,不要建立太多的索引;
9 MySQL的隔离级别有哪些,默认级别是什么,他说是可重复读。
10 为什么select方法默认可以不加锁呢,明明可能会有并发冲突,我说根据隔离级别判断是否加锁,他说可重复读级别下select是不加锁的,为什么。
我说应该是用了乐观锁,也就是MVCC多版本并发控制,适用于读多写少,所以不加锁。
11 Redis提供有哪些数据类型
二面:
1 讲一下两个项目,分别做了什么,觉得跟自己做的项目有什么不同,如何看待这种不同,应该如何改进。
2 平时怎么学习,你的博客一般写了什么,觉得和高质量博客的差距在哪里。
我说我原创的都是比较基础的,进阶一点的博客主要是整理别人的文章。
3 Java虚拟机了解么,讲一下内存分区和gc,如何排查堆内存的问题,说使用jmap转储dump文件分析或者使用jstat等工具检测gc。
4 Java的线程池了解么,看过它的源代码么,怎么修改源码可以实现线程状态的监控呢。
visualvm工具
5 web框架了解什么,讲讲SpringMVC的启动过程,讲了mvc上下文以及dispatcher初始化过程和请求流程。
6 设计模式了解么,单例,工厂,分别出现在什么场景。
Spring,servlet,Spring的工厂方法
7 MySQL的select1和select *有什么区别,为什么加索引访问比不加索引要快。
8 负载均衡的几种算法,缓存的几种淘汰策略。
9 计算机网络了解么,http的header有哪些字段,是否包含ip地址。
10 有什么想问,能先来实习么,不能。
我说了不能先实习,然后就没有然后了,emmm,等了2周没有动静,估计凉凉。
美团一面
后台开发工程师
电话面试
1 实习经历
2 object类有哪些方法,hashcode,equals,clone,notify,wait。问我hashcode用在哪,说了hashmap
3 hashmap的结构,1.7和1.8有哪些区别,除了红黑树优化以外还有哪些改进,说了扩容时头插法改尾插法。
4 开始问我头插法和尾插法的区别,头插法在多线程时会出现什么问题,我说的是扩容时的死链,后来引导我说了并发插入的数据丢失问题。
5 concurrenthashmap的实现原理,1.7和1.8有什么区别,分段锁,synchronized和cas操作。
6 cas操作是怎么实现的,为什么是原子性的。wait和notify方法用在哪里,wait和sleep的区别,notify后面的代码会不会运行。
7 synchronized和lock的区别在哪里,使用方式上有什么区别。lock的trylock方法做了什么,我说了cas操作和加入阻塞队列,以及公平锁和非公平锁的区别。
8 你的项目用到countdownlatch,为什么要用,有什么问题,如何监控这个问题。
9 线程池用过哪些,线程池有哪些参数,然后问我几个常用线程池的用法和实际场景问题。
10 cas操作是哪个包里的,volatile变量用过么,有什么作用,原理是什么。i++是不是原子操作,为什么。
11 ArrayList和linkedlist有什么区别,如何遍历,使用for循环遍历linkedlist为什么不行,linkedlist能使用索引访问么,使用迭代器呢。
这里我打错了。linkedlist也可以使用for循环遍历。因为jdk提供了api。
12 JVM内存模型介绍一下,堆区怎么分代,分代垃圾回收算法说一下,老年代使用标记清除有什么问题。
13 说几个垃圾回收器,cms回收器有哪几个过程,停顿几次,会不会产生内存碎片。老年代产生内存碎片会有什么问题。问我有没有做过JVM优化。
14 jvm场景问题, 标记清除多次后老年代产生内存碎片,引起full gc,接下来可能发生什么问题。我说分配大对象可能引起full gc。
15 哪些情况会触发full gc,full gc是否包括young gc和major gc,如果只包括这两个,为什么要特地做full gc,我回答的是full gc还会回收方法区和堆外内存。
16 Java中有哪些引用,分别有什么用。
17 Spring的ioc和aop说一下。
aop记录日志,什么方法需要记录日志呢,增删改查都要么,我说前三个要把。他说那么如果有多级调用的rpc查找操作是不是也要记录日志,我说那是的。
18 分布式用过哪些技术,我说自己跑过一些demo,问我zookeeper有什么用,然后问我dubbo里的zookeeper是做什么的,我说服务注册中心。
19 服务注册中心实现什么功能,消费者的本地缓存如果失效了怎么办,我刚开始说多次失败重新拉取,他说这样不行吧,我就说让生产者和注册中心维持心跳,失效时删除该节点并且更新消费者缓存即可。
20 MySQL用的挺多,问你一下,innodb的b+树索引,主键索引,聚簇索引有什么区别。
21 MySQL里有哪些锁,行锁表锁,乐观锁呢,我说了版本号和MVVC,开始问我MVVC。
22 事务的实际场景问题,两个事务,一个查一个新增,问能否查到新增的,我问他隔离级别,他说RR。MySQL的RR避免幻读,所以读不到新增数据。
23 MySQL的死锁怎么产生的,举了两个例子。
24 三个事务,两个加读锁,另一事务尝试删除,应该是不行的。
25 两个事务,一个写提交,另一个能不能读到,可以读到。
26 大概就是这些了。
美团貌似凉凉,这次确实答得不是很好。
斗鱼武汉
Java开发工程师(大数据方向)
1
一周前斗鱼约了面试,公司就在学校旁边,于是过去面试,2点到5点半。
现场面试体验还不错,办公室挺拥挤的,面试比想象中要难。
先做了一套笔试题,然后三轮面试。
笔试:
1 基本数据类型和引用数据类型的区别
2 静态成员变量和非静态成员变量的区别
3 Java的接口,抽象类,和普通类的区别。
4 字节流和字符流有什么区别,分别用哪个接口
5 忘了
6 两个线程A,B。A要等待B运行完(或者A超时10秒)再运行
7 两个表A,B。A表有姓名,课程,得分,B表有课程,比重。
要求班里课程得分*比重总和在60-70,71-80,81-90,90-100的人所占全班的比例。
8 JS题
9 一个字符串,前半段反转,后半段也反转,然后输出。
10 一个无序数组,变成有序数组,并且删除重复数字
一面:
1 项目
2 为什么用chm
3 hashmap的线程安全问题
4 线程池结构,阻塞队列看过源码吗,array阻塞队列的原理,怎么实现的,这边的put答错了,事实上不用移动数组。
5 jmm内存模型了解过吗,说了工作内存和主内存,顺便说了volatile,不能保证线程安全。
6 spring说一下,老样子ioc和aop,问我bean为什么是单例的,是否线程安全,怎么让接口指定实现类。bean容器的实现原理,解析过程,问我这块是在哪里看的,我说博客。
7 hibenate的作用,原理,有什么问题。
8 mysql的SQL语句优化怎么做,有哪些情况用不到索引。怎么优化
9 redis的缓存穿透怎么解决,如果是无效请求怎么办。
10 消息队列了解么,主要有什么作用。
11 zk了解么。
12 写一个双重检查的double check,忘记写构造函数了,尴尬。
二面:
1 项目
2 MySQL建表实现目录树的结构,怎么做。
3 怎么查这个目录下的一级节点呢
4 把目录节点写成一个类,让我写一个遍历所有子节点的方法。
5 写一个hashmap的get和put方法,稍微写了一点点基本结构,我说后续太复杂了,他就没问了。
6 nginx做负载均衡,它管理的Tomcat服务器怎么管理session实现共享,我说使用数据库和缓存。
7 nginx单点故障怎么办,做集群,那么集群怎么让客户端知道要访问哪一个IP。我说让本地dns服务器来选择。
8 集合类的几个问题
9 docker和k8s说一下。
10 直播技术了解么。
三面:
1 平时怎么学习的
2 哪些书你印象深刻
3 实习的收获哪家公司更大一点
4 遇到困难怎么克服
5 新的技术怎么去学习
6 Java web的发展了解么,这些框架是怎么演变的,springboot呢,其中的区别呢。spring容器的原理,mvc容器的初始化,以及内部数据结构是什么样的。
7 docker和k8s怎么学习的,有什么好处。
8 平时还学了哪些技术,对未来发展怎么规划
9 有什么问题
有赞
Java开发工程师
有赞:问得非常细节
一面:
1 Java并发技术了解吗,说了线程,juc的线程池,并发容器,阻塞队列,原子数据类型等。
2 问我原子数据类型怎么实现,cas
3 线程池有哪些参数,阻塞队列用的是普通队列么,答不是,是blockingqueue
4 concurrenthashmap和hashmap的区别,chm的实现原理,你在什么场景下用到chm,为什么,我说了多线程查询数据,put可能覆盖,或者hashmap的扩容可能产生死链
5 还用过哪些数据结构,list,set,map,stack和queue。
6 Spring了解么,问我了解五大组件不,不了解,说了ioc和aop。然后问我分别怎么实现的,使用xml和注解配置实现类有什么区别,怎么解析它们的数据。
7 Spring如何动态地加载一个bean到bean容器中,不是通过配置文件配置的,不会。
8 Spring aop的实现原理,如何加一层动态代理的,我说是创建bean过程中直接生成代理类的实例
9 Spring的spring quartz知道么,必须不知道
10 spring源码看过么,mvc了解么,说了一下mvc的原理和请求过程
11 hibernate和mybatis的源码看过么,没有
12 如何实现不同环境中配置文件的自动切换,使用脚本或者命令,他说使用hibernate的注解可以实现切换。
13 nio和io的区别,nio是阻塞轮询的,如何改用异步通知的机制,我说使用aio注册异步回调函数。
14 nio的包装框架了解么,我说netty,看得深入么,我说没有深入看。
15 分布式服务dubbo了解么,有哪些功能,如何自己实现一个dubbo,我分别从rpc和微服务的角度说了一下。问我有哪些序列化方式。
16 mysql问了几个简单问题。
17 对我们公司了解么,只是稍微了解。
二面:
1 项目
2 Java的内存模型,堆和栈分别存什么
3 Java的深拷贝和浅拷贝
4 Spring的aop怎么实现的,动态代理的原理是什么
5 Spring MVC的请求过程。
6 跳出Spring,说一下浏览器的请求过程
7 网络编程这一块,你了解哪些,说了socket和nio
8 nio的底层实现一般是epoll,讲一下epoll吧。
9 mysql的索引说一下,二级索引是怎么进行查找的
10 MySQL的两个引擎区别
11 hibernate的orm是怎么实现的,我说的是xml和注解的解析,以及jdbc封装
12 hibernate的事务如何实现,我说是jdbc的事务实现。
13 分布式数据库查询一个表的前十条数据,对id进行hash来索引节点,如何进行查询。我说那就对id hash,找到节点分别查询。
14 分布式系统的概念,如果有数据一致性怎么办,答cap和base
15 了解哪些分布式技术,说了缓存,负载均衡,消息队列,Hadoop
16 负载均衡的衡量指标,不知道
17 消息队列了解哪个,rabbitmq和kafka,为什么kafka比rm快,答了零拷贝,具体实现原理答错了,应该是避免复制数据到应用缓冲,直接使用sendfile传输数据。
18 hadoop了解哪些,hdfs的文件读写机制说一下。
19 没什么问题了
20 需要来现场面试,其实我不想去现场面,然后隔天给我发了拒信
三面:
1 自我介绍和项目
2 Java的内存分区
3 Java对象的回收方式,回收算法。
4 CMS和G1了解么,CMS解决什么问题,说一下回收的过程。
5 CMS回收停顿了几次,为什么要停顿两次。
6 Java栈什么时候会发生内存溢出,Java堆呢,说一种场景,我说集合类持有对象。
7 那集合类如何解决这个问题呢,我说用软引用和弱引用,那你讲一下这两个引用的区别吧。
8 Java里的锁了解哪些,说了Lock和synchronized
9 它们的使用方式和实现原理有什么区别呢,使用的话,synchronize用于方法和代码块,可以锁对象和类以及方法,Lock一般锁一块代码。并且Lock可以搭配condition使用。
实现原理的话,synchronized使用底层的mutex锁,需要系统调用,而Lock则使用AQS实现。
10 synchronized锁升级的过程,说了偏向锁到轻量级锁再到重量级锁,然后问我它们分别是怎么实现的,解决的是哪些问题,什么时候会发生锁升级。
11Tomcat了解么。说一下类加载器结构吧,我说不知道,说了些别的。
12 问我会什么框架,说了Spring,问我Spring中如何让A和B两个bean按顺序加载,我说依赖关系,他问怎么实现,然后说要用dependon注解,我说不了解。
13 beanfactory和applicationcontext是什么关系,使用有什么区别。
14 MySQL的sql优化了解么,答了解索引优化。
15 他问我如何做一条sql的优化,说了慢日志和explain。
16 MySQL集群的主从复制怎么做的,具体有哪些线程做哪些事情,使用了哪些日志。
17 CAP定理说一下,为什么三者只能选二,为什么分区容忍性必须保证。
18 平时了解哪些技术是牺牲了一致性来保证可用性的,我说消息队列,他问我MySQL是不是,我说MySQL主从复制应该是。
19 工作中CAP的A和P是怎么选择的,我说选P吧,他的意思是选A。
20 算法题:
一:10亿个数去重,我说用hash分片做,他说可能不均匀,然后我说了bitmap,他说那数字量更多怎么办,我说那就两个bitmap把。他说下一题吧。
二:十亿个数找前10个最大的,小顶堆过一遍即可。他说如果要提高效率呢,我说可以分片做堆排序再进行归并即可。他说OK。
美图面经:
一面:
1 Java的hashmap
2 Java的多线程技术,线程池
3 Java的jvm讲一下,内存模型,垃圾回收
4 mysql的索引怎么建,优化
5 Linux操作系统了解哪些
6 网络和操作系统问了些基础
7 Redis使用哪些场景
8 数据结构了解哪些,排序的复杂度
9 讲一下项目里的难点,说一下docker。
10 其他忘记了
二面:
1 项目
2 docker和k8s知道哪些,说一下
3 OpenStack用到了哪些组件,说下
4 闲聊其他
5 意向城市
迅雷:
一面:
1 我们是c++和golang,这方面了解么
2 jvm的内存模型和垃圾回收
3 Java并发技术讲一下
4 MySQL数据库相关问题,主从,读写分离,分布式方案
5 Redis的哨兵讲一下
6 负载均衡一般是怎么做的
7 数据结构问了些问题
8 操作系统,网络问了几道题
9 有兴趣转语言么
猿辅导:
一面:
1 讲一下项目
2 项目中的chm和countdownlatch是怎么用的。有没有用到线程池
3 项目中的tomcat部署怎么做的,讲一下基本原理
4 你用到了git,那常用的命令有哪些,pull和fetch merge有什么区别。
5 算法题,A数组和B数组,A数组中数字根据B数组的数字顺序进行排序。
华为优招
cloudbu
研发工程师
一面:
1 项目
2 重构的原因和方式
3 docker和k8s懂哪些说一下
4 jvm了解么
5 jvm加载类是在什么时候
6 如果有重复类加载会发生什么
7 MySQL问了一些
8 闲聊了几句
二面:
1 项目
2 问家庭
3 之前去过台湾交流,问了几句
4 开始问我港台同胞的话题
5 项目有什么创新么,巴拉巴拉
6 论文竞赛有么。没有
7 面试没问题,等着签约吧。
然后我就溜了,还差点把面试官手机错拿了,尴尬
深信服
大数据研发工程师
一面:
1python怎么样
2c语言熟么,问了几个c语言的东西。不会。
3算法,跳台阶,斐波那契数列和dp方式都说了。
4tcp的四次挥手中的time—wait状态何时出现,有什么意义。
5操作系统的fork进程返回什么,应该是子进程号吧。
6没什么问题了。
二面:
1自我介绍
2为什么选这个岗位
3了解hadoop的哪些组件,全部说了一遍。
4讲一下hdfs的写入过程,发请求给namenode,返回一个地址进行写入,写入完告诉namenode,namenode完成副本备份。
5讲一下项目中的难点,多线程,并发工具,并发容器。
6讲一下如何设计一个高并发的秒杀系统
7python了解么,讲一下线程和协程
协程自带上下文,切换不需要刷新cpu上下文和寄存器。更适合并发。协程和线程适用场景的区别。
8没了
三面:
1 介绍
2 问了一下家庭情况和城市意向
3 大学有啥困难和挑战
4 研究生成绩,做了什么
5 评价自己
6 对我司有什么了解
7 加班怎么看
今天把其他一些面经总结了一下,分享给大家参考。包括从6月到7月份面的一些公司,包括海康威视,商汤科技,顺丰,有赞,亚马逊(实习生)。主要是Java岗位,而且是主要提前批的面经,甚至包括简历面。
亚马逊
实习生面试
7月初面的
一面
1聊项目20分钟,难点,重构特点。
2写题,跳台阶的递归和dp方式。
3如何查找一个数组中的局部最小值。
直接遍历复杂度是O(N),但不是最优。
使用二分查找优化,逼近局部最小值,logn,有一些问题,并且死循环了。
接着二面
1聊聊项目中的重构,数据表设计的方式。谈到了索引。
2使用索引和不使用索引的区别,何时使用索引的效率不如不使用。
因为索引需要logn次IO找叶节点,然后再一次IO去真正找数据。
而不用索引每次查找都要一次IO,所以数据行为N时,不使用索引要N次IO,使用索引,假设索引包括M行数据,则需要(logn + 1)* N/M次,当两者相等时效率相近,否则不同。
3聚簇索引,最左前缀匹配索引,B+树。
4算法题,版本号的大小比较
首先正则表达式过滤非法输入,并且拆成数组进行判断。
5算法题2 一个单词变成另一个单词,一次只能变一个字母,并且中间过程需要是一个合法的单词。并且每一个位置都可以修改多次。
使用dfs,没写完整。
海康威视
7月中旬
简历面
1 了解我们公司么
2 实习讲一下
3 Java讲一下集合类,线程安全的那种
4 分别如何实现的呢,copyonwritelist,讲一下,chm讲一下
5 Java内存分区,分代回收,是否有GC调优实践过。
6 clone方法的实现
7 讲一下你这个项目数据仓库的架构
8 了解Hadoop的哪些组件,自己跑过么
9 我就是探探你的底,还没开始正式面试呢!
10 没了
(* ̄︶ ̄)
商汤科技
7月下旬
要求转c,并且是实习岗位
1 愿意转c++吗。巴拉巴拉
2 Java的hashmap和hashtable的两个区别
3 Java中的锁怎么实现,synchronized关键字底层什么命令。
4 Java的cas操作说一下,底层怎么实现的。自旋锁了解么。
5 lock free用于什么场景,自旋锁和普通锁的使用场景
6 Java的countdownlatch的实现原理
7 Java的内存分配是虚拟内存还是物理内存
8 讲一下虚拟地址如何映射成物理地址,TLB了解么,分页机制说一下,页面大小是多少。
9 LRU缓存说一下
10 没了好像
顺丰科技
上周
一面
1 面试官喜欢抖腿
2 二分,二分找比一个数小的最大数
3 Java的线程使用方法
4 线程通信的方法
5 没了
二面
hr面,过了两周发了offer。总体来说很水。
有赞
一面:
1 Java并发技术了解吗,说了线程,juc的线程池,并发容器,阻塞队列,原子数据类型等。
2 问我原子数据类型怎么实现,cas
3 线程池有哪些参数,阻塞队列用的是普通队列么,答不是,是blockingqueue
4 concurrenthashmap和hashmap的区别,chm的实现原理,你在什么场景下用到chm,为什么,我说了多线程查询数据,put可能覆盖,或者hashmap的扩容可能产生死链
5 还用过哪些数据结构,list,set,map,stack和queue。
6 Spring了解么,问我了解五大组件不,不了解,说了ioc和aop。然后问我分别怎么实现的,使用xml和注解配置实现类有什么区别,怎么解析它们的数据。
7 Spring如何动态地加载一个bean到bean容器中,不是通过配置文件配置的,不会。
8 Spring aop的实现原理,如何加一层动态代理的,我说是创建bean过程中直接生成代理类的实例。
9 Spring的spring quartz知道么,必须不知道
10 spring源码看过么,mvc了解么,说了一下mvc的原理和请求过程
11 hibernate和mybatis的源码看过么,没有
12 如何实现不同环境中配置文件的自动切换,使用脚本或者命令,他说使用hibernate的注解可以实现切换。
13 nio和io的区别,nio是阻塞轮询的,如何改用异步通知的机制,我说使用aio注册异步回调函数。
14 nio的包装框架了解么,我说netty,看得深入么,我说没有深入看。
15 分布式服务dubbo了解么,有哪些功能,如何自己实现一个dubbo,我分别从rpc和微服务的角度说了一下。问我有哪些序列化方式。
16 mysql问了几个简单问题。
17 对我们公司了解么,只是稍微了解。
二面:
1 项目
2 Java的内存模型,堆和栈分别存什么
3 Java的深拷贝和浅拷贝
4 Spring的aop怎么实现的,动态代理的原理是什么 。
5 Spring MVC的请求过程。
6 跳出Spring,说一下浏览器的请求过程
7 网络编程这一块,你了解哪些,说了socket和nio 。
8 nio的底层实现一般是epoll,讲一下epoll吧。
9 mysql的索引说一下,二级索引是怎么进行查找的。
10 MySQL的两个引擎区别
11 hibernate的orm是怎么实现的,我说的是xml和注解的解析,以及jdbc封装
12 hibernate的事务如何实现,我说是jdbc的事务实现。
13 分布式数据库查询一个表的前十条数据,对id进行hash来索引节点,如何进行查询。我说那就对id hash,找到节点分别查询。
14 分布式系统的概念,如果有数据一致性怎么办,答cap和base
15 了解哪些分布式技术,说了缓存,负载均衡,消息队列,Hadoop
16 负载均衡的衡量指标,不知道
17 消息队列了解哪个,rabbitmq和kafka,为什么kafka比rm快,答了零拷贝,具体实现原理答错了,应该是避免复制数据到应用缓冲,直接使用sendfile传输数据。
18 hadoop了解哪些,hdfs的文件读写机制说一下。
19 没什么问题了
20 需要来现场面试,其实我不想去现场面,然后隔天给我发了拒信
携程面经是参考我同学的面试经验写出来的,因为面试官的问题可能不怎么更新,所以有缘的小伙伴看看,说不定就面到了。
携程面经
一面:
租车事业部
1 项目讲一下
2 多线程并发读取数据库可能出现的问题,如何解决线程数不够带来的问题,我说了几种方式,一个是使用缓存,一个是使用数据库连接池,他问我能不能借助类似IO处理的方式来优化,于是我说了使用AIO异步处理。他问我有没有用过,我就大概说了一下。
3 Java的数据结构了解哪些,说一下linkedlist和ArrayList的区别,如果使用它们来存储字符串,哪个更合适呢,如果要进行字符串的增删改查和拼接操作呢。
4 多个string常量相加会有什么问题,我说会产生多个string,其实是会使用stringbuilder进行append操作,每次相加都会新建一个stringbuilder对象,比较低效。
而使用stringbuilder对象直接append则只有一个stringbuilder对象。
当使用for循环时,string相加会优化成一个stringbuilder进行append操作。
5 map是否线程安全,为什么不是呢,如何实现线程安全呢,除了用chm和hashtable还有别的方式吗,我说自己实现一个map然后重写get和put方法,加synchronized即可。
6 说几种你了解的设计模式,让我选一种写一下,果断写了枚举类单例。
7 http的方法有哪些,get和post的区别,get的url长度是否有限制,url很长会有什么问题,我说了安全问题,长度限制,以及处理麻烦,好像不是他想要的答案。
8 MySQL的索引怎么加,什么时候用不到索引,怎么建立索引。
9 线上报错了怎么办,log日志怎么打的,使用应用日志会有什么缺点,如果是全链路调用的日志要怎么记录,我联想到elk,不过没讲清楚。
10 redis的数据结构有哪些,使用过哪些。
11 git你们是怎么用的,有几个分支,上线报错了怎么办,可以直接回滚么。
12 Java的volatile关键字是怎么实现的。
13 java为什么要有多级的类加载器
换了个部门又面了一次
酒旅事业部:
1 拿出我写的笔试题,问我当时怎么想的,我就说使用顺序查找,他说这个复杂不达标,只能到o(n),但是不能到O(lgn),让我优化。
我刚开始说在输入时去做判断,他说要优化代码,不能直接在输入做。
于是开始思考,然后他给了我提示,说可以用hashmap,引导我说出key为日期,value为订单号的做法,然后我又以此类推说了另一个日期的操作。
最后终于想出来可以把开始日期到结束日期之间的时间都放到key里,然后只要命中就是符合条件的选项,这样的复杂度就是O(1)了。因为输入时直接放入map,用的时候读取即可。
2 问我项目里的一些东西。
3 网络编程方面,select,poll,epoll的区别,优缺点,使用场景。
4 Java的多线程
5 MySQL的聚簇索引和非聚簇索引,用不到索引的情况,非聚簇索引能有多个么,索引能建很多么,会有什么问题。
6 MySQL和redis配合,写一下get和set方法对应的流程图,先更新缓存还是数据库,不命中数据怎么办,然后又问如果是多线程的进行这类操作呢,我刚开始说事务,他说不是的,我又说用redis代理来完成这一操作,保证redis的读写自动触发mysql的读写,保证其事务性,但是他说这样太依赖于Redis了,会出问题。然后他问我一般如何保证多线程并发安全,我说可以使用锁,他说如果是集群环境呢,我说那么用分布式锁吧。他问我一般怎么实现分布式锁,我就说了redis和zk。
7 让我设计一系列关于权限管理的表,问我需要哪些表,我说就用户表,权限表吧,然后引导我说还需要一张职位表,但是一个用户可能有多个权限,并且权限是可变的,可以是多对多的关系,于是他又引导我写出了用户-权限的连接表。同理还需要一张职位-权限的连接表,于是一共需要五张表,可以说面试官还是很善良的。
8 一道开放智力题
一家餐馆,有6张小桌,四张大桌,平均用餐1小时, 门口有10个等待的人,6个人是一起的,另外2个人和2个人是分开的。问我在这些条件下如何预估我们两个人要等多久才能吃到饭,我就巴拉巴拉说了一堆,最后引导我说出了小桌要等60/6 = 10,前面两组20分钟,一共是30分钟。
拼多多
之前拼多多学霸批挂了,所以又来面了一次正式批,不同于学霸批,这次面试官和hr都不再热情,而是给我一种很不耐烦的感觉,面试体验很差,所以草草面完了。
一面:
1 项目
2 笔试题,循环小数,说一下思路
3 说一下SpringMVC和Spring,hibernate
4 MySQL数据库和Redis说一下
5 分布式锁怎么使用,setnx和设置超时是两条指令,怎么保证原子性,可以使用lua脚本保证在事务中执行。
6 你们的Redis是怎么用的,如何做缓存更新。
7 jvm内存分区,线程池工作原理。
8 算法题,abbaabbaaa这样的字符串,怎么变成aaabbbaaa,这种形式的字符串
。其中a和b的个数都可以是0到n个。
刚开始说用dfs删除元素,后来说了用map和其他容器来存元素个数,都不对,
最后面试官说,可以用两个for循环设置i和j两个断点
二面
HR叽里呱啦,很不耐烦的样子
1 拿了几个offer了
2 对拼多多有什么了解
3 我们工作压力大你能接受么
4 薪酬你预计要多少
5 城市选择问题
6 女朋友,家里人的想法
7 职业规划。
三面
1 算法题,两个栈实现一个队列,并且要维护队列的最小值。
没答好,很烦。
2 然后问基础,Java容器,linkedhashmap,3 hashmap实现,treemap实现
3 Java多线程的状态,实现方式,通信方式
4 MySQL,redis巴拉巴拉
5 单点登陆实现,cookie不能跨域怎么办。能否直接绑定ip访问session
6 项目经历介绍
感觉面试官态度不太好,也就随便面完了。
这些面经是我几位同学最近在秋招面试过程中的一些面试经验,在这里我也收集整理了一下,然后分享给大家,主要包括珍爱网,老虎证券,三七互娱以及第四范式这些公司,有面这些公司的小伙伴可以参考一下。
珍爱网
武汉现场面试
一面:
1 Java线程池
2 容器,hashmap,concurrenthashmap
3 nio讲一下,底层实现是什么。
4 线程的状态转换,线程通信的方法
5 MySQL的优化,索引的建立。使用索引注意什么。
6 MySQL的大表优化,分库分表,会有什么问题,有什么解决办法
7 了解过中间件mycat么,他是怎么实现分库分表的。
8 redis的数据结构了解哪些,它怎么做分布式和集群呢,rediscluster的原理是什么,需要加机器时会发生什么,重新分片影响线上业务怎么办,如何避免产生这种影响,另外,Redis的代理实现codis了解么。
9 算法题。忘记了
二面:
1 项目 聊了20分钟
2 算法题,一千万个数,范围是1到一亿,排序。直接排序太慢,可以使用bitmap,长度为1亿,比数组省空间,然后把遇到的数变为1,最后顺序遍历即可。
3 二维矩阵,每次只能往右或往下走,从左上角走到右下角一共有多少种走法。
第四范式
视频面试
一面:
1 Java 的线程池
2 Java的volatile,内存分区
3 MySQL的索引巴拉巴拉
4 Redis的数据结构,怎么使用的,分布式锁怎么实现。
5 nio了解什么。
6 Spring了解哪些东西,ioc和aop
7 做题,写一个单例模式,再写一个双重检查的单例模式。
8 写一个算法,从1到n这n个数中找出所有和为k的组合,组合里可以有1到n个数。使用dfs回溯可以做。
牛客上的编辑器有bug,最后本地通过牛客却不通过,搞了很久。
老虎证券
武汉现场面,面试官年龄很小。
二面
1 项目
2 Java的多线程
3 MySQL基础
4 Redis基础
5 Spring ioc aop
6 nio,io流,注意什么。
7 设计模式
8 算法题一
给定一个字符串序列,里面只有左括号和右括号,并且序列合法,
现有规则:
()可以等价为1
(x)可以等价为2 * x
x y 可以等价为 x + y
问这个字符串最后能够组成一个数值,这个数值是几。
正确的做法是使用栈完全括号匹配,然后在右括号出现时完成对栈内数据的计算,然后压栈,最后再累加栈内数据即可。
9 算法题二
把一个字符串转化为int类型。
可正可负,所以只要判断一下符号,以及是否超过int范围,然后用一个for循环,从尾到头累加即可。
三七互娱
电话面试
一面:
1 项目
2 Java基础
3 集合类
4 多线程的状态变化
5 JVM的分区,垃圾回收,GC算法等等。
6 Java的锁,volatile,synchronized的区别。
7 负载均衡了解么,Tomcat的一些基础问题
8 Linux的常用命令,shell脚本写过么
9 平时玩什么游戏,喜欢做游戏开发么。
这个国庆,大家过的怎么样啊,是到处去玩,还是继续勤勤恳恳地学习呢。反正我没有出去玩啦,还在忙秋招的小伙伴也加把劲啦。之前发过很多秋招面经,一直没有做一个整理,今天就做一个整理吧。
阿里面经
阿里中间件研发面经
蚂蚁金服研发面经
岗位是研发工程师,直接找蚂蚁金服的大佬进行内推。
我参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头offer。
然后我也参加了蚂蚁金服中间件部门的面试,经历了三次面试,但是没有走流程,所以面试中止了。
最后我走的是蚂蚁金服财富事业群的流程,经历了四次面试,包括一次交叉面,最终拿到了蚂蚁金服的意向书,评级为A。
阿里的面试体验还是比较好的,至少不要求手写算法,但是非常注重Java基础,中间件部门还会特别安排Java基础笔试。
腾讯面经
腾讯研发面经
岗位是后台开发工程师,我没有选择意向事业群。
SNG的部门捞了我的简历,开始了面试,他们的技术栈主要是Java,所以比较有的聊。
一共经历了四次技术面试和一次HR面试,目前正在等待结果。
腾讯的面试一如既往地注重考查网络和操作系统,并且喜欢问Linux底层的一些知识,在这方面我还是有很多不足的。
百度面经
百度研发面经
百度研发面经整合版
岗位是研发工程师岗位,部门包括百度智能云的三个分部门以及大搜索部门。
百度的提前批面试不走流程,所以可以同时面试好多个部门,所以我参加百度面试的次数大概有12次左右,最终应该是拿了两个部门的offer。
百度的面试风格非常统一,每次面试基本都要到电脑上写算法,所以那段时间写算法写的头皮发麻。
网易面经
网易研发面经
面试部门是网易云音乐,岗位是Java开发工程师。
网易是唯一一家我去外地面试的公司,也是我最早去实习的老东家。
一共三轮面试,耗时一个下午。
网易的面试比我想象中的要难,面试官会问的问题都比较深,并且会让你写一些结合实践的代码。
头条面经
今日头条研发面经
岗位是后台研发工程师,地点选择了上海。
我参加的是字节跳动的内推面试,当时找了一个牛友要到了白金码,再次感谢这位头条大佬。
然后就开始了一下午的视频面试,一共三轮技术面试,每一轮都要写代码,问问题的风格有点像腾讯,也喜欢问一些底层知识,让我有点懵逼。
快手&拼多多面经
拼多多&快手研发面经
岗位是Java开发工程师,面试我的部门好像是基础架构部门。
快手是两轮视频面试加上一轮hr面试。然后没下文了,ben
拼多多的岗位是业务平台研发工程师。
当时在学校里参加了面试,过程是比较顺利的,问的问题也都比较有难度。
自我感觉良好,但是最后却收到了拒信,还是挺可惜的。
京东&美团面经
京东&美团研发面经
岗位是Java开发工程师
京东和美团都是电话面试,京东是提前批,聊了两次,问我能不能去实习,我说不能,然后就没有下文了。
美团也是提前批的电话面试,直接一面问了一个多小时,有几个问题没答好,直接挂了。后来正式批也没让我参加,可以说是非常真实了。
斗鱼面经
斗鱼研发面经
岗位是Java开发工程师(大数据方向)
刚好我人在武汉,于是斗鱼让我去想场面。
大概花了一下午的时间结束所有流程,首先做了一个笔试,还算简单,然后是三轮面试,前两轮主要是技术,最后一轮总监面。
总体来说面的还是不错的,但是没有回应,不太清楚啥原因。
有赞面经
有赞研发面经(Java细节)
岗位依然是Java开发工程师
当时是电话面试。
有赞的面试出人意料地很有挑战性,问的都是Java细节,死抠知识点,没有一定准备要回答好还真是很有难度的。
断断续续大概面了三面,后来我不想去现场面,就没了下文。
华为&深信服等面经
华为 深信服等研发面经
除了华为和深信服,里面还包含了美图,迅雷,猿辅导等小公司的面经。
华为和深信服是大数据研发岗。其他是后端工程师的岗位。
华为和深信服差不多,技术面试都比较水,所以放一起说。
另外三家小公司的面试难度也差不多,不过最后都没有下文了,感觉也是挺玄学的哈哈。
海康&商汤等面经
海康,商汤,顺丰等研发面经
岗位都是后台开发工程师。
海康只经历了简历面,现场面没有去。 商汤也只是稍微聊了一下,就没有后续了。
顺丰经过两面直接给offer。
其中还包括亚马逊的实习生面经。
另外最近面了亚马逊的秋招,感觉难度和实习的面试差不多。面经就不贴了,有兴趣的同学可以和我聊聊。
携程&拼多多面经
携程&拼多多研发面经
岗位是Java开发工程师。
携程是武汉现场面,很搞笑的是,携程的面试题是不换的,我同学第二天去面题目一模一样。
并且,携程总共只有一轮面试,真是勤俭节约。
之前拼多多提前批折戟,这次又来参加正式批了。
没想到这次面的更差了2333 有个算法题想半天了不会。于是面完三面草草收场。不得不吐槽一下,负责我们学校面试接待的hr,脾气真是有点大,搞得我都不敢问她问题了。
以上就是本次秋招我整理的面经合集啦,喜欢的朋友可以点赞收藏哈。
目前已经是9月中旬了,基本上是秋招最白热化的阶段,很多人还在秋招的战场上,也有一些人已经拿了一些offer全身而退,就如同当年的高考,考研,几家欢喜几家愁。
每年的秋招都有很多相同点,也有很多不同的地方,比如公司情况,就业形势,岗位竞争,乃至于薪资水平,每一点都是我们应届生需要关注,但却也无法改变的,我们唯一能做的,就是武装自己,然后去满足公司的岗位要求,然后拿到你自己想要的那个offer。
我想和大家分享几个在秋招过程中发现的真相。
▐ 一: 提前批和正式批的真相
在我之前的文章里谈论到了提前批和正式批的区别,我当时也讲了很多提前批的优势。在经历完秋招以后,感觉我的判断还是没错的。
1 虽然提前批的难度比较大,但是规模相对较小,参与者也较少,并且一般通过视频电话进行面试,不像线下面试一样劳民伤财。秋招的参与者人数大幅度上升,一不小心你的简历可能就被筛掉了,这时候你还是拜一拜ycy吧。
2 而且更重要的一点是,很多提前批的招聘都可以直接选择部门,这样你可以更加准确地进行投递。前阵子跑了几趟线下招聘以后,才懂得线上面试的幸福。
3 我的很多offer都来自于提前批,譬如阿里,阿里实际上只有内推的阶段是招人的,每个部门在这一阶段基本上都招完了,到正式校招时基本就是查缺补漏的阶段了,名额非常少。
所以有些同学没参加阿里内推,而是直接等校招,结果遇到了地狱难度的笔试,也是挺可惜的。
再譬如腾讯,我也是通过提前批拿到offer,不过腾讯正式校招还没开始面试,就先不下结论了。
还有就是头条了,有机会的话一定要搞一个白金码,算法不好的同学可以弯道超车。
▐ 二: 关于笔试的一些真相
首先来说一下笔试把,在提前批阶段也有一些公司开始笔试了,比如网易,网易游戏,拼多多等等,这些公司一般还是考算法为主,一般是LeetCode中等题的难度,并且很多都是原创的题目,所以如果你在算法方面没有积累的话,会比较难受了。
另外,我想说一点,笔试是公司筛选人才的一种方式,包括筛简历也是,笔试能够非常低成本地筛掉很多人,因为算法题的区分度实在太大了,一道题就可以拉开几十分。
而且ac与做来一部分的差距也很大,所以奉劝明年参加校招的小伙伴,刷题要趁早。
说一句大实话:短期内想要提升算法确非易事,其实做笔试题也是有很多技巧的,毕竟是线上笔试,实际上是完全不可控的。
我刚刚说过,笔试的目的就是筛掉一部分人,其实公司对自己筛掉的到底是什么人根本不清楚,不管你是大佬还是小白,刷掉就是刷掉了。
所以,为了提高笔试成绩,其实很多人都有自己的门道,毕竟只有过了笔试才有下文啊,具体有什么套路你们可以自己去探索,也都见怪不怪了。
另外,我想吐槽一下一些公司的笔试题,就不点名是哪些公司了。
1 有这么一些公司,所有岗位一套卷子,然后考的东西却只适合一个岗位,其他岗位的同学都是一脸懵逼,我想说,你还不如直接考几道算法题。
2 有这么一些公司,喜欢出408考题,是啊,计算机专业的同学可能做起来没毛病,刚好前阵子期末考考到不是?但是搞算法和前端的同学也会一脸懵逼。
3 有这么一些公司,笔试题喜欢出问答题,给一些又长又臭的题目,有的干脆直接考数学题,概率题,真的是劝退类题目,实在不知道你们出题的目的。
还有的就不说了。那些你们一点进去就不想做的笔试有哪些,欢迎与我们一起交流。
▐ 三: 关于面试的一些真相
说完笔试,说一下面试吧。比起冷冰冰的笔试成绩来说,面试则显得更加灵活多变了,一来看面试官心情,而来看你面不面善,三来还要看今天运气怎么样。
换位思考一下,一个面试官,面了一整天糙汉子,问了一堆技术问题得到的回答也都类似,估计也觉得很困,这时候如果你也没啥状态,估计也很难给面试官留下好印象。
面试的时候,我有一些习惯,当然也是面试多了形成的习惯。
比如我会准备好自我介绍,简明扼要地介绍自己的情况。
当面试官问起我项目的时候,我也会很有条理地去作答,因为我之前已经总结好了,每个项目三段内容,难点是什么,怎么解决的,收获是什么,基本上都已经烂熟于心了。。
回答技术问题的时候,首先也要讲条理,学会分点作答,并且尽量把你会的都毫无保留地说出来。
貌似上面这些都是废话,好吧,其实重点在后面。
1 描述问题时,尽量配图,注意和面试官之间的交流,避免你讲的很嗨人家却一脸懵逼。
2 写算法题时,先易后难,多提问,有必要时让面试官提示,另外,不要自己苦想太久,因为这会让面试官很尴尬,所以尽量保持交谈。
3 hr面时,注意扬长避短,讲优缺点时一定要能圆的回来,不要主动问薪资,不要暴露比当前公司好的offer,多问一些部门和公司有关的事情。
▐ 四: 其他的小tips
宣讲会这种东西,华而不实,如果没有现场笔试面试,不去也罢。
1 简历一张纸就够,具体要求可以参考我之前关于简历的文章,一份好的简历真的很重要,对你的秋招影响深远。
2 当有面试笔试等时间冲突时,第一时间要求调整,不要因为这种事情错过了机会,另外,笔试冲突的时候,也可以考虑多线程并发做题啊~
3 保持你的手机号,邮箱可用,等待短信和邮件的日子总是漫长的,当然等待的前提是你能收到它们。
4 多加一些招聘交流群,特别是微信群(qq群实在太多了),有需要的时候可以看一看。比如我的这个校招交流群,你就可以加一下。(关注公众号:程序员江湖。然后即可获取加群方式)
校园招聘往往有一道迈不过的坎,就是笔试,相对于面试来说,笔试显得更呆板和残酷。
不论你各方面能力如何,只要笔试不过,就没有面试机会,特别是有些笔试只考算法题,做对就有分,做错可能一分都得不到。往往成绩是按答对题数来算,而不是分数。
简单来说,笔试是最粗暴且成本最低的刷人方式,因为公司人力有限,应聘人数往往却很多,不可能都安排面试,所以笔试和简历筛选就可以刷掉大部分人,有一些人可能是偶尔发挥不好,但公司不在乎。
供求关系摆在这里,笔试显然是不可避免的。虽然有一些提前批面试不需要经过笔试,但大部分的公司都需要经历笔试环节。
俗话说的好,上有政策下有对策,我们学生也会有相应的方式去准备笔试。大概讲一些方法吧。
1 打好算法和数据结构基础
在做题之前,你需要学会数据结构与算法的基础知识。推荐看一些算法和数据结构入门书籍,同时使用你擅长的语言自己写一遍。熟能生巧,直到你真正掌握。
2 剑指offer
剑指offer是一本经典的算法书籍,不仅适用于面试,有些公司的笔试题也会参考剑指offer。
3 LeetCode
刷完剑指offer并且真正掌握以后,可以开始刷LeetCode了,LeetCode的题目往往被直接搬到笔试题中考察。建议大家按照一定顺序进行刷题,主刷medium和easy。
4 公司真题
有些公司笔试题喜欢自己出,有时候题型很奇怪,出题形式也不尽相同,结果经常让人猝不及防,只能放弃。所以提前刷一些公司的笔试真题也是非常重要的一步,等你刷多了,就会感觉碰到什么样的题都能写一点。
5 熟悉自己使用的语言
这里主要指的是要了解编程语言中数据结构的使用,比如栈,队列,链表,哈希表等等,还要会使用一些排序方法,比较器。除此之外,还得会写基本的输入输出,因为很多在线笔试的网站都要求自己完成输入输出。
6 科学答题
这里说一个小技巧,就是实在想不出来的话,可以直接输出测试用例。
7 检查错误
另外,有些题目可能会超时,原因是复杂度太大,可以考虑空间换时间。
而有些题报内存问题,此时要检查一下数组大小是不是超过规定的空间复杂度了。
如果是递归栈溢出,则可能要考虑剪枝或者使用非递归做法。
另外,记得要检查你的变量类型是否正确,有时候可能需要用long但你却用了int,也会导致白白丢分。
8 本地调试
很多笔试题都支持本地编辑器提交处理,所以你可以先在本地进行测试,如果有问题的话可以考虑断点调试,更容易发现错误在哪里。
校园招聘号角吹响,一大波毕业生正在路上。众所周知,校园招聘中最重要的几个环节就是投简历,笔试和面试了。
前两个部分的内容我们之前已经讲过了,今天我们来讲一下面试中你要知道的事。
由于我是技术同学,所以对其他岗位的面试不是很熟悉,我也参加过一些群面,但是毕竟较少,这里就不献丑了。
正常的技术面试一般有2到3轮,外加一轮HR面。技术面试的技巧其实不管是第几轮都是适用的。这里总结一下。
◆ ◆ ◆ ◆ ◆
自我介绍
一段好的自我介绍是一场面试成功的基础。自我介绍一般可以围绕着简历来说。
由于这段时间面试官会看你的简历,所以可以把时间控制为面试官看完简历所需的时间。
自我介绍最重要的是有条理,突出重点。
比如我会这么说:
1 您好,我是xxx,是xx大学研二的同学,专业是软件工程。
2 我主要学习和专注的方向是Java后端开发
3 之前我看过一些这方面的技术书籍,写过一些博客,做过一些项目。
4 去年有两段实习经历,分别是什么什么,大概说一下。
这样自我介绍说完大概就30秒左右,面试官也基本看完了简历,接下来面试官就可以开始提问了。
◆ ◆ ◆ ◆ ◆
回答问题的技巧
面试官开始提问,你开始回答,一般这个时间需要持续半小时到一个小时。你需要毫无保留地把你所学的东西表达出来,当然要使用得当的方式来回答。
◆ ◆ ◆ ◆ ◆
概念性问题回答步骤
概念性问题一般都要分点答题,可以使用总分总的结构,尽量答全面,只说自己比较有把握的部分,不要不懂装懂。
讲一下tcp的三次握手和四次挥手。
很基础的题目,但是回答也要有条理。一般可以分三步来回答,先说一下握手的过程,注意描述客户端和服务端,并且大概说一下为什么要这么做。
讲一下lock和synchorized的区别。
这道题你最好能分点来答,并且把用法和原理都答上。
1 sync和lock都是可重入锁。
2 sync可以锁类,实例和实例方法,lock只能锁方法。
3 lock可以搭配condition使用,以维护多个等待队列,而sync只有锁对象一个等待队列。
4 lock需要手动释放锁,否则会内存泄露。
5 sync底层使用系统调用,需要切换到内核态,而lock则使用aqs来实现。
看似简单的问题,如果要回答完整还是很不容易的,这时候分点答题是最好的选择,避免自己的思路混乱,也能让回答显得很有条理。
◆ ◆ ◆ ◆ ◆
算法类问题回答步骤
算法类题目的答题技巧也是有迹可循的,首先可以先问清题意,让面试官提供足够信息,然后要求思考一段时间,想一个暴力解法来回答,接着和面试官交流,不断进行优化。
说一下10亿个数找出前十个数的办法。
1 可以先问一下数字范围,单机内存是否足够
2 尝试回答建十个元素的小顶堆,数组遍历一遍即可。
3 如果面试官不满意,再尝试回答哈希分片到多台机器上执行,最后再进行归并。
总之,算法题一定是一个交流和思考的过程,了解足够多的信息以后,先暴力再优化,实在想不出来可以实话实说,不要打肿脸充胖子。
◆ ◆ ◆ ◆ ◆
实际场景类问题
这类问题通常不好准备,需要你综合以前所学,加上一些现场的思考来进行回答。不过万变不离其宗,如果你基础扎实,这类问题也难不倒你。
◆ ◆ ◆ ◆ ◆
秒杀系统架构怎么设计
其实这个题在网上可以找到答案,不过这类的场景题很受面试官青睐。
1 前端做好请求拦截,时间到之前不提供链接
2 http访问做负载均衡
3 请求消息通过消息队列削峰和限流
4 通过缓存缓解数据库压力
5 数据库做主从和读写分离
看似复杂的题,只要你有一定积累,还是可以分点回答清楚的。
◆ ◆ ◆ ◆ ◆
HR面回答技巧
如果能够面到HR小姐姐,那你已经是很优秀的同学了,HR面说简单也简单,说难也难,重要性自然不及技术面试,但是也要足够重视。
1 纯咨询类问题
家长,故乡,女友,学校等等方面的问题,礼貌地回答即可。
2 灵活类问题
优缺点
最有挑战的事
最成功和最失败的事
实习收获
这方面的回答讲究一个扬长避短,把一些不起眼或者是中性的缺点拿出来说,同时要说现在是如何改正这个缺点的。
这样回答的话,既巧妙地避开了你的缺点,也能让人看出你完善自己的决心。
当然,分点答题很重要,一定要说清楚自己的逻辑,是什么,为什么,怎么做。
3 较敏感的问题
你最讨厌什么样的人
你在工作中遇到最大的问题
有几个offer你如何选择
这类问题一定要思考清楚再回答,避免给HR留下不好的印象,offer选择的话,可以不说的太直白,我一般是说结合公司,岗位和城市进行考虑。
4 学习和职业规划
平时怎么学习
遇到压力怎么处理
未来的职业规划
这方面也需要做准备,分点答题即可,对未来规划需要清晰,答到点子上。否则会扣分。
◆ ◆ ◆ ◆ ◆
有什么问题想问的
我一般会问部门情况和后续面试安排,多了解一些信息总是有益的。并且可以让人感受到你对他们的重视
压力面试技巧
压力面的起源不知道是哪里,但是确实会遇到一些压力面,说是压力面,不如说是面试官故意刁难你。
这时候你的反应是否正确就很重要了,人在情绪激动的时候如果还能理性处理问题,会更让人青睐。
我经历的一次压力面是这样的。
1 自我介绍后,面试官先吐槽我的项目没技术含量,然后抛出几个问题。我只好陪笑。
2 接着我对这个问题尝试做出回答,回答质量一般,被直接驳回。我又尝试咨询问题详情,被不耐烦地打断。此时我已经很不爽了,但我说话还是很和气。生怕再触怒他。
3 然后他的态度才逐渐缓和,正常地提了几个问题。我也都正常回答了。
全程我都保持冷静,没有跟面试官正面冲突,而是避其锋芒,为自己争取机会。不管是压力面,还是遇到脾气差的面试官,甚至是故意刁难你的面试官,切记要保持礼貌和理智。
不卑不亢,保持谦虚,礼貌作答,才是应对任何面试都应该遵守的原则。
以上就是我的面试技巧总结,如果大家有什么其他想法,也欢迎跟我交流探讨。
前言
本文主要是我之前复习Java基础原理过程中写的Java基础学习总结。Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理。
纸上得来终觉浅,绝知此事要躬行。笔者之前对每部分的内容对做了比较深入的学习以及代码实现,基本上比较全面地讲述了每一个Java基础知识点,当然可能有些遗漏和错误,欢迎读者指正。
这里把重要的面试知识点都写出来了,让大家对知识框架有个基本轮廓,具体每个部分的内容,笔者都对应提供了了一篇博文来加以讲解和剖析,并且发表在我的个人博客和csdn技术专栏里。
我的博客地址:https://blog.csdn.net/a724888
GitHub仓库:https://github.com/h2pl
Java基础学习总结
每部分内容会重点写一些常见知识点,方便复习和记忆,但是并不是全部内容,详细的内容请参见具体的文章地址。
面向对象三大特性
继承:一般类只能单继承,内部类实现多继承,接口可以多继承
封装:访问权限控制public > protected > 包 > private 内部类也是一种封装
多态:编译时多态,体现在向上转型和向下转型,通过引用类型判断调用哪个方法(静态分派)。
运行时多态,体现在同名函数通过不同参数实现多种方法(动态分派)。
基本数据类型
1 基本类型位数,自动装箱,常量池
2 例如byte类型是1byte也就是8位,可以表示的数字是-128到127,因为还有一个0,加起来一共是256,也就是2的八次方。
32位和64位机器的int是4个字节也就是32位,char是1个字节就是8位,float是4个字节,double是8个字节,long是8个字节。
3 基本数据类型的包装类只在数字范围-128到127中用到常量池,会自动拆箱装箱,其余数字范围的包装类则会新建实例
String及包装类
1 String类型是final类型,在堆中分配空间后内存地址不可变。
2 底层是final修饰的char[]数组,数组的内存地址同样不可变。
但实际上可以通过修改char[n] = 'a’来进行修改,不会改变String实例的内存值,不过在jdk中,用户无法直接获取char[],也没有方法能操作该数组。
所以String类型的不可变实际上也是理论上的不可变。所以我们在分配String对象以后,如果将其 = “abc”,那也只是改变了引用的指向,实际上没有改变原来的对象。
3 StringBuffer和StringBuilder底层是可变的char[]数组,继承父类AbstractStringBuilder的各种成员和方法,实际上的操作都是由父类方法来完成的。
final关键字
1 final修饰基本数据类型保证不可变
2 final修饰引用保证引用不能指向别的对象,否则会报错。
3 final修饰类,类的实例分配空间后地址不可变,子类不能重写所有父类方法。因此在cglib动态代理中,不能为一个类的final修饰的函数做代理,因为cglib要将被代理的类设置为父类,然后再生成字节码。
final修饰方法,子类不能重写该方法。
抽象类和接口
1 抽象类可以有方法实现。 抽象类可以有非final成员变量。 抽象方法要用abstract修饰。 抽象类可以有构造方法,但是只能由子类进行实例化。
2 接口可以用extends加多个接口实现多继承。 接口只能有public final类型的成员变量。 接口只能有抽象方法,不能有方法体、 接口不能实例化,但是可以作为引用类型。
代码块和加载顺序
假设该类是第一次进行实例化。那么有如下加载顺序 静态总是比非静态优先,从早到晚的顺序是: 1 静态代码块 和 静态成员变量的顺序根据代码位置前后来决定。 2 代码块和成员变量的顺序也根据代码位置来决定 3 最后才调用构造方法构造方法
包、内部类、外部类
1 Java项目一般从src目录开始有com…A.java这样的目录结构。这就是包结构。所以一般编译后的结构是跟包结构一模一样的,这样的结构保证了import时能找到正确的class引用包访问权限就是指同包下的类可见。
import 一般加上全路径,并且使用.*时只包含当前目录的所有类文件,不包括子目录。
2 外部类只有public和default两种修饰,要么全局可访问,要么包内可访问。
3 内部类可以有全部访问权限,因为它的概念就是一个成员变量,所以访问权限设置与一般的成员变量相同。
非静态内部类是外部类的一个成员变量,只跟外部类的实例有关。
静态内部类是独立于外部类存在的一个类,与外部类实例无关,可以通过外部类.内部类直接获取Class类型。
异常
1 异常体系的最上层是Throwable类 子类有Error和Exception Exception的子类又有RuntimeException和其他具体的可检查异常。
2 Error是jvm完全无法处理的系统错误,只能终止运行。
运行时异常指的是编译正确但运行错误的异常,如数组越界异常,一般是人为失误导致的,这种异常不用try catch,而是需要程序员自己检查。
可检查异常一般是jvm处理不了的一些异常,但是又经常会发生,比如Ioexception,Sqlexception等,是外部实现带来的异常。
3 多线程的异常流程是独立的,互不影响。 大型模块的子模块异常一般需要重新封装成外部异常再次抛出,否则只能看到最外层异常信息,难以进行调试。
日志框架是异常报告的最好帮手,log4j,slf4j中,在工作中必不可少。
泛型
1 Java中的泛型是伪泛型,只在编译期生效,运行期自动进行泛型擦除,将泛型替换为实际上传入的类型。
泛型类用classA {
}
2 这样的形式表示,里面的方法和成员变量都可以用T来表示类型。泛型接口也是类似的,不过泛型类实现泛型接口时可以选择注入实际类型或者是继续使用泛型。
3 泛型方法可以自带泛型比如void go();
泛型可以使用?通配符进行泛化 Object可以接受任何类型
也可以使用 这种方式进行上下边界的限制。
Class类和Object类
1 Java反射的基础是Class类,该类封装所有其他类的类型信息,并且在每个类加载后在堆区生成每个类的一个Class<类名>实例,用于该类的实例化。
2 Java中可以通过多种方式获取Class类型,比如A.class,new A().getClass()方法以及Class.forName(“com.?.?.A”)方法。
3 Object是所有类的父类,有着自己的一些私有方法,以及被所有类继承的9大方法。
知乎上有人讨论Object和Class类型谁先加载谁后加载,因为每个类都要继承Object,但是又得先被加载到堆区,事实上,这个问题在JVM初始化时就解决了,没必要多想。
javac和java
1 javac 是编译一个java文件的基本命令,通过不同参数可以完成各种配置,比如导入其他类,指定编译路径等。
2 java是执行一个java文件的基本命令,通过参数配置可以以不同方式执行一个java程序或者是一个jar包。
3 javap是一个class文件的反编译程序,可以获取class文件的反编译结果,甚至是jvm执行程序的每一步代码实现。
反射
1 Java反射包reflection提供对Class,Method,field,constructor1 等信息的封装类型。
2 通过这些api可以轻易获得一个类的各种信息并且可以进行实例化,方法调用等。
类中的private参数可以通过setaccessible方法强制获取。
3 反射的作用可谓是博大精深,JDK动态代理生成代理类的字节码后,首先把这个类通过defineclass定义成一个类,然后用class.for(name)会把该类加载到jvm,之后我们就可以通过,A.class.GetMethod()获取其方法,然后通过invoke调用其方法,在调用这个方法时,实际上会通过被代理类的引用再去调用原方法。
枚举类
1 枚举类继承Enum并且每个枚举类的实例都是唯一的。
2 枚举类可以用于封装一组常量,取值从这组常量中取,比如一周的七天,一年的十二个月。
3 枚举类的底层实现其实是语法糖,每个实例可以被转化成内部类。并且使用静态代码块进行初始化,同时保证内部成员变量不可变。
序列化
1 序列化的类要实现serializable接口
transient修饰符可以保证某个成员变量不被序列化
readObject和writeOject来实现实例的写入和读取。
2 事实上,一些拥有数组变量的类都会把数组设为transient修饰,这样的话不会对整个数组进行序列化,而是利用专门的方法将有数据的数组范围进行序列化,以便节省空间。
动态代理
1 jdk自带的动态代理可以代理一个已经实现接口的类。
2 cglib代理可以代理一个普通的类。
3 动态代理的基本实现原理都是通过字节码框架动态生成字节码,并且在用defineclass加载类后,获取代理类的实例。
一般需要实现一个代理处理器,用来处理被代理类的前置操作和后置操作。在JDK动态代理中,这个类叫做invocationHandler。
4 JDK动态代理首先获取被代理类的方法,并且只获取在接口中声明的方法,生成代理类的字节码后,首先把这个类通过defineclass定义成一个类,然后把该类加载到jvm,之后我们就可以通过,A.class.GetMethod()获取其方法,然后通过invoke调用其方法,在调用这个方法时,实际上会通过被代理类的引用再去调用原方法。
5 而对于cglib动态代理,一般会把被代理类设为代理类的父类,然后获取被代理类中所有非final的方法,通过asm字节码框架生成代理类的字节码,这个代理类很神奇,他会保留原来的方法以及代理后的方法,通过方法数组的形式保存。
cglib的动态代理需要实现一个enhancer和一个interceptor,在interceptor中配置我们需要的代理内容。如果没有配置interceptor,那么代理类会调用被代理类自己的方法,如果配置了interceptor,则会使用代理类修饰过的方法。
多线程
这里先不讲juc包里的多线程类。juc相关内容会在Java并发专题讲解。
1 线程的实现可以通过继承Thread类和实现Runable接口 也可以使用线程池。callable配合future可以实现线程中的数据获取。
2 Java中的线程有7种状态,new runable running blocked waiting timewaiting terminate
blocked是线程等待其他线程锁释放。 waiting是wait以后线程无限等待其他线程使用notify唤醒 timewating是有限时间地等待被唤醒,也可能是sleep固定时间。
3 Thread的join是实例方法,比如a.join(b),则说明a线程要等b线程运行完才会运行。
4 o.wait方法会让持有该对象o的线程释放锁并且进入阻塞状态,notify则是持有o锁对象的线程通知其他等待锁的线程获取锁。notify方法并不会释放锁。注意这两个方法都只能在synchronized同步方法或同步块里使用。
5 synchronized方法底层使用系统调用的mutex锁,开销较大,jvm会为每个锁对象维护一个等待队列,让等待该对象锁的线程在这个队列中等待。当线程获取不到锁时则让线程阻塞,而其他检查notify以后则会通知任意一个线程,所以这个锁时非公平锁。
6 Thread.sleep(),Thread.interrupt()等方法都是类方法,表示当前调用该方法的线程的操作。
一个线程实例连续start两次会抛异常,这是因为线程start后会设置标识,如果再次start则判断为错误。
IO流
1 IO流也是Java中比较重要的一块,Java中主要有字节流,字符流,文件等。其中文件也是通过流的方式打开,读取和写入的。
2 IO流的很多接口都使用了装饰者模式,即将原类型通过传入装饰类构造函数的方式,增强原类型,以此获得像带有缓冲区的字节流,或者将字节流封装成字符流等等,其中需要注意的是编码问题,后者打印出来的结果可能是乱码哦。
3 IO流与网络编程息息相关,一个socket接入后,我们可以获取它的输入流和输出流,以获取TCP数据包的内容,并且可以往数据报里写入内容,因为TCP协议也是按照流的方式进行传输的,实际上TCP会将这些数据进行分包处理,并且通过差错检验,超时重传,滑动窗口协议等方式,保证了TCP数据包的高效和可靠传输。
网络编程
承接IO流的内容
1 IO流与网络编程息息相关,一个socket接入后,我们可以获取它的输入流和输出流,以获取TCP数据包的内容,并且可以往数据报里写入内容,因为TCP协议也是按照流的方式进行传输的,实际上TCP会将这些数据进行分包处理,并且通过差错检验,超时重传,滑动窗口协议等方式,保证了TCP数据包的高效和可靠传输。
2 除了使用socket来获取TCP数据包外,还可以使用UDP的DatagramPacket来封装UDP数据包,因为UDP数据包的大小是确定的,所以不是使用流方式处理,而是需要事先定义他的长度,源端口和目标端口等信息。
3 为了方便网络编程,Java提供了一系列类型来支持网络编程的api,比如URL类,InetAddress类等。
后续文章会带来NIO相关的内容,敬请期待。
Java8
1 接口中的默认方法,接口终于可以有方法实现了,使用注解即可标识出默认方法。
2 lambda表达式实现了函数式编程,通过注解可以声明一个函数式接口,该接口中只能有一个方法,这个方法正是使用lambda表达式时会调用到的接口。
3 Option类实现了非空检验
4 各种api的更新,包括chm,hashmap的实现等
5 Stream流概念,实现了集合类的流式访问,可以基于此使用map和reduce并行计算。
前言
在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易,华为等。
一路走来也遇到很多困难,也踩了很多坑,同时我自己也探索了很多的学习方法,总结了很多心得体会,并且,我对校园招聘也做了一些研究和相应的准备。
在今年的秋季招聘结束以后,我也决定把这些东西全部都写成文字,做成专题,以便分享给更多未来将要参加校招的同学。
更多内容后续都发布于微信公众号:程序员江湖
大学时期的迷茫与坚定
我的本科专业是电子信息工程,基本没有接触过计算机专业的课程,只学过c语言,然后在大三的时候接触过java,Android,以及前端开发。
那时候我还不知道软件开发的水有多深,抱着试一试的态度去应聘了很多公司。结果可想而知。
当年我对游戏开发很有兴趣,特别是对网易游戏情有独钟,但是当我看到网易游戏研发工程师的招聘要求时,我只能望而却步,因为它要求学历至少是985的硕士。
也因为这个契机,我在大三的暑假开始准备考研,花了一个月的时间深思熟虑之后,选择了我大华科。
毕竟是跨专业,在复习过程还是有点吃力的,但是就靠着一股毅力和执着,半年之后,顺利地考上了,成绩还意外地非常好。
研究生时期的探索和规划
对于即将读研的同学来说,一般有两件事很重要,一件事是选择导师,一件事是选择方向。
我当时本着想要找实习的想法选择了我现在的导师,事实证明我的选择还是很正确的。
而选择方向这件事,我倒是折腾了好久。研一期间我做的最多的事情就是看书了,当时自己的方向还不明确,所以找了很多书来看。当别人都在专研数据挖掘和机器学习时,我还在各种方向之间摇摆不定。
我在读研之前想做游戏开发和Android开发,但我以前也学过Java Web开发。于是我在网上了解对应方向的资讯,发现游戏研发的就业面比较窄,并且基于我之前的学习经历,java开发可能更加适合我。最终在学校的实训项目中我选择了Java Web项目,从此也真正意义上地踏上了Java的学习之路。
我的Java入门之路
之前说过,在研一期间看了很多计算机专业的书籍,比如计算机网络,操作系统,数据库等等,虽然吸收得都不太好,但也算是看过了。
于是我开始踏上学习Java的道路。最开始我找了一些Java的书单,然后买了一些比较基础的书籍,先啃为敬。那时候我看过《Java从入门到精通》这种烂大街的书,也看过《Java编程思想》这种很难懂的书。
一段时间后我感觉吸收效果不好,于是开始把目光转向视频课程了。那时候听舍友力神的建议,到极客学院上看一些视频课程,我当时就觉得这个讲的比书上要好懂一些。后来我又接触到了慕课网,中国MOOC等网站,逐渐地把相关的技术课程都看完了。
那时候正好我们的项目实训还在进行,于是我就把趁热打铁把这些东西用在了项目当中,并且第一次用博客记录下我的实践经验。
现在回头想想,此时的我也只不过是刚刚入门了Java以及web开发。然而那时候不知道天高地厚的我,就开始xjb投各大公司的Java实习岗位了。结果可想而知,那叫一个惨啊。
我的Java进阶之路
上文说到我刚刚开始投递实习岗位,是在研一的下学期。当时整天躲在实验室,一边看书一边看视频,接到面试时赶紧刷面经,忙的不亦乐乎。那段时间感觉自己的复习状态和考研差不多。
然而,由于水平确实不咋地,当时我被各大公司的面试官吊打。比如我第一家面的就是百度,三个很简单的问题一个都不会,人家面试官都不好意思打击我了。后来我又面了一些大大小小的互联网公司,虽然情况有所好转,但是总的来说,我要学习的东西还很多。
在准备面试的过程中,我看了很多面经,也看了很多技术博客,发现自己的基础很薄弱,需要系统性的学习。并且这些东西是视频和入门书籍给不了我的。于是我又踏上了找书的道路。
那时候Java书单泛滥,有的书单质量低下,买来的书看两眼就看不下去了。直到我看到了“江南白衣的后端书架”这一文章,才发现Java后端书架原来应该是这样的。于是我照葫芦画瓢把相关书籍都买了,这个阶段,也算是刚刚踏上Java进阶之路吧。
这里面不得不提几本书,对学习Java的同学非常重要,一本是《深入理解JVM虚拟机》,一本是《深入分析Java技术内幕》,以及《Java并发编程艺术》。
再后来,凭着一股不到黄河心不死的精神,终于拿到了网易游戏的实习offer。于是,第一次在大厂实习的机会终于来了,我怀着即期待又忧虑的心情来到了杭州。
我的Java实习之路
在猪场实习的时间并不长,也就持续了三个月不到,当时我们部门在做数据仓库,于是我这边主要负责Java Web应用的开发,其实也就是写一些简单的后台接口。
在熟悉了工作流程以后,我很快就适应了工作的节奏,毕竟做的东西也不难,导师也会经常指导,就这样我完成了一个又一个需求,直到后来家里有事,我才临时选择辞职回家。
由于在网易实习的时间比较短,我也留下了一些遗憾,比如对整个项目的架构不够熟悉,并且很多相关技术栈也来不及学习。后来我去熊厂实习的时候,尽量避免了这些问题。
熊厂实习的时间长达半年,部门当时做的是私有云,emmm完全是全新的技术栈啊,于是我基本上又是从零开始学习云计算,但是由于之前的操作系统和网络基础不扎实,在学习相关技术时,基本是两眼一抹黑,学啥啥不会。
这也导致我在上班期间看了很多计算机基础方面的书籍,包括《计算机网络:自顶向下》,《深入理解计算机系统》等等。当然,这也是因为我的工作内容很简单。CRUD你懂的。
于是花时间自学成为了我那时候的主旋律,看书,看内网资源,参加技术分享,倒也非常充实。当然,有空我也会看看项目代码,了解一下技术架构,以便让自己对整个项目有一个更好的理解。
再后来,2018年来了。
抉择时刻:实习转正还是秋招
我是2018年1月份离开北京的。当时面临几个问题,是否续租房子,是否继续实习。还有一个小插曲就是当时养的一只猫也得带回去。再三思考后我决定回学校准备秋招。
过年后我就回到学校了,当时我本不打算参加春招,想要潜心修炼准备秋招,但是架不住春招宣传力度大,并且几个大厂都标榜着“转正容易,hc多多”等口号。于是我没忍住,上牛客投了几次简历,打算面几家大厂,心想万一过了就去吧。
简历都投出去了,那也只好复习了啊,当时我们宿舍跟打了鸡血一样,一整天都在刷题,从早到晚泡着刷LeetCode,一个月后终于刷到100多题,也算是能应付一下笔试了吧。
春招我投的公司不多,也就at,网易游戏和京东。最后阿里和京东都给了offer。但是当时阿里的流程走得特别慢,直到内推截止前一天才给我发offer,并且自己也感觉之前面试表现一般,心想我要是去了也是B+,很有可能成为拥抱变化的牺牲品,于是我咬咬牙放弃了,大不了秋招再来。
塞翁失马,焉知非福,春招的颗粒无收反而让我可以安心准备秋招,于是我有大把的时间做我想做的事,制定自己的学习计划,安排自己的生活,不需要去考虑转正这种麻烦事了。
至此,四月终了,春招告一段落。
Java修仙之路
平时经常逛牛客,我也经常发些面经啥的,于是很多牛油喜欢调侃说“看神仙”。这时候我只能尴尬又不失礼貌的微笑了0。0
在下不才,成不了神仙,最多就是打游戏的时候能修修仙罢了。
不过你还真别说,网上还真有“Java成神之路”这样的文章,真的打扰了哈哈。
科普一下修仙梗: 修仙梗的意思是喜欢熬夜的人不睡觉不猝死反而要修仙,然后就被广大的网友们互相调侃玩坏了,现在熬夜都不叫熬夜了,新潮的说法就是修仙,熬夜不会猝死啊,会增强法力。
不逗你们了,咱们还是进入正题吧。我在五月份的时候做了一个计划,打算在七月底之前完成复习工作,原因是七月底有阿里的提前批招聘,是我最最重视的一个招聘。这个计划简称三个月计划,我主要做了三个方面的学习规划。
一:首先,便是对Java后端技术栈的复习,这也是最重要的一部分,因为面试永远都是考基础考得最多。
这部分内容又可以细分为多个方面:
1 Java知识体系:包括了Java基础,集合类,设计模式,Java并发技术,Java网络编程,JVM,JavaWeb,Spring框架等等。
2 计算机基础:包括了操作系统,计算机网络,数据结构,数据库,缓存等内容。
3 后端进阶:包括了分布式理论,以及常见分布式技术比如负载均衡,zookeeper,消息队列,分布式缓存等等。当然,这里面也包括系统架构方面的知识,以及RPC,微服务等内容。
4 额外内容:这部分内容因人而异,我主要是因为实习的时候项目涉及了hadoop以及私有云技术栈,所以自己看了很多这方面的东西,譬如Hadoop生态,OpenStack生态,以及docker生态。
我在复习这部分内容的时候,一般先看优质博客,然后自己整理总结对应写一些博客,最后把能够实现的东西实现一下,这样一来一个知识点就搞定了。剩下的事情就是重复这个步骤。
下面放上我的博客:https://blog.csdn.net/a724888
二:其次,便是对算法的学习了。我也把算法的学习分为了几个部分。
1 基础数据结构与算法:主要是复习之前学过的数据结构和算法,额外再看一些算法书籍,譬如《图解算法》,以了解常见算法。
2 剑指offer:剑指offer基本上是面试必考的,所以把它刷个两三遍是很有必要的。
3 LeetCode:搞定前面两项之后,刷LeetCode也会有些底气了,我当时就刷了150题左右,主要也是刷经典的题目。
4 笔试真题:这个就不用多说了,真题是一定要刷的。毕竟各个公司出题的路子都花里胡哨。
刷题多了,就会遇到很多原题和类似题目,所以,尽早开刷,做好准备吧。
三、最后一部分,则是做项目。大概说下我做项目的几个要点吧
1 为什么这时候我还要做项目呢:一来是我觉得实习过程自己接触的东西太细碎,没有对全局做把控,二来是因为想给GitHub加点东西,顺便学点新的技术。于是我选择了当时牛客网上的两个项目来自己做做看。
2 关于项目选择:叶神这两个项目还是讲的非常棒棒的,用的东西也很新,代码也有提供,避免了自己要写前端的尴尬,另外,这两个项目模仿了知乎和头条,更加接地气。
3 把项目做到GitHub上:之前对git也比较熟了,所以想把这个项目按照正常开发的流程走一遍,于是我每天都会做一个模块,然后发布几个版本,记录一下版本更新的细节,写这些东西的时候,自己其实就已经做了思考和总结,感觉还是不错的。
下面放上我的GitHub:https://github.com/h2pl
就这么过了三个月,提前批拉开序幕。
时间过得很快,已经到了九月中旬,从16年读研到现在将近两年的时间里,从一个Java初学者慢慢成长为一个合格的开发者,中间也遇到了很多困难。
我不是科班出身,所以是跨专业考研,所以在算法,计算机基础方面都比较不扎实,在两年的时间中也花了很多时间去弥补。当然最主要的还是在Java后端方面的学习,我尝试过很多学习渠道,也踩了很多坑,在项目里划过水,也在实习里打过杂,一路磕磕绊绊到秋招。
在春招期间我其实就下定决心不实习而选择直接走校招了,当时已经拿到了阿里的实习offer,只不过没有去,一来是因为害怕被拥抱变化,二来是对部门和评级不太满意。
所以从四月开始,我就全面开始准备秋招了,于是我做了一个三个月的学习计划,争取在阿里提前批开始前复习完毕,所以在七月的时候基本上做好了充分的准备,后续的时间基本上都花在投简历,笔试面试以及查缺补漏上了。好在今年研发岗的竞争比较小,所以也拿了几个大厂的offer,秋招总算圆满结束。
在学习和求职的道路上,牛客网帮助了我很多,为了回馈牛客网和各位牛友,我也想分享一下自己的秋招经历以及一些学习经验,希望能够帮助到有需要的人,特别是做研发方向的同学。
1 秋招小结
2 面经分享
3 Java后端技术专栏
4 Java工程师书单
5 学习资源分享
6 大牛博客推荐
7 笔试经验
8 面试经验
一:秋招小结
从七月初第一次投递简历,到九月初,整整两个月的时间,大大小小投了几十家公司,其中很多都是提前批,内推,也经历了许多的笔试,面试。
期间也拿了几个offer,包括百度,蚂蚁金服,腾讯,华为,头条,网易(网易云音乐没给offer,调到了其他部门)。有几家直接收到拒信的,包括拼多多,深信服。还有几家在等待结果,包括携程,快手,斗鱼等。
当然也有一些还没面试完的公司以及待安排面试的公司,这里就不展开说了。
八月底基本上提前批就已经结束了,所以一般这段时间正式校招也开始了,各种大规模的笔试也很多,所以大家即使没有拿到offer也不要灰心,毕竟校招是一场持久战,基本上要到九月十月才能下结论。
我之前分享了很多公司的面经,其实大部分都是提前批的,很多都是直接免笔试的,因为我对算法并不是很在行,所以感觉还是比较幸运的。
包括头条拿到了白金码,也很感谢那位给我白金码的牛友。另外牛客上的招聘信息,笔经面经也让我受益匪浅,所以还是很感谢牛客这个平台,我也希望能够写一些东西来回馈牛客网和各位牛友。
一、Java后端学习之路
这部分内容是我在准备2018年春招的时候写的。主要记录了我在研究生期间从Java初学者到专注于Java后端技术栈的开发者的学习历程。
主要分享了学习过程中的一些经验和教训,让后来人看到,少走弯路,与君共勉,共同进步。如有错误,还
夯实基础
1 研一的工程实践课让我知道了我的基础不够扎实,由于并非科班,需要比别人更加勤奋,古语有云,天道酬勤,勤能补拙。赶上了17年的春招实习招聘,期间开始各种海投,各种大厂面试一问三不知,才知道自身差距很大,开始疯狂复习面试题,刷面经,看经验等。死记硬背,之乎者也,倒也是能应付一些小公司,可谓是临阵磨枪不快也光。
2 不过期间的屡屡受挫让我冷静思考了一段时间,我再度调研了岗位需求,学习方法,以及需要看的书等资料。再度开工时,我的桌上开始不断出现新的经典书籍。这还要归功于我的启蒙导师:江南白衣,在知乎上看到了他的一篇文章,我的Java后端书架。在这个书架里我找寻到了很多我想看的书,以及我需要学习的技术。
3 遥想研一我还在看的书:教材就不提了,脱离实际并且年代久远,而我选的入门书籍竟然还有Java web从入门到精通这种烂大街的书籍,然后就是什么Java编程思想啦,深入理解计算机系统,算法导论这种高深莫测的书,感觉有点高不成低不就的意思。要么太过难懂要么过于粗糙,这些书在当时基本上没能帮到我。
书籍选择
1 江南白衣的后端书架真是救我于水火。他的书架里收录了许多Java后端需要用到的技术书籍,并且十分经典,虽不说每本都适合入门,但是只要你用心去看都会有收获,高质量的书籍给人的启发要优于普通书籍。
2 每个门类的书我都挑了一些。比如
网络的两本(《tcp ip卷一》以及《计算机网络自顶向下》),
操作系统两本(一本《Linux内核设计与实现》,一本高级操作系统,推荐先看完《深入理解计算机系统》再来看这两本),
算法看的是《数据结构与算法(Java版)》,
Java的四大件(《深入理解jvm虚拟机》,《java并发编程艺术》,《深入java web技术内幕》,《Java核心技术 卷一》这本没看)。
3 当然还有像《Effective Java》,《Java编程思想》,《Java性能调优指南》这种,不过新手不推荐,太不友好。接着是spring的两本《Spring实战》和《Spring源码剖析》。当然也包括一些redis,mq之类的书,还有就是一些介绍分布式组件的书籍,如zk等。
4 接下来就是扩展的内容了,比如分布式的三大件,《大型网站架构设计与实践》,《分布式网站架构设计与实践》,《Java中间件设计与实践》,外加一本《分布式服务框架设计与实践》。这几本书一看,绝对让你打开新世界的大门,醍醐灌顶,三月不知肉味。
5 你以为看完这些书你就无敌了,就满足了?想得倒是挺美。这些书最多就是把我从悬崖边拉回正途,能让我在正确的道路上行走了。毕竟技术书籍这种东西还是有门槛的,没有一定的知识储备,看书的过程也绝对是十分痛苦的。
6 比如《深入理解jvm虚拟机》和《java并发编程艺术》这两本书,我看了好几遍,第一遍基本当天书来看,第二遍挑着章节看,第三遍能把全部章节都看了。所以有时候你觉得你看完了一本书,对,你确实看完了,但过段时间是你能记得多少呢。可以说是很少了。
谈一谈学习方法
1 人们在刚开始接触自己不熟悉的领域时,往往都会犯很多错误。刚开始学习Java时,就是摸着石头过河。从在极客学院慕课上看视频,到看书,再到看博客,再到工程实践,也是学习方式转变的一个过程。
2 看视频:适合0基础小白,视频给你构建一个世界观,让你对你要做的东西有个大概的了解,想要深入理解其中的技术原理,只看视频的话很难。
3 看书:就如上面一节所说,看书是一个很重要的环节。当你对技术只停留在大概的了解和基本会用的阶段时,经典书籍能够让你深入这些技术的原理,你可能会对书里的内容感到惊叹,也可能只是一知半解。所以第一遍的阅读一般读个大概就可以。一本书要吃透,不仅要看好几遍,还要多上手实践,才能变成自己的东西。
4 看博客,光看一些总结性的博客或者是科普性的博客可能还不够,一开始我也经常看这样的博客,后来只看这些东西,发现对技术的理解只能停留在表面。高质量的博客一般会把一个知识点讲得很透彻,比你看十篇总结都强,例如讲jdk源码的博文,可以很好地帮助你理解其原理,避免自己看的时候一脸懵逼。这里先推荐几个博客和网站,后面写复习计划的时候,会详细写出。
博客:江南白衣、酷壳、战小狼。
网站:并发编程网,importnew。
5 实践为王,Java后端毕竟还是工程方向,只是通过文字去理解技术点,可能有点纸上谈兵的感觉了。还有一个问题就是,没有进行上手实践的技术,一般很快就会忘了,做一些实践可以更好地巩固知识点。如果有项目中涉及不到的知识点,可以单独拿出来做一些demo,实在难以进行实践的技术点,可以参考别人的实践过程。
实习,提高工程能力的绝佳机会
1 这段时间以后就是实习期了,三个月的W厂实习经历。半年的B厂实习,让我着实过了一把大厂的瘾。但是其中做的工作无非就是增删改查写写业务逻辑,很难接触到比较核心的部分。
2 于是乎我花了许多时间学习部门的核心技术。比如在W厂参与数据平台的工作时,我学习了hadoop以及数据仓库的架构,也写了一些博客,并且向负责后端架构的导师请教了许多知识,收获颇丰。
3 在B厂实习期间则接触了许多云计算相关的技术。因为部门做的是私有云,所以业务代码和底层的服务也是息息相关的,比如平时的业务代码也会涉及到底层的接口调用,比如新建一个虚拟机或者启动一台虚拟机,需要通过多级的服务调用,首先是HTTP服务调用,经过多级的服务调用,最终完成流程。在这期间我花了一些时间学习了OpenStack的架构以及部门的实际应用情况,同时也玩了一下docker,看了kubenetes的一些书籍,算是入门。
4 但是这些东西其实离后台开发还是有一定距离的,比如后台开发的主要问题就是高并发,分布式,Linux服务器开发等。而我做的东西,只能稍微接触到这一部门的内容,因为主要是to b的内部业务。所以这段时间其实我的进步有限,虽然扩大了知识面并且积累了开发经验,但是对于后台岗位来说还是有所欠缺的。
5 不过将近一年的实习也让我收获了很多东西,大厂的实习体验很好,工作高效,团队合作,版本的快速迭代,技术氛围很不错。特别是在B厂了可以解到很多前沿的技术,对自己的视野扩展很有帮助。
6:实习转正,还是准备秋招?
1 离职以后,在考虑是否还要找实习,因为有两份实习经历了,在考虑要不要静下心来刷刷题,复习一下基础,并且回顾一下实习时用到的技术。同一时期,我了解到腾讯和阿里等大厂的实习留用率不高,并且可能影响到秋招,所以当时的想法是直接复习等到秋招内推。因此,那段时间比较放松,没什么复习状态,也导致了我在今年春招内推的阶段比较艰难。
2 因为当时想着沉住气准备秋招,所以一开始对实习内推不太在意。但是由于AT招人的实习生转正比例较大,考虑到秋招的名额可能更少,所以还是不愿意错过这个机会。因为开始系统复习的时间比较晚,所以投的比较晚,担心准备不充分被刷。这次找实习主要是奔着转正去的,所以只投了bat和滴滴,京东,网易游戏等大厂。
3 由于投递时间原因,所以面试的流程特别慢。并且在笔试方面还是有所欠缺,刷题刷的比较少,在线编程的算法题还是屡屡受挫。这让我有点后悔实习结束后的那段时间没有好好刷题了。
调整心态,重新上路
1 目前的状态是,一边刷题,一边复习基础,投了几家大厂的实习内推,打算选一个心仪的公司准备转正,但是事情总是没那么顺利,微软,头条等公司的笔试难度超过了我的能力范围,没能接到面试电话。腾讯投了一个自己比较喜欢的部门,可惜岗位没有匹配上,后台开发被转成了运营开发,最终没能通过。阿里面试的也不顺利,当时投了一个牛客上的蚂蚁金服内推,由于投的太晚,部门已经招满,只面了一面就没了下文,前几天接到了菜鸟的面试,这个未完待续。
2 目前的想法是,因为我不怎么需要实习经历来加分了,所以想多花些时间复习基础,刷题,并且巩固之前的项目经历。当然如果有好的岗位并且转正机会比较大的话,也是会考虑去实习的,那样的话可能需要多挤点时间来复习基础和刷题了。
3 在这期间,我会重新梳理一下自己的复习框架,有针对性地看一些高质量的博文,同时多做些项目实践,加深对知识的理解。当然这方面还会通过写博客进行跟进,写博客,做项目。前阵子在牛客上看到一位牛友CyC2018做的名为interview notebook的GitHub仓库,内容非常好,十分精品,我全部看完了,并且参考其LeetCode题解进行刷题。
4 受到这位大佬的启发,我也打算做一个类似的代码仓库或者是博客专栏,尽量在秋招之前把总结做完,并且把好的文章都放进去。上述内容只是本人个人的心得体会,如果有错误或者说的不合理的地方,还请谅解和指正。希望与广大牛友共勉,一起进步。
二、我的秋招回忆录
准确来说,我是在2018四月份左右开始准备秋招的。
当然,我在2017年有过两段实习经历,分别在网易和百度,这1年半的时间里我也有了一些学习积累,以及实践经验,对后续我参加秋招都是有很大帮助的。
因为这些经历不仅丰富了我的简历,也让我能有项目去和面试官交流,把握更多主动权,另外,长期的博客积累,以及项目实践,也会有很好的正面作用。
抛开这些不说,秋季招聘其实也是一场考试,应对考试的方法也只有复习,不管你之前简历再光鲜,博客和GitHub再NB,笔试面试题答不上来那也是徒劳。所以,对付考试的那一套,我们也得掌握。
四月份其实是春招还在进行的时期,春招的时候我本来不打算参加的,因为担心转正的不确定性,但是当时招聘满天飞,没忍住就投了几家公司,最后只有阿里和京东给了offer。
纠结了很久以后,没去阿里,原因是担心拥抱变化,另外部门和评级我也不太满意。
当时我说:不要把命运交给别人来决定。现在想想确实还是挺正确的,说不定我去实习就被拥抱变化了,哪有现在的逍遥快活啊。
于是,春招告一段落,紧接着,我就开始进行秋招准备了。
复习计划,朝9晚10
在春招中我发现了很多问题,以前学过的东西要么忘了,要么理解不深,另外还有很多东西连看都没看过。
从那时起,我就开始拟定各种学习计划,刚开始先做三个月的计划,从四月到七月提前批开始前我要做什么,接着我又会在每个月都做详细的计划。
就这样,我把看书,写博客,刷题和做项目等内容都加入到了计划中,然后开始逐步消化。
这三个月的复习还是非常累的,春招的时候和舍友一起刷了一些LeetCode题目,后来舍友都去实习,宿舍只剩我一个人,然后我便开始了非常规律的复习生活。
每天我都会刷几道题,然后看一个知识点,晚上写个博客啥的。
这段时间我感觉积累的还是挺多的,并且学习的效率也比较高,更重要的是由产出,我在这一时期也搭了个自己的小站点,其实就是Hexo + GitHub。
另外在做项目方面,我看的是叶神的项目课,很受用,美滋滋。
提前批启,初露锋芒
这个节奏持续了一段时间,刚好我回了趟家,6月我都在家里复习。等到了6月底的时候,开始有提前批招聘出现,我是见一家投一家,想赶紧练练手。
七月份是我很重要的一个月。我几乎投了所有公司的提前批,当时先面了深信服。
接着又尝试了阿里中间件所谓的不进流程的提前批,接着面了蚂蚁金服,百度各个部门的提前批,以及各种小公司。
当然,在这之前我把简历搞定了,基本上能让我满意。这个阶段我光面百度就面了10多次,阿里也有7,8次了。
基本上各种乱七八糟的问题都遇到过了,然后我开始写面经,看别人的面经,继续刷题,写博客,然后面试面试面试。
面试多了以后,自我介绍和项目描述基本就形成肌肉记忆了,写算法题依旧蛋疼,但是也都能瞎扯一扯。基础知识点大概都能答得差不多,稍微差缺不漏一下,疲倦的一天就又过去了。
很多同学和我说,他们准备的太晚了,本来想着一边面试一边复习,后来发现笔试面试一多根本没时间复习。确实是这样的,提前批还好,电面视频面搞定,遇到笔试和线下面试,一天都没时间复习。
就这样来到了8月份,8月份我主要面了腾讯和头条等公司,这两个公司的风格很像,注重计算机基础,对语言问的比较少,于是我都面的比较一般,最后运气好都过了,也是挺开心的。
在8月份的面试中,我的心态是比较轻松的,毕竟蚂蚁和百度面的还行,所以面这两家的时候也比较放松。另外我还去杭州面了一次网易,面完之后顺便去玩了两天。
9月份,其实在八月中旬就初见端倪了,2019秋招正式开始,大批公司发出招聘信息,牛客网上好不热闹,宣讲,笔试面试铺天盖地。
这段时间我已经比较佛系了,也就偶尔帮小伙伴一起做做题什么的。中间面了一两家比较刚兴趣的公司,还有一面貌似已凉的网易游戏。
现在已经9月底了。很多同学的校招已经结束了,还有一些同学仍在战场,我身边有些朋友直到上周才收到第一个offer,所以,别急,总有属于你的那个offer。
三、我的秋招经验分享(研发方向)
时间过得很快,已经到了九月中旬,从16年读研到现在将近两年的时间里,从一个Java初学者慢慢成长为一个合格的开发者,中间也遇到了很多困难。
我不是科班出身,所以是跨专业考研,所以在算法,计算机基础方面都比较不扎实,在两年的时间中也花了很多时间去弥补。当然最主要的还是在Java后端方面的学习,我尝试过很多学习渠道,也踩了很多坑,在项目里划过水,也在实习里打过杂,一路磕磕绊绊到秋招。
在春招期间我其实就下定决心不实习而选择直接走校招了,当时已经拿到了阿里的实习offer,只不过没有去,一来是因为害怕被拥抱变化,二来是对部门和评级不太满意。
所以从四月开始,我就全面开始准备秋招了,于是我做了一个三个月的学习计划,争取在阿里提前批开始前复习完毕,所以在七月的时候基本上做好了充分的准备,后续的时间基本上都花在投简历,笔试面试以及查缺补漏上了。好在今年研发岗的竞争比较小,所以也拿了几个大厂的offer,秋招总算圆满结束。
在学习和求职的道路上,牛客网帮助了我很多,为了回馈牛客网和各位牛友,我也想分享一下自己的秋招经历以及一些学习经验,希望能够帮助到有需要的人,特别是做研发方向的同学。
1 阿里面经
阿里中间件研发面经
蚂蚁金服研发面经
岗位是研发工程师,直接找蚂蚁金服的大佬进行内推。
我参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头offer。
然后我也参加了蚂蚁金服中间件部门的面试,经历了三次面试,但是没有走流程,所以面试中止了。
最后我走的是蚂蚁金服财富事业群的流程,经历了四次面试,包括一次交叉面,最终拿到了蚂蚁金服的意向书,评级为A。
阿里的面试体验还是比较好的,至少不要求手写算法,但是非常注重Java基础,中间件部门还会特别安排Java基础笔试。
2 腾讯面经
腾讯研发面经
岗位是后台开发工程师,我没有选择意向事业群。
SNG的部门捞了我的简历,开始了面试,他们的技术栈主要是Java,所以比较有的聊。
一共经历了四次技术面试和一次HR面试,目前正在等待结果。
腾讯的面试一如既往地注重考查网络和操作系统,并且喜欢问Linux底层的一些知识,在这方面我还是有很多不足的。
3 百度面经
百度研发面经
百度研发面经整合版
岗位是研发工程师岗位,部门包括百度智能云的三个分部门以及大搜索部门。
百度的提前批面试不走流程,所以可以同时面试好多个部门,所以我参加百度面试的次数大概有12次左右,最终应该是拿了两个部门的offer。
百度的面试风格非常统一,每次面试基本都要到电脑上写算法,所以那段时间写算法写的头皮发麻。
4 网易面经
网易研发面经
面试部门是网易云音乐,岗位是Java开发工程师。
网易是唯一一家我去外地面试的公司,也是我最早去实习的老东家。
一共三轮面试,耗时一个下午。
网易的面试比我想象中的要难,面试官会问的问题都比较深,并且会让你写一些结合实践的代码。
5 头条面经
今日头条研发面经
岗位是后台研发工程师,地点选择了上海。
我参加的是字节跳动的内推面试,当时找了一个牛友要到了白金码,再次感谢这位头条大佬。
然后就开始了一下午的视频面试,一共三轮技术面试,每一轮都要写代码,问问题的风格有点像腾讯,也喜欢问一些底层知识,让我有点懵逼。
6 快手面经
拼多多&快手研发面经
岗位是Java开发工程师,面试我的部门好像是基础架构部门。
快手是两轮视频面试加上一轮hr面试。
7 拼多多面经
拼多多&快手研发面经
岗位是业务平台研发工程师。
当时在学校里参加了面试,过程是比较顺利的,问的问题也都比较有难度。
自我感觉良好,但是最后却收到了拒信,还是挺可惜的。
三:Java后端技术专栏
这些专栏中有一些文章是我自己原创的,也有一些文章是转载自技术大牛的,基本都是是我在学习Java后端的两年时间内陆续完成的。
深入浅出Java核心技术
本专栏主要介绍Java基础,并且会结合实现原理以及具体实例来讲解。同时还介绍了Java集合类,设计模式以及Java8的相关知识。
深入理解JVM虚拟机
带你走进JVM的世界,整合高质量文章以阐述虚拟机的原理及相关技术,让开发者更好地了解Java的底层运行原理以及相应的调优方法。
Java并发指南
本专栏主要介绍Java并发编程相关的基本原理以及进阶知识。主要包括Java多线程基础,Java并发编程基本原理以及JUC并发包的使用和源码解析。
Java网络编程与NIO
Java网络编程一直是很重要的一部分内容,其中涉及了socket的使用,以及Java网络编程的IO模型,譬如BIO,NIO,AIO,当然也包括Linux的网络编程模型。
了解这部分知识对于理解网络编程有很多帮助。另外还补充了两个涉及NIO的重要技术:Tomcat和Netty。
JavaWeb技术世界
从这里开始打开去往JavaWeb世界的大门。什么是J2EE,什么是JavaWeb,以及这个生态中常用的一些技术:Maven,Spring,Tomcat,Junit,log4j等等。
我们不仅要了解怎么使用它们,更要去了解它们为什么出现,其中一些技术的实现原理是什么。
Spring与SpringMVC源码解析
本专栏主要讲解Spring和SpringMVC的实现原理。
Spring是最流行的Java框架之一。
本专栏文章主要包括IOC的实现原理分析,AOP的实现原理分析,事务的实现源码分析等,当然也有SpringMVC的源码解析文章。
本专栏介绍MySQL的基本知识,比如基本架构,存储引擎,索引原理,主从复制,事务等内容。当然也会讲解一些和sql语句优化有关的知识。
同时本专栏里也介绍了Redis的基本实现原理,包括数据结构,主从复制,集群方案,分布式锁等实现。
本专栏介绍分布式的基本理论和相关技术,比如CAP和BASE理论,一致性算法,以及ZooKeeper这类的分布式协调服务。
在分布式实践方面,我们会讲到负载均衡,缓存,分布式事务,分布式锁,以及Dubbo这样的微服务,也包括消息队列,数据库中间件等等。
本专栏涵盖了大后端的众多技术文章,当你在Java后端方面有一定基础以后,再多了解一些相关技术总是有好处的。
除了Java后端的文章以外,还会涉及Hadoop生态,云计算技术,搜索引擎,甚至包括一些数据挖掘和AI的文章。
总的来说选取了一些不错的基础类文章,能让你对大后端有一个更直观的认识。
四:Java工程师书单
我之前专门写了一篇文章介绍了Java工程师的书单,可以这里重点列举一些好书,推荐给大家。
完整内容可以参考这篇文章:
Java工程师必备书单
《计算机网络:自顶向下》这本从应用层讲到物理层,感觉这种方式学起来更轻松。
《图解算法》《啊哈算法》
这两部书籍非常适合学习算法的入门,前者主要用图解的形式覆盖了大部分常用算法,包括dp,贪心等等,可以作为入门书,后者则把很多常用算法都进行了实现,包括搜索,图,树等一些比较高级的常用算法。
《剑指offer》这本书还是要强烈推荐的,毕竟是面试题经常参考的书籍,当然最好有前面基本的铺垫再看,可能收获更大,这本书在面试之前一般都要嚼烂。如果想看Java版本的代码,可以到我的Github仓库中查看。
《Java编程思想》这本书也是被誉为Java神书的存在了,但是对新手不友好,适合有些基础再看,当然要选择性地看。我当时大概只看了1/3
《Java核心技术卷一》
这本书还是比较适合入门的,当然,这种厚皮书要看完还是很有难度的,不过比起上面那本要简单一些
《深入理解JVM虚拟机》
这本书是Java开发者必须看的书,很多jvm的文章都是提取这本书的内容。JVM是Java虚拟机,赋予了Java程序生命,所以好好看看把,我自己就已经看了三遍了。
《Java并发编程艺术》
这本书是国内作者写的Java并发书籍,比上面那一本更简单易懂,适合作为并发编程的入门书籍,当然,学习并发原理之前,还是先把Java的多线程搞懂吧。
《深入JavaWeb技术内幕》
这本书是Java Web的集大成之作,涵盖了大部分Java Web开发的知识点,不过一本书显然无法把所有细节都讲完,但是作为Java Web的入门或者进阶书籍来看的话还是很不错的。
《Redis设计与实现》
该书全面而完整地讲解了 Redis 的内部运行机制,对 Redis 的大多数单机功能以及所有多机功能的实现原理进行了介绍。这本书把Redis的基本原理讲的一清二楚,包括数据结构,持久化,集群等内容,有空应该看看。
《大型网站技术架构》
这本淘宝系技术指南还是非常值得推崇的,可以说是把大型网站的现代架构进行了一次简单的总结,内容涵盖了各方面,主要讲的是概念,很适合没接触过架构的同学入门。看完以后你会觉得后端技术原来这么博大精深。
《分布式服务框架原理与实践》
上面那本书讲的是分布式架构的实践,而这本书更专注于分布式服务的原理讲解和对应实践,很好地讲述了分布式服务的基本概念,相关技术,以及解决方案等,对于想要学习分布式服务框架的同学来说是本好书。
《从Paxos到Zookeeper分布式一致性原理与实践》
说起分布式系统,我们需要了解它的原理,相关理论及技术,这本书也是从这个角度出发,讲解了分布式系统的一些常用概念,并且带出了分布式一哥zookeeper,可以说是想学分布式技术的同学必看的书籍。
《大数据技术原理与应用》
作为大数据方面的一本教材,厦大教授写的这本书还是非常赞的,从最基础的原理方面讲解了Hadoop的生态系统,并且把每个组件的原理都讲得比较清楚,另外也加入了spark,storm等内容,可以说是大数据入门非常好的一本书了。
五:技术大牛推荐
1 江南白衣
这位大大绝对是我的Java启蒙导师,他推荐的Java后端书架让我受益匪浅。
2 码农翻身
刘欣,一位工作15年的IBM架构师,用最浅显易懂的文章讲解技术的那些事,力荐,他的文章帮我解决了很多困惑。
3 CoolShell
陈皓老师的博客相信大家都看过,干货很多,酷壳应该算是国内最有影响力的个人博客了。
4 廖雪峰
学习Git和Python,看它的博客就够了。
5 HollisChuang
阿里一位研发大佬的博客,主要分享Java技术文章,内容还不错。
6 梁桂钊
阿里另一位研发大佬,博客里的后端技术文章非常丰富。
7 chenssy
这位大佬分享的Java技术文章也很多,并且有很多基础方面的文章,新手可以多看看。
8 Java Doop
一位魔都Java开发者的技术博客,里面有一些不错的讲解源码的文章,数量不是很多,但是质量都挺不错的。
六:学习资源分享
学习Java后端两年的时间里,接触过很多的资料,网站和课程,也走了不少弯路,所以这里也总结一些比较好的资源推荐给大家。
0 CSDN和博客园,主流的技术交流平台,虽然广告越打越多了,但是还是有很多不错的博文的。
1 importnew 专注Java学习资源分享,适合Java初学者。
2 并发编程网,主要分享Java相关进阶内容,适合Java提高。
3 推酷 一个不错的技术分享社区。
4 segmentfault,有点像国内的Stack Overflow,适合交流代码问题的地方。
5 掘金,一个很有极客范的技术社区,强推,有很多技术大牛分享优质文章。
6 开发者头条,一个整合优质技术博客的社区,里面基本上都是精选的高质量博文,适合技术学习提升。
7 v2ex,一个极客社区,除了交流技术以外还会有很多和程序员生活相关的话题分享。
8 知乎
这个就不必多说了。我在知乎上也有Java技术和校招的专栏,有兴趣的同学可以看看:
https://www.zhihu.com/people/h2pl
9 简书
简书上有些技术文章也很不错,有空大家也可以去看看。
10 Github
有一些GitHub的项目还是非常不错的,其中也有仓库会分享技术文章。
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难。基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单。
一:Java入门学习资源
这里主要推荐的是几个技术学习网站,基本上都是视频学习资源。
1 慕课网慕课网是做得比较好的程序员学习网站了。里面主要提供的是视频学习资源,主要适用于入门,当然其中也有一些进阶的内容,不过一般都是收费的。
2 极客学院极客学院是我最早用于视频学习的网站,当时主要是听室友推荐,看了一些之后发现确实还不错。不过比起慕课网,极客学院的内容可能少一点。
3 w3cSchool这个想必不说大家也知道,最适合入门的学习网站之一,有很多的学习资源,但是也只适合入门,你可以在一天内看完一门语言或技术,大概了解怎么使用。
4 中国MOOC以前我以为这个和慕课网一样,后来发现这个网站主要是做教育资源的,更像是在学校里上课,里面的很多资源都是高校老师提供的,所以想学习一些计算机基础理论知识可以看看这个网站。
5 网易云课堂&腾讯课堂这两个网站大家也都知道,只不过他们不是专门做IT学习资源的,相对来说这方面的学习资源也会比较少一点。
二:Java后端技术专栏
对于校园招聘来说,最重要的还是基础知识。下面的博客专栏出自我的技术博客:
https://blog.csdn.net/a724888
这些专栏中有一些文章是我自己原创的,也有一些文章是转载自技术大牛的,基本都是是我在学习Java后端的两年时间内陆续完成的。
总的来说算是比较全面了,做后端方向的同学可以参考一下。
深入浅出Java核心技术
https://blog.csdn.net/column/details/21930.html
本专栏主要介绍Java基础,并且会结合实现原理以及具体实例来讲解。同时还介绍了Java集合类,设计模式以及Java8的相关知识。
深入理解JVM虚拟机
https://blog.csdn.net/column/details/21960.html
带你走进JVM的世界,整合高质量文章以阐述虚拟机的原理及相关技术,让开发者更好地了解Java的底层运行原理以及相应的调优方法。
Java并发指南
https://blog.csdn.net/column/details/21961.html
本专栏主要介绍Java并发编程相关的基本原理以及进阶知识。主要包括Java多线程基础,Java并发编程基本原理以及JUC并发包的使用和源码解析。
Java网络编程与NIO
https://blog.csdn.net/column/details/21963.html
Java网络编程一直是很重要的一部分内容,其中涉及了socket的使用,以及Java网络编程的IO模型,譬如BIO,NIO,AIO,当然也包括Linux的网络编程模型。
了解这部分知识对于理解网络编程有很多帮助。另外还补充了两个涉及NIO的重要技术:Tomcat和Netty。
JavaWeb技术世界
https://blog.csdn.net/column/details/21850.html
从这里开始打开去往JavaWeb世界的大门。什么是J2EE,什么是JavaWeb,以及这个生态中常用的一些技术:Maven,Spring,Tomcat,Junit,log4j等等。
我们不仅要了解怎么使用它们,更要去了解它们为什么出现,其中一些技术的实现原理是什么。
Spring与SpringMVC源码解析
https://blog.csdn.net/column/details/21851.html
本专栏主要讲解Spring和SpringMVC的实现原理。 Spring是最流行的Java框架之一。
本专栏文章主要包括IOC的实现原理分析,AOP的实现原理分析,事务的实现源码分析等,当然也有SpringMVC的源码解析文章。
重新学习MySQL与Redis
https://blog.csdn.net/column/details/21877.html
本专栏介绍MySQL的基本知识,比如基本架构,存储引擎,索引原理,主从复制,事务等内容。当然也会讲解一些和sql语句优化有关的知识。
同时本专栏里也介绍了Redis的基本实现原理,包括数据结构,主从复制,集群方案,分布式锁等实现。
分布式系统理论与实践
https://blog.csdn.net/column/details/24090.html
本专栏介绍分布式的基本理论和相关技术,比如CAP和BASE理论,一致性算法,以及ZooKeeper这类的分布式协调服务。
在分布式实践方面,我们会讲到负载均衡,缓存,分布式事务,分布式锁,以及Dubbo这样的微服务,也包括消息队列,数据库中间件等等。
后端技术杂谈
https://blog.csdn.net/column/details/25481.html
本专栏涵盖了大后端的众多技术文章,当你在Java后端方面有一定基础以后,再多了解一些相关技术总是有好处的。
除了Java后端的文章以外,还会涉及Hadoop生态,云计算技术,搜索引擎,甚至包括一些数据挖掘和AI的文章。
总的来说选取了一些不错的基础类文章,能让你对大后端有一个更直观的认识。
七:笔试经验
提前批的笔试其实不是很多,我参加了网易,网易游戏,拼多多等公司的笔试,应该都是低分飘过。
我的算法基础比较一般,读研之前0基础,所以这方面不是很有发言权,大概说几点我的学习经验。
1 打好数据结构基础
2 先易后难,看一些基础的算法书籍,比如《图结算法》,《啊哈算法》等等。
3 剑指offer刷起来,两到三遍,做到胸有成竹
4 LeetCode刷个200题左右,记得二刷,做好总结。
5 到牛客网做公司的历年真题,熟悉题型,保持手感。
剑指offer指南和LeetCode刷题指南可以在我的GitHub中参阅:
其中LeetCode指南是参考@CyC2018大佬的文章。
八 : 面试经验
面试主要考的还是你的基础知识,需要你对Java后端技术栈有一个全局上的把握,具体说起来就太多了。
我个人也总结了一些面试方面的经验,主要是一些技巧。
1 做好自我介绍和项目总结,把握你发言的主动权
2 搞清楚简历上的技术点,兵来将挡水来土掩
3 注意分点答题,思路清晰,也更容易讲清楚原理。
4 压力面下保持冷静,不要回怼面试官
5 HR面试注意常用技巧,可以提前准备。
1 计算机基础
这部分内容是计算机相关专业同学的课程,但是非科班的小伙伴(譬如在下)就需要花时间恶补了。特别是计算机网络,操作系统,数据结构这三门课程。
至于编译原理,个人大概懂一点就行了,我也只看过简单的概念和状态机相关的内容,并不是特别重要。
2 Java编程
这里的Java编程部分包含了很多内容。我们可以分别看看,大概归纳一下就是这几个部分。
Java基础
这里的Java基础包括基本语法,集合类框架,以及一些高级特性,比如反射,注解等等。
Java基础的知识点非常多,所以要真正搞懂也没有那么简单,另外,随着时间推移,一些新特性也需要得到我们的重视,比如时下流行的JDK8。
设计模式
我一直觉得设计模式可以和Java基础一块学,所以我也把它放在这里。当然,一些真正使用到设计模式的地方,譬如JDK的集合类,IO流等等,也需要你足够重视。
Java Web技术
Java Web技术包括J2EE,以及web框架,乃至一系列常用的组件。
1 J2EE主要包括的就是servlet,jsp这些比较复古的web开发组件了。虽然现在直接用它们的情况比较少,但是我们还是需要花一些时间去掌握它们的。
2 web框架常用的就是Spring了,相应的,hibernate和mybatis也需要了解一下。
3 同时,JavaWeb开发时的常用类库,比如jnuit单元测试,log4j日志工具,以及构建工具maven,都属于我们要掌握的范畴。
4 最后,要注意的是,Web相关的一些基本知识,比如HTTP协议,网络安全基础,也是我们要考虑的部分。
Java并发技术
Java的并发技术泛指Java的多线程技术,以及JUC包里的并发类,比如线程池,并发工具类,阻塞队列等等。
Java并发技术完全可以独立出来学习,是Java进阶知识的一大重点。
Java网络编程和服务器
这一块内容是Java中比较复杂但也很重要的一块内容。比如BIO,NIO,AIO的一些使用和原理,以及tomcat这类web服务器,甚至是netty这种网络编程框架,都是可以去了解和学习的内容。
Jvm基础与调优
JVM是提供Java程序运行的一个进程,学习JVM知识,也是我们的必经之路。除了看懂《深入理解jvm虚拟机》以外,我们还要学习的内容就是JVM调优,使用合适的工具诊断问题,最后解决问题。
这部分内容在面试中呈现的不仅仅是GC,内存分区,以及类加载器,也包括了我所说的JVM调优问题。
3 Linux
作为后台同学,常年被面试官问linux相关的问题,所以觉得学好linux还是蛮重要的,除了基本命令以外,最好还能了解一些shell脚本,甚至是内核相关的知识,这方面是我的一个弱项。
4 数据相关
在这个路线图里,数据部分囊括了非常多的数据源,我们可以来看看都有哪些是我们需要掌握的。
关系数据库Mysql
这个不必多说,人手都要会,不管是基础的crud,索引,抑或是进阶的存储引擎,分布式方案等,我们都需要对应掌握。
缓存
如Redis,memcache一类的缓存,作为后端开发者的我们也需要对应掌握,当然,它们的高级特性,以及分布式方案,也是必备的知识点。
搜索引擎
基于Lucene的solr,elasticsearch这类搜索引擎,本质上也是数据源,但是并不是后端必备的内容,不过学一学也没有坏处啦。
大数据
海量数据处理的场景越来越多,大数据技术如hadoop,storm等也越来越火,但是大数据应用一般会由专业的大数据工程师来做,所以我们学一些基本内容也就足够了。
5 算法和数据结构
算法一直是校招同学面前的一座大山,作为后端同学来讲,除了基本的数据结构算法以外,也要会一些高级的算法,譬如dp,搜索,贪心等等。
另外,通过LeetCode等题库来刷题的方式来巩固算法也是公认的好办法了。
6 分布式
最后一个部分,也是内容最多,覆盖面最广泛的部分了。分布式相关的技术实在太多了,我们这里也会做一下简单的归纳。
web架构
先了解web架构的发展会对分布式的学习有更好的理解,毕竟架构的发展也对应着分布式技术的发展。
分布式理论
这部分内容包括分布式的发展演化,base理论和cap理论等等,学习分布式技术之前,最好能对这部分概念有一定了解。
一致性问题
强一致性的解决方案:事务和锁,弱一致性的方案:消息队列。
分布式session
一个常见的问题,也有多种解决方案
分布式缓存
和上面说的缓存一样,只不过这里侧重缓存的分布式方案
分布式数据库
这里指的数据库的分布式方案,也包括hbase这种分布式数据库。
负载均衡
负载均衡也是一个值得探讨的话题,一般我们讨论的是七层和四层负载均衡。
消息队列
消息队列是一个比较复杂的分布式组件,我们可以了解常用消息队列比如amq,kafka等的实现。
服务化
服务化的核心包括rpc,服务注册中心等等。分布式服务相关技术也是后端同学必须掌握的内容。
虚拟化
虚拟化同样不是后端同学必须掌握的内容,只不过现在越来越多的服务部署方式使用的是docker和云服务的方式。所以了解一下也没有什么不好的。