- 博客(32)
- 收藏
- 关注
原创 注解的概述,用法和用途大全
开发者可以根据具体需求自定义注解。自定义注解通常需要使用元注解来指定其行为。public @interface 注解名{常量抽象方法抽象方法:返回值类型必须是以下类型或者其一维数组类型基本类型字符串类型Class类型枚举类型注解类型不能有参数列表。
2024-10-25 20:14:08 690
原创 类加载器介绍
类加载器(Class Loader)是 Java 虚拟机(JVM)的一部分,负责将类文件(.class 文件)加载到 JVM 中。类加载器在 Java 应用程序的启动和运行过程中起着至关重要的作用。
2024-10-24 11:16:15 962
原创 Java面试题———JVM篇
双亲委派模型是Java中的一种类加载机制。在双亲委派模型中,类加载器之间形成了一种层次继承关系,从顶端开始依次是:启动类加载器->扩展类加载器->应用类加载器->自定义类加载器当一个类加载器需要加载某个类时,它首先会委派给其上层类加载器去尝试加载该类。如果父类加载器无法加载该类,子类加载器才会尝试加载。这种层次关系形成了一个从上到下的委派链。双亲委派模型的主要目的是保证Java类的安全性和避免类的重复加载。当一个类加载器收到加载请求时,它会首先检查自己是否已经加载了该类。
2024-10-22 21:53:06 976
原创 Java面试题———分布式事务篇
在分布式系统中,一个业务因为跨越不同数据库或者跨越不同微服务而包含多个子事务,要求所有子事务同时成功或失败,这就是分布式事务。比如一个电商系统的下单操作需要请求三个服务来完成,这三个服务分别是:订单服务,账户服务,库存服务。当订单生成完毕以后,就需要分别请求账户服务和库存服务进行进行账户余额的扣减和库存扣减。假设都扣减成功了,此时在执行下单的后续操作时出现了问题,那么订单数据库就进行事务回滚,订单生成失败,而账户余额和扣减则都扣减成功了。这就出现了问题,而分布式事务就是解决上述这种不一致问题的。
2024-10-22 21:50:05 829
原创 Java面试题———RabbitMQ篇
死信交换机和正常的交换机没有什么不同,当一个包含死信的队列使用属性,指定了一个交换机,这个交换机称为死信交换机也就是说只有队列中的死信才会流转到死信交换机,而当一个队列中的消息满足下列情况之一时,就会成为死信:消费者使用basic.reject或 basic.nack声明消费失败,并且消息的requeue参数设置为false消息是一个过期消息,超时无人消费要投递的队列消息满了,无法投递一般的死信交换机还会再跟着一个专门的队列,用来专门存储所有的死信,以方便后期的人工干预。
2024-10-20 17:10:42 693
原创 Java面试题———ElasticSearch篇
倒排索引是搜索引擎的核心,它是一种像数据结构一样的散列图,可将用户从单词导向文档或网页。主要目标是快速从数百万文件中查找数据倒排索引主要体现在文档的保存和查询流程中保存文档时,会先根据文档进行分词,然后使用分好的词条作为key进行排序,然后将文档的标识作为value进行存储查询文档时,也会先对查询关键字进行分词,然后根据分好的词条直接定位相关文档,再做结果的合并。
2024-10-20 17:09:21 463
原创 File的相关操作
文件是在存储设备上的一组相关信息的集合。在计算机科学中,文件可以包含任何类型的数据,如文本、图片、音频、视频等。文件通常有一个唯一的名称(包括扩展名),并位于特定的目录或路径中。类表示文件系统中的文件和目录。它可以用来创建文件对象,获取文件信息,如文件名、路径、大小等,还可以用来创建、删除文件和目录等。的文件,并且我们要对其进行一些基本的操作。
2024-10-19 20:10:26 482
原创 递归的优缺点以及应用
Java中的递归概念递归是计算机科学中一种重要的编程技巧,它是指一个方法直接或间接地调用自身。在Java中实现递归,通常涉及到解决一个问题时将其分解为更小的子问题,并且这些子问题与原问题相同或相似。
2024-10-19 19:59:50 613
原创 Java面试题———SpringCloud篇
在微服务架构中,我们会拆分出很多的服务,服务之间存在复杂的调用关系,那么这些服务一旦会出现失败的情况,就会导致服务雪崩Hystrix就是来防止服务雪崩的工具,它具有服务降级,服务熔断,服务隔离,监控等一些防止雪崩的技术。它有四种防雪崩手段:服务隔离:隔离服务之间相互影响服务监控:在服务发生调用时,会将每秒请求数、成功请求数等运行指标记录下来服务熔断:接口调用失败就会进入调用接口提前定义好的一个熔断的方法,返回错误信息服务降级:接口调用失败就调用本地的方法返回一个空。
2024-10-14 17:39:45 854
原创 Java面试题———SpringBoot篇
我们只需要在SpringBoot的启动类上添加一个@SpringBootApplication的注解,就可以开启自动装配。使用@ConfigurationProperties注解把对应的值绑定到一个配置对象,然后将配置对象注入到需要的地方。版本锁定:SpringBoot在父工程中进行了大量常见依赖的版本锁定,省去了我们查找依赖版本和解决版本冲突的麻烦。跨域是指浏览器不能执行其他网站的脚本。起步依赖:SpringBoot以功能化的方式将需要的依赖进行组装,并且允许程序员以starter的方式进行引入。
2024-10-14 17:38:48 1715
原创 Java面试题———Spring篇
singletonObjects:一级缓存,存放完全初始化好的 Bean 的集合,从这个集合中取出来的 Bean 可以立马返回 earlySingletonObjects:二级缓存,存放创建好但没有初始化属性的 Bean 的集合,它用来解决循环依赖 singletonFactories:三级缓存,存放单实例 Bean 工厂的集合 singletonsCurrentlyInCreation:存放正在被创建的 Bean 的集合。关联创建时,检查“正在被创建的 Bean”中是否有即将注入的 Bean。
2024-10-13 21:52:49 679
原创 Java面试题———MyBatis篇
动态SQL是为了解决SQL语句灵活性不足的问题而提出的一种技术,它可以根据条件拼接SQL语句以不同的查询需求。1、处理方式不同:${}表示的是字符串拼接,Mybatis在处理它时,会直接将${}替换成变量的值。是这样的,当实体类中的属性名和表中的字段名一样的时候,Mybatis会自动完成查询结果的映射。2、字段起别名:可以在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。SQL 解析器会根据 SQL 语句中的动态标签和参数的值,生成一个完整的 SQL 语句。
2024-10-13 21:50:29 526
原创 Stream流
一旦定义了一个流,就可以在一个表达式中链接多个操作,形成一个处理管道。提供了更简洁的语法,但在某些情况下,传统的循环可能更快。:流的操作可能会抛出异常,特别是在使用自定义函数作为参数时。是 Java 8 引入的一个重要特性,它是对集合数据进行操作的一种新的方式。:并行流在多线程环境中运行,因此需要考虑线程安全问题,尤其是在使用共享资源时。方法调用完毕后返回的不在是一个流的对象, 不能继续在使用Stream的功能。方法调用完毕后返回的依然是一个流的对象, 可以继续使用Stream的功能。
2024-10-12 17:46:25 1053
原创 lambda表达式和匿名内部类
Lambda表达式是一种匿名函数,它可以作为一个值来传递。Lambda表达式通常包含一个或多个参数,一个表达式或一个语句块,并且它们可以立即执行。在技术上,Lambda表达式是一个闭包,因为它可以访问其定义范围之外的变量(只要这些变量是最终的或实际上不可修改的)。Lambda表达式适合于简单、短小的功能实现,能够显著提升代码的可读性和简洁性。匿名内部类则更适合于实现复杂的逻辑或者需要覆盖多个方法的情况。在选择使用哪种方式时,应根据实际需求和上下文来决定。
2024-10-11 19:54:02 1054
原创 API--String和StringBuilder
是 Java 中的一个类,用于创建和操作字符串缓冲区。它允许你在程序运行过程中动态地修改字符串的内容,并且比使用。在 Java 中是不可变对象(immutable),每次拼接都会创建新的字符串对象,而。类提供了大量的方法来处理字符串。获取此字符串的字节数组表示形式,使用指定的字符集。:删除从索引 start 到 end 的字符。:将指定的字符串追加到此序列的末尾。对象进行多次拼接更加高效,因为。:返回此序列的一个字符串表示形式。:将此序列的长度设置为指定的值。:在指定的位置插入字符串。:反转序列中的字符。
2024-10-08 17:57:23 938
原创 枚举的介绍
枚举(Enumerations,简称 Enums)是许多编程语言中的一种数据类型,用于定义一组固定的常量。枚举类型可以让你定义一个关键字列表,每个关键字都是该类型的唯一值。枚举可以提高代码的可读性,并且有助于捕捉错误。在Java中,枚举是通过关键字enum来定义的。RED,GREEN,BLUE在这个例子中,ColorREDGREEN和BLUE。
2024-10-08 17:45:27 474
原创 API常用类与函数-日期与时间
对象是可变的,这意味着可以在不创建新对象的情况下更改字符串的内容。这对于频繁修改字符串内容的场合非常有用,因为它可以避免创建多个字符串对象,从而提高性能和减少内存消耗。是一个非常有用的类,适用于需要频繁修改字符串内容的情况。的主要作用是在需要频繁修改字符串内容的情况下提供高效的操作手段。是 Java 8 引入的新日期时间 API 中的一个类,位于。类的一个公共方法,用于返回对象的字符串表示形式。类中的一个公共方法,用于比较两个对象是否相等。是不可变的,所有的方法都会返回一个新的。然而,在单线程环境中,
2024-09-30 15:46:42 1012
原创 内部类介绍
静态内部类是一种特殊的内部类,它通过使用static关键字来声明。与非静态内部类不同,静态内部类不需要依赖于外部类的实例即可创建。这意味着你可以直接通过外部类的名称来创建静态内部类的对象,而不需要先创建一个外部类的实例。将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量外界是无法使用局部内部类(例如:无法直接使用show方法里面的局部变量a),需要在方法内部创建对象并使用该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
2024-09-29 10:03:07 510
原创 SpringCloud学习路线
2.安全与认证 - Spring Cloud Security / OAuth2。5.API网关 - Zuul / Spring Cloud Gateway。6.配置管理 - Spring Cloud Config。3.消息驱动 - Spring Cloud Stream。1.服务链路追踪 - Sleuth & Zipkin。7.消息总线 - Spring Cloud Bus。3.服务熔断与降级 - Hystrix。4.声明式服务调用 - Feign。1.服务治理 - Eureka。
2024-09-29 10:02:18 826
原创 final关键字-单例模式-静态代码块
双重检查锁定是一种优化技术,用于实现懒汉式的单例模式。其核心是在非线程安全的检查之后再加一个线程安全的检查,从而保证实例化过程的线程安全性和性能。
2024-09-28 19:30:00 1428
原创 面向对象编程-静态类和抽象类
抽象类(Abstract Class)是 Java 中一种特殊的类,它可以包含抽象方法(abstract methods),也可以包含具体实现的方法和变量。抽象类不能被实例化,即不能直接创建抽象类的对象,但可以用来声明引用变量,指向其具体子类的实例。抽象类声明:使用abstract关键字声明一个类为抽象类。抽象方法:使用abstract关键字声明的方法称为抽象方法,这类方法只有声明而没有实现(即没有方法体)。具体方法:除了抽象方法外,还可以包含具体实现的方法。构造器。
2024-09-27 20:21:03 900
原创 面向对象编程--封装,继承和多态
面向对象编程通过封装、继承和多态等特性提供了强大的工具来设计和实现软件系统。然而,在利用这些特性时,也需要注意它们可能带来的挑战和限制,以确保最终的软件既强大又易于维护。在实际开发中,合理地选择和使用这些特性是非常重要的。
2024-09-27 20:01:24 1131
原创 Java面试题———线程池篇
execute不可以。但是用它创建的线程池有的没有限制最大线程数,有的没有限制阻塞队列的长度,这样的话,极大可能导致OOM(内存溢出)IO密集型时,即该任务需要大量的IO,大部分线程都阻塞,则需要多配置线程数,推荐配置为CPU核数的2倍。如果核心线程都在执行任务,则判断工作队列是否已满,如果没满,则将新提交的任务存储在这个工作队列里。首先判断线程池里的核心线程是否都在执行任务,如果不是,则创建一个新的工作线程来执行任务。如果工作队列满了,则判断线程数是否小于最大线程数,如果是,则创建临时线程直接执行任务。
2024-09-22 21:44:45 762
原创 Java面试题———线程篇
Lock 呢底层其实是 CAS 乐观锁的体现,它无所谓,别人抢了它吃的,它重新去拿吃的就好啦,所以它很乐观。自选锁即是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待(不放弃 CPU 资源),然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环,此时获取锁的线程一直处于活跃状态(而非阻塞)。线程对变量的所有的操作(读,写)都必须在工作内存中完成,而不能直接读写主内存中的变量,不同线程之间也不能直接访问对方工作内存中的变量,线程间变量的值的传递需要通过主内存完成。
2024-09-22 21:42:21 1283
原创 Java基础-程序控制流程
需求:世界最高山峰珠穆朗玛峰高度是:8848.86米=8848860毫米,假如我有一张足够大的纸,它的厚度是0.1毫米。在顺序结构中,程序按照从上到下的顺序依次执行每一条语句。这意味着程序的执行路径是线性的,不会有跳转或重复。在这个示例中,程序首先输入两个数字,然后计算它们的和,最后输出结果。每一步都是在前一步之后执行的,这就是顺序结构的典型特点。根据条件1或条件2的真伪执行不同的语句块,若都不满足,则执行语句块3。在条件为真时执行语句块1,否则执行语句块2。在条件为真时执行语句块。
2024-09-15 15:42:45 633
原创 Java面试题——集合篇
首先,HashMap的底层有一个数组,它在保存元素的时候,会对元素的key进行hash运算,得到hash值,然后再使用hash值对数组长度取余,得到元素在数组中的位置,这样的话,不同的元素计算完毕之后,就可能会被分配到数组中的同一个位置上,这就是所谓的哈希冲突。在JDK1.8中,底层是调用resize方法实现扩容的,它的默认做法是:当元素个数超过数组长度的0.75倍时触发扩容,每次扩容的时候,都是扩容为原来的2倍, 扩展后Node对象的位置要么在原位置,要么移动到原偏移量两倍的位置。
2024-09-12 20:29:33 904
原创 Java面试题——基础篇
深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。用于基本类型的变量比较时: ==比较的是值是否相等,equals不能直接用于基本数据类型的比较,需要转换为其对应的包装类型。不一样的是&&有短路的功能,即当符号前面的表达式为false时,后面的表达式将不再执行,而&没有这个功能。&和&&都是逻辑运算符,都可以实现取并的效果,即符号两边的表达式都为true,结果才是true。
2024-09-12 20:28:15 1370
原创 Vue.js基础
Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架。Vue 只关注视图层, 采用自底向上增量开发的设计。Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。
2024-09-10 16:02:20 1328
原创 JS事件(猜数游戏,抽奖小活动)
不断地猜,直到猜对为止,需要给用户提醒,大了还是小了,以及猜中了。按钮之后,颜色停在哪个员工的名字之上,表示该员工获得本次抽奖;按钮之后,会随机在每个员工的名字上展示不同的颜色,最后点击。随机出一个1-100之间的随机整数,让用户去猜。
2024-09-07 21:02:21 471
原创 数组(一)
如果想在数组中间插入一个元素,则需要将该元素之后的所有元素都向后移动一位,之后再把元素赋值给该索引。在复杂的系统环境中,程序难以保证数组之后的内存空间是可用的,从而无法安全地扩展数组容量。给定数组内存地址(首元素内存地址)和某个元素的索引,我们可以使用图 所示的公式计算得到该元素的内存地址,从而直接访问该元素。内存浪费:初始化长度,未完全利用,插入数据时,丢失的末尾元素都是无意义的,但会造成内存空间的浪费。由于数组的长度可能是固定的,因此插入一个元素必定会导致数组尾部元素“丢失”。
2024-09-05 22:12:55 996
原创 JavaScript对象
2. 根据CSS选择器来获取DOM元素,获取匹配到的所有元素:`document.querySelectorAll('CSS选择器');document.querySelector('CSS选择器');可以通过如下两种方式来获取DOM元素。
2024-09-05 21:29:29 791 1
原创 前端知识HTML&CSS
那在讲解web前端开发之前,我们先需要对web前端开发有一个整体的认知。主要明确一下三个问题:1). 网页有哪些部分组成?文字、图片、音频、视频、超链接、表格等等。2). 我们看到的网页,背后的本质是什么?程序员写的前端代码 (备注:在前后端分离的开发模式中,)3). 前端的代码是如何转换成用户眼中的网页的?通过浏览器转化(解析和渲染)成用户看到的网页浏览器中对代码进行解析和渲染的部分,称为浏览器内核。
2024-09-03 22:26:49 1321
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人