Java实战经验分享
1. 项目优化与性能提升
面试问题:
聊聊你印象最深刻的项目,或者做了哪些优化
-
你在项目中如何解决缓存穿透问题? 缓存穿透是我们做缓存优化时最常遇到的问题,特别是当查询的对象在数据库中不存在时,缓存层和数据库都会被频繁访问,造成性能浪费。为了解决这个问题,我们通常会设置一个特殊的标记值(比如
-1
),表示该数据在数据库中不存在。当下次查询时,如果缓存值是-1
,就直接返回,不会再次查询数据库。这种方式简单有效,避免了缓存每次都访问数据库的性能瓶颈 -
如何处理缓存击穿问题? 另一个常见的问题就是缓存击穿,通常发生在缓存中某个热点数据过期时,多个请求同时查询这个数据,导致大量请求直接访问数据库。为了解决这个问题,我们可以通过设置不同的缓存过期时间来避免多个缓存同时过期,此外,还可以使用加锁机制,保证只有一个请求能查询数据库,其他请求则直接等待缓存更新
项目中的优化:
在项目中,我们也使用了定时任务来定期刷新热点数据缓存,避免在高并发场景下,缓存过期导致大量数据库请求。此外,采用了缓存预热机制,提前将热点数据加载到缓存中,从而避免流量高峰期缓存不命中的问题
2. 分布式锁的使用
你们项目中是如何使用分布式锁的?能具体讲讲它的工作原理和实现吗?
-
分布式锁的工作原理是什么? 分布式锁是为了在分布式系统中保证多个节点对共享资源的访问排他性。它的工作原理是,通过某种机制,确保在同一时刻只有一个节点能够获得锁,其他节点会被阻塞直到锁被释放。常见的实现方式包括基于数据库的锁、Redis的SETNX命令、以及Redisson等高层封装
-
你们是如何实现锁的失效机制的? 为了防止死锁的发生,我们在分布式锁实现时,需要为锁设置超时时间。比如,在Redis中,我们可以使用
SETNX
命令来获取锁,锁设置一个失效时间,这样即使请求在执行过程中发生异常,锁也会在超时后自动释放,避免死锁问题 -
Redisson的分布式锁能解决哪些问题? 在我们项目中,我们使用了Redisson来实现分布式锁,Redisson封装了Redis的各种操作,提供了更加稳定的分布式锁实现。而且它自带的watch dog机制,可以在锁的过期时间到达时自动续期,避免了锁过期导致的并发问题
-
Zookeeper和Etcd是如何保证分布式锁的互斥性的? 对于Zookeeper,它通过使用有序节点和watch机制来保证分布式锁的互斥性。每当某个节点释放锁时,Zookeeper会通知下一个获取锁的节点。Etcd则是通过基于Raft协议的分布式一致性算法来保证数据一致性,结合Prefix机制和watch功能实现分布式锁
3. 分布式事务的解决方案
在分布式系统中,如何处理分布式事务?你在项目中用了什么方案?
-
你理解的CAP理论和BASE理论是什么? CAP理论描述了在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)三者不可兼得。而BASE理论则是关于分布式事务的一种解决思路,它强调的是“基本可用、软状态、最终一致性”,并不是像传统的ACID那样强一致性
-
你在项目中使用了什么分布式事务解决方案? 在我们项目中,我们使用了TCC(Try、Confirm、Cancel)方案来解决分布式事务的问题。TCC方案的核心思想是:对于每个操作,都需要定义Try、Confirm和Cancel三个阶段。Try阶段执行操作的预处理,Confirm阶段进行提交,Cancel阶段则在失败时回滚之前的操作。TCC方案能够帮助我们处理不同微服务之间的数据一致性,并且通过补偿机制保证最终一致性
-
Seata的使用场景是什么? Seata是一个分布式事务解决方案,能够帮助我们在微服务架构中处理跨服务的数据一致性。它通过全局事务管理器协调多个本地事务,确保事务的一致性。在我们的项目中,Seata解决了微服务之间的分布式事务问题,尤其是在大规模并发场景下,能够有效减少事务回滚和数据不一致的风险
-
你们如何保证接口的幂等性? 接口的幂等性是分布式系统中一个非常重要的设计点,特别是在面对网络问题或请求超时时。我们通过多个策略来确保接口的幂等性:例如,在数据库中设置唯一约束来避免重复插入,或者在操作时生成唯一的请求ID,确保相同的请求不会被执行多次
关于接口的幂等性:
我们在接口设计时通常会使用select + insert + 主键冲突
的方式来确保接口的幂等性。如果接口请求已经被处理过,数据库的主键/唯一索引冲突就会自动返回已经处理的结果。除此之外,我们还使用了token令牌、乐观锁等方式来保证在高并发场景下接口的幂等性,避免重复提交订单或多次扣款的情况
4. MySQL架构设计
面试问题:
你们的MySQL架构是怎样的?能介绍一下如何保证数据库的高可用性吗?
-
你们使用了什么样的数据库架构? 我们公司在数据库架构上采用了主从复制的方式,即一主多从。主库负责写操作,从库负责读操作,这样可以有效分担主库的读压力,提升系统的并发能力。每个从库都会定期同步主库的数据,这样即使主库宕机,从库也能保证数据的完整性
-
如何处理MySQL的高可用性? 为了保证MySQL的高可用性,我们使用了MHA(Master High Availability)方案,当主库发生故障时,能够自动切换到从库,确保业务不中断。此外,我们还会使用数据库中间件(如Mycat)来对数据库进行分片,以应对海量数据的高并发需求
-
MariaDB多主集群方案的优缺点是什么? MariaDB的多主集群方案通过Galera Replication实现多主节点之间的数据同步,能够同时支持多个节点进行读写操作,提升了系统的可用性和扩展性。缺点是,当某个节点变慢时,其他节点的性能也会受到影响,因此需要根据业务场景选择合适的数据库架构
-
数据库中间件的使用场景是什么? 我们在面对高并发、高数据量的需求时,使用了数据库中间件(如Mycat)进行数据分片。数据库中间件能够根据特定的规则将数据分散到多个数据库实例中,从而减轻单一数据库的压力,确保系统的高可用性和扩展性
日常工作中你是怎么优化 SQL 的?
- 硬件和操作系统层面的优化
- 架构设计层面的优化
- MySQL 程序配置优化
- SQL 优化
- 硬件及操作系统层面优化 从硬件层面来说,影响 Mysql 性能的因素有,CPU、可用内存大小、磁盘读写速度、网络带宽从操作系统层面来说,应用文件句柄数、操作系统网络的配置都会影响到 Mysql 性能。这部分的优化一般由 DBA 或者运维工程师去完成。在硬件基础资源的优化中,我们重点应该关注服务本身承载的体量,然后提出合理的指标要求,避免出现资源浪费!
- 架构设计层面的优化 MySQL 是一个磁盘 IO 访问量非常频繁的关系型数据库 在高并发和高性能的场景中.MySQL 数据库必然会承受巨大的并发压力,而此时,我们的优化方式可以 分为几个部分 MySQL 程序配置优化 MySQL 是一个经过互联网大厂验证过的生产级别的成熟数据库,对于 Mysql 数据库本身的优化,一般 是通过 Mysql 中的配置文件 my.cnf 来完成的,比如: Mysql5.7 版本默认的最大连接数是 151 个,这个值可以在 my.cnf 中修改。 binlog 日志,默认是不开启 缓存池 bufferpoll 的默认大小配置等。 由于这些配置一般都和用户安装的硬件环境以及使用场景有关系,因此这些配置官方只会提供一个默认 值,具体情况还得由使用者来修改。
- SQL 优化又能分为三部曲慢 SQL 的定位和排查我们可以通过慢查询日志和慢查询日志分析工具得到有问题的 SQL 列表。执行计划分析针对慢 SQL,我们可以使用关键字 explain 来查看当前 sql 的执行计划.可以重点关注 type key rowsfilterd 等字段 ,从而定位该 SQL 执行慢的根本原因。再有的放矢地进行优化使用 show profile 工具Show Profile 是 MySQL 提供的可以用来分析当前会话中,SQL 语句资源消耗情况的工具,可用于 SQL调优的测量。在当前会话中.默认情况下处于 show profile 是关闭状态,打开之后保存最近 15 次的运行结果针对运行慢的 SQL,通过 profile 工具进行详细分析.可以得到 SQL 执行过程中所有的资源开销情况.如 IO 开销,CPU 开销,内存开销等
相关文章:
Java实战经验分享
1. 项目优化与性能提升 面试问题: 聊聊你印象最深刻的项目,或者做了哪些优化 你在项目中如何解决缓存穿透问题? 缓存穿透是我们做缓存优化时最常遇到的问题,特别是当查询的对象在数据库中不存在时,缓存层和数据库都会…...
前端控制器模式
前端控制器模式 概述 前端控制器模式(Front Controller Pattern)是一种设计模式,它将应用程序中的所有用户请求统一交由一个控制器处理。这种模式在MVC(Model-View-Controller)架构中尤为常见,它能够简化…...

Linux之安装docker
一、检查版本和内核是否合格 Docker支持64位版本的CentOS 7和CentOS 8及更高版本,它要求Linux内核版本不低于3.10。 检查版本 cat /etc/redhat-release检查内核 uname -r二、Docker的安装 1、自动安装 Docker官方和国内daocloud都提供了一键安装的脚本&#x…...

BUUCTF_XSS-Lab
xss XSS(Cross - Site Scripting)即跨站脚本攻击,是一种常见的 Web 安全漏洞。攻击者通过在目标网站注入恶意脚本(通常是 JavaScript),当其他用户访问该网站时,这些恶意脚本会在用户的浏览器中执…...

springBoot使用
1.什么是SpringBoot SpringBoot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。SpringBoot是伴随Spring4.0的时候发布的一个框架。SpringBoot用来简化Spring应用的开发,约定大于配置,去繁从简。 从本质上来说ÿ…...

DS图(中)(19)
文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下,我们来学习下图的中篇!!! 一、图的遍历 图的遍历指的是遍历图中的顶点,主要有 广度优先遍历 …...

Vue Dom截图插件,截图转Base64 html2canvas
安装插件 npm install html2canvas --save插件使用 <template><div style"padding: 10px;"><div ref"imageTofile" class"box">发生什么事了</div><button click"toImage" style"margin: 10px;&quo…...
Unity3D仿星露谷物语开发小结1
1、Cinemachine的作用及使用方法 (1)作用 控制Camera的模块,实现摄像机的复杂控制,比如角色的跟随,限制Camera的区域 (2)使用方法 在已有Main Camera的情况下, 通过【GameObject -&…...
graylog初体验
最近graylog比较火,部署了一个来测试下,看下后续能不能代替目前占用资源比较多的elk,目前未对graylog性能进行深入测试,只是简单体验了下,graylog的UI比较简陋,但是在报警以及权限方面优于ELK,整…...

15.PPT:文静-云计算行业发展【29】
目录 NO123 NO345 NO6 NO78 NO9/10/11/12 NO123 设计→幻灯片大小→自定义幻灯片大小→ 全屏显示(16:9)→最大化 NO345 SmartArt 主题颜色2/6/9:形状样式:样式 加大行距加宽间距 NO6 NO78 设计→设置背景…...

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案
目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行(下载) 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…...
MFC 的 CListCtrl 控件,使用SetItemState 方法来设置选中某个 item,如何达到效果和鼠标点击一致
1)查询到的方法如下: // 假设你要选中第 2 行(索引从 0 开始) int nItem 1; // 取消所有其他选中项 m_ListCtrl.SetItemState(-1, 0, LVIS_SELECTED); // 设置选中状态,并确保它具有焦点 m_ListCtrl.SetItemStat…...
一文读懂:TCP网络拥塞的应对策略与方案
TCP(传输控制协议)是互联网中广泛使用的可靠传输协议,它通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制确保数据的可靠传输。然而,在网络环境中,由于多个主机共享网络资源,网络拥塞成为了一个…...

深度整理总结MySQL——子查询的工作原理
子查询的工作原理 前言为什么开发人员喜欢写子查询查询重写条件化简移除不必要的括号常量传递(constant_propagation)移除没用的条件(trivial_condition_removal)HAVING子句和WHERE子句的合并 常量表检测外连接消除 子查询子查询语…...
20240824 美团 笔试
文章目录 1、单选题1.11.21.31.41.51.61.71.81.91.101.111.121.131.141.151.161.171.181.191.202、编程题2.12.2岗位:硬件开发工程师(嵌入式系统软件开发方向) 题型:20 道单选题,2 道编程题题 1、单选题 1.1 C 语言中,如果输入整数 v 是 2 的幂,下面表达式中哪个会返…...
Windows图形界面(GUI)-QT-C/C++ - QT 文本编辑控件详解
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 概述 1. QLineEdit 1.1 特点 1.2 属性 1.3 常用方法 1.4 拓展应用 2. QTextEdit 2.1 特点 2.2 属性 2.3 常用方法 2.4 拓展应用 3. QPlainTextEdit 3.1 特点 3.2 属性 3.3…...
IDEA中Resolving Maven dependencies卡着不动解决方案
一、修改settings.xml Maven配置阿里云仓库主要通过修改Maven的settings.xml文件来实现。以下是具体步骤: 1、找到settings.xml文件: 通常位于Maven安装目录下的conf文件夹中,或者在用户目录下的.m2文件夹中(如果用户自定义了settings.xml的位置)。 2、编辑se…...

go数据结构学习笔记
本博文较为完整的实现了go的链表、栈,队列,树,排序,链表包括顺序链表,双向链表,循环链表,队列是循环队列,排序包含冒牌、选择 1.链表 1.1 顺序链表 type LNode struct {data intn…...

【后端开发】系统设计101——Devops,Git与CICD,云服务与云原生,Linux,安全性,案例研究(30张图详解)
【后端开发】系统设计101——Devops,Git与CICD,云服务与云原生,Linux,安全性,案例研究(30张图详解) 文章目录 1、DevopsDevOps与SRE与平台工程的区别是什么?什么是k8s(Ku…...
Google地图瓦片爬虫——进阶版
紧接上一篇——Google地图瓦片爬虫 clash节点自动切换 为了防止一个IP地址访问频率过快问题,自动切换clash的节点 def change_node(is_stop):while True:_r requests.get("http://127.0.0.1:11053/proxies", headersclash_headers, verifyFalse)# 这里…...
npm error Cannot read properties of null (reading ‘matches‘)
当在使用 npm 命令时遇到 Cannot read properties of null (reading matches) 错误,这通常表示代码尝试访问一个 null 对象的 matches 属性。以下是综合多个来源的解决策略,按优先级排列: 一、核心解决方法 1. 清理缓存与重新安装依赖&…...
C++单例模式教学指南
C单例模式完整教学指南 📚 目录 [单例模式基础概念][经典单例实现及问题][现代C推荐实现][高级话题:双重检查锁][实战应用与最佳实践][总结与选择指南] 1. 单例模式基础概念 1.1 什么是单例模式? 单例模式(Singleton Pattern&…...
使用 Docker Compose 部署 Jenkins(LTS 版)持续集成环境
一、前言 Jenkins 是目前最流行的开源持续集成工具之一。本教程将手把手带你使用 Docker Compose 快速部署 Jenkins LTS(长期支持版本),同时保留数据持久化、Docker 命令转发等功能,适合用于生产或本地开发测试环境。 二、环境准…...

蓝桥杯国赛题2022
首先这个题应该是一个01背包,背包容量为2022,有2022个物品,第i个物品的体积为i,只不过这里有两个限制条件,一个限制条件是和为2022,另一个限制条件为10个数,两个限制条件那就把加一维࿰…...
Unity基础-数学向量
Unity基础-数学向量 二、向量相关用法 概述 向量在Unity游戏开发中扮演着重要角色,用于表示位置、方向、速度等。Unity提供了Vector2、Vector3等结构体来处理向量运算。 1. 向量基础操作 1.1 向量创建和访问 // 创建向量 Vector3 position new Vector3(1, 2,…...

明基编程显示器终于有优惠了,程序员快来,错过等一年!
最近618的活动已经陆续开始了,好多人说这是买数码产品的好时候,作为一名资深程序员,我做了不少功课,决定给自己升级办公设备,入手明基 RD 系列的显示器,这是市面上首家专注于我们程序员痛点和需求的产品&am…...

量子比特实现方式
经典计算机是通过电子电路运转起来的。使用硅制半导体制成的名为晶体管的小元件发挥了开关的作用,将其与金属布线组合起来即可实现逻辑门,再将逻辑门集成起来就能制造出经典计算机。量子计算机的制造过程则要复杂许多,因为量子计算机既需要量…...
JavaScript 原型与原型链:深入理解 __proto__ 和 prototype 的由来与关系
引言 在 JavaScript 的世界中,原型和原型链是理解这门语言面向对象编程(OOP)机制的核心。不同于传统的基于类的语言如 Java,JavaScript 采用了一种独特的原型继承机制。本文将深入探讨 __proto__ 和 prototype 的由来、关系以及它…...
C++.OpenGL (3/64)着色器(Shader)深入
着色器(Shader)深入 着色器核心概念 #mermaid-svg-xC0jTt9mJWGVa7yE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xC0jTt9mJWGVa7yE .error-icon{fill:#552222;}#mermaid-svg-xC0jTt9mJWGVa7yE .error-text{fi…...

学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2]
学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2] 学习机器学习,需要学习如何预处理原始数据,这里用到pandas,将原始数据转换为张量格式的数据。 学习笔记(23): 机器学习之数据预处理Pandas和转换成张量格式[1]-CSDN博客 下面…...