自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mock&Mockito使用手册

Mock&Mockito使用手册

2022-10-18 00:01:36 1478 1

原创 《Java并发编程的艺术》知识点

目录一 并发编程挑战1.上下文切换2.死锁二 并发机制底层实现原理1.volatile原理2.synchronized原理3.原子类实现原理CAS存在的三大问题三 内存模型1.指令重排四 并发编程基础1.概念2.优先级3.线程状态4.Daemon线程5.基本操作6.线程通信五 锁1.Lock锁2.队列同步器 AbstractQueuedSynchronizerAQS实现分析1.同步队列2.独占式同步状态获取与释放3.共享式同步状态获取与释放4.独占式超时获取同步状态3.重入锁4.读写锁 ReentrantR

2021-11-28 15:38:53 798

原创 黑马#Elastic-Job分布式任务调度

目录1.概述1.1 什么是任务调度基础实现方法1.2 分布式任务调度1.3 Elastic-Job介绍2.快速入门2.1 环境搭建2.2 代码实现2.3 工作原理整体架构ZK作用3.SpringBoot开发分布式任务3.1 环境搭建3.2 作业分片1.概述1.1 什么是任务调度任务调度:系统为了自动完成热定任务,在约定的特定时刻去执行任务的过程基础实现方法1)多线程方式实现:2)JDK提供:Timer方式实现(1个Timer对应1个线程,实际上是多线程去执行)3)ScheduledExec

2021-11-27 18:38:29 798

原创 《实战Java高并发程序设计》知识点

【重点】基础概念(进程,线程)同步方法:关键字 + 重入锁原理线程池原理,常用比较锁优化 + 并发策略

2021-11-19 00:15:39 250

原创 L13:MySQL - 性能与SQL优化2

【目录】 1.MySQL 事务与锁* 2.DB 与 SQL 优化* 3.常见场景分析* 4.总结一 事务与锁事务特性 ACIDAtomicity: 原子性, 一次事务中的操作要么全部成功, 要么全部失败Consistency: 一致性, 跨表、跨行、跨事务, 数据库始终保持一致状态solation: 隔离性, 可见性, 保护事务不会互相干扰, 包含4种隔离级别Durability:, 持久性, 事务提交成功后,不会丢数据。如电源故障, 系统崩溃InnoDB 引擎:双写缓冲区、

2021-09-20 16:19:25 185

原创 L12:MySQL - 性能与SQL优化1

【目录】1.再聊聊性能优化2.关系数据库 MySQL3.深入数据库原理4.MySQL 配置优化*5.数据库设计优化*6.总结一 性能优化性能优化角度:高可用高性能稳定性吞吐量一定要结合具体业务再探性能优化!二 MySQL关系型数据数据库E-R图数据库范式第一范式(1NF):关系 R 属于第一范式,当且仅当R中的每一个属性A的值域只包含原子项(每一列都是原子列)第二范式(2NF):在满足 1NF 的基础上,消除非主属性对码的部分函数依赖第三范式(3NF):在满足

2021-09-18 01:14:25 161

原创 L11:Java框架3 - 常用工具

【目录】1.Java8 Lambda*2.Java8 Stream*3.Lombok4.Guava5.设计原则*6.设计模式*7.单元测试*8.第11课总结回顾与作业实践一 Lambda 表达式函数式接口分类@FunctionalInterface(可查看源码实现)Predicate 有参数、条件判断Function<T, R> 有参数、有返回值Consumer 无返回值Supplier 无参数、有返回值二 Stream三 Lombok四 Guav五

2021-09-07 21:59:45 302

原创 L10:Java框架2 - SpringBoot

【目录】1.从 Spring 到 Spring Boot2.Spring Boot 核心原理*3.Spring Boot Starter 详解*4.JDBC 与数据库连接池*5.ORM-Hibernate/MyBatis*6.Spring 集成 ORM/JPA*7.Spring Boot 集成 ORM/JPA8.第 10 课总结回顾与作业实践

2021-09-07 00:13:18 582 6

原创 L9:Java框架1 - Spring

【目录】1.Spring 技术发展2.Spring 框架设计*3.Spring AOP 详解*4.Spring Bean 核心原理*5.Spring XML 配置原理*6.Spring Messaging 等技术7.第9课总结回顾与作业实践一 技术发展技术的创新和发展都是为了解决一类问题二 框架设计Spring Framework 6大模块三 Spring AOP详解循环依赖问题如何处理?打破依赖 / 超时推出机制AOP两种方式字节码增强技术四 Spring Bea

2021-09-05 22:11:12 286

原创 L8:Java并发3

【目录】1.常用线程安全类型*2.并发编程相关内容3.并发编程经验总结*4.并发编程常见面试题*5.第8课总结回顾与作业实践一 线程安全类型基础数据类型与集合类ArrayList注意ArrayList在删除时应该从尾至头删除,因为从头删除会有元素位置移动,产生异常LinkedList线程安全的方法CopyOnWriteArrayList写操作删除元素读HashMap注意:升级版本时Key的顺序可能会发生变化,比如原系统使用Key-Value拼接成Redi

2021-09-02 01:11:00 128

原创 L7:Java并发2

1. Java 并发包(*JUC)2. 到底什么是锁3. 并发原子类*4. 并发工具类详解*5. 第 7 课总结回顾与作业实践一 Java并发包JDK核心库的包有哪些?java.lang.* 最基础,Integer/Stringjava.io.* IO读写,文件操作java.util.* 工具类,集合/日期java.math.*java.net.*java.rmi.* Java内置的远程调用java.sql.*javax.* Java拓展APIsun.* sun的JDK拓展

2021-09-02 00:14:17 94

原创 L6:Java并发1

【目录】1.多线程基础2.Java 多线程*3.线程安全*4.线程池原理与应用*5.第 6 课总结回顾与作业实践一 基础多线程产生的原因:摩尔定律失效 -> 多核心 + 分布式多CPU核心意味着OS可以操作更多并行计算资源OS是以线程作为基本的调度单元进程与线程区别二 Java多线程创建线程的四种方式守护线程注意执行结果中线程的run方法体内代码并没有执行,因为将该线程设置为Deamon状态public static void main(String[] args)

2021-08-31 00:43:31 110

原创 L5:Netty原理与API网关

[目录]1. 再谈谈什么是高性能 2. Netty 如何实现高性能3. Netty 网络程序优化4. 典型应用:API 网关5. 自己动手实现 API 网关6. 第 5 课总结回顾与作业实践1.高性能高并发 + 高吞吐量 | QPS(每秒请求次数) TPS(每秒交易数) | + 低延迟响应时间:用户角度延迟时间:业务处理时间缺点:系统复杂度 + 建设维护成本 + 故障的破坏性应对策略:容量 + 爆炸半径 + 工程积累与改进2.Netty概览从事件处理机制到Reactor模

2021-08-24 00:19:20 431

原创 L4:NIO模型与Netty入门

【目录】1.Java Socket编程*:如何基于Socket 实现 Server2.深入讨论IO*: Server 处理时到底发生了什么3.IO模型与相关概念*:怎么理解 NIO4.Netty框架简介:什么是Netty5.Netty使用示例*:如何使用Netty实现NIO6.总结Java Socket编程IP:标识主机唯一性端口:标识主机上对应的不同进程or服务Java实现一个最简单的HTTP服务器(三种方式)// 单线程处理socketpublic class SocketH

2021-08-22 16:55:01 166

原创 【读书笔记】深入理解Java虚拟机

JVM 组成程序计数器:当前线程执行的字节码行号指示器(唯一一个在Java虚拟机规范中不会出现OOM的区域)虚拟机栈:线程私有,生命周期与线程相同;虚拟机栈描述的是Java方法执行的内存模型: 每个方法在执行的同时都会创建一个栈帧( Stack Frame[1]) 用于存储局部变量表、 操作数栈、 动态链接、 方法出口等信息。 每一个方法从调用直至执行完成的过程, 就对应着一个栈帧在虚拟机栈中入栈到出栈的过程;两种异常:1️⃣线程请求栈深度大于虚拟机允许深度 - StackOverFlow

2021-08-22 01:12:38 171

原创 设计模式(创建型)之工厂模式

工厂模式分类简单工厂模式(静态工厂模式)抽象工厂模式工厂方法模式简单工厂模式简单工厂模式也叫静态工厂模式,工厂类一般使用静态方法通过接收的参数不同来返回不同的对象实例但是对增加新产品无能为力,不增加代码无法扩展public class CarFactory { public static Car creatCar(String name) { Car car = null; if(name.equals("benz")) {

2021-08-16 08:41:07 138

原创 L3:JVM核心技术(三):调优分析与面试经验(待补充)

【目录】1. GC 日志解读与分析 *2. JVM 线程堆栈数据分析3. 内存分析与相关工具*4. JVM 问题分析调优经验*5. GC 疑难情况问题分析6. JVM 常见面试问题汇总*7. 第 3 课总结回顾与作业实践

2021-08-15 16:33:35 125

原创 L2:JVM核心技术(二):工具与GC策略

【目录】1. JDK 内置命令行工具*2. JDK 内置图形化工具*3. GC 的背景与一般原理4. 串行 GC/并行 GC*( Serial GC/Parallel GC)5. CMS GC/G1 GC*6. ZGC/Shenandoah GC7. 总结回顾JDK内置命令行工具JVM命令行工具工具简介javaJava 应用的启动程序javacJDK 内置的编译工具javap反编译 class 文件的工具javadoc根据 Java 代码和

2021-08-15 16:19:57 212

原创 L1:JVM核心技术(一):基础知识

【目录】1.JVM基础知识2.字节码技术(源码与编译.class转换)3.JVM类加载器*4.JVM内存模型*5.JVM启动参数基础知识Java 是一种面向对象、静态类型、编译执行,有 VM/GC 和运行时、跨平台的高级语言静态语言和动态语言区别区别一:静态语言在编译时变量的数据类型即可确定,多数静态类型语言在使用变量之前必须申明数据类型区别二:静态语言编译时进行类型匹配检查,所以不能给变量赋不同类型值;动态类型变量类型在运行期可变,意味着对象的多态性区别三:静态语言封闭,

2021-08-15 12:49:25 248

原创 Git merge冲突通过stash解决

git merge --abort // git有冲突,取消合并代码git status // 查看在你上次提交之后是否有对文件进行再次修改git stashgit reset --hard origin/分支名git loggit stash apply

2021-07-18 23:54:53 705

原创 Git基础指令(精简版)

基本指令设置全局用户名、邮箱和密码$ git config --global user.name "Your Name"$ git config --global user.email "[email protected]"初始化仓库git init文件添加到暂存区git add .文件提交到本地仓库git commit -m "commit description"查看当前提交状态git statusgit diff *.txt // 查看文件修改内容查看历史提交gi

2021-07-18 23:42:11 111

原创 63.【动态规划】股票的最大利润

题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。分析动态规划,状态转移方程为:代

2020-09-11 20:46:04 442

原创 59.【单调队列】队列的最大值

题目请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”][[],[1],[2],[],[],[]]输出: [null,null,null,2,1,2]

2020-09-11 19:45:54 254

原创 56.【哈希】数组中数字出现的次数 I

题目一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]代码实现public int[] singleNumbers(int[] nums) { int a[] = new int[2];

2020-09-11 16:18:14 213

原创 53.【二分查找】II. 0~n-1中缺失的数字

题目一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。示例 1:输入: [0,1,3]输出: 2示例 2:输入: [0,1,2,3,4,5,6,7,9]输出: 8分析已知0~n-1已排序数组,所以键值相同。取中间位置数字比较是否与数字位置值相同相同向中间数字后方查找不通向中间数字前方查找代码实现 public int missingNumber(int[] nums

2020-09-11 15:40:24 394

原创 53.【二分查找/递归】在排序数组中查找数字 I

题目统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0分析代码实现class Solution { int cnt = 0; public int search(int[] nums, int target) { helper(nums,target,0,nums.length-1); retur

2020-09-11 15:34:56 173

原创 48.【动态规划】最长不含重复字符的子字符串

题目:最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含从’a’到’z’的字符。例如,在字符串中"arabcacfr",最长非重复子字符串为"acfr",长度为4。分析主要思路:使用动态规划,记录当前字符之前的最长非重复子字符串长度f(i-1),其中i为当前字符的位置。每次遍历当前字符时,分两种情况:1)若当前字符第一次出现,则最长非重复子字符串长度f(i) = f(i-1)+1。2)若当前字符不是第一次出现,则首先计算当前字

2020-09-11 09:59:55 2022

原创 47.【动态规划】礼物的最大价值

题目(DP模板题)在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?代码实现 public int maxValue(int[][] grid) { int row = grid.length; int col = grid[0].length; int [][]dp = new in

2020-09-10 21:08:52 160

原创 07.【二叉树】根据前序和中序遍历重建二叉树

问题输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。分析(1)先根据前序遍历的第一个节点root找到分界点i(2)将前序遍历数组和中序遍历数组按照分界点进行划分(3)递归代码实现 public TreeNode buildTree(int[] preorder, int[] inorder) { if(preorder.length == 0) return null; in

2020-09-10 15:47:08 132

原创 06.【单链表】反转单向链表

问题单链表的反转分析代码实现public static ListNode reserve(ListNode head){ if(head == null) return null; ListNode pre = null; ListNode next = null; while(head != null){ next = head.next; head.next = pre; pre = head; head = next; } return

2020-09-10 15:39:49 96

原创 【概览】Spring框架组成

Spring框架概述以及Spring中基于XML的IOC配置Spring中基于注解的IOC和ioc案例Spring中的aop和基于XML以及注解的AOP配置Spring中的jdbcTemplate以及Spring中的事务配置

2020-09-08 18:44:49 127

原创 30.【栈】包含min函数的栈+栈的压入和弹出

题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。分析利用辅助栈实现数据保存代码实现class MinStack { Stack<Integer> A, B; public MinStack() { A = new Stack<>(); B = new Stack<>(); } public vo

2020-08-30 16:06:28 111

原创 28.【二叉树】对称二叉树

代码实现 public boolean isSymmetric(TreeNode root) { return (root == null)?true:recur(root.left,root.right); } public boolean recur(TreeNode l,TreeNode r){ if(l == null&&r == null) return true; if(l == null||r == null|.

2020-08-30 15:51:41 119

原创 26.【二叉树】树的子结构

题目输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:给定的树 B:返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。分析(1)在树A中找到树B的根节点位置;(2)判断树A和树B之间结构是否相同;代码实现public boolean isSubStructure(TreeNode A, TreeNode B) { if(B == null||A

2020-08-30 14:08:02 117

原创 18_2.【链表】删除链表中重复节点

题目删除链表中重复节点代码实现public class DeleteDuplication { /** * 删除链表中的重复节点 * 1、新建一个头节点,以防止第一个节点被删除。 * 2、保存当前节点的前一个节点,循环遍历整个链表,如果当前节点的值与下一个节点的值相等 * 则将当前节点的值与 next.next节点的值比较,直到不相等或者null为止, * 最后将当前节点的前一个节点 pre指向最后比较不相等的节点 * 3、如果当前节点与next节点不相等,则直接

2020-08-29 14:40:11 176

原创 18.【单链表】删除链表节点

题目给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。代码实现public ListNode deleteNode(ListNode head, int val) { if(head.val == val) return head.next; ListNode f = head.next; ListNode l = head; while(f!=null){

2020-08-28 08:55:45 188

原创 17.【大数问题】打印1到最大的n位数

题目变体:大数相加思路1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;3.从头遍历,把两个正整数的每一位都相加,并加上进位;4.最高位有进位则补上进位;5.逆序输出;public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s1 = sc.nextLine();

2020-08-28 08:44:44 102

原创 16.【快速幂】数字的整数次方

(一)题目1:快速幂实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。分析(数学前提)(a+b) mod p = (a mod p + b mod p) mod p(a*b) mod p = (a mod p * b mod p) mod p举例代码实现public double myPow(double x, int n) { double res = 1.0

2020-08-27 15:48:52 131

原创 14.【求导+动态规划+贪心】减绳子

题目给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。分析(1)数学推导式解决推论1:如果把整数n分为两部分,那么这两部分的值相差越小乘积越大。举例: x*y = xy; (x-1)*(y+1)=xy-(y-x)-1;

2020-08-27 13:20:12 165

原创 12.【深度优先搜索+广度优先搜索】机器人的运动范围

【题目】地上有一个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。请问该机器人能够到达多少个格子?【分析】(注)可避免重复计算,上下左右方向可以缩减为向下和向右方向运动深度优先搜索p

2020-08-27 10:22:14 218

空空如也

空空如也

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

TA关注的人

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