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区别
- 作用不同;前者的作用是为了提供一个默认配置,从而简化配置过程;后者的作用是为了给微服务提供一个综合管理框架。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)多次读取的数据结果不一致。)
- Read Uncommitted(读取未提交内容):出现脏读,也就是可能读取到其他会话中未提交事务修改的数据。
- Read Committed(读取已提交内容):不可重复读,只能读取到已经提交的数据。Oracle 等数据库默认的隔离级别。
- Repeatable Read(可重复读):出现幻读。在同一个事务内的查询都和事务开始时刻一致。InnoDB默认级别。
- 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(Java Script) HTML用于静态网页框架,CSS用于修饰,JS构成动态网页 1、HTML 对于中文网页需要使用 <meta charset"utf-8"> 声明编码,否则会出现…...
最优化考试之惩罚函数外点法
最优化考试之惩罚函数外点法 一、外点法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中数组详解 数组声明/基础操作以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可…...

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

人工智能:网络犯罪分子的驱动力
随着 2024 年的临近,是时候展望今年的网络安全状况了。由于网络犯罪日益复杂,预计到 2025 年,全球网络安全成本将增至 10.5 万亿美元。 人工智能的使用不断发展,网络犯罪分子变得越来越有创造力 我们注意到,联邦调查…...
ASP.NET Core认证原理和实现
ASP.NET Core认证原理和实现 AuthenticationHttpContextExtensions AuthenticationHttpContextExtensions 类是对 HttpContext 认证相关的扩展,它提供了如下扩展方法: public static class AuthenticationHttpContextExtensions {public static Task&l…...
基于OpenCV的图像颜色与形状识别的原理2
基于OpenCV的图像颜色与形状识别通常涉及以下几个步骤: 图像读取:使用OpenCV的cv2.imread()函数读取图像。预处理:可能包括图像的灰度转换、二值化、滤波等,以减少噪声和无关信息。颜色识别:颜色空间转换:…...
无法获取前置摄像头的预览图像?【Bug已解决-鸿蒙开发】
文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结HarmonyOS和OpenHarmony区别和联系项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了无法获取前置摄像头的预览图像的问题。 问题:前置摄像头…...
微信小程序的bindtap和catchtap的区别
一. 事件 1.事件是视图层到逻辑层的通讯方式。 2. 事件可以将用户的行为反馈到逻辑层进行处理。 3. 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。 二. 如何使用事件 1. 简单来说就是将事件绑定到组件上面,bi…...
python哈希算法实现
以下是用Python实现SHA-256算法的示例代码: 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: ■ Qt接收注射泵GBK编码后显示乱码■■ ■ 编码 ■ ASCII (American Standard Code for Information Interchange,美国信息交换标准代码)…...
使用Python实现Linux惠尔顿上网认证客户端
在本文中,我们将展示如何使用Python编写一个简单的脚本来实现Linux下的惠尔顿上网认证。以下是我们需要的参数和值: wholeton_host: 惠尔顿服务器地址,例如 192.168.10.10wholeton_user: 用户名,例如 AABBCCwholeton_pass: 密码&…...

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

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

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

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...