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