JAVA八股文面经问题整理第6弹

文章目录

目录

文章目录

提问问题

问题1

问题2

问题3

问题4

问题5

问题6

问题7

问题8

问题9

问题10

问题11

问题12

写在最后


提问问题

  1. 介绍一下Linux常⽤命令,例如:Vim快捷键,常⽤查看Log的命令,路径相关,权限相关问题
  2. 介绍下策略模式、其他的常用的设计模式了解那些
  3. 为什么选Redis缓存?为什么不直接⽤MyBatis⾃带的缓存?
  4.  Redis有什么优缺点?
  5. 简单介绍一下分布式锁?为什么出现分布式锁?实现分布式锁需要注意的事项?
  6. Object有哪些方法?
  7. 项目中,代码的分支太多了,如何解决?
  8. 项目中不同接口不同,这个是怎么做的?
  9. MySQL什么情况下不走索引,给出具体的示例场景?
  10. 关于钱的问题,在数据库中的存储,以及实际编码阶段上对钱的操作?
  11. 给⼀个⼤⽂件,电脑内存有限,如何给这个⼤⽂件中的整数排序?
  12.  笔试题:求滑动窗口中的最大值给一个整数数组 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)。策略接口声明了算法的骨架,具体策略类实现了具体的算法,上下文环境则持有一个策略类的引用,并通过该引用来调用相应的算法。

除了策略模式,常用的设计模式还包括:

  1. 单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。
  2. 工厂模式(Factory):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式让类的实例化延迟到子类进行。
  3. 抽象工厂模式(Abstract Factory):创建一系列相关或依赖对象的接口,而无需指定它们具体的类。
  4. 建造者模式(Builder):封装一个产品的构建过程,并允许按步骤构造。
  5. 原型模式(Prototype):通过复制现有的实例来创建新的实例。
  6. 适配器模式(Adapter):允许不兼容的接口之间工作。
  7. 桥接模式(Bridge):将抽象与实现分离,使两者可以独立变化。
  8. 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。
  9. 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责。
  10. 外观模式(Facade):提供一个统一的接口来访问子系统中的一群接口。
  11. 享元模式(Flyweight):通过共享技术支持大量细粒度对象的有效共享。
  12. 代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。
  13. 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。
  14. 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
  15. 命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求、队列或日志请求来参数化其他对象。
  16. 状态模式(State):允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。
  17. 责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
  18. 备忘录模式(Memento):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
  19. 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。
  20. 解释器模式(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!

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

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

相关文章

力扣栈题:删除最外层括号

char* removeOuterParentheses(char* s) {int stack 0;int num0;for(int i0;i<strlen(s);i){if(s[i](){stack;if(stack>1){s[num]s[i];}}else{--stack;if(stack>0){s[num]s[i];}}}s[num]\0;return s; } 思路&#xff1a;迭代加栈&#xff0c;如果不是第一个的左括号则…

苍穹外卖-day10:Spring Task、订单状态定时处理、来单提醒(WebSocket的应用)、客户催单(WebSocket的应用)

苍穹外卖-day10 课程内容 Spring Task订单状态定时处理WebSocket来单提醒客户催单 功能实现&#xff1a;订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a; 来单提醒&#xff1a; 客户催单&#xff1a; 1. Spring Task 1.1 介绍 Spring Task 是Spring框…

win32汇编弹出对话框

之前书上有一个win32 asm 的odbc例子&#xff0c;它有一个窗体&#xff0c;可以执行sql&#xff1b;下面看一下弹出一个录入数据的对话框&#xff1b; 之前它在.code段包含2个单独的asm文件&#xff0c;增加第三个&#xff0c;增加的这个里面是弹出对话框的窗口过程&#xff0…

哪些AI知识库比较好用?企业高管必看!

在科技进步的时代&#xff0c;工作效率和知识管理是企业面临的两大挑战。而AI知识库&#xff0c;正是解决这个问题的利剑。接下来&#xff0c;我将与你分享三款好用的AI知识库平台&#xff0c;感兴趣就往下看吧。 首先&#xff0c;我们不得不提的是Helplook。这是一个根据人工智…

如何在Spring Boot应用中高效集成Spring Cache与Redis实现高性能缓存机制

一、引言 在现代Web应用程序开发中&#xff0c;缓存是一种常见的优化手段&#xff0c;能够显著提升系统性能&#xff0c;减轻数据库负载。Spring Cache作为Spring框架内建的缓存抽象层&#xff0c;提供了一种简单易用的方式来统一处理缓存逻辑。而Redis作为一种高性能的内存键…

【兆易创新GD32H759I-EVAL开发板】 TLI(TFT LCD Interface)用法详细介绍

大纲 1. 引言 2. TLI外设特点 3. TLI硬件架构 4. TLI寄存器功能 5. TLI的配置和使用步骤 6. TLI图层概念 7. 图像处理和显示优化 8. 基于GD32H759I-EVAL开发板的TLI应用示例 1. 引言 在当今的嵌入式系统设计中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的应…

使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行数据库连接与操作&#xff1a;SQLite和MySQL 在现代应用程序开发中&#xf…

spring-boot-starter-thymeleaf加载外部html文件

在Spring MVC中&#xff0c;我们可以使用Thymeleaf模板引擎来实现加载外部HTML文件。 1.Thymeleaf介绍 Thymeleaf是一种现代化的服务器端Java模板引擎&#xff0c;用于构建漂亮、可维护且易于测试的动态Web应用程序。它适用于与Spring框架集成&#xff0c;并且可以与Spring M…

每日OJ题_牛客HJ12 字符串反转(IO型OJ)

目录 牛客HJ12 字符串反转 解析代码 牛客HJ12 字符串反转 字符串反转_牛客题霸_牛客网 解析代码 #include <iostream> using namespace std; int main() {string str "";cin >> str;int left 0, right str.size() - 1;while (left < right){ch…

算法简单小技巧

主页&#xff1a;xiaocr_blog 1.最小公倍数和最大公约数 #include<iostream> using namespace std; int main(){int a,b;cin>>a>>b;int r a%b;while (r!0){a b;b r;r a%b;}cout<<b<<endl;return 0 ; } #include<iostream> using nam…

Flink源码解析(1)TM启动

网络传输模型 首先在看之前,回顾一下akka模型: Flink通讯模型—Akka与Actor模型-CSDN博客 注:ActorRef就是actor的引用,封装好了actor 下面是jm和tm在通讯上的概念图: RpcGateway 不理解网关的作用,可以先移步看这里:网关_百度百科 (baidu.com) 用于定义RPC协议,是…

#每天一道面试题# 什么是MySQL的回表查询

MySQL中的索引按照物理存储的方式分为聚集索引和非聚集索引&#xff1b; 聚集索引索引和数据存储在一起&#xff0c;B树的叶子节点就是表数据&#xff0c;如果通过聚集索引查询数据&#xff0c;直接就可以查询出我们想要的数据&#xff1b;非聚集索引B树的叶子节点存储的是主键…

WebSocket 鉴权实践:从入门到精通

WebSocket 作为实时通信的利器&#xff0c;越来越受到开发者的青睐。然而&#xff0c;为了确保通信的安全性和合法性&#xff0c;鉴权成为不可或缺的一环。本文将深入探讨 WebSocket 的鉴权机制&#xff0c;为你呈现一揽子的解决方案&#xff0c;确保你的 WebSocket 通信得心应…

【C语言】【牛客】BC161 大吉大利,今晚吃鸡

文章目录 题目思路代码呈现 题目 链接: link 思路 这道题的本质其实不是考察C语言的运用&#xff0c;而是来考察我们对通项公式的总结。 我们可以看一下下面这道汉诺塔问题 相传在古印度圣庙中&#xff0c;有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上&…

【全网最详细】ComfyUI下,Insightface安装指南-聚梦小课堂

&#x1f96e;背景 ComfyUI下使用IP-adapter下的faceID模型的时候&#xff0c;大家可能会遇到如下错误&#xff1a; Error occurred when executing InsightFaceLoader: No module named insightface File "F:\ComfyUI-aki\execution.py", line 151, in recursive_…

VUE3 自定义指令

概念 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令 (Custom Directives)。自定义指令主要是为了重用涉及普通元素的底层 DOM 访问的逻辑。 指令钩子 一个指令的定义对象可以提供几种钩子函数 (都是可选的)&#xff1a;示…

MySQL调优之SQL语句

1 慢 SQL 语句的几种常见诱因 1.1 无索引、索引失效导致慢查询 如果在一张几千万数据的表中以一个没有索引的列作为查询条件&#xff0c;大部分情况下查询会非常耗时&#xff0c;这种查询毫无疑问是一个慢 SQL 查询。所以对于大数据量的查询&#xff0c;我们需要建立适合的索…

凝思操作系统离线安装mysql和node

PS&#xff1a;下面这就是国产凝思的界面,测试版本是V6.0.80&#xff0c;第一次听说这种系统&#xff0c;于是去官网下载部署包&#xff0c;下面是地址 注意:这个系统如果没有激活&#xff0c;ip都不会有&#xff0c;这样文件都不能传到服务器&#xff0c;xshell这些工具都连不…

自托管状态页面工具Kener

什么是 Kener &#xff1f; Kener 是开源的 Node.js 状态页面工具&#xff0c;旨在轻松监控服务和处理事故。它提供了一个时尚且用户友好的界面&#xff0c;简化了对服务中断的跟踪&#xff0c;并改善了我们在事故期间的沟通方式。而最好的部分是&#xff0c;Kener 与 GitHub 无…

hosts文件丢失了怎么办?

hosts文件的位置&#xff1a;C:\Windows\System32\drivers\etc 丢失了恢复的方法&#xff1a; 在“管理员&#xff1a;命令提示符中输入&#xff1a; &#xff08;winR 然后cmd&#xff09; for /f %P in (dir %windir%\WinSxS\hosts /b /s) do copy %P %windir%\System32\d…