自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 问答 (1)
  • 收藏
  • 关注

原创 leedcode-array

窗口中的最大值 单调队列 窗口中的众数 优先队列(排序) 使用 map 记录数出现的次数,在窗口移动的时候进行更新,同时加入优先队列,每次取得队列头部,比较其次数是否与map中一致,不一致,移除,一致,即为当前窗口的众数 分割,使得子数组的和的最大值最小(leedcode-410) 二分 ...

2021-05-07 16:12:43 96

原创 leedcode-二分查找

一 整体有序 leedcode35:搜索插入位置 leedcode34:查找元素的第一个位置和最后一个位置 小于target最后位置:nums[mid]==target -> right移动 -> return right 大于target起始位置:nums[mid]==target -> left移动 -> return left 等于target起始位置与终止位置与小于大于一致,仅需改变return即可 // 大于target的起始位置 p

2021-01-26 22:58:57 118

原创 leedcode-高频

1. 字典序的第k小数字(leedcode - 440) 分析(p当前位置): 指定前缀下的节点个数 如果第k个数字在当前前缀下,进一步寻找:pre *= 10, p++ 如果第k个数字不在当前前缀下:pre ++, p += count

2021-01-09 15:29:57 117

原创 leedcode-对列

1. 单调对列(leedcode - 239) class MonotonicQueue{ public LinkedList<Integer> list = new LinkedList<>(); // 添加元素,将小于num的全部删除 public void add(int num){ while(!list.isEmpty() && list.getLast() < num){ list.re

2020-11-01 11:24:24 154

原创 leedcode-二分查找

1. 搜索旋转排序数组(leedcode-33) 数组中不存在重复的元素 public int search(int[] nums, int target) { int left = 0; int right = nums.length - 1; int mid; while(left <= right){ mid = (left + right) / 2; if(num

2020-08-05 14:05:46 89

原创 leedcode-排序

public void buildMaxHeap(int[] nums, int length) { // 从最后一个非叶子节点依次往前进行遍历 for(int i = length/2 - 1; i >= 0; i--) { adjustDown(nums, i, length); } }

2020-07-29 13:40:02 95

原创 leedcode-并查集

并查集实现 parent:记录每个节点的父节点 size:记录每棵树的重量,目的是 union 后树依然保持平衡性 路径压缩:保证任意数的高度为常数 public class UF { // 连通分量个数 private int count; // 存储一个树 private int[] parent; // 记录树的重量(将小一些的树接到大一些的树下面) private int[] size; public UF(int n) { this.count = n

2020-06-17 21:09:24 146

原创 红黑树

前言 1. 红黑树的来源-23树 红黑树的来源讲解 2-3树是 B 树的特例(3阶 B 树),通过红黑节点来描述 2-3 树中的不同节点,使得程序更简洁 2. 红黑树RBT vs 平衡二叉树AVL AVL 左右子树高度相差不超过 1,RBT 左右子树高度相差不超过一倍(完美的黑色平衡) AVL 树比红黑树更加平衡,但 AVL 树在插入和删除时会存在大量的旋转操作(红黑树可以通过颜色,少做几次旋转) 红黑树 1. 性质 每一个节点都有一个颜色,要么为红,要么为黑 树的根节点为黑色 父子节点

2020-06-17 13:44:02 100

原创 leedcode-栈

括号的合法性 单括号 记录左右括号个数,当右括号个数大于左括号个数,返回 false 多括号 public boolean isValid(String s) { HashMap<Character, Character> map = new HashMap<>(); map.put('(', ')'); map.put('[', ']'); map.put('{', '}'); Stack<Character>

2020-06-16 01:10:47 108

原创 leedcode-链表

反转链表(leedcode-206) 创建一个 newHead,在头节点逐个插入 public ListNode reverseList1(ListNode head) { ListNode newHead = null; ListNode p1 = head, p2 = head; while(p1 != null) { p2 = p1.next; p1.next = newHead; newH

2020-06-15 14:06:03 98

原创 leedcode-贪心算法

区间调度 区间调度详解 跳跃游戏 leedcode-55 问题描述:给定一个非负整数数组,最初位于数组的第一个位置,数组中的每个元素代表你在该位置可以跳跃的最长长度,判断是否能够到达最后一个位置 思路1 从后往前遍历 public boolean canJump(int[] nums) { int last = nums.length-1; for(int i=nums.length-2; i>=0; i--) { if(nums[i]+i >

2020-06-14 21:53:24 233

原创 leedcode-双指针

双指针简介 分为两类: 快慢指针:主要解决链表中的问题 左右指针:主要解决数组 / 字符串中的问题 快慢指针 判断链表中是否含有环 借助哈希表(判断哈希表中是否含有当前节点) 使用快慢指针(快指针每次走两步,如果有环,二者会相遇) 已知链表中含有环,返回这个环的起始位置 思路: 先寻找快慢指针相遇的点 当二者相遇时,让其中一指针指向头节点,然后以相同的速度前进,再次相遇时所在的节点位置就是环开始的位置 证明: 第一次相遇,假设 slow 走了 k 步,则 fast 走了

2020-06-14 15:31:59 159

原创 leedcode-LRU

LRU缓存机制(leedcode-146) 题目描述: 设计和实现一个 LRU(最近最少使用)缓存机制;它应该支持以下操作:获取数据 get 和写入数据 put get(key):如果关键字存在于缓存中,则获取该关键字的值,否则返回 -1 put(key, value):如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间 时间复杂度:O(1) 方法一:自己实现 分析: put 和 get

2020-06-12 18:04:15 149

原创 leedcode-区间

最大不重叠子集(leedcode-435) 问题描述:求最大不重叠子集 采用贪心算法 解法 排序:按 end 排序 思想: 从区间集合中选择一个区间 x,这个 x 是当前所有区间中结束最早的( end 最小) 把所有与 x 区间相交的区间从集合中删除 重复步骤 1 和 2,直到集合为空 区间合并(leedcode-56) 问题描述:给出一个区间的集合,请合并所有重叠的区间 排序:按 start 排序 区间交集(leedcode-986) 问题描述:给定两个由一些闭区间组成的列表

2020-06-09 00:31:31 195

原创 leedcode-floodfill

构建框架 图的遍历 // (x, y) 为坐标位置 void fill(int x, int y) { fill(x - 1, y); // 上 fill(x + 1, y); // 下 fill(x, y - 1); // 左 fill(x, y + 1); // 右 } leedcode 颜色填充 问题描述:实现颜色填充功能,待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的横坐标为 sr 纵坐标为 sc。需要填充的新颜色为 new

2020-06-08 14:23:49 87

原创 leedcode-小知识

前缀和 问题描述:给定一个整数数组(含有负数)和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数 preSum[nums.length + 1]:记录 [0…i-1] 的和(必须记录 0) nums[i…j] = preSum[j+1] - preSum[i] 优化:借助哈希表,在记录前缀和的同时记录该前缀和出现的次数 ...

2020-06-07 23:57:52 142

原创 leedcode-滑动窗口

代码框架 public void slidingWindow(String s, String t) { HashMap<Character, Integer> need = new HashMap<>(); HashMap<Character, Integer> window = new HashMap<>(); for(char c : t.toCharArray()) { need.put(

2020-06-06 17:04:30 132

原创 leedcode-回溯

全排列 List<List<Integer>> ans = new ArrayList<>(); public List<List<Integer>> permutation(int[] nums){ List<Integer> track = new ArrayList<>(); backtrack(nums, track); return ans; } public void

2020-06-05 15:54:55 108

原创 leedcode-动态规划

标准套路 明确 状态 和 选择 明确dp数组的定义 根据选择,思考状态转移的逻辑 处理边界情况 最长回文子串(leedcode-5) 问题描述: 给定一个字符串 s,找到 s 中最长的回文子串。 dp数组: dp[s.length()][s.length()](记录 i 到 j 之间是否是回文,true/false) dp公式:dp[i][j] = dp[i+1][j-1] && s.charAt(i) == s.charAt(j); 边界:dp[i][i] = true; dp.

2020-05-24 15:47:00 672

原创 leedcode-二叉树

基本方法 由数组构造二叉树(null 用 0 表示) 先序,中序,后序,层次遍历(递归,迭代) 深度 public class TreeNode{ public int val; public TreeNode left; public TreeNode right; public TreeNode(int x){ val = x; } } 构建二叉树 public TreeNode createBinaryTree(int[] array, int in

2020-05-12 17:10:44 306

原创 SNN

LIF模型 LIF模型

2020-04-07 08:40:40 260

转载 Java集合

集合架构 集合与数组的区别 长度 内容 元素 数组 固定 基本类型或引用类型 同一种类型 集合 可变 引用类型 可以存储不同类型(一般存储同种类型) Collection集合的方法 集合分类 ...

2020-03-10 19:07:37 192

原创 docker

Docker简介 docker核心概念(镜像,容器,仓库)及基本操作 docker仓库 hub.docker.com c.163.com centos安装docker

2020-03-06 16:38:07 67

原创 linux固定ip

vi /etc/sysconfig/network-scripts/ifcfg-ens33 编辑文件内容 BOOTPROTO=“static”               # ip设置为静态:dhcp -> static ONBOOT=“yes”        &n...

2020-03-05 13:52:38 116

原创 springcloud

SpringCloud简介与5大常用组件

2020-02-29 11:44:48 206

原创 Java异常

异常体系 从责任角度看 Error属于JVM需要负担的责任 RuntimeException是程序应该承担的责任 Checked Exception可检查异常是Java编译器应该承担的责任 Error和Exception的区别 Error:程序无法处理的系统的错误,编译器不做检查;程序无法处理的错误 Exception:程序可以处理的异常,补货后可能恢复;程序可以处理的错误 ...

2020-02-04 12:48:00 81

原创 网络

TCP/IP TCP简介 OSI(概念型框架)的实现:TCP/IP 面向连接的,可靠的,基于字节流的传输层通信协议 将应用层的数据流分割成报文段并发送给目标节点的TCP层 数据包都有序号,对方收到则发送ACK确认,未收到则重传 使用校验和来检验数据在传输中是否有误 TCP Flags URG:紧急指针标志 ACK:确认序号标志 PSH:push标志 RST:重置连接标志 SYN...

2020-02-02 23:19:07 209

原创 Redis

一 缓存数据库 作用 实现了对热点数据的高速缓存,提高应用的响应速度,极大缓解后端数据库的压力 主流应用架构 图片 缓存中间件 Memcache : 代码层次类似Hash 支持简单数据类型 不支持数据持久化存储 不支持主从 不支持分片 Redis 数据类型丰富 支持数据磁盘持久化存储 支持主从 支持分片 二 Redis Redis为什么能这么快 1000...

2020-01-21 00:13:09 172

原创 java多线程与并发-原理

线程安全问题 主要诱因 存在共享数据(临界资源) 存在多条线程共同操作这些共享数据 解决-互斥锁 解决方案:同一时刻有且仅有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再对共享数据进行操作,引入互斥锁(Java中使用synchronized) 互斥锁的特性: 互斥性:即同一时间只允许一个线程持有某个对象锁 可见性:必须确保在锁被释放之前,对共享变量所做的修改,...

2019-12-23 22:29:38 166

原创 Java多线程与并发

进程和线程 进程是资源分配的最小单位,线程是CPU调度的最小单位 所有与进程相关的资源,都被记录在PCB中 进程是抢占处理机的调度单位;线程属于某个进程,共享其资源 线程只由堆栈寄存器,程序计数器和TCB组成 线程不能看做独立应用,而进程可看做独立应用 进程有独立的地址空间,相互不影响,线程只是进程的不同执行路径 线程没有独立的地址空间,多进程的程序比多线程程序健壮 进程的切换比线程的...

2019-12-22 23:34:10 89

原创 数据库-语法

Group by 满足“select 子句中的列名必须为分组列或列函数”,该条件只针对于同一张表成立 列函数对于group by子句定义的每个组各返回一个结果 将结果集存入临时表 Having 通常与group by子句一起使用 where过滤行,having过滤组 出现在同一sql的顺序:where > group by > having ...

2019-12-21 20:51:31 64

原创 数据库-锁

MySQL中的锁机制 MyISAM与InnoDB关于锁方面的区别 MyISAM MyISAM 默认用的是表级锁,不支持行级锁 不会出现死锁(MyISAM总是一次获得SQL语句所需要的全部锁。这也正是MyISAM表不会出现死锁(Deadlock Free)的原因) 在执行LOCK TABLES后,只能访问显式加锁的这些表,不能访问未加锁的表;同时,如果加的是读锁,那么只能执行查询操作,而不能...

2019-12-20 21:23:02 100

原创 数据库-索引

索引模块 索引 目的:快速查询数据 构成:主键,唯一键以及普通键等 索引数据结构: (1) 二叉查找树(每深入一层,进行依次I/O操作) (2)B-/B Tree(相比于二叉数每个节点能存储更多的索引) (3)B+ Tree(非叶子节点不携带数据,每个节点可以存储更多的索引) (4)Hash B+树更适合用来做存储索引: B+树的磁盘读写代价更低(每个节点可以存储更多的索引) B+...

2019-12-19 21:51:06 121

原创 GC

垃圾判断 对象被判定为垃圾的标准 没有被其他对象引用 判定对象是否为垃圾的算法 引用计数算法 概述 (1)通过判断对象的引用数量来决定对象是否可以被回收 (2)每个对象实例都有一个引用计数器,被引用则+1,完成引用则-1 (3)任何引用计数为0的对象实例可以当作垃圾收集 优点:执行效率高,程序执行受影响较小 缺点:无法检测出循环引用(两个对象相互引用)的情况,导致内存泄漏 可...

2019-12-19 00:08:17 196

原创 内存模型

JVM架构图 内存模型 程序计数器 当前线程所执行的字节码行号指示器(逻辑) 改变计数器的值来选取下一条需要执行的字节码指令 和线程是一对一的关系 对Java方法技术,如果是native方法则计数器值为Undefined 不会发生内存泄漏 虚拟机栈 Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(存储局部变量表,操作数栈,动态链接,方法出口等),当方法执行...

2019-12-17 18:17:05 148

原创 平台无关性

Compile once, run anywhere 为什么要先编译成字节码再解析成机器码 java的平台无关性(通过jvm) 为什么jvm不直接将源码解析成机器码 准备工作:每次执行需要各种检查(各种语法句法的检查) 兼容性:也可以将别的语言解析成字节码 JVM架构 反射 java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象...

2019-12-16 18:50:05 151

原创 detail

DataObject 对应数据库,建立实体类 ProductCategory ProductInfo OrderMaster OrderDetail SellerInfo Dao 使用 jpa ,对每个实体类建立 dao(repository) List item Service Controller ...

2019-12-06 00:30:07 164

原创 注解

常用 @SpringBootTest : 测试 @Slf4j : 日志 Entity @Entity @Data @DynamicUpdate : 动态更新:设置为true,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入到update语句中,默认false @Id : 主键由数据库自动生成(主要是自动增长型) @Generat...

2019-12-06 00:29:58 75

原创 sell

访问流程 nginx sell.com: location / { root /opt/data/wwwroot/sell; index index.html index.htm; } sell.com/sell/..: location /sell/ { proxy_pass htt...

2019-12-06 00:29:50 412

原创 1. 项目设计

一 技术要点 二 功能分析 三 部署架构 nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器

2019-12-06 00:29:35 127

空空如也

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

TA关注的人

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