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

java后端常见问题

java面向对象的特征,如何应用

  • 面向对象编程是利用类和对象的编程思想
  • 万物皆成类,对象是类的具体体现,面向对象的三大基础特性,继承封装多态。、
  • 封装:封装隐藏了类的具体内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据,因为他对外只是提供了访问方法。
  • 继承:Java中通过extends关键字实现继承。从已经有的类派生出的新类,新类能够吸收已有类的一些成员变量和方法,并且可以扩展新的方法,提高代码的复用性。关于子类能从父类中继承什么?子类不能继承父类的构造方法,私有方法(变量),
  • 多态:堕胎表示当同一个操作作用在不体哦那个的对象时,会有不同的语义,从而产生不同的结果。在JAVA中主要有两种表现方式,‘方法的重载,方法的覆盖’

HashMap的原理是什么,jdk1.7和jdk1.8有什么区别?

    • HashMap首先是通过哈希表和链表来实现的,具体的实现过程,拿到一个数据,首先计算他的hash值,然后找到对应的位置,如果为空就将该数据放在这里,如果该位置不为空,就将该数据放在链表头。如果容量达到某个阈值,会自动增长。Hash非线程安全的,即任意时刻可能有多个线程同时写HashMap,可能导致数据不一致的问题,我们可以用Collections的synchronizedMap方法时HashMap有更强的安全性,或者使用ConcurrentHashMap。
    • 1.7

宏观来看,HashMap是一个数组,然后数组中每个元素是一个单项链表。当数组容量到达某个阈值的时候既可以扩容,扩容之后是当前数组大小的2倍。其中有一个负载因子。阈值就等于当前数组容量乘以负载因子

  • 1.8

改进之处,将java7中的单向链表变成了红黑树,所以Java8的数据结构是数组+链表+红黑树构成,
为什么将红黑树引入呢?我们在java7中查找一个数据根据hash值就可以定位到在哪个链表中,然后顺着链表比下去,时间复杂度是O(N),所以我们引入红黑树,当链表中的元素超过8个的时候,就可以将链表转换成红黑树,改进之后的时间复杂度是O(logN).

ArrayList和LinkedList的区别

  • ArrayList的底层是数据,他的查找通过索引就可以找到,速度快
  • linkedList的底层是链表,查找的时间度是O(N)
  • ArrayList的删除和添加会更慢,当ArrayList添加或者删除的时候,他会重新的标注索引,并且需要移动位置。
  • LinkedList比ArrayList更加的占内存,因为LinkedList为每个节点存储了两个引用,一个只想前面一个元素,另外一个指向了后面的元素。
  • 更加适合使用LinkedList
    1, 当你的应用不需要随机访问,频繁的查找数据
    2, 当你的应用有更多的插入和删除操作的时候更适合

jdk1.8的新特性有哪些?

  1. 接口的默认方法

Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可
2. Lambda表达式
3. 函数式接口

每一个lambda表达式都对应一个类型,通常是接口类型。而“函数式接口”
是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。

接口和抽象类有那些区别?

  1. 不同

抽象类

  • 抽象类中可以定义构造器

  • 可以有抽象方法和具体方法

  • 抽象类中可以定义成员变量

  • 由抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法

  • 抽象类中可以包含静态方法

  • 一个类中只能继承一个抽象类

接口

  • 接口中不能定义构造器
  • 接口中全都是抽象方法
  • 接口中定义的成员变量都是常数
  • 接口中不能有静态方法
  • 一个类可以继承多个接口

怎么声明一个类不会被继承,什么场景下会用

如果一个类被final修饰,此类不能有子类,如果一个类中的所有方法都没有重写的需求,并没有子类,就可以使用final修饰

Java中的==和equals有那些区别?

  • 最大的区别就是一个是运算符,另外一个是方法
  • ==:如果比较的是基本数据类型就是比较数值是否相等,如果比较的是引用数据类型,则比较的是对象的地址值是否相等
  • equals():用来比较方法两个对象的内容是否相等

注意:equals方法不能用于基本数据类型的变量,如果没有对equal方法进行重写,则比较的是引用类型的变量所指向的对象的地址

String StringBuffer StringBuilder区别及使用场景

  1. String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。这个不能改变并不是指引用的对象不能改变,而是指对象里面的内容不能改变
  2. StringBuilder/StringBuffer表示的字符串对象可以直接进行修改
  3. StringBuilder 是 Java5 中引入的,它和 StringBuffer 的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方法都没有被 synchronized 修饰,因此它的效率理论上也比 StringBuffer 要高。

Java异常处理

  • 抛出异常:throw
  • 捕获异常:try,catch,finally
  • 声明异常:throws

常见的运行时异常

  • 空指针异常
  • 算术运算异常
  • 下标越界异常
  • 类型强制转换异常

常见的编译时异常

  • 未发现文件异常
  • 类为发现异常
  • SQL异常

说一下你对Spring的理解?

Spring 使创建 Java 企业应用程序变得更加容易。它提供了在企业环境中接受 Java 语言所需的一切,,并支持 Groovy 和 Kotlin 作为 JVM
Spring支持各种应用场景, 在大型企业中, 应用程序通常需要运行很长时间,而且必须运行在 jdk 和应用服务器上,这种场景开发人员无法控
Spring 是开源的。它拥有一个庞大而且活跃的社区,提供不同范围的,真实用户的持续反馈。这也帮助Spring不断地改进,不断发展。

你觉得spring的核心是什么?

  • spring是一个开源的框架
  • spring是为了简化企业开发而生成的
  • spring是一个IOC和AOP的容器框架
  • IOC:控制反转
  • AOP:面向切面编程

SPring的IOC实例对象的三种方式分别是?

  • 构造方法
  • 静态工厂
  • 实例工厂

redis为何这么快?

  • 基于内存
  • 单线程减少上下文切换,同时保证了原子性
  • IO多路复用

为什么采用单线程?

  • 因为Redis是基于内存来操作,CPU不会成为Redis的瓶颈,而最有可能的是及其内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章的使用单线程的方案了。

缓存的三大问题

  1. 缓存穿透:缓存穿透是指当用户查询某个数据时,Redis 中不存在该数据,也就是缓存没有命中,此时查询请求就会转向持久层数据库 MySQL,结果发现 MySQL 中也不存在该数据,MySQL 只能返回一个空对象,代表此次查询失败。如果这种类请求非常多,或者用户利用这种请求进行恶意攻击,就会给 MySQL 数据库造成很大压力,甚至于崩溃,这种现象就叫缓存穿透。
  • 缓存空对象,当MYSQL返回空对象的时候,Redis将该对象缓存起来,同时为其设置一个过期时间,当用户再次发起相同请求时,就会从缓存中拿到一个空对象,用户的请求被阻断在了缓存层,从而保护了后端数据库,但是这种做法也存在一些问题,虽然请求进不了 MSQL,但是这种策略会占用 Redis 的缓存空间。
  • 布隆过滤器:布隆过滤器判定不存在的数据,那么该数据一定不存在,利用它的这一特点可以防止缓存穿透。
  • 缓存空值
  • key值校验
  1. 缓存击穿:缓存击穿是指用户查询的数据缓存中不存在,但是后端数据库却存在,这种现象出现原因是一般是由缓存中 key 过期导致的。比如一个热点数据 key,它无时无刻都在接受大量的并发访问,如果某一时刻这个 key 突然失效了,就致使大量的并发请求进入后端数据库,导致其压力瞬间增大。这种现象被称为缓存击穿。
  • 改变过期时间:设置热点数据永不过期
  • 分布式锁:上锁:当我们通过 key 去查询数据时,首先查询缓存,如果没有,就通过分布式锁进行加锁,第一个获取锁的进程进入后端数据库查询,并将查询结果缓到Redis 中。
    解锁:当其他进程发现锁被某个进程占用时,就进入等待状态,直至解锁后,其余进程再依次访问被缓存的 key。
  1. 缓存雪崩:缓存雪崩是指缓存中大批量的 key 同时过期,而此时数据访问量又非常大,从而导致后端数据库压力突然暴增,甚至会挂掉,这种现象被称为缓存雪崩。它和缓存击穿不同,缓存击穿是在并发量特别大时,某一个热点 key 突然过期,而缓存雪崩则是大量的 key 同时过期,因此它们根本不是一个量级。
  • 缓存雪崩和缓存击穿有相似之处,所以也可以采用热点数据永不过期的方法,来减少大批量的 key 同时过期。再者就是为 key 设置随机过期时间,避免 key 集中过期。(这里的永不过期指的是如果查询到这条数据,发现他过期了,缓存区就会向mysql服务器发送请求,但同时缓存区还是会把过期的数据返回)

Redis有那些数据结构?

  • 字符串
  • 字典
  • 列表
  • 集合
  • 有序集合

什么是微服务?

MySQL的主从复制

Mysql的主从复制,就是将Mysql主数据库上的数据复制到从数据库上

  • 主从复制的目的是未来实现数据库的读写分离,写操作和实时性较强的读操作则访问主数据库;度操作则访问从数据库,从而使数据库具有更加强大的访问负载能力,支撑更多的用户访问

我的那个秒杀功能是怎么实现的?

  1. 全局ID生成器,解决了自增的id的规律性太强

超卖问题,多线程安全的问题?

  • 悲观锁:人文线程安全问题一定会发生的,因此在操作数据之前先获取锁,确保线程串行执行。例如Synchronized,lock都属于悲观锁。优点使简单粗暴,缺点使性能一般
  • 乐观锁:认为线程安全问题不一定会发生,因此不加锁,只是在更新数据的时候去判断有没有卡线程对数据做了修改。如果没有修改则认为是安全的,自己才会去更新数据,如果已经被其他线程修改说明了安全问题,因此可以重试或异常。优点性能好,缺点使成功率低的问题

JVM跨平台原理

  • 一次编译到处运行,每个操作系统都有JVM,但是可以执行同一份字节码文件

字节码的作用是什么?

代码-》字节码-》机器指令

  • 编译成字节码,加快了解释成机器指令的速度。

JVM的整体结构

  • 字节码-》类加载子系统-》方法区
  • 程 序计数器不会出现内存溢出的情况

相关文章:

java后端常见问题

java面向对象的特征,如何应用 面向对象编程是利用类和对象的编程思想万物皆成类,对象是类的具体体现,面向对象的三大基础特性,继承封装多态。、封装:封装隐藏了类的具体内部实现机制,可以在不影响使用的情…...

windows系统玩游戏找不到d3dx9_43.dll缺失,无法启动此程序的解决方法

今日,我们要深入讨论d3dx9_43.dll文件的重要性及其缺失问题。最近,我也遇到了这个文件丢失的困扰,因此想借此机会与大家分享如何解决d3dx9_43.dll缺失的问题。 一.电脑d3dx9_43.dll丢失会提示什么? 关于电脑提示d3dx9_43.dll丢失…...

MATLAB中mapminmax函数用法

目录 语法 说明 示例 使用 mapminmax 函数格式化矩阵 mapminmax函数的功能是通过将行最小值和最大值映射到 [-1 1] 来处理矩阵。 语法 [Y,PS] mapminmax(X,YMIN,YMAX) [Y,PS] mapminmax(X,FP) Y mapminmax(apply,X,PS) X mapminmax(reverse,Y,PS) dx_dy mapminmax(d…...

数据结构导航 -- 38篇

数据结构实现代码 线性表 顺序表代码-C-CSDN博客 单链表代码-C-CSDN博客 双链表代码-C-CSDN博客 有序表概述-CSDN博客 栈 栈代码数组实现-C-CSDN博客 栈代码链表实现(链栈)-C-CSDN博客 队列 队列与环形队列顺序存储代码数组实现-C-CSDN博客 队…...

前端性能优化 | CDN缓存

前言 CDN(Content Delivery Network)是一种分布式的网络架构,通过在全球各地部署节点服务器来快速传输和分发网络内容。CDN的主要目标是提供快速、可靠的内容传输,以提升用户体验。 本文主要从以下方面讲解CDN 什么是CDNCDN的作…...

【C#语言入门】17. 事件详解(上)

【C#语言入门】17. 事件详解(上) 一、初步了解事件 定义:单词Event,译为“事件” 通顺的解释就是**“能够发生的什么事情”**,例如,“苹果”不能发生,但是“公司上市”这件事能发生。在C#中事…...

Charles无法打开导出的har文件解决方法

打开出错:MalformedJson: Use JsonReader.setLenient(true) to accept malformed JSON at line1 column 1368184 path $.log.entries[41].request.postData.text 一、解决办法 用json.dumps格式化一下里面内容,保存为新文件再打开 import jsondef modify…...

FFmpeg--FlvPaser源码:解析.flv输出.h264

文章目录 程序功能:函数调用流程:部分FlvParse.h部分FlvParse.cpp 程序功能: 解析flv文件,重写一个h264文件,如输入movie.flv , 输出movie.h264 (只有视频,没有声音) 函数调用流程: 1 Proce…...

【项目笔记】java微服务:黑马头条(day02)

文章目录 app端文章查看,静态化freemarker,分布式文件系统minIO1)文章列表加载1.1)需求分析1.2)表结构分析1.3)导入文章数据库1.3.1)导入数据库1.3.2)导入对应的实体类 1.4)实现思路1.5)接口定义1.6)功能实现1.6.1):导入heima-leadnews-article微服务&am…...

每天五分钟计算机视觉:图像数据不足带来的问题和解决办法

本文重点 在当今的数字时代,图像数据的应用已经渗透到各个领域,包括但不限于计算机视觉、机器学习、自动驾驶、医疗诊断等。然而,当图像数据不足时,会引发一系列问题,对相关应用产生负面影响。 尤其是计算机视觉领域,图像数据尤为珍贵和稀缺,如果计算机视觉的任务中,如…...

手机App防沉迷系统C卷(JavaPythonC++Node.jsC语言)

智能手机方便了我们生活的同时,也侵占了我们不少的时间。"手机App防沉迷系统"能够让我们每天合理的规划手机App使用时间,在正确的时间做正确的事。 它的大概原理是这样的: 1、在一天24小时内,可注册每个App的允许使用时段; 2、一个时段只能使用一个App,举例说明…...

【WEEK2】学习目标及总结【SpringMVC】【中文版】

学习目标: 三周完成SpringMVC入门——第二周 学习内容: 参考视频教程【狂神说Java】SpringMVC最新教程IDEA版通俗易懂使用注释完成MVC程序Controller控制器RestFul风格结果跳转方式数据处理 学习时间及产出: 第二周 MON~FRI 2024.3.4 【W…...

Git版本工具学习

目录 版本控制git配置工作区域文件状态git对象模型基础命令.gitignore忽略文件IDEA集成Git 版本控制 本地版本控制:在本地记录每一次版本更新。 集中版本控制:版本数据都保存在单一服务器,不联网就看不到版本信息。SVN 分布式版本控制&…...

baidu, google和chatgpt -- 翻译对比

原文 That ChatGPT can automatically generate something that reads even superficially like human-written text is remarkable, and unexpected. But how does it do it? And why does it work? My purpose here is to give a rough outline of what’s going on inside…...

高分辨率全球海洋温度和盐度再分析数据Global Ocean Physics Reanalysis(0.083°),并利用matlab读取绘图

1.引言 在研究全球海平面变化的问题中,卫星测高获得总的海平面变化,而海平面变化包含质量变化和比容变化。因此测高数据和海洋物理分析数据对于海平面研究至关重要。 测高数据下载网址: Global Ocean Gridded L 4 Sea Surface Heights And …...

微信小程序修改placeholder样式

微信小程序有既定的修改placeholder的标签 一、placeholder-style直接修改样式 <input type"text" placeholder"请输入" placeholder-style"color:#e2e2e2;"></input>二、placeholder-class设置样式类 <input type"text&…...

爬虫案例1

通过get请求直接获取电影信息 目标页面: https://spa6.scrape.center/在network中可以看到是通过Ajax发送的请求&#xff0c;这个请求在postman中也可以直接请求成功&#xff0c;这只是一个用来练习爬虫的&#xff0c;没有达到js逆向的过程&#xff0c;需要通过分析js 代码来获…...

修改表结构

目录 修改表结构 创建数据表插入数据 修改已有列 修改 member 表的 name 列的定义 为表增加列 增加一个 address 列&#xff0c;这个列上不设置默认值 增加一个 sex 列&#xff0c;这个列上设置默认值 删除表中的列 删除 sex 列 Oracle从入门到总裁:​​​​​​https…...

Rust 语言中的 into() 方法

在 Rust 中&#xff0c;into() 方法通常用于将一个类型的值转换为另一个类型&#xff0c;这通常涉及到资源的所有权转移。into() 方法通常定义在实现了 Into<T> trait 的类型上&#xff0c;该 trait 允许一个类型被“转换”为另一个类型。 into() 方法的一个常见用途是在…...

MinIO权限提升漏洞CVE-2024-24747详细解决办法

漏洞名称&#xff1a; MinIO权限提升漏洞(CVE-2024-24747) 漏洞简介 2024年2月2日&#xff0c;深瞳漏洞实验室监测到一则MinIO 存在权限提升漏洞的信息&#xff0c;漏洞编号&#xff1a;CVE-2024-24747&#xff0c;漏洞威胁等级&#xff1a;高危。 该漏洞是由于用户创建的访…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...