准备面试了,我要怎么在闲暇时间里学习才能掌握更强的java编程能力,在面试中脱颖而出?

Posted 守夜人爱吃兔子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了准备面试了,我要怎么在闲暇时间里学习才能掌握更强的java编程能力,在面试中脱颖而出?相关的知识,希望对你有一定的参考价值。

背景

今年四月份的时候,一位大学时期关系不错的学弟联系上我。说他最近在找Java开发的工作,在听说我毕业后一直在做这方面的工作后,于是联系上了我,问了我一些面试的经验和遇到的问题。

我觉得这些问题很有价值,或许对即将走出大学或者正在准备面试的朋友们会有所启发,于是就把我的一些建议和经验顺便整理了一下分享出来。

PS:本文涉及的范围较广,对多数准备面试的人来说都有参考价值,也有很多相通的地方。相信大家看完本文之后,一定会有所收获。

本文主要分为五个部分:

  • 面试到底在问些什么东西?
  • 面试流程
  • 面试常问的知识点
  • 一些经验分享
  • 学习干货

2021年,大家一起报团取暖,一起牛掰!


一、面试到底在问些什么东西?

首先你要明确的知道一点,面试官所问的内容和你简历所写的东西一定是紧密联系的,一般情况下面试官都是根据你写在简历上的技能提问,而你没有写在简历上的技能,面试官很少会去提问。

面试大体上包括下面几方面知识类型:

  1. Java基础、多线程、IO与NIO、虚拟机、设计模式
  2. 数据结构与算法(要有手写算法的能力)
  3. 计算机网络(TCP三次握手和四次挥手)
  4. 数据通信(RESTful、RPC、消息队列)
  5. 操作系统(Linux的基本命令以及使用)
  6. 主流框架(Spring底层原理与源码问的很多)
  7. 数据存储(最常见的是mysql、Redis)
  8. 分布式

除了这些东西还有什么其他问题:

  • 实际场景题
  • 生活方面的问题
  • 性格/其他方面的问题

二、面试流程

  1. 自我介绍
  2. 问Java基础知识
  3. 对你写在简历上的项目进行大量提问
  4. 情景问题,例如:你的一个功能上了生产环境后,服务器压力骤增,该怎么排查
  5. 你有什么想问面试官的;

三、面试常问的知识点

1)集合相关问题(必问)

  1. HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现
  2. HashMap和Hashtable的区别
  3. ArrayList、LinkedList、Vector的区别
  4. HashMap和ConcurrentHashMap的区别
  5. HashMap和LinkedHashMap的区别
  6. HashMap是线程安全的吗
    7ConcurrentHashMap是怎么实现线程安全的
    8HashMap 的长度为什么是2的幂次方

2)多线程并发相关问题(必问)

  1. 创建线程的3种方式
  2. 什么是线程安全
  3. Runnable接口和Callable接口的区别
  4. wait方法和sleep方法的区别
  5. synchronized、Lock、ReentrantLock、ReadWriteLock
  6. 介绍下CAS(无锁技术),什么是悲观锁和乐观锁
  7. volatile关键字的作用和原理
  8. 什么是ThreadLocal
  9. 创建线程池的4种方式
  10. ThreadPoolExecutor的内部工作原理
  11. 分布式环境下,怎么保证线程安全
  12. synchronized和lock区别以及volatile和synchronized的区别

3)JVM相关问题

  1. 介绍下垃圾收集机制(在什么时候,对什么,做了什么)。
  2. 垃圾收集有哪些算法,各自的特点。
  3. 类加载的过程。
  4. 双亲委派模型。
  5. 有哪些类加载器。
  6. 能不能自己写一个类叫java.lang.String。

4)设计模式相关问题(必问)

设计模式比较常见的就是让你手写一个单例模式(注意单例模式的几种不同的实现方法)或者让你说一下某个常见的设计模式在你的项目中是如何使用的,另外面试官还有可能问你抽象工厂和工厂方法模式的区别、工厂模式的思想这样的问题。

另外,建议把代理模式、观察者模式、(抽象)工厂模式好好看一下,这三个设计模式很有用。

5)数据库相关问题,针对MySQL(必问)

  1. 给题目让你手写SQL。
  2. 有没有SQL优化经验。
  3. MySQL索引的数据结构。
  4. SQL怎么进行优化。
  5. SQL关键字的执行顺序。
  6. 有哪几种索引。
  7. 什么时候该(不该)建索引。
  8. Explain包含哪些列。

6)框架相关问题

  1. Hibernate和Mybatis的区别。
  2. Spring MVC和Struts2的区别。
  3. Spring用了哪些设计模式。
  4. Spring中AOP主要用来做什么。
  5. Spring注入bean的方式。
  6. 什么是IOC,什么是依赖注入。
  7. Spring是单例还是多例,怎么修改。
  8. Spring事务隔离级别和传播性。
  9. 介绍下Mybatis/Hibernate的缓存机制。
  10. Mybatis的mapper文件中#和$的区别。
  11. Mybatis的mapper文件中resultType和resultMap的区别。

7)其他遇到问题

  1. 介绍下栈和队列。
  2. IO和NIO的区别。
  3. 接口和抽象类的区别。
  4. int和Integer的自动拆箱/装箱相关问题。
  5. 常量池相关问题。
  6. ==和equals的区别。
  7. 什么是JDK?什么是JRE?什么是JVM?三者之间的联系与区别
  8. Java和C++的区别
  9. 重载和重写的区别。
  10. String和StringBuilder、StringBuffer的区别。
  11. 静态变量、实例变量、局部变量线程安全吗,为什么。
  12. try、catch、finally都有return语句时执行哪个。
  13. 介绍下B树、二叉树。
  14. 分布式锁的实现。
  15. 分布式session存储解决方案。
  16. 常用的linux命令。

四、一些经验分享

  • 先投一些普通公司,等面出了心得再去投理想的公司。
  • 不熟悉的技术不要主动提。
  • 对于那种实习期6个月还打8折的公司,除非你没有其他选择了,否则不要去。 另外,小公司喜欢在薪水上压你,开的时候适当提高。
  • 不要去参加招聘会,纯粹是浪费时间。
  • 把面试当作一次技术的交流,不要太在意是否能被录取。
  • 公司一般面完就决定是否录取了,让你回去等消息这种情况一般没戏,无论你自己觉得面的有多好。
  • 尽量少通过电话面试,效果不好。
  • 在面试的日子里,要保持每天学习,无论是学习新东西还是复习旧东西。
  • 拿到offer了,问问自己这个公司让自己100%满意了吗,如果不是,请继续努力找更好的。
  • 通过面试官可以大概判断这家公司的情况。
  • 问到自己有深入研究过的知识,抓住机会好好表现,不要轻易放过。

五、学习干货

无论平时多忙该读的源码,该刷的题都不能落下。要明白,机会都是留给有准备的人,你做的准备越多,面对面试官的问题才越能显得游刃有余。

因此在闲暇的时候没事少玩手机,多看看书和刷刷题,或者clone开源项目源码下来读,要做到在面试前尽可能提升自己,这些都是未来面试的资本。

我这里帮大家整理收集了一些大厂最新的面试题合集,免费分享,有需要的可以点赞后通过文末的领取方式获取
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于文章篇幅有限,这里只展示一部分内容截图,就不一一展示出来了,有需要的朋友们可以【点击此处获取】,或者通过下方获得领取方式
在这里插入图片描述

以上是关于准备面试了,我要怎么在闲暇时间里学习才能掌握更强的java编程能力,在面试中脱颖而出?的主要内容,如果未能解决你的问题,请参考以下文章

在机器学习领域,PyTorch VS TensorFlow哪个更强?

ApplicationContext更强的功能-学习笔记

程序员小白如何通过Java面试?

有的页面文字不能复制,怎么才能啊?

面试:谈谈你对大数据的理解

经典大数据面试题