自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis实现优惠券秒杀功能

例如,使用Long类型,占8个字节,64bit位,1bit符号位,前31bit使用时间戳,支持69年使用时间,后32位使用序列号,每秒产生2^32个不同ID。tb_voucher包含平价券和特价券,tb_seckill_voucher只描述特价券,包含库存,生效时间,失效时间。优点是性能好,缺点是有可能出现少买。缺点,用户还是能下多单,因为多个线程判断成功后可以继续购买,和后续扣减库存,生成订单不是原子性操作。2、修改lua脚本,向stream.orders中添加消息,包含优惠券id,用户id,订单id。

2024-05-14 20:53:37 815

原创 Redis缓存的基本概念和使用

缓存时数据交换的缓冲区,存储数据的临时区,读写性能较好。例如计算机的三级缓存。CPU的计算速度超过内存的读写速度,为了平衡两者速度,使用了三级缓存,把经常需要读写的数据放到三级缓存中。例如DNS缓存,浏览器缓存,nginx缓存,JVM进程缓存,Redis缓存,数据库缓存等。缓存作用:1、降低后端负载。2、提高读写效率,降低响应时间。缓存成本:1、缓存一致性。2、复杂度。例如缓存穿透,缓存击穿,缓存雪崩等问题使代码复杂度提升。3、运维成本。

2024-05-12 19:28:51 720 1

原创 牛客网Java实战项目--仿牛客网社区的学习笔记

这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录

2024-05-11 15:30:48 1055

原创 基于Redis实现分布式锁——Java版本

设定业务超时时间,到期自动解锁。当超时时间小于执行业务时间时,其他线程会拿到锁,而之前的线程执行完后又会解锁,变得混乱,导致线程安全问题。解锁时判断锁是否和自己假的锁标识一样,标识使用UUID+线程ID,标识一样才释放锁。某个线程先判断锁是自己的,此时由于其他原因阻塞,比如Full GC,其他线程拿到锁,之前的线程再解锁,但是解的并不是自己的锁,导致线程安全问题。去中心化,不要主从,每个节点都需要获取锁,使用了红锁算法。3、超时时间不好设置,有可能超时自动释放,虽然不会有误删,但是存在其他线程重新加锁。

2024-05-09 19:40:31 527

原创 Java线程池的实现——底层源码原理

这里以常用的实现类ThreadPoolExecutor来讲述原理。

2024-04-24 15:39:04 993 2

原创 Windows下配置MySQL源码调试环境

问题:8.0.34和5.7.34都安装不了,mysqld报错。解决:先把断点打开,然后打断点,执行登录mysql。原因:内存不足,开启了并发编译,加内存或者2改成1。安装插件:Chinese、Remote、C/C++解决:8.0.32安装成功。远程插件安装:C/C++配置VS Code插件。

2023-09-27 13:56:52 352

原创 虚拟机上部署K8S集群

部署dashboard,如果下载不了,可以先windows下载,然后编辑recommended.yaml复制内容并拷贝到虚拟机中执行。初始化主节点,注意ip地址一定不能和service,pod重叠,否则后面报错很麻烦,这里踩坑最后把网络修改,卸载后重新连接才可以。参考:https://www.yuque.com/leifengyang/oncloud/mbvigg#2ASxH。每台虚拟机分别设置主机名,需要不一样,比如master,node1,node2。

2023-09-09 22:34:23 778

原创 FRP内网穿透,配置本地电脑作为服务器

参考链接:https://www.it235.com/实用工具/内网穿透/pierce.html由于没有公网ip,所以尝试内网穿透将本地电脑作为服务器,目的就是作为一个demo展示。这里尝试了多种内网穿透软件,算是各种坑踩了一下,需要直接上手的可以直接拉到下面。尝试了Zerotier,发现用途和想象的不一样,更多用来远程连接自己的电脑等。又尝试了NATAPP,这个在之前就用过,效果还行,缺点就是域名每次运行exe时会改变,不能固定,要是绑定自定义域名还得有一个域名。

2023-08-20 17:06:46 1414

原创 阿里笔试2023-3-15

给定一个数组,计算有多少个三元组0

2023-03-16 16:07:15 1581 1

原创 DUBBO的最小活跃数算法

最小活跃数负载均衡:需要配合 activeFilter 使用,活跃数在方法调用前后进行维护,响应越快的服务器堆积的请求越少,对应的活跃数也少。Dubbo 在选择的时候遵循下面的规则,有最小活跃数用最小活跃数,没有最小活跃数根据权重选择,权重一样则随机返回的负载均衡算法。

2022-10-30 21:25:47 323 1

原创 DUBBO中的一致性哈希算法

首先把服务器映射到一个[0,2^32-1]的圆环上,每个服务器都有对应的哈希值,当有请求来时,求出请求的哈希值,能够对应环上的一个点,那么选取比这个点更大的服务器。特殊的,如果哈希值更大的第一个服务器挂掉了,则请求下一个结点。最后看看select方法,对参数进行md5计算和hash计算,获得这个哈希值后,选择大于等于这个哈希值的服务器,如果没有,则选择第一个服务器。问题原因也很好理解,因为扩容或者缩容时,如果哈希算法是单纯对服务器数量进行取模,那么就会导致哈希值改变,映射到不同服务器。

2022-10-30 20:46:28 560

原创 【1~n 整数中 1 出现的次数】

输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。

2022-10-28 11:11:21 344

原创 【最小的k个数】

努力是为了不平庸~算法知识点堆排序,优先队列

2022-10-27 10:51:11 407

原创 CSDN云IDE使用及体验感受

云IDE是CSDN开发云为开发者打造的一款低代码开发产品,云端预制了常见的开发环境,无需下载安装,一键创建项目,灵活配置代码仓和云主机。同时支持在线安装 VSCode 插件来增强使用体验,支持从基础组件快速构建高阶组件,无需重新编写组件,提高研发效率。随时随地开发编码,拥有媲美本地IDE。免费使用地址:点击,即可开始创建工作空间啦~

2022-10-26 22:41:49 503

原创 手写简单Srping框架

  提升核心竞争力:1、快速读懂他人的,甚至是大神级的框架代码。2、设计出让自己变得不可替代的技术方案。  切入点:读懂Spring框架的核心源码,锻炼框架的设计能力。根据经验而言,能够写出某个方向10万行的代码,能成为该方向的行家,而Spring约有一百万行代码。  授之以鱼不如授之以渔:1、通过自研框架了解Spring的设计2、深入Spring源码洞悉核心脉络

2022-10-26 20:57:34 396

原创 【数据流中的中位数】

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

2022-10-26 12:53:01 136

原创 【字符串的排列】

回溯,回溯其实是一种暴力枚举,但是有些题目能枚举出来已经可以通过了。如果时间复杂度过高可以考虑剪枝操作。

2022-10-25 15:32:57 115

原创 【序列化二叉树】

请实现两个函数,分别用来序列化和反序列化二叉树。

2022-10-21 19:19:34 358 2

原创 手写RPC框架项目代码解读——Netty版本

使用注解开发,而不是xml配置文件,好处是便捷性,操作性。@Builder主要作用是用来生成对象,并能够进行链式赋值。@RpcService放在服务实现类上。@RpcReference放在服务引用上。

2022-10-15 12:04:57 1020 1

原创 Netty的基本概念

使用Netty(NIO框架)完成一次RPC通信,相比传统基于Java序列化+BIO的RPC通信框架,其通信性能可以提升8倍多。**传统RPC调用性能差的原因**1、网络传输方式存在弊端  传统的RPC框架都是采用BIO,当客户端的并发压力或网络时延增大时,BIO会因频繁的“wait”导致I/O线程经常出现阻塞的情况,线程本身无法高效地工作,I/O处理能力自然下降。

2022-10-14 17:22:04 443

原创 手写RPC框架项目代码解读——Socket版本

项目地址:https://github.com/Snailclimb/guide-rpc-framework。1、RPC服务名 = 接口名字 + 组号 + 版本号2、zookeeper服务路径规定如下:例如:问题描述1、如果在服务器运行时,IP地址改变,那么钩子函数将不能在zookeeper客户端中删去结点原因:inetSocketAddress改变,但是静态的REGISTERED_PATH_SET不会改变。解决:REGISTERED_PATH_SET直接删除,不要加if判断1、基于Socke

2022-10-12 10:39:52 1476

原创 github.io使用方法

1、新建repository。2、以username.github.io命名,username必须是github的用户名,例如我的是kevin-zkp。4、新建index.html,加上内容。5、先commit,再publish3、clone到本地。

2022-10-11 19:31:23 5233

原创 Windows下zookeeper下载和安装

安装包是tar.gz,也可以正常安装,如果不行可以用命令行安装。在conf目录下复制一份zoo.cfg,编辑。新建data文件夹,修改数据保存路径。

2022-10-07 19:01:09 688

原创 Github基本使用

Git是版本控制软件,Github是基于Git打造的网站。Git的三个概念:提交commit,仓库repository,分支branch代码的变化是以提交commit为单位记录下来。一般项目根文件夹是仓库repository。根据不同的人和不同的需求分开写,最后合并。

2022-09-26 15:15:07 716

原创 手写RPC框架

首先对协议做了制定,定义了Request,Response,以及表示协议端点的Peer。接着做了序列化模块和网络传输模块。最后是服务端和客户端模块。难点1:jetty的嵌入Server:起到网络监听的作用ServletContextHandler:基于Servlet做网络的处理,要注册到server中ServletHolder:托管Servlet难点2:动态代理Proxy.newInstanceProxy:JDK自带

2022-09-25 23:23:07 714

原创 二叉树的前中后序遍历——统一递归遍历和迭代遍历

二叉树深度优先搜索的遍历方式包括三种,前序遍历,即中左右;中序遍历,即左中右;后序遍历,即左右中。这里提供递归遍历和迭代遍历的统一代码,只需要两套代码就能记住递归遍历和迭代遍历。...

2022-07-17 21:05:16 226

原创 Java中的栈和队列

栈和队列,前者是先进后出,后者是先进先出。

2022-07-17 11:41:22 1027

原创 KMP算法详解及例题

KMP算法是由这三位学者发明的Knuth,Morris和Pratt,所以取了三位学者名字的首字母。KMP主要应用在字符串匹配上,KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。KMP算法的关键之一是求出前缀表。......

2022-07-15 10:52:35 1461

原创 动态规划之背包问题总结

  背包问题是动态规划中的重要的一部分,背包问题分为多种,只需要掌握常见的01背包和完全背包就行。背包问题可以归纳为五步解决法:1、确定dp数组含义2、列出递推公式(即状态转移公式)3、dp数组初始化4、确定遍历顺序5、举例推导dp数组每一步都很重要,如果对哪一步不理解,就会导致做题遇到bug不能及时找出来;如果对每一步都能有自己的理解,变换题目也能及时正确地解答。1、背包能够装多少物品?j表示背包容量,i表示遍历物品LeetCode动态规划:416.分割等和子集Lee...

2022-07-09 18:43:18 429

原创 动态规划背包问题优化空间复杂度——滚动数组

背包问题是动态规划中基本的问题,我们考虑下面的简单问题:  假设背包容量为4,有物品0,1,2,要使背包放的物品价值最大,并且总重量不超过背包容量,应该怎么放?二维数组下的做法如下:1、创建二维数组dp,其中dp[i][j]的含义是在0~i物品中任意取,放到容量为j的背包里,能够获得的最大价值。2、确定递推公式对于dp[i][j],假设不取第i个物品,那么dp[i][j]=dp[i-1][j];假设取第i的物品,那么dp[i][j]=dp[i-1][j-weight[...

2022-07-06 16:50:18 587

原创 云服务器上部署仿牛客网项目

内存最好有4g,才能跑起来。Nginx起到反向代理的作用,正向代理是代理浏览器,反向代理是代理服务器。Tomcat是用Java开发的,因此安装Tomcat之前要安装JRE;希望在服务器上打包程序,因此安装Maven,如果有环境差异,在windows打包再传过去可能会有问题,因此最好在服务器上打包。真实的生产环境下,一个软件可以部署多个实例,例如Tomcat,MySQL,Redis等。学习中,就部署到一个服务器上。访问Linux虚拟机可以用Putty。命令行传文件:用Bitvise或者Xftp等软件传也行

2022-06-29 20:56:07 970

原创 Executor框架——Java并发编程的艺术读书笔记

Executor框架1 Executor框架简介1.1 Executor框架的结构1.2 Executor框架的成员2 ThreadPoolExecutor2.1 FixedThreadPool2.2 SingleThreadPool2.3 CachedThreadPool3 ScheduledThreadPoolExecutor3.1 ScheduledThreadPoolExecutor的执行机制4 FutureTask4.1 FutureTask的使用参考书籍:《Java并发编程的艺术》  从JD

2022-06-23 15:43:43 84

原创 Java实战项目——《谷粒商城》分布式基础篇

Java实战项目——《谷粒商城》的学习笔记1 分布式基础(全栈开发)1.1 项目简介1.1.1 项目架构1.1.2 电商模式1.1.3 项目技术&特色1.1.4 项目前置要求1.2 分布式基础概念1.2.1 微服务1.2.2 集群、分布式、节点1.2.3 远程调用1.2.4 负载均衡1.2.5 服务注册/发现、注册中心1.2.6 配置中心1.2.7 服务熔断、服务降级1.2.8 API服务网关1.3 环境搭建1.3.1 安装Linux虚拟机2 分布式高级(微服务架构)3 高可用集群(架构师提升)视

2022-06-23 15:41:59 2104

原创 Runge Kutta方法求解常微分方程

Runge Kutta方法求解常微分方程常微分方程二阶Runge Kutta法四阶Runge Kutta法参考书籍:应用数学基础下常微分方程  一阶常微分方程形式如下:二阶Runge Kutta法  改进的Euler格式如下:  例题:用改进的Euler格式求解初值问题:解:根据上面公式可以列出改进的Euler格式为:取步长为h=0.1,初值y0=1,数值结果和解析结果如下表所示:xnyny(xn)0.11.095909091.095445110.2

2022-05-20 19:36:16 1247

原创 MATLAB修改代码字体

MATLAB修改代码字体修改已有字体安装字体修改已有字体1、点击预设2、点击字体,修改桌面代码字体安装字体  推荐字体:JetBrainsMono,但是如果之前的注释有中文,改成这个字体可能会乱码,如果出现这种情况可以下载YAHEI CONSOLAS HYBRID,可以百度下载。  将下载的字体放在matlab安装路径下D:\Program Files\MATLAB2020a\sys\java\jre\win64\jre\lib\fonts  重启MATLAB,再点击预设,设置字体即可

2022-05-18 21:12:43 8395

原创 Golang8小时基础入门

这里写目录标题Golang安装和环境变量Golang语言特性优势适合做什么明星作品缺点Golang语法新奇从main函数初见go的语法变量单变量声明多变量声明常量与iota函数init函数与导包指针defer关键字数组和动态数组slicesliceGolang高阶Go modules 模块管理小试牛刀——Golang经典案例参考链接:哔哩哔哩视频,在线文章。Golang安装和环境变量  首先下载安装包,Golang镜像网站,Golang中文镜像网站。Windows直接安装,Linux解压到要安装的文件

2022-05-13 20:55:44 883

原创 jar包双击打不开或者闪退的解决办法

jar包双击打不开或者闪退的解决办法配置环境变量选择打开方式修改注册表  有些时候需要双击打开jar包,这时候有可能双击后命令窗口一闪而过,闪退,查看错误信息为无法加载主类。配置环境变量  运行jar包需要安装JDK或者JRE,JDK包含JRE,只要有JRE就能运行。注意配置环境变量前需要卸载干净之前安装过的JDK或者JRE,可以在程序与功能里卸载。  卸载之后,配置JDK参考另外一篇博客选择打开方式  右击jar包,选择属性,打开方式更改为安装的java.exe,注意这里的路径要和下面注册表

2022-05-13 18:39:02 19048 15

原创 SpringBoot开发小而美的博客——学习笔记

SpringBoot开发小而美的博客——学习笔记1 需求与功能1.1 用户故事1.2 功能规划2 页面设计与开发2.1 页面设计2.2 页面开发2.2.1 首页2.3 插件集成3 框架搭建3.1 构建与配置3.2 异常处理3.3 日志处理3.4 页面处理XX4.1 实体设计4.2 应用分层4.3 命名规定5 后台管理5.1 登录5.2 分类管理5.3 标签管理5.4 博客管理6 前端展示部署到服务器简历怎么写学习链接:SpringBoot开发一个小而美的个人博客。技术组合:后端:SpringBoo

2022-05-08 20:50:14 1226 5

原创 CentOS7云服务器上部署小而美博客

CentOS7配置JRE由于已经在Windows上写好了代码,因此不需要安装JDK(Java开发环境),只需要安装JRE(Java运行环境)。优先采用yum命令,方便稳定,会自动配置环境变量,自动安装启动服务。缺点是工具版本较低,但是正常能用就行。如果官网有新的仓库文件,可以先下载仓库文件,就能下载到更新的版本。使用下载命令下载tar包(JRE不用)wget -i -c 链接搜索JRE有哪些版本,并选择合适的版本yum list java*使用yum安装JREyum install -y

2022-05-08 10:22:29 1086

原创 CentOS7上安装和卸载MySQL

CentOS7上安装和卸载MySQL1 安装MySQL2 卸载MySQL1 安装MySQL官网下载地址版本选择Red Hat Enterprise Linux,8.0.25。下载RPM Bundle,包含所有组件,不需要一个一个下载。下载后解压,并将红框中的文件提取出来,这些才是需要用到的。由于安装过程会通过mysql用户在/tmp目录下新建tmp_db文件,所以给/tmp较大的权限。chmod -R 777 /tmp安装前检查依赖rpm -qa|grep libaiorpm -qa

2022-05-08 10:18:10 526

空空如也

空空如也

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

TA关注的人

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