- 博客(66)
- 收藏
- 关注
原创 力扣100- 环形链表
本文介绍了两种检测链表中是否存在环的方法。方法一是通过遍历链表并使用HashSet存储节点,当遇到重复节点时判定有环,时间复杂度O(n),空间复杂度O(n)。方法二是快慢指针法,通过设置不同速度的两个指针遍历链表,若相遇则存在环,时间复杂度O(n)但仅需常数空间,更高效。这两种方法分别从空间和时间角度优化了环检测问题,其中快慢指针法在保持线性时间的同时降低了空间复杂度,成为更优的解决方案。
2025-06-12 22:46:14
348
原创 力扣100题-回文链表
本文介绍了三种判断链表是否为回文的方法: 数组+双指针:将链表转为数组后,使用双指针从两端向中间比较元素。时间复杂度O(n),空间复杂度O(n)。 递归法:利用递归栈保存节点,回溯时与正向指针比较。时间复杂度O(n),空间复杂度O(n)(递归栈空间)。 快慢指针+反转后半部分:通过快慢指针找到中点,反转后半部分链表后比较,最后恢复链表。时间复杂度O(n),空间复杂度O(1)。 第三种方法是最优解,满足空间复杂度O(1)的要求,适合大链表处理。各方法均需遍历链表,但空间使用策略不同。
2025-06-12 00:17:27
388
原创 力扣hot100--反转链表
本文介绍了两种反转单链表的算法:迭代法和递归法。迭代法通过双指针(pre和cur)协作,逐步反转节点方向直至链表末端,时间复杂度O(n),空间复杂度O(1)。递归法则通过递归调用来反转后续节点,再修改指针方向,时间复杂度O(n),但空间复杂度O(n)因需递归栈。两种方法均以链表末端节点作为新头节点返回,图示清晰展示了指针变化过程。迭代法更节省空间,而递归法代码更简洁但栈开销较大。
2025-06-11 21:10:41
506
原创 力扣100题-- 相交链表
本文比较了两种寻找链表相交节点的方法。方法一采用双指针法,通过让两个指针交替遍历两个链表,在O(m+n)时间复杂度内找到交点或确定无交点。方法二使用哈希表存储链表A的所有节点,然后遍历链表B检查是否存在重复节点,时间复杂度同样为O(m+n),但需要额外空间。两种方法都能有效解决问题,双指针法空间效率更优,而哈希表法则思路更直观。代码实现均展示了对边界条件的处理(如输入空链表)和正确返回结果的方式。
2025-06-07 00:12:32
173
原创 力扣100-移动0
本文介绍了两种原地移动数组零元素的方法。方法一采用双指针技术,通过快指针寻找非零元素,慢指针定位放置位置,最后补零。优化版本通过交换元素简化操作。方法二将数组视为栈,记录非零元素位置后统一补零。两种方法均保持非零元素顺序,时间复杂度为O(n),空间复杂度O(1)。代码示例展示了不同实现方式,其中方法二的栈思路最为简洁。
2025-06-06 22:26:48
434
原创 力扣100题之128. 最长连续序列
本文介绍了两种求解最长连续序列长度的方法。哈希法通过将数组存入哈希集合,以O(1)时间判断数字存在性,然后寻找序列起点并扩展序列,时间复杂度O(n)。排序法通过排序数组后遍历判断连续性,时间复杂度受排序影响为O(nlogn)。哈希法效率更高,排序法实现简单但性能较差。两种方法都能有效解决问题,哈希法更适合处理大数据量的情况。
2025-06-05 23:32:02
490
原创 力扣100题---字母异位词分组
本文介绍了两种分组字母异位词的算法。方法一通过字母排序,将排序后相同的字符串归为一组,时间复杂度为O(nklogk),其中n是字符串数量,k是字符串长度。方法二采用字符计数法,统计每个字母出现次数生成键值,时间复杂度优化到O(nk)。两种方法都使用哈希表存储分组,空间复杂度均为O(nk)。方法二虽然较复杂但效率更高,适合大规模数据处理。
2025-05-28 23:26:15
462
原创 关于拦截器的一点疑惑---两个拦截器是怎么执行拦截器中的方法的
在 Java Web 开发里,当存在两个拦截器时,preHandle、afterCompletion 等方法的执行流程有着固定的顺序。下面为你详细介绍执行流程,假设两个拦截器分别是 Interceptor1 和 Interceptor2。完整执行流程。
2025-03-20 22:42:03
353
原创 测试学习打卡---第1天
JDK是Java开发工具包,是整个Java开发的核心,包括了Java运行环境JRE、Java工具(javac.exe,java.exe,jar.exe 等)和Java基础类库。而Java语言(一次编译,处处运行),Java语言比较特殊,Java代码(.java) → 编译字节码(.class ),当然.class字节码也不是可执行的,JRE是Java的运行环境,包含JVM标准实现及Java核心类库。JVM是Java虚拟机,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序。
2025-02-18 00:33:30
399
原创 【无标题】
NET 是一个由微软开发的软件框架,它提供了一套用于开发、运行和部署应用程序的工具和库。C# 是一种面向对象的编程语言,它是专门为.NET平台设计的。工具支持:.NET 框架包括了对C#的集成开发环境(IDE)支持,如Visual Studio,它提供了代码编辑、调试和其他开发工具。目标平台:C# 是.NET平台的主要编程语言之一,它被设计用来充分利用.NET提供的功能。类库:.NET 提供了一个庞大的类库,C# 程序员可以直接使用这些类库来开发应用程序。1.NET 与 C# 的关系。
2025-02-03 14:07:52
354
原创 不知道现在行情怎么样,开发这边。
所以现在准备自学点知识,转回到开发,因为在学校也主要是接触开发比较多的,所以想自学,找机会,如果有哪家HR看得上我的,可以私信我,我可以私发简历看看,我对自己的技术能力,逻辑能力,沟通能力都挺有信心的。我是毕业有段时间打工人了,现在还是不喜欢目前做的工作,目前在做软件测试,每周基本都得加三四天班,都是纯手工测试,没有啥技术上的成长,我准备自学,后续我也会坚持每天打卡技术的学习,欢迎各位前辈和同学一起交流。
2025-01-18 17:39:10
150
原创 面试总结------2024/04/04---项目
在以上配置中,我们定义了一个名为order.exchange的直连交换机,以及一个名为order.queue的队列。luaScript:这个Lua脚本从Redis获取指定商品的库存数量,如果库存充足,则减少库存数量,并返回1表示秒杀成功;在发送订单消息时,我们需要设置消息的TTL为30分钟,以便在30分钟后触发超时取消订单的逻辑。执行Lua脚本:使用RScript执行预先加载的Lua脚本,该脚本会检查商品库存是否充足,并进行库存减少操作。加锁:使用lock.lock()方法加锁,确保秒杀操作的原子性。
2024-04-04 13:00:38
1558
原创 一些题目学习
为了从原始服务器获取到内容,客户端向代理服务器发送一个请求并带上目标服务器(原始服务器),代理服务器在接收到请求后就会将请求转发给原始服务器,并将从原始服务器上获取到的数据返回给客户端,,反向代理服务器接受来自互联网的请求,然后将这些请求发送给内网的服务器,并将从内网的服务器获取结果返回给互联网上的客户端,在监听端口或域名的配置中,设置Nginx作为反向代理,将客户端的请求转发到定义的后端服务器。,所以客户端是不知道反向代理服务器的存在的,服务端是知道反向代理服务器的。缓存,减少服务器的压力。
2024-04-03 23:25:59
743
原创 春招3月面试题的总结--南京,山东,西安,东莞四家公司总结。
反射机制允许程序在运行时动态地获取类的信息(例如字段、方法、构造器等),并且可以在运行时创建新的类实例、调用方法、访问或修改字段值,甚至在运行时修改类的行为。通过反射,程序可以在不知道类结构的情况下操作类和对象,从而实现一些动态的、灵活的功能。在Java中,反射机制主要通过java.lang.reflect包提供支持。
2024-03-30 21:54:00
1003
原创 微服务框架---黑马程序员---Eureka,Ribbon,Nacos的注册中心和配置管理
实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。然后修改application.properties文件,添加数据库配置。分别修改三个文件夹中的application.properties,而后在浏览器访问:http://localhost/nacos即可。Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离。
2024-03-24 21:45:36
575
原创 2024/03/16----面试中遇到的一些面试题
2、cglib是针对类来实现代理的,他的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为采用的是继承,所以不能对final修饰的类进行代理。动态代理:动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件。反射(Reflection)是Java程序在运行时,可以获取任何一个已知名称的类的内部信息,包括其修饰符、构造方法、属性、父类、接口、方法等信息,1、JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理。
2024-03-17 12:29:55
895
原创 单例设计模式,各种排序复习
就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。这样虽然解决了线程安全,但其实实例化操作只做一次,而获取实例(即getInstance)的操作是很多次的,把调用的方法加上同步,会大大降低效率。起到了懒加载效果,但是只能在单线程使用,多线程会不安全,因为当多个线程并发同时判断instance为空时,就会相应的实例化多个对象。静态内部类在外部类装载时不会实例化,当调用的时候才会装载并实例化,且JVM保证了其装载时的线程安全性。
2024-03-16 00:27:12
1006
原创 牛-迈面试题----答案/类似题/知识点
先来看一个常见的缓存使用方式:读请求来了,先查下缓存,缓存有值命中,就直接返回;缓存没命中,就去查数据库,然后把数据库的值更新到缓存,再返回。读取缓存缓存穿透指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。通俗点说,读请求访问时,缓存和数据库都没有某个值,这样就会导致每次对这个值的查询请求都会穿透到数据库,这就是缓存穿透。
2024-03-14 23:45:14
769
原创 java八股文复习----java多线程---2024/03/12
AQS是一个抽象类,可以用来构造锁和同步类,如ReentrantLock,Semaphore,CountDownLatch,CyclicBarrier。AQS的原理是,AQS内部有三个核心组件,一个是state代表加锁状态初始值为0一个是获取到锁的线程还有一个阻塞队列。当有线程想获取锁时,会以CAS的形式将state变为1,CAS成功后便将加锁线程设为自己。当其他线程来竞争锁时会判断state是不是0,不是0再判断加锁线程是不是自己,不是的话就把自己放入阻塞队列。这个阻塞队列是用双向链表实现的。
2024-03-13 15:21:12
722
原创 java八股文复习----java集合,CAS---2024/03/12
V:要更新的变量(var)E:预期值(expected)N:新值(new)比较并交换的过程如下:判断 V 是否等于 E,如果等于,将 V 的值设置为 N;如果不等,说明已经有其它线程更新了 V,于是当前线程放弃更新,什么都不做。这里的预期值 E 本质上指的是“旧值”。我们以一个简单的例子来解释这个过程:如果有一个多个线程共享的变量i原本等于 5,我现在在线程 A 中,想把它设置为新的值 6;我们使用 CAS 来做这个事情;
2024-03-12 16:01:18
986
原创 java八股文复习-----2024/03/05----基础---跨域,过滤器,拦截器的区别
简单来讲,跨域是指从一个域名的网页去请求另一个域名的资源。由于有同源策略的关系,一般是不允许这么直接访问的。但是,很多场景经常会有跨域访问的需求,比如,在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域问题。那什么是同源策略呢?所谓同源是指“协议+域名+端口”三者相同,即便两个不同的域名指向同一个ip地址,也非同源。1. Cookie、LocalStorage 和 IndexDB 无法读取2. DOM 和 Js对象无法获得3. AJAX 请求不能发送为什么要有同源策略?
2024-03-12 11:12:42
1253
原创 苍穹外卖学习-----2024/03/010---修改套餐,套餐状态修改开发
【代码】苍穹外卖学习-----2024/03/010---修改套餐,套餐状态修改开发。
2024-03-11 11:26:24
708
原创 苍穹外卖学习-----2024/03/010---redis,店铺营业状态设置
产生这个问题的原因异常信息里已经说明,就是Redis服务器没有设置密码,但客户端向其发送了AUTH(authentication,身份验证)请求携带着密码,导致报错。既然是没有设置密码导致的报错,那我们就把Redis服务器给设置上密码就好了。一共有2种方式设置密码
2024-03-10 15:11:07
1693
1
原创 苍穹外卖学习-----2024/03/09
本文介绍了在 Spring 应用中如何使用 @RequestParam 注解来接收客户端参数。还介绍了如何处理参数的名称、使用默认参数、定义可选参数、接收多个参数等等。也可以使用 @RequestParam(value = “id”) 或直接使用 @RequestParam(“id”)。在本例中,使用 @RequestParam 来提取 id 查询参数。使用 @RequestParam 注解的方法参数默认为必填参数。如果没有指定参数,方法参数将绑定为 null。
2024-03-09 20:24:02
1001
原创 苍穹外卖学习-----2024/03/08
OssConfiguration的Java配置类,用于Spring框架中。它的主要作用是配置和初始化AliOssUtil这个Bean(即Spring管理的对象),以便在Spring应用程序中自动注入和使用AliOssUtil进行阿里云OSS服务的相关操作。具体来说,该配置类通过以下几个关键点实现了这一功能:
2024-03-08 23:55:25
904
原创 java八股文复习-----2024/03/05----基础---反射,动态代理。序列化
反射是通过获取类的class对象,然后动态的获取到这个类的内部结构,动态的去操作类的属性和方法。应用场景有:要操作权限不够的类属性和方法时、实现自定义注解时、动态加载第三方jar包时、按需加载类,节省编译和初始化时间;获取class对象的方法有:class.forName(类路径),类.class(),对象的getClass()Java泛型是JDK 5中引⼊的⼀个新特性, 允许在定义类和接口的时候使⽤类型参数。声明的类型参数在使⽤时⽤具体的类型来替换。泛型最⼤的好处是可以提⾼代码的复⽤性。
2024-03-05 21:15:46
1272
原创 java八股文复习-----2024/03/03
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象本身,两者指向同一片内存空间。所以对引用对象进行操作会同时改变原对象。java中不存在引用传递,只有值传递。即不存在变量a指向变量b,变量b指向对象的这种情况。
2024-03-03 22:54:24
2644
原创 Redis学习------实战篇----2024/02/29----缓存穿透,雪崩,击穿
【代码】Redis学习------实战篇----2024/02/29----缓存穿透,雪崩,击穿。
2024-03-02 23:21:40
240
原创 Redis学习------实战篇----2024/02/28
当然从Redis获取数据的时候,也会默认将数据当做字节数组转化,这样就会导致一个问题,当需要获取的数据,不是以字节数组存在redis当中,而是正常的可读的字符串的时候,,当你的redis数据库里面本来存的是字符串数据,或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。,使用redisTemplate取值的时候会无法获取导出数据,获得的值为null。如果数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么。
2024-02-28 22:59:23
896
原创 Redis学习---2024/2/20
找不到 ‘RedisTemplate‘ 类型的 Bean。解决方法就是将@Autowired改成@Resource。
2024-02-20 16:02:19
318
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅