自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MyBatisPlus入门

依赖:dependencygroupIdgroupIdartifactIdartifactIdversion>{version}</version</dependency配置:## 去除logobannerfalse## 日志输出sql语句log-implorgapacheibatisloggingstdoutStdOutImpl简单定义对象,dao,以及service继承BaseMapper后可使用一些简单的操作。

2023-08-22 13:54:26 124

原创 ForkJionPool线程池

RecursiveAction 和 RecursiveTask ,ForkJoinTask 有 两 个 重 要 的 子 类。, RecursiveTask 任务可以带有返回值。它们的区别在于 RecursiveAction。的处理结果进行 join()合并为大任务的结果。形成最后这 1000 个数据的处理结果。. 把一个大任务调用 fork(), 但是我们不具备处理1000。个数据, 可以把这 1000。线程池中最常用 的方法是。次的处理结果进行合成,方法分解为若干小的任务。

2023-08-18 10:47:47 116

原创 线程池-------

线程池就是有效使用线程的一种常用方式:线程池内部可以预先创建一定数量的工作线程,客户端 代码直接将任务作为 一个对象提交给线程池,线程池将这些任务缓存在工作(阻塞)队列中,线程池的工作线程不断的从阻塞队列中取出任务并执行。java.util.concurrent Interface Executuor(基本的线程池接口)方法: void execut(Runnable command) //线程池提交任务。1、创建与启动线程的开销,创建线程还需要额外的分配栈空间,启动会有线程调度开销;

2023-08-17 17:26:45 104

原创 线程异常处理

如果线程发生异常,JVM会调佣私有的dispatchUncaugthException()方法,在该方法中调佣getUncaugthExceptionHandler().uncaugthException(this,e);当jvm退出的时候会执行hook线程,经常在程序启动的时候创建 XXXX.lock文件,用这个文件校验程序是否启动,在程序(JVM)退出时,删除该文件,在Hook线程中,防止重新启动线程外,还可以做资源释放,尽量避免在Hook线程中进行复杂的操作。

2023-08-17 15:57:37 279

原创 ReentrantReadWriteLock读写锁

写锁是排他的,线程在修改共享数据前必须持有写锁,但是写锁只允许一个线程持有,当有个线程持有写锁时,其他锁无法获得相应的锁。读锁只是在读线程之间共享,任何一个线程持有读锁时,其他线程都无法获得写锁,保证了线程在读取数据期间,没有其他线程对数据进行更新,保证了读线程能读到数据的最新值,保证在读取数据期间共享变量不被修改。synchronized与Reentrantlock都为独占锁(排他锁),同一时间只允许一个线程执行同步代码块,可以保证线程的安全性,但是执行效率低。读写锁允许读读共享,读写互斥,写写互斥。

2023-08-16 17:17:34 47

原创 公平锁与非公平锁ReentrantLock

公平锁与非公平锁 大多数情况下,锁的申请都是非公的,当线程1与线程2都在请求锁A,当锁A可用时,系统只会从阻塞队列中随机选择一个线程,不能保证其公平性。非公平锁,系统会倾向于让一个线程再次获得已经持有的锁,这种分配策略是高效的但非公平公平锁会按照时间先后顺序保证先到先得,公平锁的这一特点不会让线程饥饿(排队的多了,可能调度器一直没有选中你),看起来很公平,但是要实现公平锁,必须要求系统维护一个有序队列,因此实现成本高,性能低,因此默认情况下默认锁是非

2023-08-16 11:20:19 112

原创 MySql与Redis数据一致性

在极端情况下,由于删除redis和更新数据库这两个操作并不是原子性的,所以这个过程中,如果有其他线程来访问,还是会存在数据不一致问题,如果仍需在极端情况下,保证数据一致性,就只能采用最终一次性方案(会存在短期数据不一致性)。在理想情况下,应用下次访问redis的时候,发现redis里面数据是空的,就从数据库里面加载,保存到redis中,那么数据就看起来是一致的。还可以通过读写锁来保证数据一致性,在数据更新时,其他任何请求都无法访问缓存中的数据,直到数据更新完毕。1、先更新数据库再更新缓存。

2023-08-14 21:27:27 36

原创 MySql索引

InnoDB聚集索引主键索引非聚集索引单列索引唯一索引多列索引。

2023-08-09 13:56:31 20

原创 MySql数据隔离个人理解

它保证了在同一个事务中多次读取相同记录的结果是一致的,所以解决了脏读和不可重复读问题,但未彻底解决幻读。事务中的修改,即使没有提交,对其他事务也都是可见的,由于可能造成脏读,所以在实际应用中一般很少使用。事物B操作:在事务A第2步操作时插入了一条X的记录,所以会导致A中第3步插入报错(违反了唯一约束)4、查询号码为X的记录,发现还是不存在(由于是可重复读,所以读取记录X还是不存在的)不可重复读:一个事务在执行的过程中对于一个读取操作多次,读取的结果不一样。2、查询号码为X的记录,不存在。

2023-08-09 08:54:00 31

原创 算法题:合并k个有序链表

【代码】算法题:合并k个有序链表。

2022-09-14 23:32:22 77 1

原创 链表中的节点每k个一组翻转

递归的思想,每次翻转k个位置的节点,然后将每次翻转的链表的头节点返回。

2022-09-14 23:08:01 152

原创 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)O(n),空间复杂度 O(1)O(1)。例如:给出的链表为 1\to 2 \to 3 \to 4 \to

import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; * } */public class Solution { /** * * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */ .

2022-04-10 20:27:52 1257

原创 leetcode 375. 猜数字大小 II

class Solution { public int getMoneyAmount(int n) { int[][] f = new int[n + 1][n + 1]; for (int i = n - 1; i >= 1; i--) { for (int j = i + 1; j <= n; j++) { int minCost = Integer.MAX_VALUE; .

2021-11-12 16:50:43 3370

原创 Leetcode k个逆序数组对

class Solution { public int kInversePairs(int n, int k) { final int MOD = 1000000007; int[][] f = new int[2][k + 1]; f[0][0] = 1; for (int i = 1; i <= n; ++i) { for (int j = 0; j <= k; ++j) {

2021-11-11 21:32:54 177

原创 Leetcode 495提莫攻击

public int findPoisonedDuration(int[] timeSeries, int duration) { int constandTime=0,countTime=0; for(int i=0;i<timeSeries.length;i++){ if(timeSeries[i]>=constandTime) { countTime+...

2021-11-10 20:06:09 60

原创 Leetcode祖玛游戏

class Solution { int INF = 0x3f3f3f3f; String b; int m; Map<String, Integer> map = new HashMap<>(); public int findMinStep(String a, String _b) { b = _b; m = b.length(); int ans = dfs(a, 1 << m)

2021-11-09 19:05:53 2408

原创 leetcode 299猜数字

class Solution { public String getHint(String secret, String guess) { int[] secretCountMap = new int[10], guessCountMap = new int[10]; int a = 0, b = 0; char[] sChars = secret.toCharArray(), gChars = guess.toCharArray(); .

2021-11-08 17:09:21 3659

原创 leetcode 598. 范围求和 II

class Solution { public int maxCount(int m, int n, int[][] ops) { int min_x=m,min_y=n; for(int[] is: ops){ min_x=Math.min(min_x,is[0]); min_y=Math.min(min_y,is[1]); } return min_x*min_y; }}.

2021-11-07 21:34:08 65

原创 leetcode 268丢失的数字

class Solution { public int missingNumber(int[] nums) { Arrays.sort(nums); int n = nums.length; for (int i = 0; i < n; i++) { if (nums[i] != i) { return i; } } return .

2021-11-06 21:59:16 62

原创 leetcode 1218. 最长定差子序列

//时间复杂度有要求class Solution { public int longestSubsequence(int[] arr, int difference) { int n=arr.length; int ans=0; HashMap<Integer,Integer> map=new HashMap<>(); for(int i=0;i<n;i++){ if(map.

2021-11-05 18:20:44 78

原创 leetcode 367 有效的完全平方数

class Solution { public boolean isPerfectSquare(int num) { double x0 = num; while (true) { double x1 = (x0 + num / x0) / 2; if (x0 - x1 < 1e-6) { break; } x0 = x1; .

2021-11-04 16:55:39 56

原创 leetcode 407接雨水

//没想清楚,看了解析才搞明白,先保存class Solution { public int trapRainWater(int[][] heightMap) { if (heightMap.length <= 2 || heightMap[0].length <= 2) { return 0; } int m = heightMap.length; int n = heightMap[0].

2021-11-03 20:37:35 55

原创 leetcode 237 删除链表中的节点

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public void deleteNode(ListNode node) { ListNode listNode = node.next; .

2021-11-02 21:10:22 53

原创 leetcode 575分糖果

//直接使用set数组class Solution { public int distributeCandies(int[] candyType) { Set<Integer> set = new HashSet<>(); for (int i : candyType){ set.add(i); } return Math.min(candyType.length / 2, set.

2021-11-01 18:45:20 50

原创 leetcode 500. 键盘行

//已知键盘每一行的字符,将参数字符串数组循环与键盘每行字符串进行比较对比即可class Solution { public String[] findWords(String[] words) { String oneLine = "qwertyuiop"; String twoLine = "asdfghjkl"; String threeLine = "zxcvbnm"; String[] stringList = new

2021-10-31 16:44:33 64

原创 leetcode 260 只出现一次的数字 III

给定一个整数数组nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按任意顺序返回答案。//只有两个元素,故返回的数组固定大小,并且其余元素均大于一次,嵌套循环查找就行// int [] num = new int[size]; 初始化// num.length 数组长度class Solution { public int[] singleNumber(int[] nums) { int count = 0...

2021-10-30 14:39:59 50

原创 leetcode 335路径交叉

根据题解分析写出来 适合看看,题目比较难 public boolean isSelfCrossing(int[] distance) { int n = distance.length; for (int i = 3; i < n; ++i) { // 第 1 类路径交叉的情况 if (distance[i] >= distance[i - 2] && distance[i - 1] <

2021-10-29 14:56:13 3170

原创 leetCode 301 删除无效括号

//先用栈来判断是否符合不符合在算出左右括号匹配的情况下的个数//再进行回溯public class solution { public static List<String> removeInvalidParentheses() { String s = "()())()"; List<String> list = new ArrayList<>(); if(judgeIsCompare(s)) .

2021-10-27 14:33:52 101

转载 Spring boot 学习(二)

1、建立maven项目,修改pom文件<!-- spring-boot-starter-parent 整合第三方常用框架常用信息 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter...

2019-04-11 22:00:50 98

转载 Spring boot 学习(一)

1、为什么用到spring boot?传统项目:整合ssm,考虑到配置文件、jar冲突问题、整合起来繁琐、打包方式:打包成一个war放入tomcat webaaps目录下进行2、什么是Springboot?是一个快速开发框架,能够帮助我们快速整合第三方常用框架(底层/原理:Maven依赖关系##Maven继承),完全采用注解化(使用注解化启动springmvc),简化xml配置,内...

2019-04-10 23:31:16 92

原创 二叉树-链表存储结构及其简单算法

适用于层次结构的数据(大部分算法用递归思想)#include &lt;stdio.h&gt;#define Max 100结构体typedef struct TNode{ int data; struct Node * lchild;//左孩子结点 struct Node * rchild;//右孩子节点}TNode; //先序遍历(/根结点-&gt;左孩子-&gt;右孩子)v...

2018-11-03 17:15:13 1663

原创 队列-链队及其简单算法

链队需注意的是结构体是两个,并且没有队满的情况入队时需注意:1、队空时入队,队头结点队尾结点同时等于入队新结点2、队不空时,队尾结点指向新结点出队时队不空的情况下先用一个新结点指向队头结点,然后需注意1、若队列中只存在一个结点(即队头结点等于队尾结点)需同时将队头队尾结点赋空==NULL2、若队列中存在多个结点(即队头结点不等于队尾结点),只需将队头结点指向下一个结点即可#inclu...

2018-11-02 23:48:46 3260

原创 队列-顺序(循环)队列及其简单算法

#include &lt;stdio.h&gt;#define Max 100//结构体typedef struct Queue{ int data[Max]; int front;//队头下标 int rear;//队尾下标}Queue;//初始化队列void init(Queue ** que){ (*que) = (Queue*)malloc(sizeof(Queue))...

2018-11-02 23:03:28 346

原创 栈-链栈及其算法

注意链栈没有栈满只有栈空的情况因为满足先进后出的特点采用头插法 先进的在后面,后进的在前面,故出栈为出头结点的next;#include &lt;stdio.h&gt;//结构体typedef struct Node{ int data; struct Node * next;}Node;//初始化void init(Node ** node){ (*node) = (N...

2018-11-02 22:43:41 670 1

原创 栈-顺序栈以及其算法

#include &amp;lt;stdio.h&amp;gt;#define Max 100//结构体typedef struct Stack{ int data[Max]; int top;}Stack;//初始化栈void init(Stack ** stack){//传入二级指针 (*stack) = (Stack*)malloc(sizeof(stack)); (*stack)-&amp;...

2018-11-02 21:45:21 312

原创 线性表-链表存储

//结构体typedef sturct Node{ int data; sturct Node * next;}//插入排序void function(Node * node){ Node * p = node-&amp;gt;next-&amp;gt;next; Node * pre; Node * c; Node * s; while(p!=NULL){ q = node;//*...

2018-11-01 23:49:44 96

原创 线性表—顺序存储结构

typedef sturct List{int data[Max];int length;}//递增有序void function(int arr1[],int n1,int arr2[],int n2,int c[]){int i,j,k = 0;for(i=0;j=0;i&amp;amp;amp;lt;n1 &amp;amp;amp;amp;&amp;amp;amp;amp; j&amp;amp;amp;lt;n2){//将两个数组进行循环对比if(arr

2018-11-01 20:15:34 86

转载 使用webmagic搭建一个简单的爬虫

刚刚接触爬虫,听说webmagic很不错,于是就了解了一下。webmagic的是一个无须配置、便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代码即可实现一个爬虫。这句话说的真的一点都不假,像我这样什么都不懂的人直接下载部署,看了看可以调用的方法,马上就写出了第一个爬虫小程序。以下是我学习的过程:首先需要下载jar:http://webmagic.io/do

2017-10-13 17:12:22 504

空空如也

空空如也

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

TA关注的人

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