总结了一些相关的java面试题,虽然我是比较反感背面试题的,但是还是需要了解一些基础概念的,不然面试真的可能会很尴尬

1 java基础:

1 介绍一下Java中常见的容器2 Iterator 和 ListIterator 有什么区别?Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。 ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。3 object类中的常用方法,作用是什么?

2 项目中一些基础知识的使用了解情况

1 项目中的范型怎么使用的,如何自定义异常,分布式事物的解决方案,接口中如何保证幂,定时任务的顺序执行2 长链接和短链接的区别是什么,项目中哪里用到了3 kafka的顺序读取是如何实现的

3 多线程

1 线程的几种状态:创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程   调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪  2 项目中线程池怎么使用的3 多线程锁的集中状态及其描述无状态锁,偏向锁,轻量级锁和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级4 ThreadLocal 是什么?有哪些使用场景?线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放,Java 应用就存在内存泄露的风险。5 synchronized 和 volatile 的区别是什么?volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的。volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译

4 数据库

 1 索引的实现原理,底层数据结构2 sql优化3 mysql的存储引擎myisam和innodb的区别

5 JVM

1 类加载分为以下 5 个步骤:加载:根据查找路径找到相应的 class 文件然后导入;检查:检查加载的 class 文件的正确性;准备:给类中的静态变量分配内存空间;解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址;初始化:对静态变量和静态代码块执行初始化工作2 什么是双亲委派模型?在介绍双亲委派模型之前先说下类加载器。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立在 JVM 中的唯一性,每一个类加载器,都有一个独立的类名称空间。类加载器就是根据指定全限定名称将 class 文件加载到 JVM 内存,然后再转化为 class 对象。类加载器分类:启动类加载器(Bootstrap ClassLoader),是虚拟机自身的一部分,用来加载Java_HOME/lib/目录中的,或者被 -Xbootclasspath 参数所指定的路径中并且被虚拟机识别的类库;其他类加载器:扩展类加载器(Extension ClassLoader):负责加载<java_home style="box-sizing: border-box; -webkit-tap-highlight-color: transparent; text-size-adjust: none; -webkit-font-smoothing: antialiased; outline: 0px !important;">\lib\ext目录或Java. ext. dirs系统变量指定的路径中的所有类库;</java_home>应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。

6 设计模式

    动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理。比如说加日志,加事务等。可以给这个类创建一个代理,故名思议就是创建一个新的类,这个类不仅包含原来类方法的功能,而且还在原来的基础上添加了额外处理的新类。这个代理类并不是定义好的,是动态生成的。具有解耦意义,灵活,扩展性强。动态代理的应用:Spring的AOP加事务加权限加日志

7 中间件

1 kafka如何保证消息不丢失不被重复消费消息的发送机制消息的接受机制消息的重复消费如何解决kafka如何保证消息不丢失不被重复消费在解决这个问题之前,我们首先梳理一下kafka消息的发送和消费机制。2 kafka消息的发送机制:kafka的消息发送机制分为同步和异步机制。
可以通过producer.type属性进行配置。使用同步模式的时候,有三种状态来保证消息的安全生产。可以通过配置request.required.acks属性。三个属性分别如下
0—表示不进行消息接收是否成功的确认;
1—表示当Leader接收成功时确认;
-1—表示Leader和Follower都接收成功时确认;
当acks = 0的时候,不和Kafka集群进行消息接收确认,则当网络异常、缓冲区满了等情况时,消息可能丢失;
当acks=1的时候,只保证leader写入成功。当leader partition挂了的时候,数据就有可能发生丢失。
另外还有一种情况,使用异步模式的时候,当缓冲区满了,
acks=0的时候,不需要进行消息接受是否成功的确认,所以会自动清空缓冲池里的消息。同步模式下只需要将确认机制设置为-1,让消息写入leader和所有的副本,就可以保证消息安全生产。异步模式下,则需要在配置文件中,将阻塞超时的时间设置为不限制。这样生产端会一直阻塞。可以保证数据不丢失。我们需要设置block.on.buffer.full = true。 这样producer将一直等待缓冲区直至其变为可用。缓冲区满了就阻塞acks=all。所有的follwoer都响应了消息就认为消息提交成功。retries=MAX。无限重试。max.in.flight.requests.per.connnection = 1
限制客户端在单个连接上能够发送的未响应的请求的个数。
设置为1表示kafka broker在响应请求之前client不能再向broker发送请求了。通过此举可以保证消息的顺序性。3 kafka消息的接受机制:消息的接受端保证消息不丢失的情形就比较简单了。
kafka的consumer模式是自动提交位移的。我们只需要在代码逻辑中保证位移提交前消息被处理就行。
我们可以关闭自动提交位移,设置enable.auto.commit为false。自己手动处理消息后提交位移。4 kafka消息的重复消费如何解决:重复消费的问题,一方面需要消息中间件来进行保证。
另一方面需要自己的处理逻辑来保证消息的幂等性。
极有可能代码消费了消息,但服务器突然宕机,未来得及提交offset。
所以我们可以在代码保证消息消费的幂等性。至于方法可以通过redis的原子性来保证,也可以通过数据库的唯一id来保证。

推荐链接: https://zhuanlan.zhihu.com/p/64147696

2020后端Java面试题汇总相关推荐

  1. 【转】2020年java面试题汇总

    最开始是打算面试外包公司刷经验,等经验差不多了,再去甲方尝试,可惜不太顺利. 一.迈思(面试了30分钟) 1.自我介绍 2.左连接(a表左连接b表,a表全部数据出来,b表没有的数据为空) 3.a表左连 ...

  2. 2020年Android面试题汇总(初级)

    本博文转载自:https://www.jianshu.com/p/feb9584b492c  作者:Wocus 1.跨进程通信的几种方式 Intent,比如拨打电话 ContentProvider数据 ...

  3. Java面试题汇总及答案2021最新(序列化含答案)

    Java面试题汇总及答案2021最新(序列化含答案) 为大家整理了2021最新的Java面试题及答案下载,这套Java面试题总汇已经汇总了Java基础面试到高级Java面试题,几乎涵盖了作为一个Jav ...

  4. Java面试题汇总及答案2021最新(ioNio)

    Java面试题汇总及答案2021最新(io&Nio) 最近给大家整理了一批Java关于io和nio的面试题一共15题,是20201最新时间整理的,并且都含答案打包下载. 适宜阅读人群 需要面试 ...

  5. 年终盘点 | 2019年Java面试题汇总篇(附答案)

    作者 | 老王 来源 | Java中文社群「微信公众号」 在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几 ...

  6. 【吐血整理】年度盘点 | 2019年Java面试题汇总篇——附答案

    在这岁月更替辞旧迎新的时刻,老王盘点了一下自己 2019 年发布的所有文章,意外的发现关于「Java面试」的主题文章,竟然发布了 52 篇,几乎是全年每周一篇面试文章的节奏,当然其中有不少的面试题来源 ...

  7. 2020软件测试工程师面试题汇总(内含答案)-看完BATJ面试官对你竖起大拇指!

    2020最新软件测试面试题汇总[内附参考答案] 测试技术面试题 1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台.软件平台上是否可以正常的运行,即是通 ...

  8. 2020最新软件测试面试题汇总【内附参考答案】,拼多多面试官看了都说,卧槽!!!

    2020最新软件测试面试题汇总[内附参考答案] 测试技术面试题 1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台.软件平台上是否可以正常的运行,即是通 ...

  9. 超详细的Java面试题汇总(基础篇+框架篇)

    Java面试题汇总-基础篇 1.面向对象是什么? 答:面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发.基于类和面向对象的计算机编程语言,面向对 ...

最新文章

  1. 滚动条的一些常见问题
  2. 漫画详解:厌氧君和好氧君,谁才是明日之子?
  3. Linux grep 命令
  4. 软件工程 工具之二—— PowerDesigner v12(二)
  5. linux 提取cpio_使用rpm2cpio,cpio提取rpm包的中的特定文件
  6. Handler与多线程
  7. 如何使用JSON和Servlet创建JQuery DataTable
  8. 机器学习中的距离和损失函数
  9. linux用于开发qt java_Linux下Qt程序的打包发布
  10. 自学python需要安装什么-学习python需要什么基础吗?老男孩Python
  11. ASP.NET读取自定义的config文件
  12. linux c语言ide,linux下用过的c++IDE
  13. 万亿市场的广场舞未来在哪里?
  14. 微信小程序 image-cropper 还原按钮控制
  15. LaTex 美赛笔记
  16. error LNK2001: 无法解析的外部符号 __imp____iob_func
  17. python 百度地图api_使用Python玩转百度地图Api
  18. 修改element-plus默认英文为中文
  19. 国产数据库OpenGauss--内存优化表(MOT)实践
  20. 计算机毕业设计-校园疫情防控系统【PHP源码】

热门文章

  1. AVR单片机熔丝和解锁
  2. C语言 依次将10个整数输入,要求输出其中最大的整数
  3. ASP.NET动态网站开发培训-41.互动论坛制作(九、制作管理员详细页面)
  4. SyntaxError: invalid syntax
  5. 语音识别—前端录音传给后台语音识别
  6. nga怀旧服服务器维护,魔兽世界怀旧服:怀旧服1年暴雪热修的那些“BUG”
  7. springboot集成阿里ons消息队列发布订阅消息功能
  8. 美国机械比计算机工资高,听说美国机械工程年薪十万美金以上?快来了解下!...
  9. lol12月25服务器维护,英雄联盟12月25日更新到几点 LOL更新维护公告
  10. 自动拆箱自动装箱以及String 和基本数据类型封装类生成的对象是否相等