编程初学者z
码龄9年
求更新 关注
提问 私信
  • 博客:97,599
    社区:185
    97,784
    总访问量
  • 120
    原创
  • 70
    粉丝
  • 25
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
加入CSDN时间: 2016-04-24
博客简介:

张毅的博客

博客描述:
你只管努力,剩下的交给天意
查看详细资料
个人成就
  • 获得69次点赞
  • 内容获得18次评论
  • 获得522次收藏
创作历程
  • 1篇
    2022年
  • 120篇
    2020年
成就勋章
TA的专栏
  • 算法刷题
    64篇
  • 公考行测
  • 计算机网络
    1篇
  • Redis
    2篇
  • MySQL
    3篇
  • golang
  • SSM秒杀系统
    14篇
  • java基础
    4篇
  • java并发
    4篇
  • Java设计模式
    5篇
  • 数据结构分析
    4篇
  • java集合
    4篇
  • 深入理解JVM
    2篇
  • 排序算法
    1篇
  • Mybatis
    1篇
  • SSM校园商铺平台
    7篇
  • SSM项目
    4篇
  • Spring
    1篇
  • SpringMVC

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 19

TA参与的活动 0

兴趣领域 设置
  • 数据结构与算法
    排序算法推荐算法
  • 人工智能
    nlpscikit-learn集成学习分类回归
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

短短两年时间,重拾leetcode

互联网寒冬
原创
发布博客 2022.09.21 ·
288 阅读 ·
1 点赞 ·
2 评论 ·
0 收藏

SpringBoot秒杀项目(项目总结)

秒杀系统的项目主要是为了应对高并发的场景,所以在项目主要包含有几个关键的模块:商品模块、用户登录模块、秒杀模块、秒杀安全优化等等。1. 登录模块主要包括了登录密码的加密和分布式session1.1 登陆密码加密用户登录的时候,登录信息由前端传递到后端是通过http协议进行传输的,由于http协议是明文传输的。所有的登录信息都在其body里面,所以将用户的登录密码进行明文传输安全性较低。所以在传输之前,我们在前端需要对password进行加密,通过MD5进行对称加密。整个加密过程分为两次MD5加密
原创
发布博客 2020.12.14 ·
3766 阅读 ·
4 点赞 ·
5 评论 ·
49 收藏

SpringBoot秒杀项目五(秒杀安全优化)

1.优化思路(1)秒杀接口地址隐藏。防止有人恶意秒杀(2)数学公式验证码。也能防止恶意秒杀。并且能够减轻秒杀系统的瞬时流量,减轻并发量。比如:12306的购票需要输入验证码。这样就能将原先瞬间的并发量削减到10s之内。(3)接口限流防刷。限制一个用户1分钟之内只能访问某个接口10次2.秒杀接口地址隐藏思路:秒杀开始之前,先去请求接口获取秒杀地址接口改造,带上PathVariable参数添加生成地址的接口秒杀收到请求,先验证PathVariable(1)在前端点击秒杀抢购的时候,不直接跳
原创
发布博客 2020.12.14 ·
457 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

SpringBoot秒杀项目四(秒杀接口优化)

秒杀接口优化1.秒杀接口优化思路秒杀接口优化的核心就是减少数据库访问。系统初始化将商品库存数量加载到redis收到请求redis预减库存,库存不足直接返回,否则直接进入3.好处:如果库存只有10,10个请求以后的所有请求直接返回秒杀失败,直接挡住了很多请求,不会继续往下执行,大大提高了效率。请求入队rabbitMQ,立即返回排队中比如:12306购票的时候,下订单就会返回正在排队中,如果抢购成功就会返回结果。请求出队,生成订单,减少库存客服端轮询是否秒杀成功2.r
原创
发布博客 2020.12.14 ·
722 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

SpringBoot秒杀项目三(页面优化)

1.页面缓存为了防止服务器瞬间访问量较大,我们将页面缓存至redis中,redis缓存的过期时间设置为60s,比较短。页面缓存时间不能太长,因为如果太长的话,页面数据发生 变化缓存是不会及时更新的。 @RequestMapping(value="/to_list", produces="text/html") @ResponseBody public String list(HttpServletRequest request, HttpServletResponse respon
原创
发布博客 2020.12.14 ·
265 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

SpringBoot秒杀项目二(秒杀功能及测试)

1.数据库设计商品表CREATE TABLE `goods` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '商品ID', `goods_name` varchar(16) DEFAULT NULL COMMENT '商品名称', `goods_title` varchar(64) DEFAULT NULL COMMENT '商品标题', `goods_img` varchar(64) DEFAULT NULL COMMENT '商品
原创
发布博客 2020.12.14 ·
1731 阅读 ·
1 点赞 ·
0 评论 ·
13 收藏

SpringBoot秒杀项目一(登录功能)

1.数据库设计CREATE TABLE `miaosha_user` ( `id` bigint(20) NOT NULL COMMENT '用户ID,手机号码', `nickname` varchar(255) NOT NULL, `password` varchar(32) DEFAULT NULL COMMENT 'MD5(MD5(pass明文+固定salt) salt)', `salt` varchar(10) DEFAULT NULL, `head` varchar(128)
原创
发布博客 2020.12.14 ·
363 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

java反射机制和使用

1.什么是反射?有什么用?在java运行过程种,任何一个类,我们都能获得它的属性和方法,任何一个对象我们都能调用它的属性和方法,这种动态获取信息和动态调用对象属性方法的功能被称为java反射机制。总的来说,反射就是将java类中的各种成分映射成一个个的java对象。Class 类的实例表示正在运行的 Java 应用程序中的类和接口。也就是jvm中有N多的实例每个类都有该Class对象。2.使用我们首先要获取class对象,才能获取该类的所有属性和方法。1.获取class对象的方式(1) 通过
原创
发布博客 2020.07.17 ·
158 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

笔试真题

1.华为笔试第3题题目描述:假如有1米和2米的线段若干,现需要拼接成4米的线段,一共有1+1+1+1,1+1+2,2+2, 3种拼接方法。现在需要拼接m米线段,有C1,C2,C3,…线段可供选择,一共有多少种拼接方法。输入:4 1 2 输入描述:第一个值为需要拼接的线段长度,后面的值为可供选择的线段长度输出:3解题思路:看到该题,和上一题有点类似,有点类似于硬币找零的问题,求一共有多少种找零的方法。首先能想到的就是采用回溯法,列举出所有的可能,但是如果m很大的话时间复杂度太高了。我们可以采用
原创
发布博客 2020.07.16 ·
667 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

博弈论

我们通常会遇到关于博弈论类似的题目,本文总结了刷题过程中该类型的题目。1. leetcode 292.NIM游戏题目描述:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。解题思路:由于每次A和B每个人最多能拿3块石头,那么只要满足一个条件即可获胜:A拿了1-3块石头中,只要有一种情况下B都使无法获胜,那么A一定
原创
发布博客 2020.07.11 ·
363 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

模板模式

1.模板模式的作用定义一个操作中的算法骨架,而将算法的一些实现步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。2. 模板模式的实现模板模式就是封装了一部分不可变的方法,扩展了一些可变的方法。就是通过抽象类来其实的,子类继承抽象类,对抽象方法进行扩展。2.1 实现 //抽象类 public abstract class TemplateClass{ public void method1() { System.out.println
原创
发布博客 2020.07.10 ·
374 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Java设计模式

java的各种设计模式在粒度和抽象层次上是各不相同的。1.分类java设计模式按其使用的目的分为三类:创建型模式:与对象的创建有关结构型模式:处理类或对象的组合,比如对类或接口的功能进行扩展行为型模式:对类或对象怎样交互和怎样分配职责进行描述,描述一组对象怎样协作完成单个对象所无法完成的任务通常我们的设计模式都有静态和动态的实现方式:静态:类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,通常通
原创
发布博客 2020.07.10 ·
158 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

适配器模式

1.什么是适配器模式适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。通过增加一个新的适配器类来解决接口不兼容的问题,也就是使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。2.如何实现简单来说就是在一个适配器接口中调用另外一个类的方法。适配器:adapter(实现目标接口的类)适配者(被适配的对象):adaptee目标接口:target接口2.1 对象适配对象适配器则是通过关联来完成 //被适配器类 pu
原创
发布博客 2020.07.10 ·
133 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

redis中的Zset原理

redis中的Zset原理1.Zset2.redis中的zset为什么不使用红黑树而使用跳跃表3. 跳跃表的实现3.1 跳跃表的查询3.2 插入3.3 删除1.Zsetredis中有一个非常重要的数据结构,那就是Zset。它是一个有序集合,也就是说存储的数据是有序的。说到有序集合,很容易就能想到二叉搜索树,比如AVL树、红黑树、B树、B+树这些数据结构。而Zset底层使用的是什么数据结构呢,其实zset使用的是跳跃表(skipList)的数据结构。什么是跳跃表?它其实是一种随机化的数据结构,一个多
原创
发布博客 2020.06.26 ·
8994 阅读 ·
10 点赞 ·
0 评论 ·
22 收藏

布隆过滤器

布隆过滤器1. 什么是布隆过滤器2.如何实现2.1 原理2.2 实现3. redis中使用布隆过滤器1. 什么是布隆过滤器布隆过滤器实际上是一种特殊的数据结构,它能够在海量的数据中查询一个给定的数据是否存在其中。比如:从1亿的数据中,查询100个数据。这种情况下就可以使用布隆过滤器。此外,布隆过滤器经常用于解决redis的缓存穿透的问题。什么是缓存穿透?就是在高并发的情况下,要查询的某个字段既不存在于redis缓存中,在数据库中也没有,这样所有的请求瞬间全部落在数据库上,导致数据库崩溃。而
原创
发布博客 2020.06.24 ·
271 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java序列化与反序列化

Java序列化与反序列化1. 什么是序列化?为什么要使用序列化?2. 使用序列化2.1 错误使用示例2.2 正确使用示例2.3 集合中序列化的使用2.3 正确使用进阶3. 总结1. 什么是序列化?为什么要使用序列化?序列化就是将对象的状态信息转换成可以存储或传输的过程。将对象当前状态存储起来。而反序列化就是从存储区将对象重新创建出来。简单来说,序列化就是将对象转换成一个二进制字节流,方便保存到本地或进行网络传输。2. 使用序列化Java io库提供了两个流来实现对象的序列化与反序列化,Object
原创
发布博客 2020.06.20 ·
215 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

同步工具类之CountDownLatch

同步工具类之CountDownLatch1.CountDownLatch的作用2.CountDownLatch的使用3.countDownLatch的原理3.1 countDown原理3.2 await原理4.CountDownLatch与CyclicBarrier的区别1.CountDownLatch的作用CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。 我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师
原创
发布博客 2020.06.17 ·
296 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

代理模式

代理模式1.什么是代理模式2.代理模式的使用场景3.代理模式的实现3.1 静态代理3.2 JDK动态代理2.3 cglib动态代理3.总结1.什么是代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式,即通过代理对象访问目标对象。这样做的好处是: 在不修改目标对象源码的基础上,通过代理可以实现对目标对象进行扩展。简单来说:就是我们通过在某个接口(Interface)的实现类(preClass)的基础上,新建一个代理对象(proxyClass)来实现该接口。该代理对象中调用了p
原创
发布博客 2020.06.15 ·
177 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ReentrantLock可重入锁的实现原理

ReentrantLock可重入锁的实现原理1. Lock接口2. 公平锁和非公平锁的实现2.1 公平锁2.2 非公平锁3.总结首先先介绍Lock接口,然后通过分析ReentrantLock的lock方法和unlock方法,来解释ReentrantLock的内部原理.1. Lock接口Lock接口,是对控制并发的工具的抽象。它比使用synchronized关键词更灵活,并且能够支持条件变量。它是一种控制并发的工具,一般来说,它控制对某种共享资源的独占。也就是说,同一时间内只有一个线程可以获取这个锁
原创
发布博客 2020.06.11 ·
1398 阅读 ·
2 点赞 ·
3 评论 ·
6 收藏

java集合(三)ArrayList源码分析

java集合(三)ArrayList源码分析1. arrayList的成员变量2.arrayList的构造方法2.1 无参数构造(空数组)2.2 用指定的初始容量构造一个空列表2.3 构造包含指定collection元素的列表,这些元素利用该集合的迭代器按顺序返回3. ArrayList扩容3.1 add方法3.2 ensureCapacityInternal方法3.3 ensureExplicitCapacity方法3.4 grow方法进行扩容4. 总结arraylist最主要的就是扩容机制了,我们来看
原创
发布博客 2020.06.05 ·
165 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多