自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 java并发之重排序问题

在执行程序时为了提高性能,编译器和处理器常常会对指令做重排序。重排序分3种类型。1编译器优。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。2级。现代处理器采用了指令级并行技术ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。3统。由于处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。

2024-07-19 11:57:55 397

原创 Java并发之线程通讯

Exception Handler Parameters)不会在。程都有一个私有的本地内存(Local Memory。通信的工作机制,很可能会遇到各种奇怪的内存可见。同步是指程序中用于控制不同线。2.Java并发采用的通信方式。首先会把自己本地内存中修改后的。在消息的接收之前,因此同步是。冲区、寄存器以及其他的硬件和。存放在自己的本地内存A中。,也不受内存模型的影响。的一个抽象概念,并不真实。式指定某个方法或某段代。

2024-07-18 00:38:31 440

原创 HotSpot的算法细节实现

我们以可达性分析算法中从GC Roots集合找引用链这个操作作为介绍虚拟机高效实现的第一个例子。固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,尽管目标明确,但查找过程要做到高效并非一件容易的事情,现在Java应 用越做越庞大,光是方法区的大小就常有数百上千兆,里面的类、常量等更是恒河沙数,若要逐个检查以这里为起源的引用肯定得消耗不少时间。1.2 根节点枚举产生的问题。

2024-07-17 14:25:20 585

原创 原子操作的实现原理

1.原子操作下使用的方法原子(atomic)本意是不能被进一步分割的最小粒子”,而原子操作()意为不可被中断的一个或一系列操作。1.原子操作下使用的方法。

2024-07-17 11:36:29 696

原创 锁升级过程中的两次自旋 面试重点

自旋(Spinning)是一种在多线程环境下等待锁的技术。当一个线程尝试获取某个已被其他线程持有的锁时,该线程不会立即进入阻塞状态,而是会在一个循环中持续检查锁的状态,即“自旋”。如果在这个过程中锁被释放了,那么该线程就可以立即获取锁,从而避免了线程阻塞和上下文切换的开销。

2024-07-17 10:56:59 304

原创 synchronized的实现原理和锁升级 面试重点

未被锁定的对象的该计数器为0,当一个线程获得锁(执行 monitorenter)后,该计数器自增变为 1,当同一个线程再次获得该对象的锁的时候,计数器再次自增。锁将被释放,其他线程便可以获得锁。无论是给静态方法或者非静态方法,加上synchronized标识,都是锁的对象,synchronized的普通方法,其实锁的是具体调用这个方法的实例对象,而synchronized的静态方法,其实锁的是这个方法锁属于的类对象。如果一个线程已经获得锁,在锁未释放之前,再次请求锁的时候,是必然可以获得锁的。

2024-07-17 10:29:00 856

原创 volatile的应用

volatile修饰的共享变量,其他线程进行读操作时,总能读到最新的数据。volatile修饰的共享变量,其他线程进行写操作时,直接写在主内存中,并不是缓存。volatile保证数据的可见性和顺序性。

2024-07-17 01:27:52 834

原创 java并发和多线程之并发面临的性能问题

CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。1.2 问题多线程不一定快因为线程有创建和上下文切换的开销,上下文切换的开销比直接用单线程大,因为在多线程中,需要保存和恢复更多的上下文信息。

2024-07-16 17:58:51 981

原创 redis 集群模式

Redis ⽀持三种集群模式,分别为Cluster。最初,Redis采⽤主从模式构建集群。在这种模式下,如果主节点(master)出现故障,需要⼿动将从节点(slave)转换为主节点。然⽽,这种模式在故障恢复⽅⾯效率不⾼。为了提⾼系统的可⽤性,Redis引⼊了哨兵模式。在哨兵模式中,⼀个哨兵集群负责监控主节点和从节点。如果检测到主节点故障,系统可以⾃动将从节点晋升为新的主节点。这提⾼了故障恢复的⾃动化程度。

2024-07-14 17:21:56 858

原创 贪心算法案例

的区间 (li​,ri​] 使得如下的等式最大化,res = (prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0]) = prices[3] - prices[0]。假如元素把比他小,赋值给该变量,否则让该元素减去minPrice当前最小元素,如果比已知的最大利润大,那就赋值给最大利润。解法:遍历数组每一个元素,设置一个变量为minPrice为整数类型最大数,让每个元素跟他比较,如果你不能获取任何利润,返回。

2024-07-14 11:30:37 455

原创 html02-标签继续学习

帮助中心账户管理购物指南订单操作

2024-07-14 09:18:00 752

原创 JVM 垃圾回收算法

举个例子,如果某个新生代对象存在跨代引用,由于老年代对象难以消亡,该引用会使得新生代对象在收集时同样得以存活,进而在年龄增长之后晋升到老年代中,这时跨代引用也随即被消除了。缺点:尤其是在老年代这种每次回收都有大量对象存活区域,移动存活对象并更新所有引用这些对象的地方将会是一种极为负重的操作,而且这种对象移动操作必须全程暂停用户应用程序才能进行。两个阶段:首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。

2024-07-14 01:05:08 558

原创 JVM GC垃圾回收机制之对象存活判断

在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。在方法区中类静态属性引用的对象,譬如Java类的引用类型静态变量。在方法区中常量引用的对象,譬如字符串常量池()里的引用。在本地方法栈中JNI(即通常所说的Native方法)引用的对象。Java虚拟机内部的引用,如基本数据类型对应的Class对象,一些常驻的异常对象(比如NullPointExcepiton、)等,还有系统类加载器。所有被同步锁(关键字)持有的对象。

2024-07-13 23:12:10 724

原创 JVM OutOfMemoryError异常模拟

Java堆用于储存对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么随着对象数量的增加,总容量触及最大堆的容量限制后就会 产生内存溢出异常。限制Java堆的大小为20MB,不可扩展(将堆的最小值-Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展),通过参数-XX可以让虚拟机 在出现内存溢出异常的时候Dump出当前的内存堆转储快照以便进行事后分析。

2024-07-13 18:03:20 388

原创 JVM 之对象的结构与创建

(1)假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”(Bump The Pointer)就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分 配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录,这种分配方式称 为“如果没有,那 必须先执行相应的类加载过。

2024-07-13 00:49:14 949

原创 JVM运行时数据区

程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的 字节码的行号指示器。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined)。

2024-07-13 00:16:32 1258

原创 双指针算法

给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。pos。仅仅是为了标识链表的实际情况。如果链表中存在环,则返回true。否则,返回false。解法:创建两个指针,一个快指针一个慢指针,一个走一步一个走两步,成环的链表肯定会相遇。

2024-07-12 10:03:49 615

原创 redis的持久化

产⽣⼀个⼦进程,快照持久化完全交给⼦进程来处理,⽗进程继续处理客户端请求。Redis是⼀个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢失。⽂件重写了,但是毕竟是操作过程和操作结果仍然有很⼤的差别,体积也毋庸置疑的更⼤。),他们会共同获取相同的指针指向相同的资源,直到某个调⽤者试图修改资源的。是数据的快照,基本上就是数据的复制,不⽤重新读取再写⼊内存。候对磁盘的消耗也是不可忽视的,尤其在访问量很⾼的时候,主线程。重写,此过程不会影响主进程,重写完成后,新的写⼊将会写到新的。

2024-07-11 11:27:52 757 1

原创 redis 介绍和数据结构及如何实现

Redis(Remote Dictionary Server)是一个开源的、基于内存的、可选持久化的日志型Key-Value数据库编写,支持网络操作,并提供多种语言的API。Redis支持多种数据结构,包括字符串(string)、列表(list)、集合(set)、有序集合(zset)和哈希(hash),并且这些数据类型都支持丰富的操作,如push/pop、add/remove以及取交集、并集和差集等,这些操作都是原子性的。

2024-07-11 10:36:47 915 1

原创 缓存击穿、缓存穿透、缓存雪崩以及应对措施

是指当某一key的缓存时间过期时大量并发量的请求同时访问此key,瞬间击穿服务器的直接访问数据库,让数据库处于负载的情况。

2024-07-10 19:19:24 248

原创 Spring AOP的几种实现方式

1.1导入依赖1.2定义注解1.2定义切面类。

2024-07-10 10:56:32 447

原创 aop的几种动态代理以及简单案例(1)

Sping AOP是通过动态代理模式实现的,具体有两种实现方式,一种是基于Java原生的动态代理,一种是基于cglib的动态代理。1.3使用springProxy创建代理对象代理该类,在每次调用方法前后写入要进行的逻辑。2.2创建代理方enhancer代理该类。1.4 使用该代理方法代理实现类。1.1创建需要被代理的方法接口。2.1创建需要被代理的对象。2.3生成代理对象使用方法。1.2实现编写方法逻辑。2.cglib动态代理。

2024-07-10 10:32:22 228

原创 重写equal之后为什么要重写hashcode

一:什么是equal和hashcode在Java钟equals()和hashcode()方法通常是成对的,它们在使用都是基于hash机制的数据结构非常重要,类如hashmap、hashSet和hashtable等。hashCode()hashCode()二、原因。

2024-07-10 10:05:16 244

原创 java类的加载顺序及复杂案例(阿里)

在Java中,类的初始化顺序涉及到多个方面,包括静态变量、静态初始化块、实例变量、实例初始化块(也称为构造器初始化块或初始化块)以及构造器的执行顺序。

2024-07-09 11:50:13 1074

原创 仿写SpringMVC

【代码】仿写SpringMVC。

2024-07-09 11:23:50 252

原创 仿写SpringIoc

2.创建一个controller和一个UserService对象,为后面案例展示提供方便。1.SpringIoc简单注解。4.使用test测试。

2024-07-09 11:04:15 254

原创 128陷阱详解

代码:2.原因原因在于Integer装箱方法中。当Integer类被加载时,会生成一个长度为256的数组,存放的时-128到127的Integer对象,当对整数包装时,先判断整数是否在-128到127范围内,如果在返回数组中的integer对象,不在new 一个integer对象返回。

2024-07-08 17:59:05 141

原创 tomcat启动多个项目

我有三个项目,有个hamfile忘记截图了,是个图片服务器,其中core是console和portal共有的模块是mapper。2.编写server.xml文件 主要看这个服务配置的编写和注释助于理解。1.把项目打包后放入tomcat/webapps里面。启动tomcat即可。

2024-06-21 16:13:12 110

原创 Java之UDP,TCP的详细解析

第一个用户正在上传数据,第二个用户就来访问了,此时第二个用户是无法成功上传的。请求,接收完一个图片之后,服务器就关闭了。每来一个用户,就开启多线程处理。

2024-06-19 21:52:35 260

原创 并发编程之一些多线程习题的详细解析

1.买票练习测试下面代码线程安全问题,并尝试改正将sell方法声明为synchronized即可注意只将对count进行修改的一行代码用synchronized括起来也不行。对count大小的判断也必须是为的一部分,否则也会导致count值异常。另外,用下面的代码行不行,为什么?不行,因为sellCount会被多个线程共享,必须使用线程安全的实现类。测试脚本说明:两段没有前后因果关系的临界区代码,只需要保证各自的原子性即可,不需要括起来。

2024-06-19 21:49:37 1026

原创 mysql导入sql文件失败及解决措施

使用vscode打开sql文件ctrl+h,批量替换,替换到你所安装mysql支持的编码集。原因:mysql的模式是需要输入默认值的模式,5.6及以后的数据库可以改数据库模式。表格创建失败,编码问题mysql8相较于mysql5出现了新的编码集。2.timestmp没有设置默认值。

2024-06-14 21:48:23 344

原创 表格状态码转换,其他索引串转成名字

2.修改在前端处理,图一这张表数据传到后端,相关联表也传到后端,图一这种数字字符串用spilt方法相切形成数组,循环匹配index在数组里面的数据。关联指标为数字串的形式,每个小数对应的是另一张表index的属性,我们想知道对应指标的名称,怎么在这里下面这种形式呢?1.修改在后端处理,把后端关联指标部分修改成图二的字符串。

2024-06-09 22:37:48 373

原创 Nacos注册中心和配置中心

例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。一个项目中服务数量增加后,配置文件相应增加,多个配置文件中会存在相同的配置,那么我们可以将相同的配置独立出来,作为该项目中各个服务的共享配置文件,每个服务都可以通过Nacos进行共享配置的读取。

2024-06-09 22:12:01 979

原创 docker run部署项目

(3)对于redis和mysql地址ip可以为localhost,因为redis和mysql和项目在同一台服务器,端口一定要正确,填写正确密码。1.docker run部署项目需要配置的环境有 jdk8、nginx、mysql、redis。(1)由于这个项目是需要下载和上传文件的,所以要在linux服务器上创建文件目录。(2)在配置文件上修改文件路径urlprefix为项目后端地址。(1)在共享conf和html文件夹下放入配置文件和静态资源。(2)拉去nginx镜像并且配置配置容器。

2024-05-11 20:10:12 214 1

原创 项目部署环境工具docker(二)

统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,隐藏多层的存在,我们看来只是存在一个文件系统。rootfs: root文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件。Base镜像(scratch) docker hub中的镜像都是通过base镜像中安装和配置需要的软件构建的。镜像只读 当从一个镜像启动容器时, 所以docker会在镜像上面加载一个可读可写的文件系统作为容器运行。

2024-05-03 23:32:09 631 2

原创 项目部署环境工具docker(一)

2. Docker的主要目标是‘build ,ship and run any app,anywhere’,也就是说通过对应用程序组件的封装,分发,部署,运行等生命周期的管理。2.本地需要安装这些环境Tomcat、JDK环境、Nginx、Redis环境等,在打war包给运维部署在linux服务器,运维人员也需要在linux服务器上安装Tomcat、JDK环境、Nginx、Redis环境。例如,JDK、Tomcat、应用都被打包在了一起,运行在Docker容器里,容器和容器间是隔离的。

2024-05-03 21:53:06 1085 3

原创 文件上传之阿里云oss

一、使用阿里云oss存储文件1.什么是阿里云oss?OSS 为 Object Storage Service,即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。OSS 具有与平台无关的 RESTful API 接口,可以在任意应用、任意时间、任意地点 存储与访问 任何类型的数据。简单地理解:OSS 基于网络提供数据存储服务,通过网络可以随时存储、获取 文本、图片、音频、视频等 非结构化数据。

2024-05-03 11:45:41 680 1

原创 项目-使用邮箱发送内容

要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱smtp.qq.com。SMTP协议:通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。POP3协议:通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

2024-04-30 23:03:10 318 1

原创 springboot中的微信登录

1.首先登录界面点击登录获取一个登录编号code(每次点击不一样),然后发送到后端,再由后端发送appid+app密钥和code调用微信的接口服务(通过HttpClient发送请求)。1.定义一个properties类,springbootDI注入。3.使用jwt工具类生成token,返回token,用户id和openid;2.获取唯一微信登录标识openid,查询数据库有没有该用户,没有则添加。2.在yml或者properties文件中注入相关数据。

2024-04-29 00:19:12 381 2

原创 项目-swagger配置与使用

因为swagger配置bean对象初始化时,会生成静态资源,放在我们项目中的classpath:/META-INF/目录下,但是在idea目录里面看不见。4.访问文档http://localhost:(项目端口)/doc.html。在配置类中写入配置对象:(我把项目分为了两部分所以要写两个配置对象)2.把swagger配置对象交给springboot管理。重写的资源拦截器,拦截到请求并且告诉他资源地址。3.拦截swagger对象初始化生成的静态资源。

2024-04-28 17:07:58 168

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除