作者:乔戈里
链接:https://www.zhihu.com/question/313388796/answer/614439871
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你好,题主,知道你很着急,我去年也是像你一样,我总结一份找Java实习突击的方法,已经帮我拿到了BAT中的offer,同时已经帮助很多人拿到了实习的offer。文章很长,建议你认真阅读,绝对会收获不少。


一.简历篇

简历篇建议大家看看这篇:

如何修改个人简历?一些过来人的经验​mp.weixin.qq.com图标我是使用的乔布简历,在里面买了一个模板,本科还是免费的,研究生阶段就收费了,呵呵。

(1)个人联系方式

简历的话要把电话,email这些重要的信息放到显眼的位置,方便联系。

(2)技能掌握

熟悉 精通等词汇慎用(精通应届生就不要用了),我举一下我的java为何用了熟悉的例子,java看了《java核心技术卷1》《java编程思想》前几章《深入了解java虚拟机》前7章,《java并发编程的艺术》《java多线程编程核心技术》还看了一堆网上的博客,看了这么多我才写上了熟悉java

了解的话适用于只是看过一点书,只是一种浅尝辄止的感觉,比如你只是通过刷了刷面经,了解了一些数据库的面试常见的问题,那么这种就应该用了解。一般都写上了解吧,你应聘啥工程师,对应的语言写上熟悉。

(3)荣誉奖励

奖学金,优秀干部,竞赛获奖,paper啥的都往上怼,多多益善。

(4)项目

项目篇很重要,基本面试的第一个环节都是扣你的项目。

项目一定要准备1到2个亮点(难点)!!!

项目一定要准备1到2个亮点(难点)!!!

项目一定要准备1到2个亮点(难点)!!!

有些人看到这里就会说,我这项目水的一批,一点亮点都没有,咋整,全完了呀,别慌,听我给你吹一波。

一开始我第一次面试的时候(第一次就去面阿里,我也是胆贼大),阿里面试官上来就怼项目,

问我这是啥,那是啥,我说了以后,他就问着玩意底层是咋实现的,我用的是一个开源的爬虫,然后我就说我只会用,底层没有看过,他估计很失望;然后他问我的项目亮点是啥,我当时一下愣住了,扯了一些有的没的,都是失败的惨痛的教训,大家参考参考就好,不一定就一定要照着我学,非要知耻而后勇,咋提前准备好也是不错的。

经过这次惨痛的教训以后,我就开始有意识地去想一些项目的亮点,即使不是我遇到的问题,我强行把这些问题加到我的项目上面,当做我的项目亮点。

亮点举例:我的第一个项目的我说我负责舆情监控项目的地域分析,这个模块其实平平无奇,很水,就是利用一个开源的NER命名实体识别的包去识别出来新闻正文的地点,然后统计地点出现的次数这样的一个简单的模块。我就这样吹:最深刻的一个项目就是最近做的网络舆情监控项目,其中我在里面有负责一个地域分析模块,就是从最新爬进来的新闻数据里面提取出来地域信息,最后在地图上显示出来,当时把后台模块写好了以后,是可以在本地的windows系统上运行的,然后导出jar包的时候,想把jar包在linux系统上运行起来,但是一运行就显示OOM内存溢出错误,当时遇到的这个问题的时候第一时间想起来了以前看的关于虚拟机方面的书,于是我在虚拟机的配置上添加了一个-XX:+HeapDumpOnOutOfMemoryError,尝试将dump文件保留到本地,然后采用了jmap命令去分析这个dump文件,发现代表老年代的参数Old Generation每次一启动都是一直满着的,然后去看了虚拟机的配置参数,发现虚拟机中的-xmx参数只有256M,而程序需要的内存大小为500M(因为需要加载一个MIT的提取名词的包),所以最后通过设置成1024M解决了这个问题,我感觉通过这个学到了很多。在项目中扮演了核心角色,独立完成了地域分析模块。

示例看不懂也没关系,这个得有一定的java虚拟机的知识才可以看懂,推荐看《深入了解java虚拟机》

看到这里,你完全可以把我的这个项目的这个亮点融合到你自己的项目里面,换个背景就是你的项目亮点了,我上面推荐的《深入了解java虚拟机》里面也有很多虚拟机调优的经验,你可以看懂之后,把这些融合到自己的项目里面,完全是可以的。

除此之外,关于项目还有一个问题:就是你看了我的简历,会发现许多项目都是与爬虫相关的,面试管会问你在爬虫上你遇到了啥问题,这种完全可以上网去搜爬虫和反爬虫的技术博客,然后理解记忆,说给面试官听。说到这里,其实也就是在说,你的项目可能涉及到的点你都得有准备,有备无患,你如果不知道自己项目涉及到哪些点,那么可以通过一些公司练练手,他问到的一些问题,就有可能是你的项目需要准备的点。

亮点举例二:

这道题目是来源于我面试百度的一道面试题。

题目是这样子的:面试官:这个是我们在实际业务中遇到的,就是用户反映系统会周期性地出现卡顿现象。

面试官给我画了一个上面这样的图,横轴代表时间,纵轴代表系统的性能,可以看成,过了一个周期系统性能就会到底一个低谷值,然后又慢慢恢复正常。面试官问我是什么原因。

我的思考

我略作思量,目前我手里的牌只有jvm虚拟机的知识,其它我实在想不出和这个问题相关的答案,于是我推测和jvm虚拟机垃圾回收有关。

jvm虚拟机垃圾回收会发生stop the word(中文翻译过来就是停止这个世界,也就是说会使得正常的工作线程停止运行),这样工作线程停止了工作,那么系统性能必然下降,于是我抱着自己的这种猜测这样回答这个问题。

我推测是与jvm垃圾回收有关。jvm虚拟机中将堆分为新生代和老年代,而当new了一个对象以后,由于是强引用,这个对象在经历minorGC的时候,年龄会变大,在达到参数MaxTenuringThreshold的值的时候,就会进入到老年代中。一直进行这个过程,那么老年代中的活着的对象就会越来越多,最后老年代满了以后发生fullGC,而fullGC是很耗时间的,尤其是当老年代越大,那么fullGC就越耗时间。这个系统周期性出现这个问题的就是由于对象周期性地把老年代填充满了,然后jvm虚拟机周期性地去进行fullGC去回收垃圾,当回收的时候系统性能就下降,当回收结束时系统性能就上升。

那么如何解决呢?通过调整新生代与老年代的比例(该值可以通过参数 –XX:NewRatio 来指定),调低老年代占的内存大小,这样老年代很快就满了,就会提前进行fullGC,直到调整到发生fullGC时候对于系统性能影响不大的时候(用户察觉不出来),那么调优结束。

面试官听完以后,满意地点了点头,我感觉应该算是推测正确了。

项目亮点

“乔兄,那么如何把这个面试题变成我的项目亮点?

“别急,看我72变~”

首先我们来了解一下jstat命令。

上图来源于《深入理解JVM虚拟机》这本书,讲解了jstat命令的作用。

对于你的任意的一个项目,比如说你做的网站,你都可以说你的网站在运行的时候周期性地遇到出现卡顿现象。出现卡顿了,你肯定想去找解决方法,于是你想到了jstat这个命令,去观察jvm虚拟机的各项指标。

在观察的过程中,你发现FGC这个参数很大,说明fullGC进行的很频繁,而且FGCT也就是fullGC总的耗时时间很长,所以你推测这可能是jvm虚拟机频繁地进行fullGC导致了系统出现周期性的卡顿,这时候你再按照我刚才说的解决思路,说一遍给面试官听,那么你的项目亮点可能就会让你在你的面试中加分~

上述出自我自己写的文章:

可以作为你面试的项目亮点的文章,不来看看吗?​mp.weixin.qq.com图标-------------------------------------------------------------------------------------------

二.简历投递篇

(1)官方网申

学历不好的,不建议这走这条路,容易被刷,985/211也有一定几率被刷。

(2)内推

关注 牛客网- 互联网求职神器和备考学习平台 的内推信息,都是真实可靠的,虽然不一定免笔试,但是可以保证你简历不被刷啊!!!

微信公众好 互联派 也有很多内推的信息,值得关注。

(3)内推完之后的添加个人信息

强推 牛客网简历助手 助手介绍_牛客简历助手-简历一次填写,N网闪填__牛客网

爽的一批,谁用谁知道,你填写完牛客网的简历助手,进来其它求职网站的时候,可以把插件调出来,如果调不出来,多点几下,自己摸索哈。

三.笔试面试篇

提前批:一般公司的提前批是面笔试的,这个机会一定要抓住,提前批不耽误正常网申流程,相当于多了一次机会。(其实你每次应聘都是会有记录的,现在的面试官可以看到你所有的过往的面试记录,但我觉得影响不大,你这次能过和上次没过还是取决于你自己的实力,能不能打动面试官)

笔试:就算你内推成功了,也会有极大可能笔试,如果你算法功力强,可以独当一面,那么不用看这里,直接跳过,如果你算法一般的话,我说一下我在秋招过程中看到的一些其他人是怎么办的。周围人一般都是三五成群,算法题互相说思路,基本知道思路就知道咋写了,也有的比如他1道题AC了,他是C++版本的,其他人把这个AC代码改成了java版本等等,也可以请周围大神帮忙A几道等等,其实周围同学的算法功底真的说不上多强,反正是通过这种方法也算是把笔试给过了。其实笔试题吧,你把剑指offer刷一刷,leetcode刷个几百道(建议一个tag一个tag的刷),问题不大,我是通过刷leedcode,然后感觉这些公司的笔试题也就那么回事,还OK,当然阿里笔试题另说,还是A不了,真的变态!!!

面试:面试这个就看平时积累了。

四.平时积累篇

-------------------------------------------------------------------------------------------

下文中截图来源于我做的一个pdf版本的面经,把所以知识点的答案整理了下来,耗费我将近至少1个月时间,在本文最后部分把这个pdf分享给大家,觉得有用的麻烦点赞关注走一波,谢谢!!!面经中有我的知识点的答案,如下图示例,非常详细!!!

下文中截图来源于我做的一个pdf版本的面经,把所以知识点的答案整理了下来,耗费我将近至少1个月时间,在本文最后部分把这个pdf分享给大家,觉得有用的麻烦点赞关注走一波,谢谢!!!面经中有我的知识点的答案,如下图示例,非常详细!!!

下文中截图来源于我做的一个pdf版本的面经,把所以知识点的答案整理了下来,耗费我将近至少1个月时间,在本文最后部分把这个pdf分享给大家,觉得有用的麻烦点赞关注走一波,谢谢!!!面经中有我的知识点的答案,如下图示例,非常详细!!!

--------------------------------------------------------------------------------------------

1.数据结构与算法篇

你是java开发你就用java代码去实现,是C++开发就用C++去实现。

书籍参考:

(0)《图解算法》入门

(1)《剑指offer》 剑指Offer_编程题_牛客网

(2)《程序员代码面试指南 IT名企算法与数据结构题目最优解》参考左神视频

(3)leetcode LeetCode - The World's Leading Online Programming Learning Platform

leedcode注意去英文官网,别去中国区,中国区讨论区讨论的少。

leedcode 注意一个tag一个tag的刷,例如动态规划,就把动态规划下的题目都刷了,基本刷个10多道,其它也基本有思路了,而且动态规划的题目笔试面试也常出。其次就是二叉树,链表,数组,回溯的题目。

(4)数据结构(严蔚敏)/大话数据结构 //如果觉得教材无聊就可以看大话系列

需要掌握的知识点:

  • 数组、链表、二叉树、队列、栈的各种操作(性能,场景)
  • 二分查找和各种变种的二分查找(循环有序数组找最大值最小值找n,有序数组找最左下标,最右下标)
  • 各类排序算法以及复杂度分析(快排、归并、堆、冒泡、直接选择、插入排序
  • 各类算法题(手写)
  • 理解并可以分析时间和空间复杂度。
  • 动态规划(笔试回回有。。)、贪心。
  • 红黑树、AVL树、Hash树、Tire树、B树、B+ 树(除了红黑树,其它要会插入删除查找,红黑树如果会更好,也算一个亮点)。
  • 图算法(克鲁斯卡尔算法、普林母算法、迪克拉斯算法)
  • 树的前序后序中序遍历的递归非递归实现,层次遍历,深度优先遍历,广度优先遍历递归与非递归实现

排序算法总结:常见排序算法小结 - CSDN博客

排序算法递归与非递归的java实现版本:

Lintcode 快排递归与非递归实现 464. 整数排序 II java

Lintcode 464. 整数排序 II 冒泡排序三种实现 直接插入排序 直接选择排序 java

Lintcode 464. 整数排序 II 归并排序递归与非递归实现 java

2.海量数据篇

看这一篇就足够用了,什么bitmap,布隆过滤器都得知道。

教你如何迅速秒杀掉:99%的海量数据处理面试题 - CSDN博客

3.计算机网络篇

参考书籍:《图解http》《图解TCP/IP》《TCP/IP详解卷1》《计算机网络(谢希仁)》

知识点:

所有的知识点,需要做到,不看面经,能知道答案是啥,自己可以用嘴说出来!!!

所有的知识点,需要做到,不看面经,能知道答案是啥,自己可以用嘴说出来!!!

所有的知识点,需要做到,不看面经,能知道答案是啥,自己可以用嘴说出来!!!

4.数据库篇

参考书籍:《高性能MySQL》 《MySQL技术内幕:InnoDB存储引擎(第2版)》

知识点:

5.操作系统篇

参考书籍:

知识点:《操作系统精髓与设计原理(原书第6版)》

LRU会手写一个LRU的set与get的时间复杂度是o(1)的代码

6.Linux命令篇

参考书籍:《linux 鸟哥的私房菜》

7.安全加密

8.重头戏java篇

基础篇:

推荐书籍:《Java程序员面试笔试宝典-何昊》突击java面试的好书啊!!!

《写给大忙人看的JavaSE8》 《深入理解Java虚拟机:JVM高级特性与最佳实践》

《JAVA并发编程实战》《Java多线程编程核心技术》《java核心技术卷1》

1.基础篇:

2.集合篇:

3.锁

4.多线程

多看看《Java多线程编程核心技术》这块就没问题

5.jdk中的concurrent 俗称juc包

都要搞懂底层原理!!!

都要搞懂底层原理!!!

都要搞懂底层原理!!!

6.java虚拟机

主要看《深入理解java虚拟机》

7.设计模式

参考书籍:《大话设计模式》

知道每种设计模式是啥意思,可以手写一个单例模式,手写适配器模式,工厂模式,观察者模式,装饰器模式。

知识点:

----------------------------------------------------------------------------------------------

基本把我上面列的知识点都搞懂,算法题都刷地明明白白的,不说battmd这些公司,至少我觉得互联网前50+

如果没有项目经验,想做项目,可以推荐你去淘宝上去买黑马视频,照着整个java web的项目、

-----------------------------------------------------------------------------------

附上我呕心沥血整理的java面经,觉得有用的点赞关注走一波!!!

附上我呕心沥血整理的java面经,觉得有用的点赞关注走一波!!!

附上我呕心沥血整理的java面经,觉得有用的点赞关注走一波!!!

我的微信公众号 戳此文字即可看到​www.jianshu.com

关注我的公众号 现名字:程序员乔戈里

weixin.qq.com/r/4T8SCor (二维码自动识别)

发表评论

邮箱地址不会被公开。 必填项已用*标注