Java 面试题集锦记录

Java 面试题集锦记录

    • 1. SpringBoot、SpringCloud区别
    • 2. SpringCloud怎么保证服务间通信?
    • 3. Spring怎么保持高可用性、稳定性?
    • 4. 负载均衡
    • 5. [Rabbitmq](https://blog.csdn.net/qq_40985985/article/details/128013229) 怎么避免重复消费,[消费模式](https://blog.csdn.net/qq_54796785/article/details/133580623)
    • 6. [Spring用到了哪几种设计模式,Java设计模式](https://zhuanlan.zhihu.com/p/545864894)
    • JVM
    • Java垃圾回收机制
    • ES篇
    • Redis篇
    • redis缓存穿透、雪崩、击穿
    • 事务、隔离级别、锁
    • 隔离级别
    • 分布式事务
    • ArrayList,线程安全扩容
    • list、set、concurrentHashMap
    • 交易幂等怎么避免重复
    • 跨行业,怎么去更新学习业务方面的知识?
    • 文件流
    • lambda表达式是什么?
    • Stream是什么?
    • 1. 对象3特性
    • 2. 抽象类和接口的差别
    • 3. 内部类和静态内部类的差别
    • 4. [TCP/IP七层网络模型](https://blog.csdn.net/m0_74722801/article/details/132058553)
    • 5. 进程/线程
    • 6. 数据表操作增删查改的关键字
    • 7. 正则表达式匹配数字
    • 8. 重载、重写
    • 9. 浅拷贝、深拷贝
    • 10. 流安全使用
    • 11. [lambda表达式、Stream流式编程](https://blog.csdn.net/justloveyou_/article/details/79562574)
    • 12. 浏览器一个url访问的过程?
    • 13. http常见状态码
    • 14. 主键、外键
    • 15. contentType是什么意思,有哪几种?
    • 16. 容器 docker常用命令
    • 17. linux常用命令,举例说明,vim怎么编辑

1. SpringBoot、SpringCloud区别

  1. 作用不同;前者的作用是为了提供一个默认配置,从而简化配置过程;后者的作用是为了给微服务提供一个综合管理框架。2. 使用方式不同;前者可以单独使用;springcloud必须在springboot使用的前提下才能使用。

springboot和springcloud都是从spring生态圈中衍生出来的软件开发框架,但是二者的创作初衷是完全不同的,springboot的设计目的是为了在微服务开发过程中可以简化配置文件,提高工作效率,而springcloud的设计目的是为了管理同一项目中的各项微服务,因此二者是完全不同的两个软件开发框架。

@SpringBootApplication是一个组合注解,它整合了@Configuration、@EnableAutoConfiguration和@ComponentScan注解,并开启了Spring Boot程序的组件扫描和自动配置功能。

2. SpringCloud怎么保证服务间通信?

Eureka 每隔一段时间向注册中心同步一次心跳,更新上下线及其他服务状态信息

3. Spring怎么保持高可用性、稳定性?

可以采用多个实例来保证服务的高可用性和负载均衡。可以通过使用服务注册与发现机制,如Eureka、Consul等来进行服务的注册与发现,同时结合负载均衡算法(如轮询、随机、加权轮询等)来分配请求。此外可以使用断路器(如Hystrix)来避免因服务实例挂掉或响应时间过长时对整个系统造成影响。在配置多个实例时,还需考虑实例间的通信问题和数据同步问题。

Retry+Hystrisx

4. 负载均衡

用的ribbon(轮询、随机、加权轮询)

5. Rabbitmq 怎么避免重复消费,消费模式

消费过的加pg/redis,消费时先判断是否消费过;成功消费后提交offset

  • 简单队列模型(单消费者/生产者 消费完删除 优缺点:简单;不支持多个消费者并发消费;)
  • 工作队列模型(单生产者多消费者平均干活 优缺点:消费负载均衡可实现更高吞吐量;无法根据消息优先重要等级去处理;)
  • 发布/订阅模型(都收到广播 优缺点:支持广播发布和订阅,无法动态路由;)
  • 路由模型(支持基于路由键的动态路由 优缺点:可根据高优先级动态去发送队列;需要提前配置好交换机和队列的绑定关系)
  • 主题模型(支持更灵活、更具体的消息路由和过滤。优缺点:灵活;配置化更复杂)

6. Spring用到了哪几种设计模式,Java设计模式

  • 工厂模式(一堆创建类工厂的方法,不暴露类的细节 BeanFactory)
  • 单例模式(对象 实例,保证一个对象只创建一个实例)
  • 代理模式(SpringAOP 动态代理)
  • 原型模式(复制一个类)
  • 策略模式
  • 适配器模式
  • 观察者模式
  • 模板模式

JVM

Java Virtual Machine,核心组件,解释和执行Java字节码。编译一次,实现了Java的跨平台;

Java垃圾回收机制

jvm垃圾回收机制采用的时分代回收思想,将内存区域划分为新生代和老年代。新生代又分为伊甸区和幸存区,幸存区又由大小相等的两个区组成。刚建立的对象会处于伊甸区,然后会经过GC进入幸存区1,再一次GC如果还没被清理,就会进入幸存区2.如果幸存区2.中再经历过GC还没被清理,又会进入幸存区1.在幸存区之间没转变一次。对象的年龄就会加一。当年龄达到15后会进入老年代。

ES篇

ElasticSearch:分布式实时的存储文件系统、搜索引擎、分布式、可拓展、TB级别的结构化/非结构化数据;倒排索引(分词);Cluster、Node、Shards、Replica;

Redis篇

内存中的数据结果存储系统;

redis缓存穿透、雪崩、击穿

是一个比较好的开头;自我介绍 or 项目介绍 or 问答
面试官逻辑思维能力很好,很谦逊。面试过程比较愉快,或者技术,或者提问的问题,都比较亲和。当然也问了我技术问题等,不是很深入的,一些我也没能回答上来。

事务、隔离级别、锁

  • 事务
    ACID

隔离级别

脏读(A读到了B未提交的)、幻读(读取已提交内容,范围读取,在同一个事务内相同的条件(age > 10)多次读取到的数据量不一致。)、不可重复读(同一个事务内,相同的条件(age = 10)多次读取的数据结果不一致。)

  1. Read Uncommitted(读取未提交内容):出现脏读,也就是可能读取到其他会话中未提交事务修改的数据。
  2. Read Committed(读取已提交内容):不可重复读,只能读取到已经提交的数据。Oracle 等数据库默认的隔离级别。
  3. Repeatable Read(可重复读):出现幻读。在同一个事务内的查询都和事务开始时刻一致。InnoDB默认级别。
  4. Serializable(串行读):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。

分布式事务

CAP(Consistency、Avaliability、Partition Tolerance) 关系型数据库CA;跨行转账CP;NoSql数据库AP;
在分布式系统中,AP的应用是比较多的,即保证系统的可用性和分区容忍性,牺牲数据的强一致性(写操作后立即读取新数据),保证数据的最终一致性。比如:订单退款、今日退款成功、明日到账等等。


  • 乐观锁适用于读操作多的场景,而悲观锁适用于写操作多的场景。
    synchronized、ReentrantLock 都属于悲观锁,而AtomicInteger.incrementAndGet 则属于乐观锁。

ArrayList,线程安全扩容

  • ArrayList 结构,扩容后怎么实现的,有没有list是线程安全的
    Collections.synchoronizedList()
    Collections.copyOnWriteArrayList
    CopyOnWrite VS Vector
    在 get() 操作上,Vector 使用了同步关键字,所有的 get() 操作都必须先取得对象锁才能进行。在高并发的情况下,大量的锁竞争会拖累系统性能。反观CopyOnWriteArrayList 的get() 实现,并没有任何的锁操作。

    在 add() 操作上,CopyOnWriteArrayList 的写操作性能不如 Vector,原因也在于Copy-On-Write,写入时不止加锁,还使用了Arrays.copyOf()进行了数组复制,性能开销较大,遇到大对象也会导致内存占用较大。

    在读多写少的高并发环境中,使用 CopyOnWriteArrayList 可以提高系统的性能,但是,在写多读少的场合,CopyOnWriteArrayList 的性能可能不如 Vector。

list、set、concurrentHashMap

交易幂等怎么避免重复

  • 交易怎么避免重复交易(幂等交易这种怎么控制)
    前后端结合着来
    幂等性:任意多次执行对资源本身所产生的影响均与一次执行的影响相同。
    生成token加到redis查询,以避免多次重复错误的处理;
    source+序列号~~~ 加入redis/或者存入数据库
    唯一全局id加入redis/或者存入数据库

跨行业,怎么去更新学习业务方面的知识?

经验、交流、积累
分块–大框架—每一个点
吃透每一个点—自己编织一张网

偏技术太久——像业务靠近的重要性;
从客户出发,市场需求价值,多思考 & 本质是否赚钱——来自东哥的,感觉也挺不错的,是个切入点。

文件流

zip包免生成文件直接封装二进制流(文件跨路径校验,文件个数超多校验,文件大小超大校验等)

Java 8新特性:try-with-resources 文件流自动关闭;

lambda表达式是什么?

匿名函数,把函数作为参数传递给方法;代码简洁度;

Stream是什么?

1. 对象3特性

封装继承多态(encapsulation,inherits、polymorphism)

2. 抽象类和接口的差别

3. 内部类和静态内部类的差别

4. TCP/IP七层网络模型

也可以说是4层,(从上到下)包括了应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

5. 进程/线程

进程是操作系统分配资源的基本单位;线程是操作系统调度的基本单位;
一个进程内有多个线程,进程内多个线程共享资源;进程调度更耗资源时间等;线程调度更方便;

6. 数据表操作增删查改的关键字

select、update、delete/drop、insert

7. 正则表达式匹配数字

\d+ \w+

8. 重载、重写

都是子类与父类间,重载(参数个数、类型、排列顺序)

9. 浅拷贝、深拷贝

对象内引用对象的复制与否,深拷贝:改变新对象原对象不受影响;浅拷贝原对象值也改变;

10. 流安全使用

java8 try-with-resources自动关闭;

11. lambda表达式、Stream流式编程

Function 匿名函数,flatMap reduce groupingBy

12. 浏览器一个url访问的过程?

13. http常见状态码

404 200 502

14. 主键、外键

15. contentType是什么意思,有哪几种?

文件返回格式,application/json、protobuf、ostream

16. 容器 docker常用命令

17. linux常用命令,举例说明,vim怎么编辑

mv cp tree grep awk ls tail head
vim操作文件命令:vi Insert : wq等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#通讯——关于Winform中的简单的Http服务器与客户端

C#通讯——关于Winform中的简单的Http服务器与客户端 前言一、Http是什么?二、简单的Http服务器三、简单的Http客户端四、实际调用五、Winform中Http服务器和WebApi的区别? 前言 在实际项目中通讯的交互的过程中,遇见数据传输时同事和我说用…

论文阅读《Rethinking Efficient Lane Detection via Curve Modeling》

目录 Abstract 1. Introduction 2. Related Work 3. BezierLaneNet 3.1. Overview 3.2. Feature Flip Fusion 3.3. End-to-end Fit of a Bezier Curve 4. Experiments 4.1. Datasets 4.2. Evalutaion Metics 4.3. Implementation Details 4.4. Comparisons 4.5. A…

使用克魔助手进行iOS数据抓包和HTTP抓包的方法详解

摘要 本文博客将介绍如何在iOS环境下使用克魔助手进行数据抓包和HTTP抓包。通过抓包,开发者可以分析移动应用程序的网络请求发送和接收过程,识别潜在的性能和安全问题,提高应用的质量和安全性。 引言 在移动应用程序的开发和测试过程中&am…

Linux磁盘与文件系统管理

目录 在linux系统中使用硬盘 磁盘的数据结构 磁盘接口类型 字母含义 MBR磁盘分区 分区类型 分区的缺点 文件系统的 文件系统有什么作用 文件系统的修复 检测并确认新磁盘 参看磁盘信息 查看磁盘信息 添加磁盘 查看添加磁盘情况:sda系统磁盘&#xff…

每周一算法:区间覆盖

问题描述 给定 N N N个闭区间 [ a i , b i ] [a_i,b_i] [ai​,bi​],以及一个线段区间 [ s , t ] [s,t] [s,t],请你选择尽量少的区间,将指定线段区间完全覆盖。 输出最少区间数,如果无法完全覆盖则输出 − 1 -1 −1。 输入格式…

【自然语言处理】第3部分:识别文本中的个人身份信息

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

凸函数的定义,保凸运算和各种性质

定义: 函数 f : R n → R f:R^n\rightarrow R f:Rn→R是凸的,如果 d o m f domf domf是凸集,且对于任意 x , y ∈ d o m f x,y\in domf x,y∈domf和任意 0 ≤ θ ≤ 1 0\le \theta \le1 0≤θ≤1都有 f ( θ x ( 1 − θ ) y ) ≥ θ f ( x ) ( 1 − θ ) f ( y ) f(\theta x…

解决Hive在DataGrip 中注释乱码问题

注释属于元数据的一部分,同样存储在mysql的metastore库中,如果metastore库的字符集不支持中文,就会导致中文显示乱码。 不建议修改Hive元数据库的编码,此处我们在metastore中找存储注释的表,找到表中存储注释的字段&a…

软件测试/测试开发丨Python学习笔记之基本数据类型与操作

一、变量 1、变量的定义: a. 在python中,变量是一种存储数据的载体。计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间; b.变量的值可以被读取和修改。 2、命名规则: a.变量名由字母(广义的Unic…

Python 常用模块Logging

Python 常用模块Logging 【序言】 logging模块是专门用来做日志记录的模块 【一】日志等级 默认打印结果到终端上 CRITICAL 50 # 致命错误 ERROR 40 # 错误 WARNING 30 # 警告 INFO 20 # 消息 DEBUG 10 # 调试 NOTSET 0 # 不设置示例: 默认级别为…

Unity引擎有哪些优点

Unity引擎是一款跨平台的游戏引擎,拥有很多的优点,如跨平台支持、强大的工具和编辑器、灵活的脚本支持、丰富的资源库和强大的社区生态系统等,让他成为众多开发者选择的游戏开发引擎。下面我简单的介绍一下Unity引擎的优点。 跨平台支持 跨…

自动化网络故障修复管理

什么是故障管理 故障管理是网络管理的组成部分,涉及检测、隔离和解决问题。如果实施得当,网络故障管理可以使连接、应用程序和服务保持在最佳水平,提供容错能力并最大限度地减少停机时间。专门为此目的设计的平台或工具称为故障管理系统。 …

WPF实战项目二十二(客户端):首页添加备忘录与待办事项

1、在View文件夹下新建文件夹Dialog&#xff0c;新建View&#xff1a;AddMemoView、AddToDoView <UserControlx:Class"WPFProject.Views.Dialogs.AddToDoView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://s…

推荐五款简洁而实用的工具,值得你尝试

​ 分享快乐是生活中美好的瞬间&#xff0c;而分享简单巧妙的工具也能令我愉悦。这五款工具简洁而实用&#xff0c;值得你尝试。 1.视频播放器——Potplayer Potplayer是一款视频播放器&#xff0c;支持DXVA、CUDA和QuickSync等硬件加速技术&#xff0c;提供高效的视频播放性…

Linux(openssl):用CA证书签名具有SAN的CSR

Linux(openssl):创建CA证书,并用其对CSR进行签名_生成ca证书签名请求文件csr-CSDN博客 提供了方法为CSR进行签名。 对于有SAN的CSR如何签名呢? 1.创建CA证书,与下面的帖子一样

关于Java并发、JVM面试题

前言 之前为了准备面试&#xff0c;收集整理了一些面试题。 本篇文章更新时间2023年12月27日。 最新的内容可以看我的原文&#xff1a;https://www.yuque.com/wfzx/ninzck/cbf0cxkrr6s1kniv 并发 进程与线程的区别 线程属于进程&#xff0c;进程可以拥有多个线程。进程独享…

【论文阅读】Resource Allocation for Text Semantic Communications

这是一篇关于语义通信中资源分配的论文。全文共5页&#xff0c;篇幅较短。 目录在这里 摘要关键字引言语义通信资源分配贡献公式符号 系统模型DeepSC TransmitterTransmission ModelDeepSC Receiver 语义感知资源分配策略Semantic Spectral Efficiency &#xff08;S-SE&#…

C++初阶(十七)模板进阶

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、非类型模板参数二、模板的特化1、概念2、函数模板特化3、类模板特化1、全特化2、偏特化 三…

Python爬虫篇(四):京东数据批量采集

京东数据批量采集 ●前言 一年一度的端午节又到了&#xff0c;甜咸粽子之争也拉开了帷幕&#xff0c;它价格高昂&#xff0c;它味道鲜美&#xff0c;然而&#xff0c;默默无名的它却备受广大民众喜爱&#xff01;好家伙&#xff0c;一看就是老qq看点了 &#xff0c;那咱们能做…

07.kubernetes客户端部署

kubernetes 客户端部署 主要是配置 kubectl 完成以下两个操作: 首先是要实现通过命令行连接到Kubernetes的apiserver然后就是创建必要的 ClusterRoleBinding 实现 kubelet bootstrapping CSR 的自动验签kubelet bootstrapping主要涉及以下两个问题,官方文档已经给出详细的介…