乐趣区

吐血整理-Java开发-大厂面试

这是我今年从三月份开始,主要的大厂面试经过,有些企业面试的还没来得及整理,可能有些没有带答案就发出来了,还请各位先思考如果是你怎么回答面试官?这篇文章会持续更新,请各位持续关注,希望对你有所帮助!

平安产险面试(电话面试)深圳

先通过邮件发了一份线上测评(EQ+IQ), 做完达到要求后才能有后续的面试机会,没有通过 两年之内 不能进平安任何一家公司。

一面

自我介绍

看我工作时间不长,问我为什么频繁跳槽(间接问离职原因)

关注过平安哪些架构?

我就说了军哥的 pass 平台

解释下什么是用户态和内核态?两者有什么区别?

内核态 :当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。其他的都属于 用户态

用户程序运行在用户态, 操作系统运行在内核态(操作系统内核运行在内核态,而服务器运行在用户态)。用户态不能干扰内核态. 所以 CPU 指令就有两种, 特权指令和非特权指令. 不同的状态对应不同的指令。特权指令:只能由操作系统内核部分使用,不允许用户直接使用的指令。
如:I/ O 指令、置终端屏蔽指令、清内存、建存储保护、设置时钟指令(这几种记好,属于内核态)。非特权指令:所有程序均可直接使用。

所以:

系统态(核心态、特态、管态):执行全部指令。

用户态(常态、目态):执行非特权指令。

用户态和内核态的理解和区别

用过 Spring boot 哪些版本?新版本相对于旧版本有哪些改变?

https://github.com/spring-projects/spring-boot/wiki

web.xml 中 DispatcherServlet 的作用?

Spring MVC 中的 DispatcherServlet 作用

DispatcherServlet 过程详解

讲下 web.xml 中 Filter 类(过滤器)

web.xml 中的配置,servlet,filter,listener 的作用和原理

使用 Spring boot 以后,与之前系统的配置方式区别方面?(Spring boot 和 Spring MVC 使用和配置上的区别?)

SpringBoot – 注册 Servlet、Filter 和 Listener(代码和注解两种方式)

spring boot 与 spring mvc 的区别是什么?

好像还有个 reactivity 什么的, 当时记不清了。

你们如果面试碰到了相关经典题目。欢迎补充!

二面

整理中

飞猪面试(电话面试)杭州

首先这个面试机会是来自于内推,当然内推的人和我一面的面试官都是同一个人,所以 嘿嘿嘿 你懂得 …

一面

自我介绍

介绍一下你这边最熟悉的项目?在开发过程中印象最深刻地方?

Springboot 2.0.0 和 Springboot 1.5.6 的区别?

https://github.com/spring-projects/spring-boot/wiki

有没有看过 Springboot 的源码?(很尴尬,没有研究过)

https://github.com/spring-projects/spring-boot

Springboot 中遇到的一些坑及解决方法?

Springboot 与 shiro 整合遇到的坑

有没有看过 Spring 的源码?(很尴尬,了解过)

https://github.com/spring/spring

你现在对 Dubbo 了解得怎么样?(作为这个项目的贡献者,没有深入阅读源码和实践真的是汗颜)

https://github.com/apache/incubator-dubbo

30 道 Dubbo 面试题及答案

JDK 1.9 的新特性?(我说:没有用过 1.9,感觉 1.9 不是很稳定, 只用过 1.8)那说一下 1.8 有哪些新特性?

jdk8, jdk8u, jdk9, jdk10 的侧重和区别是什么?

JDK 9 新特性汇总

JDK1.8 新特性(持续更新)

JDK 有哪些实现代理方法?JDK 动态代理和 CGlib 动态代理有什么区别?

深入理解静态代理与 JDK 动态代理

JDK 动态代理与 CGLib 动态代理相关问题

介绍下 OOM? 开发过程中遇到过哪些 OOM, 怎样解决的?

OutOfMemoryError,当 JVM 因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个 error(注:非 exception,因为这个问题已经严重到不足以被应用处理)。

JVM 发生 OOM 的 8 种原因、及解决办法

因为 OutOfMemoryError 是可以 catch 的。catch 之后吞掉的话程序还能试着继续运行。例如说以前见过的一个案例是:一个 Java 服务器端应用,有段代码没写对导致有一个线程在疯狂创建大数组对象——直到 OOM。这个线程注册的 uncaught exception handler 捕获到了这个异常,记录了日志,然后就把这个异常吞掉了。这样还能继续正常跑下去是因为:只是一个创建很大的数组对象的请求失败了而已,而出错的那个方法由于异常处理已经被退出了,程序的其它部分并没有受影响。

介绍下 Java 内存模型?

在 JDK1.2 之前,Java 的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。

要解决这个问题,就需要把变量声明为 volatile,这就指示 JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。

说白了,volatile 关键字的主要作用就是保证变量的可见性然后还有一个作用是防止指令重排序。

你这边还有什么问题?

二面

整理中

上汽大通

一套 J2EE+Oracle 的笔试 大概有五六张纸 我只依稀记得几道题

现场面试

main 方法中是否可以调用非静态方法

可以,一种方法将 main 方法写成静态方法,另一种将当前类实例化再调用它的非静态方法,例如:

public class Test {
private int a;
public int getnumber() {setnumber(8);
return this.a;
}
public int setnumber (int a) {return this.a=a;}
public static void main(String args[]){}}

改为:

public class Test {
    private int a;
 
    public int getnumber() {setnumber(8);
        return this.a;
    }
 
    public int setnumber(int a) {return this.a = a;}
 
    public static void main(String args[]) {Test t = new Test();
//      t.setnumber(10);
        int a = t.getnumber();
        System.out.println(a);
    }
}

解释下 AOP 和 IOC 的工作机制?

AOP 思想的实现一般都是基于代理模式,在 JAVA 中一般采用 JDK 动态代理模式,但是我们都知道,JDK 动态代理模式只能代理接口而不能代理类。因此,Spring AOP 会这样子来进行切换,因为 Spring AOP 同时支持 CGLIB、ASPECTJ、JDK 动态代理。

Spring IOC 的初始化过程:

XML ——> Resource ——> BeanDefinition ——> BeanFactory

如何理解 Spring 中的 IOC 和 AOP

servlet 的生命周期

javax.servlet.Servlet 接口中的 init()、service()和 destroy()方法来表示,主要包括四个阶段:

  • 加载和实例化
  • 初始化
  • 请求处理
  • 服务终止

String、StringBuffer 和 StringBuilder 三者区别?

JAVA 中 String 与 StringBuffer,StringBuilder 的区别

StringBuffer 和 StringBuilder 的区别是什么?

怎么实现 synchronized 的可重入?

synchronized 是可重入的,对同一个执行线程,它在获得了锁之后,在调用其他需要同样锁的代码时,可以直接调用。

可重入是通过记录锁的持有线程和持有数量来实现的,当调用 synchronized 保护的代码时,检查对象是否已被锁,如果是,再检查是否被当前线程锁定,如果是,增加持有数量,如果不是被当前线程锁定,才加入等待队列,当释放锁时,减少持有数量,当数量为 0 时才释放整个锁。

https://snailclimb.top/JavaGu…

RuntimeException 和 Exception 的区别?

java 基础学习(12)RuntimeException 和 Exception

wait()和 sleep()的区别?

sleep() 和 wait() 的这 5 个区别,你知道几个?

有三个线程 t1、t2、t3。确保三个线程 t1 执行完后 t2 执行,t2 执行完成后 t3 执行?

用 Thread 类的 join 方法实现这一效果。

& 和 && 的区别?

电路问题总结:

&:不管怎样,都会执行 ”&” 符号左右两边的程序

&&:只有当符号 ”&&” 左边程序为真 (true) 后,才会执行符号 ”&&” 右边的程序。

运算规则:

&:只要左右两边有一个为 false,则为 false;只有全部都为 true 的时候,结果为 true

&&:只要符号左边为 false,则结果为 false;当左边为 true,同时右边也为 true,则结果为 true

sql 语句 selectgroup byorder bywhere 先后顺序?

写的顺序:select … from… where…. group by… having… order by..

执行顺序:from… where…group by… having…. select … order by…

解释 Java 内存模型?

见飞猪面试

JDBC 如何连接数据库?

JDBC【介绍 JDBC、使用 JDBC 连接数据库、简单的工具类】

两位技术负责人 + 部长(周)简单聊了一下,自己的项目和经验,遇到过哪些问题?怎么解决的?怎么设计数据库模型?

浩鲸科技(电话面试)杭州

一面

自我介绍

谈一下自己最熟悉的项目中的业务框架?

(登录 + 权限 VIP 服务绑定)

是怎样提交给前端接口的?

如何解决前后端 token 过期问题?

每隔一段时间在后端请求中都将 token 传送过去,获取新的 token 值,并返回前端放入 cookies 中并记录 cookie 的存储失控, 达到更新 cookie 中 token 的效果; 而长时间不做操作的话我们就可以让他的 token 失效退出系统了。

如何解决前后端 token 过期问题

如何实现在登录中高可用?什么是高可用?

用户信息存 redis;加节点,加机器,多部署实例。

什么是高可用

你实际 java 开发多长时间?

当问我这个问题的时候,我就知道前面答得并不是很好,所以面试官后面问的都是基础题。

抽象类和接口有什么区别?

接口和抽象类有什么区别?

用过哪些集合?list 和 set 的区别?

深入理解 Java 中的 List、Set 与 Map 集合

用过哪些设计模式?

如何在代码中应用设计模式

你这边还有什么问题?

因为这个项目是和杭州阿里系的大佬们一起开发盒马鲜生这款产品,所以着重问了下开发产品情况和团队架构。

你现在的薪资和期望薪资?

照实际的说,大厂一般都会查银行流水。

二面

整理中

上海爱海斯信息技术有限公司(杏仁医生)

一面

自我介绍

mysql 常用存储引擎有哪些?分别有什么特点和区别?

MySQL 常用存储引擎

谈一谈 MySQL 的四种事务隔离级别,有哪些区别?

MySQL 的四种事务隔离级别

说一下非公平锁?平时用到的是非公平锁多一点还是公平锁多一点?

非公平锁的优点是可以减少唤起线程的开销,整体的吞吐效率高,因为线程有几率不阻塞直接获得锁,CPU 不必唤醒所有线程。缺点是处于等待队列中的线程可能会饿死,或者等很久才会获得锁。

谈一下 volatile 关键字你是怎么理解的?能否保证原子性?(比较 synchronized 关键字)

volatile 关键字是线程同步的轻量级实现,所以 volatile 性能肯定比 synchronized 关键字要好。但是 volatile 关键字只能用于变量,而 synchronized 关键字可以修饰方法以及代码块。synchronized 关键字在 JavaSE1.6 之后进行了优化,主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化,执行效率有了显著提升,实际开发中使 用 synchronized 关键字的场景还是更多一些。

多线程访问 volatile 关键字不会发生阻塞,而 synchronized 关键字可能会发生阻塞。

volatile 关键字能保证数据的可见性,但不能保证数据的原子性。synchronized 关键字两者都能保证。

volatile 关键字主要用于解决变量在多个线程之间的可见性,而 synchronized 关键字解决的是多个线程之间访问资源的同步性。

谈一下乐观锁和悲观锁?

面试必备之乐观锁与悲观锁

谈一下守护线程?用到过哪种?

java 多线程 守护线程

ArrayList 和 LinkedList 的区别?

Java 中 ArrayList 和 LinkedList 区别

简单介绍下 java 中常见的引用类型

java 基本类型与引用类型

## 湖南兴盛优先电子商务有限公司
说下面试前奏,我和这个公司互相鸽了一次,第一次我是因为那次在地铁里,信号不好怕影响面试效果,就提前说明了;结果第二次本来约的是晚上 8:00,结果 9:15 分打电话过来面试,fuck,我还在洗衣服。面试官说只要 20 分钟,如果不方便可以下次约,好像这个面试官是已经下班了,在家里跟我打得电话,我觉得都不容易,还是同意面了。
说来也奇怪,竟然没让我自我介绍,直接上来就跟我聊参与的开源项目 Dubbo, 问我为这个项目贡献了哪一块?我轻描淡写的描述了主要负责 Dubbo 的哪些生态,和如何管理控制版本的发布等等。因为我主要负责官网的迭代和维护,而 Apache 项目之间的沟通都是英文交流,老外喜欢用邮件列表的形式来讨论,不会像国内的开源项目,任务认领的方式是在社交软件上进行沟通,老外根本就不用。顺便问了下我英语怎么样?我讲完后,顺便介绍了下我自己。接下来正式进入面试环节。

### 一面

#### 谈一谈 Dubbo 序列化

#### 谈一下 Dubbo 的整体架构中的网络传输层(Transport)?

#### 说一下你最熟悉的项目中,遇到的印象最深刻的问题?是怎么解决的?

#### 说一下在 HashMap 中遇到的 hash 冲突是如何解决的?

#### 谈一下 List 接口有哪些特性?

#### 说一下 ArrayList 和 LinkedList 区别?

#### foreach 循环里进行元素的 remove/add 操作,这样合理吗?

#### 当有线程 T1、T2 以及 T3,如何实现 T1 -> T2 -> T3 的执行顺序?以上问题请至少提供另外一种实现?

好像还有一个问题?是一个专有技术名词的解释?我真的没听过 ……

退出移动版