自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 118. 杨辉三角(java)

否则的话 dp[row][col]=dp[row-1][col-1]+dp[row-1][col],这个规律可以从图中得出来的,很简单,多看几遍就懂了。用一个二维数组dp[numRows][numRows]保存每一次动态规划的结果。如果col==0的话,那么我们就直接dp[row][col]==1;在「杨辉三角」中,每个数是它左上方和右上方的数的和。生成「杨辉三角」的前 numRows。代码中的i就是row,j就是col。令dp[0][0]=1(第一列)这里row代表行,col代表列。

2024-07-05 11:57:39 149 1

原创 55. 跳跃游戏(java)

比如说:利用用例1来说 刚开始max=0,然后第一个格子可以跳跃的距离为2,那么max就变为了,这个时候我们就遍历从0 到 2中间的格子,因为这是我们都可以跳到的格子,属于范围内的。不断更新迭代,知道发现我们可以走到的最远的地方大于 数组的末尾的时候,返回true。然后当i==1的时候,这个格子的跳跃距离为3,所以这时候我们可以达到的范围就是下标1 再加上3。首先,我们先来一个特殊判断,如果只有一个格子,那肯定可以跳到终点,直接返回true。然后我们设置一个max值,代表的是当前可以走到最远的地方。

2024-07-05 11:31:44 351

原创 121. 买卖股票的最佳时机(java)

首先在for循环找到第一个小于min的值,然后在遍历下一天,如果发现下一天比今天的值要小,说明今天比明天贵,所以我们要把min替换掉,所以就有。但是如果明天比今天贵呢,说明我们可以有一种方案,是今天买然后明天卖,这是有利润的,但是不一定是最大的利润,所以我们要保存在max中。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。同时,你不能在买入前卖出股票。这样我们就可以遍历出当前值跟后面几天中比我们大的值的差值,然后保留其中,选取最大值。

2024-07-05 09:35:11 240

原创 560. 和为 K 的子数组(java)

子数组是数组中元素的连续非空序列。

2024-06-15 15:23:18 105

原创 3. 无重复字符的最长子串(java)

在每一步的操作中,我们会将左指针向右移动一格,表示 我们开始枚举下一个字符作为起始位置,然后我们可以不断地向右移动右指针,但需要保证这两个指针对应的子串中没有重复的字符。在移动结束后,这个子串就对应着 以左指针开始的,不包含重复字符的最长子串。退出while循环后,左指针++,开始下一轮for循环,开始计算从左指针所指字符开始的最大不重复子串,因为左指针++了,所以set集合要remove左指针上一个字符。如果左指针不在0的坐标上,那么我们就要将窗口往前移动一格,那么就需要将上一个字符从set移除出去。

2024-06-15 15:17:27 435

原创 两数之和(java)

首先判断如果map容器中是否存在target-nums[i]的key的值,如果存在,那么说明这个值就可以跟nums【i】相加得到target目标值了,那么自然就可以return了,因为题目说明了这题只会有一个答案。如果不存在的话,那么我们就把当前的i坐标的nums[i]放入map容器中,继续遍历,直到找到答案,或者遍历完成。其实这个题精髓都在最后一句话,时间复杂度小于O(n2),不然大家一般都会想到直接两个for循环暴力就可以出答案了,但是本人没试过,好像听说还是可能会超时的。整数,并返回它们的数组下标。

2024-06-13 17:07:36 236

原创 线程有几种状态,状态之间的流转是怎样的?

java线程中将就绪(READY)和运行中(RUNNING)两种状态笼统的称为“运行”。就绪(READY):线程对象创建后,其他线程(比如main线程)调用了该对象的start0方法。该状态的线程位于可运行线程池中,等待被线程调度选中并分配cpu使用权。运行中(RUNNING):就绪(READY)的线程获得了cpu时间片,开始执行程序代码。:进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。:新创建了一个线程对象,但是还没有调用start()方法。:表示该线程已经执行完毕。

2024-05-29 20:26:57 121

原创 什么是多线程中的上下文切换?

在多线程编程中,上下文切换是一种常见的操作,上下文切换通常是指在一个CPU 上,由于多个线程共享 CPU时间片,当一个线程的时间片用完后,需要切换到另一个线程运行。同时,需要将切换到的线程的状态信息恢复,以便于该线程能够正确运行。在多线程中,上下文切换的开销比直接用单线程大,因为在多线程中,需要保存和恢复更多的上下文信息。上下文切换是指CPU从一个线程转到另一个线程时,需要保存当前线程的上下文状态,恢复另一个线程的上下文状态,以便于下一次恢复执行该线程时能够正确运行。

2024-05-29 20:15:45 197

原创 TCP and UTP

第四次挥手:客户端收到以后,会向服务端发送一个ack应答报文。第三次握手:但是这个时候,服务器还不知道客户端的接受功能是否正常,所以需要客户端返回一个ack请求给服务器,用来告知服务器,让服务器知道客户端的接受功能正常。第二次握手:服务器发送收到客户端发送的包,返回一个ack给客户端,客户端接受到之后,确定了客户端的接受功能正常以及服务器的发送功能正常。第一次握手:客户端向服务器发送syn请求,服务器收到了客户端发送的包,然后确定了客户端的发送功能正常以及服务器的接受功能正常。TCP跟UDP的区别。

2024-04-18 11:20:05 217 1

原创 Synchronized和volatile、Lock有什么区别

1.volatile关键字是线程同步到轻量级实现,所以volatile性能比synchronized要好,但是volatile只能修饰变量,synchronized可以修饰方法以及代码块。第三性能层面:没有竞争时,synchronized做了很多优化,偏向锁、轻量锁性能不赖,竞争激烈时,Lock会有更好的性能。第二功能层面:都是悲观锁,但是Lock提供了许多synchronized不具备的功能,中断,超时,公平锁。Synchronized和Volatile的区别。其实二者是互补的,不是对立的存在!

2024-04-18 09:53:32 228 1

原创 HashMap和ConcurrentHashMap底层原理

在JDK 1.7中,ConcurrentHashMap使用了分段锁技术,即将哈希表分成多个段,每个段拥有一个独立的锁这样可以在多个线程同时访问哈希表时,只需要锁住需要操作的那个段,而不是整个哈希表,从而提高了并发性能。判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。相比于之前的版本,JDK1.8 以后在解决哈希冲突时有了较大的变化。时,必须首先获得对应的。

2024-04-08 17:33:05 626

原创 Spring,SpringMVC 常见面试题

目录1.介绍一下Spring的IOC2.介绍一下Spring的AOP3.Spring中事务失效的场景有哪些4.Spring的bean的生命周期5.Spring中的循环引用6.什么是MVC7.SpringMVC的执行流程所谓的IOC,就是控制反转的意思。在传统的程序设计中,应用程序代码通常控制着对象的创建和管理。例如,一个对象需要依赖另一个对象,那么它会直接new出来对象。这样的设计通常被称为“控制流程”。而在IOC中,控制关系发生了反转。控制权被转移到了Spring容器中,容器负责创建和管理对象,并在需要的

2024-04-08 09:02:08 649

原创 JVM由那些部分组成,运行流程是什么?

将字节码翻译为底层系统指令 一次编写,到处运行。由哪些部分组成,运行流程是什么?(运行时数据区,内存分区)二进制字节码的运行环境)

2024-04-04 21:11:22 215 1

原创 RocketMQ笔记详情

4.回滚事务消息:如果本地事务执行失败,应用程序通知RocketMQ Broker回滚该事务消息,RocketMO将该消息的状态从“prepared”改为“rollback”,并将该消息从事务消息日志中删除,从而保证该消息不会被消费者消费。Producer发送的消息会被存储到对应的Queue中,Consumer从指定的Queue中消费信息。3.提交事务消息:RocketMQ收到提交消息以后,会将该消息的状态从“prepared”改为“committed”,并使该消息可以被消费者消费。

2024-04-04 21:00:32 412 1

原创 Java中String的典型面试问题

String是不可变的,StringBulider和StringBuffer是可变的。而StringBuffer是线程安全的,而StringBuilder是非线程安全的。首先,不管是什么情况,一次new的过程,我们都会在堆上创建一个对象,那么就是起码有一个对象。所以,a==b的结果为true,因为它们指向的是。在java中,对于字符串使用==比较的字符串对象的。的时候,进行解析并在字符串池中创建对应的String实例。因为a和b都是由字面量组成的字符串,它们的。的,然后在运行期间,字符串常量。

2024-04-02 01:35:59 305 1

原创 Spring Bean的生命周期是怎么样的?

提供一种配置方式,在XML配置中指定Bean的初始化方法。如果Bean在配置文件中定义了初始化方法那么该方法会被调用。

2024-04-01 22:04:57 321

原创 MVCC详解

mvcc的意思是多版本控制并发。指维护一个数据的多个版本,使得读写操作没有冲突,它的底层实现主要是分为三个部分,第一个是隐藏字段,第二个是undo log 日志,第三个是readView读视图。

2024-03-27 00:51:55 149

原创 synchronized关键字的底层原理

synchronized底层使用的JVM级别中的Monitor来决定当前线程是否获取了锁,如果某一个线程获取到锁,在没有释放锁之前,其他线程是不能或得到锁的。关于Monitor,Monitor对象存在于每个java对象头中,synchronized锁便是通过这种方式获取锁的,这也是为什么java中任意对象都可以作为锁的原因。如果没有线程持有,则让当前线程持有,表示该线程获取锁成功。:存储当前获取锁的线程的,只能有一个线程可以获取。获得锁的线程执行完了,释放了锁,就会唤醒。锁,竞争的时候是非公平的。

2024-03-22 09:53:45 507 1

原创 Redis的数据过期策略还有数据淘汰策略有哪些?

Redis的数据过期策略有哪些?在redis中提供了两种数据过期删除策略惰性删除所谓惰性删除,就是表面意思,对于删除这个事情,我表示很懒,并不会及时的去做。一般惰性删除指的是,在设置该key的过期时间后,我们不去管它,当需要用到该key是,我们在检查其是否过期,如果过期,我们就删除这个key,反之返回该key。定期删除所谓定期删除,就是每个一段时间,我们就会对一些key进行检查,删除里面过期的key。定期清理的两种模式:SLOW模式是定时任务,执行频率默认为10hz。

2024-03-21 01:08:34 269 1

原创 Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(通俗易懂)

什么是缓存穿透?缓存穿透是指查一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这个将导致这个不存在的数据每次请求都会打到DB(数据库)上,如果请求量很大的话,可能会导致DB挂掉,一般情况是遭到一些恶意攻击。缓存穿透解决方案缓存穿透有一个比较流行的解决方案,就是大家熟悉的布隆过滤器。

2024-03-20 00:44:39 310 1

原创 java策略模式+工厂案例(避免大量if-else)

策略模式和工厂模式是常见的设计模式,它们通常结合在一起使用可以带来许多好处,包括但不限于以下几点:此外,枚举类型中还定义了一个静态方法,用于根据消息类型获取相应的枚举常量。通过遍历枚举值,匹配传入的消息类型,如果找到对应的枚举常量,则返回该常量;如果遍历结束仍未找到匹配项,则返回 null。每个枚举常量都包含了消息类型和描述信息,并在构造函数中进行初始化。

2024-03-19 18:29:29 758

原创 Github加速器fastGithub,解决Github进不去的问题

fastGitHub是一个可以帮助解决无法连接到GitHub的问题的工具。它支持Windows,Linux和Mac操作系统,并且提供方便快捷的使用方法。对于Windos系统来说,只需要双击运行fastGithub.UI.exe文件即可。但是注意,fastGitHub本质是属于一个加速器,但是它却不可以加速其他软件以及游戏!!!

2023-10-20 12:33:53 1276 2

原创 get请求跟post请求有什么区别

param1=value1¶m2=value2`,而POST请求将参数放在请求的主体中进行传递,不会明确显示在URL中。5. 幂等性:GET请求是幂等的,即多次发送同样的GET请求对服务器的状态没有副作用,不会修改、写入数据。而POST请求一般不是幂等的,多次发送同样的POST请求可能会导致服务器中的数据重复写入。3. 参数大小限制:GET请求对URL的长度有限制,不同浏览器和服务器的限制有所不同,常见的限制是2048个字符。而POST请求的参数在请求的主体中进行传输,相对较安全,适合传递敏感信息。

2023-08-08 00:30:32 35

原创 vscode中常用插件

它会自动打开浏览器访问本地的某个端口,加载这个页面,是不是很方便呀。它会帮我们快速import所选择的模块,从而提高我们的开发效率。这个插件可以快速启动一个本地服务器,还支持热重载。实用型插件,vscode的中文(简体)语言包。

2023-08-06 13:55:23 205

原创 【Vscode设置中文最简便方法】

第一步打开vscode,随后在左边菜单栏里打开扩展,随后搜索中文插件,安装之后应用一下随后重启便可以换成中文版的了。

2023-08-06 13:45:29 109

空空如也

空空如也

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

TA关注的人

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