
基础知识
不知努力的bd
这个作者很懒,什么都没留下…
展开
-
简单介绍Map中的getOrDefault
就是当Map集合中存在这个key,就使用这个key对应的value值,不存在就会使用后面的默认值defaultValuekey - 键defaultValue - 当指定的key并不存在映射关系中,则返回的该默认值。原创 2022-08-12 10:05:56 · 5525 阅读 · 0 评论 -
简述@RequestParam与@RequestBody参数注解
RequestParam用于将指定的请求参数赋值给方法中的形参,可以接受简单类型属性,也可以接受对象类型,一般用于GET请求。@RequestParam三个配置参数required表示是否必须,默认为true,必填。defaultValue可设置请求参数的默认值。value为接收url的参数名(相当于key值)。@RequestParam也可用于除GET请求外,其它类型的请求,例如POST、DELETE等请求。..................原创 2022-07-26 15:17:22 · 9008 阅读 · 0 评论 -
Linux常用命令
1、切换目录2、查看目录3、创建目录或文件4、删除目录或文件5、重命名目录或文件6、剪切目录7、拷贝目录8、搜索目录或文件9、编辑文件10、打包和压缩11、解压12、查看当前路径13、查看进程14、结束进程:kill15、查看系统端口.........原创 2022-06-16 23:29:06 · 2043 阅读 · 0 评论 -
List、Set、Map的区别
ArrayList 底层是数组,查询快,增删慢,线程不安全,效率高,适合get和set方法;Vector 底层是数组,查询快,增删慢,线程安全,效率低;LinkedList 底层是双向循环链表,查询慢,增删快,线程不安全,效率高,适合增加和删除方法。HashSet:(无序,唯一)底层是哈希表,通过 hashCode()和 eques()保证元素唯一;LinkedHashSet:(有序,唯一)底层是链表和哈希表 ,链表保证元素的有序, 哈希表证元素的唯一性;TreeSet:(有序,唯一)底层是红黑树,排序通过原创 2022-06-07 15:16:33 · 9761 阅读 · 1 评论 -
简单介绍线程和进程区别
根本区别:进程是操作系统资源分配的基本单位,线程是资源调度的基本单位。资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。内存分配:同一进程的线程共享本进程的地址空间和资源,而进程之间的地址空间和资原创 2022-06-06 20:45:30 · 1294 阅读 · 0 评论 -
抽象类和接口
抽象类和接口原创 2022-06-01 22:37:29 · 299 阅读 · 0 评论 -
面向对象的三大基本特征
面向对象三大基本特性:封装,继承,多态一、封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。一个对象他所封装的是自己的属性和方法,所以它是不需要依赖其他对象...原创 2022-05-10 15:31:07 · 8022 阅读 · 0 评论 -
Redis持久化机制
1.简单介绍一下Redis Redis是使用C语言开发的数据库,不过与传统数据库不同的是Redis的数据是存在内存中的,也就是内存数据库,读写速度非常的快,因此Redis被广泛应用于缓存方向。2.Redis 持久化机制很多时候我们需要持久化数据也就是将内存中的数据写入到硬盘里面,大部分原因是为了之后重用数据(比如重启机器、机器故障之后回复数据),或者是为了防止系统故障而将数据备份到一个远程位置。1)快照(snapshotting)持久化 Re...原创 2022-05-07 19:41:37 · 2317 阅读 · 0 评论 -
简单Docker入门讲解
一、什么是dockerDocker 是世界领先的软件容器平台,Go 语言进行开发实现,基于 Linux 内核提供的CGroup 功能和namespace 来实现的,以及AUFS 类的UnionFS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器,Docker能够自动执行重复性任务,用户可以方便地创建和使用容器,把自己的应用放入容器。容器可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。二、docker三大核心概念原创 2022-05-01 23:15:35 · 1660 阅读 · 0 评论 -
简单介绍常用数据库引擎
一、什么是数据库引擎?数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。二、数据库引擎类型1 InnoDB引擎 支持行级锁,支持事务处理,支持外键,支持崩溃修复能力和并发控制,支持MVCC。如果需要对事务的完整性要求比较高...原创 2022-04-22 15:43:00 · 4979 阅读 · 0 评论 -
简单介绍缓存穿透、缓存雪崩、缓存击穿以及解决方案
一.缓存穿透简单意思就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。比如:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库。解决方法1)缓存无效的key:如果缓存和数据库都查不到某个 key 的数据就写一个到 Redis 中去并设置过期时间,具体命令如下: SET key value EX 10086 。这种方式可以解决请求的 key 变化不频繁的情况,如果黑客恶意攻击,每次构建不同的请求 key,会导...原创 2022-04-15 19:55:47 · 1107 阅读 · 0 评论 -
LinkedList和ArrayLists的区别
一、是否保证线程安全ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全。二、数据结构1.Arraylist 底层是基于动态数组的数据结构,动态数组是在没指定数组大小时,申请默认大小的数组,当元素个数超过数组,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组。2.LinkedList 底层使用的是 双向链表 数据结构(JDK1.6 之前为循环链表,JDK1.7 取消了循环)。三、内存空间占用1.ArrayList主要空间使原创 2022-04-14 00:56:35 · 200 阅读 · 0 评论 -
final关键字
1、final修饰类final修饰的类不能被继承。因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。final类里面的方法不能被重写,但可以被继承。2、final修饰方法当一个类的方法被final 关键字修饰后,这个类的子类将不能重写该方法。使用final方法的原因有二:第一、把方法锁定,防止任何继承类修改它的意义和实现。第二、高效。编译器在遇到调用f原创 2022-04-01 16:20:18 · 318 阅读 · 0 评论 -
try、catch中finally和return执行顺序
1.执行try中的returnpublic static int show() { try { return 1; } catch (Exception e) { return 2; } finally { System.out.println("finally模块被执行"); } } public static void main(String a原创 2022-04-01 12:35:48 · 3692 阅读 · 0 评论 -
简单介绍redis五种数据类型
1.String数据类型string 是 redis 最基本的数据类型,最大能存储 512MB,一个 key 对应一个 value,是二进制安全的,意思是 redis 的 string 可以包含任何数据(比如jpg图片或者序列化的对象)。2.List 数据类型redis 列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边).3.Hash数据类型(散列类型)redis中的散列可以看成具有String key和String value的map容器,可原创 2022-03-28 22:36:34 · 2601 阅读 · 0 评论 -
实现链表的插入——头插/尾插
声明类:public class LinkList { LinkList next; int val; public LinkList(int val) { this.val = val; } public LinkList getNext() { return next; } public void setNext(LinkList next) { this.next = next;原创 2022-03-12 18:11:46 · 969 阅读 · 0 评论 -
java值传递问题
定义类:class Student { String name; int sex; public Student(String name, int sex) { this.name = name; this.sex = sex; } @Override public String toString() { return "Student{" + "name='" + na原创 2022-03-09 23:46:19 · 197 阅读 · 0 评论 -
链表实现队列(先进先出)
定义类:public class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; this.next = null; } public int getVal() { return val; } public void setVal(int val) { this原创 2022-01-28 17:48:15 · 624 阅读 · 0 评论 -
链表实现栈(先进后出)
定义类:public class ListNode { int val; ListNode next; public ListNode(int val) { this.val = val; this.next = null; } public int getVal() { return val; } public void setVal(int val) { this.val原创 2022-01-28 16:15:41 · 449 阅读 · 0 评论 -
B+树介绍
一、B+树的结构特点1.非叶子节点仅具有索引作用,也就是说,非叶子节点只能存储Key,不能存储value2.树的所有叶节点构成一个有序链表,可以按照key排序的次序依次遍历全部数据。二、B+树存储数据若参数M选择为5,那么每个节点最多包含4个键值对,我们以5阶B+树为例,看看B+树的数据存储。(a) 在空树当中插入5(b)继续插入8,10,15(c)继续插入16(d)继续插入17(e)继续插入18(f)继续插入6,9,1920,21,22原创 2022-01-26 20:59:58 · 1490 阅读 · 0 评论 -
平衡二叉树的介绍及旋转
一、有序二叉树可能存在的问题给一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST)并分析问题所在二、平衡二叉树的基本介绍平衡二叉树具有以下特点:1)它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两颗子树都是一颗平衡二叉树。2)平衡因子: 左子树的高度 - 右子树的高度。我们将平衡因子的绝对值小于1的的有序二叉树称为平衡二叉树。三、构建平衡二叉树的思路平衡的调整步骤四、种旋转类型的旋转①:LL型旋转-----(中为支,高右.原创 2022-01-26 20:36:28 · 264 阅读 · 0 评论 -
二叉树的遍历
先定义好结构体先定义好根节点TreeNode root;//添加public TreeNode insert(int val) { System.out.print("->"+val); TreeNode newRoot = new TreeNode(val); if (root == null) { root = newRoot; return root; } TreeNode temp =..原创 2022-01-18 14:08:49 · 204 阅读 · 0 评论 -
哈夫曼编码
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。哈夫曼编码,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。哈夫曼树, 即带权路径最小的树, 权值最小的结点远离根结点, 权值越大的结点越靠近根结点。带权路径长度最短的...原创 2022-01-17 21:12:51 · 1648 阅读 · 0 评论 -
==,equals和hashCode
==和equals基本数据类型中:==判断值是否相等引用数据类型:==比较地址Object类中equals方法是用==进行比较地址String equals:先比较地址,在比较值第一个栈指向字符串常量池第二个存在new,栈到堆再字符串常量池String unset=" ";字符串常量池有内存地址String unset=null;字符串常量池没有内存地址字符串(数据存于字符串常量池中,数据能够共享; 和new(堆到常量池)的地址不同)==:基本数.原创 2022-01-16 21:18:47 · 311 阅读 · 0 评论 -
Stringstringbuffer和Stringbuilder和String区别
java中用于处理字符串常用的三个类:1、java.lang.String2、java.lang.StringBuffer3、java.lang.StrungBuilder 三者共同之处:都是final类,不允许被继承,主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着,且考虑到防止其中的参数被参数修改影响到其他的应用。StringBuffer是线程安全,可以不需要额外的同步用于多线程中;StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,...原创 2022-01-15 20:50:02 · 159 阅读 · 0 评论 -
JAVA类加载顺序大乱斗(初始化、静态)
public class InitializeDemo { private static int k = 1; private static InitializeDemo t1 = new InitializeDemo("t1"); private static InitializeDemo t2 = new InitializeDemo("t2"); private static int i = print("i"); private static int n =.原创 2022-01-15 20:18:18 · 213 阅读 · 0 评论 -
Java中128陷阱
在Integer的valueOf()方法当中,如果我们的数值在-128-127之间的数值都存储在一个catch数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在内存当中的地址,所以在-128-127之间的数用==进行比较是相等的。而不在这个区间的数,需要新开辟一个内存空间,所以不相等。...原创 2022-01-15 18:41:34 · 135 阅读 · 0 评论 -
java基础4(操作符-按位操作符和移位运算)
java中的按位操作符:按位与(&),按位或(|),按位异或(^),按位非(~)1. 按位与(&):如果2个输入位都是1,则生成一个输出位1,否则生成一个输出位0——————都为1则为1,否则均为0;2.按位或(|):如果2个输入位中有一个是1,则生成一个输出位1,只有在2个输入位都为0的情况下,它才生成一个输出位0——————都为0则为0,否则均为1;3. 按位异或(^):如果输入位的某一个是1,但不全都是1,那么它生成一个输出位1—————按位取反;4. 按位非(~):.原创 2022-01-01 20:43:56 · 378 阅读 · 0 评论 -
java基础3
split()语法:stringObject.split("按什么分隔")功能:把一个字符串分割成字符串数组返回值:Array//使用split将str转换为数组var str = 'welcome-to-beijing';var arr = str.split("-");console.log(arr); //["welcome","to","beijing"]var date = '2016/05/05';var dateArr = date.split("/")原创 2021-12-31 21:06:57 · 469 阅读 · 0 评论 -
Java.math.BigInteger 四则运算
package bigDateOperate;import java.math.BigInteger;import java.util.Scanner; public class bigData { public static void main(String[] args) { Scanner s=new Scanner(System.in); String str1=null,str2=null; System.out.println("输入第一个操作数:"); str1=s.原创 2021-12-28 13:55:09 · 233 阅读 · 0 评论 -
java基础——数组
1、Arrays.sort(int[] arr)对一个数组的所有元素进行从小到大的顺序。 1 public static void main(String[] args) { 2 3 int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5}; 4 Arrays.sort(a); 5 for(int i = 0; i < a.length; i ++) { 6 Sy原创 2021-10-15 21:34:33 · 102 阅读 · 0 评论 -
java基础2
String astring = new String("123");栈内存——堆内存——字符串常量池String bString = "123";栈内存——字符串常量池1.求长度String aString = "123456789";int length = aString.length();2.charAt()获取到Sting当中的指定的值String aString = "123456";char a = aString.charAt(0);3.subS.原创 2021-07-05 22:32:04 · 136 阅读 · 0 评论 -
java基础1
基本数据类型(8种 1字节=8bit)byte:1字节;short:2字节;int:4字节;long:8字节float:4字节;double:8字节charboolean:只有flase和true原码、反码、补码问题两原码求和值不为零1 0110011 反码(原码取反)反码:反码的出现是为了解决原码相减的问题,但最后值为-01 0110100 补码(反码加1)补码:补码产生的原因是为了解决反码为-零的问题(计算机存补码)byt...原创 2021-07-05 11:52:56 · 136 阅读 · 0 评论