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

shopee虾皮 java后端 一面面经 整体感觉不难

在这里插入图片描述

面试总结:总体不难,算法题脑抽了只过了一半,面试官点出了问题说时间到了,反问一点点,感觉五五开,许愿一个二面


1.Java中的锁机制,什么是可重入锁

Java中的机制主要包括

  • synchronized关键字

  • Lock接口及其实现类(如ReentrantLock)

  • 原子类(如AtomicInteger)

  • volatile关键字,仅保证可见性和有序性

可重入锁

可重入锁是指同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁,不会因为之前已经获取过还没释放而阻塞。Java中ReentrantLocksynchronized都是可重入锁。

可重入锁的实现原理:

  • 记录锁的持有线程
  • 维护一个计数器
  • 当计数器为0时,表示锁没有被任何线程持有
  • 当持有锁的线程再次请求锁时,计数器+1
  • 当线程退出同步代码块时,计数器-1
  • 计数器为0时释放锁

可重入锁的优点:

  • 避免死锁
  • 提高了锁的灵活性

2.AQS (AbstractQueuedSynchronizer)

AQS是Java并发包中的核心基础组件,用于构建锁或者其他同步组件。

AQS使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。

AQS的核心思想:

  • 如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。
  • 如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制。

AQS的主要方法:

  • acquire(int): 独占式获取同步状态
  • release(int): 独占式释放同步状态
  • acquireShared(int): 共享式获取同步状态
  • releaseShared(int): 共享式释放同步状态

AQS的实现:

  • 使用一个volatile的int类型的成员变量来表示同步状态
  • 使用一个FIFO队列来完成资源获取的排队工作
  • 使用CAS来原子性地修改同步状态值

AQS的应用:

  • ReentrantLock
  • Semaphore
  • CountDownLatch
  • ReentrantReadWriteLock
  • ThreadPoolExecutor

3.Redis相关数据结构,为什么每种数据类型一般都有两种数据结构?

Redis的主要数据结构

  • String: 简单动态字符串(SDS)
  • List: 双向链表和压缩列表(ziplist)
  • Hash: 哈希表和压缩列表
  • Set: 哈希表和整数集合(intset)
  • Sorted Set: 跳表(skiplist)和压缩列表

每种数据类型一般都有两种数据结构的原因

  • 空间和时间的权衡
  • 数据量小的时候使用更加紧凑的数据结构,节省内存
  • 数据量大的时候转换为普通数据结构,提高操作效率

以Hash为例:

  • 当field-value长度较短且个数较少时,使用压缩列表
  • 当数据量增大时,转换为哈希表

这种设计能够在内存使用和性能之间取得很好的平衡。

4.JVM相关内存结构,GC

JVM内存结构

  1. 堆(Heap)
    • 年轻代(Young Generation)
      • Eden空间
      • Survivor空间(From和To)
    • 老年代(Old Generation)
  2. 方法区(Method Area)
    • 永久代(JDK 8之前)/元空间(JDK 8及以后)
  3. 程序计数器(Program Counter Register)
  4. 虚拟机栈(VM Stack)
  5. 本地方法栈(Native Method Stack)

GC(垃圾回收)

垃圾回收算法:

  • 标记-清除算法
  • 复制算法
  • 标记-整理算法
  • 分代收集算法

垃圾收集器:

  • Serial收集器
  • ParNew收集器
  • Parallel Scavenge收集器
  • Serial Old收集器
  • Parallel Old收集器
  • CMS收集器
  • G1收集器

GC触发时机:

  • Minor GC:清理新生代。
  • Major GC:清理老年代。
  • Full GC:清理整个堆,包括新生代和老年代。

5.HashMap底层原理

HashMap的底层数据结构是数组+链表+红黑树(JDK 1.8及以后)。

主要属性:

  • Node<K,V>[] table: 存储数据的数组
  • int size: 实际存储的键值对数量
  • int threshold: 扩容阈值
  • float loadFactor: 负载因子

put操作流程:

  1. 对key的hashCode()进行hash操作
  2. 计算index = (n - 1) & hash
  3. 如果没碰撞,直接放到bucket里
  4. 如果碰撞,以链表的形式存在buckets后
  5. 如果链表长度超过8,转换为红黑树
  6. 如果size超过threshold,进行扩容

get操作流程:

  1. 对key的hashCode()进行hash操作
  2. 计算index = (n - 1) & hash
  3. 遍历该位置上的链表或红黑树

扩容机制:

  • 当size超过threshold时进行扩容
  • 扩容时,容量变为原来的2倍
  • 重新计算每个元素在数组中的位置(再散列)

6.MySQL索引类型,索引失效,覆盖索引,hash索引

MySQL索引类型

  • B+树索引(默认)
  • Hash索引
  • Full-text全文索引

索引失效的情况

  • 使用!=或<>操作符
  • 使用函数或表达式
  • 类型隐式转换
  • 使用OR连接条件
  • like以%开头
  • 不满足最左前缀原则

覆盖索引

查询的数据列恰好是索引的一部分,可以直接从索引中获取数据,不需要回表查询。

Hash索引

  • 基于哈希表实现,只有精确匹配才有效
  • 不支持范围查询
  • 不支持排序
  • 不支持部分索引列匹配查找

Hash索引 vs B+树索引:

  • Hash索引只支持等值查询,B+树索引支持范围查询
  • Hash索引不支持排序,B+树索引天然支持排序
  • Hash索引不支持最左前缀匹配,B+树索引支持

7.Spring IOC AOP原理,循环依赖解决

IOC(控制反转)

  • 核心是BeanFactory和ApplicationContext
  • 通过反射机制实例化bean并建立bean之间的依赖关系
  • 管理bean的生命周期

AOP(面向切面编程)

  • 核心是ProxyFactory
  • 两种代理方式:JDK动态代理和CGLIB
  • 通过织入切面来实现功能的统一维护

循环依赖解决

Spring通过三级缓存解决循环依赖

  1. 一级缓存,singletonObjects: 完全初始化好的bean
  2. 二级缓存,earlySingletonObjects: 实例化但未初始化的bean
  3. 三级缓存,singletonFactories: 存放BeanFactory的实例

解决流程:

  1. 创建bean实例
  2. 将创建的bean实例放入三级缓存
  3. 填充属性
  4. 如果发现循环依赖,尝试从三级缓存中获取
  5. 没有循环依赖,将bean放入一级缓存

构造函数的循环依赖无法解决,因为实例化和初始化是一体的。

8.MyBatis相关,#和$区别

MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。

#{}和${}的区别:

  • #{}是预编译处理,会将参数替换为?
  • ${}是字符串替换,直接将参数值拼接到SQL中

使用场景:

  • #{}用于SQL语句中的值
  • ${}用于动态表名、列名等

安全性:

  • #{}可以防止SQL注入
  • ${}不能防止SQL注入

9.线程池相关,流程,拒绝策略,如何设计线程池最大线程数和核心线程数

线程池执行流程

  1. 如果运行的线程少于corePoolSize,则创建新线程来处理请求
  2. 如果运行的线程等于或多于corePoolSize,则将请求加入队列
  3. 如果无法将请求加入队列,则创建新的线程来处理请求
  4. 如果创建新线程使当前运行的线程超出maximumPoolSize,任务将被拒绝

拒绝策略

  1. AbortPolicy: 丢弃任务并抛出RejectedExecutionException异常(默认)
  2. DiscardPolicy: 丢弃任务,但是不抛出异常
  3. DiscardOldestPolicy: 丢弃队列最前面的任务,然后重新尝试执行任务
  4. CallerRunsPolicy: 由调用线程处理该任务

如何设计线程池最大线程数和核心线程数

  • CPU密集型任务: 线程数 = CPU核心数 + 1
  • IO密集型任务: 线程数 = CPU核心数 * (1 + 平均等待时间/平均工作时间)

一般而言:

  • 核心线程数 = CPU核心数
  • 最大线程数 = CPU核心数 * 2

实际应用中,可以通过压测来确定最优的线程池参数。

10.HashMap和ConcurrentHashMap

HashMap:

  • 非线程安全
  • 允许null键和null值
  • 初始容量16,负载因子0.75
  • JDK 1.8后,链表长度超过8会转换为红黑树

ConcurrentHashMap:

  • 线程安全
  • 不允许null键和null值
  • JDK 1.7使用分段锁(Segment)
  • JDK 1.8使用CAS+Synchronized

ConcurrentHashMap的实现(JDK 1.8):

  • 使用volatile数组保存Node
  • 使用CAS操作保证数组的原子性
  • 使用Synchronized锁定链表或红黑树的首节点

put操作:

  • 如果bucket为空,使用CAS操作放入
  • 如果bucket非空,使用Synchronized锁定首节点
  • 执行链表或红黑树的插入操作

get操作:

  • 不需要加锁,利用volatile的可见性保证

11.红黑树,二叉查找树,红黑树高度差

二叉查找树:

  • 左子树所有节点的值均小于根节点的值
  • 右子树所有节点的值均大于根节点的值
  • 左右子树也分别为二叉查找树
  • 时间复杂度: 平均O(logn),最坏O(n)

红黑树:

  • 每个节点要么是红色,要么是黑色
  • 根节点是黑色
  • 每个叶子节点(NIL)是黑色
  • 如果一个节点是红色的,则它的子节点必须是黑色的
  • 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点

红黑树的高度:

  • 最短路径: 全黑节点
  • 最长路径: 红黑相间
  • 最长路径的长度不会超过最短路径的2倍

红黑树 vs 平衡二叉树:

  • 红黑树牺牲了部分平衡性以换取插入/删除操作时少量的旋转操作
  • 红黑树的统计性能要好于平衡二叉树

12.MySQL索引

MySQL索引类型

  1. 普通索引
  2. 唯一索引
  3. 主键索引
  4. 联合/组合索引
  5. 全文索引

B+树索引的特点:

  • 所有数据都存储在叶子节点
  • 叶子节点形成一个单向链表
  • 非叶子节点只存储键值信息

索引的优点:

  • 加快数据检索速度
  • 唯一索引可以保证数据的唯一性
  • 加快表与表之间的连接

索引的缺点:

  • 占用额外的存储空间
  • 降低更新表的速度

13.如何判断链表有环,如何判断树是二叉查找树

判断链表是否有环

快慢指针法

  • 定义两个指针,快指针每次移动两步,慢指针每次移动一步
  • 如果存在环,两个指针最终会相遇
  • 时间复杂度O(n),空间复杂度O(1)

哈希表法

  • 遍历链表,将每个节点存入哈希表
  • 如果当前节点已在哈希表中,说明存在环
  • 时间复杂度O(n),空间复杂度O(n)

判断树是否为二叉搜索树:

中序遍历法

  • 对二叉树进行中序遍历,结果应该是升序的

递归法

  • 递归判断,利用二叉搜索树的性质,对于每个节点,它的左子节点值必须小于当前节点值,右子节点的值必须大于当前节点值,并且所有节点需要满足这个条件。

14.Redis分布式锁

Redis分布式锁的实现原理

  1. 加锁: 使用SETNX命令设置一个键值对,如果键不存在则设置成功并获得锁
  2. 解锁: 删除该键值对
  3. 超时: 设置键的过期时间,防止死锁

实现细节

  1. 使用Lua脚本保证加锁操作的原子性
  2. 使用唯一标识符(如UUID)作为值,防止误删其他客户端的锁
  3. 考虑Redis主从复制的延迟问题,使用Redlock算法

15.限流算法

  • 计数器算法:基于时间窗口的请求数统计。
  • 滑动窗口:将计数器细分成多个更小的时间窗口。
  • 令牌桶算法:维持一个令牌桶,系统请求需拿到令牌。
  • 漏桶算法:确保请求处理的稳定速率,通过漏水的速率控制请求速率。

更多惊喜

我还将定期分享:

  • 最新互联网资讯:让你时刻掌握行业动态。

  • AI前沿新闻:紧跟技术潮流,不断提升自我。

  • 技术分享与职业发展:助你在职业生涯中走得更远、更稳。

  • 程序员生活趣事:让你在忙碌的工作之余找到共鸣与乐趣。

关注回复【1024】惊喜等你来拿!

点击查看惊喜

敬请关注【程序员世杰】

点击关注程序员世杰

相关文章:

shopee虾皮 java后端 一面面经 整体感觉不难

面试总结&#xff1a;总体不难&#xff0c;算法题脑抽了只过了一半&#xff0c;面试官点出了问题说时间到了&#xff0c;反问一点点&#xff0c;感觉五五开&#xff0c;许愿一个二面 1.Java中的锁机制&#xff0c;什么是可重入锁 Java中的机制主要包括 synchronized关键字 Loc…...

HydraRPC: RPC in the CXL Era——论文阅读

ATC 2024 Paper CXL论文阅读笔记整理 问题 远程过程调用&#xff08;RPC&#xff09;是分布式系统中的一项基本技术&#xff0c;它允许函数在远程服务器上通过本地调用执行来促进网络通信&#xff0c;隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心…...

pve笔记

配置显卡直通参考 https://blog.csdn.net/m0_59148723/article/details/130923893 https://foxi.buduanwang.vip/virtualization/pve/561.html/ https://www.cnblogs.com/MAENESA/p/18005241 https://www.wangsansan.com/archives/181/ pve配置显卡直通到虚拟机后&#xff0c;…...

typecho仿某度响应式主题Xaink

新闻类型博客主题&#xff0c;简洁好看&#xff0c;适合资讯类、快讯类、新闻类博客建站&#xff0c;响应式设计&#xff0c;支持明亮和黑暗模式 直接下载 zip 源码->解压后移动到 Typecho 主题目录->改名为xaink->启用。 演示图&#xff1a; 下载链接&#xff1a; t…...

springcloud RocketMQ 客户端是怎么走到消费业务逻辑的 - debug step by step

springcloud RocketMQ &#xff0c;一个mq消息发送后&#xff0c;客户端是怎么一步步拿到消息去消费的&#xff1f;我们要从代码层面探究这个问题。 找的流程图&#xff0c;有待考究。 以下我们开始debug&#xff1a; 拉取数据的线程&#xff1a; PullMessageService.java 本…...

GPT-4o mini小型模型具备卓越的文本智能和多模态推理能力

GPT-4o mini 是首个应用OpenAI 指令层次结构方法的模型&#xff0c;这有助于增强模型抵抗越狱、提示注入和系统提示提取的能力。这使得模型的响应更加可靠&#xff0c;并有助于在大规模应用中更安全地使用。 GPT-4o mini 在学术基准测试中&#xff0c;无论是在文本智能还是多模…...

Milvus 向量数据库进阶系列丨部署形态选型

本系列文章介绍 在和社区小伙伴们交流的过程中&#xff0c;我们发现大家最关心的问题从来不是某个具体的功能如何使用&#xff0c;而是面对一个具体的实战场景时&#xff0c;如何选择合适的向量数据库解决方案或最优的功能组合。在 “Milvus 向量数据库进阶” 这个系列文章中&…...

【React】详解受控表单绑定

文章目录 一、受控组件的基本概念1. 什么是受控组件&#xff1f;2. 受控组件的优势3. 基本示例导入和初始化定义函数组件处理输入变化处理表单提交渲染表单导出组件 二、受控组件的进阶用法1. 多个输入框的处理使用多个状态变量使用一个对象管理状态 2. 处理选择框&#xff08;…...

使用puma部署ruby on rails的记录

之前写过一篇《记录一下我的Ruby On Rails的systemd服务脚本》的记录&#xff0c;现在补上一个比较政治正确的Ruby On Rails的生产环境部署记录。使用Puma部署项目。 创建文件 /usr/lib/systemd/system/puma.service [Unit] DescriptionPuma HTTP Server DocumentationRuby O…...

如何在Linux上使用Ansible自动化部署

Ansible是一个开源的自动化工具&#xff0c;可以帮助开发人员和系统管理员对大规模的服务器进行自动化部署和管理。它使用SSH协议来在远程服务器上执行任务&#xff0c;并通过模块化的方式提供了丰富的功能&#xff0c;可以轻松地管理服务器配置、软件部署和应用程序运行。 在…...

scrapy爬取城市天气数据

scrapy爬取城市天气数据 一、创建scrapy项目二、修改settings,设置UA,开启管道三、编写爬虫文件四、编写items.py五、在weather.py中导入WeatherSpiderItem类六、管道中存入数据,保存至csv文件七、完整代码一、创建scrapy项目 先来看一下爬取的字段情况: 本次爬取城市天…...

一天搞定React(5)——ReactRouter(下)【已完结】

Hello&#xff01;大家好&#xff0c;今天带来的是React前端JS库的学习&#xff0c;课程来自黑马的往期课程&#xff0c;具体连接地址我也没有找到&#xff0c;大家可以广搜巡查一下&#xff0c;但是总体来说&#xff0c;这套课程教学质量非常高&#xff0c;每个知识点都有一个…...

微信小程序之计算器

在日常生活中&#xff0c;计算器是人们广泛使用的工具&#xff0c;可以帮助我们快速且方便地计算金额、成本、利润等。下面将会讲解如何开发一个“计算器”微信小程序。 一、开发思路 1、界面和功能 “计算器”微信小程序的页面效果如图所示 在计算器中可以进行整数和小数的…...

【logstash】logstash使用多个子配置文件

这里有个误区在pipelines.yml中写conf.d/*&#xff0c;实测会有问题&#xff0c;不同的filter处理逻辑会复用。 现在有两个从kafka采集日志的配置文件&#xff1a;from_kafka1.conf&#xff0c;from_kafka2.conf 修改pipelines.yml配置文件 config/pipelines.yml- pipeline.i…...

暴风骑士S9电摩上市,定义青少年骑行安全新标准

暴风骑士&#xff0c;作为全球高端儿童电动车的开创品牌&#xff0c;以其卓越的技术实力和创新精神&#xff0c;不断推动行业发展。如今&#xff0c;暴风骑士再次突破自我&#xff0c;推出了全新力作——S9青少年电摩。这款全新上市的青少年专属电摩&#xff0c;以其领先的安全…...

spring security如何适配盐存在数据库中的密码

19.token认证过滤器代码实现_哔哩哔哩_bilibili19.token认证过滤器代码实现是SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权-挑战黑马&尚硅谷的第20集视频&#xff0c;该合集共计41集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视…...

Go语言编程 学习笔记整理 第2章 顺序编程 后半部分

1.流程控制 1.1 条件语句 if a < 5 { return 0 } else { return 1 } 注意&#xff1a;在有返回值的函数中&#xff0c;不允许将“最终的”return语句包含在if...else...结构中&#xff0c; 否则会编译失败&#xff01;&#xff01;&#xff01; func example(x int) i…...

美团后端二面

美团后端二面 ……………………………… 两道场景 一道 数字转中文读法&#xff08;1000-》一千&#xff09; 0八股0自我介绍 反问 “您觉得我能过吗&#xff1f;” “这个需要横行对比之后才能有结果” ……………………………… 什么时候到岗 场景题 1 假设我有一个…...

学懂C语言(十六):对C语言作用域规则 局部变量、全局变量的认识

一、C 作用域规则 任何一种编程中&#xff0c;作用域是程序中定义的变量所存在的区域&#xff0c;超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量&#xff1a; 局部变量&#xff1a;在函数或块内部全局变量&#xff1a;在所有函数外部形式参数&#xff1a;在函数…...

关于TS(typescript)的理论知识

关于TS&#xff08;typescript&#xff09;的理论知识 TypeScript 是一种由微软开发的开源编程语言&#xff0c;它是 JavaScript 的一个超集&#xff0c;添加了可选的静态类型和基于类的面向对象编程。TypeScript 最终会被编译成纯 JavaScript 代码&#xff0c;以便在任何支持 …...

【OpenCV C++20 学习笔记】基本图像容器——Mat

【OpenCV C20 学习笔记】基本图像容器——Mat 概述Mat内部结构引用计数机制颜色数据格式 显式创建Mat对象使用cv::Mat::Mat构造函数矩阵的数据项 使用数组进行初始化的构造函数cv::Mat::create函数MATLAB风格的初始化小型矩阵通过复制创建Mat对象 Mat对象的输出其他普通数据项的…...

枚举单例是怎么保证线程安全和防止反射的

枚举单例在Java中具有天然的线程安全性和防止反射攻击的特性&#xff0c;这是由于Java对枚举类型的特殊处理方式。以下是详细解释&#xff1a; 1. 线程安全性 Java 枚举类的特性 类加载机制&#xff1a;枚举类型在Java中是特殊的类&#xff0c;由JVM保证其线程安全性。枚举类…...

传知代码-智慧医疗:纹理特征VS卷积特征(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 论文链接&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S1076633223003537?__cf_chl_rt_tkJ9Aipfxyk5d.leu48P20ePFNd4B2aunaSmzVpXCg.7g-1721292386-0.0.1.1-6249 论文概述 今天我们把视线…...

数据结构中的八大金刚--------八大排序算法

目录 引言 一&#xff1a;InsertSort(直接插入排序) 二&#xff1a;ShellSort(希尔排序) 三&#xff1a;BubbleSort(冒泡排序) 四&#xff1a; HeapSort(堆排序) 五&#xff1a;SelectSort(直接选择排序) 六&#xff1a;QuickSort(快速排序) 1.Hoare版本 2.前后指针版本 …...

ACC2.【C语言】经验积累 栈区简单剖析

int main() {int i0;int arr[10]{1,2,3,4,5,6,7,8,9,10};for (i0;i<12;i){arr[i]0;printf("A");}return 0; } 执行后无限打印A 在VS2022&#xff0c;X86,Debug环境下&#xff0c;用监视后&#xff0c;原因是arr[12]的地址与i的地址重合&#xff08;数组越界&…...

c# 索引器

索引器&#xff08;Indexer&#xff09;允许你像访问数组一样&#xff0c;通过索引访问对象的属性或数据。索引器的主要用途是在对象内部封装复杂的数据结构&#xff0c;使得数据访问更加直观。下面是关于 C# 索引器的详细解释及示例&#xff1a; 基本语法 索引器的语法类似于…...

低代码如何加速数字化转型

数字化转型&#xff0c;正日益决定企业成功的关键。这里的一个关键因素是它可以以更快的速度和质量来实施技术计划。在当今瞬息万变的商业环境中&#xff0c;战略性地采用低代码平台对于旨在加快上市时间、增强业务敏捷性和促进跨团队无缝协作的首席技术官来说至关重要。日益增…...

Pytest进阶之fixture的使用(超详细)

目录 Fixture定义 Fixture使用方式 作为参数使用 Fixture间相互调用(作为参数调用) 作为conftest.py文件传入 Fixture作用范围Scope function class module session Fixture中params和ids Fixture中autouse Fixture中Name 总结 pytest fixture 是一种用来管理测试…...

GitHub 详解教程

1. 引言 GitHub 是一个用于版本控制和协作的代码托管平台&#xff0c;基于 Git 构建。它提供了强大的功能&#xff0c;使开发者可以轻松管理代码、追踪问题、进行代码审查和协作开发。 2. Git 与 GitHub 的区别 Git 是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改…...

边界网关IPSEC VPN实验

拓扑&#xff1a; 实验要求&#xff1a;通过IPSEC VPN能够使PC2通过网络访问PC3 将整个路线分为三段 IPSEC配置在FW1和FW2上&#xff0c;在FW1与FW2之间建立隧道&#xff0c;能够传递IKE&#xff08;UDP500&#xff09;和ESP数据包&#xff0c;然后在FW1与PC2之间能够流通数据…...

力扣高频SQL 50题(基础版)第六题

文章目录 1378. 使用唯一标识码替换员工ID题目说明思路分析实现过程结果截图总结 1378. 使用唯一标识码替换员工ID 题目说明 Employees 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | ------…...

在一个事物方法中开启新事物,完成对数据库的修改

在Java中&#xff0c;使用Transactional注解来管理事务非常常见。但是&#xff0c;在一个已经标记为Transactional的方法内部调用另一个也标记了Transactional的方法时&#xff0c;如果不正确处理&#xff0c;可能会导致一些意料之外的行为。这是因为默认情况下&#xff0c;Spr…...

ffmpeg的vignetting filter

vignetting filter是暗角过滤器 vignetting filter在官网是vignette。但是我查了一下&#xff0c;vignetting应该是正确的表达&#xff0c;vignette是什么鬼&#xff1f; 官网参数 官书参数 参数解释 angle,x0,y0可以使用表达式。 angle&#xff1a;不知道什么意思&#xf…...

商场导航系统:从电子地图到AR导航,提升顾客体验与运营效率的智能解决方案

商场是集娱乐、休闲、社交于一体的综合性消费空间&#xff0c;随着商场规模的不断扩大和布局的日益复杂&#xff0c;顾客在享受丰富选择的同时&#xff0c;也面临着寻路难、店铺曝光率低以及商场管理效率低下等挑战。商场导航系统作为提升购物体验的关键因素&#xff0c;其重要…...

vue3中父子组件的双向绑定defineModel详细使用方法

文章目录 一、defineProps() 和 defineEmits()二、defineModel() 的双向绑定2.1、基础示例2.2、定义类型2.3、声明prop名称2.4、其他声明2.5、绑定多个值2.6、修饰符和转换器2.7、修饰符串联 一、defineProps() 和 defineEmits() 组件之间通讯&#xff0c;通过 props 和 emits…...

耳机、音响UWB传输数据模组,飞睿智能低延迟、高速率超宽带uwb模块技术音频应用

在数字化浪潮席卷全球的今天&#xff0c;无线通信技术日新月异&#xff0c;其中超宽带&#xff08;Ultra-Wideband&#xff0c;简称UWB&#xff09;技术以其独特的优势&#xff0c;正逐步成为无线传输领域的新星。本文将深入探讨飞睿智能UWB传输数据模组在音频应用中的创新应用…...

webpack配置报错:Invalid options object.

前言&#xff1a; 今天在使用webpack进行项目配置的时候&#xff0c;运行之后终端报错&#xff1a;Invalid options object. Dev Server has been initialized using an options object that does not match the API schema. - options has an unknown property inline. Thes…...

Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 022 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...

谷粒商城实战笔记-64-商品服务-API-品牌管理-OSS前后联调测试上传

文章目录 1&#xff0c;拷贝文件到前端工程2&#xff0c;局部修改3&#xff0c;在品牌编辑界面使用上传组件4&#xff0c;OSS配置允许跨域5&#xff0c;测试multiUpload.vue完整代码singleUpload.vue完整代码policy.js代码 在Web应用开发中&#xff0c;文件上传是一项非常常见的…...

Springboot 开发之 RestTemplate 简介

一、什么是RestTemplate RestTemplate 是Spring框架提供的一个用于应用中调用REST服务的类。它简化了与HTTP服务的通信&#xff0c;统一了RESTFul的标准&#xff0c;并封装了HTTP连接&#xff0c;我们只需要传入URL及其返回值类型即可。RestTemplate的设计原则与许多其他Sprin…...

Django transaction.atomic()事务处理

在Django中&#xff0c;transaction.atomic()是一个上下文管理器&#xff0c;它会自动开始一个事务&#xff0c;并在代码块执行完毕后提交事务。如果在代码块中抛出异常&#xff0c;事务将被自动回滚&#xff0c;确保数据库的一致性和完整性。 在实际应用中&#xff0c;你可能需…...

2024.07-电视版免费影视App推荐和猫影视catvod、TVBox源(最新接口地址)

文章目录 电视版免费影视App推荐精选列表&#xff08;2024.07可用筛选列表&#xff09;&#xff1a;2024.07可用筛选列表&#xff0c;盲盒资源打包合集下载安装说明真的是盲盒&#xff1f; 猫影视catvod、TVBoxTVBox源推荐可用列表目前不可用列表&#xff08;前缀为错误状态码&…...

【Python】 基于Q-learning 强化学习的贪吃蛇游戏(源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…...

谷粒商城实战笔记-44-前端基础-Vue-整合ElementUI快速开发/设置模板代码

文章目录 一&#xff0c;安装导入ElementUI1&#xff0c;安装 element-ui2&#xff0c;导入 element-ui 二&#xff0c;ElementUI 实战1&#xff0c;将 App.vue 改为 element-ui 中的后台布局2&#xff0c;开发导航栏2.1 开发MyTable组件2.2 注册路由2.3 改造App.vue2.4 新增左…...

Android adb shell ps进程查找以及kill

Android adb shell ps进程查找以及kill 列出当前Android手机上运行的所有进程信息如PID等&#xff1a; adb shell ps 但是这样会列出一大堆进程信息&#xff0c;不便于定向查阅&#xff0c;可以使用关键词查找&#xff1a; adb shell "ps | grep 关键词" 关键词查…...

[OJ]水位线问题,1.采用回溯法(深度优先遍历求解)2.采用广度优先遍历求解

1.深度优先遍历 使用回溯法,深度优先遍历利用栈先进后出的特点,在加水控制水量失败时, 回到最近一次可对水进行加水与否的位置1.对于给定水量k,是否在[l,r]之间&#xff0c; 是:是否加水(加水y,用掉x,是否在[l,r]之间)(不加水y,用掉x,是否在[l,r]之间)先尝试加水&#xff0c;如…...

《华为数据之道》读书笔记六---面向自助消费的数据服务建设

七、从结果管理到过程管理&#xff0c; 从能“看”到能“管” 1、数据赋能业务运营 数字化运营旨在利用数字化技术获取、管理和分析数据&#xff0c;从而为企业的战略决策与业务运营提供可量化的、科学的支撑。 数字化运营归根结底是运营&#xff0c;旨在推动运营效率与能力的…...

go语言day18 reflect反射

Golang-100-Days/Day16-20(Go语言基础进阶)/day19_Go语言反射.md at master rubyhan1314/Golang-100-Days (github.com) 7-19 接口&#xff1a;底层实现_哔哩哔哩_bilibili 一、interface接口 接口类型内部存储了一对pair(value,Type) type interface { type *Type // 类型信…...

理解 Objective-C 中 `+load` 方法的执行顺序

理解 Objective-C 中 load 方法的执行顺序 在 Objective-C 中&#xff0c;load 方法是在类或分类被加载到内存时调用的。它在程序启动过程中非常早的阶段执行&#xff0c;用于在类或分类被加载时进行一些初始化工作。理解 load 方法的执行顺序对于编写可靠的 Objective-C 代码…...

C++:类和对象2

1.类的默认成员函数 默认成员函数就是用户没有显示实现编译器会自动生成的成员函数称为默认成员函数。一个类&#xff0c;我们在不写的情况下编译器会默认生成6个默认成员函数&#xff0c;分别是构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;拷贝赋值运算…...