自定义博客皮肤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)
  • 收藏
  • 关注

原创 leetcode - 分治思想

这里快排我们统一使用 数组分三块 和 随机产生基准值的方法实现排序。

2024-09-16 19:12:40 699 1

原创 Spring框架简单总结

2024-09-12 13:58:07 144

原创 前缀和方法思想和常见套路

比如有这样一个题目: 给你一个数组 num,长度为len , 输入n个区间 , 求出区间内数据的和.暴力解法: 每次遍历数组 , 求出区间内的和 , 时间复杂度为:O(n * len)使用前缀和解决:. 维护出前缀和数组后 , 求某一区间的和直接可以计算出来: 比如区间[1 , 3]的和: model[3] - model[0]. 时间复杂度为O(len)实际上 , 这种前缀和的思想就是一个dp动态规划的过程。

2024-09-11 20:44:19 956

原创 堆,栈,队列题目总结

栈相关题目一般是模拟过程,本身结构不复杂,难点在于你要想的到用栈。-删除字符串中所有的相邻重复项:利用栈做一下模拟即可。同理。直接用栈模拟解决;或者用指针在字符串上模拟栈解决出栈序列问题,很好联想到到用栈解决。经典括号匹配问题*****自己模拟出一个计算器思路:维护一个表示当前运算符(加减乘除),初始值是+。遍历字符串,遇到数字进行判断:cur是 + 直接将数字入栈;cur 是 - 将数字相反数入栈;cur 是乘法将栈顶元素出栈然后相乘结果入栈;cur是除法将栈顶元素出栈相除结果入栈。

2024-09-03 17:45:12 1128

原创 滑动窗口解决子串问题

找长度最小的子数组,子数组和必须大于条件中的target:左右指针列举出每一种子数组的可能,每种可能去求子数组的和,找到最小的子数组。时间复杂度:On3 左右指针枚举出所有的子数组需要On2的复杂度,再去求每个子数组组的和,总计为On3的复杂度。:利用单调性:左指针在最外层循环从左到右进行遍历,右指针每次从左指针开始求和计算找到第一次满足target的子数组,这个数组就是当前左指针下最短数组(单调性)。左指针遍历完数组就能拿到长度最小的子串。

2024-08-25 00:18:38 454

原创 工厂模式 + 策略模式 实现:在运行时根据具体条件动态选择不同的策略

首先@Resource将所有的hanler注入到工厂的list当中,然后通过InitializingBean接口进行初始化(bean生命周期:先进行依赖注入然后进行初始化),遍历list,将<接口枚举 , 接口handler>放在一个map当中。工厂对外提供getHandler方法,通过参数题目类型对应的code拿到对应的枚举,再拿到对应handler。比如在线刷题场景,有单选,多选,简答,判断等题目类型。这些类型通过参数type进行区分。后端需要根据前端传来的参数来判断是哪种题型进而选择不同的处理方法。

2024-08-01 00:24:41 286

原创 leetcode-二分查找算法总结

对于右端点来说,它的二段性进行了改变:第一段:包含target的区间;(0,left]第二段:不包含target的区间。所以left和right的行为相比较与左端点的求法就需要进行改变:这里left和right的移动规则进行了改变,则mid的确定方法就得进行改变。其它注意事项和原理与求左端点基本相同.实例:模板:在遇到二分查找的问题时,我们首先根据题意确定左右指针的行为,行为确定后如果是 不朴素二分查找我们就直接通过上述模板确定循环结束条件,mid的表达式等。

2024-07-25 01:40:26 796

原创 leetcode--链表类题目总结

本文作为刷题时对链表类题目的总结.

2024-07-21 02:23:16 393

原创 代理设计模式和装饰器设计模式的区别

本质区别:装饰器增加核心功能,和被装饰对象做的是同一件事,为同一个目标服务.代理增加额外功能,和被代理对象做的是不同的事情. 另外注意远程代理和无中生有的使用场景.

2024-07-01 11:29:06 413

原创 MyBatis源码--04:MyBatis缓存实现

Cache//使用Cache注解表明执行前先去缓存@Override//这里为了方便就不去调用数据库了System.out.println("执行login方法");自定义一个注解表明这个sql是否去查缓存/*** @Description 注解。加上注解的方法需要使用Cache,否则不进行使用* @Param* @return**/@Test@Overrideif(cache!= null) {System.out.println("连接Redis查看是否存在缓存");

2024-06-16 11:49:06 996

原创 MyBatis二级缓存开启条件

MyBatis缓存为俩层体系。分为一级缓存和二级缓存。

2024-06-08 13:16:02 322

原创 MyBatis核心对象

我们在创建SqlSessionFactory时通过xml文件解析技术将Mybatis配置文件映射成Configuration对象,将Mapper.xml文件映射成MappedStatement配置文件同时封装进Configuration对象。同时Configuration对象创建StatementHandler等底层操作工具类。

2024-06-03 11:14:45 497

原创 MyBatis源码分析--02:SqlSession建立过程

</user><user>

2024-06-01 10:10:10 831

原创 MyBatis源码分析01 ---- 通过代理确定Mapper接口实现类过程

Test//动态代理//通过Mapper接口调用对应方法@Override//调用SqlSession数据库操作。

2024-05-31 09:31:34 400

原创 SpringMVC接收请求参数的方式:

直接使用简单变量作为形参进行接收(这里简单变量名称需要与接收的参数名称保持一致,否则需要加上@RequestParam注解):细节:1:SpringMVC会针对常见类型(八种基本类型及其包装器,String)进行自动类型转换2:尽量使用包装类型进行参数的接受,避免接收不到参数时报错。

2024-05-21 17:59:07 638

原创 项目测试报告

使用SpringBootSpringMVCMyBatisMySQLRedis等技术实现了一个前后端分离,具有注册,登录,查看,修改,发表文章等基本功能的知识共享平台。:用户通过邮箱,密码,昵称实现注册功能。注册完成后跳转到登陆页面。:用户通过邮箱,密码,验证码进行登录。登陆后跳转到文章列表页。:分页展示系统所有用户的文章。展示文章作者信息和文章具体内容展示登录用户发表的所有文章编辑文章(发布或者修改文章)

2024-05-21 09:35:32 423

原创 对博客系统基本功能进行自动化测试(Junit + Selenium)

TestItem包含对各个页面基本功能的自动化测试用例。InitAndQuit进行测试初始化和收尾工作。

2024-05-13 16:49:34 1120

原创 LoadRunner录制脚本时为空解决方法

解决方法:Recording Options中勾选Use the LoadRunner Proxy to record a local application选项。LoadRunner版本:HP_LoadRunner_12.02_Community_Edition_T7177-15059。浏览器:Microsoft Edge(124.0.2478.80)解决过程中发现有的帖子的解决方法是把这个选项取消勾选,就很懵。问题:可以打开网页,但是事件一直为1,最后生成为空。

2024-05-07 11:28:29 1646

原创 Redis持久化方式

rdb使用生成快照的方式进行持久化:生成一个快照文件保存当前时刻redis的数据。具体有俩种触发方式:手动触发 和 自动触发.手动触发有俩种方式:save和bgsave。save:阻塞当前线程向快照文件中写入数据(默认叫做dump.rdb,路径在配置文件中设置)。bgsave:使用执行folk操作(Linux提供的一个创建子进程的api)创建出一个子线程,子进程相当于父进程的一个副本,子线程会生成一个新的快照文件,完成后替换原本的快照文件并通知父进程。

2024-01-13 14:36:47 1041

原创 HashMap将值映射到哈希数组上的过程

因为哈希数组的长度远远达不到2^16.后续通过hash计算在hash数组的位置时用不到高16位。面试遇到一个问题:hashmap将值映射到hash数组上的具体过程,答得不好,所以在此重新梳理一遍。的哈希函数将原始哈希码的高位信息与低位信息结合在一起,产生了更加均匀分布的新哈希值。p即为所要插入到的hash数组的位置的索引,通过(n-1)& hash计算得出。的内部数组中更均匀地分布数据,从而减少了哈希冲突,提高了数据结构的整体性能。hashmap规定数组的长度必须为2的倍数,当长度为2的倍数时,

2024-01-08 12:34:11 440

原创 spring三种注入方式的优缺点分析

登录 - Gitee.com

2023-11-22 21:22:10 173

原创 Redis初识

官方解释:The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and messagebroker.:开源的内存数据存储被数百万开发人员用作数据库、缓存、流引擎和消息代理。

2023-11-20 12:09:33 82

原创 初识分布式系统

但是如果用户量和数据量非常高的时候(高并发和大量数据存储),一台主机的资源终究是有限的(cpu性能,网络,硬盘,内存等),这时就要引入分布式系统了(多台主机)。:主服务器负责执行写的操作(一般是一个),从服务器负责读的操作(多个),设置更多的从服务器,这样可以最大效率的缓解存储服务器的访问压力。现代计算机的性能已经非常高了,所以在用户量和数据量不是非常非常高的时候,在一台主机上部署应用服务和数据库服务程序就可以满足我们的需求。在上述的单机架构的基础上,我们将应用服务和数据库服务分别部署在不同主机上,

2023-11-19 16:40:54 89

原创 CGlib动态代理和jdk动态代理相关(底层实现,区别,AOP实现过程)

AOP (Aspect Oriented Programing) ⾯向切⾯编程。是以切⾯为基本单位的程序开发,通过切⾯间的彼此协同,相互调⽤,完成程序的构建。(本质即spring动态代理开发,通过代理类为原始类增加功能)(切⾯ = 切⼊点 + 额外功能)。

2023-11-06 19:31:19 119

原创 jvm(内存划分,双亲委派模型,垃圾回收机制)

保存程序中创建的所有对象。关系Java 虚拟机栈的生命周期和线程相同,每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于局部变量当方法执行完毕后,Java虚拟机会将该栈帧弹出,并回收栈帧所占用的内存空间。本地方法栈和虚拟机栈类似,只不过 Java 虚拟机栈是给 JVM 使用的,而本地方法栈是给本地方法使用的(jvm内部用c++实现的代码)。方法区的作用:用来存储被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据 的。记录当前程序执行到哪个指令了。

2023-10-16 10:03:16 110

原创 Linux常用命令

mv可以实现一个回收站的效果,先创建一个trash文件夹,以后要删除文件时,不要使用rm进行删除,直接使用mv移到trash文件夹中,达到一个回收站的效果。:用来查询根目录下的内容,‘/‘在Linux中表示 根目录,相当于Windows中的’此电脑‘,云服务器任何一个文件/目录都属于根目录。mv可以在目标文件的路径上具体到文件名称来达到一个改名的效果,如果目标文件那只有一个文件名没有路径,就相当于对当前文件改名。不像cp需要大规模读写硬盘。cp也是一个非常危险的操作,它进行复制时会覆盖掉原本的内容。

2023-10-14 11:53:34 69

原创 HTTPS与网络安全

HTTPS(HyperText Transfer Protocol Secure)是一种用于安全传输数据的网络通信协议。它是HTTP的安全版本,用于确保在客户端(通常是Web浏览器)和服务器之间传输的数据是加密的、完整的和安全的。为什么要将HTTP升级到HTTPS?在互联网上,明文传输是非常危险的,除了会发生“运营商劫持”之外,还有可能被黑客用类似的手段进行劫持, 来窃取用户隐私信息, 或者篡改内容。所以。

2023-10-03 13:40:01 81

原创 HTTP协议

因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 "报头的结束标记", 或者 是 "报头和正文之间的分隔符". HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题".

2023-10-03 10:30:48 87

原创 UDP + TCP协议详解

UDP(User Datagram Protocol)是一种面向无连接的传输层协议。与TCP(Transmission Control Protocol)相比,UDP提供了一种简单、轻量级和低延迟的数据传输机制。

2023-09-27 21:47:18 458

原创 利用tcp,udp套接字分别写一个简单的回显程序

DatagramSocket是Java中用于实现UDP协议的套接字类。它提供了在网络上发送和接收UDP数据报的功能。

2023-09-20 15:48:56 86 1

原创 JUC(java.util.concurrent)包的一些类 和 一些线程安全的集合类

Callable接口是Java中的一个函数式接口,它允许Callable也是一种创建线程的方式。但是与Runnable不同的是,即:Runnable关心过程(比如定时器,线程池中都是使用Runnable创建新线程),Callable关心结果(比如要让线程计算一个公式)。需要注意的是,Callable不能直接作为Thread的参数,通常需要搭配FutureTask使用。因为Callable线程什么时候执行完并产生返回值我们并不确定,什么时候去接收就不确定。FutureTask的get方法解决了这个问题,

2023-09-19 12:40:04 92

原创 CAS的实现及应用

CAS(Compare and Swap)是一种乐观锁,用于实现多线程环境下的同步。。当执行CAS操作时,如果内存位置的值等于期望值,那么就将内存位置的值更新为新值,否则什么都不做。CAS操作是原子的,因此CAS操作是由CPU底层的原子指令实现的,下图是我们根据CAS原理写出来的伪代码:上述过程只是对CAS的拙劣的还原。

2023-09-16 13:26:40 150 1

原创 锁策略(锁策略的简单介绍以及synchronized的锁策略)

总是假设好的情况,认为多线程对数据进行更新的时候不会发生冲突,所以如果没有发生冲突就正常更新数据,如果发生冲突,就需要重新读取数据并重试操作 或者返回错误信息,让用户重新决定如何去做。总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以,实现方式之一就是CAS。因此,我们将一把锁分为两部分:读锁和写锁,其中,因为读操作本身是线程安全的,而,不允许多个线程同时获得写锁,读写锁可以提高并发性,适合于读操作频繁的情况。锁的核心特性 "原子性", 这样的机制追根溯源是 CPU 这样的硬件设备提供的.

2023-09-15 15:16:15 100

原创 多线程 之 线程池(概念,创建方法介绍,实现一个简单的线程池)

作用:创建一个固定线程数量的线程池。上述参数中的int即为自定义的线程池的固定线程数量。至于ThreadFactory,是一个用于创建新线程的工厂。在创建线程池时,可以通过指定ThreadFactory参数来自定义线程的创建方式,从而实现更加灵活和个性化的线程池配置,这里就不展开说明(我不会用)。在使用newFixedThreadPool()方法创建线程池时,需要根据实际情况合理设置线程数量,以保证系统的性能和稳定性。如果线程池中的线程数量过小,可能会导致任务处理速度过慢,影响系统的响应能力;

2023-09-13 18:11:01 213 2

原创 简单的阻塞队列 和 定时器实现

队列满的时候,put方法阻塞,直到take方法拿出元素时唤醒队列为空的时候,take方法阻塞,直到put方法放进元素时唤醒。

2023-09-13 11:43:18 127 1

原创 单例模式(懒汉模式和饿汉模式)

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点来访问该实例。在单例模式中,该类的构造函数被私有化,以防止其他对象创建该类的实例,同时提供一个静态方法来获取该类的唯一实例。

2023-09-10 19:26:42 76 1

原创 java 线程安全

线程安全问题是指在多,多个线程同时访问共享资源时可能会出现的问题。由于多个线程同时运行,可能会导致数据竞争、死锁、活锁等问题,从而影响程序的正确性和性能。

2023-09-09 12:21:08 99 1

原创 线程与进程的区别和联系

一个线程就是一个 "执行流",且是“执行流”的最小单位, 每个线程之间都可以按照顺序执行自己的代码.,多个线程之间 "同时" 执行着多份代码.

2023-09-04 16:22:54 67 1

原创 进程的基本概念以及进程的调度方式

系统基于资源分配的角度将一个应用程序划分成多个可执行程序,我们运行这个应用程序,这些可执行程序就从磁盘加载到内存中,进而被创建成一个个进程,这些进程最重要的部分就是其PCB,PCB中有进程调度的各种信息。系统将这些PCB按照线性,链接,索引等方式在内存中组织起来以方便管理。cpu根据PCB的中提供的优先级,状态,cpu记账信息等对这些进程进行调度,执行,实现其并发执行。

2023-09-02 20:34:47 103 1

原创 Java Hashmap源码分析

Node节点包括四个内容:哈希值hash,关键字key,元素value,next指针,并针对这些内容有对应的方法。这里重点看一下其当我们向hashmap中存入自定义类型的键值key时需要重写hashCode和equals方法(后面会讲)

2023-08-31 17:01:33 134 1

空空如也

空空如也

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

TA关注的人

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