自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 kafka

同步的通信⽅式会存在性能和稳定性的问题。

2022-11-07 00:30:52 617 1

原创 hutool(字符串工具-StrUtil与类型转换工具类-Convert)

不得不提一下这个方法,有人说String有了subString你还写它干啥,我想说subString方法越界啥的都会报异常,你还得自己判断,难受死了,我把各种情况判断都加进来了,而且index的位置还支持负数哦,-1表示最后一个字符(这个思想来自于Python,如果学过Python的应该会很喜欢的),还有就是如果不小心把第一个位置和第二个位置搞反了,也会自动修正(例如想截取第4个和第2个字符之间的部分也是可以的哦~) 举个栗子。因为字符串牵涉到编码问题,因此必须传入编码对象,此处使用UTF-8编码。

2022-11-03 00:22:45 10201 1

原创 hutool(Bean工具-BeanUtil)

把一类中需要进行设置和获得的属性访问权限设置为private(私有的)让外部的使用者看不见摸不着,而通过public(共有的)set和get方法来对其属性的值来进行设置和获得,而内部的操作具体是怎样的?通常Java中对Bean的定义是包含setXXX和getXXX方法的对象,在Hutool中,采取一种简单的判定Bean的方法:是否存在只有一个参数的setXXX方法。Bean之间的转换主要是相同属性的复制,因此方法名为copyProperties,此方法支持Bean和Map之间的字段复制。

2022-11-03 00:12:56 8827 1

原创 hutool(枚举工具-EnumUtil与树结构工具-TreeUtil)

这种树状结构可以根据配置文件灵活的定义节点之间的关系,也能很好的兼容关系数据库中数据。树状结构中最大的问题就是关系问题,在数据库中,每条数据通过某个字段关联自己的父节点,每个业务中这个字段的名字都不同,如何解决这个问题呢?获取枚举字符串值和枚举对象的Map对应,使用LinkedHashMap保证有序,结果中键为枚举名,值为枚举对象。PR的提供者提供了一种解决思路:自定义字段名,节点不再是一个bean,而是一个map,实现灵活的字段名定义。获得枚举名对应指定字段值的Map,键为枚举名,值为字段值。

2022-11-03 00:05:33 2539

原创 hutool(双向查找Map-BiMap与可重复键值Map-TableMap)

BiMap要求key和value都不能重复(非强制要求),如果key重复了,后加入的键值对会覆盖之前的键值对,如果value重复了,则会按照不确定的顺序覆盖key,这完全取决于map实现。我们知道在Guava中提供了一种特殊的Map结构,叫做BiMap,它实现了一种双向查找的功能,即根据key查找value和根据value查找key,Hutool也同样提供此对象。因此,Hutool创建了TableMap这类数据结构,通过键值单独建立List方式,使键值对一一对应,实现正向和反向两种查找。

2022-11-02 23:51:41 1486

原创 hutool(Map工具-MapUtil)

filter 过滤过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:1、过滤出需要的对象,如果返回null表示这个元素对象抛弃 2、修改元素对象,返回集合中为修改后的对象。join、joinIgnoreNull、sortJoin将Map按照给定的分隔符转换为字符串,此方法一般用于签名。isEmpty、isNotEmpty 判断Map为空和非空方法,空的定义为null或没有值。MapUtil是针对Map的一一列工具方法的封装,包括getXXX的快捷值转换方法。

2022-11-02 23:47:06 6630

原创 hutool(集合串行流工具-CollStreamUtil)

合并两个相同key类型的map,可自定义合并的lambda,将key value1 value2合并成最终的类型,注意value可能为空的情况。Java8中的新特性之一就是Stream,Hutool针对常用操作做了一些封装。

2022-11-02 23:40:35 1050

原创 hutool(列表工具-ListUtil)

List在集合中中使用最为频繁,因此新版本的Hutool中针对List单独封装了工具方法。其他方法与CollUtil工具类似,很多工具也有重复。

2022-11-02 23:36:38 6360

原创 hutool(集合工具-CollUtil)

这个工具主要增加了对数组、集合类的操作。join 方法将集合转换为字符串,这个方法还是挺常用,是StrUtil.split的反方法。这个方法的参数支持各种类型对象的集合,最后连接每个对象时候调用其toString()方法。sortPageAll、sortPageAll2方法这个方法其实是一个真正的组合方法,功能是:将给定的多个集合放到一个列表(List)中,根据给定的Comparator对象排序,然后分页取数据。这个方法非常类似于数据库多表查询后排序分页,这个方法存在的意义也是在此。

2022-11-02 23:29:20 5133

原创 MYSQL窗口函数的应用

文章目录一、窗口函数应用于排名一、窗口函数应用于排名with student_message(student_name, class_name, score) as ( select 'sqlservercn', 'MYSQL', 95 union all select 'tom', 'MYSQL', 99 union all select 'mary', 'MYSQL', 98 union all select 'jack', 'MYSQL',

2021-11-23 23:15:33 389

原创 MYSQL公共表达式的应用

文章目录一、mysql公共表达式二、使用实例1.引入2.生成序列3.递归查询回复信息一、mysql公共表达式mysql的公共表达式跟select字句一样,不同的是公共表达式需要定义并且可以重复使用,而select字句一般都是现用现写,第二次想用则需要再次去写。公共表达式可以理解为对select字句的定义二、使用实例1.引入代码如下(示例):with cte as (select title, class_idfrom imc_course where study_cnt > 200)

2021-11-23 23:12:26 352

原创 Thread-per-message

文章目录前言一、Thread-per-message简介二、程序例子1.Message类2.Message处理类3.客户端4.执行结果总结特点前言这一节内容比较简单,也就简单列个例子吧一、Thread-per-message简介字面理解就可以了,每个线程处理一个消息。二、程序例子1.Message类代码如下:package threadpermessage;public class Message { private String value; public Mes

2021-10-04 13:38:38 98

原创 CountDownLatch

文章目录前言一、CountDownLatch概述二、代码示例1.共享资源CounDown2.客户端前言日常生活中,通常我们完成一件事之后才会接着干下一件事,而一件事可能被分成多个环节由多个人去同步进行,有的人快,有的人慢。但不管怎样,只有全部人都完成了自己负责的环节才算这件事完成了,下一件事才得以继续。这跟java中的CountDownLatch很像,接下来我们就一起探讨下CountDownLatch一、CountDownLatch概述示例:一个或者多个线程需要在其它线程都完成任务之后才能执行,

2021-09-30 17:29:05 65

原创 Balking Design Pattern

文章目录前言一、Balking Design Pattern概述二、代码示例1.共享资源2.顾客线程(消费者)3.服务员线程4.客户端5.执行结果前言想一下,日常生活中,会有这样一个场景:去海底捞吃饭,海底捞的服务服务员都是服务很周到、很热情的。你的酒杯里没有酒了,他会自动上去服务。可能会有多个服务为你服务,当一个服务员服务完后离开了,这时另一个服务员经过,看到你的酒杯里的酒是满的。这时他就不会再向你服务了。与这个生活场景类似,多线程设计模式里有这么一个模式:Balking Design Patter

2021-09-29 20:56:43 84

原创 Future设计模式

文章目录前言一、什么是未来设计模式?二、代码示例1.Future2.Future实现类3.FutureService4.FutureTask5.客户端6.执行结果前言生活中我们为了完成一件事或者达成一个目标,常常需要别人来帮助,比如:我们要定制某个商品,我们需要商家去帮我们定制完成。再比如,我们要去干洗店洗衣间棉袄。正常情况下我们不会傻乎乎的等商家帮我们定制完成商品,或者让干洗店洗完棉袄,我们才去干自己的事情。一般我们都是把事情交给别人后,直接去干自己的事情了,等我们忙完自己的事情之后再去店里取订制品

2021-09-28 21:21:36 138

原创 读写锁设计模式

文章目录前言一、什么是读写锁设计模式二、问题考虑三、读写锁设计四、需求分析1、共享资源2、写工作线程3、读工作线程4、客户端前言承接上一节讲单线程执行设计模式中例子的问题:读和写用的是同一个锁。当多个线程同时需要进行读操作的时候,只有一个线程能够读,其它线程被阻塞。导致读操作的串行化,这会使得程序的执行效率降低。为了解决这个问题,我们要将读操作并行化。于是就有了ReadWriteLock Design Pattern(读写锁设计模式)。一、什么是读写锁设计模式读写锁设计模式就是将读锁和写锁分离开来

2021-09-25 17:57:09 284

原创 单线程执行设计模式

文章目录前言一、什么是单线程执行设计模式二、简单例子1.大门2.人3.客户端4.执行结果5.结果分析6.问题解决7.解决问题后的执行结果问题延伸前言这节我们一起探讨下多线程最简单的设计模式,单线程执行设计设计模式(Single Thread Execution Design Pattern)一、什么是单线程执行设计模式在某一时刻只有一个线程在执行,其它线程会进入block状态,这就是单线程执行设计模式。二、简单例子这里我们列举一个简单的例子:我们访问一个学校或者一个名人故居的时候都需要登记自己

2021-09-23 22:19:36 339

原创 观察者设计模式

文章目录前言一、什么是观察者设计模式?二、应用场景二、简单代码示例2.读入数据总结前言从本节内容开始我们要正式进入并发编程设计模式的学习了,首先讲的是观察者设计模式,我们先从java的设计模式开始,然后再过度到并发编程的观察者模式一、什么是观察者设计模式?关于什么是观察者模式?我的理解是这样的。首先观察者模式有观察者这么个角色,既然有观察者,那么就有被观察者。然后这个模式强调的是观察者两个字。也就是观察者实时观察这被观察者的一举一动。一旦被观察者的状态发生改变,那么所有的观察者就会做出相应的动作

2021-09-22 22:47:12 60

原创 volatile关键字二

文章目录前言一、volatile关键字的作用以及缺陷二、例子代码示例1三、volatile关键字的使用场景总结前言前两节内容我们讲了cpu内存模型、java内存模型、以及并发编程的三个重要概念。同时也举了个例子引入了volatile大概的作用。那接下里这一讲我们就可以很好的理解volatile的作用了,也就相当于对volatile关键字做最后的总结一、volatile关键字的作用以及缺陷1、保证线程间的可见性怎么保证可见性,相信大家都已经理解了。线程之间,如果有线程对共享变量进行了修改,那么其

2021-09-17 00:42:04 70

原创 并发编程的三个重要概念

文章目录前言一、并发编程的三个重要概念是什么?二、概念引入1.cpu的缓存解析2.cpu如何解决缓存不一致问题二、并发编程的三个概念1.原子性1.可见性3.有序性四、如何保证原子性、可见性、有序性。1.原子性2.可见性3.有序性前言想要学好并发编程,那么久要完全掌握并发编程的相关概念,接下来我们将一起探讨并发编程中的三个重要概念提示:以下是本篇文章正文内容,下面案例可供参考一、并发编程的三个重要概念是什么?1、原子性2、可见性3、有序性二、概念引入1.cpu的缓存解析为了更好的理解并

2021-09-15 23:35:07 327

原创 深入理解volatile关键字一

文章目录前言一、volatile概述二、问题引入1.例子2.执行结果分析总结前言volatile是java的第一个关键字,我们在很多地方都有看到。接下来我们一起探讨下这个关键字的作用和使用场景提示:以下是本篇文章正文内容,下面案例可供参考一、volatile概述volatile作为java的关键字,用来修饰变量,在多线程的场景下,能够保证程序的有序性和可见性。不用sychonized关键字就能实现线程安全。二、问题引入1.例子代码如下(示例):public class Volatile

2021-09-14 23:08:41 92

原创 waitset解读

文章目录前言一、waitset的概念二、例子1.代码例子2.waitset解读前言我们都知道在多线程中有这么一个概念:就是每个对象都有一个wait()方法,这个方法会使得对应的线程进入block状态。那么线程调用wait()方法后为什么会进入block状态呢?以及进入block状态后被唤醒会怎么样呢?接下来将我们一起探讨一下这个问题一、waitset的概念线程的synchronized同步代码块里,monitor调用wait()方法后,该线程就会被存入monitor对象的waitset里,让线程

2021-09-13 22:55:34 756

原创 单例的七种写法

文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warning

2021-09-12 12:53:27 216

原创 Optional的应用

一、使用步骤1.应用代码代码如下:public class OptionalTest { public static void main(String[] args) { User user = new User(); int ii = Optional.ofNullable(user) .flatMap(User::getAddress) .flatMap(Address::getCountry)

2021-08-25 22:50:08 43

原创 Stream流编程收集器

一、使用步骤1.代码示例代码如下:public class CollectorTest { public static void main(String[] args) { List<Student> students = Arrays.asList( new Student("小明", 10, Gender.MALE, Grade.ONE), new Student("小光", 9, Gender.M

2021-08-23 23:05:45 194

原创 Stream流编程终止操作

一、Stream终止操作二、使用步骤1.应用示例代码如下:public class TestForTerminateOperate { public static void main(String[] args) { /** * forEach和forEachOrdered的区别:forEach更快。当平行操作时,forEachOrdered会保持原来的 * 顺序,forEach则不会 */ IntStr

2021-08-23 23:01:13 1315

原创 Stream流编程的中间操作

一、Stram流的中间操作Stream的中间操作分为两类,一类为无状态操作:元素操作跟其它元素没有关系,另一类为有状态操作:元素操作跟其它元素有关,比如求最大最小值、求平均值、排序等二、使用步骤1.如何进行中间操作代码如下:public class StreamMediumOperate { public static void main(String[] args) { //map IntStream.of(1,2,3).map(x -> x *

2021-08-22 15:41:33 1041

原创 Stream流的创建

一、Stream流的创建Stream流编程分为三个部分,分别为流的创建、流的中间操作、流的终止操作。这一节我们进行流的创建二、使用步骤1.如何创建流代码如下(示例):public class StreamNew { public static void main(String[] args) { //根据集合产生 ArrayList list = new ArrayList(); list.stream(); list.pa

2021-08-22 14:42:17 165

原创 Stream概述

文章目录一、Stream是什么?二、初步应用1.代码示例2.结果总结一、Stream是什么?Stream是一个高级迭代器,它不是数据结构,不能存储数据。它可以用来实现内部迭代,内部迭代相比平常的外部迭代,它可以实现并行求值(高效,外部迭代要自己定义线程池实现多线程来实现高效处理)、惰性求值(中没有终止操作,中间操作是不会执行的)、短路操作(拿到正确的结果就返回,不需要等到整个过程完成之后)等二、初步应用1.代码示例代码如下(示例):public class StreamDemo1 { p

2021-08-22 14:01:59 1922

原创 函数式编程与lambda表达式

java函数式编程1:函数式编程的好处(1)提高编码效率,增加代码可读性(2)高阶函数允许我们 1、方法作为参数传给方法 2、别的方法里面创建方法 3、方法返回方法2:lambda表达式(1)定义1、() -> {} 括号里面传参数,大括号为执行体(2)作用1、取代大部分的匿名内部类2、写出更优雅的戴安3、集合遍历的时候能够极大的优化代码的结构4、对函数式接口进行实现(3)要求1、对接口要求:要求接口只有一个需要实现的方法。注意:不是只有一个方法的接口,jdk8之

2021-08-20 17:25:56 94

空空如也

空空如也

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

TA关注的人

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