Java重要基本概念理解

news/2024/4/19 19:46:08/文章来源:https://blog.csdn.net/sinian_sinian/article/details/129168778

熟悉JVM反射机制。

(1)反射的定义
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

(2)反射的理解
java中实现多态的形式主要有三种:向上转型,抽象类实现,接口类实现。
这三种方式实例化的对象数据类型都需要在运行时才能够确定,反射机制诞生之前,我们不能直接获取这些对象的内部信息。但是反射机制诞生之后,我们可以在运行时,实时动态的获取这些对象的具体的数据类型内部信息。

(3)反射的应用
运行时动态获取任意一个类或任意一个对象的内部信息。(包括编译阶段不能确定数据类型的对象和类)
实现解耦操作,用于框架的实现。

互斥同步。

(1)线程同步互斥基本概念

两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行,实现的基础就是通过互斥。

(2)线程同步互斥实现方式

Java 提供了两种锁机制来控制多个线程对共享资源的互斥访问,第一个是 JVM 实现的 synchronized(阻塞同步锁),而另一个是 JDK 实现的 ReentrantLock(非阻塞同步锁)。 其中synchronized 是重量级锁,ReentrantLock是轻量级锁。

  • synchronized锁住的对象与monitor相关联,其中monitor的两条指令:monitorenter和monitorexit 的字节码文件依赖于底层的操作系统的Mutex Lock来实现的 ,由于使用Mutex Lock需要将当前线程挂起并从用户态切换到内核态来执行,这种切换的代价是非常昂贵的 。所以该锁一般应用在极少锁竞争环境。
  • ReentrantLock是基于CAS指令+AQS阻塞队列来实现 。

互斥同步:阻塞同步

synchronized(阻塞同步锁)

互斥同步:非阻塞同步

ReentrantLock(非阻塞同步锁)(lock的子类)(基于CAS实现的乐观锁)

  • CAS就是比较并交换,最常见的应用场景就是,就是在数据库中实现乐观锁,我们一般会在数据库表中字段增加一个version字段,如果要求更高一点会使用时间戳。读取出数据时,将此version字段一同读出。同时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号等于数据库表当前版本号,则予以更新,并将版本号增1,否则认为是过期数据。
  • J.U.C 包里面的整数原子类 AtomicInteger,其中的 compareAndSet() 和 getAndIncrement() 等方法都使用了 Unsafe 类的 CAS 操作。

:基于冲突检测的乐观并发策略 :CAS 指令需要有 3 个操作数,分别是内存地址 V、旧的预期值 A 和新值 B。当执行操作时,只有当 V 的值等于 A,才将 V 的值更新为 B。

synchronized 与ReentrantLock之间的区别

①ReentrantLock显示地获得,释放锁,synchronized隐式获得释放锁

②ReentrantLock可响应中断,synchronized是不可以响应中断的

③ReentrantLock是JDK级别的,synchronized是JVM级别的

④ReentrantLock可以实现公平锁

⑤ReentrantLock通过Condition可以绑定多个条件

⑥底层实现不一样,synchronized是同步阻塞,使用的是悲观并发策略,lock是同步非阻塞,采用的是乐观并发策略。

⑦Lock是一个接口,而synchronized是java中的关键字,synchronized是内置的语言实现

⑧synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而 Lock 在发生异常时,如果没有主动通过 unLock()去释放锁,则很可能造成死锁现象, 因此使用 Lock 时需要在 finally 块中释放锁。

不采用同步措施进行同步

  • 将共享资源存放在一个方法的局部变量之中,因为局部变量存储在虚拟机栈中,属于线程私有的 ,不会出现线程安全问题 。
  • 看看这些共享数据的代码是否能保证在同一个线程中执行。如果能保证,我们就可以把共享数据的可见范围限制在同一个线程之内,这样,无须同步也能保证线程之间不出现数据争用的问题。(一般是本地线程)

死锁

定义:也就是两个线程在各自拥有锁的情况下,又去尝试获取对方的锁,从而造成的一直阻塞的情况。

原因:

①互斥条件:一个资源只能被一个线程占有,当这个资源被占用后其他线程就只能等待。

②不可剥夺条件:当一个线程不主动释放资源时,此资源一直被拥有线程占有。

③请求并持有条件:线程已经拥有一个资源后仍然不满足,又尝试请求新的资源。

④环路等待条件:产生死锁一定是发生了线程资源环路链。

办法:

改变死锁中的任意一个或多个条件就可以解决死锁问题,其中被修改的条件只有后两个:请求并持有条件和环路等待条件。

  • 修改请求并持有条件:获得了一把锁之后不再去请求获取另一把锁
  • 破坏环路等待条件: 首先给线程资源请求编号,规定每个线程,必须按编号递增的顺序请求资源,同一线程一次性获取完所有资源。

内存屏障原理。

内存屏障︰是一种屏障指令,它使得CPU或编译器对屏障指令的前和后所发出的内存操作执行一个排序的约束。也叫内存栅栏或栅栏指令。

内存屏障的能力∶

  • 1∶阻止屏障两边的指令重排序。
  • 2∶写数据的时候加了屏障的话,强制把写缓冲区的数据刷回到主内存中。
  • 3∶读数据的时候加了屏障的话,让工作内存/CPU高速缓存当中缓存的数据失效,重新到主内存中获取新的数据。

基本分类∶

  • 1:读屏障:Load Barrier : 在读指令之前插入读屏障,让工作内存/CPU高速缓存当中缓存的数据失效,重新到主内存中获取新的数据。
  • 2:写屏障: Store Barrier :在写指令之后插入写屏障,强制把写缓冲区的数据刷回到主内存中。

最常使用的指令:StoreLoad:强制把写缓冲区的数据刷回到主内存中,让CPU高速缓存当中缓存的数据失效,重新到主内存中获取新的数据。

volatile

  • 防止重排序:一个对象被volatile修饰,以为着所有对该对象操作的指令,都将按照默认顺序执行,不能按照语义相同就重新排序。
  • 可见性:在某个线程内的cpu缓存区内,如果被volatile修饰的变量被修改,那么就会触发StoreLoad指令,将缓存区内的变量立即写回主内存,并立即使其他线程内cpu缓存内该变量的值失效。
  • 原子性:只能保证单次读写的原子性,不支持多个操作的原子性(也就是不支持事务)

端口

端口是TCP/IP协议族中,应用层进程与传输层协议实体间的通信接口。

TCP/IP协议采用了全局分配(静态分配端口)和本地分配(动态分配端口)相结合的分配方法 。

保留端口的范围是0—1023,又称为众所周知的端口或熟知端口(Well-Known Port) 。

其余的端口号,1024-65535,称为自由端口号,采用本地分配,又称为动态分配的方法。

NAT技术与内网穿透

服务器一般使用的是公网 ip ,因此客户端可以通过NAT技术,将局域网内的ip地址层层转化为公网IP。

但是如果服务器是局域网IP,客户端就无法找到,因为NAT技术只能将ip地址层层转化为公网ip。

因此内网穿透诞生,将局域网ip与公网ip进行映射,因此客户端就可以同过NAT技术将ip地址层层转化为公网ip。

内网穿透方式

  • 第一种是直接拥有公网的ip并直接进行映射;
  • 第二种是有公网服务器的,采用frp等方式来进行穿透(这种方式不需要有公网的ip,但是需要一个服务器);

(1)第一种方式存在两种形式:

​ 第一种:光猫不能进行端口映射,那么将光猫设置为桥接模式,主机连接光猫,直接拨号上网,使用的ip直接为外网ip。

​ 第二种:光猫可以进行端口映射,那么配置光猫进行接口映射,那么间接使用外网IP。

(2)第二种方式属于直接使用远程服务器进行映射。(和翻墙一个道理)

);

(1)第一种方式存在两种形式:

​ 第一种:光猫不能进行端口映射,那么将光猫设置为桥接模式,主机连接光猫,直接拨号上网,使用的ip直接为外网ip。

​ 第二种:光猫可以进行端口映射,那么配置光猫进行接口映射,那么间接使用外网IP。

(2)第二种方式属于直接使用远程服务器进行映射。(和翻墙一个道理)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72728.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[qiankun]-多页签缓存

[qiankun]-多页签缓存环境功能需求多页签缓存方案方案1.主服务进行html替换方案2.微服务vnode 替换方案3.每个微服务都不卸载微服务加载方式的选择微服务的路由路径选择微服务的缓存工具微服务的容器使用tab作为微服务的挂载容器使用微服务路由作为微服务的挂载容器场景描述微服…

干货解答:如何设置Facebook Messenger 自动回复?

Facebook Messenger 自动回复消息是提升客户体验的有效方法。在本文中,我们将探讨设置Facebook 自动响应和不同的创建方法 Facebook 自动回复。另外,我们准备了一些最受欢迎的 Facebook Messenger 自动回复消息。Facebook Messenger 自动回复&#xff1a…

https加密原理详解,带你搞懂它为什么比http更安全

文章目录http的缺点对称加密非对称加密数字签名数字证书验证身份数字摘要数字签名验证内容的完整性总结http的缺点 http是超文本传输协议,使用http协议进行通信有如下缺点: http没有提供任何数据加密机制,数据通信使用明文通信,…

x86架构设备的OpenWrt的空间扩容问题

openwrt固件是squashfs-combined-efi非exf4格式 直接将原有根分区扩容 用插件是:fdisk,losetup,resize2fs,blkid df -h fdisk -l fdisk /dev/sda //进入fdisk分区管理工具注意fdisk后参数是磁盘名称,是要根据实际情况填写 fdisk /dev/sda //进入fdi…

JavaEE简单示例——<select>中的查询参数传递和结果集封装自动映射关系

简单介绍&#xff1a; 在之前我们在讲SQL映射文件中的映射查询语句的<select>标签的时候&#xff0c;对其中的四个常用属性的讲解并不是那么的透彻&#xff0c;今天就来详细的解释<select>的四个常用属性的具体含义以及<select>标签在进行查询的时候查询参数…

Sofa-jraft的Rpc调用服务端分析

在sofa-jraft中&#xff0c;关于RPC的服务端是RpcServer在RpcServer中的init方法中&#xff1a;初始化了连接事件监听器&#xff0c;这个里面就是一个map&#xff0c;然后可以添加事件监听的处理器&#xff0c;初始化userProcessors, codec 是一个编码和解码器的工厂&#xff0…

2022-2023年营销报告(B站平台) | 5大行业势态、流量大盘全景洞察

一直以来&#xff0c;手持高活跃、高粘性用户群体的B站是行业用来观察年轻人消费习惯的重要平台。以至于用户群体的不断壮大带动了B站的商业价值。如今B站的商业舞台越来越大&#xff0c;不断地向外界招手&#xff0c;欢迎更多品牌积极加入到这个千万年轻人聚集的内容社区。为了…

基于Hibernate对数据库表的单表查询

基于Hibernate对数据库表的单表查询 1.依赖 1.1jar包 1.2配置文件。persistence.xml <?xml version"1.0" encoding"UTF-8"?> <persistence version"2.1"xmlns"http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi"…

亲身试验 Outlook防关联方法分享

Outlook在海外的用途是很广泛的&#xff0c;不仅可以用于收发邮件&#xff0c;还可以作为各类第三方网站的登录凭证。所以Microsoft对于Outlook的监管还是比较严格的&#xff0c;跨境卖家大量注册Outlook账号使用的话很容易被检测出关联然后被封号。龙哥针对Outlook防关联的问题…

【Kubernetes 入门实战课】Day02——初识容器

系列文章目录 【Kubernetes 入门实战课】Day01——搭建kubernetes实验环境(一) 文章目录系列文章目录前言一、Docker的诞生二、Docker的形态1、Docker Desktop2、Docker Engine二、Docker的安装1、服务器连接外网安装2、服务器不通外网三、Docker的使用三、Docker的架构总结前…

阿里云物联网平台设备模拟器

在使用阿里云物联网平台过程中&#xff0c;如果开始调试没有实际的物理设备&#xff0c;可以考虑在阿里云物联网平台使用官方自带的模拟器进行调试。不过也可以通过叶帆科技开发的阿里云物联网平台设备模拟器AliIoTSimulator进行调试&#xff0c;AliIoTSimulator可以独立运行&a…

stm32 VM8978 音乐播放

一、WAV文件 1、WAV文件简介 2、WAV文件的解析 二、WM8978 1、WM8978介绍 2、WM8978特点 3、WM8978接口 4、WM8978框架 5、 WM8978 寄存器 三、IIS详解 1、IIS介绍 2、 IIS 的特点 3、IIS框架 4、 音频协议 5、 IIS Philips 标准 6、 IIS 时钟 四、音乐播放硬件…

ChatGPT三个关键技术

情景学习&#xff08;In-context learning&#xff09; 对于一些LLM没有见过的新任务&#xff0c;只需要设计一些任务的语言描述&#xff0c;并给出几个任务实例&#xff0c;作为模型的输入&#xff0c;即可让模型从给定的情景中学习新任务并给出满意的回答结果。这种训练方式能…

双检测人脸防伪识别方法(活体检测+人脸识别+关键点检测+人像分割)

双检测人脸防伪识别=人脸检测+活体检测+人脸识别 1.人脸关键点+语义分割 使用mediapipe进行视频人脸关键点检测和人像分割: import time import cv2 import mediapipe as mp import numpy as npmp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solution…

量化交易-单因子分析-alphalens

1. 数据准备 1.1 计算因子IC重要函数 def get_clean_factor_and_forward_returns(factor,prices,groupbyNone,binning_by_groupFalse,quantiles5,binsNone,periods(1, 5, 10),filter_zscore20,groupby_labelsNone,max_loss0.35,zero_awareFalse,cumulative_returnsTrue)facto…

【C语言】-程序编译的环境和预处理详解-让你轻松理解程序是怎么运行的!!

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 程序的编译前言一、 程序的翻译环境和执行环境二、 详解翻译环境2.1编译环境2.1.1预编…

民锋国际期货:2023,既艰难又充满希望,既纷乱又有无数机会。

不管是官方还是民间&#xff0c;各种信号都表明&#xff0c;2023年是一个拼经济的年份。 通货膨胀带来的需求量的增加&#xff0c;与中国经济高速发展带来的供给量增加&#xff0c;二者共同构成了我们的物价。 做一个长期主义者&#xff0c;做一个坚定看好中国未来的人&#…

MapBox动态气泡图渲染教程

先来看效果: 视频效果: 屏幕录制2023-02-22 15.34.57 首先我们来介绍一下思路。对于mapbox和openlayers这样的框架来讲,气泡图中的气泡本质上就是一个div,就是将一个dom元素追加到canvas上的固定位置而已。 在mapbox中有marker的概念,官网也有示例: Attach a popup to …

二叉树——路径总和

路径总和 链接 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点…

数据库及缓存之MySQL(一)

思维导图 常见知识点 1.mysql存储引擎&#xff1a; 2.innodb与myisam区别&#xff1a; 3.表设计字段选择&#xff1a; 4.mysql的varchar(M)最多存储数据&#xff1a; 5.事务基本特性&#xff1a; 6.事务并发引发问题&#xff1a; 7.mysql索引&#xff1a; 8.三星索引&#xf…