- 博客(33)
- 收藏
- 关注
原创 字节面试题:求数组中比左边元素都大同时比右边元素都小的元素,返回这些元素的索引。要求复杂度O(N)
求数组中比左边元素都大同时比右边元素都小的元素,返回这些元素的索引。要求复杂度O(N)对于每个元素,如果它比左侧最大的值要大,同时比右侧最小的值要小,就满足条件。用两个数组维护,left_max[i] 表示原数组 [0, i) 的最大值,right_min[i] 表示原数组 (i, n) 的最小值。内循环就可以通过 left_max[i] < nums[i] && nums[i] < right_min[i] 来判断。public class Demo2 { pub
2021-08-09 19:30:47
1171
1
原创 笔试输入输出整理
输出System.out.printf() : 可以控制输出格式(浮点数、进制等)System.out.println() : 输出后换行System.out.print() : 输出不换行字符串和整数相互转换字符串转整数:String s="123";int i;第一种方法:i=Integer.parseInt(s);第二种方法:i=Integer.valueOf(s).intValue();整数转字符串:1.String s=""+i;2.String s=Integer.to
2021-05-08 17:13:11
346
原创 动态规划经典代码
目录一:0-1背包完全背包一:0-1背包描述:给你⼀个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两个属性。其中第 i 个物品的重量为 wt[i] ,价值为 val[i] ,现在让你⽤这个背包装物品,最多能装的价值是多少?dp[i][w] 的定义如下:对于前 i 个物品,当前背包的容量为 w ,这种情况下可以装的最⼤价值是 dp[i][w] 。//0-1背包//给你⼀个可装载重量为 W 的背包和 N 个物品,每个物品有重量和价值两//个属性。其中第 i 个物品的重量为 wt[i
2021-05-01 14:41:18
1185
原创 双重校验锁实现对象单例(线程安全)
//双重校验锁实现对象单例(线程安全)public class Singleton { private volatile static Singleton uniqueInstance; private Singleton(){ } public static Singleton getUniqueInstance(){ //先判断对象是否已经实例过,没有实例化过才进入加锁代码 if (uniqueInstance == null){
2021-04-08 22:11:37
173
原创 Leetcode总结:剑指offer(一)
这里写目录标题剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 05. 替换空格剑指 Offer 06. 从尾到头打印链表剑指 Offer 07. 重建二叉树剑指 Offer 09. 用两个栈实现队列剑指 Offer 10- I. 斐波那契数列剑指 Offer 10- II. 青蛙跳台阶问题剑指 Offer 11. 旋转数组的最小数字剑指 Offer 12. 矩阵中的路径(回溯法)剑指 Offer 03. 数组中重复的数字找出数组中重复的数字。在一个
2021-03-23 23:48:23
289
1
原创 Leetcode总结(持续更新):二叉树
目录前言二叉树的遍历前言二叉树是面试的常考题之一。前序遍历、中序遍历、后序遍历的递归和迭代方法都要掌握,层序遍历重点掌握。二叉树的遍历144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历...
2021-03-13 20:03:49
100
原创 Leetcode总结(持续更新):链表
目录定义链表生成链表输出链表链表中的加法题反转链表的题最后链表是大厂面试的常考题之一。掌握自定义ListNode的方法掌握生成ListNode的方法(从int数组或者char数组转为ListNode)掌握输出链表中每个节点的方法提升:掌握LinkedList中常用的方法,学会用自带链表解决问题提升:掌握常见List<*>和数组之间的转换方法。PS:用java的同学必备技能,因为实际面试时候如果给定输入输出类型,要会转换的方法。定义链表class ListNode{ i
2021-03-11 21:19:21
345
1
原创 操作系统:死锁
目录死锁原理可重用资源(可重复使用的资源)可消费资源(使用资源)死锁特征死锁处理办法死锁预防死锁避免死锁检测死锁恢复死锁原理死锁被定义为一组竞争系统资源或互相通信的进程间相互的“永久”阻塞。当一组进程中的所有进程都在等待一个事件(等待请求资源的释放),而只有在进程集合中的其他阻塞的进程才可以触发该事件,这时就称一组进程死锁。因为没有事件可以触发,故死锁是永久性的。资源通常分为两类:可重用资源和可消费资源可重用资源(可重复使用的资源)可重用资源是指一次只能供一个进程安全地使用,并且不会由于使用而耗
2021-03-10 21:28:36
164
原创 操作系统:磁盘调度算法和文件系统
目录磁盘调度算法1. 先来先服务算法(FCFS)First Come First Service2. 最短寻道时间优先算法(SSTF) Shortest Seek Time First3. 扫描算法(SCAN)电梯调度 距离+方向4. 循环扫描算法(C-SCAN)5. 单向扫描文件系统基本概念文件系统与文件文件系统的功能文件属性和文件头文件描述符虚拟文件系统虚拟文件系统的目标虚拟文件系统的功能:磁盘调度算法1. 先来先服务算法(FCFS)First Come First Service根据进程请求访
2021-03-10 09:53:06
356
原创 Leetcode总结:双指针
目录前言计算 X数之和 / X数之差前言双指针的思想非常重要,这是一种较低空间复杂度的算法。以下题目除了双指针还可以用其它解法,但是可以从复杂度角度分析与其他算法的优缺点。计算 X数之和 / X数之差1. 两数之和:解法很多,可以用暴力循环、HashMap,也可以使用双指针(排序+双指针,先备份一份数组,对原数组进行排序,找到目标数值,寻找备份里相同的数值,找到它们的下标),分析一下时间和空间复杂度。167. 两数之和 II - 输入有序数组:与上一题一样,只是数组已按照升序排列,可以使用Has
2021-03-08 16:25:21
185
原创 畅购商城:集群高可用
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)畅购商城:Spring Security Oauth2 JWT(上)畅购商城:Spring Security Oauth2 JWT(下)畅购商城:购物车畅购商城:订单畅购商城:微信支付畅购商城:秒杀(上)畅购商城:秒杀(下)畅购商城:分布式事务畅购商城:集群高
2021-03-06 21:39:40
487
2
原创 Leetcode总结(持续更新):排序算法
学习各大排序算法的题快速排序以下题目是可以用快排,但不仅限于用快排。通常能用普通快排的题还可以用堆排和桶排。1.基础:对 int 数组 / char 数组排序剑指 Offer 61. 扑克牌中的顺子考查抽象建模能力,将扑克牌转换成数组,把找顺子的过程通过排序、计数等步骤实现。剑指 Offer 61. 题解提交代码第一次2.Top K问题:可以用快排、堆排解决剑指 Offer 40. 最小的k个数快速排序、堆、红黑树皆可,注意复杂度分析剑指 Offer 40 题目解析提交代码快排第
2021-03-05 17:00:49
236
原创 图的源码、BFS和DFS
图的底层基础代码实现基础接口package _02_图._01_graph;import java.util.List;public interface Graph<V,E> { int edgesSize();//边的数量 int verticesSize();//顶点数量 void addVertex(V v);//添加顶点 void addEdge(V from, V to);//添加边 void addEdge(V from, V t
2021-03-04 17:39:26
267
2
原创 畅购商城:秒杀(下)
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)畅购商城:Spring Security Oauth2 JWT(上)畅购商城:Spring Security Oauth2 JWT(下)畅购商城:购物车畅购商城:订单畅购商城:微信支付畅购商城:秒杀(上)畅购商城:秒杀(下)目录畅购商城文章系列学习目标1. 防止
2021-03-03 21:50:13
344
1
原创 排序(八):希尔排序
排序算法系列文章排序(一):冒泡排序排序(二):选择排序排序(三):堆排序排序(四):插入排序排序(五):二分搜索排序(六):归并排序排序(七):快速排序目录排序算法系列文章希尔排序(Shell Sort)基本思想复杂度代码实现希尔排序(Shell Sort) 希尔序列步长序列待优化基本思想希尔排序是插入排序的一种改进,主要是为了解决当较小的数据大都出现在数组后面时导致的移动次数明显增多的问题,思想是使用一个不断缩小的增量gap将数组元素分组,在每个分组内部先进行插入排序,当ga
2021-03-03 20:26:24
216
2
原创 排序(七):快速排序
排序算法系列文章排序(一):冒泡排序排序(二):选择排序排序(三):堆排序排序(四):插入排序排序(五):二分搜索排序(六):归并排序排序(七):快速排序目录排序算法系列文章快速排序(Quick Sort)基本思想算法步骤轴点构造轴点构造--优化复杂度与稳定性快速排序代码实现快速排序(Quick Sort)基本思想快速排序(Quick Sort)是对冒泡排序的一种改进,采用的是分治策略(一般与递归结合使用),以减少排序过程中的比较次数。快速排序的本质:逐渐将每一个元素都转换成轴点元
2021-03-03 17:32:33
229
1
原创 排序(六):归并排序
排序算法系列文章排序(一):冒泡排序排序(二):选择排序排序(三):堆排序排序(四):插入排序排序(五):二分搜索排序(六):归并排序目录排序算法系列文章归并排序(Merge-Sort)基本思想算法步骤序列合并复杂度常见的递推式与复杂度查看表归并序列代码实现归并排序(Merge-Sort)基本思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,与快速排序一样,归并排序也是基于分治法的(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段
2021-03-03 15:49:25
213
1
原创 畅购商城:秒杀(上)
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)畅购商城:Spring Security Oauth2 JWT(上)畅购商城:Spring Security Oauth2 JWT(下)畅购商城:购物车畅购商城:订单畅购商城:微信支付目录畅购商城文章系列学习目标1. 秒杀业务分析1.1 需求分析1.2 表结构说明1
2021-03-03 10:50:33
963
原创 排序(五):二分搜索
排序算法系列文章排序(一):冒泡排序排序(二):选择排序目录排序算法系列文章二分搜索(Binary Search)思路代码实现二分搜索优化思路二分搜索(Binary Search)如何确定一个元素在数组中的位置?(假设数组里面全都是整数)如果是无序数组,从第0个位置开始遍历搜索,平均时间复杂度:O(n)如果是有序数组,可以使用二分搜索,最坏时间复杂度为O(logn)思路假设在[begin,end)范围内搜索某个元素 v,mid == (begin + end)/ 2①、如果v &l
2021-03-02 16:24:52
188
1
原创 排序(四):插入排序
排序算法系列文章排序(一):冒泡排序排序(二):选择排序目录排序算法系列文章插入排序(Insertion Sort)基本思想算法步骤复杂度代码实现插入排序(Insertion Sort)基本思想把n个待排序的元素看成为一个有序数组和一个无序数组。开始时有序数组中只包含一个元素,无序数组中包含有n-1个元素,排序过程中每次从无序数组中取出第一个元素,把它依次与有序数组的元素进行比较,将它插入到有序数组中的适当位置,使之成为新的有序数组,直到最后无序数组没有元素为止。算法步骤①在执行过程中,插入
2021-03-02 15:39:47
184
原创 排序(三):堆排序
排序算法系列文章排序(一):冒泡排序排序(二):选择排序目录排序算法系列文章堆排序(Heap Sort)算法步骤复杂度代码实现堆排序(Heap Sort)堆排序可以认为是对选择排序的一种优化。一般升序采用大顶堆,降序采用小顶堆。算法步骤①对序列进行原地建堆②重复执行以下操作,直到堆的元素数量为1交换堆顶元素与尾元素堆的元素数量减1对 0 位置进行 1 次 siftDown操作自下而上的下滤(siftDown)复杂度最坏,最好,平均时间复杂度均为O(nlogn)它
2021-03-02 11:16:34
158
原创 排序(二):选择排序
目录前言----十大经典排序算法选择排序(Selection Sort)算法步骤(升序)代码实现复杂度算法优化前言----十大经典排序算法以上表格是基于数组进行排序的一般结论冒泡、选择、插入、归并、快速、希尔、堆排序,属于比较排序(Comparison Sorting)选择排序(Selection Sort)算法步骤(升序)①从序列中找出最大的那个元素,然后与最末尾的元素交换位置;②执行完一轮后,最末尾的那个元素就是最大的元素;③忽略①中曾经找到的最大元素,重复执行步骤①代码实现
2021-03-02 10:26:37
212
原创 畅购商城:微信支付
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)畅购商城:Spring Security Oauth2 JWT(上)畅购商城:Spring Security Oauth2 JWT(下)畅购商城:购物车畅购商城:订单畅购商城:微信支付目录畅购商城文章系列学习目标1. 开发准备1.1 微信支付模式1.2 微信支付SD
2021-03-01 21:10:44
704
原创 排序(一):冒泡排序
目录前言----十大经典排序算法冒泡排序(Bubble Sort)算法步骤代码实现代码优化①代码优化②复杂度排序算法的稳定性(Stability)原地算法(In-place Algorithm)前言----十大经典排序算法以上表格是基于数组进行排序的一般结论冒泡、选择、插入、归并、快速、希尔、堆排序,属于比较排序(Comparison Sorting)冒泡排序(Bubble Sort)冒泡排序(Bubble Sort)的基本思想是:通过对待排序数组从头到尾遍历(从索引较小的元素开始),依
2021-03-01 17:40:05
401
原创 非递归前序遍历二叉树、非递归中序遍历二叉树、非递归后序遍历二叉树
前言本文主要将前序遍历、中序遍历、后序遍历的非递归方法。递归方法和层序遍历请看 递归前序遍历、递归中序遍历、递归后序遍历、层序遍历和判断一棵树是否为完全二叉树非递归前序遍历二叉树第一种方法:利用栈实现1.设置 node = root2.循环执行以下操作如果 node != null ,对 node 进行访问,将 node.right入栈,设置 node = node.left如果 node == null,如果栈为空,结束遍历;如果栈不为空,弹出栈顶元素并赋值给 node代码:
2021-03-01 15:56:16
376
原创 递归前序遍历、递归中序遍历、递归后序遍历、层序遍历和判断一棵树是否为完全二叉树
目录递归前序遍历递归中序遍历递归后序遍历层序遍历(很重要)判断一棵树是否为完全二叉树递归前序遍历 /* * 递归 前序遍历*/ public void preorder(Visitor<E> visitor){ preorder(root,visitor); } private void preorder(Node<E> node, Visitor<E> visitor){ if (root == nu
2021-03-01 14:56:22
189
3
原创 畅购商城:订单
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)畅购商城:Spring Security Oauth2 JWT(上)畅购商城:Spring Security Oauth2 JWT(下)畅购商城:购物车目录畅购商城文章系列学习目标1. 订单结页1.1 收件地址分析1.2 实现用户收件地址查询1.2.1 代码实现2. 下
2021-02-28 22:38:35
500
原创 畅购商城:购物车
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)畅购商城:Spring Security Oauth2 JWT(上)畅购商城:Spring Security Oauth2 JWT(下)畅购商城:购物车目录畅购商城文章系列学习目标前言1. 资源服务器授权配置1.1 资源服务授权配置1.2 用户微服务资源授权2. Oau
2021-02-28 21:11:47
506
原创 畅购商城:Spring Security Oauth2 JWT(下)
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)畅购商城:Spring Security Oauth2 JWT(上)畅购商城:Spring Security Oauth2 JWT(下)目录畅购商城文章系列学习目标前言1. 资源服务授权1.1 资源服务授权流程1.1.1 传统授权流程1.1.2 公钥私钥授权流程1.2 公
2021-02-25 17:50:31
467
原创 畅购商城:微服务网关和JWT令牌(下)
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)目录畅购商城文章系列目标目标了解加密算法了解JWT鉴权的介绍掌握JWT的鉴权的使用掌握网关使用JWT进行校验...
2021-02-24 19:02:44
882
原创 畅购商城:微服务网关和JWT令牌(上)
畅购商城文章系列畅购商城:分布式文件系统FastDFS畅购商城:商品的SPU和SKU概念畅购商城:Lua、OpenResty、Canal实现广告缓存畅购商城:微服务网关和JWT令牌(上)畅购商城:微服务网关和JWT令牌(下)目录畅购商城文章系列目标1. 微服务网关1.1 微服务网关的概述1.2 微服务网关技术2. 网关系统使用2.1 需求分析2.2 搭建后台网关系统2.2.1 搭建分析2.2.2 工程搭建2.3 跨域配置2.4 网关过滤配置2.4.1 Host 路由2.4.2 路径匹配过滤配置2
2021-02-24 18:42:06
589
原创 畅购商城:Lua、OpenResty、Canal实现广告缓存
目录1.首页广告1.1 分析1.2 缓存架构2. Lua2.1 Lua 是什么2.2 Lua 语言具有以下特性2.3 Lua 应用场景2.4 Lua 的安装2.5 快速入门2.6 Lua 的基本语法3. OpenResty3.1 OpenResty介绍3.1 OpenResty 安装3.2 安装 Nginx3.3 测试访问4. 广告缓存的载入与读取4.1 查询数据放入 Redis 中(缓存预热)4.2 从Redis中获取数据(广告缓存读取)4.3 加入OpenResty本地缓存5. 限流5.1 Nginx
2021-02-20 17:18:35
437
2
原创 畅购商城:分布式文件系统FastDFS
分布式文件系统FastDFS文章目录前言一、FastDFS简介二、FastDFS体系架构1.FastDFS架构介绍2.文件上传流程3.使用FastDFS的优缺点4.FastDFS功能还有支持断点续传前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、FastDFS简介FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文
2021-02-18 23:18:24
292
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人