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…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
