Java后端面试题(day16)

目录

  • java常见的引用类型
  • java中深拷贝和浅拷贝
  • 如何设计一个秒杀系统?
  • 谈一下对高并发的理解,平时怎么处理高并发问题?
  • Comparable和Comparator区别?
  • 解决hash冲突有哪些方法?
  • Synchronized锁的升级过程

java常见的引用类型


java的引用类型一般分为四种:强引用、软引用、弱引用、虚引用

  1. 强引用:普通的变量引用

    • 第一种:直接new
      User user = new User();
      
    • 第二种:通过反射
      Class<?> studentClass = Class.forName("com.beiyou.model.student");
      Object o = studentClass.newInstance();
      
  2. 软引用

    • 当所剩内存空间不够我们新的对象存储的时候,直接干掉软引用。
    • 当所剩内存空间够我们新对象的存储的时候,不会删除我们的软引用对象。
    SoftReference<User> user = new SoftReference<User>(new User());
    
  3. 弱引用
    将对象用WeakReference弱引用类型的对象包裹,只要GC执行了,他就会被回收掉.

    public static WeakReference<User> user = new WeakReference<User>(new User());
    
  4. 虚引用虚引用也称为幽灵引用或者幻影引用

java中深拷贝和浅拷贝


Java中,对象的复制分为深拷贝(Deep Copy)和浅拷贝(Shallow Copy)两种方式,主要区别在于对对象内部引用类型成员变量的处理不同。

  • 浅拷贝(Shallow Copy)
    浅拷贝是指在创建新对象时,对于对象中的基本数据类型 的成员变量会 复制其值,而对于引用类型成员变量则只复制其引用

    实现浅拷贝的方式
    Java中实现浅拷贝的一种常见方式是通过 Object类的clone()方法。需要注意的是,clone()方法是受保护的,所以通常 需要在类中重写此方法并声明为public ,同时还需要实现Cloneable接口

  • 深拷贝(Deep Copy)
    深拷贝则是 完全复制对象及其所有引用类型成员变量指向的对象,即不仅复制引用本身,还复制引用指向的对象。

    Java中实现深拷贝有几种常见方式

    1. 序列化
    2. 构造函数
    3. 复制对象的属性
    4. 使用第三方库

如何设计一个秒杀系统?


秒杀活动请求以公网为划分点,可以分为:前端部分、后端部分。

秒杀系统
整体思路是尽量将流量挡在前面,让尽量少的流量留到后端部分。因为越往后端,我们的处理逻辑就越重,其处理能力也越弱。

  • 前端优化
    对于前端部分来说,常见的优化手段有:【页面静态化 + CDN】、【请求频率限制】。

    CDN: 内容分发网络,它由非常多台 分布在世界各地 的缓存服务器组成。每次用户请求特定域名的时候,会转发到对应 CDN 的 DNS 解析服务器,随后会返回一台 离用户地理位置最近的一台 CDN 服务器

    • 页面静态化 + CDN
      可以将所有可以静态化的内容全部静态化,然后将其配置在 CDN 服务器上。这样既提高了用户打开页面的时间,又减少了后端服务器的压力
    • 请求频率限制
      求频率限制,指的是根据业务的特点,在前端做一些流量拦截,减少后端服务器的压力。常见的拦截方式有:
      1. 设定一个请求概率,只允许 30% 的概率向后端发送接口请求。
      2. 设定一个请求频率,例如 10 秒钟只能请求 1 次,随后按钮置灰。
  • 后端优化
    后端的优化有如下几种方式:

    • 增加缓存层 + 预热数据
    • MQ 异步处理
    • 限流、熔断、降级
    • 业务端优化

谈一下对高并发的理解,平时怎么处理高并发问题?


高并发是指系统在同一时间段内能够处理 大量 并发请求的能力。

在互联网应用中,随着用户数量的增长,系统的访问量也会急剧增加,这就需要系统能够支持高并发,以保证服务的稳定性和响应速度。

下面是一些关于高并发的处理方法:

  1. 分库分表
  2. Spring Cloud Sentinel [哨兵]
  3. K8S 部署应用 [可以动态扩展副本]
  4. 用nginx作负载均衡
  5. Redis作缓存层
  6. mysql数据库用集群 (读写分离)
  7. Lua脚本减少对数据库的请求
  8. MQ异步
  9. 前端静态页面
  10. CDN

Comparable和Comparator区别?


  • 相同点ComparableComparator 都是用于比较排序

  • 不同点:

    1. 接口所在包不同java.lang.Comparablejava.util.Comparator
    2. 比较逻辑不同Comparable内部比较器Comparator外部比较器
    3. 排序方法不同:Comparable重写方法compareTo(T o),Comparator重写方法compare(T o1, T o2)
    4. 排序规则数量限制不同:Comparable 唯一字段排序,Comparator可以有 多个字段排序

解决hash冲突有哪些方法?


  1. 链表法
  2. 开放地址法
  3. 再hash法
  4. 公共溢出区

Synchronized锁的升级过程


  • 一开始是无锁状态

  • 当一个线程首次获得对象锁时,JVM会设置为 偏向锁。

  • 当第二个线程尝试获取偏向锁失败时,偏向锁会升级为 轻量级锁

  • 此时,JVM会使用CAS自旋操作来尝试获取锁,如果成功则进入临界区域,否则升级为 重量级锁。

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

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

相关文章

图论day56|广度优先搜索理论基础 、bfs与dfs的对比(思维导图)、 99.岛屿数量(卡码网)、100.岛屿的最大面积(卡码网)

图论day56|广度优先搜索理论基础 、bfs与dfs的对比&#xff08;思维导图&#xff09;、 99.岛屿数量&#xff08;卡码网&#xff09;、100.岛屿的最大面积&#xff08;卡码网&#xff09;&#xff09; 广度优先搜索理论基础bfs与dfs的对比&#xff08;思维导图&#xff09;&…

C++调试方法(Vscode)(一) ——本地调试

初学者在调试一段代码的时候&#xff0c;经常出于不明原因&#xff0c;写出bug&#xff0c;导致程序崩溃。但是定位崩溃的地方时&#xff0c;往往采用简单而朴素的方法&#xff1a;即采用cout或者printf进行输出。这种方式既原始&#xff0c;又低效。一个合格的工程师应该是通过…

RabbitMQ简介及安装类

RabbitMQ概述-MQ介绍 RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;它支持多种消息协议&#xff0c;并且可以轻松地与多种编程语言和框架集成。RabbitMQ是使用Erlang语言编写的&#xff0c;因此它具有高并发和高可用性的特点。以下是RabbitMQ的一些关键特性和概念 消息…

华为OD机试 - 区间交叠问题 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

Django的请求与响应

Django的请求与响应 1、常见的请求2、常见的响应3、案例 1、常见的请求 函数的参数request是一个对象&#xff0c;封装了用户发送过来的所有请求相关数据。 get请求一般用来请求获取数据&#xff0c;get请求也可以传参到后台&#xff0c;但是传递的参数显示在地址栏。 post请求…

【CSS3】css开篇基础(2)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

el-date-picker设置只有某些日期可选

示例图&#xff1a; <el-date-pickerv-model"topFormObj.upTime"type"date"value-format"timestamp"format"dd/MM/yyyy":picker-options"pickerOptions" /> 固定限制每周的周末周三不可选 data() {return {pickerOp…

[Python学习日记-46] Python 中第三方开源模块的安装、使用与上传自己写的模块

[Python学习日记-46] Python 中第三方开源模块的安装、使用与上传自己写的模块 简介 下载与安装 如何使用安装好的第三方开源模块 如何上传自己写的模块到 PyPi 简介 在前面的模块介绍和导入当中主要介绍的都是 Python 内置的一些模块&#xff0c;我们把它称为标准库&#…

【多版本并发控制(MVCC)】

并发事务问题&#xff1a; MySQL隔离级别-未提交读&#xff0c;提交读&#xff0c;可重复读&#xff0c;序列化 隔离级别对于并发事务的解决情况 隔离级别脏读不可重复读幻读未提交读不可不可不可读已提交可不可不可可重复读 &#xff08;默认&#xff09;可可不可串行化&…

vue+echarts实现雷达图及刻度标注

文章目录 前言代码实现实现效果总结 前言 最近项目有做数据可视化 大屏 不免再次使用些echarts应用 记录下其中echarts雷达图的实现 代码实现 先上代码 <template><div class"container"><div ref"chart" style"width: 500px; heig…

树莓派应用--AI项目实战篇来啦-11.OpenCV定位物体的实时位置

1. 介绍 本项目通过PCA9685舵机控制模块控制二自由度舵机云台固定在零点位置&#xff0c;然后通OpenCV检测到黄色小熊&#xff0c;找到中心位置并打印出中心位置的坐标&#xff0c;通过双色LED灯进行指示是否检测到目标&#xff0c;本项目为后面二维云台追踪物体和追踪人脸提供…

grpc的python使用

RPC 什么是 RPC &#xff1f; RPC&#xff08;Remote Procedure Call&#xff09;远程过程调用&#xff0c;是一种计算机通信协议&#xff0c;允许一个程序&#xff08;客户端&#xff09;通过网络向另一个程序&#xff08;服务器&#xff09;请求服务&#xff0c;而无需了解…

Cef加载自定义本地资源

在Cef auto build下载cefCEF Automated Builds 我下载的是104&#xff0c;使用cefsimple工程。 例如&#xff1a;前端资源如下 通过http协议把前端资源加载出来。所有的资源都通过http://local.test.cn/xxx加载。 前端资源包括index.html、test.css、test.js index.html&am…

福州少儿自闭症寄宿制学校:专注关爱每个孩子

在福州&#xff0c;少儿自闭症寄宿制学校以其专注与关爱&#xff0c;为自闭症儿童提供了一个温暖的避风港。这些学校不仅提供教育服务&#xff0c;更是一个充满爱与包容的大家庭&#xff0c;让孩子们在这里找到归属感和自信心。然而&#xff0c;当我们把目光投向广州&#xff0…

《鸟哥的Linux私房菜基础篇》---1 Linux的介绍与如何开启Linux之路

目录 一、Linux的简单介绍 1、Linux的简介 2、Linux的起源与发展 3、主要特点 4、应用场景 二、开启Linux之路 1、学习Linux的相关知识 2、正规表示法、管线命令、数据流重导向 前言 整体大纲预览 一、Linux的简单介绍 1、Linux的简介 &#xff08;1&#xff09;Linu…

[棋牌源码] 2023情怀棋牌全套源代码含多套大厅UI及600+子游源码下载

降维打击带来的优势 这种架构不仅极大提升了运营效率&#xff0c;还降低了多端维护的复杂性和成本。运营商无需投入大量资源维护多套代码&#xff0c;即可实现产品的全终端覆盖和快速更新&#xff0c;这就是产品层面的降维打击。 丰富的游戏内容与多样化大厅风格 类型&#…

VS2017 编译 SQLite3 动态库

首先官方下载源码: Tags sqlite/sqlite (github.com) 1.安装 VS2017 community edition 2.打开VS2017命令行工具 3.安装TCL 开发库,推荐 TCL 9.0 先下载源码: Tcl/Tk 9.0 使用vs2017编译tcl&

图书馆自习室座位预约管理微信小程序+ssm(lw+演示+源码+运行)

摘 要 随着电子商务快速发展世界各地区,各个高校对图书馆也起来越重视.图书馆代表着一间学校或者地区的文化标志&#xff0c;因为图书馆丰富的图书资源能够带给我们重要的信息资源&#xff0c;图书馆管理系统是学校管理机制重要的一环&#xff0c;,面对这一世界性的新动向和新…

vue3中监视 Reactive对象中的属性

watch 的第一个参数可以是不同形式的“数据源”&#xff1a;它可以是一个 ref (包括计算属性)、一个响应式对象、一个 getter 函数、或多个数据源组成的数组 一、框架&#xff1a; <template><div class"divBox"><h2>姓名&#xff1a;{{ person.…

ElasticSearch是什么?

1.概述 Elasticsearch 是一个基于 Apache Lucene 构建的开源分布式搜索引擎和分析引擎。它专为云计算环境设计&#xff0c;提供了一个分布式的、高可用的实时分析和搜索平台。Elasticsearch 可以处理大量数据&#xff0c;并且具备横向扩展能力&#xff0c;能够通过增加更多的硬…