- 博客(27)
- 收藏
- 关注
原创 【Spring】Spring事务使用、七大传播机制
Spring事务 ACID原则: 原子性:要么都成功,要么都失败; 一致性:事务前后数据的完整性没有被破坏; 隔离性:事务与事务之间相互隔离; 持久性:事务完成后,数据的修改是永久的,不会因为机器重启等原因丢失;
2022-05-04 14:12:48
455
原创 【Mybatis-Spring】Spring、Mybatis在Maven中的快速整合
一、 回顾Mybatis 创建实体类 核心配置文件mybatis-config.xml 连接数据库 起小名 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <type
2022-05-04 14:11:02
1195
原创 【Mybatis】Mybatis面向IDEA超全精通教程
Mybatis 1、简介 1.1、什么是Mybatis MyBatis 是一款优秀的持久层框架; 它支持自定义 SQL、存储过程以及高级映射; MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作; MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录;
2022-05-03 23:41:20
955
原创 【JVM】JVM类的加载机制(详解)
类从加载到卸载,整个生命周期统共分为7个阶段: 其中,加载->验证->准备->解析->初始化,这5个过程就是类的加载过程,而且验证->准备->初始化这三个可以统称为连接过程; 解析阶段有时候会在初始化之后再开始; 那么,什么时候会触发类的加载? 1⃣️ main()所在的主类; 2⃣️ 在遇到new、要对某个类的静态变量进行get或set、或者调用它的静态方法时; 3⃣️ 对某个类使用反射时; 4⃣️ 已经在对某个类进行加载,并且进行到初始化阶段时,而它的父..
2022-04-26 23:47:12
390
原创 【Git】Git、GitHub、Gitee使用手册(保姆级,初入职场必看)
一、Git Git概述 分布式版本控制系统 记录修改历史记录 团队协作 版本控制工具: 集中式版本控制工具:SVN、CVS,单一集中管理服务器,连接服务器,取出最新文件或更新;每个人的管理管控、单点故障; 分布式版本控制工具:Git、Mercurial、Bazaar、Darcs,本地多版本,推送到远程库,写代码前连接远程库客隆新版本,再基于自己本地库做版本控制,再推送到远程库;断网也可以开发,每个客户端都是完整项目(包含历史记录,更安全); 工作机制: 工作区:代码存放的磁盘目录位置; 暂存区:工
2022-04-26 23:16:18
3738
原创 常用八大排序算法,看这一篇就够了 [Java版]
八大排序算法详解 概览: 性能比较: 八大排序算法 类别排序方法时间复杂度空间复杂度稳定性 平均情况最好情况最坏情况辅助存储 插入排序 直接插入 希尔排序 选择排序 直接选择排序 堆/桶排序 交换排序 冒泡排序 快速排序 归并排序
2022-04-05 01:33:05
885
原创 【Spring】Maven-Spring开发手册
一、Maven下载安装与配置 maven下载:Maven官网 1. 设置本地库 Maven压缩包解压到本地目录; 创建本地库文件夹并打开Maven目录下conf中的setting.xml进行配置; <!--设置本地库为刚才创建的本地库路径--> <localRepository>/usr/local/maven-repository</localRepository> 2. 设置国内镜像,加速下载jar包和依赖 阿里云官网:阿里云Maven仓库 <mirror
2022-04-01 00:33:25
986
原创 1.17 ConcurrentHashMap和Hashtable的区别
ConcurrentHashMap和Hashtable的区别 从底层数据结构来看: ConcurrentHashMap在JDK1.8之前,底层使用分段数组(segment数组存放Entry数组)实现,1.8之后使用的是数组+链表/红黑树结构; 而Hashtable一直使用数组+链表结构; 从线程安全的实现方式来看: 二者都是线程安全的,但是ConcurrentHashMap在JDK1.8之前使用分段锁的方法,一个ConcurrentHashMap有多个Segment,每个segment内存放多个Entry
2021-10-14 15:33:20
195
原创 1.16 HashSet和HashMap区别
1.16 HashSet和HashMap区别 HashSet是单列集合,实现的是List,只能存放对象;而HashMap是双列集合,实现的是Map,能存放键值对; HashSet底层使用了HashMap,但只用到了HashMap的key; HashSet使用add添加元素,而HashMap使用put添加元素; HashMap使用key计算HashCode,而HashSet使用对象计算HashCode; HashSet使用拉链法equals到了相同的对象时,不允许再添加,没有替换操作;而HashMap找到了
2021-10-14 15:18:01
380
原创 1.15 HashMap多线程操作导致死循环问题及其在JDK1.8中的优化
1.15 HashMap多线程操作导致死循环问题 如果多个线程使用同一个HashMap,可能会出现多个线程同时对HashMap进行扩容的场景;而扩容是新建一个数组,将链表中的元素从头结点遍历过去,每个进行rehash再放到新数组里,最后引用新数组; 有一种情况会出现死循环: 拿旧数组上某个链表上的两个连续结点A->B举例,假设A、B依次被线程1拿到了新数组(假设仍在同一个桶中),成了B->A的顺序;这时,线程2也对HashMap进行扩容,再次将A往新数组对应位置的链头添加,也就是A->ne
2021-10-14 15:17:40
641
原创 1.14 HashMap的长度为什么是2的幂次方
1.14 HashMap的长度为什么是2的幂次方 设计原理: JDK1.8之前,hash–>数组下标的过程很简单,hash%length,就可以将hash映射到数组上 JDK1.8优化思路,已知位运算 a % 2 ^n = a & 2 ^n - 1(因为2 ^n -1刚好是一个低位掩码,a&小1位的低位掩码相当于截取了低一位的所有二进制数,起到了a%2 ^n效果) 所以对于指定的值,将数组长度设置为大于等于该值的最小2 ^n,就可以用位运算优化; 如何保证数组长度是2 ^n? 在Has
2021-10-14 15:17:24
250
原创 1.13 HashMap和Hashtable的区别
1.13 HashMap和Hashtable的区别 从底层数据结构来看:HashMap在JDK1.8之前采用数组+链表的方式,在JDK1.8时采用数组+链表/红黑树的结构;而Hashtable一直是数组+链表的结构; 从线程安全上看:HashMap不是同步的,非线程安全;而Hashtable中有同步锁synchronized,线程安全; 从效率上看:Hashtable因为实现线程安全,效率不如HashMap; 从null值容忍度来看:HashMap最多容忍1条数据的key是null,多条数据的value是
2021-10-14 15:17:10
147
原创 1.12 HashMap的底层实现
1.12 HashMap的底层实现 JDK1.8之前,使用数组+链表的形式,数组中每一个结点都是一个Entry,Entry中不仅包括自己的数据,还有一个next,构成了一个链表; 当键值对想要进行put时,HashMap会先计算出key的HashCode,再经过扰动函数(高低位运算)将HashCode的高位信息保留,低位信息混合了原来的高地位,得到hash值,由于hash范围前后40亿,想要映射到长度相对短的数组里,通过hash&length-1,得到数组下标,然后去该位置看是否有数据,没有就直接存
2021-10-14 15:16:38
130
原创 1.11 ArrayList和Vector的区别
2.11 ArrayList和Vector的区别 ArrayList非线程安全; Vector的所有方法都是同步的,线程安全; 所以可想而知,ArrayList的效率要高于Vector; 要在单线程环境使用List,选ArrayList; 在多线程环境,选用Vector; ...
2021-10-14 15:15:45
124
原创 1.10 ArrayList和LinkedList异同
1.10 ArrayList和LinkedList异同 相同点: 都实现的是List接口,是单列集合; 都是线程不安全的; 不同点: ArrayList基于数组实现,而LinkedList基于双链表实现; ArrayList有索引,支持随机访问,而List无索引,不支持; ArrayList查找是O(1),增删是O(n),更擅长查找遍历;而LinkedList查找是O(n),增删是O(1),更擅长增删元素; ArrayList在空间上浪费在数组的后面会预留空间;而LinkedList的每个结点要多出用
2021-10-13 13:23:40
299
原创 1.9 接口与抽象类区别
1.9 接口与抽象类区别 1.关于变量:抽象类可以有常量,也可以有一般变量;而接口里只能有变量; 2.关于方法:抽象类不仅可以有抽象方法,还可以有一般方法;而接口里只能有抽象方法(1.8之后还可以有静态方法,接口名调用); 抽象类的方法的访问权限默认为protected(1.8时,可以是default);而接口中方法的访问权限为public(1.8时,也可以default;1.9时可以private); 接口中的方法不可以有方法体(1.8时,可以有带方法体的普通方法); ...
2021-10-13 13:14:24
156
原创 1.8 获取键盘输入两种方式
1.8 获取键盘输入两种方式 new 一个Scanner对象,构造方法传入System.in这个字节输入流; 然后用这个Scanner对象调用nextInt,nextLine等方法; new 一个BufferedReader对象,构造方法传入一个用System.in构造的字符转换输入流InputStreamReader对象; 再用这个字符缓冲输入流调用read、readLine方法; ...
2021-10-13 12:57:23
171
原创 1.7 java中的异常处理
1.7 java中的异常处理 有一个父类java.lang.Throwable类,主要有两个子类: Error错误类和Exception异常类; Error类: 一般是程序无法处理的错误,JVM自身故障或者执行任务时出错,与开发者无关;例如Virtual Machine Error、OutOfMemoryError; Exception类: 主要分为CheckedException和RuntimeException CheckedException又称编译期异常,一般强制要求程序员处理;如IOExcepti
2021-10-13 12:44:19
180
原创 1.6 Object类的常用方法总结
1.6 Object类的常用方法总结 public final native Class<?> getClass(); // 获取当前对象的Class对象,不允许重写,OS的方法,执行快; protected native Object clone(); //将当前对象浅克隆,返回副本; //Object本身没有实现Cloneable接口,想要调用clone的自定义类必须实现并重写clone方法; public int hashCode(); //返回对象哈希值; public boolea
2021-10-13 12:29:36
129
原创 1.5 关于final关键字的一些总结
1.5 关于final关键字的一些总结 1.final修饰类时,它的所有成员方法都会被隐式指定为final方法;该类此时无法被继承; 2.final修饰变量时,该变量初始化后不可以被修改;如果是引用类型,它不可以再指向另一个对象; 3.final修饰方法时,方法不能够被重写,但可以被重载; final不可以拿来修饰抽象方法,与抽象方法的意义相矛盾; private方法会被隐式地指定为final; ...
2021-10-13 12:16:52
174
原创 1.4 ==与equals
1.4 ==与equals ==对于基本类型是比较值,对于引用数据类型比较的是对象的内存地址; equals是在Object中定义的方法,实际上调用的就是 == 比较内存地址;所以如果引用型对象没有重写equals方法,它的作用就和 == 一样; 如果重写了equals方法,就可以通过重写使equals实现内容比较的功能;例如String已经重写了equals方法; ...
2021-10-13 11:27:43
103
原创 1.3 自动装箱与拆箱
1.3 自动装箱与拆箱 装箱:将基本类型包装成相应的包装类 Integer integer=new Integer(3); 拆箱:将包装类转换回相应的基本类型 int i=(int)integer; JDK1.5之后 自动装箱: Integer integer=3; 自动拆箱: int i=integer; ...
2021-10-13 11:20:52
101
原创 1.2 String、StringBuffer和StringBuilder的区别是什么?String为什么不可变?
1.2 String、StringBuffer和StringBuilder的区别是什么?String为什么不可变? 从底层数据结构来看:String是被final修饰的char[],所以它在确定内容后不可以改变;而StringBuffer和StringBuilder的char[]没有用final修饰,所以它们创建的字符串是可变的; 从线程安全来看:String不可以改变,所以是线程安全的;StringBuffer对方法和调用的方法加了sychronized同步锁,所以也是线程安全的;而StringBuffe
2021-10-13 11:14:08
381
2
原创 1.1 重载和重写的区别
1.1 重载和重写的区别 重载:发生在同一个类中,方法之间的方法名相同,参数列表不同,返回类型和访问权限可以不同; 重写:发生在子父类之间,子类重写父类方法,方法名和参数列表必须相同,返回类型范围不能大于父类被重写方法的返回类型(相同或子孙类),访问权限不能小于父类被重写方法的访问权限(private<friendly<protected<public); 另外,被final修饰的方法,能够被重载,却不能被继承; private方法也是(本质上被隐式地用final修饰了); ...
2021-10-13 11:01:53
172
原创 牛客网数据库SQL实战91题详细剖析(11-20)
针对牛客网90道数据库SQL实战题,作出个人解题思路及题解的整理,不定时持续更新 具体题目来自于牛客网SQL实战模块:牛客题霸-SQL篇 SQL11 获取所有员工当前的manager 解题思路:理解一下题目的意思,等同于要查询当前员工所在部门的当前领导,并且去除领导为自己的人。又要显示dept_emp中的emp_no,又要显示dept_manager中的emp_no,显而易见最好使用连接查询,再加上WHERE查询条件: SELECT de.emp_no,dm.emp_no AS manager FROM d
2021-08-24 22:09:27
302
原创 牛客网数据库SQL实战91题详细剖析(1-10)
针对牛客网90道数据库SQL实战题,作出个人解题思路及题解的整理,不定时持续更新 具体题目来自于牛客网SQL实战模块:牛客题霸-SQL篇
2021-08-19 14:25:27
448
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅