自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM内存模型

Java程序的跨平台特性主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。

2024-09-23 19:35:26 825

原创 静态代理和动态代理

基于子类的动态代理(第三方 Cglib)CGlib方式是基于继承实现的代理,它不是指真实类需要继承某个父类,而是生成的代理类作为真实类的子类去代理父类,即代理类继承自真实类。1、 当需要代理多个类的时候,由于代理对象要实现与目标对象一致的接口,有两种方式:只维护一个代理类,由这个代理类实现多个接口,但是这样就导致代理类过于庞大新建多个代理类,每个目标对象对应一个代理类,但是这样会产生过多的代理类2、 当接口需要增加、删除、修改方法的时候,目标对象与代理类都要同时修改,不易维护。

2024-09-23 01:23:54 685

原创 排序--归并排序

归并排序将待排序的数组分成两部分,对每部分递归地应用归并排序,然后将两个有序的子数组合并成一个有序的数组。这个过程一直重复,直到数组完全有序。归并排序的过程可以用一棵完全二叉树来形象地表示,其中每个节点表示一个排序操作或合并操作。

2024-09-23 00:53:20 201

原创 排序--快速排序

快速排序是一种高效的排序算法,通过递归将数据分解为较小的数据集,然后进行排序。它的基本思想是选择一个基准值,然后将所有小于基准值的元素移动到基准值的左边,所有大于基准值的元素移动到右边。这个过程称为分区操作,之后快速排序算法递归地在左右分区上重复这个过程。

2024-09-23 00:45:32 163

原创 Servlet生命周期

它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,收集来自网页表单的用户输入,交互式地浏览和生成数据,还可以生成动态Web内容。方法,在父类的该方法中进行请求方式的判断,如果是GET请求,则调用。方法,如果子类没有重写该方法,则调用HttpServlet父类的。方法,在父类的方法实现中,返回一个。通过该Servlet的实例,调用。方法,则调用子类重写后的。

2024-09-23 00:34:56 332

原创 java反射基础知识

由于JVM为每个加载的class创建了对应的Class实例,并在实例中保存了该class的所有信息,包括类名、包名、父类、实现的接口、所有方法、字段(成员变量)等,因此,如果获取了某个Class实例,我们就可以通过这个Class实例获取到该实例对应的class的所有信息。这种通过Class实例获取class信息的方法称为反射(Reflection)。

2024-09-23 00:26:08 621

原创 查找--二分查找

针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。算法复杂度为O (logn)。如果查找值比中间位置的元素小,则从数组的左边继续查找,如果查找值比中间位置的元素大,则从数组的右边继续查找。依赖数组结构二分查找必须是有序数列。

2024-09-22 03:01:27 237

原创 迪杰斯特拉算法

迪杰斯特拉算法是一种用于在加权图中找到最短路径的算法,由荷兰计算机科学家Edsger W. Dijkstra于1956年提出。这个算法可以解决单源最短路径问题,即从图中的一个顶点到其他所有顶点的最短路径问题。它是一个贪心算法,通过不断选择最小的未处理的顶点来更新其他顶点的最短路径。

2024-09-22 02:54:08 180

原创 数组的逆序遍历

逆序排列的核心思想是交换数组的首尾元素,直到中间位置。

2024-09-22 02:27:57 242

原创 排序---冒泡排序

冒泡排序就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

2024-09-22 01:43:30 195

原创 雪花算法Snowflake

雪花算法的原理就是生成一个的 64 位比特位的 long 类型的唯一 id第一位最高 1 位固定值 0,因为生成的 id 是正整数,如果是 1 就是负数;时间戳占用41bit,精确到毫秒,总共可以容纳约69年的时间。工作机器id占用10bit,其中高位5bit是数据中心ID,低位5bit是工作节点ID,做多可以容纳1024个节点。.序列号占用12bit,每个节点每毫秒0开始不断累加,最多可以累加到4095,一共可以产生4096个ID。

2024-09-22 01:06:47 325

原创 MyBatis

数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。例如,文件的存储、数据的读取以及对数据表的增删改查等都是数据持久化操作。MyBatis 支持定制化 SQL、存储过程以及高级映射,可以在实体类和 SQL 语句之间建立mapping映射关系,是一种半自动化的 ORM 实现。其封装性低于 Hibernate,但性能优秀、小巧、简单易学、应用广泛。

2024-09-20 20:38:33 573

原创 Redis缓存预热、缓存穿透、缓存击穿、缓存雪崩

缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库去查询,进而给数据库带来压力。缓存击穿是一个热点的Key,有大并发集中对其进行访问,突然间这个Key失效了,导致大并发全部打在数据库上,导致数据库压力剧增。这种现象就叫做缓存击穿。当某一个时刻出现大规模的缓存失效的情况,那么就会导致大量的请求直接打在数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。

2024-09-20 20:23:58 957

原创 synchronized与ReentrantLock的区别

FairSync类也继承了 Sync类,表示采用公平策略获取锁:当资源空闲时,它总是会先判断 sync队列是否有等待时间更长的线程,如果存在,则将当前线程加入到等待队列的尾部,实现了公平获取原则。NonfairSync 类继承了 Sync类,表示采用非公平策略获取锁:每一次都尝试获取锁,不会按照公平等待的原则进行等待,不会让等待时间最久的线程获得锁。可重入性不同:synchronized是可重入锁,即同一个线程可以多次获取同一把锁,而reentrantlock也是可重入锁,但需要手动实现。

2024-09-20 19:42:35 398

原创 消息中间件---Kafka

Kafka是一个分布式流处理平台,类似于消息队列或企业消息传递系统;

2024-09-20 17:45:24 1507

原创 Swagger

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述 文件可以去更新接口文档,以及生成各端代码。而Springfox-swagger,则可以通过扫描代码去生成这个 描述文件,连描述文件都不需要再去维护了。所有的信息,都在代码里面了。代码即接口文档,接口文 档即代码。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。

2024-09-19 19:36:22 1050

原创 线程的创建方式

继承java.lang.Thread类(线程子类)

2024-09-19 12:13:38 580

原创 线程池类型

e.执行完任务的线程,就可以存活60秒,如果在这期间,接到任务,就可以继续存活下去,否则被销毁。c.如果线程数等于核心线程,把任务添加到LinkedBlockingQueue阻塞队列。适用于处理cpu密集型任务,确保cpu在长期被工作线程使用的情况下,尽可能的少分配线程,即适用执行长期的任务。b.如果线程数少于核心线程数,创建核心线程执行任务。d.如果线程执行完任务,去阻塞队列取任务,继续执行。:适用于需要顺序执行任务的场景,保证任务按顺序执行,适用于需要顺序处理的场景;非核心线程空间存活时间为:0秒。

2024-09-19 11:40:14 558

原创 线程池的状态

当工作队列为空时,并且线程池中执行的任务也为空时,线程池进入TIDYNG状态;调用线程池内的shutdown()方法,可以切换到SHUTDOWN关闭状态;调用线程池内的shutdownNow()方法,可以切换到STOP关闭状态;terminated()执行完毕,进入TERMINATED状态;线程池中执行的任务为空,进入TIDYNG状态;

2024-09-19 10:43:03 208

原创 线程池的执行流程

‌‌线程池是一种基于‌池化技术思想实现的线程管理技术,旨在复用线程、便利地管理线程和任务,并将线程的创建和任务的执行解耦。线程池内部维护了若干个线程,没有任务时这些线程处于空闲等待状态,有新的线程任务时,会分配一个空闲的线程执行。如果所有的线程都处于忙碌状态,线程池就会创建一下新的线程进行处理或者放入队列中等待。

2024-09-19 10:27:34 1221

原创 Springboot自动配置

Springboot自动装配就是从META-INF/spring.factories下获取到需要进行自动装配的类,并生成Bean对象后交给Spring进行管理。

2024-08-18 12:59:49 270

原创 mysql事务

事务是由一组或多组sql语句组成,它们在同一批次内执行任务,如果一个sql语句出错那么该批次内的所有sql都取消执行。事务相当于一个不可分割的整体,一句话出问题那么整体都取消执行回到原来的状态。注意:mysql语句中仅(引擎)InnoDB和BDB类型的数据库支持事务。

2024-07-26 00:58:20 575

原创 list集合

扩容方式:无参构造方法是数组的初始化容量为10,容量不足按照现数组的2倍或指定的数组容量值进行扩容。CopyOnWriteArrayList是在写入时先进行数组的复制,再在新数组中进行写入操作,然后替换,可以同时进行读和写的操作。对于有参构造方法数组按照指定的容量进行初始化。扩容方式:对于无参构造法,数组初始化时容量是0,添加第一个元素时,数组扩为10;使用场景:多用于插入和删除节点,查找的效率较低,查找是通过头节点开始遍历查找。线程不安全的实现类:linkedList是基于"双向链表"实现的队列。

2024-07-24 23:36:28 377

原创 Arrays的工具类常用方法

先利用Array.sort进行排序,排序后利用.Arrays.binarySearch()传入数组contactArray和目标值target,最后找到数组中的laden并返回该元素在数组中的下标值3。Arrays.toString()方法是用于返回指定数组内容的字符串形式,用于打印数组内容或将其转化为字符串。2.Arrays.asList()的方法在与List的列表进行连接的时候一个更新另一个的随之更新。作用:该方法是在已经排好顺序的数组中进行元素的查找,并返回下标值。

2024-07-23 23:42:08 276

原创 String为啥是不可变的

String类中char[ ]被用final关键字所修饰,final代表最终的意思,不能被继承也不能有子类,所以被final修饰的变量value一旦被赋值初始化后,value所指的地址将不能改变,虽然value所指的数组是可以改变的,但String没有提供可以改变它的方法,所有value不可变。由图我们可以看出每次对字符串进行处理后都是new一个新的char[ ]数组,原字符串没有任何改变。开始时将值"Hello"赋给字符串s后,再调用字符串给齐进行大写,但并未指向一个新的字符串,

2024-07-23 22:16:29 94

原创 linux的基本命令和目录结构

2.free:显示目系统未使用和已经使用的内存数目,还可以显示被内核使用的内存缓冲区(空闲内存:avaliable=free+buffer(缓冲)+cache(缓存)):alias 列:alias kk=”ls -ail” alias ls=“ls -color” 查看系统别名:alias -p。tar -zcf demo.tar.gz (-xf解压 -rf追加 -tf查看 -cf创建)压缩包。压缩打包文件(打包tar -r 追加 -t查看包内文件 -c创建 -x解包)

2024-07-16 22:01:53 470

原创 处理压缩文件的方法

解压文件的思路是:根据压缩文件的路径创建文件以及根目录,将原始文件名以及路径设置为根目录的路径和名字,后判断根目录中是否还存在其他目录;思路:首先创建压缩文件和根目录,若根目录已经存在则利用FileUtils工具类的deleteDirectory()方法进行删除。若不存在则创建目录,利用ZipInputStream遍历压缩包内的每个子目录或子文件,并创建子目录或者子文件。创建Archive对象,用于读取rar文件,将读取的文件获取所有子目录和子文件并进行排序后创建子目录和子文件。

2024-07-11 22:31:08 266

原创 Collection集合的list接口

它具有的一些常用方法是:add(E e),add(int index,E e),addAll(E e),addAll(int index,Collectiojn c),get(int index),remove(int index),remove(Object value),indexOf(Object)它在增加删除以及获取元素时特有的方法有:addFirst(),addLast(),getFirst(),getLast(),removeFrist(),removeLast();

2024-01-25 17:59:26 419

原创 java异常

在try代码块中包含可能会产生异常的代码块,如果产生异常JVM会创建出异常对象,并抛出该异常对象,程序跳转至catch;2.Exception异常类是可以“捕获”的类,一般分为两种:RuntimeException运行时异常和检查异常。异常是计算机运行过程中出现的错误,通常分为两种:Error错误和Exception异常。catch代码块是根据对象的类型进行匹配并捕获异常,对异常进行处理。NumberFormatException(数字格式化错误),对于可以捕获的异常,我们需要对异常进行处理;

2024-01-24 22:49:04 365

原创 java-面向对象

面向对象是基于面向过程而言,面向过程是注重事件具体过程实现步骤和顺序,而面向对象是把这些事情对象化,对象化后就更注重参与者是谁,需求有什么对象,这些对象需要干什么。对象是怎么来的呢?对象是根据类创建而来,对象是事件的对象化,事件的属性定义为类中的成员变量。

2024-01-23 19:08:22 575 1

原创 String类的常用方法

String常用方法

2024-01-23 00:02:41 645 1

空空如也

空空如也

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

TA关注的人

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