Java中级面试题记录(一)

以下面试题没有进行分类,但是是本人亲身面试总结得来的哟,大家参考下,给个三连,三克油!!!

1. 简单的自我介绍

一定要自己提前练习好,组织好语言,不要慌,有条理的说清楚,控制在一分钟左右等。可以提前自己在家练习一遍,然后录音自己听,慢慢调整。

2.擅长什么技术?

这种问题,简直是送命题,就挑你复习的最好的部分去进行回答,集合、线程、框架啥的都可以

3.讲解下Dubbo的调用流程?如果不使用注册中心如何消费服务?

简述调用过程,Dubbo直连

4.Dubbo中服务注册的标签?消费服务的标签?

服务注册标签:dubbo:service 服务消费标签:dubbo:reference

5.谈谈你对JAVA语言的了解?

1.Java语言是 SUN公司 1995 年推出的一门高级编程语言,起初主要应用在小型消费电子产品上,后来随着互联网的兴起,Java语言迅速崛起,成为大型互联网项目的首选语言
2.Java是一种跨平台的语言,一次编写,到处运行,堪称“当今世界最重要、应用最广泛的编程语言”。
3.目前,Java的主要就业方向有三个Web开发、Android开发、客户端开发(桌面应用软件)等
4.Java分为不同的版本J2SE(主要开发桌面程序)、J2EE(主要开发Web系统)、J2ME(主要开发安卓APP)

6.jre和jdk以及jvm的区别?

jdk 最小开发环境,包含jre以及一些开发所必须的类库
jre 最小运行环境,包含jvm
jvm java虚拟机

7.java的执行流程?

1.编译器把 .java 源代码文件编译成 .class 字节码文件
2.Java类加载器将 .class 字节码文件加载到内存,在 JVM 中进行解释并生成可执行代码。

8.jvm的内存? jvm内存模型在1.7和1.8中的调整?

jvm内存结构分为堆、栈、方法区、本地方法栈、程序计数器等几个部分
在jvm1.7中堆内存中包含永久代、1.8中移除了永久代并新增了元空间,且元空间是不占用堆内存,而是直接占用物理机内存
学习jvm参考地址:https://www.processon.com/view/link/6059e6db5653bb2225e13f6a

9.Class的解释和编译有没有了解?JVM优化有做过吗?用的压测工具是什么?

编译和解释参考地址: https://www.cnblogs.com/kuangsao/p/13387537.html
压测工具JMeter

10.Spring中的AOP? AOP中用到的哪些技术? 动态代理有哪几种实现方式? JDK的动态代理是否了解?

AOP(Aspect Oriented Programing)面向切面编程,是通过预编译方式或者是运行期期间动态代理实现功能扩展而不用修改源代码。通过AOP技术,实现一种通用的逻辑解耦,解决一些系统层面的问题,如日志,事务,权限等,从而实现高可用的可重用性和可维护性。

动态代理有两种实现方式,详情参考:https://blog.csdn.net/weixin_52851967/article/details/122433833

11.Mybatis的插件有用过哪些?

分页插件(PageHelper)、逆向工程插件(Generator)、MybatisX、MybatisLog

12.MySQL的分库、分表有没有了解过?分表的条件?分库的标准?

分表:垂直切分、横向切分
分库:一个模块对应一个库表(按模块划分)
分库分表工具:shardingjdbc、mycat

13.Redis用在哪方面?除了缓存以外还用到了什么呢?

主要还是用于缓存:登录验证码、图形验证码、文件下载的token等
任务抢占中用到了分布式锁

14.Redis的数据类型有几种,以及使用场景?项目中是只用了String吗?

String:缓存使用、计数器、商品编号、订单编号可以用INCR生成等
Hash(类似java中的Map>结构):早期购物车的实现、用户对象
List(类似java中的Queue):微信文章、订阅公众号等
Set:集合处理(交、并、补)、微信抽奖小程序
Zset:实现排行榜功能
BitMap:上班打卡、活动签到、统计活跃用户数

15.项目中有用到线程池吗?用的什么线程池?

ThreadPoolTaskExecutor(Spring框架中的线程池),不推荐jdk中的那几个线程池,而是自定义线程池,因为这样子最大线程数和阻塞队列的长度才可控!

16.说说你对MySQL数据库的了解?

各个方面都可以说,往你熟悉的方面说,MySQL的锁、索引、数据结构、优化等

17.MySQL数据库常用的存储引擎有哪些?他们区别是什么?

MYISAM:无事务、外键、行锁等,查询总数快、表文件有3个
INNODB::有事务、外键、行锁等、多个表共用一个表空间

18.工作中如何进行SQL的优化?

EXPLAIN查看SQL语句的执行计划,着重查看type ,key rows等字段 type字段性能顺序:
system>constant>eq_ref>ref>range>index>all
适当的创建索引,调整SQL语句等

20.是否了解Netty? 如果学习多久能上手?

了解过一点,这个不太确定

21.项目中MongoDb的使用场景?

以前弄问卷报告的时候用过一次,用于保存Excel插件生成的超长json字符串

22.项目中的主键策略,以及如何保证分布式环境中id不重复的?

雪花算法,通过zookeeper提供的数据中心id保证分布式不重复

22.Zookeeper的选举机制和监听机制有没有了解过?

选举机制:半数选举 监听机制:??

23.线程池中线程复用的原理?

https://blog.csdn.net/xiewenfeng520/article/details/107013665/
线程池将线程和任务进行解耦,线程是线程,任务是任务,摆脱了之前通过 Thread 创建线程时的一个线程必须对应一个任务的限制。
在线程池中,同一个线程可以从阻塞队列中不断获取新任务来执行,其核心原理在于线程池对 Thread 进行了封装,并不是每次执行任务都会调用 Thread.start() 来创建新线程,而是让每个线程去执行一个“循环任务”,在这个“循环任务”中不停的检查是否有任务需要被执行,如果有则直接执行,也就是调用任务中的 run 方法,将 run 方法当成一个普通的方法执行,通过这种方式将只使用固定的线程就将所有任务的 run 方法串联起来。

24.Dubbo几大模块之间如何进行交互的?

提供者 注册中心 消费者 监控中心
提供者提供服务到注册中心,消费者监听注册中心,发现对应服务即进行消费

25.Dubbo哪几种负载均衡策略?

轮询
权重随机
最小活跃数:若存在多个最小相同活跃数的,则再随机(活跃数:可以理解为服务器正在处理请求的个数)
一致性Hash:根据请求参数的Hash来决定选择哪个服务,因此相同参数的请求总是发到同一个服务提供者

26.熔灾处理工作中有用到吗?

这里是引用

27.工作中如何处理Dubbo超时?

链接: https://blog.csdn.net/ChineseSoftware/article/details/122472459
超时分为服务端超时和客户端超时:
消费端超时:只需捕获超时异常然后进行回滚或其它操作
服务端超时:
①Dubbo 自身有重试机制,调用超时后会发起重试,Provider 端需考虑幂等性。
②使用补偿事务或异步 MQ 保持最终一致性(需要写一些与业务无关的代码来保持数据最终一致性。比如在 Provider 端加个 check 方法,检查是否成功,具体实现还需要结合自身的业务需求来处理。)
③基于时间回滚,在 Consumer 端调用时设置两个参数 ctime、ttime 分别表示调用时间、超时时间,将参数打包发给 Provider。Provider 收到两个参数后进行操作,如果执行时间越过 ttime 则回滚数据,否则正常执行。

28.如何保证接口的幂等性,项目中具体实现?

前端拦截、使用token机制、通过代码控制
链接: https://blog.csdn.net/Javaesandyou/article/details/124097590

29.分布式锁,项目中如何实现分布式锁?

Redisson、Lua脚本

30.线程池的核心参数?线程池的工作原理?

核心线程数
最大线程数
空闲线程存活时间
空闲线程存活时间单位
阻塞队列
线程创建工厂
拒绝策略:抛异常、退回调用者、丢弃、丢弃第一个

31.Mybatis的拦截器是否用过?

用过,通过自定义拦截器实现自动添加创建人、创建时间等公用字段

32.Java中常见的锁有哪些,请解释一下?

公平锁:
非公平锁:
悲观锁:
乐观锁:
可重入锁(递归锁):
自旋锁:
写锁(独占锁):
读锁(共享锁):

33.Java的内存模型?JVM的内存模型?

两者是不一样的东西,JVM内存模型就是我们平时熟悉的(栈、堆、本地方法栈、程序计数器、方法区等)
Java中级面试题记录(一)_第1张图片
Java内存模型 是 JMM (Java Memory Model,简称 JMM),是定义了线程和主内存之间的抽象关系
参考地址: https://blog.csdn.net/weixin_43582499/article/details/123919792

34.跨库时,如何保证分布式事务?

分布式事务Seata中间件

35.RabbitMQ有用过吗?工作中有涉及到过队列吗?

有,模块间数据传输采用RabbitMQ

36.MySQL中的ACID是什么意思?

事务的四个特性:
原子性
一致性
永久性
隔离性

37.工作中熟悉的设计模式?

单列模式
普通工厂模式
策略模式
代理模式
模板模式
。。。

38.单例模式的几种写法?

实现单列的写法有多种,但是常用线程安全的写法有3种
懒汉式、饿汉式、枚举

参考链接: https://blog.csdn.net/lingerlan510/article/details/121943784

39.多线程创建的方式?

Java中级面试题记录(一)_第2张图片

40.线程的几种状态?以及几种状态之间的变化?

共有6种状态,每个状态解释如下: 初始化、运行、阻塞、等待、超时等待、终止

Java中级面试题记录(一)_第3张图片
参考链接:
Java线程的6种状态及切换(透彻讲解)

41.sleep和wait方法区别?
  • sleep()方法是Thread的静态方法,而wait是Object实例方法
  • 在同步块中sleep方法不会释放锁,而wait方法会释放锁
  • wait能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
  • sleep和wait使用时都必须捕获异常(网上有的说wait不用捕获,是错误的,不捕获则会出现编译错误)

参考链接: Sleep()和wait()方法的区别

42.this关键字和super关键字?

1、this和super一样,都是对象内部的引用变量,只能出现在 对象内部;
2、this指向当前对象自己,super指向当前对象的父类型特征,故this的东西比super多,也就是super是this的一部分;
3、this()和super()都只能出现在构造方法的第一行,故this()和super()方法不能共存,当一个类的构造方法第一行中没有this(),也没有super(),系统默认有super()方法;
4、this()是构造方法中调用本类其他的构造方法,super()是当前对象构造方法中去调用自己父类的构造方法。

43.Springboot和springMvc区别?

mvc是一种架构模式,主张将代码分为模型(Model)、视图(View)、控制器(Controller),SpringMvc则是这种架构的一种实现,这种架构的实现还有以前的struct2。而SpringBoot则是为了简化企业级应用的开发而出现的一种框架,两者有着本质的区别,因此无法去进行对比。

44.了解CAP理论吗?解释一下CAP理论呢?

CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得,因为在分布式系统中P是必不可少的,因此只会存在AP和CP。

45.SpringCloud的五个组件,以及各自作用?

网关:目前一般采用SpringCloud GateWay,提供统一的路由方式、动态路由,鉴权、日志监控、流量控制等
注册中心:Nacos,存放和调度服务,实现服务和注册中心,服务和服务之间的相互通信
配置中心:Nacos,配置集中管理、在系统运行期间可动态配置、配置修改自动刷新
客户端负载均衡:Ribbon 进行客户端的负载均衡
服务降级: Spring Cloud Hystrix 避免在微服务架构中个别服务出现异常时引起的故障蔓延
链接: Spring Cloud全家桶主要组件及简要介绍

44.说一下MAVEN的生命周期和依赖原则

生命周期:
Java中级面试题记录(一)_第4张图片
依赖原则:

  • 路径最短优先原则
  • 路径长度相同则按pom文件中申明顺序优先
  • 覆写优先(子pom内声明的优先于父pom中的依赖)
45.乐观锁与悲观锁是什么?两种锁各自的优缺点?
  • 乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现
  • 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁
  • 优缺点:
    乐观锁-优点:轻量级锁,避免了线程切换的开销。
    乐观锁-缺点:会有ABA问题、只能对单一变量加锁、自旋操作导致额外开销
    悲观锁-优点:因为锁的是代码块,可以锁住多个变量。
    悲观锁-缺点:重量级锁,加锁、释放锁操作会有开销,而且操作系统层面的上下文切换和线程调度也会引起很大的开销。
  • 参考链接: https://baijiahao.baidu.com/s?id=1740502410051177537&wfr=spider&for=pc
46.ThreadLocal有什么作用?有哪些使用场景?

用于线程间进行数据隔离
最常见的ThreadLocal使用场景为用来解决数据库连接、Session管理等
链接: ThreadLocal作用、场景、原理

47.synchronized和valatile的区别是什么?

synchronized是java中的锁
volatile是java虚拟机提供的轻量级的同步机制,有三大特性:可见性,不保证原子性,禁止指令重排
链接: synchronized和volatile的区别

48.MySQL数据库的隔离级别是什么?分别是?

默认是可重复读
隔离级别总共包含:读未提交、读已提交、可重复读、串行化

49.MySQL中索引的种类有哪些?

主键索引、唯一索引、普通索引、全文索引、空间索引、前缀索引等等

50.对比一下SpringCloud和Dubbo微服务架构的优缺点?

链接: 微服务Dubbo和SpringCloud架构设计、优劣势比较

51.Eureka和Zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?

Java中级面试题记录(一)_第5张图片

52.什么是feigin?它的优点是什么?

Feign就是一个Netflix公司开发的用于远程调用服务的框架/工具,让开发者可以更少耦合、更少代码、更加快,也更兼容的方法进行远程服务调用。
优点:

  • feign采用的是基于接口的注解(操作简单)
  • feign整合了ribbon,具有负载均衡的能力
  • 整合了Hystrix,具有熔断的能力
53.什么是服务熔断?什么是服务降级?
  • 服务熔断:服务熔断是指当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用(类似于我们家用的保险丝)。
  • 服务降级:服务降级是指当我们系统核心功能服务出现压力过载时,我们暂时舍弃非核心业务服务(返回个友好的提示),以减轻服务器压力来保证我们的核心功能可以正常运行。
54.分布式事务的解决方案,以及优缺点的对比?

seata

55. 项目中如何判断什么时候使用接口,什么时候使用抽象类?

链接: 什么时候使用接口,什么时候使用抽象类

你可能感兴趣的:(JAVA之面试准备,java,面试)