Java后端面试题(day16)

embedded/2024/12/22 23:30:16/

目录

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

java_2">java常见的引用类型


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

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

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

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

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

java_36">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.ppmy.cn/embedded/127835.html

相关文章

【机器学习】并行计算(parallel computation)Part2

Asynchronous Parallel Gradient Descent Using Parameter Server 用Parameter Server实现异步并行梯度下降 Parameter Server这种编程模型可以实现异步并行梯度下降&#xff0c;架构采用的是Client-Server&#xff0c;通信方式是Message-passing&#xff0c;同步方式是异步的…

爬虫工具——Fidder的安装

一、Fidder的安装 出现这样的界面就是安装成功了 二、Fiddler的配置 1.端监听手机端设置 但是如果你想要对手机上的app进行抓包怎么办呢&#xff0c;那么你还需要进行以下操作&#xff1a; 首先你的Fiddler所在的电脑和手机必须处在同一个局域网内(即连着同一个路由器)。 …

基于STM32 ARM+FPGA+AD的电能质量分析仪方案设计(一)硬件设计

电能质量分析系统硬件设计 3.1 电能质量分析系统设计要求 本系统实现对电能质量的高精度测量&#xff0c;根据国家相关电能质量分析仪器规定 标准以及对市场电能质量分析仪的分析&#xff0c;指定以下设计目标。 &#xff08; 1 &#xff09;电能质量参数测量精度&#xf…

FLINK SQL UDF

在Flink SQL中&#xff0c;UDF&#xff08;User-Defined Function&#xff0c;用户自定义函数&#xff09;是一种扩展Flink SQL处理能力的机制。通过UDF&#xff0c;用户可以编写自定义的Java或Scala代码&#xff0c;以处理Flink SQL无法直接支持的数据处理逻辑。Flink SQL支持…

大厂面试真题-组合和聚合的区别是什么

组合和聚合比较类似&#xff0c;二者都表示整体和部分之间的关系。 聚合关系的特点是&#xff1a;整体由部分构成&#xff0c;但是整体和部分之间并不是强依赖的关系&#xff0c;而是弱依 赖的关系&#xff0c;也就是说&#xff0c;即使整体不存在了&#xff0c;部分仍然存在…

【Java小白系列课】-01-Java环境安装-变量

本套课程将会从0基础讲解Java语言核心技术&#xff0c;适合人群&#xff1a; 大学中开设了Java语言课程的同学想要专升本或者考研的同学想要考计算机等级证书的同学想要从事Java相关开发开发的同学 精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https:/…

vue3实现登录获取token并自动刷新token进行JWT认证

在《django应用JWT(JSON Web Token)实战》介绍了如何通过django实现JWT&#xff0c;并以一个具体API接口实例的调用来说明JWT如何使用。本文介绍如何通过vue3的前端应用来使用JWT认证调用后端的API接口&#xff0c;实现一下的登录认证获取JWT进行接口认证。 一、账号密码登录获…

设置 Notepad++ 制表符(Tab 缩进)宽度为2个空格大小

Notepad 默认的制表符宽度是 4 个空格的大小&#xff0c;一个规模比较大的代码段或者 xml 等文件&#xff0c;小屏幕打开时看到的情景真的和让人着急&#xff0c;拖来拖去&#xff01;有两种方案可以解决这种情况。 修改缩进为空格 这种我们不太推荐&#xff0c;但是有些公司…