Java后端面试复习7.24
- lock加锁解锁尝试获取锁方法
- lock底层基于什么实现
- lock和lock的底层实现分别面向什么用户
- lock和synchronized异同
- 如何选择合适的锁
- ReentrantLock如何实现冲入
- 内部类三个
- 公平和非公平获取锁怎么实现的
- RL默认公平还是非公平,构造参数
- ReentrantRedaWriteLock的特性
- 什么是AQS,内部属性
- AQS的设计模式,三类方法和对应作用
- 实现自定义锁步骤
- 同步队列的实现,入队出对
- 非公平所在队列中的竞争
- 读写锁获取两个锁的方法
- 读写锁的状态设计(怎么做到的用一个int类型变量维护两个锁)
- 写锁和读锁获取和释放的场景
- 支持所降级
- 为什么阻塞更耗时
- 自旋锁的默认重试次数
- 自适应自旋锁引入版本,怎么做的
- 乐观所悲观所
- 锁升级
- 公平所和非公平所优缺点
- 非可重入锁在重复调用同步资源为什么会死锁
- 共享锁和排它锁
- jwt的缺点
- CPU同步各个核心的手段
- 伪共享
- lock,unlock,tryLock
- AQS队列同步器
- lock面向锁的使用者,AQS面向锁的实现者,如果我们想自定义一个所可以实现AQS
- 相同点:都能进行并发控制,区别:sycn使用起来不灵活,只能对三种情况加锁,lock更灵活,可以自定义封锁对象。sync不用手动释放锁,lock需要释放锁。sync是排他锁,lock可以是排他锁也可以是共享锁
- 如果需要用到lock的尝试锁的方法,或者获取锁时可以被中断这些方法可以使用lock,剩下的就用sync。sync在1.6之前性能确实不好,1.6引入了锁的升级之后性能变好了,而且lock需要手动释放
- 通过计数器。当前线程获取锁之后,会将锁的计数值count+1,释放锁会执行-1,重入只需要将count++即可,当count为0才算彻底释放锁
- Sync,FairSync,UonfairSync,后两者继承自前者,ReentrantLock实现公平非公平就是依靠后两者实现的
- 通过同步队列实现,对于一个要获取锁的线程,公平锁会将其直接加在同步队列尾部,非公平锁会首先尝试与队列头部有、竞争锁,竞争成功就成功插队了,否则也加入到同步队列中
- 默认非公平锁,因为实际场景需要用到公平锁的场景不多,并且性能上非公平锁性能好,吞吐量高,传入参数true就是公平
- 提供了共享锁,内部有两种类型的锁,共享锁和排他锁,同时还是可重入锁。当当前线程获取到了写锁时,当前线程还可以获取读锁,但是其他线程不能获取任何锁,不同线程间可以获取读锁
- 队列同步器,int类型的同步状态以及一个FIFO的同步队列,status>表示当前线程获取锁的次数
- 模板模式,第一类访问和修改同步状态,第二类表示可重写的方法,第三类表示模板方法,定义了一些同步的基本操作
- 1实现Lock接口,2定义内部类sync继承AQS,3实现Lock定义的方法,实际上把锁的操作代理到了内部的AQS上
- 同步队列实际上是由Node节点构成的链表,每次都是对队列的首节点进行唤醒,当首节点释放同步状态时将唤醒下一个节点同时自己出队。当有新的线程来的时候直接加入到尾节点,
- 非公平锁首先尝试和下一个要获得同步状态的节点竞争,如果竞争成功就直接获得同步资源,就不用入同步队列,否则加入到同步队列尾部
- readLock(),writeLock()
- int32位,高16位保存读锁的重入次数,低16位保存写锁的重入次数
- 写锁:当前线程如果已经获取了写锁,那么次数+1,否则尝试获取写锁,如果此时其他线程占据写锁或者读锁,那么进入阻塞等待;读锁:如果有其他线程占据写锁,那么阻塞等待,否则读锁++
- 当当前线程占据写锁时,如果写操作执行完成想要读取数据,则尝试获取读锁,然后释放写锁
- 因为大多数场景下并发执行的代码会很少,占据的时间也就很少,实际上我们稍等下就可以获取锁了,但是如果阻塞的话会涉及到OS切换CPU状态,这种状态转换是非常耗时的
- 10次
- 1.6版本,让本次自选时间根据上一次在用一个锁上的自选时间来确定,如果某个锁很少被占用很长时间,或者过去的自旋尝试中很快就变为可用就让当前线程尝试自选更长的时间。
- 乐观锁认为我想要操作的同步资源没人和我竞争,所以我不会上锁,典型的例子就是CAS,他不上锁,仅仅是在更新的时候比较一下这个值在我执行期间有没有变化,变了就重新执行一遍,否则更新。悲观锁认为一定有人和我竞争同步资源,所以我直接上锁占着资源。典型的就是synchronized
- 对象由三部分组成:对象头,实际数据,填充字段。在对象头中保存了一些关键的信息比如hashcode,锁信息等待。当有线程想要获取我这个锁资源时,首先判断锁的对象头中的标志位,最后三位是001代表未上锁,此时当前线程获取锁资源,同时对象头的信息转为偏向锁,代表他偏向当前线程,同时将线程的id记录在对象头。后续如果还是当前线程获取锁就直接让他访问即可,不用加锁操作。当有其他线程竞争时,由偏向锁升级为轻量级锁,两个线程都通过CAS+自旋来竞争所。当有多个线程竞争时,有轻量级锁升级成重量级锁,避免过多无用的自旋操作浪费cpu资源
- 公平锁的获得顺序严格按照先到先得的思想,不存在线程饥饿的现象,但他降低了吞吐率,线程切换情况较多。非公平锁虽然存在线程饥饿的现象,但是他有效的利用cpu资源,不涉及向公平锁一样那么多的线程切换,吞吐率高
- 当前线程占据锁,但是他重复调用同步资源需要获取锁,而当前的锁不能冲入且被他自己占据,所以就导致他自己占着锁还等着获取锁造成死锁
- 共享锁是允许多个线程同时获得的,他们之间是不互斥的,ReentrantReadWriteLock中的读锁就是一个典型的共享锁。排他锁不允许其他线程获得,只能让当前线程独占,比如写锁,当当前线程持有写锁的时候,其他线程既不能获得写锁,也不能获取读锁
- 服务器不保存session状态,一旦token颁发了,在到期之前都始终有效。安全性依赖于加密算法。一旦泄露其他人也能获取该token的权限。
- 要保证写传播以及事务串行化,通过MESI协议
- 写直达把数据同时写入缓存和内存,写回当缓存被替换的时候刷新到内存
- AB两个核心读取了同一个cache line,对于一个数组的前两个数,A要修改第一个B要修改第二个,当A修改完第一个后,即使和B无关,B也要标记cache line失效,然后重新读取。
相关文章:
Java后端面试复习7.24
lock加锁解锁尝试获取锁方法lock底层基于什么实现lock和lock的底层实现分别面向什么用户lock和synchronized异同如何选择合适的锁ReentrantLock如何实现冲入内部类三个公平和非公平获取锁怎么实现的RL默认公平还是非公平,构造参数ReentrantRedaWriteLock的特性什么是…...
前端 HTML 概述
目录 1. HTML概述 1.1 超文本标记语言 1.2 标签 2. HTML 解析与编辑 2.1 解析与访问 2.2 编辑 html文件 1. HTML概述 HTML( Hyper Text Markup Language:超文本标记语言 ):主要用于网页主体结构的搭建,在网页上…...
探索Thymeleaf:用动态Web模板引擎打造吸引人的用户界面(SpringBoot的html详解)
什么是Thymeleaf? Thymeleaf是一个用于Web和独立环境的现代服务器端Java模板引擎,用于处理XML/XHTML/HTML5内容。它特别适合基于Spring框架的Web应用程序,因为它提供了与Spring MVC的出色集成。Thymeleaf以其自然的模板语法和强大的数据绑定…...
视频教程 - 自研Vue3 Tree组件高级功能:虚拟滚动新增节点实现自动滚动
感谢小伙伴们对本套自研vue3 tree组件教程的关注,在前一篇媲美Element Plus JuanTree终极实战:虚拟滚动的功能演示中发现了小bug,特地整理了相关录屏来说明怎么一步步解决bug的,来回馈小伙伴们的支持。 Tree组件高级功能ÿ…...
职业生涯阶段总结3:转眼毕业三年
不知不觉,科班毕业三年多了,也换了三个单位了; 个人软件开发的理论和技术能力确实比以前刚出来的时候,强了不少; 在行情越发下滑的形势,似乎只有进大厂才能拿到不错的收入,但是大厂的压力也是比…...
项目经理面试总结
先上结论:每个公司问的问题侧重点都不太一样,五花八门,评判标准也不一样,目前我能感觉到的就是自己需要很了解项目,也就是工作过程中经常做出总结,需要你经常去思考,包括对内和对外的思考。 自我…...
(免费领源码)java#springboot#mysql大学校园旧物捐赠网站 25109-计算机毕业设计项目选题推荐
摘 要 在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,企业只能以用户为导向,按品种分类规划,以产品的持续创新作为企业最重要的竞…...
Java 设计模式之单例模式
Java 设计模式之单例模式 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一种访问该实例的全局方法。这种模式有助于确保系统中的某些组件只有一个实例,并提供了一种方便的方法来访问该实例。 更多设计模式请参考&#x…...
Linux系统驱动(二)字符设备驱动
文章目录 一、概念(一)相关概念(二)字符设备框架结构(三)用户空间和内核空间数据传输1. 函数的参数对应关系 (四)字符设备相关的API1. 字符设备驱动(1)注册字…...
Day29 | 动态规划 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
语言 Java 509. 斐波那契数 斐波那契数 题目 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n -…...
【开源移植】MultiButton_小型按键驱动模块移植
MultiButton 简介 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构,去除冗余的按键处理硬编码,让你的按键业务逻辑更清晰。 使用方法 1.先申请一个…...
【Python系列】Python 字典合并
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
C# 设计模式之装饰器模式
总目录 前言 装饰器模式的主要作用就是扩展一个类的功能,或给一个类添加多个变化的情况。学习面向对象的都知道,如果想单纯的给某个类增加一些功能,可以直接继承该类生成一个子类就可以。应对一些简单的业务场景继承也就够了,但是…...
【uniapp离线打包】(基于Android studio)
文章目录 uniapp打包官方教程入口一、准备工作(工具三大件)Android Studio版本推荐 二、准备工作(Android壳和uniapp包)导入Android壳生成uniapp包将uniapp包导入android壳降低jdk版本 三、准备工作(证书)准备Android平台离线签名…...
稳稳的年化10%,多任务时序动量策略——基于pytorch的深度学习策略(附python代码)
原创文章第608篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 做因子挖掘这段时间,有一个观感。 传统的因子挖掘,尤其是手工构造因子,到遗传算法因子挖掘。——本身也是一种”拟合“,或者说试图”…...
C++分析AVL树
目录 AVL树介绍 AVL树平衡因子更新分析 AVL树插入时旋转与平衡因子更新 左单旋 右单旋 左右单旋 右左单旋 AVL旋转可行性 AVL树节点删除(待补充) AVL树分析 AVL树介绍 二叉搜索树在某些极端情况下可能会退化,为了解决这个问题&…...
aurora8b10b ip的使用(framing接口下的数据回环测试)
文章目录 一、Aurora8B/10B协议二、时钟、复位与状态指示1、时钟2、复位3、状态指示 三、数据发送、接受接口(1)AXI4-Stream位排序(2)Streaming接口(3)Framing接口(帧传输接口) 四、…...
如何通过OpenCV判断图片是否包含在视频内?
要判断图片是否包含在视频内,可以使用计算机视觉技术和图像处理方法。这通常涉及特征匹配或模板匹配。以下是一个基于OpenCV的解决方案,通过特征匹配的方法来实现这一目标。 步骤概述 读取视频和图片: 使用OpenCV读取视频文件和图片文件。 …...
大数据基础:Spark重要知识汇总
文章目录 Spark重要知识汇总 一、Spark 是什么 二、Spark 四大特点 三、Spark框架模块介绍 3.1、Spark Core的RDD详解 3.1.1、什么是RDD 3.1.2、RDD是怎么理解的 四、Spark 运行模式 4.1、Spark本地模式介绍 4.2、Spark集群模式 Standalone 4.3、Spark集群模式 Stan…...
Executable Code Actions Elicit Better LLM Agents
Executable Code Actions Elicit Better LLM Agents Github: https://github.com/xingyaoww/code-act 一、动机 大语言模型展现出很强的推理能力。但是现如今大模型作为Agent的时候,在执行Action时依然还是通过text-based(文本模态)后者JSO…...
循环结构(三)——do-while语句
目录 🍁引言 🍁一、语句格式 🚀格式1 🚀格式2 🍁二、语句执行过程 🍁三、实例 🚀【例1】 🚀【例2】 🚀【例3】 🍁总结 🍁备注 &am…...
pandas 或筛选
pandas 或筛选 在Pandas中,可以使用DataFrame.loc方法结合逻辑运算符来实现或筛选。这里提供一个简单的例子: import pandas as pd 创建示例DataFrame df pd.DataFrame({ ‘A’: [1, 2, 3, 4], ‘B’: [5, 6, 7, 8], ‘C’: [9, 10, 11, 12] }) 设定…...
工具(1)—截屏和贴图工具snipaste
演示和写代码文档的时候,总是需要用到截图。在之前的流程里面,一般是打开WX或者QQ,找到截图工具。但是尴尬的是,有时候,微信没登录,而你这个时候就在写文档。为了截个图,还需要启动微信…...
【从零开始一步步学习VSOA开发】快速体验SylixOS
快速体验SylixOS 安装完毕RealEvo-IDE 后,同时也安装了RealEvo-Simulator。RealEvo-Simulator 是一个虚拟运行环境,可以模拟各种体系结构并在其上运行 SylixOS。相比于物理板卡,在 RealEvo-Simulator 进行运行调测更加的方便快捷且成本低廉。…...
Ansible自动化:简化IT基础设施管理的艺术
目录 一.前言 二.Ansible简介 2.1什么是Ansible? 2.2Ansible的主要特点 2.3Ansible的应用场景 三.探索Ansible的高级功能 3.1 高级Playbook特性 3.2 Ansible Vault 3.3 动态Inventory 3.4Ansible Tower(AWX) 3.5模块开发 3.6 Ans…...
【Rust光年纪】探索Rust语言中的WebSocket库和框架:优劣一览
Rust语言中的实时通信利器:WebSocket库与框架全面解析 前言 随着Rust语言的不断发展,其在Web开发领域也变得越来越受欢迎。WebSocket作为实现实时通信的重要技术,在Rust的生态系统中也有多个库和框架提供了支持。本文将介绍几个主流的Rust …...
HTML 基础结构
目录 1. 文档声明 2. 根标签 3. 头部元素 4. 主题元素 5. 注释 6. 演示 1. 文档声明 <!DOCTYPE html>:声明文档类型,表示该文档是 html 文档, 2. 根标签 (1)所有的其他标签都要放在一对根标签中&#…...
多页合同怎么盖骑缝章_电子合同怎么盖骑缝章?
多页合同怎么盖骑缝章?电子合同怎么盖骑缝章? 对于纸质多页合同,盖骑缝章是一种常见的做法,用于确保合同的完整性,防止任何页面被替换或篡改。以下是盖骑缝章的基本步骤: 将所有合同页面平铺在桌面上。用…...
GD 32 IIC通信协议
前言: ... 通信方式 通信方式分为串行通信和并行通信。常见的串口就是串行通信的方式 常用的串行通信接口 常用的串行通信方式有USART,IIC,USB,CAN总线 同步与异步 同步通信:IIC是同步通信,有两个线一个是时钟信号线,一个数数据…...
Spring Task初学
介绍 Spring Task 是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 为什么要在Java程序中使用Spring Task? 运行效果 cron表达式:一般日和周不会同时出现 入门案例 启动类添加注解EnableScheduling开始任务调度 创建MyTask类…...
电暖怎么做网站/百度灰色关键词代做
B站的AI资源大佬KK(https://space.bilibili.com/7337706 大佬主页https://artificial-intelligence.net.cn/ 里面很多AI资源汇总 有惊喜) 转了一个贴吧神贴:说明很多人在学习 线性代数的时候 都在思考其几何意义在一般人来看 数学跟哲学一样 离生活很远&#…...
陕西网站建设哪家专业/seo 服务
Toast用于向用户显示一些帮助或者提示,对于我们来说已经不陌生了,经常用到。 下面我们一起再深入了解一下Toast,你会惊奇发现Toast原来还能这样做! 一、设计界面 1、打开“res/layout/activity_main.xml”文件。 从工具栏向activi…...
网站全景图怎么做/网站制作的重要性及步骤详解
实验一实验名称:打印机优先级实现实验描述:实现打印机的优先级功能。实验步骤:1、 在三台虚拟机建立局域网,并连接2、 点击一台虚拟机(扮演服务器角色)中开始菜单—设备和打印机—添加打印机—添加本地打…...
浦东教育网站官网/十大网络推广公司排名
本文转自 http://hudeyong926.iteye.com/blog/1299989 实现一主一从,一主多从,多主多从的读写分离 。支持DAO,AR,其中Query builder只完成部分,需完善 调用 Java代码 //AR class User extends ActiveRecord { public $u…...
在线浏览器网页版入口/麒麟seo
交叉熵(Cross-Entropy) 交叉熵是一个在ML领域经常会被提到的名词。在这篇文章里将对这个概念进行详细的分析。 1.什么是信息量? 假设X是一个离散型随机变量,其取值集合为,概率分布函数为p(x)Pr(Xx),x∈,…...
类似织梦cms/百度搜索引擎优化案例
实验题目:平面图对偶图的求解 实验目的: 1、掌握平面图的定义; 2、掌握平面图对偶图的求解方法; 3、掌握平面图与其对偶图之间顶点数、边数和面数的关系。 实验要求: 1、给定一平面图的面矩阵R和连通分支数p 2、输…...