java 面试基础题,复习2个月拿下美团offer,使用Docker部署Spring-Boot项目

本文讲述了作者在面试过程中如何准备垃圾收集机制、类加载机制、常用数据结构源码理解,以及项目经验分享,强调实战经验和深度理解的重要性。
摘要由CSDN通过智能技术生成
  • 介绍下垃圾收集机制(在什么时候,对什么,做了什么)。

  • 垃圾收集有哪些算法,各自的特点。

  • 类加载的过程。

  • 双亲委派模型。

  • 有哪些类加载器。

就这5道题目,不能再多了。在当时的面试中无数次被问到,我都能很自信的答出来,帮我在面试官心中加了无数的分,估计面试官还以为我对JVM有所研究,整个人的逼格顿时就上去了。

对于背面试题,我只能说两个字。

2.源码初探

在看完上面的面试题后,已经能应付很多问题了,但是好像还缺了点什么?没错,就是能让你装逼的源码。当时我选择了常用集合的源码,当时我这菜比也只能选这个了:ArrayList、LinkedList、HashMap 等等,基本都是边看源码、边对着别人的博文跟着一行行的学。在学习 Java 集合源码时,对我很有帮助一些文章是:

  • zhangshixi 的 Core Java 系列文章

  • 五月的仓颉 的 Java集合框架 系列文章

看完这些源码后,我把它们全写到简历里去了,因为这是当时我觉得自己为数不多的亮点了。

  • 深入学习过HashMap、ArrayList、LinkedList、ConcurrentHashMap、LinkedHashMap等常用集合的源码。

这些源码的准备也基本全用上了,类似于“ArrayList 和 LinkedList 的区别/比较”这类问题,我都忘了被问过多少次了。

在回答这个问题的时候,我最初的回答比较中规中矩:

1)ArrayList底层基于动态数组实现,LinkedList底层基于链表实现

2)对于随机访问(get/set方法),ArrayList通过index直接定位到数组对应位置的节点,而LinkedList需要从头结点或尾节点开始遍历,直到寻找到目标节点,因此在效率上ArrayList优于LinkedList。

3)对于插入和删除(add/remove方法),ArrayList需要移动目标节点后面的节点(使用System.arraycopy方法移动节点),而LinkedList只需修改目标节点前后节点的next或prev属性即可,因此在效率上LinkedList优于ArrayList。

后面被问多了,就会加一些自己的思考。例如:

当 ArrayList 是顺序插入的时候,由于不需要移动节点,因此在效率上并不会比 LinkedList 差。

自己深挖过(例如看过源码)的知识点被问到时,一定要抓住机会表现,让面试官感受到自己的深度,这些都是加分的点。

3.项目准备

除了技术知识外,项目也是必不可少的一环,但是不需要准备很多,只需要挑2-3个你最牛逼的需求点准备就行了。我当时找了很久,就找了这么几个很 low 的点:

  • 定时将百万行级别的文件进行下载、读取数据、插入数据库,并进行一些业务操作。(其实就是NIO读取,多线程都没开,整个处理要一两个小时…)

  • 使用多线程处理通过Excel导入的数据。(就开了个线程异步处理…)

  • 批量处理通过Excel导入的数据。(好像就是个批量插入数据库…)

第2和第3点其实就是来凑数的,打扰了。

面试过程中主要帮我扛过项目这一关的主要还是第1点,毕竟也是涉及到了百万级别的数据,哈哈。其实当时我对于NIO也是一知半解,也就是看了一些博文,会基本的使用。

还记得当时做这个需求的时候还挺痛苦的,做了好久。但是真正到了需要用的时候。

这也是我很想传达的一点,项目中遇到难题时千万不要总想着退缩,这些解决难题的过程、解决的难题,都会让你快速成长和受用终身

这些内容就是我开始面试前的全部准备了,从2月初到3月底,差不多准备了1个半月,当时的简历是这么写的。现在看起来有点 low,但是当时已经是我的极限了。

咸鱼修炼出山


准备好了之后就是疯狂投递简历了,各种知名的招聘网站都要去投,也没有什么挑选的说法(唯一可能就是尽量选互联网公司,还有就是像阿里腾讯这种大公司,咱是不敢投的),只要是招2年 Java 的投就完事了。只要能给个面试机会,咱就得谢天谢地了。

很多很多的投递都石沉大海,但庆幸的是在海投之下,还是拿到了不少面试机会,当然大多都是听都没听过的公司。

偶尔收到一些稍微有点名气的公司面试邀请时,心里真的乐开了花,可以对着这封邮件反复看好几遍。

面试之前给自己定了个目标——13k,每次hr问我时我也就讲13k-15k,高了不敢喊,心虚,觉得自己就是个垃圾,根本不值这个钱…

从3月底面试到了4月底,总共面了20来个公司。基本是每天2个面试,上午下午各一个。早上室友还没起床,我就已经出门了。早餐都是在三林东地铁站附近的巴比馒头解决的;午餐就在面试公司的附近找家麦当劳解决。那段时间每天在路上奔波的时间至少四五个小时,但是完全不觉得累,整个人对未来充满了希望。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后

手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友

image.png

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

c3ab8389e65ecb71ac0)

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 30
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值