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

JAVA面试八股文一(并发与线程)

  1. 并发的三大特性

  1. 原子性:cpu在执行过程不可以暂停然后再调度,不可以中断,要不全部执行完,要不全部不执行。

  1. 可见性:当多个线程访问同一个变量时,一个线程改变了这个变量的值,其他线程能够立即看到修改的值。

  1. 有序性:虚拟机在编译时,对改变顺序不会对最终结果影响的代码,虚拟机不一定会按照为我们写的代码顺序来执行,可能将他们重新排序。

  1. 谈谈什么是线程池

线程池和数据库连接池非常相似,用来统一管理和维护线程,减少没必要的开销

  1. 为什么要使用线程池

线程生命周期

创建》调用start方法》运行状态》run运行

因为频繁的开启或者停止线程,线程需要从新被cpu从就绪到运行状态调度,需要发生cpu的上下文切换,效率非常低。

线程池是复用机制,提前创建好固定数量的线程数一直在运行状态实现复用,限制线程创建数量 从而减少就绪到运行状态的切换。

  1. 那些地方会使用到线程池?

必须使用线程池来维护和创建线程 不能直接new Thread

异步发送短息等

  1. 线程池有那些作用?

核心点:复用机制

  1. 降低资源消耗:通过线程池创建好的线程复用,来降低线程重复创建销毁造成的资源损耗

  1. 提高响应速度:任务到达不需要再创建线程,可以直接执行

  1. 提高线程可管理性:统一i调度,管理和监控

  1. 可拓展性:例如延时定时线程池。

  1. 线程池创建方式

jdk自带的Executors 四种可缓存线程池 可定长度线程池 单例线程池,定时线程池 但是基本用不到

都是基于ThreadPoolExecutor构造函数封装的。线程数量无界,可能会出现内存溢出问题。

  1. 线程池底层复用机制和原理

  1. 提前创建一批处于运行状态的线程。 ---通过死循环实现的

  1. 提交线程任务,将任务放在并发队列容器中

  1. 正在运行的线程从任务队列中获取该任务执行

  1. ThreadPoolExecutor的核心参数

corePoolSize 核心线程数

maximumPoolSize 最大线程数

keepAliveTime 存活时间

unit keeppAliveTime 存活时间单位

  1. 线程池的线程会一直处于运行状态吗

不会,如果核心线程数corePoolSize小于,maxmumPoolSize最大线程数,多出的部分线程超过设置的存活时间keepAliveSize就会自动停止。

  1. ThreadPoolExecutor底层实现原理

  1. 创建核心线程数的线程一直处于运行状态

  1. 当队列任务数小于核心线程数时,且队列任务数未满时,将任务放入任务队列

  1. 当任务队列大于核心线程数且任务已满,

c.1若任务数小于最大线程数,创建线程执行,

c.2若任务数大于最大线程数,抛出异常,拒绝任务

  1. 线程池满了任务会丢失吗?

不会,可以缓存下来,等线程池不满的时候,再进行执行。

拒绝策略:1.丢任务,运行时抛异常 2.执行任务 3.忽视 4.从队列中提出最先进的任务 5.自定义处理器

  1. 什么是悲观锁,什么是乐观锁

悲观锁:站在mysql角度,当多个线程同时对一行数据进行修改时,只有最后一个线程才能修改成功,只要谁能获取行锁,谁就能修改该行数据,其他线程不能修改,且处于阻塞状态。

站在java锁层面:如果没有获取到锁,就会阻塞等待,后期唤醒成本非常高

乐观锁:如果没有获取到锁,当前线程不会阻塞等待,通过死循环控制,比较消耗cpu资源

  1. Mysql层面如何实现乐观锁

在表结构新增一个版本字段,version 多线程同时对一行数据实现修改操作时,铜钱查询版本号吗,作为update条件查询,如果当前版本号发生变化 数据查不到,则修改失败,mysql会不断重试,重新执行查询最新版本执行修改。

  1. java锁分类

悲观锁,乐观锁 公平锁与非公平锁 自旋锁与重入锁 重量锁与轻量锁 独占锁与共享锁

  1. 公平锁与非公平锁之间的区别

公平锁:根据请求锁的顺序排列,先请求的先获取锁,后请求的最后获取,采用队列存放

非公平锁:通过正清方式获取锁,不根据请求顺序 效率高 Synchronized是非公平锁

  1. 什么是锁的可重入性

在同一个线程中,锁可以不断传递的,可以直接获取。

  1. 什么是cas(自旋锁),它的优缺点

cas 比较并交换

没有获取的锁的线程是不会阻塞的,通过循环会一直获取锁

cas有三个操作时 内存中v,旧的预期值E,要修改的新值N

cas优点:没有获取锁的线程,会一直处在用户态,没有锁的线程一直进行循环重试。

cas缺点:通过死循环控制,cpu飙高

  1. cas如何避免aba问题?

通过加版本号来控制

  1. ThreadLocal和Synchronized区别

ThreadLocal 提供给每个线程缓存局部变量。

都可以实现线程多线程访问保证线程安全。

ThreadLocal内阁线程中都有自己独立的局部变量,空间换时间,相互间是隔离的 效率更高

Synchronized采用多个线程竞争同一个资源的时候,最终只有一个线程能访问成功,采用时间换空间的方式保证线程安全。

ThreadLocal 底层实现原理:

每个线程中都有独立的ThreadLocalMap对象 存放key value,key为当前线程,value为缓存值,get时,根据当前线程获取缓存的内容。

set get remove 方法

防止内存泄漏:

  1. 调remove方法。

  1. threadLocal设置为弱引用对象

  1. 每次做set之前都将之前的key值设置为null

  1. ThreadLocal 应用场景

SpringMVC获取http request对象

Aop LCN分布式事务,分布式服务追踪

Sping事务模板类

  1. 为什么线程缓存的时ThreadLocalMap

ThreadLocalMap可以存放n个不同的ThreadLoacal对象

每个ThreadLoacal对象只能缓存一个变量值

  1. 强,软,弱引用之间的区别

强引用:当堆内存满了,进行GC垃圾回收,对于强引用对象,就算出现了oom也不会回收

软引用:堆内存满的时候,才会回收。充足时不会回收

弱引用:只要jvm执行GC,就会被回收。

  1. ThreadLocal为何引发内存泄露问题?

内存泄漏:程序员申请了内存,但该内存一直无法释放

内存溢出:申请内存时,发现申请内存不足。

ThreadLocal = null 指针不在指向堆里的对象,但是ThreadLoacalMap中还存在指向堆对象的entry

  1. Lock锁底层实现原理

AQS+Cas +LockSupport实现

  1. AQS底层实现原理

会将没有获取锁的线程放在一个双向链表中

相关文章:

JAVA面试八股文一(并发与线程)

并发的三大特性原子性:cpu在执行过程不可以暂停然后再调度,不可以中断,要不全部执行完,要不全部不执行。可见性:当多个线程访问同一个变量时,一个线程改变了这个变量的值,其他线程能够立即看到修…...

C语言二级指针

目录一、1. 指针的作用2.二级指针3. 为什么要用二级指针一、 1. 指针的作用 内存的存储区就像一池湖水,数据就像池水里面的鱼,如果不用内存寻址的方式,那么当你找某个特定数据的时候,就相当于在一池湖水里找某一条叫做“张三”的…...

[java-面试]初级、中级、高级具备的技术栈和知识点

🌟1.java初级1. Java基础知识:语法、包装类、泛型、数据结构和继承,以及基础API。2. Java开发工具:如Eclipse,NetBeans,Maven等。3. Java Web开发技术:如Servlet,JSP,Str…...

「5」线性代数(期末复习)

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 第四章 向量组的线性相关性 &5)向量空间 第五章 相似矩阵及二次型 &a…...

记一次20撸240的沙雕威胁情报提交(2019年老文)

0x01 起因 这是一篇沙雕文章,没什么技术含量,大家娱乐一下就好 前几个月,我的弟弟突然QQ给我发来了一条消息,说要买个QQ飞车的cdk,我作为一个通情达理的好哥哥,自然不好意思回绝,直接叫他发来…...

佳能镜头EOS系统EF协议逆向工程(三)解码算法

目录 数据结构 解码算法 解码效果 这篇文章基于上两篇文章继续, 佳能镜头EOS系统EF协议逆向工程(一)转接环电路设计_佳能ef自动对焦协议_岬淢箫声的博客-CSDN博客本文属于专栏——工业相机。此专栏首先提供我人工翻译的法语文档部分&…...

搞互联网吧,线下生意真不是人干的

搞互联网吧,线下生意真不是人干的 应该是正月初几里吧,好巧不巧的被迫去参加了一下我们初中同学的聚会。其实毕业这么多年,无论大学,高中还是中学,类似的聚会我都是能躲则躲,有特别想见的同学也都是私下单…...

MySQL性能调优与设计——MySQL中的索引

MySQL中的索引 InnoDB存储引擎支持以下几种常见索引:B树索引、全文索引、哈希索引,其中比较关键的是B树索引。 B树索引 InnoDB中的索引自然也是按照B树来组织的,B树的叶子节点用来存放数据。 聚集索引/聚簇索引 InnoDB中使用了聚集索引&…...

这5个代码技巧,让我的 Python 加速了很多倍

Python作为一种功能强大的编程语言,因其简单易学而受到很多初学者的青睐。它的应用领域又非常广泛:科学计算、游戏开发、爬虫、人工智能、自动化办公、Web应用开发等等。 而在数据科学领域中,Python 是使用最广泛的编程语言,并且…...

Sphinx+Scws 搭建千万级准实时搜索应用场景详解

目标: 一、搭建准确的千万级数据库的准实时搜索(见详情) 二、实现词语高亮(客户端JS渲染,服务器端渲染,详见7.3) 三、实现搜索联想(输入框onchange,ajax请求搜索,取10条在…...

kafka缩容后,使用tcpdump抓包找到还在连接的用户

1、使用tcpdump抓包监控端口9092 tcpdump src port 9092 16:23:27.680835 IP host01.XmlIpcRegSvc > 192.168.168.1.36199: Flags [R.], seq 0, ack 1493547965, win 0, length 0 16:23:27.681877 IP host01.XmlIpcRegSvc > 192.168.168.2.50416: Flags [R.], seq 0, ac…...

Spring

Spring Spring 是什么? Spring 是于 2003 年兴起的一个轻量级的,IOC 和 AOP 的 Java 开发框架,它 是为了简化企业级应用开发而生的。 Spring有几大特点如下 轻量级的 Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。Spring 核 心功能…...

vue2版本《后台管理模式》(中)

文章目录前言一、创建一个文件夹 utils 里面新增一个 setToken.js 文件(设置token验证)二 、创建一个api文件夹 新增 service.js (axios拦截器)三、在api文件夹里 新增一个 api.js 来接收数据(把api封装哪里需要某项数据直接引入就…...

网络游戏开发-服务器篇

1.网络 网络分为弱联网和强联网。 1.弱联网 弱联网是客户端连接到服务端发送一个请求,然后由服务端回应一个内容,这是单向传输的方式,服务端是无法主动给客户端发送消息的,服务端相应请求之后会自动关闭连接。 缺点:传输采用明文,通过抓包可以看到明文信息,安全性不太…...

智慧校园源码:电子班牌,支持手机移动端以及web端对班牌设备的管控

▶ 智慧校园系统有源码,有演示! (电子班牌)设备管理: 1、 管理员查看全校电子班牌设备信息:含有(班级信息、软件版本、设备型号、开关机信息、班牌截屏信息、教室编号、设备ID、设备描述、在线状态、离线状…...

研报精选230216

目录 【行业230216东吴证券】环保行业月报:2023M1环卫新能源渗透率大增至11.91%,上海地区渗透率高达77%【行业230216国元证券】国元新食饮:一图君:22年白酒产量:同降6.2%【行业230216浙商证券】农林牧渔点评报告&#…...

在华为MateBook Ego的arm windows 11上安装hyper-V虚拟机

入手一台华为matebook Ego的笔记本,由于想要测试一些arm的驱动功能,经常会把系统搞蓝屏,于是想安装一个虚拟机,于是试了vmware ,visual-box,由于本机是arm架构上面两个软件都无法进行正常安装,可能是由于有…...

OpenCV Canny边缘检测

本文是OpenCV图像视觉入门之路的第13篇文章,本文详细的介绍了Canny边缘检测算子的各种操作,例如:Canny算子进行边缘检测等操作。 Canny函数是OpenCV中用于执行边缘检测的函数之一,其参数包括: threshold1:…...

C#.Net正则表达式学习笔记

C#.Net正则表达式学习笔记 在处理字符串时,你会经常有查找符合特定条件的字符串的需求,比如判断一串电话号码是否符合格式、一个邮箱是否符合格式、一个密码是否包含了字母大小写等等。 正则表达式(Regular expressions)用于匹配文本,使用一…...

矩阵理论复习(十二)

已知方阵A的不变因子: 求谱半径求矩阵级数判断矩阵幂级数的收敛性 若矩阵B的某个算子范数小于1,则I-B可逆。 矩阵分析 任何相容矩阵范数都存在与之相容的向量范数。 盖尔圆盘定理一的证明 椭圆范数的证明 若||.||是Cm上的向量范数,A为…...

大数据框架之Hadoop:HDFS(七)HDFS 2.X新特性

7.1集群间数据拷贝 scp实现两个远程主机之间的文件复制 ​ scp -r hello.txt roothadoop103:/root/hello.txt // 推 push ​ scp -r roothadoop103:/root/hello.txt hello.txt // 拉 pull ​ scp -r roothadoop103:/root/hello.txt roothadoop104:/root //是通过本地主机中…...

Fluent工作目录

1 工作目录定义工作目录(working directory)是一种文件存储路径设置方式。基于工作目录的方法,写文件时只需要指定文件名,而不需要指定完全的文件路径,从而简化程序编写,对不同操作系统环境有更好的适应性。…...

Learning C++ No.10【STL No.2】

引言: 北京时间:2023/2/14/23:18,放假两个月,没有锻炼,今天去跑了几圈,一个字,累,感觉人都要原地升天了,所以各位小伙伴,准确的说是各位卷王,一定…...

【java 高并发编程之JUC】2w字带你JUC从入门到精通

点击查看脑图目录地址,实时更新 1 什么是 JUC 1.1 JUC 简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC 就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。 1.2 进程与…...

QCon演讲实录(下):多云管理关键能力实现与解析-AppManager

在上篇中,我们已经基本了解了多云管理。现在,我们将深入探讨多云管理关键能力实现:AppManager。 什么是AppManager? 上面我们讲了理论、我们自己使用的交付流程和整体架构,下面我们进入关键能力实现与解析的环节&…...

刚刚退出了一个群,关于在要麒麟OS上运行Labview

年龄过了45,看问题,与以前不太一样了。 觉得浪费时间的事,宁可发呆,也不会参和。 竟然一个群里在讨论如何满足客户的需求:麒麟OS上运行Labview。 然后直接退了群。 这种问题,我觉得可能 发在csdn上&…...

el-uploader 文件上传后,又被修改,无法提交到后端 ERR_UPLOAD_FILE_CHANGED

problem 文件上传后,又被修改,无法提交到后端 具体步骤: 文件上传本地文件打开并修改保存提交ajax 这个问题不仅仅局限于el-uploader,是一个普遍性的问题 导致的问题 问题1:提交请求时,控制台报错 net…...

利用Eigen实现点云体素滤波

目录 前言 一、算法原理 二、代码实现 1.头文件 2.源文件 三、效果展示 前言 体素滤波原理简单,是常用的...

linux高级命令之多进程的使用

多进程的使用学习目标能够使用多进程完成多任务1 导入进程包#导入进程包import multiprocessing2. Process进程类的说明Process([group [, target [, name [, args [, kwargs]]]]])group:指定进程组,目前只能使用Nonetarget:执行的目标任务名…...

CSS 圆角边框 盒子阴影 文字阴影

目录 1.圆角边框(重点) 2.盒子阴影(box-shadow) 3.文字阴影(text-shadow) 1.圆角边框(重点) border-radius 属性用于设置元素的外边框圆角。 语法: border-radius: l…...

wordpress编辑用户头像/网络广告人社区官网

上一篇文章介绍了RSA涉及的数学知识,本章将应用这些知识详解RSA的加密与解密。 RSA算法的密钥生成过程 密钥的生成是RSA算法的核心,它的密钥对生成过程如下: 1. 选择两个不相等的大素数p和q,计算出npq,n被称为RSA算法的…...

国内做网站制作比较/我要恢复百度

使用github管理Eclipse分布式项目开发 老关我在前面的博文(github管理iOS分布式项目开发)中介绍了github管理iOS分布式开发,今天老关将向大家介绍使用github管 理Eclipse分布式项目。事实上我们的516inc团队这在开发一个多移动平台项目,除了iOS平台还有A…...

网站建设方法叁金手指下拉丶/下载百度到桌面上

最近在反编译class和jar包的时候,发现部分class无法反编译出来,换了最新版本的jd-gui和多个版本都不行,只能放弃了 解决方案:GitHub上找Luyten这个工具反编译 luyten是Procyon的GUI,是一款操作简单、功能实用的java反编…...

网站升级建设方案/云优客seo排名公司

Lock是java.util.concurrent.locks包下的一个接口 主要方法有: Lock接口的实现类 Lock相关实现类还可以定义公平锁,如ReentrantLock(boolean) package cn.itcats.thread.safe.Test1;import java.util.concurrent.locks.Lock; import java.util.concurre…...

wordpress防止机器人注册/吉林seo技术交流

一、元素事件的绑定 为按钮绑定鼠标进入,鼠标离开,点击事件 第一种方法 $("#btn").mouseenter(function () {$(this).css("backgroundColor","red");});$("#btn").mouseleave(function () {$(this).css("backgroundColor"…...

湖北建设监理协会网站/58同城安居客

转自:http://blog.163.com/fghok_018/blog/static/122599670201072773924530/ 近一个月,宿舍的好多同学都买了笔记本电脑,当然,我也买了,学校的网说实话不稳定,貌似局域网游戏也没办法玩,主要是…...