编程语言
首页 > 编程语言> > 2019最新java面试葵花宝典

2019最新java面试葵花宝典

作者:互联网

2019最新java面试葵花宝典

转载自:作者 the Rune Mage
原文地址:https://blog.csdn.net/weixin_38405770/article/details/86657613

[转] 15年毕业到现在也近四年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中,最终有幸去了网易。
但是要特别感谢点我达的领导及HR,真的非常非常好,很感谢他们一直的关照和指导。
回家后,我对这次面试经历,做了总结,希望对想要跳槽的朋友们有个借鉴。

面试整体事项

1.简历要准备好,联系方式一定要正确清晰醒目,项目经历按照时间倒序阐述,注意描述自己在项目中承担的职责,简历的模板尽量选择简洁的,毕竟程序员大部分还是喜欢简单明了的。
2.推荐boss直聘,我觉得很好用(不是广告)。
3.一般的整体面试流程都是电面->现场面->HR面->等着。
4.不要觉得HR说让你回去等消息就是GG了,他们也要跟你之前的面试官讨论,再向领导汇报,如果说不急可能还要和其他候选人比较,所以HR让你回去等消息绝对不是说明你完蛋了。
5.面试前准备好自我介绍,1分钟左右就可以,可以写在纸上,电面可以照着念,等你到了现场面了基本也都快背下来你的自我介绍了。
6.准备好扎实的基础,这是一切的根源,没实力怎么都没用的。
7.面试中你可以把你的面试官往你会的知识上引导(我遇到过你会什么他不问什么的)。
8.遇到了设计类题目不要着急,面试官不是为了让你几分钟设计一个高并发高可用设计模式完美的架构,只是想看看你的思路,看看你应变的能力,然后给你些提示看看你能否迅速的调整。
9.offer都会有的,不要着急,把面试当成一个交流的过程。

需要准备的知识

以下为在近期面试中比较有印象的问题,也就不分公司了,因为没什么意义,大致分类记录一下,目前只想起这么多,不过一定要知道这些问题只是冰山一角,就算都会了也不能怎么样,最最重要的,还是坚实的基础,清醒的头脑。

java面试题

Java基础

1.HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。

点击查看HashMap原理浅析

2.HaspMap扩容是怎样扩容的,为什么都是2的N次幂的大小。

点击查看HashMap扩容

3.HashMap,HashTable,ConcurrentHashMap的区别。

点击查看

4.极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现的。

5.HashMap在高并发下如果没有处理线程安全会有怎样的安全隐患,具体表现是什么。

6.java中四种修饰符的限制范围。

访问权限 本类 本包 不同包子类 不同包非子类
public
protected
default
private

7.Object类中的方法。

public class Test {
public static void main(String[] args) {
new Test();
System.gc();
}

<span class="token annotation punctuation">@Override</span>
<span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">finalize</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> Throwable <span class="token punctuation">{</span>
    System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"This is Test finalize()"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>

}

输出:

This is Test finalize()
  • 1

8.接口和抽象类的区别,注意JDK8的接口可以有实现。

参数 抽象类 接口
默认的方法实现 它可以有默认的方法实现 接口完全是抽象的,他不存在方法的实现,1.8后它可以有默认的方法实现
实现 子类使用extends关键字来继承抽象类,如果子类不是抽象类的话,他需要提供抽象类中所有声明的方法的实现 子类使用关键字implements来实现接口,他需要提供接口中所有生命的方法的实现,1.8排除默认实现的方法
构造器 抽象类中可以有构造器 接口中不能有构造器
与正常java类的区别 除了你不能实例化抽象类外,它和普通java类没有任何区别 接口是完全不同的类型
访问修饰符 抽象方法可以有pubic,protected这些修饰符 接口方法默认修饰符是public,你不可以使用其他修饰符,1.8增加default修饰默认实现
main方法 抽象类中可以有main方法并可以运行它 接口中没有main方法,因此我们不能运行它
多继承 抽象类可以继承一个类实现多个接口 接口只能继承一个或多个接口
速度 它比接口速度要快 接口速度稍慢,因为它需要时间去寻找在类中实现的方法
添加新方法 如果你往抽象类中添加新方法,你可以给他提供默认的实现,因此你不需要改变你现在的代码 如果你往接口中添加新的方法,你必须改变实现接口的实现类,1.8后如果在接口中添加默认实现的方法则不需要.
变量 和普通java类相同 接口中只能有static、final变量,不能有其他变量。

9.动态代理的两种方式,以及区别。

10.Java序列化的方式。

11.传值和传引用的区别,Java是怎么样的,有没有传值引用。

传值还是传引用?

​ Java中没有引用传递,Java所有操作都是传值操作!都是传值操作!都是传值操作!重要的事情说三遍。

12.一个ArrayList在循环过程中删除,会不会出问题,为什么。

一个ArrayList在循环过程中删除,会不会出问题,为什么?

​ for循环遍历,存在漏删

​ foreach循环删除,抛出异常ConcurrentModificationException

foreach循环删除集合中倒数第二个对象时不会发生ConcurrentModificationException异常

13.@transactional注解在什么情况下会失效,为什么。

@transactional注解在什么情况下会失效,为什么。

​ 默认情况下,Spring会对unchecked异常进行事务回滚

​ 类似的还有norollbackFor,自定义不回滚的异常 等;

数据结构和算法

1.B+树。

B树和B+树的插入、删除图文详解

2.快速排序,堆排序,插入排序(其实八大排序算法都应该了解)

八种常见经典排序算法

3.一致性Hash算法,一致性Hash算法的应用。

对一致性Hash算法,Java代码实现的深入研究
白话解析:一致性哈希算法

JVM

1.JVM的内存结构。

全面理解Java内存模型

全面理解Java内存模型(JMM)及volatile关键字

JDK1.8 JVM运行时数据区域划分

2.JVM方法栈的工作过程,方法栈和本地方法栈有什么区别。

3.JVM的栈中引用如何和堆中的对象产生关联。

​ 对象生成时,产生的首地址存储在栈中,这样两者就关联起来了。

4.可以了解一下逃逸分析技术。

Java之JVM逃逸分析

5.GC的常见算法,CMS以及G1的垃圾回收过程,CMS的各个阶段哪两个是Stop the world的,CMS会不会产生碎片,G1的优势。

JVM 垃圾回收机制和常见算法

常见GC算法,CMS以及G1的垃圾回收过程,CMS的各个阶段哪两个是Stop the world的,CMS会不会产生碎片,G1的优势。

G1和CMS垃圾收集器

为什么CMS两次标记时要 stop the world
详解 JVM Garbage First(G1) 垃圾收集器
​ CMS-initial-mark 初始标记和CMS-remark 重新标记会Stop the world

​ 由于CMS采用标记清除算法,默认并不使用标记整理算法,可能会产生很多碎片,因此,这些碎片无法完成大对象向老年带转移,因此需要进行CMS在老年带的Full GC来合并碎片。

6.标记清除和标记整理算法的理解以及优缺点。

7.eden survivor区的比例,为什么是这个比例,eden survivor的工作过程? JVM如何判断一个对象是否该被GC,可以视为root的都有哪几种类型? Java有没有主动触发GC的方式(没有)?Java是否可以GC直接内存。?

[JVM] java虚拟机内存管理机制及垃圾收集

8.强软弱虚引用的区别以及GC对他们执行怎样的操作。

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用。

9.Java类加载的过程。

java中类的加载顺序介绍(ClassLoader)

10.双亲委派模型的过程以及优势。

JVM类加载机制之双亲委派模型

类加载器与双亲委派模型

11.常用的JVM调优参数。

JVM解读-调优常用参数

JVM-调优参数-JDK1.8

12.dump文件的分析。

Java内存泄漏分析系列之六:JVM Heap Dump(堆转储文件)的生成和MAT的使用
JConsole
Jhat
GcViewer
IBM Heap Analyzer

多线程

1.Java实现多线程有哪几种方式。

2.Callable和Future的了解。

Java多线程编程:Callable、Future和FutureTask浅析

3.线程池的参数有哪些,在线程池创建一个线程的过程。

Java并发编程:线程池的使用

4.volitile关键字的作用,原理。

volatile关键字的作用、原理

5.synchronized关键字的用法,优缺点。

synchronized关键字用法

6.Lock接口有哪些实现类,使用场景是什么。

Java并发编程:Lock

7.悲观锁,乐观锁,优缺点,CAS有什么缺陷,该如何解决。

悲观锁、乐观锁 乐观锁的一种实现方式-CAS

8.ABC三个线程如何保证顺序执行。

三个线程轮流执行顺序打印ABC

如何确保三个线程顺序执行?

9.线程的状态都有哪些。

线程的五大状态

10.sleep和wait的区别。

  1. 对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。
  2. sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
  3. 在调用sleep()方法的过程中,线程不会释放对象锁。
  4. 而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

11.notify和notifyall的区别。

先说两个概念:锁池和等待池

Reference:java中的锁池和等待池

然后再来说notify和notifyAll的区别

Reference:线程间协作:wait、notify、notifyAll

​ 综上,所谓唤醒线程,另一种解释可以说是将线程由等待池移动到锁池,notifyAll调用后,会将全部线程由等待池移到锁池,然后参与锁的竞争,竞争成功则继续执行,如果不成功则留在锁池等待锁被释放后再次参与竞争。而notify只会唤醒一个线程。

12.ThreadLocal的了解,实现原理。

深入剖析ThreadLocal实现原理以及内存泄漏问题

揭秘ThreadLocal

13.Fork/Join框架介绍及实例讲解
Fork/Join框架详解
JAVA中的Fork/Join框架
Fork/Join框架及其性能介绍
运用ForkJoin多线程框架实现归并排序
14.CountDownLatch、CyclicBarrier和 Semaphore
CountDownLatch、CyclicBarrier和 Semaphore

15.AQS
Java并发之AQS详解

Java并发之AQS详解

数据库相关

1.常见的数据库优化手段

sql优化的几种方法

2.索引的优缺点,什么字段上建立索引

建立数据库索引的优缺点,分析一张表上如何建立索引

Mysql性能优化

3.数据库连接池。

Druid 介绍及配置

Druid数据库连接池两种简单使用方式

4.数据库事务。

MySQL——事务(Transaction)详解

5.数据库锁。

数据库死锁分析与解决

计算机网络

1.TCP,UDP区别。

2.三次握手,四次挥手,为什么要四次挥手。

理解TCP/IP三次握手与四次挥手的正确姿势

3.长连接和短连接。

Connection:keep-alive
  • 1

4.连接池适合长连接还是短连接。

​ 我的的理解最大连接数减去最小连接数为短连接,最小连接数是长连接。

设计模式

1.观察者模式

JAVA设计模式之观察者模式

2.代理模式

设计模式—代理模式

3.单例模式,有五种写法,可以参考文章单例模式的五种实现方式

单例模式的八种写法比较

4.可以考Spring中使用了哪些设计模式

spring中的设计模式

分布式相关

1.分布式事务的控制。

一篇文章带你学习分布式事务

常用的分布式事务解决方案

分布式事务几种实现方式

2.分布式锁如何设计。

【分布式缓存系列】集群环境下Redis分布式锁的正确姿势

【分布式缓存系列】Redis实现分布式锁的正确姿势

3.分布式session如何设计。

集群/分布式环境下5种session处理策略

分布式集群系统下的高可用session解决方案—Session共享

Shiro集成Redis实现分布式集群Session共享

4.dubbo的组件有哪些,各有什么作用。

5.dubbo是如何利用接口就可以通信的。

Dubbo基本原理机制

6.Zookeeper的负载均衡算法有哪些。

zookeeper 负载均衡 核心机制-实现原理 包含ZAB协议

缓存相关

1.Redis有哪些适合的场景?

2.redis支持哪些数据结构。

​ String、List、Set、Sorted Set、hashes

3.redis是单线程的么,所有的工作都是单线程么。

​ 是的,都是单线程

​ redis为什么不用多线程(不划算呗)

​ (1)纯内存操作;

​ (2)多线程仍然会有上下文切换的损耗,虽然比进程切换损耗小;

​ (3)采用了非阻塞I/O多路复用机制

4.使用过Redis分布式锁么,它是什么回事?
先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。
这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?
这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!对方这时会显露笑容,心里开始默念:嗯,这小子还不错。

5.redis的部署方式,主从,集群。

redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

6.redis持久化策略。

Redis学习笔记9–Redis持久化

框架相关

1.SpringMVC请求流程

一张图理清SpringMVC工作原理

2.Mybatis如何找到指定的Mapper的,如何完成查询的。

mybatis如何通过接口查找对应的mapper.xml及方法执行详解

3.Quartz是如何完成定时任务的。

Quartz的定时任务实现

4.自定义注解的实现。

注解Annotation实现原理与自定义注解例子

5.Spring使用了哪些设计模式。

spring中的设计模式

6.Spring的IOC有什么优势。

谈谈对Spring IOC的理解

Spring IoC有什么好处呢?

6.Spring的AOP有什么优势。

AOP——SpringAOP

Spring3:AOP

我们使用AOP的好处

7.Spring如何维护它拥有的bean。

Spring Bean的生命周期

8.常用框架整理。
SpringIOC

SpringMVC常见面试题总结(超详细回答)

Struts2相关面试题

Spring常见面试题总结

Mybatis 框架实现原理

Mybatis 的常见面试题

Mybatis常见面试题总结

java面试——Hibernate常见面试题

Hibernate面试精华知识点---------不看你会后悔

Other

1.JDK8的新特性,流的概念及优势,为什么有这种优势。

【读书笔记】《写给大忙人看的Java SE 8》——Java8新特性总结

Java8新特性

一些小建议

1.可以去leetcode上刷题换换思路。
2.八大排序算法一定要手敲一遍(快排,堆排尤其重要)。
3.了解一些新兴的技术。
4.面试之后面试官都会问你有没有什么问题,千万不要没问题,也别傻乎乎的问一些敏感问题。
5.了解你要面试的公司的产品及竞争产品。

无论是哪家公司,都很重视高并发高可用的技术、重视基础和JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,这样会不利于自己的发挥。在面试过程中也不应该只看中薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。
最后,希望大家都能找到适合自己的公司,开开心心的撸代码。

标签:Java,java,对象,Redis,接口,2019,线程,葵花宝典,方法
来源: https://blog.csdn.net/qq_37802495/article/details/104697440