Java后端实习面经,电子科大大三读者投稿!看了之后感触颇深!很开心!
大家好!我是 Guide 哥(这俗气的开头,Guide 哥内心暗自 BB)。
这篇文章是我的一位读者的投稿,为了方便称呼加上这位老哥的头像是哆啦 A 梦,我暂时称呼这位读者为哆啦 A 梦吧!哈哈!
那天我在朋友圈发了一个说说来恭喜一位校招成功进入网易的读者,然后哆啦 A 梦就评论说我的 JavaGuide 对他的帮助很大,他自己也成功拿到了京东的实习。每次看到这类消息,你可以脑补一下坐在屏幕前的傻笑的我,哈哈!
然后,我就给哆啦 A 梦说,他可以分享一下自己的找工作的一些经验,结果第二天哆啦 A 梦就给我发了过来。看了之后,感觉写的真的很用心!下面的内容尤其对面试没有把握或者学习没有方向的人有很大帮助!
关于我
我现在是本科大三学生,在电子科大就读软件工程专业,在我大一大二的时候其实也并没有找到所谓的方向,将来想要从事什么岗位。只是一心想着先学好学校的专业课程,工作就业的事以后再说。我就一直用自己在学校课程上取得的一点点成绩在麻痹自己,逃避就业的现实。其实大家也都非常清楚,现在高校里面讲授的内容很多都是偏向于底层的一些理论知识,并不会具体教你框架、怎么做项目、怎么样写代码、即使有很多实验课程也都是非常地老套和实际情况差距非常大。这就直接导致一个很大的问题:我的编程能力很差,没有一点自信。
由于我们学院特殊的安排,我们基本所有必修专业课程的学习都在大一和大二修完,大三上半学期有少量的专业选修课程和思政课。大三下整个学期都是要去企业完成 6 个月的实习。了解到很多优秀的学长在大三实习的时候就拿到了非常厉害的 offer 和优厚实习待遇,我当然是非常的心动,希望能够在大三下学期的时候能拿到一个不错的实习岗位。由于我个人是非常不愿意去做测试开发,算法开发的门槛又相对较高,然后就选择了 Java 这个方向。
准备面试
我其实在大二上半学期的时候修了 Java 这门课程,但是学校的 Java 课程是非常老套,和实际企业里的开发是完全脱节。在大三上半学期我当时就在网上找各种 Java 的学习路线,但我发现有很多学习路线看完都是“实力劝退”的感觉,因为内容太多太杂,对于一个想要入门开发的 Javaer 非常不友好。也是机缘巧合,在一个学长(很厉害的一个学长,目前在华科直博)推荐下,了解到 JavaGuide 这个开源项目,从那时起我才算是打开了新世界的大门。学习路线非常清楚,特别对于我们这种初学者的人来说非常友好,知识点的总结也在我后来面试过程帮了大忙。
看到身边的大佬们手拿多个大厂实习 offer 不知道怎么选时,一方面是非常羡慕,另一方面就是觉得自己是在还以前欠下的债,所以大三上整个学期我的压力都是挺大的,边学习 Java 的技术栈边准备面试。前前后后面试的公司有百度、成都 SAP、京东(京东数科)、新浪微博等,最终也算是如愿以偿,马上准备入职京东。
至于我怎么准备的面试?我觉得很重要的一点就是根据自己写的简历和所投递岗位的 JD 有针对性地复习。在简历上最为重要的版块就是项目经历和技能清单这两块,这两部分直接决定了能不能拿到面试资格和面试官怎样提问。所以我当时就遇到了一种窘境,因为我是边学 Java 边面试,项目这部分可写的非常少,基本就没有。
我看过各大公司的招聘需求:Java 开发现在基本都是 SSM、SpringBoot 框架等等,当我学完了这部分之后,我就跟着学校老师那边做了一个 Java 后端的项目把学的框架练习了一遍,写在了简历上,之后我就对项目中的技术点进行复盘。
在当时我确实有着投机的心态,但是必须要有这样一个项目,否则我可能连面试的机会都没有,在参加了多次面试之后我的感受就是:作为实习生,项目这一方面重点在于面试官他要确认你是实实在在地做了,并且有你自己的思考和收获。面试的重点其实是在很多基础的问题上(面试题放在后面),在基础这部分,我反复地复习 JavaGuide 上面的基础知识点,在这里必须感谢 JavaGuide,这可以说直接影响了我在面试中的表现。
面试真题
下面的面试题是来自百度、京东、新浪微博,我进行了一个总结,希望能帮到大家,划重点的部分表示反复被问到
数据结构与算法篇
B 树和 B+树的区别 你了解哪些排序算法?算法的思想、时间复杂度、空间复杂度? LeetCode 第 1 题及第 15 题:两数之和及三数之和问题
计算机网络篇
TCP 三次握手、四次挥手流程?为什么三次,为什么四次? TCP 和 UDP 区别,有 TCP 为什么还要有 UDP? TCP 粘包和拆包问题有了解吗? TCP 是怎样保持连接的?
操作系统篇
并发编程中死锁有了解吗?死锁产生的条件是什么?你在项目中是怎样解除避免和解除死锁的? 进程的都有哪些状态?怎么转换的? Linux 下文件的操作命令
数据库篇
数据库范式了解吗?在你的项目中怎么运用的?会出现什么问题? 数据库索引了解吗?MySQL 中索引底层是怎么实现的? MySQL 中存储引擎 InnoDB 和 MyISAM 有什么区别?分别用于什么场景? 数据库事务有了解吗?事务的隔离级别?你在项目中使用的隔离级别是什么? SQL 优化有什么思路? 项目中使用到外键了吗?外键作用?使用外键要注意些什么问题? 除了 MySQL 数据库你还用到哪些数据库?Redis 数据库和 MySQL 数据库的区别? 设计一个数据库表
Java 基础篇
类和对象的区别? 讲讲 static 关键字和 final 关键字 synchronized 关键字是怎么用的?底层实现有了解吗?还有用过其他的锁吗? BIO、NIO、AIO 区别有哪些?项目中有用到吗?Netty 了解吗? 接口和抽象类的区别?什么时候用接口,什么时候用抽象类?接口可以继承接口吗? HashMap 和 HashTable 的区别是什么? ConcurrentHashMap和HashMap的区别是什么?ConcurrentHashMap为什么线程安全? HashMap 和 HashSet 的区别?HashSet 是如何检查重复的? Java 中线程的状态?join()、yield()方法是干什么? Object 类下有哪些方法? 字符串"123"转换成整型123的API是什么?整型123转换成字符串“123”的 API 又是什么? 创建线程有几种方式?分别是怎么做的? 线程池用过吗?如何创建一个线程池?其中各个参数的含义是什么?为什么要用线程池?coreSize? synchronized、ReentrantLock 区别? CountDownLatch 和 Semaphore 用过吗?他们的区别是什么?CountDownLatch 应用场景?比如现在要让第 5 个线程等待前 4 个线程执行完毕再执行,具体怎么做? 使用 synchronized 来实现单缓冲区的生产者消费者模型? JVM 有了解吗?JVM 中参数 –Xms
和-Xmx
是什么意思?设计模式有了解过哪些?单例设计模式知道哪几种写法?策略设计模式了解吗?你在项目中用到了哪些设计模式? Spring 中依赖注入有几种方式?怎么做的? Spring 框架中有哪些组件了解吗?分别做什么的? SpringMVC 的这种 MVC 模式了解吗?他的工作原理是什么?用到了哪些设计模式?(基本每轮面试都被问到) SpringMVC 中要接受用户传来的参数要怎么做?REST 的风格呢? Spring 中 bean 的创建过程了解吗? SpringBoot 和 SpringMVC 的区别和联系是什么?了解 SpringBoot 的启动流程吗?SpringBoot 自动配置是如何实现的?
总结:其实我们看上面的问题,整体来说还是非常地基础,尤其对于实习生和应届生来说,基础是第一位的,就包括百度和京东的面试官都在面试最后给我强调基础的重要性
写在最后
以前觉得自己还小还早,告诉自己才大一大二,可是当突然把自己推向生活的洪流,我仿佛什么都做不了。有了这段找实习的经历,我觉得自己成长了不少,要勇敢地跳出自己的舒适圈,当自己不知道做什么的时候就去面试,让社会对你进行评价。
在这个过程中,我也眼看着很多好的机会从我身边流走,都是因为自己还不够优秀,虽然现在有幸拿到了实习机会,但我也时刻告诫自己要保持学习,沉淀自己,当有更好的机会来临时我能够抓的住。
在 Java 开发这条路上,我也算是刚刚入门,要学的还很多,作为 JavaGuide 的忠实粉丝,再次感谢 JavaGuide! (Guide 哥故意加粗了一下,开心 😄)
Guide 哥注:生活要继续,学习也要继续。对我而言,JavaGuide 还有太多太多不足的地方,后面的日子会继续完善下去。