- 博客(30)
- 收藏
- 关注
原创 Java面试题———集合篇
首先,HashMap的底层有一个数组,它在保存元素的时候,会对元素的key进行hash运算,得到hash值,然后再使用hash值对数组长度取余,得到元素在数组中的位置,这样的话,不同的元素计算完毕之后,就可能会被分配到数组中的同一个位置上,这就是所谓的哈希冲突。在JDK1.8中,底层是调用resize方法实现扩容的,它的默认做法是:当元素个数超过数组长度的0.75倍时触发扩容,每次扩容的时候,都是扩容为原来的2倍, 扩展后Node对象的位置要么在原位置,要么移动到原偏移量两倍的位置。
2024-10-24 15:51:23
611
1
原创 Java面试题———基础篇
深拷贝:深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。用于基本类型的变量比较时: ==比较的是值是否相等,equals不能直接用于基本数据类型的比较,需要转换为其对应的包装类型。不一样的是&&有短路的功能,即当符号前面的表达式为false时,后面的表达式将不再执行,而&没有这个功能。
2024-10-24 15:50:24
991
原创 Redis三种集群搭建
可以发现,只有在7001这个master节点上可以执行写操作,7002和7003这两个slave节点只能执行读操作。共包含三个节点,一个主节点,两个从节点。注意: 设置主从配置后reids会自动更改配置文件中的内容,确保重新复制master-slave中的配置到虚拟机中。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master。这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件。
2024-09-04 21:51:13
1847
原创 Vue案例
黑马程序员-大事件实现1)创建项目2)安装项目需要的依赖3)在main.js中加入Element的内容//引入中文文件})4)复制准备好的资料删除asserts、components下面自动生成的内容将资料中的静态资源拷贝到assets目录下在App.vue中,不能同时展示Login.vue和Layout.vue的原因是vue属于单页面应用程序也就是说一个网站中显示一个页面,所有的功能与交互都在这唯一的一个页面内完成。
2024-09-03 17:34:23
1880
原创 Spring解析
目录容器与 bean1) 容器接口演示1 - BeanFactory 与 ApplicationContext 的区别代码参考收获💡演示2 - 国际化2) 容器实现演示1 - DefaultListableBeanFactory代码参考收获💡演示2 - 常见 ApplicationContext 实现代码参考收获💡3) Bean 的生命周期演示1 - bean 生命周期代码参考收获💡演示2 - 模板方法设计模式关键代码演示3 - bean 后处理器排序代码参考收获💡4) Bean 后处理器演示1
2024-09-02 10:44:00
2371
1
原创 Vue基础
原生的JS在程序开发的过程中书写起来是十分麻烦的,因此很多的前端的框架(半成品)就应运而生了,目前比较知名的是下面三个Vue是一个用于构建用户界面的渐进式框架,目前企业中流行的版本有两个打开项目会发现很多目录,下面了解下每个目录的作用我们以main.js作为文件的主入口,此文件会引入我们开发的根组件App.vue我们可以在根组件中编写代码,也可以在其它自定义组件中开发,再引入到根组件中。
2024-09-01 21:25:50
2735
原创 Docker基础
Docker是一个开源的应用容器引擎,主要作用是方便我们快速安装部署软件和程序Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上。
2024-08-31 22:01:02
2361
2
原创 Linux入门
windows的问题:收费,系统长时间运行不稳定Linux的优点:开源免费,运行稳定,不会变慢,不容易死机因此:做为一个后端JavaEE程序员,在windows中开发完程序后,得部署到一个相对比较安全稳定的服务器中运行,Linux就是最佳的选择学习Linux, 我们得学会:对目录,文件基本操作命令由于linux的开源精神,使得其版本众多,发展到今天,主要有三大分支:、FedoraUbuntususe: 主要用于商业桌面、服务器,包含:SLES、OpenSUSE。
2024-08-29 15:22:11
997
原创 MyBatisPlus全解
BMP入门Mybatis-Plus(简称MP)是一个Mybatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发、提高效率而生。Mybatis-Plus已经封装好了大量增删改查的方法,程序员只需要继承BaseMapper就可以使用这些方法了,无需自己再开发。官网地址:https://baomidou.com/案例实现向数据库保存一个User对象创建数据表create table tb_user ( id bigint(20) primary key au
2024-08-25 23:55:06
1409
原创 面试题Java版(含大厂校招面试题)
在我们的项目中会将缓存放到数据库前面,查询的时候先查缓存,缓存有了就不用再去查数据库了,这样可以大大减轻数据库的访问压力而缓存穿透指的是请求一直在查询一个数据库中不存在的数据,这样缓存中没有,请求就会到达数据库,而数据库也没有,也就没法缓存所以每一次请求都会直接到数据库中查询,这就极有可能导致数据库被压垮常用的解决方案有两个:查询返回的数据为空,仍把这个空结果进行缓存,但过期时间尽量设置稍短一些。
2024-08-23 09:28:37
1579
1
原创 MyBatis全解
起源:MyBatis 的前身是 iBatis,最初由 Clinton Begin 在2001年创建。发展:2008年左右,iBatis 被捐赠给了 Apache 软件基金会,并更名为 MyBatis。版本演变:MyBatis 3.x 版本引入了大量的改进和新特性,成为目前最广泛使用的版本。社区与生态:MyBatis 拥有活跃的社区和丰富的插件生态系统,包括 MyBatis Generator、MyBatis Plus 等工具。
2024-08-12 23:31:59
4263
原创 Redis基础
Redis提供了多种数据结构,每种数据结构都有其特定的使用场景。在 Java 中,通常使用 Redis 客户端库来与 Redis 交互。常见的 Redis 客户端有 Jedis 和 Lettuce,还有 Spring Data Redis 等高级封装。
2024-08-10 17:54:42
1120
原创 如何看待“低代码”开发平台的兴起?
总体来看,低代码平台是一个重要的趋势,它不仅改变了开发流程,还促进了跨职能团队之间的协作,有助于推动企业的数字化转型。它们通过提供图形化的用户界面和拖放式组件,极大地简化了应用程序的构建过程,使得非专业的开发人员也能够参与到软件开发中来。加速开发周期:低代码平台通过提供预制的组件和模板,大大减少了手动编码的需求,从而显著缩短了应用程序的开发时间。促进创新:非技术人员可以直接试验新的想法,而不需要等待IT部门的支持,这有助于加速创新的速度。
2024-08-09 15:14:41
343
原创 数据结构———哈希表
在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。
2024-08-09 15:05:01
1683
原创 RESTful API
RESTful API(Representational State Transfer Application Programming Interface)是一种构建网络应用程序和服务的设计风格和开发方式,它基于HTTP协议,利用HTTP的方法(如GET、POST、PUT、DELETE等)来操作资源。局部更新一篇文章:PATCH /articles/{articleId}删除一篇文章:DELETE /articles/{articleId}更新一篇文章:PUT /articles/{articleId}
2024-08-06 23:46:01
342
原创 Java每日一题———删除有序数组中的重复项
我们可以使用两个指针,一个慢指针 slowRunner 用于跟踪新数组的末尾,另一个快指针 fastRunner 用于遍历数组。每当 fastRunner 遇到一个新的唯一元素时,就将其复制到 slowRunner 指向的位置,并将 slowRunner 向前移动一位。这种方法的时间复杂度为 O(n),其中 n 是数组的长度,因为每个元素只被访问一次。// 如果当前元素与前一个元素不同,则将其复制到 slowRunner 指向的位置。这种方法保证了元素的相对顺序保持一致,并且只保留了唯一的元素。
2024-08-06 23:35:01
478
原创 数据库基础
数据库是一种用于组织、存储和管理数据的电子系统。它可以被看作是一组相互关联的数据集合,这些数据可以被高效地访问、管理和更新。数据库是一个长期存储在计算机硬件平台上的、有组织的、可共享的数据集合。它旨在最小化数据冗余,并确保数据的一致性和准确性。
2024-08-05 15:14:19
2117
原创 数据结构———队列
队列是一种特殊的线性表,它只允许在一端进行插入操作,在另一端进行删除操作。插入的一端称为队尾(Rear),删除的一端称为队头(Front)。
2024-08-02 20:31:12
911
原创 数据结构———栈
在基于链表的实现中,链表的扩容非常灵活,不存在上述数组扩容时效率降低的问题。不过,如果入栈元素本身就是节点对象,那么可以省去初始化步骤,从而提高效率。在基于数组的实现中,入栈和出栈操作都在预先分配好的连续内存中进行,具有很好的缓存本地性,因此效率较高。然而,如果入栈时超出数组容量,会触发扩容机制,导致该次入栈操作的时间复杂度变为 O(n)。如图 5-3 所示,入栈与出栈操作分别对应在数组尾部添加元素与删除元素,时间复杂度都为 O(1)。使用链表实现栈时,我们可以将链表的头节点视为栈顶,尾节点视为栈底。
2024-08-02 17:58:40
842
原创 数据结构———链表
内存空间是所有程序的公共资源,在一个复杂的系统运行环境下,空闲的内存空间可能散落在内存各处。我们知道,存储数组的内存空间必须是连续的,而当数组非常大时,内存可能无法提供如此大的连续空间。也就是说,访问链表的第 i个节点需要循环 i−1 轮,时间复杂度为 O(n)。是一种线性数据结构,其中的每个元素都是一个节点对象,各个节点通过“引用”相连接。建立链表分为两步,第一步是初始化各个节点对象,第二步是构建节点之间的引用关系。相比之下,在数组中插入元素的时间复杂度为 O(n) ,在大数据量下的效率较低。
2024-08-01 20:48:47
1016
原创 数组(三)
技术是一种在数组或序列上操作的高效算法,主要用于处理涉及连续子数组的问题,如求解最大或最小子数组的和、平均值、最长合法子串等问题。技术是一种常用的算法技巧,特别适用于处理有序数组或链表的问题,它能够有效地减少时间复杂度,将某些问题的解决时间从O(n^2)降低至O(n)。在数组中,双指针通常是指两个索引,它们可以指向数组的不同位置,并根据特定的策略移动。假设我们有一个有序数组nums和一个目标值target,我们的任务是找到数组中两个数,使它们的和等于target。示例:寻找两个数之和等于特定值。
2024-07-31 21:12:37
373
原创 数组(二)———数组的排序算法②
快速排序是一种非常高效的排序算法,采用了分治策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两个子序列。
2024-07-30 21:18:04
754
原创 数组(二)———数组的排序算法①
是一种简单的排序算法,其基本思想是重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素,这意味着数列已经排序完成。
2024-07-29 21:25:16
1341
原创 Java基础篇(二)
无参数无返回值的方法:格式: public static void 方法名(){ 方法体; }调用: 方法名();");// 输出 "Hello!
2024-07-29 18:07:12
884
原创 数组(一)
分为:无初始值、给定初始值。数组元素被存储在连续的内存空间中。给定数组内存地址(首元素内存地址)和某个元素的索引,我们可以使用图 所示的公式计算得到该元素的内存地址,从而直接访问该元素。数组元素在内存中是“紧挨着的”,它们之间没有空间再存放任何数据。如果想在数组中间插入一个元素,则需要将该元素之后的所有元素都向后移动一位,之后再把元素赋值给该索引。由于数组的长度可能是固定的,因此插入一个元素必定会导致数组尾部元素“丢失”。若想删除索引 i 处的元素,则需要把索引 i 之后的元素都向前移动一位。
2024-07-28 21:55:31
767
原创 Java基础篇(一)
字面量(Literal)在计算机科学和编程中是指在源代码中直接表示的固定值。这些值可以直接在程序中使用,而不需要通过变量或其他形式的存储来间接引用。字面量通常用来初始化变量或者作为函数参数传递。字面量可以是以下几种类型:整数或浮点数(数值字面量)字符串(字符串字面量)布尔值(true 或 false)特殊值如 null 或 undefined (在某些语言中)对象或数组(在像JavaScript这样的语言中,可以有对象和数组的字面量表示)例如,在Java中,以下都是字面量:
2024-07-28 21:05:05
1298
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人