Java重要基本概念理解
熟悉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)第二种方式属于直接使用远程服务器进行映射。(和翻墙一个道理)
相关文章:
Java重要基本概念理解
熟悉JVM反射机制。 (1)反射的定义 Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Ja…...
逆向工具之 unidbg 执行 so
1、unidbg 入门 unidbg 是一款基于 unicorn 和 dynarmic 的逆向工具, 可以直接调用 Android 和 IOS 的 so 文件,无论是黑盒调用 so 层算法,还是白盒 trace 输出 so 层寄存器值变化都是一把利器~ 尤其是动态 trace 方面堪比 ida tr…...
zk-STARK/zk-SNARK中IP,PCP,IPCP,IOP,PIOP,LIP,LPCP模型介绍
我们的目标是构造 zkSNARK。在我们的目标场景中,Prover 只需要发送一个简短的证明字符串给 Verifier,而 Verifier 不需要给 Prover 发送任何消息。 直接构造一个满足这个场景的 zkSNARK 可能会很困难。一个更灵活的方式是在先在理想模型下构造证明系统&…...
StreamAPI
StreamAPI 最近开发用上了 Java8的StreamAPI,(咋现在才用?嗯哼,项目需要)自己也不怎么会,来总结一波吧! 别认为好抽象!!!干他就完事 一.StreamAPI介绍 就是用来处理集合的数据 其实到后面会发现和SQL的语句是差不多的~哈哈?你不信?往下面看 Stream:英文翻译叫做流 举个粟子…...
MySQl高可用集群搭建(MGR + ProxySQL + Keepalived)
前言 服务器规划(CentOS7.x) IP地址主机名部署角色192.168.x.101mysql01mysql192.168.x.102mysql02mysql192.168.x.103mysql03mysql192.168.x.104proxysql01proxysql、keepalived192.168.x.105proxysql02proxysql、keepalived 将安装包 mysql_cluster_…...
java+Selenium+TestNg搭建自动化测试架构(3)实现POM(page+Object+modal)
1.Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例的可维护性。 PageObject设计…...
oracle11g忘记system密码,重置密码
OPW-00001: 无法打开口令文件 cmd.exe 使用管理员身份登录 找到xxx\product\11.2.0\dbhome_1\database\PWDorcl.ora文件,删除 执行orapwd fileD:\app\product\11.2.0\dbhome_1\database\PWDorcl.ora passwordtiger (orapwd 在\product\11.2.0\dbhome_1\BIN目录下…...
黑马 Vue 快速入门 笔记
黑马 Vue 快速入门 笔记0 VUE相关了解0.1 概述0.2 MVVM0.3 JavaScript框架0.4 七大属性0.5 el:挂载点1 VUE基础1.0 第一个vue代码:Hello,vue1.1 v-bind 设置元素的属性 简写 :1.2 v-if , v-else , v-else-ifv-if , v-e…...
HTTP协议知识体系核心重点梳理
HTTP协议知识体系核心重点梳理TCP/IP协议1.四层模型2.通信过程3.tcp三次握手和四次挥手4.tcp安全传输4. 一次HTTP通信流程HTTP协议HTTP/1.1CookieHttp报文格式内容编码分块传输编码HTTP状态码重定向状态码常用的通用首部cache-controlExpiresConnectionTransfer-Encoding常用的…...
Nginx优化与防盗链
Nginx优化与防盗链 📒博客主页: 微笑的段嘉许博客主页 💻微信公众号:微笑的段嘉许 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! Ὄ…...
自动驾驶路径规划概况
文章目录前言介绍1. 路径规划在自动驾驶系统架构中的位置2. 全局路径规划的分类2.1 基础图搜索算法2.1.1 Dijkstra算法2.1.2 双向搜索算法2.1.3 Floyd算法2.2 启发式算法2.2.1 A*算法2.2.2 D*算法2.3 基于概率采样的算法2.3.1 概率路线图(PRM)2.3.2 快速…...
某某银行行面试题目汇总--HashMap为什么要扩容
一、HashMap啥时候扩容,为什么扩容? HashMap的默认大小是16。在实际开发过程中,我们需要去存储的数据量往往是大于存储容器的默认大小的。所以,出现容量默认大小不能满足需求时,就需要扩容。而这个扩容的动作是由集合自…...
求职者:“我有五年测试经验”面试官: “不,你只是把一年的工作经验用了五年”
最近看到很多软件测试由于公司裁员而需要重新求职的。他们普遍具有4年甚至更长的工作经验。但求职结果往往都不太理想。 我在与部分软件测试求职者交谈的过程中发现,很多人的工作思路不清晰,技能不扎实,没有持续学习的习惯,但对于…...
Nacos配置中心
什么是配置中心所谓配置中心:在微服务的环境下,将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具我们可以将部分yml文件的内容保存在配置中心一个微服务项目有很多子模块,这些子模块可能在不同的服务器上,如果有一些统一的修改,我们…...
【故障】6、yum不可用
文章目录[toc]一、yum命令不能使用1)报错2)问题分析3)完全删除python及yum重新安装1、删除python2、删除yum3、下载Python依赖rpm包4、下载yum依赖rpm包5、强制安装python6、强制安装yum7、测试一、yum命令不能使用 1)报错 Ther…...
深度解读 | 数据资产管理面临诸多挑战,做好这5个措施是关键
日前,大数据技术标准推进委员会(中国通信标准化协会下(CCSA)的专业技术委员会,简称TC601)发布《数据资产管理实践白皮书》(6.0 版)(以下简称:报告)…...
双检测人脸防伪识别方法(活体检测+人脸识别+关键点检测+人像分割)
双检测人脸防伪识别=人脸检测+活体检测+人脸识别 1.人脸关键点+语义分割 使用mediapipe进行视频人脸关键点检测和人像分割: import time import cv2 import mediapipe as mp import numpy as npmp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solution…...
2023年3月 - 笔记
内容已复习 采用下划线标识内容已重写 并补充优化 新建文章并添加超链接 背景颜色 绿色 Python 2023年3月1日 Python 把列表转成元组 # 1、Python 把列表转成元组 使用tuple 即可 list_a [1, 2, 3, 4, 5, 6] list_b tuple(list_a) print(list_b)# 2、如果想把 元组转成列…...
浅谈Redisson实现分布式锁对原理
1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java…...
struts1.2升级struts2.5.30问题汇总
严重: 配置应用程序监听器[org.apache.struts2.tiles.StrutsTilesListener]错误java.lang.NoClassDefFoundError: org/apache/tiles/web/startup/AbstractTilesListenerat java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
【1】跨越技术栈鸿沟:字节跳动开源TRAE AI编程IDE的实战体验
2024年初,人工智能编程工具领域发生了一次静默的变革。当字节跳动宣布退出其TRAE项目(一款融合大型语言模型能力的云端AI编程IDE)时,技术社区曾短暂叹息。然而这一退场并非终点——通过开源社区的接力,TRAE在WayToAGI等…...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...
Pandas 可视化集成:数据科学家的高效绘图指南
为什么选择 Pandas 进行数据可视化? 在数据科学和分析领域,可视化是理解数据、发现模式和传达见解的关键步骤。Python 生态系统提供了多种可视化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 内置的可视化功能因其与数据结…...
