- 博客(283)
- 资源 (2)
- 收藏
- 关注
原创 TLog介绍及使用
TLog一. TLog简介TLog提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要另外的存储空间,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点信息。适合中小型企业以及想快速解决日志追踪问题的公司项目使用。支持dubbo,dubbox,spring cloud三大RPC框架。二. TLog安装在SpringBoot项目引入全量依赖<dependency> <groupId>com.yomahub&l
2022-03-21 10:45:29
23849
原创 Optional使用demo
import entity.Clazz;import entity.Clazzroom;import entity.Student;import org.junit.Before;import org.junit.Test;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Optional;import java.util.stream.Stream;/*
2022-03-21 10:43:19
297
原创 docker基础篇
文章目录Docker1. Docker结构2. Docker的基本概念2.1. 镜像(image)2.2. 容器(container)3. 容器挂载4. DockerFile5. 镜像上传Docker1. Docker结构与虚拟机相比,Docker利用的是宿主机的内核,把可复用的底层抽离出来,像是堆积木一样,在基础之上独立的创建Docker容器,且互不干扰2. Docker的基本概念2.1. 镜像(image)资源文件,可以理解为安装包文件。可以通过docker hub查询所需镜像,在服务器
2022-01-28 17:57:39
1855
原创 IDEA的断点调试(DEBUG)
文章目录IDEA的断点调试(DEBUG)一. DEBUG界面主要按钮二. DEBUG常用的四种方式2.1. 行断点2.2. 方法断点2.3. 属性断点2.4. 异常断点2.5. 临时行断点三. 变量区与变量跟踪3.1. 动态改变变量值3.2. 断点条件设置四. 计算表达式4.1 查看方法返回值4.2 设置变量五. 多线程调试六. 远程调试七. DEMO地址IDEA的断点调试(DEBUG)一. DEBUG界面主要按钮Show Execution Point:回到当前激活的断点处。效果:若你鼠标现在在
2021-12-07 21:23:51
1517
原创 Kafka学习笔记
文章目录Kafka学习笔记Kafka基本概念Kafka日志topic的查看/建立/删除命令生产者机制分区机制数据可靠性保证acks的机制故障机制Kafka学习笔记Kafka基本概念一种分布式的基于发布/订阅的消息队列Kafka 中 Topic 被分成多个 Partition 分区。 Topic 是一个 逻辑概念 ,Partition 是最小的 存储单元 ,掌握着一个 Topic 的部分数据。 每个 Partition 都是一个单独的 log 文件,每条记录都以追加的形式写入。 Record(记录)
2021-09-23 17:36:35
191
原创 Linux常用命令
文章目录Linux常用命令vi和vim编辑模式正常模式文件目录类显示当前工作环境的绝对路径显示完整目录信息切换目录创建目录删除空目录创建空文件拷贝文件移除文件或目录移动文件或重命名查看文件分页显示文件内容输出重定向 和 追加显示文件开头内容显示文件末尾内容软连接查看历史指令时间日期类显示当前时间显示日历搜索查找类查找压缩和解压类压缩解压查看系统位数(32 or 64)创建文件夹解压资源到指定文件夹Linux常用命令vi和vim编辑模式按i或a进入编辑模式按:wq! 保存后退出q表示退出w表示保
2021-07-26 18:08:53
115
1
原创 LeetCode——每日一题:分割回文串(dfs+动态规划)
分割回文串(中等)题目来源:力扣解题思路分析:回文串的确定,使用双指针从两端判断两个字符是否相等模拟切割使用回溯,也就是采用dfs做法一:双指针+dfsclass Solution { List<List<String>> resultList = new ArrayList<>(); List<String> tempList = new ArrayList<>(); int len; public
2021-03-07 10:26:54
178
原创 【读书笔记】MySql实战45讲——orderby的工作原理
class Solution { public int maximumProduct(int[] nums) { Arrays.sort(nums); int nums_len=nums.length; int result = nums[0] * nums[1] * nums[2]; result = Math.max(result, nums[0] * nums[1] * nums[nums_len-1]); res
2021-01-21 13:31:29
195
1
原创 LeetCode——每日一题:缀点成线(数学)
缀点成线(简单)题目来源:力扣解题两点确定一条直线,kx+b=y同时排除平行x轴y轴的情况class Solution { public boolean checkStraightLine(int[][] coordinates) { int x_size=coordinates.length; double k=0,b=0; boolean isRow=true; // 计算k值和b值 // 如果横坐标
2021-01-17 10:48:41
154
1
原创 LeetCode—每日一题:交换字符串中的元素(并查集)
交换字符串中的元素(中等)题目来源:力扣解题使用并查集,参考自题解在原题解上加了注释,删除了size的hashmapclass Solution { public String smallestStringWithSwaps(String s, List<List<Integer>> pairs) { if(pairs.size() == 0){ return s; } UnionFind
2021-01-12 23:28:48
122
1
原创 LeetCode——每日一题:汇总区间(双指针)
汇总区间(简单)题目来源:力扣解题暴力循环class Solution { public List<String> summaryRanges(int[] nums) { List<String> result=new ArrayList<>(); //处理异常情况 if(nums==null) return null; else if(nums.length=
2021-01-11 23:45:14
162
原创 【读书笔记】MySQL实战45讲——普通索引和唯一索引
该课程来自极客时间《MySQL实战45讲》文章目录一、普通索引和唯一索引的选择1、查询过程1.1、性能差异2、更新过程2.1、buffer pool2.2、change buffer2.3、何时会merge?2.4、change buffer的好处2.5、何时使用change buffer?2.6、插入记录流程3、索引选择的总结二、change buffer和redo log三、问题一、普通索引和唯一索引的选择如字段k上的值都不重复,普通索引和唯一索引有何差异?1、查询过程如使用SELEC.
2020-12-19 18:32:19
289
1
原创 【读书笔记】MySQL实战45讲——事务隔离
该课程来自极客时间《MySQL实战45讲》文章目录视图快照快照的实现方式当前读事务的可重复读的能力是怎么实现的?读提交与可重复读的区别问题如果是可重复读隔离级别,事务启动会创建视图read-view,保证数据在整个事务中一致。但是,当一个事务更新一行,另一个事务恰好拥有这行的行锁,那它就会进行等待状态。举个例子。mysql> CREATE TABLE `t` ( `id` int(11) NOT NULL, `k` int(11) DEFAULT NULL, PRIMARY .
2020-12-17 00:00:06
195
原创 【读书笔记】MySQL实战45讲——行锁
课程来自极客时间《MySQL实战45讲》文章目录一、行锁1、两阶段锁2、死锁和死锁检测2.1、死锁解决策略2.2、如何解决热点行更新导致的性能问题?三、问题MySQL的行锁是在引擎层由各个引擎自己实现的,如InnoDB,而MyISAM不支持行锁,这就代表并发控制只能用到表锁,表锁在同一张表上同一时刻只能有一个更新,这影响到业务并发度。一、行锁行锁就是针对数据表中行记录的锁1、两阶段锁在InnoDB事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个.
2020-12-08 23:29:04
204
原创 【读书笔记】MySQL实战45讲——全局锁和表锁
课程来自极客时间《MySQL实战45讲》文章目录一、全局锁二、表级锁1、表锁2、MDL三、问题一、全局锁全局锁就是对整个数据库实例加锁实现方法Flush tables with read lock使用这个命令让整个库处于只读状态,其他线程的以下语句会被阻塞:数据更新语句(数据的增删改)、数据定义语句(包括建表、修改表结构等)和更新类事务的提交语句。使用场景典型场景:做全库逻辑备份。即把整库每个表都select出来存成文本。风险:1.如果在主库备份,在备份期间不能更新,业务停摆2..
2020-12-07 22:29:06
215
原创 【读书笔记】MySQL实战45讲——索引
课程来自极客时间《MySQL实战45讲》一、何为索引索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。1、索引的常见模型实现索引的方式有多种,常见、简单的数据结构有以下三种1.1、哈希表哈希表是一种以键-值(key-value)存储数据的结构,我们只要输入待查找的值即key,就可以找到其对应的值即Value哈希的思路是,把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置。若有多个key值经过哈希函数运算后得到同一个值,会使用拉链法,也.
2020-12-03 23:14:43
277
原创 【读书笔记】MySQL实战45讲——事务隔离
课程来自极客时间《MySQL实战45讲》文章目录一、事务1.特性2.事务隔离级别3.可能导致的问题“不可重复读”和“幻读”二、案例理解不同隔离级别1.隔离级别实现原理2.如何修改默认隔离级别三、事务隔离的实现四、事务的启动方式五、问题一、事务1.特性原子性:一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做一致性:事务必须是数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据,对.
2020-12-02 22:12:29
223
原创 【读书笔记】MySQL实战45讲——日志系统
文章目录redo log:InnoDB引擎特有crash-safe如何保证提交记录不丢失?binlog:Server层特有如何让数据库恢复到半个月内任意一秒的状态?为什么binlog没有crash-safe的功能?redolog与binlog的不同两阶段提交两阶段提交的重要性在两阶段提交的不同时刻,MySQL异常重启会出现什么现象崩溃恢复时的判断规则MySQL怎么知道binlog是完整的?redo log 和 binlog是怎么关联起来的?能不能只用redo log,不要binlog?问题redo lo
2020-12-01 22:57:14
426
1
原创 LeetCode—每日一题:在排序数组中查找元素的第一个和最后一个位置(二分法)
在排序数组中查找元素的第一个和最后一个位置(中等)2020年12月1日题目来源:力扣解题使用二分法找到目标值所在索引,两个while循环分别往前往后推出第一个不是目标值的索引class Solution { public int[] searchRange(int[] nums, int target) { if(nums.length==0) return new int[]{-1,-1}; int left=0; int right=n
2020-12-01 21:44:11
187
2
原创 【读书笔记】MySQL实战45讲—基本架构
课程来自极客时间《MySQL实战45讲》文章目录Server层连接器全部使用长连接的弊端?解决方案查询缓存为什么大多数情况下不要使用查询缓存?如何指定查询缓存?分析器优化器执行器存储引擎层问题MySQL可分为Server层和存储引擎层两部分Server层Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。连接器连接器负责跟客户.
2020-11-30 22:54:49
202
原创 LeetCode—每日一题:根据数字二进制下1的数目排序(暴力+巧妙)
根据数字二进制下1的数目排序(简单)2020年11月6日题目来源:力扣解题暴力通过重写Collections.sort方法进行条件排序,关键是进行1数目的计算,这里我使用了按位计算,效果差。class Solution { public int[] sortByBits(int[] arr) { List<Integer> list=new ArrayList<>(); for(int i:arr)
2020-11-06 11:23:30
104
原创 LeetCode—每日一题:单词接龙(BFS)
单词接龙2020年11月5日题目来源:力扣解题一开始使用DFS进行深度遍历,发现进进出出的太花时间,且做出来之后超时了。改用BFS进行遍历,逐层进行搜索,这里是一个图的结构了,且是双向图思路来自这class Solution { public int ladderLength(String beginWord, String endWord, List<String> wordList) { //广度遍历 //先把列表转成集合
2020-11-05 15:36:16
200
2
原创 LeetCode—每日一题:求根到叶子节点数字之和(递归)
求根到叶子节点数字之和(中等)2020年10月29日题目来源:力扣解题通过递归,记录获得根到当前节点的取值,当某个节点的左右子节点为空则代表为叶子节点,那么加入到结果值中。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x;
2020-10-29 13:40:48
163
1
原创 LeetCode—每日一题:独一无二的出现次数(map+set)
独一无二的出现次数(简单)2020年10月28日题目来源:力扣解题自然的,会想统计数组中每个数字出现的次数,这里我使用了HashMap,HashMap中的getOrDefault方法真香。拿出数字出现次数后,可以用一个HashSet来存,如果没有重复的,那么set和map的大小相同,如果重复,那么set会比map小。class Solution { public boolean uniqueOccurrences(int[] arr) { //计算每个数的出现次数
2020-10-28 11:42:11
135
原创 LeetCode—每日一题:数组中的最长山脉(遍历)
数组中的最长山脉(中等)2020年10月25日题目来源:力扣解题找到最近的第一个左山脚,上山下山后找到右山脚,不断更新最长山脉值class Solution { public int longestMountain(int[] A) { int len=A.length; int res=0; int left=0; while(left+2<len){ //右山脚初始化
2020-10-25 22:36:36
118
原创 LeetCode—每日一题:视频拼接(动态规划)
视频拼接(中等)题目来源:力扣2020年10月24日解题class Solution { public int videoStitching(int[][] clips, int T) { //开辟一个跟T一样大的dp数组 int[] dp=new int[T+1]; //填充dp数组 Arrays.fill(dp,Integer.MAX_VALUE-1); dp[0]=0; //从i等于1开
2020-10-24 17:25:47
913
1
原创 Java线程池
什么是线程?线程是指进程中的一个执行流程,一个进程可以运行多个线程。比如java.exe进程可以运行很多线程。线程总是输入某个进程,进程中的多个线程共享进程的内存。线程的创建/获取方式1.继承Thread类2.实现Runnable接口3.实现Callable接口4.线程池获取实现Callable接口和实现Runnable接口有什么不同?相同点:两者都是接口;两者都可用来编写多线程程序;两者都需要调用Thread.start()启动线程;不同点:两者最大的不同点是:实现Callabl
2020-10-16 11:24:57
161
1
原创 LeetCode—面试题:栈排序(辅助栈)
栈排序(中等)2020年10月14日题目来源:力扣解题辅助栈来存放主栈比push的值大的元素class SortedStack { private Stack<Integer> st1; private Stack<Integer> st2; public SortedStack() { st1=new Stack<>(); st2=new Stack<>(); }
2020-10-15 00:04:12
186
原创 LeetCode—面试题:三合一(数组)
三合一(简单)2020年10月14日题目来源:力扣解题题目意思是这样的,用一个数组来存放三个栈的内容,以stackNum来代表是哪个栈,stackSize就是每个栈的大小,这也决定了我们这个数组的大小为stackSize*3class TripleInOne { private int[] arr; //装栈数据的数组 private int stackSize; //栈的容量 private int[] stackTop; //三个栈的栈顶指针 pu
2020-10-14 15:57:16
363
1
原创 LeetCode—面试题:环路检测(快慢指针)
环路检测(中等)2020年10月14日题目来源:力扣解题链表判断有环容易想到用快慢指针,但这道题需要判断环的入口首先用快慢指针判断是否有环,如果有环,那么把慢指针指向头节点,与快指针同时移动,找第一个相同的节点,那就是环入口节点数学推导如下:来自题解/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x)
2020-10-14 15:53:00
181
1
原创 LeetCode—面试题:回文链表(反转链表+比较)
回文链表(简单)2020年10月8日题目来源:力扣解题如果是回文,那么前半部分链表反转后的链表应该与后半部分的链表完全一致反转链表+比较反转链表方法可看这里,首先算出链表长度,然后取一半进行反转,反转后需要判断长度的奇偶,奇数则省略中间一个数,偶数照常计算,前后两链表遍历对比,不同则返回false/** * Definition for singly-linked list. * public class ListNode { * int val; * ListN
2020-10-08 23:38:02
319
原创 LeetCode—面试题:分割链表(头插法)
分割链表(中等)2020年10月1日题目来源:力扣解题头插法遍历找到比x小的节点,然后用后面的节点覆盖此节点,把该节点插到最前面/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public Lis
2020-10-01 10:44:47
229
原创 浅谈CAS底层原理和ABA问题
文章目录概述CAS底层原理CAS缺点ABA问题解决ABA问题AtomicStampedReference总结概述CAS的全称是Compare-And-Swap,它是CPU并发原语它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令,这是一种完全依赖于硬件的功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语
2020-09-30 23:12:25
692
原创 浅谈Volatile三大特性
文章目录JMMJMM是什么特性Volatile可见性原子性禁止指令重排Volatile针对指令重排做了什么?JMMJMM是什么JMM是Java内存模型,也就是Java Memory Model,简称JMM,本身是一种抽象的概念,实际上并不存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式JMM关于同步的规定:线程解锁前,必须把共享变量的值刷新回主内存线程解锁前,必须读取主内存的最新值,到自己的工作内存加锁和解锁是同一把锁
2020-09-30 22:29:31
874
原创 JVM之垃圾回收(1-概述+算法)
文章目录1.概述什么是垃圾大厂面试题为什么需要GC早期垃圾回收Java垃圾回收机制2. 垃圾回收相关算法2.1 标记阶段:法1_引用计数法 (java没有采用)2.2 标记阶段:法2_可达性分析算法2.3 对象的finalization机制2.4 清除阶段:法1_标记-清除算法2.5 清除阶段:法2_复制算法2.6 清除阶段:法3_标记-压缩(整理,Mark-Compact)算法2.7 小结2.8 分代收集算法2.9 增量收集算法、分区算法1.概述什么是垃圾Java = (C++)–什么是垃圾(
2020-09-29 23:57:16
1696
原创 LeetCode—面试题:移除重复节点(哈希集合)
移除重复节点(简单)2020年9月29日题目来源:力扣解题哈希集合记录非重复节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public ListNode removeDuplicateNod
2020-09-29 09:24:48
235
原创 JVM之字符串常量池StringTable
文章目录1.String的基本特性2.String的内存分配3.String的基本操作4.字符串拼接操作5.intern()的使用new String("ab")会创建几个对象,new String("a")+new String("b")呢关于String.intern()的面试题总结String的intern()的使用6.StrtingTable的垃圾回收7.G1中的String去重操作1.String的基本特性String:字符串,使用一对""引起来表示。String sl = “hell
2020-09-27 17:30:04
514
原创 JVM之执行引擎
文章目录执行引擎概述Java代码编译和执行过程什么是解释器( Interpreter),什么是JIT编译器?为什么说Java是半编译半解释型语言?机器码、指令、汇编语言机器码指令指令集汇编语言高级语言字节码C、C++源程序执行过程解释器JIT编译器HotSpot VM 为何解释器与JIT编译器共存热点代码及探测方式方法调用计数器热度衰减回边计数器HotSpot VM 可以设置程序执行方式HotSpot VM 中的JIT分类C1和C2编译器不同的优化策略执行引擎概述执行引擎是Java虚拟机的核心组成部
2020-09-27 17:12:14
495
1
原创 JVM之运行时数据区(对象的实例化内存布局与访问定位+直接内存)
1.对象的实例化1.1 创建对象的方式new最常见的方式变形1 : Xxx的静态方法变形2 : XxBuilder/XxoxFactory的静态方法Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是publicConstructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求使用clone() :不调用任何构造器,当前类需要实现Cloneable接口,实现clone()使用反序列化:从文
2020-09-26 23:44:35
124
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人