- 博客(51)
- 收藏
- 关注
原创 JUC内容概述
线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor传参数的方式进行创建原因1允许阻塞队列的请求长度是Integer.MAX_VALUE,可能会造成大量的线程堆积。导致OOM实际中自己自定义线程池进行操作。
2024-03-28 22:34:02
976
1
原创 [重走长征路]线程
说明:高优先级线程会抢占低优先级线程执行的权限,但是从概率来讲,高优先级线程会高概率被执行,并不意味着只有高优先级线程执行完之后,低优先级的才执行。7、join():在线程a中调用线程b的join()方法 线程a就会进入阻塞状态,在线程b完全执行完之后 线程a才结束阻塞状态。3、当一个线程操作共享数据的时候,其他线程不能参与进来 知道线程a操作完rticket,其他线程才可以参与进来,2、出现问题的原因是当某个线程操作车票的过程中,尚未操作完成时,其他的线程参与进来,也操作车票。3/同步监视器:俗称锁。
2023-06-23 17:41:29
307
原创 [重走长征路]集合
集合 1、内存层面需要针对多个数据进行存储,此时可以考虑的容器有 :数组、集合类 2、数组存储多个数据方面的特点 数组一旦初始化,其长度就是固定的 数组中多个元素是依次紧密排列的 有序的可重复的 (优点)数组一旦初始化完成,其元素类型就是确定的,不是此类型的元素,就不能添加到数组中(集合本身不会检查元素类型,检查元素是否一致是泛型的工作) 元素中类型可以是基本数据类型 也可以是引用数据类型 (相较于集合 集合只能存放引用数据类型,基本数据类型的数据会进行自动装箱存库)
2023-06-22 18:10:35
348
原创 [重走长征路]Lambda表达式和方法引用
要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的返回值类型相同,同时抽象方法a中有n个参数,方法b中有n-1个参数,且抽象方法a的第一个参数作为方法b。要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的形参列表和返回值类型都相同,可以考虑使用方法b实现对方法a的覆盖、替换。要求:函数式接口中抽象方法a与其内部实现时调用的方法的某个方法b的形参列表和返回值类型都相同,可以考虑使用方法b实现对方法a的覆盖、替换。箭头的右边:lambda方法体,对应的重写的方法的方法体。
2023-06-22 10:40:35
265
原创 [重走长征路]反射学习笔记
因为反射体现了动态性 可以在运行时动态的获取对象所属的类,动态的调用相关的方法。反射是动态语言的关键,反射机制允许程序在运行期间借助ReflectionApi取得任何类的内部信息,并能直接操作任意对象的内部属性的方法。概述:java提供的一套api,可以使用api可以在运行时动态的获取指定对象所属的类,创建运行时类的对象,调用指定的结构(属性、方法)从开发业务角度来说 我们开发中主要是完成业务代码,对于相关的对象方法调用都是确定的 我们使用非反射的情况多一些。反射:体现的是我们能否调用的问题。
2023-06-22 10:33:57
562
原创 [重走长征路]String字符串学习笔记
(1)常量+常量 结果仍然在字符串常量池中 此时的常量有可能是常量 也有可能是final修饰的变量(有final修饰的属性就变成了常量了)(2)变量+变量 或者 常量+变量 都会通过new Stringbulider tostring 返回的是新对象的地址 在堆中。(3)调用字符串的intern() 调用此方法 返回的是字符串常量池中的地址 如果常量池中没有就进行创建。1、当需要重新赋值时 需要重新指定一个字符串常量的位置进行赋值,不能在原有的位置修改。字符串常量池在不同的jdk版本中 存放的地址不同。
2023-06-21 11:07:36
1019
原创 基本数据类型拆箱与装箱(一个例子讲解)
上面的结果虽然是相等的返回true,但是是因为经常在代码中出现值包装到相同对象中的情况,就有概率导致成功。但是这不是我们希望看到的情况,正确的是使用equals进行值比较。拆箱和装箱是编译器的工作,不是虚拟机的工作,在编译器生成字节码的时候,会插入必要地方法调用。假如现在想要定义一个整形数组列表,很遗憾,尖括号中的类型参数不允许是基本数据类型int。大多数情况下认为int和Integer是一样的,但是有一个很大的不同:同一性。==可以应用于包装类型,用于检测的对象是否有相同的存储位置。
2023-02-19 22:01:54
123
原创 SpringBoot 中关于dao层的三个注解 @Repository @Mapper(@MapperScan)@Component 的区别和理解
写在前边的话:入职一个月后,经理吧bug单转给我,让我处理一下子。分析之后,觉得思路比较清楚,调用dao层的方法完成业务逻辑,随即启动项目,进行调试。结果启动项目报错,说找不到dao层的类。查看dao层,发现没有注解,随手添加上去一个mapper注解。还是失败。上网查资料觉得没有问题,随即问大哥。尴尬的事情来了,mapper是Mybatis中的注解,项目是MongoDB,用component,或者直接在循环之外用new就行了。@Mapper 是 Mybatis 的注解,和 Spring 没有关系,@Re
2021-09-02 21:05:43
9556
原创 @Autowired与@Resource使用中需要注意的几点
@Resource 和 @Autowired都是做bean的注入时才使用,其实**@Resource并不是spring的注解,它的包是javax.annotation.Resource,需要导入,但是spring支持该注解的注入。**
2021-09-02 20:45:30
361
原创 集合学习看这一个就够了
一、集合概述一、集合框架的概述1.集合、数组都是对多个数据进行存储操作的结构,简称java容器。说明:这里说的存储,主要是内存层面的存储,不涉及持久化的存储。2.1数组在存储方面的特点(两者相比较) 一旦初始化以后,其长度就确定了。言外之意这是一个缺点 数组一旦定义好之后,其元素的类型也就确定了。我们也就只能操作指定类型的数据了。例如:String[] arr ;int [] arr;等等。2.2数组在存储方面的缺点: ...
2021-04-16 11:26:58
105
原创 StringBuffer和StringBulider学习总结
1、String/StringBuilder/StringBuffer三者的区别String:不可变的字符序列;jdk1.0;底层使用final char[]StringBuffer:可变的字符序列;jdk1.0;线程安全的,效率偏低;底层使用char[],这数组来源于AbstractStringBuliderStringBulider:可变的字符序列;jdk1.5;线程不安全,效率高一些;底层使用char[],这数组来源于AbstractStringBulider线程安全的StringBu
2021-04-12 12:22:50
102
原创 String学习总结笔记
1、String的基础概念:String:字符串,使用一对“”引用起来表示。1:String声明为final的,不可被继承2:String实现了Serializable接口:表示字符串支持序列化 实现了Comparable接口:表示String可以比较大小3:String内部定义了final char[] value用于存储字符串数据4:String:代表不可变的字符序列。简称:不可变性 体现:当对字符串重新赋值时,需要重写...
2021-04-11 21:53:32
151
原创 ArrayList和LinkedList的面试总结
ArrayList:ArrayList是容量可变的非线程安全列表,使用数组实现,集合扩充是会创建更大的数组,将原有的内容复制到新数组里面。支持元素的快速随机访问,插入删除比较慢,但是查询快!ArrayList实现了RandomAcess标记接口,也就是说实现这个接口的类,索引遍历会比迭代器遍历更加快!elementData:是Array的数据域,被transient修饰,序列化是会调用writeObject写入流,反序列化时会调用readObject重新赋值给新对象。size:当前实际大
2021-04-05 19:21:23
149
原创 [学习打卡]多线程笔记01(遇见狂神说)
普通线程和多线程的区别:进程Process线程 Thread:核心概念:线程的创建方式:1、继承Thread类,重写run方法,Start开启多线程!实现runnable接口
2020-10-17 21:26:54
315
1
原创 [学习打卡]10mysql总结1
截图:数据库每次取16k数据。要减少io次数和io的量(不要写select *)B树每次读取大小16K的数据,假如找主键为28这个数,先读磁盘一存了主键为16、34和他们的data,还有三个范围小于16,16-34,还有大于3428应该是在p2范围的。所以按着p2指针找到磁盘三把磁盘三读进内存,同理磁盘三存的是25 31的数据以及他们的范围,那么还得找28所在的范围指针指向磁盘八把磁盘八读进内存找到主键为28的数据,这就是B树的一个简易流程,...
2020-10-08 21:27:32
165
1
原创 [学习打卡]09MySql索引的优化
单表索引优化示例示例1:索引:效果:示例二:索引:效果:示例三:索引:效果:更改了where之后的条件顺序之后:索引依旧生效,效果如下:还是实例三的索引,删除一个条件之后效果:只命中了一个字段,只命中了age而没有命中name同样:替换一个之后效果:没有命中索引。原因:age之后应该是deptid但是没有写所以有了第一次的那个只命中一个索引的 “...
2020-10-06 21:32:31
247
原创 [学习打卡]08 MySql索引
每一个员工对应的掌门的名称。四种解法:1、索引:定义:索引是帮助MySql高效获取数据的数据结构。优势:通过索引对数据库进行排序,降低数据排序的成本,降低了cpu的消耗。劣势:提高查询效率的同时,降低了更新表的速度(插入、更新、删除),B树B+树B树:1、数据2、向下的指针3、指向数据的指针B+树:1、数据2、向下的指针聚簇索引和非聚簇索引主键使用聚簇索引,非主键使用非聚簇索引索引分类、索引操作语句:查看索引:单
2020-10-06 20:47:05
96
原创 [学习打卡]06MySql 增删改数据 事物
DML语言数据操纵语言:INSERT/UPDATE/DELETE插入数据语法:insert into表名(字段名1,字段名2,......)values (值1,值2 ,......)注意事项:1、字段和值必须一一对应 类型、约束必须匹配2、数值型的值不用单引号、非数值型的值必须使用单引号3、字段顺序是没有要求的。但是必须匹配!!!删除数据语法:1、 deletefrom表名where筛选条件;2、 truncate table表...
2020-09-27 10:38:01
153
原创 [学习打卡]04 MySql复合查询(外连接 子查询 联合查询。。)
练习:1、外连接说明:查询结果为主表中所有的记录;如果从表中有匹配项,则显示匹配项,如果从表中没有匹配项,则显示null;应用场景:一般多用于查询主表中有但从表中没有的记录。特点:1、外连接分主从表,两个表的顺序不能随意调换2、左连接,左边为主表 右连接,右边为主表语法select查询列表from表1别名(主表)left / right / full outer join表2别名 (outer可不写) ...
2020-09-25 12:29:51
147
原创 [学习打卡]03MySql学习分组查询、链接查询(自连接)
进阶六分组查询执行语句顺序fromwhereselectgroup by特点:查询列表往往是分组函数和分组字段 分组查询分为两类分组前筛选分组后筛选1、简单分组2、分组前筛选3/分组后筛选...
2020-09-22 09:23:18
114
原创 [学习打卡]02 MySql的常见函数
进阶四常见的函数: 1、字符函数:截取的就是张三丰三个字假如不写第三个参数而是第二个参数写7就会截取“郭襄”这包含了方法的重载最最重要的一点就是sql里的索引是从1开始的而不是java里的0;综合案例返回为 3 第一次出现白骨精三个字是从第三个字开始的 2、数学函数带参数的就是保留几位小数结果 -1 3、日期函数获取日期时间获取日期获取当前时间...
2020-09-21 21:49:34
243
原创 [学习打卡]01MySql基础笔记
概述1、Mysql的特点1、将数据持久化存储到硬盘。2、可存储大量数据3、检索方便4、保证数据完整性,一致性。5、安全可供享6、通过组合分析,可产生新数据、2、相关概念db:数据库,存储数据的仓库,它保存了一系列有组织的数据。dbms:数据库管理系统,创建操作的容器。sql:结构化查询语言,和数据库通讯的语言。4、特点Sql定义:基础查询:准备四张表员工表:部门表地区表工种表基础查询:查...
2020-09-20 11:31:22
138
原创 [学习打卡]HashMap源码分析
目录一、基础入门1、数组的优劣2、链表的优劣3、有没有一种方式整合这两个存储结构的优缺点:散列表4、散列表有什么特点5、什么是哈希二、HashMap的原理1、HashMap继承体系是什么样的2、Node数据结构分析3、底层存储结构介绍4、Put数据原理分析5、什么是Hash碰撞6、什么是链化7、JDK1.8为什么引入红黑树三、手撕源码1、Hash核心属性分析(threshold,loadFactory,size,modCount)2、构造分
2020-09-18 11:31:42
321
原创 [每日一题][链表]剑指offer 6、从尾到头打印链表18、删除链表节点 22、链表中倒数第k个节点
6、从尾到头打印链表描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000来源:力扣(LeetCode)代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; ..
2020-09-15 10:23:12
63
原创 [每日一题][动态规划]等差数列的划分
描述:如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,以下数列为等差数列:1, 3, 5, 7, 97, 7, 7, 73, -1, -5, -9以下数列不是等差数列。1, 1, 2, 5, 7数组 A 包含 N 个数,且索引从0开始。数组 A 的一个子数组划分为数组 (P, Q),P 与 Q 是整数且满足 0<=P<Q<N 。如果满足以下条件,则称子数组(P, Q)为等差数组:元素 A[P], A[p + 1],.
2020-09-11 09:43:42
192
原创 [每日一题][动态规划]力扣303、304一维数组、二维数组区间和
描述:给定一个整数数组 nums,求出数组从索引i到j(i≤j) 范围内元素的总和,包含i,j两点。示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> -3来源:力扣(LeetCode)代码class NumArray { private int[] array;...
2020-09-11 09:02:37
265
原创 [每日一题]动态规划一位数组的解题:台阶问题,打家劫舍
台阶:假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶来源:力扣(LeetCode)class Sol...
2020-09-05 20:41:32
103
原创 [每日一题][剑指offer]机器人路径问题
描述:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:
2020-09-02 17:33:56
225
原创 [每日一题][java]二叉树的最小深度
描述:给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最小深度 2.来源:力扣(LeetCode)代码:/** * Definition for a binary tree node. * public class TreeNode {...
2020-08-21 20:59:21
164
原创 [每日一题]矩阵中的路径:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格
描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[["a","b","c","e"],["s","f","c","s"],["a","d","e","e"]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的
2020-08-16 10:29:44
407
原创 [每日一题][剑指offer]青蛙跳台阶问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100来源:力扣(LeetCode)代码:class Solution { // public ..
2020-08-14 17:17:00
1364
原创 [每日一题][剑指offer]用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能
描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead操作返回 -1 )示例 1:输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:["CQueue","deleteHead","appendT.
2020-08-13 18:29:58
1251
原创 [每日一题][剑指offer]斐波那契数列
描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:1示例 2:输入:n = 5输出:5...
2020-08-12 14:23:32
209
原创 [每日一题][剑指offer]重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字
描述:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7来源:力扣(LeetCode)代码:/** * Definition for a binary tree node. * public...
2020-08-12 11:02:26
412
原创 [每日一题][剑指offer]从尾到头打印链表。输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)
描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000来源:力扣(LeetCode)代码:/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(i
2020-08-08 12:03:37
1078
原创 [每日一题][剑指offer]空格替换:请实现一个函数,把字符串 s 中的每个空格替换成“%20“
描述:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."限制:0 <= s 的长度 <= 10000来源:力扣(LeetCode)代码:class Solution { public String replaceSpace(String s) { int len=s.length(); char[] cha..
2020-08-04 12:40:47
216
原创 [每日一题][剑指offer]二维数组查找:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
描述:在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30]]给定 target=5...
2020-08-01 19:56:05
1965
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人