网站建设启凡/深圳网络营销推广中心
1.lock锁和synchronized锁的区别。
1:Synchronized 是Java的一个关键字,而Lock是java.util.concurrent.Locks 包下的一个接口;
2:Synchronized 使用过后,会自动释放锁,而Lock需要手动上锁、手动释放锁;(粒度可控)
3:Lock提供了更多的实现方法,而且可响应中断、可定时, 而synchronized 关键字不能响应中断;
4:synchronized关键字是非公平锁,即,不能保证等待锁的那些线程们的顺序,而Lock的子类ReentrantLock默认是非公平锁,但是可通过一个布尔参数的构造方法实例化出一个公平锁;
5:synchronized无法判断是否已经获取到锁,而Lock通过tryLock()方法可以判断是否已获取到锁;
6:Lock可以通过分别定义读写锁提高多个线程读操作的效率。
7:二者的底层实现不一样,synchronized是同步阻塞,采用的是悲观并发策略;Lock是同步非阻塞,采用的是乐观并发策略
PS:
公平锁与非公平锁:
公平锁就是:先等待的线程,先获得锁。 非公平锁就是:不能够保证 等待锁的 那些线程们的顺序, 公平锁因为需要维护一个等待锁资源的队列,所以性能相对低下
2.乐观锁和悲观锁的区别
悲观锁的思想是"先悲观地认为会发生冲突",在访问数据之前会将其锁定,直到操作完成后才会释放锁。确保在整个数据访问过程中,只有一个线程或进程能够访问数据,其他的线程或进程需要等待。
乐观锁的思想是"先乐观地认为不会发生冲突",在访问数据时不加锁,而在数据更新时进行冲突检测。多个线程或进程可以同时访问数据,但在提交更新时,会检查是否有其他线程或进程对数据进行了修改。如果发现冲突,就进行处理。乐观锁一般会使用版本号机制和CAS算法实现。通过版本号一致与否,即给数据加上版本,来同步更新数据以及加上版本号。
总的来说,悲观锁是先锁定资源再进行操作,保证数据的一致性,但并发性较差;而乐观锁是先进行操作再检查冲突,允许多个线程或进程同时访问,但是在更新的时候会判断一下在此期间其他线程或进程有没有去更新这个数据,可以使用版本号机制和CAS算法实现。选择使用哪种锁取决于具体的场景和需求。
3.synchronized锁的升级过程
- 无锁状态(Unlocked):当一个线程访问一个同步代码块时,并没有其他线程正在访问该代码块,那么该线程可以直接获取锁。
- 偏向锁状态(Biased):当一段同步代码一直被一个线程所访问,那么该线程会自动获取锁,降低获取锁的代价。
- 轻量级锁状态(Lightweight):当锁是偏向锁的时候,被另外的线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,从而提高性能。
- 重量级锁状态(Heavyweight):当轻量级锁外的其他线程自旋超过一定的次数,或者一个线程在持有锁,一个在自旋,又有第三个来访时,轻量级锁就升级为重量级锁。
4.countDownLatch的三个方法
- CountDownLatch(int count); //构造方法,创建一个值为count 的计数器。
- await();//阻塞当前线程,将当前线程加入阻塞队列。
- countDown();//对计数器进行递减1操作,当计数器递减至0时,当前线程会去唤醒阻塞队列里的所有线程。
- getcount();//获取当前计数器的值
5.synchronized 静态和非静态的区别
- 修饰非静态方法,实际上是对调用该方法的对象加锁,俗称“对象锁”。
- 修饰静态方法,实际上是对该类对象加锁,俗称“类锁”。
6.线程的6种状态
一个线程在某一个时间点处于一个状态,这些状态不反应操作系统的线程状态。
- NEW 新创建的线程,尚未启动的线程状态,新创建了一个线程对象,但还没有调用start()方法。
- RUNNABLE 在Jvm虚拟机中执行的线程所处的状态(为什么不是running? jvm可以运行)
- BLOCKED 被阻塞等待监视器锁定的线程处于此的状态
- WAITING 正在等待另外一个线程执行特定动作的线程所处的状态
- TIME_WAITING 同上,它有超时时间
- TERMINATED 已退出的线程处于此状态,终止
7.Runnable和Callable的区别
相同点:
- 都是Java中用于实现多线程的接口
不同点:
- Runnable没有返回值,Callable有返回值
- Runnable不能抛出异常,Callable可以抛出异常
- Runnable接口可以由Thread类直接执行,Callable接口需要通过FutureTask类执行
Runnable适合于不需要返回结果、不需要处理异常的简单场景;
Callable更适合需要返回结果、需要处理异常的复杂场景。
8.wait和sleep的区别
- 使用方式:wait()方法是Object类的方法,需要在synchronized块内使用;而sleep()方法是Thread类的静态方法,可以在任何地方调用。
- 锁的释放:wait()方法会释放当前线程持有的锁;而sleep()方法不会释放锁。
- 唤醒方式:wait()方法需要被其他线程调用notify()或notifyAll()方法来唤醒等待的线程;而sleep()方法会在指定的时间到达后自动唤醒。
- 异常抛出:wait()方法必须在try-catch块中进行异常处理;而sleep()方法则可以不做异常处理(由编译器处理)。
- 使用范围:wait()方法通常用于线程之间的同步和等待,常与notify()或notifyAll()一起使用;而sleep()方法主要用于线程的暂停和延迟执行。
9.lock接口的实现类
- ReentrantLock:可重入锁,Java 中较为常用的一种锁。与 synchronized 关键字相似,ReentrantLock 支持多个同时访问该锁的线程,但需要显式地获取和释放锁,具有更灵活的控制能力。
- ReentrantReadWriteLock:可重入读写锁,同时支持读和写的锁定机制,读锁可以被多个线程同时获取,写锁只能被单个线程获取。因为读的操作通常不会改变共享资源的状态,读写锁可以提高并发效率。
- StampedLock:StampedLock 是 Java 8 中新增的一种锁,提供了乐观读锁和悲观写锁两种模式。乐观读锁不会阻塞其他线程,但可能会失败;而悲观写锁会阻塞其他线程的读写操作。
10.读写锁
读锁和写锁,其中读锁允许多个线程同时获得,因为读操作本身是线程安全的,而写锁则是互斥锁,不允许多个线程同时获得写锁,并且写操作和读操作也是互斥的。
11.JDK自带线程池有哪几种,阿里为什么不推荐
OOM(out of memory(存储器,内存)): 当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error(注:非exception,因为这个问题已经严重到不足以被应用处理)。
详细版本:
1)newFixedThreadPool(固定大小的线程池)
每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程
不推荐使用的原因
这个线程池到时没有上个线程池豪横了, 它定死了线程数量, 所以线程数量是不会超出的,但是它的任务队列是无界的LinkedBlockingQueue, 对于加进来的任务处理不过来就会存入任务队列中, 并且无限制的存入队列。 这个线程池感觉就是家里有地, 无论来多少货都往里面装。这个线程池如果使用不当很容易导致OOM
补充:LinkedBlockingQueue 是Java中的一个阻塞队列,它是基于链表实现的,具有 无界限制 (但可以设置容量大小)。它的特点是当队列为空时,从队列中获取元素的操作会被阻塞;当队列已满时,往队列里添加元素的操作会被阻塞。
2)newSingleThreadExecutor(单线程的线程池)
这个线程池只有一个线程在工作,也就是相当于单线程串行执行所有任务。如果这个唯一的线程因为异常结束,那么会有一个新的线程来替代它。此线程池保证所有任务的执行顺序按照任务的提交顺序执行。
不推荐使用的原因
这个线程池只有一个线程, 比newFixedThreadPool还穷, 但是任务队列和上面一样, 没有限制, 很容易就使用不当导致OOM
这个是定时任务的线程池, 没有定义线程创建数量的上线, 同时任务队列也没有定义上限, 如果前一次定时任务还没有完成, 后一个定时任务的运行时间到了, 它也会运行, 线程不够就创建。 这样如果定时任务运行的时间过长, 就会导致前后两个定时任务同时执行,如果他们之间有锁,还有可能出现死锁, 此时灾难就发生了。
3)newScheduledThreadPool(可调度的线程池 周期线程池)
线程池支持定时以及周期性执行任务的需求,以创建一个固定大小的线程池,该线程池可以在指定的延迟时间后执行任务,也可以按照一定的时间间隔周期性地执行任务。
不推荐使用的原因
这个线程池到时没有上个线程池豪横了, 它定死了线程数量, 所以线程数量是不会超出的,但是它的任务队列是无界的LinkedBlockingQueue, 对于加进来的任务处理不过来就会存入任务队列中, 并且无限制的存入队列。 这个线程池感觉就是家里有地, 无论来多少货都往里面装。这个线程池如果使用不当很容易导致OOM
4)newCachedThreadPool(可缓存的线程池)
如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲( 60 秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说 JVM )能够创建的最大线程大小。
不推荐使用使用的原因:
最大线程数是Integer.MAX_VALUE, 并且任务队列是SynchronousQueue。 也就是说这个线程池对任务来者不拒,线程不够用就创建一个, 感觉就像一个豪横的富豪。 这就是问题所在了, 如果同一时刻应用的来了大量的任务, 这个线程池很容易就创建过多的线程, 而创建线程又是一个很耗性能的事情, 这就容易导致应用卡顿或者直接OOM
补充:SynchronousQueue 是Java中的一个阻塞队列,它不存储元素,而是在生产者线程将元素放入队列时,必须等待消费者线程将元素取出后才能继续执行。也就是说,每个插入操作必须等待一个对应的移除操作。
简略版本(背这个):
1.newFixedThreadPool(固定大小的线程池)
2.newSingleThreadExecutor(单线程的线程池)
3.newScheduledThreadPool(可调度的线程池 周期 线程池)
4.newCachedThreadPool(可缓存的线程池) 不限制最大线程数
为什么不推荐:
任务队列无限制,容易导致oom
OOM: 当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error(注:非exception,因为这个问题已经严重到不足以被应用处理)。
12.什么场景会使线程进入waiting状态,如何唤醒。
当某个线程获取到锁后,发现当前还不满足执行的条件,就可以调用对象锁的wait方法,进入等待状态。 直到某个时刻,外在条件满足了,就可以由其他线程通过调用notify ()或者notifyAll ()方法,来唤醒此线程。
13、事务失效的几种场景
1 非public修饰的方法
@Transactional注解只能在在public修饰的方法下使用。
2 类内部访问
类内部直接访问类内部的方法。
解决方法:在该Service类中使用AopContext.currentProxy()获取代理对象
3 数据库不支持事务
MySQL中,MyISAM引擎不支持事物,InnoDB 支持事物
4 异常类型不匹配
@Transactional 注解默认只处理运行时异常( RuntimeException 和 error),而不会处理受检异常( Exception 的子类)。当抛出未被捕获的运行时异常时,Spring 会触发事务回滚操作,将之前的操作撤销;而对于未被捕获的受检异常,Spring 不会触发事务回滚操作。如果需要处理受检异常并触发事务回滚,可以通过 rollbackFor 和 noRollbackFor 属性来指定需要回滚或不需要回滚的异常类型。
5 传播属性设置问题 PROPAGATION_NOT_SUPPORTED
事务声明传播属性为不支持事务,spring提供的一种传播机制,表示以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6 捕获异常未抛出
事务管理是通过try…catch捕获异常才能做回滚的,如果业务代码的异常try…catch并没有向外抛出,这时出现异常后事务就不会回滚而使得事务的一致性没法满足,进而事务失效
7 Bean没有纳入Spring IOC容器管理
8 事务方法内启动新线程进行异步操作
14、sso单点登录如何实现
Token:采用 Token 方式实现 SSO,其原理是在用户登录之后,认证服务器生成一个 Token,并将该 Token 存储在共享的存储中(例如 Redis、数据库等),然后将该 Token 返回给用户。用户在访问其他应用系统时,该系统会向认证服务器发送请求,并带上 Token。认证服务器通过 Token 来判断该用户是否已经登录过,如果已经登录过,则返回一个新的 Token 给应用系统,否则需要用户重新登录。
单点登录(Single Sign-On,简称 SSO)是指用户只需要登录一次,即可在多个应用系统中访问受授权的资源。其原理是在用户登录之后,服务器会颁发一个令牌(Token),并将该令牌保存在共享的存储中(例如 Redis、数据库等),然后在用户访问其他应用系统时,该系统会向认证服务器发送请求,如果该用户已经登录过,则认证服务器会颁发一个新的令牌,旧的令牌作废,否则需要用户重新登录。
实现多个设备的登录,可以使用hash结构存储
15、spu,sku,批次
- SPU(Standard Product Unit,标准产品单位):SPU是指标准的产品单位,通常表示某种产品的基本型号或规格。它可以看作是一个产品的基本框架,包含了该产品的核心属性和特征。SPU可以理解为一个产品族的总称,例如手机品牌下的某一款型号。 小米13
- SKU(Stock Keeping Unit,库存单位):SKU是指为了区分和管理不同的库存产品而设定的一种标识符。每个SKU代表一个具体的库存产品,可以根据产品的规格、颜色、尺寸、包装等因素进行区分。一个SPU可以对应多个SKU,每个SKU代表该SPU的一个具体变体。
- 批次:批次是指根据产品的生产时间和地点等属性,批量生产的一批产品。同一批次的产品具有相同或相近的特征和属性。为了追踪和管理不同批次的产品,通常会为每个批次分配一个唯一的批次号 (可乐,安慕希)
相关文章:

多线程及锁
1.lock锁和synchronized锁的区别。 1:Synchronized 是Java的一个关键字,而Lock是java.util.concurrent.Locks 包下的一个接口; 2:Synchronized 使用过后,会自动释放锁,而Lock需要手动上锁、手动释放锁&am…...

C++ 写一个Data类的注意问题
Data类 声明和定义分离的一些问题 声明里面我们不带缺省参数,定义我们给缺省参数,如下面两段代码: Data.h#pragma once #include<iostream> using namespace std; class Data { public:Data(int year,int month,int day);private:in…...

postman做接口测试
之前搞自动化接口测试,由于接口的特性,要验证接口返回xml中的数据,所以没找到合适的轮子,就自己用requests造了个轮子,用着也还行,不过就是case管理有些麻烦,近几天又回头看了看postman也可以玩…...

hdlbits系列verilog解答(always块)-29
文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 由于数字电路由用网线连接的逻辑门组成,因此任何电路都可以表示为模块和赋值语句的某种组合。然而,有时这不是描述电路的最方便方式。过程procedure(其中 always 的块就是一个示例)提供了描述电路的替代语法…...

uniapp实现瀑布流
首先我们要先了解什么是瀑布流: 瀑布流(Waterfall Flow)是一种常见的网页布局方式,也被称为瀑布式布局或砌砖式布局。它通常用于展示图片、博客文章、商品等多个不同大小和高度的元素。 瀑布流布局的特点是每个元素按照从上到下…...

15. 机器学习 - 支持向量机
Hi, 你好。我是茶桁。 逻辑回归预测心脏病 在本节课开始呢,我给大家一份逻辑回归的练习,利用下面这个数据集做了一次逻辑回归预测心脏病的练习。 本次练习的代码在「茶桁的AI秘籍」在Github上的代码库内,数据集的获取在文末。这样做是因为我…...

如何根据进程号查询服务的端口号
ps -ef | grep nacos ps -ef | grep nacos 命令是用于查找系统中所有包含 "nacos" 关键字的进程。这个命令的含义如下: ps: 这是一个用于显示当前正在运行的进程的命令。 -ef: 这两个选项一起使用,表示显示所有进程的详细信息。 -e 选项表示显…...

2.10、自定义量化优化过程
introduction 如何自定义量化优化过程,以及如何手动调用优化过程 code from typing import Callable, Iterableimport torch import torchvision from ppq import QuantizationSettingFactory, TargetPlatform from ppq.api import (ENABLE_CUDA_KERNEL, Quantiz…...

MySQL如何添加自定义函数
深入MySQL:学习如何添加自定义函数 MySQL 是一种流行的开源关系型数据库管理系统,它支持很多内置函数来完成各种操作。不过有时候这些内置函数无法满足我们的需求,这时候就需要自定义函数了。在 MySQL 中,可以通过编写自定义函数…...

超融合数据库:解锁全场景数据价值的钥匙
前言 近日,四维纵横对外官宣已完成上亿元 B 轮融资。作为超融合数据库理念的提出者,三年来 YMatrix 持续在超融合数据库领域中保持精进与迭代,对于超融合数据库在行业、场景中的应用和理解也更为深刻。 本篇文章,我们将基于 YMa…...

Pap.er for Mac:高清壁纸应用打造你的专属视觉盛宴
在浩瀚的互联网海洋中,你是否曾为寻找一张心仪的高清壁纸而烦恼?或者是在大量的壁纸应用中感到困扰,不知道哪一个能满足你的需求?今天,我要向你介绍的,是一款独特的5K高清壁纸应用——Pap.er for Mac。 Pa…...

AI:46-基于深度学习的垃圾邮件识别
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...

【骑行贝丘渔场】一场与海的邂逅,一段难忘的旅程
在这个渐凉的秋日,我们校长骑行队一行人骑着自行车,从大观公园门口出发,开始了一段别开生面的海滩之旅。沿途穿越草海隧道湿地公园、迎海路、海埂公园西门(第二集合点)、宝丰湿地公园、斗南湿地公园、蓝光城࿰…...

消息中间件——RabbitMQ(一)Windows/Linux环境搭建(完整版)
前言 最近在学习消息中间件——RabbitMQ,打算把这个学习过程记录下来。此章主要介绍环境搭建。此次主要是单机搭建(条件有限),包括在Windows、Linux环境下的搭建,以及RabbitMQ的监控平台搭建。 环境准备 在搭建Rabb…...

Mysql 表读锁与表写锁
表读锁 加锁:lock table table_name read 释放锁:unlock tables 当事务一用表读锁锁住某张表后, 1.事务一必须释放表读锁才能访问其他表 2.期间事务2可以访问该表,但是修改事会遇到阻塞等待,只有等到事务一释放锁后…...

目标检测概述
1.是什么? 目标检测是计算机视觉领域的核心问题之一,其任务就是找出图像中所有感兴趣的目标,确定他们的类别和位置。由于各类不同物体有不同的外观,姿态,以及不同程度的遮挡,加上成像是光照等因素的干扰&a…...

10月31日星期二今日早报简报微语报早读
10月31日星期二,农历九月十七,早报微语早读分享。 1、广西官宣:做试管婴儿费用可报销; 2、港媒:4名港大学生承认“煽惑他人蓄意伤人罪”,被判监禁2年; 3、331名中国维和官兵全部获联合国勋章…...

【Linux】虚拟机项目部署与发布
目录 一、Linux部署单机项目 1.1 优缺点 1.2 将项目共享到虚拟机 1.3 解压后将war包放入tomcat 1.4 数据库导入脚本 1.5 Tomcat启动项目 二、部署前后端分离项目 2.1 准备工作 2.2 部署SPA项目 2.2.1 nginx反向代理 2.2.2 SPA项目宿主机访问 一、Linux部署单机项目…...

边缘计算技术的崭新篇章:赋能未来智能系统
边缘计算是近年来云计算和物联网技术发展的重要趋势。通过将数据处理和分析从云端迁移到设备边缘,边缘计算能够实现更低的延迟和更高的数据安全。本文将探索边缘计算技术的最新进展及其在不同行业中的应用场景。 1. 实时数据处理与决策 在需要快速响应的场景中&…...

Mac/Linux类虚拟机_CrossOver虚拟机CrossOver 23.6正式发布2024全新功能解析
CodeWeivers 公司于今年 10 月发布了 CrossOver 23.6 测试版,重点添加了对 DirectX 12 支持,从而在 Mac 上更好地模拟运行 Windows 游戏。 该公司今天发布新闻稿,表示正式发布 CrossOver 23 稳定版,在诸多新增功能中,最…...

RabbitMQ 运维 扩展
1、集群管理与配置 1.1、集群搭建 关于Rabbitmq 集群的搭建,详见以下文章。简单说来就是将多个单机rabbitmq服务,通过给到一致的密钥(.erlang.cookie)并且开放rabbitmq服务的 25672 端口,允许多节点间进行互相通讯&am…...

[量化投资-学习笔记003]Python+TDengine从零开始搭建量化分析平台-Grafana画K线图
在前面两个笔记: PythonTDengine从零开始搭建量化分析平台-数据存储 PythonTDengine从零开始搭建量化分析平台-MA均线的多种实现方式 中有提到使用 Grafana 画图,不过画的都是均线。除了均线,Grafana 非常人性的提供了 K线图模块 搭配 TDeng…...

前端接口请求支持内容缓存和过期时间
前端接口请求支持内容缓存和过期时间 支持用户自定义缓存时间,在规则时间内读取缓存内容,超出时间后重新请求接口 首先封装一下 axios,这一步可做可不做。但是在实际开发场景中都会对 axios 做二次封装,我们在二次封装的 axios …...

【计算机网络】数据链路层——以太网
文章目录 前言什么是以太网以太网帧格式6位目的地址和源地址2位类型数据长度CRC 校验和 数据在数据链路层是如何转发的 前言 前面我们学习了关于应用层——自定义协议、传输层——UDP、TCP协议、网络层——IP协议,今天我将为大家分享关于数据链路层——以太网方面的…...

【Spring】Spring MVC请求响应
文章目录 1. 请求1.1 传递单个参数1.2 传递多个参数1.3 传递对象1.4 后端参数重命名1.5 传递数组1.6 传递集合1.7 传递JSON对象1.8 获取URL中参数1.9 上传⽂件1.10 获得Cookie1.11 获得Session1.12 获得Header 2. 响应2.1 返回静态界面2.2 返回数据2.3 返回HTML代码片段2.4 返回…...

程序设计与算法(二)算法基础(北京大学MOOC)
一、枚举 1、完美立方 /* 完美立方a^3b^3c^3d^3// a大于b c d// b<c<d*/ #include <iostream> int main() {int a,b,c,d; int N 24;//scanf("%d", &N );for(a2; a<N; a ) //a的范围 [2,N]{for(b2; b<a; b){ //b的范围[2…...

【MedusaSTears】正则表达式搜索心得
文章目录 心得体会1.懒惰匹配最少字符 .?2.前瞻: 字符串后边 包括/不包括 某个单词/字母2-1.包含某单词: start(?.?hello)2-2.不包含某单词: start(?!.?hello) 心得体会 前情回顾: 【MedusaSTears】正则?不要太简单!—正则表达式个人学习心得总结: 正则说白了是对字符串…...

带你从0开始学习自动化框架Airtest
现在市面上做UI自动化的框架很多,包括我们常用的Web自动化框架Selenium,移动端自动化框架Appium。 虽然Selenium和Appium分属同源,而且API都有很多相同的地方,可以无损耗切换,但是还是需要引入不同的库,而…...

MySQL扩展语句和约束方式
一、扩展语句 复制,通过like这个语法直接复制bbb的表结构。只是复制表结构,不能复制表里面的数据 把bbb表里面的数据,复制到test,两个表数据结构要一致 创建一张表,test1,数据从bbb来,表结构也是bbb delete…...

用起来顺手的在线表结构设计软件工具Itbuilder,与你共享
在线表结构设计软件工具需功能简洁,去除晦涩难懂的设置,化繁为简,实用为上,上手非常容易,这些itbuilder统统可以做到。 itbuilder是一款基于浏览器开发的在线表结构设计软件工具,借助人工智能提高效率&…...