自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库索引详解

当使用主键为聚簇索引时,主键最好不要使用uuid,因为uuid的值太过离散,不适合排序且可能出现新增加记录的uuid,会插入在索引树中间的位置,导致索引树调整复杂度变大,消耗更多的时间和资源。而且,主键值占用的存储空间越大,辅助索引中保存的主键值也会跟着变大,占用存储空间,也会影响到IO操作读取到的数据量。-》用雪花算法好点?根据非主键查询:根据非聚簇索引/辅助索引(必须要建立,而且物理存储多一个辅助索引的b+树),在辅助b+树上,查询到叶子节点,取出存储的主键,根据主键再在主键的b+树上查询数据返回。

2023-12-07 09:46:48 39

原创 数据库事务详解

事务特性:acid;aid为了实现c原子性:一个事务要么全执行,要么全不执行-》回滚sqlite是备份其他是失败执行语义的反向操作-》算法一致性:完整性约束在一个事务执行后没有被破坏:主键约束,外键约束,自定义约束:转账两个账户余额的和应该不变 -》约束和回滚实现持久性:无论发生什么:崩溃等 ,都不会出现磁盘上数据的逻辑错误其实就是无论发生什么都没有错误(任何错误)隔离性:事务之间的影响问题问题:脏读:读到了其他事务正在修改过程中的临时数据。

2023-12-06 16:51:55 46

原创 java基础复习导图

2023-12-06 15:12:03 36

原创 反射(理论详细到不能详细,需要不断实践)

/ 获取后使用: Field类方法 set/get方法 方法传参传一个成员变量所在类 的对象 设置/获取成员变量 成员变量使用:设置/获取。// 获取后使用: Field类方法 set/get方法 方法传参传一个成员变量所在类 的对象 设置/获取成员变量 成员变量使用:设置/获取。// 获取成员方法 们 Method 同上 传参是方法名的字符串形式 与方法参数列表的.class形式(方法名与参数列表确定方法)

2023-12-06 14:26:41 39

原创 集合(复习)

transient的size, 实现了双向链表与双端队列的特点(first,last,内部类final Node(prev,item,next)),无参构造/以集合作为参数,链表不能指定长度,可以添加任意元素,元素可以重复,包括null,而且可以是多个。添加元素add方法,判断是否需要扩容,需要调用grow方法,不需要直接添加,无参构造器,需要扩容,第一次扩容默认10,再次扩容,是1.5倍(10的),指定容量构造器,第一次指定容量,再次扩容,是1.5倍(指定容量的)jdk不一样,就不一样。

2023-12-06 14:16:19 29

原创 线程与线程池(复习)

执行逻辑:发现synchronized-->发现锁对象-->拿走(其实是赋值)--->执行完代码块中内容-->归还(赋值)--->被拿走了,阻塞,直到拿到锁定对象,继续执行。主线程开启t1线程,t1无限循环,主线程退出,要求t1线程也退出-》将t1做成守护线程。线程正在执行,其他线程调用该线程的suspend方法,将该线程挂起,该线程不会释放锁。源码:start方法源码会执行 start0方法,这是一个人本地方法,会另开线程。守护线程:为工作线程服务的,当所有用户线程结束,守护线程自动结束。

2023-12-06 11:40:00 31

原创 Java运算符底层详解:++,==,三元

++,--: 独立使用:前后完全一样 复合使用:==: 基本类型是判断值 引用类型是判断物理地址 注意:只要有基本类型,就是比较值,会自动拆箱 ==基本类型比较时,本质还是一种运算符,会转换为类型大的在比较三元: 2个备用值都要是可以赋值的 三元和if-else区别: 三元是先【运算】,再判断:

2023-12-06 10:44:25 42

原创 io部分补充

这两个类读写的文件都是针对机器的,DataOutputStream写出去的数据不是给人看的是给机器看的。里面定义加强的方法:多次读取文件的方法(参数是次数,里面调用读取文件的方法),加缓冲等-》多态。这样:创建BufferedReader对象时,既可以调用读取文件的方法(继承了),又可以调用加强的方法。其有很多实现类,实现某一方法,完成一个功能(如:读取文件/读取管道)它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,来分别调用本质的方法(buff要调用),和加强的方法(装饰)

2023-12-06 10:17:58 19

原创 线程与线程池

/ submit 继承Thread类的类的对象/ 实现Runnable类的类的对象 / 实现Runnable类的类的对象用Thread包装后的Thread对象。// 1定义一个类实现Runnable接口,重写run方法(run方法中设置线程任务),new一个Thread(参数)对象,将实现类当作参数传进去(可以用匿名内部类)// 抽象方法:Feture<?

2023-12-06 10:16:57 22

原创 社群项目详解

• services 包:业务处理相关的接⼝与实现,调用dao完成数据的持久化,所有业务都在Services中实现,如果需要执行多条数据库更新操作,那么就需要用事务管理。在做项目的时候,写类与映射⽂件时学习到的,了解到这个Maven插件,就是一个代码生成器,可以非常方便的生成mapper文件。⽬录下会⽣成相应的类与映射⽂件。

2023-12-06 09:40:59 25

原创 网络协议与响应码

HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。服务,在 requestbody偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务 器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET。dns:域名服务器,先在浏览器找缓存,操作系统找(要配置,否则不会缓存),本地域名服务器找,上级一层层往上找。osi:应用层,表示层,会话层,运输层,网络层,数据链路层,物理层。请求都是tcp链接,

2023-12-05 21:33:38 188

原创 Java的严格计算部分

但是,对于使用strictfp关键字标记的 方法 必须使用严格的浮点计算来生成可再生的结果。这两种方式的区别仅仅在于采用默认的方式不会产生溢出,而采用严格的计算有可能产生溢出。如果将一个类标记为strictfp,这个类中的所有方法都要使用严格的浮点计算。它使用“自由发布的Math库”(fdlibm)实现算法,以确保在所有平台上得到相同的结果。注释:在Math类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程。虚拟机设计者允许对中间计算结果采用扩展的精度。

2023-12-05 21:09:13 97

原创 正则表达式

end(group) 返回之前find()匹配的结束索引 有group就是返回组的。替换后返回 replaceAll(参数) 不会修改原来内容,返回的结果才是替换后的字符串,参数是正则表达式。将第一组匹配到的字符串的开始索引,记录到 group[2]中;将找到字符串的开始索引,记录到匹配器对象的属性中 数组 int[] groups groups[0]中。将找到字符串的开始索引,记录到匹配器对象的属性中 数组 int[] groups groups[0]中。

2023-12-05 21:07:45 99

原创 Java事件处理机制

Java事件处理机制:委派处理模型。事件的发生地方与事件的处理地方不同 (信息传递)-》依靠java.awt.event库中的监听器。封装思想:操作什么,方法就写在什么里面,然后给public方法,可能在其他地方调用。坦克移动 用keyListener键盘监听器 画纸实现,画板添加。封装画坦克的方法,判断direct,坦克转向给tank类加一个属性direct。多个坦克一起动,-》线程的知识。Java事件处理机制。

2023-12-05 21:06:33 15

原创 Java绘图

而且此线程的退出不依赖主线程,主线程执行完了,其也不会退出,要按上面setDefaultCloseOperation设置。继承JPanel类,重写paint绘图方法(但是注意前面的调用父类的不要去掉,否则就是默认调用无参了)g.drawImage() 6个参数,第一个就是image,后面4个就是坐标,最后一个是this。底层会自动创建一个单独的线程,其优先级低于main线程,所以一般是main线程执行完,才执行画图线程。drawLine画直线,画矩形边框,圆形边框(包括椭圆),画填充矩形/圆形。

2023-12-05 21:06:02 169

原创 集合与泛型

实现了双向链表与双端队列的特点(first,last,内部类final Node(prev,item,next))底层是LinkedHashMap,数组+双向链表 是Entry,静态内部类,继承了Node(也是静态内部类)Enable alternative view for。指定容量构造器,第一次指定容量,再次扩容,是1.5倍(指定容量的)jdk不一样,就不一样。为了方便程序员的遍历,还会创建 EntrySet的Set集合,该集合存放元素的类型Entry,而一个Entry对象就有k-v。

2023-12-04 14:27:32 42

原创 常用类与比较器

insert(start,string) 插,在索引位置插入,后面往后移 应用:3位数字插入逗号(先找小数点,往前3位插,循环处理)先在堆中创建空间,【引用指向堆】(堆中的空间有value属性,其查看常量池,有value直接指向,没有,常量池创建指向)stringBuffer保存的是字符串变量,里面的值可以修改,每次是更新内容,不用每次不用改地址,效率高(value[]在堆中)返回格式好的字符串,第一个参数是带占位符的string,后面变量替换占位符。

2023-12-04 14:24:30 117

原创 异常与junit

/ 注意:这三个方法(before,test,after【都】必须是public且不能加static,否则编译不报错,但是junit不会运行。可以有try-finally,不捕获,出现异常会直接崩,但是finally会执行【执行一段代码,不管发生什么,都要执行一段逻辑】空指针异常,数学运算异常(整数/0等),数组索引越界异常,类型转换异常,jvm无法解决,jvm内部错误/资源耗尽等,【栈溢出】,【内存溢出】,程序会崩毁。操作数据库查询表,操作文件,到了末尾发生异常,IO异常,参数异常。

2023-12-04 14:23:37 116

原创 设计模式:单例,模板

3 提供一个公共的静态方法,可以返回对象 在其中判断属性是不是null, 是null,创建(调用构造器)返回对象,3 向外暴露一个静态的公共方法 是public static的,一般命名是getInstance,2 定义一个私有静态属性的对象=null(赋值时,另一个类会被加载,可以用static代码块验证)问题:不用这个对象,只是使用其中静态成分,也会创建,造成资源浪费(因为这个对象一般是重量级的)模板类(抽象方法job,普通方法jisuan调用job计算)(抽象类:防止创建父类对象)

2023-12-04 14:12:40 143

原创 jdk8新特性:函数式接口与函数式编程思想,lambda

/ Consumer<T> 仅包含一个抽象方法 void accept(T t) 【消费(使用)型接口】 用于对传来的数据进行消费(使用),有输出,反转等。) 谁在前,谁就先消费。// 为什么用函数式接口:设计时笼统设计,将方法的实现由定义转到传参调用时,并且调用时可以使用方法外的东西(用lamdba表达式)// 特点:stream属于管道流,只能被消费(使用)一次 stream用延迟方法传给一个新的stream流,旧的就会被关闭,不能再用了。

2023-12-04 14:09:55 84

原创 内部类与Enum

1 局部内部类 (有类名,外部类局部位置)【局部内部类中变量与方法中局部变量(是final的)重名无法区分】(反射?2 匿名内部类 (无类名,外部类局部位置)【重点】【用的地方特别多】 【匿名内部类中变量与方法中变量重名无法区分】内部类访问外部类:直接访问,重名默认就近原则 区分用外部类名称点.成员(不要加this了)(就是调用此方法的对象)内部类访问外部类:直接访问,重名默认就近原则 区分用外部类名称点.this.成员(就是调用此方法的对象)

2023-12-04 14:05:59 97

原创 抽象类与接口

5 【抽象方法/抽象类 不能被private,final,static修饰,因为这些关键字与是与重写违背的】4 继承抽象类,其子类必须实现所有抽象方法,否则其也要是抽象类了。父类某些方法需要声明,但又不确定如何实现,可将其声明抽象方法,3 abstract只能修饰类与方法,不能修饰属性或其他。3 抽象方法必须在抽象类中,抽象方法不能有方法体。一般来说,抽象类会被继承,其子类实现抽象方法。2 抽象类可以没有抽象方法,抽象类还是类。1 抽象类不能创建对象/不能被实例化。类中有抽象方法,类必须声明为抽象类。

2023-12-04 14:04:29 39

原创 final关键字

8 final往往与static搭配使用,提高效率(使用属性时,不会导致类加载(static代码块不会执行)(jvm编译期的优化))【面试】2 final如果修饰的是静态属性,赋值只能在静态代码块或定义时赋值,不能在构造器赋值【final是必须要赋初值的】3 final修饰的其他,可以在定义,代码块,构造器赋值【final是必须要赋初值的】注意:不能同时有,即使赋值是一样的,也是认为是修改值。注意:不能同时有,即使赋值是一样的,也是认为是修改值。修饰 类,属性,方法,局部变量(包括方法参数)

2023-12-04 14:03:36 26

原创 代码块(编译执行逻辑)

父类静态代码块-》子类静态代码块-》父类代码块-》父类构造器super()-》子类代码块-》子类构造器。不用通过对象/类显式调用,加载类(static静态代码块)/创建对象(代码块) 时隐式调用。先类加载,再调用构造方法,只不过构造方法第一个是调用普通代码块与成员变量初始化,子类继承父类,那么第一个就是super,再是调用普通代码块】【而且因为构造器可能重载,所以是代码块一定执行,构造器选择一个执行】【代码块先于构造方法执行,也就是构造方法会后缀于方法最后,】随类加载执行,且只执行一次。

2023-12-04 14:00:50 23

原创 静态变量与静态方法

堆中(类加载时,让其在堆中生成一个class原型对象/实例,类变量在其最后)(静态变量在类加载阶段就生成了)(jdk7及之后)程序员需要不创建对象,就能使用,将其设置为静态方法 应用:工具类/工厂类。类方法与普通方法都是在类加载阶段放在方法区(类方法没有this,super 普通方法有this,super)静态方法只能访问静态属性/方法【加了一个修饰符,普通比静态权限高】,普通都可以访问。2 类加载时生成 所以没有对象也可访问 生命周期随类加载有,类销毁无。类变量也要遵守访问权限。

2023-12-04 13:58:48 23

原创 infinity与NAN参与运算的机制

2.1 下列除法运算:0.0/0、∞/∞、∞/?5 另一个在==和compare()方法上表现不一致的浮点数就是正0和负0(当然这也是计算机表示有符号数字的老大难问题),(例如用NaN来代表两个无穷大,学过高等数学的朋友们都记得,两个无穷看上去符号是一样,但不应该认为是相等的两样东西),一般来说,基本类型的compare()方法与直接使用==的效果“应该”是一样的,但在NaN这个问题上不一致,compare()方法如果返回0,就说明两个数相等,返回-1,就说明第一个比第二个小,返回1则正好相反。

2023-12-04 11:39:20 68

原创 断点调试:基本

2 配置一下 setting-》build。-》debuger-》stepping-》不选java.* 与 javax.*程序如果执行不到你下的断点,F9 程序不会到此断点,会返回上一层或main方法中能够执行到的下一断点。初始化: 默认初始化(debug看不到的),显式初始化(debug看不到的),构造器初始化。debug过程中可以动态下断点(自己写的/系统类都可以动态下断点)帮助我们查看java底层源代码执行过程,提高能力 ,追源码 推荐第2种。只能看到运行过程,证明jvm确实是这么运行的。

2023-12-03 15:03:11 63

原创 类与对象2 :3大特性,里氏替换,绑定机制

子类会完全拷贝父类方法表,如果有子类重写父类方法,改变父类的方法表指向,指向子类(也就是从父类继承来的方法位于子类定义的特有方法的前面)子类方法的返回值类型要与父类一样,或者是父类返回值类型的子类(引用类型才有父子类关系,基础类型没有,所以有包装类)对象调用的方法子类没有,父类有,执行父类,但是如果这个方法中还调用方法,并且这个方法父子类都有,是执行子类的。所以子类调用方法时,即使没有这个方法(没有重写,看上去没有),本质上也是执行的自己子类的方法(父类拷贝的)【有点绕,但好理解】

2023-12-03 15:01:28 34

原创 类与对象的关系

(只要有类,就可以创建其对象,无论在哪个类,包括自身;无论方法,包括main方法)】【任何类中都可以有main方法,可以创建自己的对象。类的实例是对象,对象是具体的。匿名对象只能使用一次。

2023-12-03 14:54:35 19

原创 坦克大战-部分

事件的发生地方与事件的处理地方不同 (信息传递)-》依靠java.awt.event库中的监听器。封装思想:操作什么,方法就写在什么里面,然后给public方法,可能在其他地方调用。铁墙,限制移动,不能打穿;水,限制移动,炮弹穿过。射击方法是不是应该直接NEW一个子弹啊,不然会覆盖上一个子弹。下方数字表示坦克数量,打死一个少一个,减为0可以进入下一关。封装画坦克的方法,判断direct,每个人机的坦克是一个线程,每颗子弹也是一个线程。用户坦克生命值,减为0,游戏结束。通过键盘操控坦克移动,转弯,射击。

2023-12-03 14:50:57 253

原创 jvm层面的this

2 this不能在类定义的外部使用,只能在类定义的方法中使用,this可以访问本类的属性,方法,构造器this(构造器参数);非静态方法编译后有局部变量this在变量表中,可以用this调用,在this转要调用方法的内存地址。对象名不可能点this的,this只能在其所在类方法中使用】访问构造器只能在构造器中使用,在构造器中调用另一构造器,而且这条语句必须是第一条语句。对象的真正地址是在jvm运行的,拿不出来,但是用其.hashcode方法出来的可以当作其地址。地址相同映射的哈希值一定相同,

2023-12-03 14:31:34 103

原创 方法重载overload和可变参数的优先级问题

重载只与方法的参数【类型】有关,与返回值,参数名称,【修饰符】无关。可变参数与普通参数构成重载选哪个?【优先用普通参数的!应用:println方法。

2023-12-03 14:26:13 15

原创 递归(自己的心得)

1 每次递归,方法的同一名称的局部变量是独立的,不会相互影响,其在不同的栈空间。条件不成立时,先执行,再回退一个条件,执行,直到一开始。2 但是如果是引用类型的数据,就会共享该数据。4 要不断向结束条件逼近,要不就无限递归了。3 谁调用,就将结果返回给谁。递归条件一般写在最前面。自己调用自己,每次调用传递不同的参数。

2023-12-03 14:22:50 11

原创 infinity与NAN参与运算的机制

2.1 下列除法运算:0.0/0、∞/∞、∞/?5 另一个在==和compare()方法上表现不一致的浮点数就是正0和负0(当然这也是计算机表示有符号数字的老大难问题),(例如用NaN来代表两个无穷大,学过高等数学的朋友们都记得,两个无穷看上去符号是一样,但不应该认为是相等的两样东西),一般来说,基本类型的compare()方法与直接使用==的效果“应该”是一样的,但在NaN这个问题上不一致,compare()方法如果返回0,就说明两个数相等,返回-1,就说明第一个比第二个小,返回1则正好相反。

2023-12-03 14:20:27 61

原创 Java数组的底层与c的不同

其是将列的地址给了行中隐性存储,地址可以是不连续的。-》结果:Java的二维数组的列的长度可以是不同的。Java一维数组和c一样,是连续的物理地址空间。

2023-12-03 14:19:08 12

原创 jvm的2种赋值机制

array2={.....} //array2的变化会影响array1。值传递:值拷贝 这个值就是数据,而且相互不影响 独立空间 栈中。引用传递:内存地址拷贝 ,会相互影响 同一空间的不同指向 堆中。//n2的变化不会影响n1。

2023-12-03 14:16:10 104

原创 Java中==与equals的比较

想象一下:如果不重写,那么第一个条件不满足,相当于:对应到我们put操作就相当于执行了hashMap.put("k","v1"),hashMap.put("k":"v2"),而不是使用v2替换v1的值,这样我们的HashMap就乱套了。String对象在调用equals方法比较另一个对象时,除了认定相同地址值的两个对象相等以外,还认定对应着的每个字符都相等的两个String对象也相等,即使这两个String对象的地址值不同(即属于两个对象)。其中的第一个要求就是调用的hashcode方法。

2023-12-03 11:08:06 119

原创 Java的+号详解 与 字符串拼接的底层逻辑

java8后:jvm会估算拼接后的总长度,会先new一个空的stringbuilder对象,然后将=两边的字符串字符放入这个对象的底层数组中(不调用append方法,直接放入底层数组),最后转为string对象(toString方法,底层就是new String()),效率稍微高点。注意:如果是有大量的字符串拼接,还是用stringbuilder好,不要用+号,否则会创建很多对象(很多stringbuilder对象和中间过程的string对象),影响效率。2 有一边是字符串,则拼接。

2023-12-03 10:33:46 92

原创 Scanner输入的异常问题的解决

【代码】Scanner输入的异常问题的解决。

2023-12-03 09:37:34 103

原创 Java中String类型和基本类型间的相互转换

调用基本类型包装类的parseXXX()方法,char类型没有,用charAt()方法。

2023-12-03 09:32:46 12

空空如也

空空如也

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

TA关注的人

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