自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM面试题

JVM的跨平台性是指在不同操作系统和硬件平台上都能运行相同的Java程序,而无需对程序进行修改(一次编译,到处运行)。实现跨平台的方式主要依赖于它的工作原理。以下是详细步骤:编译源代码:Java源代码文件(.java)被编译器编译成字节码文件(.class文件)。跨平台的字节码:这些字节码文件非常特殊,它们不像其他编译语言的输出那样是特定于某种硬件的机器代码,而是一种中间代码。这使得它们可以在任何运行JVM的平台上执行。JVM的解释和执行:在目标机器上,安装有JVM的环境会解释或编译执行这些字节码。

2024-07-22 11:46:08 1305

原创 JUC并发编程第十章——Java对象内存布局和对象头

1 面试题说下JUC,AQS的大致流程 CAS自旋锁,是获取不到锁就一直自旋吗?CAS和synchronized区别在哪里,为什么CAS好,具体优势在哪里? sychronized底层是如何实现的,实现同步的时候用到了CAS 了吗?具体哪里用到了? 对象头存储那些信息?长度是多少位存储?2 Object object = new Object()谈谈你对这句话的理解?位置所在-------->JVM堆->新生区->伊甸园区 构成布局-------->对象头+实例数据

2024-07-04 13:41:41 1312

原创 JUC并发编程第十四章——线程安全集合类

重点介绍 java.util.concurrent.* 下的线程安全集合类,可以发现它们有规律,里面遍历时如果发生了修改,对于非安全容器来讲,使用机制也就是让遍历立刻失败,抛出ConcurrentModifificationException,不再继续遍历。

2024-06-19 11:27:54 914

原创 JUC并发编程第十三章——读写锁、邮戳锁

无锁——>独占锁——>读写锁——>邮戳锁。

2024-06-15 19:41:21 800

原创 JUC并发编程第十二章——AQS

这些并发编程中常用的类,底层实现基本上都和AQS有关Semaphore可以看到以上类的内部都有一个继承了AQS的抽象类Sync。进一步理解锁和同步器的关系锁,面向锁的使用者:定义了程序员和锁交互的使用层API,隐藏了实现细节,程序员调用即可实现功能同步器,面向锁的实现者:Java并发大神DoungLee,提出了统一规范并简化了锁的实现,将其抽象出来,屏蔽了同步状态管理、同步队列的管理和维护、阻塞线程排队和通知、唤醒机制等,是一切锁和同步组件实现的----公共基础部分。

2024-06-13 17:28:37 1412

原创 JUC并发编程第十一章——Synchronized与锁升级机制

偏向锁:MarkWord存储的是。

2024-06-12 17:48:33 1322

原创 JUC并发编程第九章——ThreadLocal

ThreadLocal中ThreadLocalMap的数据结构和关系ThreadLocal的key是弱引用,这是为什么?ThreadLocal内存泄漏问题你知道吗?ThreadLocal中最后为什么要加remove方法?方法详细信息返回此线程局部变量的当前线程的“初始值”。该方法将被调用的第一次一个线程访问与可变get()方法,除非线程先前调用的set(T)方法,在这种情况下initialValue方法将不被调用的线程。

2024-06-05 23:17:56 1428

原创 JUC并发编程第八章——原子操作类

CountDownLatch 是 Java 中的一个并发工具类,用于协调多个线程之间的同步。其作用是让某一个线程等待多个线程的操作完成之后再执行。它可以使一个或多个线程等待一组事件的发生,而其他的线程则可以触发这组事件。public final int get(int i) //获取 index=i 位置元素的值public final int getAndSet(int i, int newValue)//返回 index=i 位置的当前的值,并将其设置为新值:newValue。

2024-06-01 20:43:26 1169

原创 JUC并发编程第七章——CAS

注意:compareAndSet方法有两个参数,第一个参数是希望当前的atomicInterger是多少 (一般就是我们从主内存中拿取当前atomicInterger时候的值) ,第二个参数是希望修改为多少,如果当前atomicInterger的值是我们希望的值,就会修改为我们希望修改的值,反之不会修改。ps:面试时,需要懂Unsafe类,因为说白了原子类靠的是CAS思想,CAS思想落地实现靠Unsafe类的CPU源语级别的汇编操作,但是工作中不要用Unsafe类,因为用不好容易导致内存混乱。

2024-05-30 20:00:07 1428

原创 JUC并发编程第六章——volatile与JMM

两个屏障,一个加在volatile写之前的StoreStore屏障,防止上面的写操作和当前volatile写重排;内存屏障(也称内存栅栏,屏障指令等)是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作,避免代码重排序。:处理器在读屏障之后的读操作,都在读屏障之后执行 (因为前面的写屏障已经保证全部写完了,主内存中都是最新数据了)。在store2及其后的写操作执行前,保证Store1的写操作已经刷新到主内存。

2024-05-28 18:19:32 1154

原创 JUC并发编程第五章——Java内存模型JMM

CPU的运行并不是直接操作内存而是先把内存里面的数据读到缓存,而内存的读和写操作的时候会造成不一致的问题。JVM规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序再各种平台下都能达到一致性的内存访问效果。,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入以及如何变成对另一个线程可见,关键技术点都是围绕多线程的。● JMM没有那些特征或者它的三大特征是什么?● 你知道什么是Java内存模型JMM吗?

2024-05-24 14:07:11 546

原创 JUC并发编程第四章——LockSupport与线程中断

首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,Thread.stop,Thread.suspend,Thread.resume都已经被废弃了其次,在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制----中断,也即中断标识协商机制中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自行实现。

2024-05-22 10:21:05 1481

原创 JUC并发编程第三章——Java中的锁

2.1悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改synchronized和Lock的实现类都是悲观锁适合写操作多的场景,先加锁可以保证写操作时数据正确,显示的锁定之后再操作同步资源一句话定义:狼性锁乐观锁认为自己在使用数据的时候不会有别的线程修改数据或资源,所以不会添加锁Java中使用无锁编程来实现,只是在更新的时候去判断,之前有没有别的线程更新了这个数据如果这个数据没有被更新,当前线程将自己修改的数据成功写入。

2024-05-15 13:40:55 314

原创 JUC并发编程第二章——CompletableFuture

举例:比如主线程让一个子线程去执行任务,子线程可能比较耗时,启动子线程开始执行任务后,主线程就去做其他事情了,忙完其他事情或者先执行完,过了一会再才去获取子任务的执行结果或变更的任务状态(老师上课时间想喝水,他继续讲课不结束上课这个主线程,让学生去小卖部帮老师买水完成这个耗时和费力的任务)。Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等。

2024-05-09 09:40:20 1071

原创 JUC并发编程第一章——线程基础知识复习

Monitor其实是一种同步机制,它的义务是保证(同一时间)只有一个线程可以访问被保护的数据和代码,JVM中同步是基于进入和退出监视器(Monitor管程对象)来实现的,每个对象实例都会有一个Monitor对象,Monitor对象和Java对象一同创建并销毁,底层由C++语言实现。○并行(parallel):是在不同实体上的多个事件,是在多台处理器上同时处理多个任务,同一时刻,大家都在做事情,你做你的,我做我的,各干各的。○用户线程:是系统的工作线程,它会完成这个程序需要完成的业务操作。

2024-05-08 15:35:51 677

原创 算法刷题记录2

每次都在已经解锁 (当前手上有的钱大于某个项目的花费,该项目就算是被解锁)了的项目中选一个利润最大的项目。要注意的是,每次做完一次项目,手头上的钱就变为:之前的钱+本次项目的利润。因此本题就是从边界上的O开始递归,找与边界O联通的O,并标记为#(代表已遍历),最后图中剩下的O就是:被X包围的O。如果我每次移动都遵守这个规律,每次要移动大盘的时候,就把上面的小盘全部移都,把大盘空出来,这次移动就保证了大盘一定不会叠着小盘,且大盘在小盘下。当前加入的元素,就是比栈顶弹出的元素大且离它最近的元素。

2024-04-16 10:50:12 1186

原创 Java面试八股文

现在的问题就是:出现页面加载过慢,响应时间过长。我怎么确定就是我sql的问题呢?就算是sql的问题,我应该怎么找出执行慢的那条sql语句呢?这个工具,可以直观看到每个接口的执行时间。还可以追踪进接口,详细的看耗时情况,其中也包含了sql的耗时。慢查询的概念:在MySQL中,慢查询是指执行时间超过一定阈值的SQL语句。所设定的时间,那么这条SQL语句就被认为是慢查询。也就是说,如果一条SQL语句的执行时间超过了。简单来说,这个日志记录了执行时间较长的sql。参数设定的,它的默认值是10秒。

2024-03-17 09:37:07 1103 7

原创 算法题目记录

【代码】算法题目记录。

2024-03-09 18:51:27 963 1

原创 数据结构与算法

Comparable和Comparator都是用于比较对象大小的接口,但Comparable是在类内部实现的比较方式,而Comparator是在类外部实现的比较方式。Comparable适合于在类设计阶段就已经考虑到了比较的需求,而Comparator更适合于在运行时根据需要动态地指定比较方式。在实际编程中,我们需要根据具体的情况选择使用哪种方式,以达到最佳的效果。

2024-03-06 16:20:08 667 1

原创 Java处理视频思路

6.视频转码的逻辑大概就是,由于数据库中任务表里已经存储了该视频在Minio中的信息,就可以从Minio中把该视频下载下来。最后,把对应视频任务的处理结果修改为已完成!2.当视频成功上传到分布式文件系统中 (如Minio、oss),将视频信息保存到数据库的任务表中,表中每一条数据都是一个视频转码任务的处理情况 (包括视频转码状态,完成/未完成)5.执行器执行的任务确保都是未进行转码的视频,确保幂等性 (某个视频任务被重复调度后,不会导致某个视频被重复转码),如果该视频任务是未处理的,执行器就处理该任务。

2024-12-25 15:48:57 917 1

原创 树形表查询

针对于数据库中的树形表:例如该表,这里有两种字段,一个自身id,一个父节点id(parentid)。对于此类树形表,我们一般有两种查询方式。

2024-12-16 17:49:19 847

原创 自定义线程池的使用

/自定义一个线程池/*** 构造方法,用于初始化线程池。* @param corePoolSize 核心线程池的大小* @param maximumPoolSize 最大线程池的大小* @param keepAliveTime 非核心线程空闲存活时间* @param unit 存活时间单位* @param queueCapacity 任务队列容量*///防止参数为负数unit,//初始线程池关闭状态为false/*** 配置线程池的线程工厂和拒绝策略。*/

2024-10-29 10:06:49 1095

原创 Java面试题——计网篇2

的概念在这里被解释为:对同一个资源的多次请求应该产生相同的副作用。因此,使用GET请求进行数据的增删改操作是不恰当的,因为GET请求是幂等的,网络不佳时可能会重试,导致重复操作和副作用。而POST请求则适用于这类操作,因为它不是幂等的,可以正确处理重复提交的情况。

2024-10-26 17:01:05 260

原创 Java面试题——微服务篇

提供了两种方式:1,创建类实现IRule接口,可以指定负载均衡策略,这个是全局的,对所有的远程调用都起作用。2,在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略,这个是局部生效,只是对配置的这个服务生效远程调用。

2024-10-26 17:00:40 1251

原创 设计模式——工厂模式

工厂模式分为简单工厂、工厂方法、抽象工厂模式。

2024-10-25 16:55:23 118

原创 设计模式——策略模式

策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可相互替换。这使得算法的变化独立于使用算法的客户端。简而言之,策略模式允许在运行时选择算法,而不是在编译时固定使用某种算法。常见的策略模式,每有一种策略,就会有一个实现类。这样的话可能就会导致实现类过多的情况。这里不详细说常见策略模式的写法了。直接因此枚举类+map实现策略模式。优雅的实现策略模式,可以通过map+枚举类实现。

2024-10-25 16:55:08 314

原创 AQS源码分析

总结一下吧。在并发环境下,加锁和解锁需要以下三个部件的协调:锁状态。我们要知道锁是不是被别的线程占有了,这个就是 state 的作用,它为 0 的时候代表没有线程占有锁,可以去争抢这个锁,用 CAS 将 state 设为 1,如果 CAS 成功,说明抢到了锁,这样其他线程就抢不到了,如果锁重入的话,state进行 +1 就可以,解锁就是减 1,直到 state 又变为 0,代表释放锁,所以 lock() 和 unlock() 必须要配对啊。然后唤醒等待队列中的第一个线程,让其来占有锁。

2024-10-24 11:01:37 1432

原创 RabbitMQ中的交换机类型

另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!不过队列一定要与交换机绑定。消息的发送方在 向 Exchange发送消息时,也必须指定消息的。Exchange不再把消息交给每一个绑定的队列,而是根据消息的。队列与交换机的绑定,不能是任意绑定了,而是要指定一个。

2024-10-24 11:01:08 890

原创 ThreadLocal内存泄漏面试题

可以看到,在有参remove()方法中,会通过threadLocalHashCode计算出Entry对象在Entry数组中的位置,并获取出对应的Entry对象,如果Entry对象不为空,并且Entry对象中的Key等于传入的ThreadLocal对象,则清除对应的Key,并且调用expungeStaleEntry()方法。在实际项目中,如果为每个任务的执行都开启一个线程的话,是非常耗费系统资源的,所以,在实际项目中,我们很少直接使用Thread类来创建线程,而是使用线程池来执行对应的任务。

2024-10-24 11:00:28 1624 1

原创 MySql中的锁

例如,SELECT * FROM t WHERE c1 BETWEEN 1 and 10 FOR UPDATE;会阻止其他事务将 1 到 10 之间的任何值插入到 c1 字段中,即使该列不存在这样的数据;因为这些值都会被锁定。

2024-10-22 16:29:46 1279

原创 Java面试——场景题

1.如何分批处理数据?

2024-10-22 09:34:33 3645

原创 Java动态代理示例代码

【代码】Java动态代理示例代码。

2024-10-22 09:34:16 287

原创 MySQL中的redo log 和 undo log

当我们操作增删改的时候,会有大量的update等语句,如果我们同步刷新,对磁盘IO次数太多了,每执行一条sql可能就要进行一次连接数据库。如果没有,就会把磁盘中的数据(某一个数据页的数据)加载到缓冲池中。现在内存中的数据页被操作完了,但还没同步到磁盘中 (此时这个数据页称为脏页),这个时候服务器宕机了,同步失败了。内存中的数据可能就消失了,数据丢失了。等到脏页刷新完成后,可以认为redo log不需要了,进行定期清理,等下一个事务需要的时候,又往里面填写内容,文件不会删除,而是重复利用。

2024-10-21 10:52:31 1280

原创 ssm框架相关八股

在 Spring Boot 中,通常在中配置。: 在查询之前调用。

2024-10-21 10:52:19 397

原创 设计模式之单例模式

饿汉式、DCL懒汉式。

2024-10-20 22:05:42 672

原创 MySQL相关面试题

SQL注入是一种常见的网络攻击技术,它利用了应用程序代码中的安全漏洞。攻击者通过在Web表单输入、URL参数或其他输入数据中插入恶意SQL代码,尝试欺骗数据库服务器执行未授权的命令。

2024-10-20 21:58:24 742

原创 Java面试——操作系统篇

定义:资源拥有:创建和管理开销:独立性:通信方式:上下文切换:执行流:

2024-10-01 18:14:51 760

原创 MySql中索引失效的情况及原因

这是因为索引如果按照字符串顺序排序,如:aab、aac、aad、baa、bab 都是先按照第一个字母排序,第一个字母相同的情况下按照第二个字母排序。如果使用"%c%" 和 "%c" 去匹配,都成无需的了,因为前面的字母没确定,和最左前缀法则类似。如图:多个键值的B+树,如果要排序的话,要先按照第一个元素的大小排序,在第一个元素相同的情况下,按照第二个元素进行排序,以此类推...3.模糊查询导致索引失效:我们知道 a like "%c%" 和 a like "%c" 都会导致索引失效。

2024-09-25 18:17:58 666

原创 MySql中的事务

活跃事务(活跃事务就是没提交的事务)集合,当前事务id,活跃事务集合中的最小值,活跃事务集合中最大值的下个值。第一是脏读, 当一个事务正在访问数据并且对数据进行了修改,而这种修改 还没有提交到数据库中,这时另外一个事务也访问了这个数据,因为这个数 据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依 据“脏数据”所做的操作可能是不正确的。事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

2024-09-25 17:52:58 1304

原创 算法记录——链表

要注意的就是每次反转完链表p指针指向的就是反转后链表的最后一个元素,同时它的next也是下一组待反转链表的第一个元素,所以每次每组反转完以后,都要把p赋值给g。每组链表反转之前,g的next指向的都是待反转链表的第一个节点,p指向的就是待反转链表的第一个节点。空间复杂度 O(1)O(1)O(1) : 变量 pre 和 cur 使用常数大小额外空间。开始时,快慢指针都在头节点的位置。时间复杂度 O(N)O(N)O(N) : 遍历链表使用线性大小时间。相遇以后,快指针/慢指针到头节点的位置。

2024-09-24 15:45:26 1119

空空如也

空空如也

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

TA关注的人

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