W墨眉W
码龄7年
关注
提问 私信
  • 博客:110,037
    110,037
    总访问量
  • 106
    原创
  • 1,766,480
    排名
  • 40
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:安徽省
  • 加入CSDN时间: 2018-04-20
博客简介:

wangqsse的博客

查看详细资料
个人成就
  • 获得74次点赞
  • 内容获得4次评论
  • 获得280次收藏
  • 代码片获得383次分享
创作历程
  • 1篇
    2024年
  • 4篇
    2023年
  • 103篇
    2020年
成就勋章
TA的专栏
  • 系统设计、代码精进之路
  • Java多线程
    5篇
  • 算法设计与分析(海量数据)
    3篇
  • 分布式锁
    2篇
  • 中间件
    14篇
  • 秒杀系统
    5篇
  • 算法题型专题
    5篇
  • 数据库
    5篇
  • 设计模式
    6篇
  • 剑指offer
    8篇
  • JVM
    8篇
  • 项目实战
    5篇
  • Java基础
    3篇
兴趣领域 设置
  • 大数据
    spark
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

MySQL中having和where的区别及应用详解

WHERE子句用于在执行查询之前筛选行,而HAVING子句用于在执行聚合查询后筛选结果集。WHERE出现在FROM子句之后,GROUP BY子句之前;而HAVING出现在GROUP BY子句之后、ORDER BY子句之前。WHERE可以使用比较操作符和逻辑操作符来指定过滤条件,而HAVING不仅可以使用比较操作符和逻辑操作符,还可以使用聚合函数。
原创
发布博客 2024.03.06 ·
2349 阅读 ·
26 点赞 ·
1 评论 ·
16 收藏

springboot切面应用

需要使用注解@Aspect和Componet来实现。自定义注解来实现切点方法的定位。无侵入的实现功能的增强。
原创
发布博客 2023.07.06 ·
530 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

springboot自定义拦截器

与过滤器的区别,过滤器实现的是 javax.servlet.Filter接口,而这个接口是在Servlet规范中定义的,也就是说过滤器Filter 的使用要依赖于Tomcat等容器,导致它只能在web程序中使用。而拦截器(Interceptor) 它是一个Spring组件,并由Spring容器管理,并不依赖Tomcat等容器,是可以单独使用的。接口方法的实现逻辑,拦截处理接口入参,打印入参值、请求时间、url、ip、接口路径。拦截器需要被spring容器管理,定义之后需要注册到容器中才能生效。
原创
发布博客 2023.07.06 ·
953 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

springboot统一拦截包装接口返回值

方法返回值类型注解(此注解使用在controller的方法上,用来标识接口返回的数据类型,可以有json、html或者ingore),只要不是ignore、html或xml,就当做json,在方法handleReturnValue中使用Result来统一包装。包装器(把处理器handler加入到RequestMappingHandlerAdapter的list中)代替手动封装每个接口的返回值。
原创
发布博客 2023.07.06 ·
710 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

springboot分组校验

接口insert和update的入参都是StudentReq,其中的字段id和sex分别被注解StudentValidator.Update.class和StudentValidator.Insert.class表示,同时接口层面也使用了注解标识。则接口会校验被标识的字段。主要2个场景,场景1:多个接口使用相同的入参,不同接口需要校验的内容不同。场景2:针对同一个接口,某个值(一般是类型)的不同会影响其他值的内容,此时需要根据某个值的内容来做不通的校验。
原创
发布博客 2023.07.06 ·
1528 阅读 ·
0 点赞 ·
0 评论 ·
6 收藏

NIO异步通讯原理

1、相关概念(1)阻塞(Block)和非阻塞(Non-Block): 关注的是线程或者进程在运行过程中是否等待调用结果的状态,多用于server端数据处理方式。 阻塞:程序运行过程中,当前线程或者进程在数据返回前会被操作系统挂起,只有等到返回数据后才继续执行(BIO模型) 非阻塞:当前线程或者进程运行过程中,不管数据有没有准备好都不会被操作系统挂起而是直接继续执行其他工作。(2)同步(Synchronization)和异步(Asynchronous)的方式:...
原创
发布博客 2020.09.06 ·
2202 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

Java线程池的状态

1、线程池也有自己的生命周期,不同于线程的新建状态,就绪状态,运行状态,阻塞状态,死亡状态等状态,线程池有5种状态:Running,SHUTDOWN,STOP,TIDYING,TERMINATED。线程池状态定义代码如下:private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));private static final int COUNT_BITS = Integer.SIZE - 3;private s...
原创
发布博客 2020.09.06 ·
403 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

工厂模式——简单工厂模式、工厂方法模式和抽象工厂模式

1、简述  工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式,属于创建型模式。2、不使用工厂模式  (1)类图分析    一个接口Computer,接口有两个实现类HP和Apple,同时有一个测试类Client。不使用工厂模式时,在Client中直接通过new操作符类创建HP和Apple类的实例。  (2)代码展示    Computer接口:package com.factory;public interface Computer { void comput
原创
发布博客 2020.09.05 ·
489 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

单例模式

1、单例模式定义  单例模式可定义为:一个类只有一个实例,并且该类能够自行创建此实例的模式。在Java中,单例模式可以保证一个类在JVM中只有一个实例对象存在。  一般情况下,我们定义一个普通的类之后,当需要该类的实例对象时只需要通过new操作符就可以获得此类的一个实例对象,这是因为Java类都包含一个或一个以上的构造方法,构造方法用于构造该类的实例对象,Java语言通过new关键字来调用构造方法,从而返回该类的实例对象。还需要明确的是,当没有在类中自定义构造方法时候,系统会为类提供一个默认的无参构
原创
发布博客 2020.09.05 ·
161 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

建造者模式——案例分析与代码演示

1、概述  建造者模式多用在对象构成比较复杂的场景中,比如汽车、电脑等包含的组件数量和种类很多很大的情形下。建造者(Builder)模式的定义如下,把一个复杂对象的构造与它的装配分离,使同样的构造过程可以创建不同的装配,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象(小的组件),然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。  由于实现了构建和装配的解耦,不同的构建器相同的装配,可以产生不同的对象;相同的构建器,不同的装配顺
原创
发布博客 2020.09.05 ·
194 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

代理模式——案例分析与代码演示

1、代理模式定义 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。比如租房中介,我们想租房的时候找租房中介,租房中介是户主的代理,代替户主带着租客看房、签约等后续后续操作。此模式的UML图如下:2、代理模式的使用场景(1)控制访问:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。(2)功能增强(符合开闭原则...
原创
发布博客 2020.09.05 ·
350 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java中Thread类的start()和run()方法

1、两个方法的区别start(): 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程。举例说明:class ThreadTest extends Thread{ public void run(){ ... } };然后假设在main方法中带创建了一个线程mythread...
原创
发布博客 2020.08.30 ·
3257 阅读 ·
0 点赞 ·
0 评论 ·
10 收藏

Java实现多线程的两种方式讲解

1、两种方式 继承Thread和实现Runnable接口 a、Runnable是一个接口,该接口中只包含了一个run()方法。我们可以定义一个类A实现Runnable接口;然后,通过new Thread(new A())等方式新建线程,通过这种方式创建出来的多个线程共享A类对象的数据。它的定义如下: public interface Runnable { public abstract void run(); } b、...
原创
发布博客 2020.08.30 ·
1815 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

Java中线程池拒绝策略——代码讲解

1、在使用ThreadPoolExecutor创建多线程时候,需要出入多个参数,如下: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...
原创
发布博客 2020.08.30 ·
760 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Quartz概念详解

1、Quartz是什么: Quartz是由Java开发,可以用来执行定时任务的开源框架2、主要概念Scheduler- 与调度程序交互的API。 Job - 由希望由调度程序执行的组件实现的接口。 JobDetail - 用于定义作业的实例。 Trigger(即触发器) - 定义执行给定作业的计划的组件。 JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。 TriggerBuilder - 用于定义/构建触发器实例。3、Scheduler...
原创
发布博客 2020.08.16 ·
2101 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

Redis数据类型——set

1、简介 Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。2、操作(1)SADD key member1 [member2]——向集合添加一个或多个成员(2)SCARD key——获取集合的成员数(3)SMEMBERS key——返回集合中的所有成员(4)SISMEMBER key member——判...
原创
发布博客 2020.08.01 ·
173 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis数据类型——list

1、简介 Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 2的32次方- 1 个元素 (4294967295, 每个列表超过40亿个元素)。2、操作(1)LPUSH key value1 [value2]——将一个或多个值插入到列表头部(2)LPOP key——移出并获取列表的第一个元素返回的是小米,不是华为。因为是通过lpush先后插入huawei和xiaomi,所以xiaom...
原创
发布博客 2020.08.01 ·
143 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Redis数据类型——hash

1、简介 Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 232- 1 键值对(40多亿)。2、操作(1)HSET key field value——将哈希表 key 中的字段 field 的值设为 value(2)HLEN key——获取哈希表中字段的数量(3)HGETALL key——获取在哈希表中指定 key 的所有字段和...
原创
发布博客 2020.07.31 ·
202 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JVM监控命令之——JSTAT

1、简介JSTAT即JVM Statistics Monitoring Tool,JVM统计数据监控工具,可以用来查看JVM中GC、类加载等信息[option] : 操作参数 LVMID : 本地虚拟机进程ID [interval] : 连续输出的时间间隔 [count] : 连续输出的次数(默认一直打印)参数解析:Option Displays… class class loader的行为统计。Statistics on the behavior of the cl
原创
发布博客 2020.07.29 ·
345 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JVM监控命令之——JSTACK

1、简介 stack trace,用于打印java线程的调用栈(执行栈,瞬时),包括class全名、方法名、行号等,如果指定-m还会打印native帧;不过对于实际工作情况,我们通常用于追踪多线程任务调度过程、对象lock(或者死锁)、并发同步阻塞、IO线程执行状态等;比如排查某个线程为何wait(假死,阻塞等)。 也即是用来查看JVM线程快照的命令,线程快照是当前JVM线程正在执行的方法堆栈集合。使用jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环等。jsta...
原创
发布博客 2020.07.29 ·
441 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多