自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 滑动窗口理解

滑动窗口滑动窗口例题心得:滑动窗口例题public String minWindow(String s, String t) { //把t中的字符全部放到map中 Map<Character, Integer> map = new HashMap<>(); for (char ch : t.toCharArray()) map.put(ch, map.getOrDefault(ch, 0) + 1); int left = 0

2021-07-22 22:13:39 110

原创 JVM内存回收机制

JVM的内存回收机制JVM的自动内存管理主要针对对象内存的回收和对象内存的分配。Java自动内存管理最核心的功能是堆内存中对象的分配与回收。Java堆是垃圾收集器管理的主要区域,因此也被称作GC堆Garbage Collected Heap)由于现在收集器基本都采用分代垃圾收集算法,所以 Java 堆还可以细分为:新生代和老年代怎么判断对象是否可以被回收?引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引

2021-07-20 21:34:45 546

原创 JVM理解

JVMJVM的基本介绍?JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,一种规范。通过在实际的计算机上仿真模拟各类计算机功能实现···它直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。说一下 jvm 的主要组成部分?及其作用?1类加载器(ClassLoader)2运行时数据区(Runtime Data Area)3执行引擎(Execution Engine)4本地库接口(Native Interface)组件的作

2021-07-20 21:33:13 94

原创 线程池相关理解

线程为什么用线程池?解释一下线程池参数?1、降低资源消耗;提高线程利用率,降低创建和销毁线程的消耗。2、提高响应速度;任务来了,直接有线程可用可执行,而不是先创建线程,再执行。3、提高线程的可管理性;线程是稀缺资源,使用线程池可以统一分配调优监控。corePoolSize 代表核心线程数,也就是正常情况下创建工作的线程数,这些线程创建后并不会消除,而是一种常驻线程maxinumPoolSize 代表的是最大线程数,它与核心线程数相对应,表示最大允许被创建的线程数,比如当前任务较多,将核心线程数

2021-07-20 21:27:59 76

原创 线程,进程,协程

线程,进程,协程进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。协程是比线程更小的一种执行单元,由于线程是操作系统的最小执行单元,因此也可以得出,协程是基于线程实现的,协程的创建、切换、销毁都是在某个线程中来进行的。使用协程是因为线程的切换成本比较高,而协

2021-07-20 21:23:41 78

原创 动态规划理解

动态规划动态规划一般是来解决1:计数问题如有多少种方式走到右下角?如有多少种方法选出k个数使得和是sum2:求最大值,最小值如从左上角走到右下角路径的最大数字和如最长上升子序列长度3:求存在性如取石子游戏,先手是否必胜如能不能选出k个数使得和是sum归类成两种类型:1:优化问题希望你选择一个可行的解决方案,以便最小化或最大化所需函数的值。2:组合问题希望你弄清楚做某事方案的数量或某些事件发生的概率。解决方案的对比:自上而下或者自下而上以下是两种不同的动态规划解决方案:自上而下

2021-07-20 21:20:41 87

原创 Git操作指令

GitGit的相关操作命令与远程仓库连接:从远程仓库克隆代码Git的相关操作命令从远程仓库克隆代码命令:git clone ssh(网页相关的一串字符)与远程仓库连接:1、 生成密钥—命令:ssh-keygen -t rsa -C "自己的邮箱ex:13249770806@163.com“2、 密钥存储在C:\Users\Administrator 这个目录发现.ssh文件夹,里面有里面有 id_rsa 和 id_rsa.pub;3、 将密钥内容复制到git的SSH从远程仓库克隆代码命令:

2021-07-20 21:19:58 54

原创 leetcode101-一切皆可搜索

一切皆可搜索一切皆可搜索深度遍历搜索leetcode695一切皆可搜索深度遍历搜索深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍历;因此遍历需要用先入后出的栈来实现,也可以通过与栈等价的递归来实现。对于树结构而言,由于总是对新节点调用遍历,因此看起来是向着“深”的方向前进。leetcode695class Solution { public int maxAreaOfIsland(int[][] grid) { in

2021-07-20 21:18:46 82

原创 leetcode 101 - 二分查找

leetcode 101 - 二分查找法二分查找法求平方二分查找法二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复杂度为 O(log n)。求平方class Solution { public int mySqrt(int x) { int l = 0, r = x, res = -1; while(l<=r){

2021-06-23 13:42:33 63

原创 秒杀项目-第十章

秒杀项目-第十章防刷限流技术验证码限流目的限流方案限流力度限流力度防刷传统防刷黄牛为什么难防防刷限流技术验证码包装秒杀令牌前置,需要验证码来错峰数学公式验证码生成器限流目的流量远比你想的要多系统活着比挂了要好宁愿只让少数人能用,也不要让所有人不能用限流方案限并发令牌桶算法漏桶算法没有办法应对突发流量限流力度接口维度总维度限流力度集群限流:依赖redis或其他中间件技术做统一计数器,往往会产生性能瓶颈单机限流:负载均衡的前提下单机平均限流更好防刷排队,限流,令牌均

2021-06-01 21:14:10 92

原创 秒杀项目-第九章

秒杀项目-第九章流量削峰技术秒杀令牌秒杀令牌原理秒杀大闸队列泄洪流量削峰技术缺陷:秒杀下单接口会被脚本不停得刷秒杀令牌秒杀令牌原理秒杀接口需要依靠令牌才能进入秒杀得令牌由秒杀活动模块负责生成秒杀活动模块对秒杀令牌生成全权处理,逻辑收口秒杀下单前需要先获得秒杀令牌缺陷:秒杀令牌只要活动一开始就无限制生成,影响系统性能秒杀大闸依靠秒杀令牌的授权原理定制化发牌逻辑,做到大闸功能(令牌发放数=库存乘以5)依据秒杀商品初始库存颁发对应数量令牌,控制大闸流量用户风险策略前置到秒杀令牌发放中

2021-05-31 21:30:29 98

原创 秒杀项目-第七章:交易性能优化技术之缓存库存

秒杀项目-第七章交易性能优化技术之缓存库存7-2交易验证优化用户风控策略优化:策略缓存模型化活动校验策略优化:引入活动发布流程、模型缓存化、紧急下线能力rocketMQ交易性能优化技术之缓存库存压测:下单链接:/order/creatororder?token=XXXXXXXXpost参数:itemId=6、amount=1、promoId=1线程数=200、5秒内发起、循环20次类别TPS响应时间(毫秒)CPU%无优化(java)28250075%无优化(数

2021-05-26 21:37:12 125

原创 静态资源cdn

秒杀项目-静态资源CDN静态资源cdn静态请求CDNDNS用CNAME解析到源站回源缓存设置静态资源cdn500线程数、5秒内发起、20次循环/resources/getitem.html?id= 21类别TPS反应时间(毫秒)CPU无静态资源cdn650350静态资源cdn1300150静态请求CDNDNS用CNAME解析到源站回源缓存设置Cache Control响应头:private:客户端可以缓存public:客户端和代理服务器都可以

2021-05-23 16:51:55 292

原创 秒杀项目-多级缓存

秒杀项目-第五章秒杀项目查询优化技术之多级缓存多级缓存的定义缓存设计redis缓存、本地缓存本地缓存热点nginx lua缓存和proxy cache缓存nginx lua缓存秒杀项目查询优化技术之多级缓存多级缓存的定义缓存设计用快速存取设备、用内存将缓存推到离用户最近的地方脏缓存清理redis缓存、本地缓存单机版:sentinal 哨兵模式集群cluster模式Redis集中式缓存商品详情页接入Redis集中式缓存压测类别TPS反应时间(毫秒)%CPU

2021-05-22 16:30:30 403 2

原创 秒杀项目-第四章(软件得启动等操作)

单机容量问题,水平扩展单机容量问题,水平扩展1、mysql数据库开放远端连接2、服务端水平对称部署3、验证访问单机容量问题,水平扩展1、mysql数据库开放远端连接2、服务端水平对称部署3、验证访问方案:一台nginx一台mysql两台应用服务器...

2021-05-20 20:48:50 73

原创 jmeter压测

jmeterjmeter压测相关指令压测相关测试数据发现容量问题参数设置定制化内嵌Tomcat开发单Web容器上限Mysql数据库QPS容量问题Mysql数据库TPS容量问题优化方向jmeter压测相关指令pstree - p 端口号查询有多少个线程运行pstree - p 端口号 | wc -l统计个数top - H查看机器的性能压测相关测试数据5000个线程数出现有Http请求错误查询此时服务器线程53发现容量问题server端并发线程数上不去tomcar的默认等待队列长

2021-05-17 15:18:08 329

原创 秒杀项目

秒杀项目秒杀环境配置Java环境数据库安装数据库的打包、上传与恢复应用程序打包上传启动应用程序秒杀环境配置Java环境下载对应的linux安装包,解压配置环境路径数据库安装安装相关依赖yum install mysql*yum install mariadb-server启动数据库systemctl start mariadb.serverps -ef | grep mysql查看mysql进程netstat -anp | grep 3306查看MySQL的启动端口重置数据库密

2021-05-16 16:54:25 82

原创 JVM调优篇

JVMJVM一、说一说JVM的内存模型二、Java类加载的全过程是怎样的?什么是双亲委派机制?有什么机用?一个对象从加载到JVM,再到被GC清除,都经历了什么过程?JVM一、说一说JVM的内存模型二、Java类加载的全过程是怎样的?什么是双亲委派机制?Java的类加载:AppClassLoder–》ExtClassLoder–》BootstrapClassLoder每个类加载器对他加载过的类,都有一个缓存。双亲委派:向上委托查找、向下委托加载。作用:保护Java的层的类不会被应用程序覆盖,如

2021-05-15 21:23:34 46

原创 SpringBoot

SprintBootSpringBootSpring 框架中都用到了哪些设计模式?Spring框架中的Bean时线程安全的嘛?如果线程不安全,要如何处理?Spring如何处理循环依赖问题?SpringBootSpring 框架中都用到了哪些设计模式?1、 简单工厂:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。2、 工

2021-05-15 21:21:23 155

原创 Java面试题---网络通信篇

Java网络通信篇一计网TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次?java有哪几种IO模型?有什么区别?三级目录一计网TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次?TCP transfer control protocol 是一种面向连接、可靠的、传输层通信协议。特点:好比打电话:面向连接、点对点的通信、高可靠的、效率低,占用的系统资源比较多。UDP user datagram protocol 是一种无连接的、不可靠的、传输层通信协议。特点:好比是广播:不需

2021-04-20 15:26:10 567

原创 面试题---UDP和TCP

面试题---UDP和TCPUDPTCPUDPUDP(User Data Protocol,用户数据报协议)是一个简单的面向数据报的运输层协议。它不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。由于UDP在传输数据报前不用再客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。一、UDP是无连接的,即通信时不需要创建连接(发送数据结束时也没有连接可以释放)所以减小了开销和发送数据前的时延;二、UDP采用最大努力交付,不保证可靠交付,因此主机不需要

2021-04-09 21:06:11 100

原创 剑指Offer-链表问题

剑指Offer-链表问题单链表题目描述–jz3输入一个链表,按链表从尾到头的顺序返回一个ArrayList。输入{67,0,24,58}输出[58,24,0,67]题目分析使用Stack存储数据,pop()输出public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> res=new ArrayList<Integer&gt

2021-04-02 20:56:10 54

原创 剑指Offer--分类类型:递归、动态规划

剑指Offer–分类类型:递归、动态规划牛客网第ZJ8、JZ10题ZJ8一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。输入:1输出:1输入:4输出:5解题思路递归法:原理: 把 f(n)f(n) 问题的计算拆分成 f(n-1)f(n−1) 和 f(n-2)f(n−2) 两个子问题的计算,并递归,以 f(0)f(0) 和 f(1)f(1) 为终止条件。缺点: 大量重复的递归计算,例如 f(n)f(n) 和 f(n -

2021-03-30 21:02:50 68

原创 剑指offer---分类类型:数组重复元素问题

剑指offer:牛客网题数:50题目内容:给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。注意:如果某些数字不在 0∼n−1 的范围内,或数组中不包含重复数字,则返回 -1;例子:给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。题目分析:给定一个长度为 n ,数组中所有的数字都在 0∼n−1 的范围

2021-03-30 21:01:42 56

原创 剑指Offer--分类类型:排序

剑指Offer--分类类型:排序牛客网第JZ29,JZ63题()牛客网第JZ29,JZ63题()JZ29(快速排序)给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组输入:[4,5,1,6,2,7,3,8],4输出:[1,2,3,4]解题思路代码:基于递归,class Solution { //快速排序算法 public int[] getLeastNumb

2021-03-14 19:46:02 82

空空如也

空空如也

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

TA关注的人

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