JAVA八股文面经问题整理第6弹
文章目录
目录
文章目录
提问问题
问题1
问题2
问题3
问题4
问题5
问题6
问题7
问题8
问题9
问题10
问题11
问题12
写在最后
提问问题
介绍一下
Linux常⽤命令,例如:Vim快捷键,常⽤查看Log的命令,路径相关,权限相关问题介绍下策略模式、其他的常用的设计模式了解那些
- 为什么选Redis缓存?为什么不直接⽤MyBatis⾃带的缓存?
- Redis有什么优缺点?
- 简单介绍一下分布式锁?为什么出现分布式锁?实现分布式锁需要注意的事项?
- Object有哪些方法?
- 项目中,代码的分支太多了,如何解决?
- 项目中不同接口不同,这个是怎么做的?
- MySQL什么情况下不走索引,给出具体的示例场景?
- 关于钱的问题,在数据库中的存储,以及实际编码阶段上对钱的操作?
给⼀个⼤⽂件,电脑内存有限,如何给这个⼤⽂件中的整数排序?
-
笔试题:求滑动窗口中的最大值:给一个整数数组
nums
,有一个大小为k
的滑动窗口从数组的最左侧移动到数组的最右侧。每次移动一位。
问题1
Linux常用命令:
- Vim快捷键:
i
进入插入模式,Esc
退出插入模式,:wq
保存并退出,:q!
强制退出不保存。 - 查看日志:
tail -f /var/log/syslog
实时查看日志,grep
用于搜索特定内容,如grep error /var/log/syslog
。 - 路径相关:
cd
切换目录,ls
列出目录内容,pwd
显示当前工作目录的完整路径,mkdir
创建新目录,rm
删除文件或目录。 - 权限相关:
chmod
修改文件或目录的权限,chown
更改文件或目录的所有者,ls -l
查看详细的文件权限信息。
问题2
策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以互换。这种模式让算法的变化独立于使用算法的客户端。
策略模式通常由三个部分组成:策略接口(Strategy),具体策略类(Concrete Strategy),以及上下文环境(Context)。策略接口声明了算法的骨架,具体策略类实现了具体的算法,上下文环境则持有一个策略类的引用,并通过该引用来调用相应的算法。
除了策略模式,常用的设计模式还包括:
- 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。
- 工厂模式(Factory):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式让类的实例化延迟到子类进行。
- 抽象工厂模式(Abstract Factory):创建一系列相关或依赖对象的接口,而无需指定它们具体的类。
- 建造者模式(Builder):封装一个产品的构建过程,并允许按步骤构造。
- 原型模式(Prototype):通过复制现有的实例来创建新的实例。
- 适配器模式(Adapter):允许不兼容的接口之间工作。
- 桥接模式(Bridge):将抽象与实现分离,使两者可以独立变化。
- 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。
- 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责。
- 外观模式(Facade):提供一个统一的接口来访问子系统中的一群接口。
- 享元模式(Flyweight):通过共享技术支持大量细粒度对象的有效共享。
- 代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。
- 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。
- 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
- 命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求、队列或日志请求来参数化其他对象。
- 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。
- 责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
- 备忘录模式(Memento):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
- 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。
- 解释器模式(Interpreter):给定一个语言,定义它的文法的一套解释规则。
问题3
Redis缓存通常比MyBatis自带的缓存更快,因为它是基于内存操作的。此外,Redis支持更丰富的数据结构和操作,可以实现更复杂的缓存策略。
问题4
Redis优点:
- 速度快,基于内存操作。
- 支持丰富的数据类型。
- 可以持久化数据到磁盘。
- 具备原子操作和事务支持。
Redis缺点:
- 内存资源有限。
- 数据持久化可能导致写入延迟。
- 高可用性配置较为复杂。
问题5
分布式锁是为了解决分布式系统中多个进程或服务需要协调访问共享资源时的同步问题。
出现分布式锁的原因是单个进程锁不能跨多个节点或服务器工作。
实现分布式锁需要注意的事项:
- 确保锁的互斥性,即同一时间只有一个客户端能持有锁。
- 考虑锁的超时和重试机制,以防客户端崩溃后锁永久持有。
- 确保锁的高可用性和一致性。
问题6
Java中
Object
类提供了一些基本方法,如equals()
,hashCode()
,toString()
,clone()
,getClass()
,notify()
,notifyAll()
,wait()
等。
问题7
项目中代码分支太多时,可以通过代码重构、合并相似功能的分支、删除不再维护的分支、使用特性开关来减少分支数量。
问题8
项目中接口差异通常通过适配器模式、策略模式或者使用多态来处理,以保证代码的通用性和可维护性。
举例厂商的参数变了,如何满足
1.把所有的参数封装成一个对象,然后在对象里面获取,最后再根据配置中心的内容,执行不同的逻辑
2.重载
3.所有的api抽象成一个配置,然后修改某个字段,再结合配置中心来实现
问题9
MySQL不走索引的情况:
- 数据表非常小,全表扫描比索引查找更快。
- 索引列数据类型不一致或者存在大量NULL值。
- WHERE子句中包含范围查询,如
BETWEEN
,>
,<
操作符。- 数据库优化器判断使用索引不会提高查询性能。
问题10
在数据库中通常使用固定小数点的数字格式存储钱(如使用DECIMAL类型),以避免浮点数运算的精度问题。
在编码阶段,应该使用货币库(如Java中的BigDecimal)来处理钱的加减乘除等操作。
问题11
如果计算机内存有限,可以使用外部排序算法对大文件进行排序。
首先,将文件分割成多个可以在内存中处理的小块,对每块进行排序,然后将排序好的块合并起来得到最终的排序结果。这通常涉及到使用流或者临时文件来处理排序过程。
问题12
力扣上有原题;滑动窗口最大值
思路是设计单调队列;其他详细思路看 思路详解
class MyQueue {Deque<Integer> deque = new LinkedList<>();//弹出元素时,比较当前要弹出的数值是否等于队列出口的数值,如果相等则弹出;void poll(int val) {if (!deque.isEmpty() && val == deque.peek()) { //也要判断队列当前是否为空deque.poll();}}//添加元素时,如果要添加的元素大于入口处的元素,就将入口元素弹出,这样保证队列元素单调递减//比如此时队列元素4,3,1 ;5将要入队,比4,3,1都大,所以都弹出,此时队列:5void add(int val) {while (!deque.isEmpty() && val > deque.getLast()) {//push元素的数值小于等于队列入口元素的数值为止deque.removeLast();}deque.add(val);}//队列队顶元素始终为最大值int peek() {return deque.peek();}
}class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if (nums.length == 1) {return nums;}int len = nums.length - k + 1;int[] res = new int[len];//存放结果元素的数组int num = 0;MyQueue myQueue = new MyQueue();//自定义队列//先将前k的元素放入队列for (int i = 0; i < k; i++) {myQueue.add(nums[i]);}res[num++] = myQueue.peek();for (int i = k; i < nums.length; i++) {myQueue.poll(nums[i - k]); //滑动窗口移除最前面的元素,移除是判断该元素是否放入队列myQueue.add(nums[i]);//滑动窗口加入最后面的元素res[num++] = myQueue.peek();//记录对应的最大值}return res;}
}
写在最后
PS:以上是网络上收集的一些常见的问题以及自己对答案搜索整理;一次整理基本上就是面试一次的题量,适合对自己的知识的查缺补漏
面试一般根据岗位要求或者简历上写的来进行扩展提问,也有些是直接问公司常用到的相关方面的技术问题,无论怎么准备都祝大家能拿到心怡的offer!
相关文章:
JAVA八股文面经问题整理第6弹
文章目录 目录 文章目录 提问问题 问题1 问题2 问题3 问题4 问题5 问题6 问题7 问题8 问题9 问题10 问题11 问题12 写在最后 提问问题 介绍一下Linux常⽤命令,例如:Vim快捷键,常⽤查看Log的命令,路径相关&#x…...
pytest相关面试题
pytest是什么?它有什么优点? pytest是一个非常流行的Python测试框架,它具有简洁、易用、高校等优点。他可以帮助测试人员方便地编写和运行测试用例,并且提供了丰富的插件和扩展,支持各种测试需求介绍下pytest常用的库 …...
Keras库搭建神经网络
Keras并非简单的神经网络库,而是一个基于Theano的强大的深度学习库,利用它不仅仅可以搭建普通的神经网络,还可以搭建各种深度学习模型,如自编码器、循环神经网络、递归神经网络、卷积神经网络等。 安装代码: pip ins…...

适配器模式与桥接模式-灵活应对变化的两种设计策略大比拼
🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自:设计模式深度解析:适配器模式与桥接模式-灵活应对变…...
Elasticsearch8搭建及Springboot中集成使用
1.搭建 1.1.下载地址 Elasticsearch:https://www.elastic.co/cn/downloads/elasticsearch Kibana:https://www.elastic.co/cn/downloads/kibana 1.2.具体过程 下载安装包:访问上述链接,下载适合你操作系统的Elasticsearch和Ki…...

asp.net在线租车平台
说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库 功能模块: asp.net在线租车平台 用户功能有首页 行业新闻用户注册车辆查询租车介绍访问后台 后台管理员可以进行用户管理 管…...

Beamer模板——基于LaTeX制作学术PPT
Beamer模板——基于LaTeX制作学术PPT 介绍Beamer的基本使用安装和编译用于学术汇报的模板项目代码模板效果图 Beamer的高级特性动态效果分栏布局定理环境 介绍 在学术领域,演示文稿是展示和讨论研究成果的重要方式。传统的PowerPoint虽然方便,但在处理复…...

性能测试-Jmeter中IF控制器使用
一、Jmeter控制器 分为两种类型: 控制测试计划执行过程中节点的逻辑执行顺序,如:循环控制器,if控制器等对测试计划中的脚本进行分组,方便Jmeter统计执行结果以及进行脚本的运行时控制等,如:吞…...

华为综合案例-普通WLAN全覆盖配置(2)
组网图 结果验证 在AC_1和AC_2上执行display ap all命令,检查当前AP的状态,显示以下信息表示AP上线成功。[AC_1] display ap all Total AP information: nor : normal [1] ExtraInfo : Extra information P : insufficient power supply ---…...

这里是一本关于 DevOps 企业级 CI/CD 实战的书籍...
文章目录 📋 前言🎯 什么是 DevOps🎯 什么是 CI/CD🎯什么是 Jenkins🧩 Jenkins 简单案例 🎯 DevOps 企业级实战书籍推荐🔥 参与方式 📋 前言 企业级 CI/CD 实战是一个涉及到软件开发…...
机器学习 - save和load训练好的模型
如果已经训练好了一个模型,你就可以save和load这模型。 For saving and loading models in PyTorch, there are three main methods you should be aware of. PyTorch methodWhat does it do?torch.saveSaves a serialized object to disk using Python’s pickl…...

【动态规划】【同余前缀和】【多重背包】[推荐]2902. 和带限制的子多重集合的数目
本文涉及知识点 动态规划汇总 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 C算法:滑动窗口总结 多重背包 LeetCode2902. 和带限制的子多重集合的数目 给你一个下标从 0 开始的非负整数数组 nums 和两个整数 l 和 r 。 请你…...

nginx介绍及搭建
架构模型 Nginx是由一个master管理进程、多个worker进程组成的多进程模型。master负责管理worker进程,worker进程负责处理网络事件,整个框架被设计为一种依赖事件驱动、异步、非阻塞的模式。 优势: 1、充分利用多核,增强并发处理…...

树莓派夜视摄像头拍摄红外LED灯
NoIR相机是一种特殊类型的红外摄像头,其名称来源于"No Infrared"的缩写。与普通的彩色摄像头不同,NoIR相机具备红外摄影和低光条件下摄影的能力。 一般摄像头能够感知可见光,并用于普通摄影和视频拍摄。而NoIR相机则在设计上去除了…...

Oracle19C静默安装教程
文章目录 一、安装前的准备1、安装Linux操作系统2、配置网络源或者本地源3、hosts文件配置 二、准备安装环境1、安装依赖包2、创建oracle用户组3、配置系统内核参数4、关闭selinux5、配置oracle用户环境6、修改用户的Shell限制 三、静默安装Oracle数据库1、创建oracle安装目录2…...

【机器学习】基于粒子群算法优化的BP神经网络分类预测(PSO-BP)
目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】粒子群算法(PSO)原理及实现 2.设计与实现 数据集: 多输入多输出:样本特征24,标签类别4…...

Sora后时代文生视频的探索
一、写在前面 按常理,这里应该长篇大论地介绍一下Sora发布对各行业各方面产生的影响。不过,这类文章已经很多了,我们今天主要聊聊那些已经成熟的解决方案、那些已经可以“信手拈来”的成果,并以此为基础,看看Sora发布…...
指南:在各主流操作系统上安装与配置Apache Tomcat
指南:在各主流操作系统上安装与配置Apache Tomcat Apache Tomcat作为一款广受欢迎的开源Java Servlet容器,为用户提供了一个纯Java环境下的Web服务器和Servlet容器。本文将详细介绍如何在不同的操作系统上安装Apache Tomcat,并进行基本的配置…...
物联网的介绍
物联网(Internet of Things,简称IoT)是指通过互联网将物理设备、传感器、通信设备和软件系统相互连接,形成一个网络化的系统。它可以实现设备之间的数据交换、信息共享和远程控制,使得物理世界与数字世界紧密结合。 物…...

目标检测——YOLOR算法解读
论文:YOLOR-You Only Learn One Representation: Unifified Network for Multiple Tasks 作者:Chien-Yao Wang, I-Hau Yeh, Hong-Yuan Mark Liao 链接:https://arxiv.org/abs/2105.04206 代码:https://github.com/WongKinYiu/yolo…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...