当前位置: 首页 > news >正文

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等

相关文章:

Java 面试题集锦记录

Java 面试题集锦记录 一1. SpringBoot、SpringCloud区别2. SpringCloud怎么保证服务间通信?3. Spring怎么保持高可用性、稳定性?4. 负载均衡5. [Rabbitmq](https://blog.csdn.net/qq_40985985/article/details/128013229) 怎么避免重复消费,[…...

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

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

C#中的.NET与.NET Framework区别

C#是一种编程语言,而.NET是一个开发平台。在.NET生态系统中,有两个相关但不同的概念:.NET和.NET Framework。 .NET Framework 发布时间: .NET Framework是最早引入的,它于2002年首次发布。它是一个用于构建Windows应…...

详解Keras3.0 Layer API: LSTM layer

LSTM layer 用于实现长短时记忆网络,它的主要作用是对序列数据进行建模和预测。 遗忘门(Forget Gate):根据当前输入和上一个时间步的隐藏状态,计算遗忘门的值。遗忘门的作用是控制哪些信息应该被遗忘,哪些…...

Vue和React的运行时,校验引入包的上下文差异

背景 系统使用 webpack 5 模块联邦实现微前端,有关如何实现跨应用的代码共享,可参考 如何优雅的实现跨应用的代码共享 里的第三大点。 总之,这里是其他应用使用了某个应用共享出来的reg文件,引入方式为: import REG …...

C语言中函数调用和嵌套

函数是C语言的基本组成元素 函数调用 根据函数在程序中出现的位置有下列三种函数调用方式: 将函数作为表达式调用 将函数作为表达式调用时,函数的返回值参与表达式的运算,此时要求函数必须有返回值 int retmax(100,150); 将函数作为语句…...

JVM基础篇---02

为什么需要用户自定义类加载器: 扩展类加载器的功能: Java的默认类加载器主要有三个,分别是引导类加载器、扩展类加载器和应用程序类加载器。其中,引导类加载器和扩展类加载器是由JVM实现的,用户无法修改其行为。而应用…...

HTML网站基础

一、前端开发基础 前端一共三门语言——HTML、CSS、JS&#xff08;Java Script&#xff09; HTML用于静态网页框架&#xff0c;CSS用于修饰&#xff0c;JS构成动态网页 1、HTML 对于中文网页需要使用 <meta charset"utf-8"> 声明编码&#xff0c;否则会出现…...

最优化考试之惩罚函数外点法

最优化考试之惩罚函数外点法 一、外点法1.问题条件2.解题过程 一、外点法 1.问题条件 目标函数 f ( x ) f(x) f(x)约束函数 g ( x ) g(x) g(x) 2.解题过程 定义罚函数 F ( x ) f ( x ) t ∗ m i n ( 0 , g ( x ) 2 ) F(x)f(x)t*min(0,g(x)^2) F(x)f(x)t∗min(0,g(x)2)对罚…...

JavaScript 数组【详解】

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍JavaScript中数组详解 数组声明/基础操作以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题可…...

Node.js版本对比

目录 1. node版本与Npm版本对照表 2. node版本与node-sass版本对照表 3. node-sass与sass-loader版本对照表 1. node版本与Npm版本对照表 以往的版本 | Node.js 下面显示最新的对应内容&#xff0c;如果需要查找历史版本&#xff0c;可以进入上面的页面查询 VersionLTSDateV8np…...

人工智能:网络犯罪分子的驱动力

随着 2024 年的临近&#xff0c;是时候展望今年的网络安全状况了。由于网络犯罪日益复杂&#xff0c;预计到 2025 年&#xff0c;全球网络安全成本将增至 10.5 万亿美元。 人工智能的使用不断发展&#xff0c;网络犯罪分子变得越来越有创造力 我们注意到&#xff0c;联邦调查…...

ASP.NET Core认证原理和实现

ASP.NET Core认证原理和实现 AuthenticationHttpContextExtensions AuthenticationHttpContextExtensions 类是对 HttpContext 认证相关的扩展&#xff0c;它提供了如下扩展方法&#xff1a; public static class AuthenticationHttpContextExtensions {public static Task&l…...

基于OpenCV的图像颜色与形状识别的原理2

基于OpenCV的图像颜色与形状识别通常涉及以下几个步骤&#xff1a; 图像读取&#xff1a;使用OpenCV的cv2.imread()函数读取图像。预处理&#xff1a;可能包括图像的灰度转换、二值化、滤波等&#xff0c;以减少噪声和无关信息。颜色识别&#xff1a;颜色空间转换&#xff1a;…...

无法获取前置摄像头的预览图像?【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结HarmonyOS和OpenHarmony区别和联系项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了无法获取前置摄像头的预览图像的问题。 问题:前置摄像头…...

微信小程序的bindtap和catchtap的区别

一. 事件 1.事件是视图层到逻辑层的通讯方式。 2. 事件可以将用户的行为反馈到逻辑层进行处理。 3. 事件可以绑定在组件上&#xff0c;当达到触发事件&#xff0c;就会执行逻辑层中对应的事件处理函数。 二. 如何使用事件 1. 简单来说就是将事件绑定到组件上面&#xff0c;bi…...

python哈希算法实现

以下是用Python实现SHA-256算法的示例代码&#xff1a; import hashlibdef sha256(message):# 创建SHA-256哈希对象sha256_hash hashlib.sha256()# 更新哈希对象的输入消息sha256_hash.update(message.encode(utf-8))# 计算哈希值并返回十六进制表示return sha256_hash.hexdi…...

SpringBoot实用开发(三)-- Redis提供API接口 -- StringRedisTemplate

引言: 由于redis内部不提供java对象的存储格式,因此当操作的数据以对象的形式存在时,会进行转码,转换成字符串格式后进行操作。为了方便开发者使用基于字符串为数据的操作,springboot整合redis时提供了专用的API接口StringRedisTemplate,你可以理解为这是RedisTe…...

【Qt-编码】

Qt编程指南 ■ 编码■ ASCII■ ANSI■ GB2312■ GBK■ GB18030 编码■ Unicode■ UTF-8&#xff1a; ■ Qt接收注射泵GBK编码后显示乱码■■ ■ 编码 ■ ASCII &#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;…...

使用Python实现Linux惠尔顿上网认证客户端

在本文中&#xff0c;我们将展示如何使用Python编写一个简单的脚本来实现Linux下的惠尔顿上网认证。以下是我们需要的参数和值&#xff1a; wholeton_host: 惠尔顿服务器地址&#xff0c;例如 192.168.10.10wholeton_user: 用户名&#xff0c;例如 AABBCCwholeton_pass: 密码&…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...