自定义博客皮肤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)
  • 资源 (14)
  • 收藏
  • 关注

原创 你了解HashMap和TreeMap吗,他们应该在什么情况下使用?如果不清楚,那么你一定要看这篇文章哦

介绍TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照Key值升序排序的;TreeMap的实现是基于红黑树结构。适用于按自然顺序或自定义顺序遍历键(key)。HashMap<K,V>的Key值实现散列hashCode(),分布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中插入、删除和定位元素。拓展1、HashMap 和 TreeMap 的实现HashMap: 基

2020-07-30 22:30:30 979

原创 浅谈AQS中Semaphore信号量源码解读

前言其实Semaphore源码上的注释就说的比较清楚作用是如何的,下面是从源码翻译过来的解释:计数信号灯。从概念上讲,信号量维护一组许可证。如果需要,acquire方法就是直到获得许可才会继续执行(阻塞)。release()方法会添加一个许可证,或者是释放acquire占据的许可。但是,其实没有实际存在许可证这个实体对象;simaphore只是记录可用的数量并相应地采取行动。详解分析Semaphore通常用于限制线程的数量,而不能访问某些(物理或逻辑)资源。例如,以下是一个使用信号量控制对项目池的访

2020-07-29 22:49:54 206

原创 java多线程编程的核心之----AQS源码解析

前言什么是AQS, 它的全称AbstractQueuedSynchronizer,它作为抽象类无法单独使用,需要有具体实现,不同的实现中自己定义什么状态意味着获取或者被释放。AQS的原理是什么AQS内部维护一个先进先出(FIFO)的等待队列叫做CLH队列,当一个线程来请求资源时,AQS通过状态判断是否能获取资源,如果不能获取,则挂起这个线程,和状态一起封装成一个Node节点放在队尾,等待前面的线程释放资源好唤醒自己,所以谁先请求的谁最先获得机会唤醒,当然新线程可能加塞提前获取资源,在源码解析可以看到原

2020-07-28 22:59:49 99

原创 对于synchronize和volatile你了解有多深呢

原子性首先是我们彼此都要保持一致的观点:原子(Atomic)操作指相应的操作是单一不可分割的操作对int型变量conut执行counter++的操作不是原子操作这可以分为3个操作读取变量counter的当前值拿counter当前值和1做加法运算将counter的当前值增加1后赋值给counter变量上面的步骤2,很有可能在执行的时候就已经被其他线程修改了,其所为的“当前值”已经是过期的我们以decl (递减指令)为例,这是一个典型的"读-改-写"过程,涉及两次内存访问。设想在不同CPU运

2020-07-27 23:20:29 110

原创 简单谈谈nginx的location的优先之

Location的表达式类型~ 表示执行一个正则匹配,区分大小写~* 表示执行一个正则匹配,不区分大小写^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location= 进行普通字符精确匹配。也就是完全匹配Location优先级在nginx的location和配置中location的顺序没有太大关系,与location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。以下是按优先级排列说明:等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。^~

2020-07-27 23:09:17 83

原创 快速构建FastDFS分布式文件系统,该篇文章你不得不看哦

前言说起分布式文件管理系统,大家可能很容易想到 HDFS、GFS 等系统,前者是 Hadoop 的一部分,后者则是 Google 提供的分布式文件管理系统。除了这些之外,国内淘宝和腾讯也有自己的分布式文件管理系统,都叫 TFS(Taobao File System 和 Tencent File System)。相对于上面提到的这些分布式文件管理系统而言,FastDFS 可能离我们 Java 工程师更近一些,因为文件上传这个功能太常见了,而想要搭建独立的分布式文件管理系统,FastDFS+Nginx 组合

2020-07-26 16:22:16 144

原创 简单聊聊java主要的几种数据库连接池,你知道的有几种呢!!

背景常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等- C3p0::开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。- DBCP (Database Connection Pool):由Apache开发的一个Java数据库连接池项目, Jakarta commons-pool对象池机制

2020-07-26 15:57:15 1256

原创 今天闲来无事,就简单分享一下Arraylist的源码分析

背景现在看 一个简单的main函数,直接上代码public class ArrayList{ public static void main(String[] args){ List list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e");

2020-07-26 15:40:03 96

原创 lambda让你的代码看起来高大上

背景lambda表达式是jdk1.8引入的新功能,它可以让我们的代码变得更加简洁,更加紧凑。我们开始介绍下面几个功能方法引用在Lambda表达式中,将其划分了几块。这一行就是lambda表达式。() -> System.out.println(“使用Lambda表达式”);下面我们对lambda的格式进行一个介绍:(1)左边括号:lambda的形参列表,就好比是我们定义一个接口,里面有一个抽象方法,这个抽象方法的形参列表。(2)箭头:lambda的操作符,所以你看见这个箭头心中知道这是一个l

2020-07-25 22:56:35 145

原创 Redis 你踩过哪些坑,今天就来说说我踩过的scan “坑”记

背景因为在之前的一家公司,因为redis服务器内存吃紧,需要删除一些无用的没有设置过期时间的key。大概有500多w的key。虽然key的数目听起来挺吓人。但是自己玩redis也有年头了,这种事还不是手到擒来?想了下,具体方案是通过lua脚本来过滤出500w的key。然后进行删除动作。lua脚本在redis server上执行,执行速度快,执行一批只需要和redis server建立一次连接。筛选出来key,然后一次删1w。然后通过shell脚本循环个500次就能删完所有的。以前通过lua脚本做过类似批

2020-07-24 23:28:50 705 1

原创 兄弟,不懂CompletableFuture,你敢说自己精通并发编程?

前言对于 Java 后端的同学,在 Java1.8 之前想实现异步编程,还想避开上述这些烦恼,ReactiveX 应该是一个常见解决方案(做Android 的应该会有了解)。如果熟悉前端同学, ES6 Promise(男朋友的承诺)也解决了异步编程的烦恼天下语言都在彼此借鉴相应优点,Java 作为老牌劲旅自然也要解决上述问题。又是那个男人,并发大师 Doug Lea 忧天下程序员之忧,解天下程序员之困扰,在 Java1.8 版本(Lambda 横空出世)中,新增了一个并发工具类 CompletableF

2020-07-23 23:51:49 265

原创 关于JAVA枚举类,你知道的有多少,下面一起学习学习吧

前言enum(枚举)是 Java 1.5 时引入的关键字,它表示一种特殊类型的类,默认继承自 java.lang.Enum。举例为了证明这一点,我们来新建一个枚举 PlayerType:public enum PlayerType { TENNIS, FOOTBALL, BASKETBALL}两个关键字带一个类名,还有大括号,以及三个大写的单词,但没看到继承 Enum 类啊?别着急,心急吃不了热豆腐啊。使用 JAD 查看一下反编译后的字节码,就一清二楚了。public

2020-07-22 23:16:33 111

原创 兄弟,怒我直言,你真的完全了解static关键字吗

前言说到static关键字,只能给初学者几点建议(高手让道哦),就像我刚学java的那些年一样,总的来说:static 关键字可用于变量、方法、代码块和内部类,表示某个特定的成员只属于某个类本身,而不是该类的某个对象。一一举例静态变量静态变量也叫类变量,它属于一个类,而不是这个类的对象public class Writer { private String name; private int age; public static int countOfWriter

2020-07-22 22:53:54 94

原创 提供一个简单的ThreadLocal工具类,请笑纳好啊好啊

这个简单了,不多说,直接上代码package com.duoku.base.util;import com.google.common.collect.Maps;import org.springframework.core.NamedThreadLocal;import java.util.Map;/** * Description: * * @author TongWei.Chen 2019-09-09 18:35:30 */public class ThreadLocalUt

2020-07-21 23:37:12 361

原创 检验一下你到底会不会ThreadLocal,来摸个底~,,,文章将抛出7个问题

问题和Synchronized的区别存储在jvm的哪个区域真的只是当前线程可见吗会导致内存泄漏么为什么用Entry数组而不是Entry对象你学习的开源框架哪些用到了ThreadLocalThreadLocal里的对象一定是线程安全的吗概述ThreadLocal类是用来提供线程内部的局部变量。让这些变量在多线程环境下访问(get/set)时能保证各个线程里的变量相对独立于其他线程内的变量。ThreadLocal是一个关于创建线程局部变量的类。通常情况下,我们创建的成员变量都是线程不安

2020-07-21 23:33:30 117 1

原创 Bigdecimal一定不会丢失精度吗,如果你真这样认为,那就大错特错了

前言我们基本已经形成了常识,需要用到金钱的地方要用BigDecimal而不是其他,而我们也都知道浮点型变量在进行计算的时候会出现丢失精度的问题。那么,你知道其实BigDecimal也会丢失精度吗?而使用BigDecimal的背后又有什么值得去探究的地方吗?今天,告诉你,知其然,也知其所以然。如下一段代码:System.out.println(0.05 + 0.01); System.out.println(1.0 - 0.42); System.out.println(4.015 * 100

2020-07-21 23:10:59 831

原创 详细讲解为什么HashMap线程不安全

前言一直以来都知道HashMap是线程不安全的,但是到底为什么线程不安全,在多线程操作情况下什么时候线程不安全?让我们先来了解一下HashMap的底层存储结构,HashMap底层是一个Entry数组,一旦发生Hash冲突的的时候,HashMap采用拉链法解决碰撞冲突,Entry内部的变量:final Object key;Object value;Entry next;int hash;通过Entry内部的next变量可以知道使用的是链表,这时候我们可以知道,如果多个线程,在某一时刻同时操

2020-07-18 22:57:58 157

原创 高效遍历HashMap的方式,你知道的有几种呢

前言在编程开发中,相信每个人都用到了HashMap这种数据结构,但如何高效的遍历HashMap呢,相信没多少人知道,如果你知道,那你又知道几种呢。。。下面我们一一介绍高效遍历HashMap的五种方式现在就来看看有5钟高效遍历的方式,看代码package cn.enjoyedu.nio.nio;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class TestHashMap {

2020-07-13 22:27:33 950

原创 试试用stream代理迭代器处理集合,真香

背景我们知道stream流式处理是jdk1.8新增的功能,在此之前一直是迭代器处理集合之类的类型什么是流现在我们认识一下流,流是 Java API 的新成员,允许程序员以声明式的方式处理集合数据,并且支持链式调用、支持并行处理。用流处理的集合数据高效且易读。流与集合的异同集合的主要功能是以一定的时间和空间复杂度存储和访问元素,而流主要是用于元素计算集合中的元素可以随意添加和删除,而流不能添加和删除元素流的元素是按需计算的,只有当用到时他才会参与计算,而集合中的元素必须提前全都准备好

2020-07-12 23:22:06 178

原创 如何通过redis设计高效的系统点赞功能

背景我们经常去网站或其他购物商城时,经常看到对某个商品、文章,用户等进行点赞,如果实时访问数据库的话,那么系统肯定很低效,甚至可能宕机,那么如何设计一个搞笑的点赞功能呢?请接着看解决方案点赞功能在很多系统中都有,但别看功能小,想要做好需要考虑的东西还挺多的。可以将点赞或取消点赞功能通过缓存redis来实现。要想通过redis来设计的话,首先了解redis的数据结构类型:Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集

2020-07-11 22:34:08 1063 4

原创 Java 是如何实现 Future 模式的

前言1 Future是什么?我们平时网购买东西,下单后会生成一个订单号,然后商家会根据这个订单号发货,发货后又有一个快递单号,然后快递公司就会根据这个快递单号将网购东西快递给我们。在这一过程中,这一系列的单号都是我们收货的重要凭证。因此,JDK的Future就类似于我们网购买东西的单号,当我们执行某一耗时的任务时,我们可以另起一个线程异步去执行这个耗时的任务,同时我们可以干点其他事情。当事情干完后我们再根据future这个"单号"去提取耗时任务的执行结果即可。因此Future也是多线程中的一种应用模式

2020-07-11 00:47:14 257

原创 为什么不建议把数据库部署在Docker容器内?

前言近2年Docker非常的火热,各位开发者恨不得把所有的应用、软件都部署在Docker容器中,但是您确定也要把数据库也部署的容器中吗?这个问题不是子虚乌有,因为在网上能够找到很多各种操作手册和视频教程,小编整理了一些数据库不适合容器化的原因供大家参考,同时也希望大家在使用时能够谨慎一点。目前为止将数据库容器化是非常不合理的,但是容器化的优点相信各位开发者都尝到了甜头,希望随着技术的发展能够更加完美的解决方案出现。Docker不适合部署数据库的7大原因1、数据安全问题不要将数据储存在容器中,这

2020-07-10 00:11:15 1013 2

原创 如何快速搭建hadoop大数据平台

前言最近有朋友问起,怎么样快速搭建一个hadoop大数据平台,大家都知道,hadoop最核心的无非是HDFS和MapRedure, Java并发编程框架中的Fork/join 有点类似MapReudre,下面我们快速讲解一下如何搭建一个hadoop平台,前期准备搭建一个hadoop集群,首先我们按三台服务器的规模来计算。需要准备如下条件三台Centos服务器hadoop压缩包 hadoop-3.1.1.tag.gzjdk安装包jdk-8u181-linux-x64.tar.gz,每台linux

2020-07-08 22:00:48 2205

原创 怎么解决mysql升级到8以上版本连接时区问题

前言今天把数据库版本从5.7升级到8.0后,启动springboot项目时报如下错误The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more

2020-07-07 16:44:35 889

原创 关于线程的三种实现方式,其实没你想象的那么难

前言大家都知道Java多线程开发中,实现线程有三种方式,继承Thread类,实现Runnable、Callable接口等,下面就举例说明三种实现方式实现代码具体实现代码如下package springbootdocker.demo.service;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;

2020-07-06 21:56:02 161

原创 微服务的边界到底该怎么进行划分

前言现在做系统架构师,如果不知道什么是微服务,不知道springCloud,doubbo你都不好说自己是架构师,那既然微服务这么重要,那么服务边界到底怎么划分才是合理的呢。。。实施方案服务的合理划分,即服务边界的设定是微服务成功的重中之重,是所有项目实施之前必须认真思考,严肃对待的。一个合理的服务划分应该是:符合团队结构 服务的落地与维护靠人,靠的是执行团队(包含业务、产品、技术、测试与运维团队),所以服务的设定一定是与团队结构相辅相成的,同一个系统不同的执行团队往往会有不同的且都合理的服务划分

2020-07-05 11:25:58 2201

原创 几分钟搞定docker容器部署redis集群方法

前言相信大家都知道怎么在docker中部署redis单例,那怎么才能部署redis集群方案呢。。。接下来不要走开,一步步教你怎么搞定docker下的redis集群实施步骤接下来将是重中之重,一步步讲解拉取redis镜像拉取最新redis镜像如下docker pull redis创建配置文件模板port ${PORT} ##节点端口cluster-enabled yes ##cluster集群模式cluster-config-file nodes.conf ##集群配置名c

2020-07-04 23:19:40 770

原创 比如像jpg,jpeg,png,pdf 这类文件通过nginx时,以附件形式下载,而不是浏览器浏览后,再另存为,很简单,一个配置搞定

背景有没有碰到过,有时候通过浏览器下载一个图片或pdf文件时,而是直接预览,并不是另存为,这样是不是很苦恼啊。。解决方案只需要在nginx代理,加入如下代理就可以了if ($request_uri ~* ".pdf") { # 如果是pdf文件则直接下载; add_header Content-Disposition "attachment"; }如图写在最后这是在工作中遇到的问题,同时希望帮助有同样疑问的朋友想了解更多知识,请关注我吧 _

2020-07-03 14:15:55 749 1

原创 springboot 整合 docker, 进行自动化部署,其实没你想象的那么难

前言要在spring boot 项目中整合docker,实现自动化部署,其实是非常简单的事情,下面我们一一进行详细说明,服务端开启docker远程端口要开启docker远程端口,需要修改配置文件,命令vim /lib/systemd/system/docker.service修改ExecStart 这一行,中间增加-H tcp://0.0.0.0:2375,如下图退出并保存重新加载配置文件systemctl daemon-reload重启docker服务system

2020-07-02 17:38:17 4457 1

原创 几分钟搞定在docker容器运行mysql数据库

前言睡着容器技术的快速发展,给开发带来的极大的便利,比如之前安装一个mysql数据库,需要花费1个小时时间,如果碰到问题可能会更久,现在通过容器技术,几分钟轻松搞定。下面我们开始吧查找镜像通过命令获取可用的镜像文件docker search mysql显示各个版本,可以制定拉取mysql版本,现在我们拉取官方的最新版本 命令如下docker pull mysql 或者 docker pull redis:latest##不指定版本,默认最新的显示拉取的镜像显示镜像命令为

2020-07-01 22:34:11 919

nacos-mysql.sql 为nacos链接mysql数据库的脚本,包括初始化数据

nacos-mysql.sql 为nacos链接mysql数据库的脚本,包括初始化数据

2022-10-18

flinkdemo.rar

flinkdemo, 里面分别介绍了流式计算的单词统计,聚合,从kafka的数据生产,到flink从kafka消费再写入mysql,源是mysql消费数据再写入目标数据等一系列的代码,经过测试,完成能运行的

2020-09-25

最新的税收分类编码表

最新最全的税收分类编码表,各种大类商品进行精确的匹配,分类精确可靠。通过税局官网整理后获得,花费了不少精力哈

2020-09-22

completabletuture使用

completabletuture使用方法介绍,每个方法都进行了测试,使用sprintboot,也可以直接使用java文件进行测试

2020-08-19

springboot 整合消息队列kafka(kafka-with-springboot.rar)

springboot整合kafka消息队列,提供了完整的demo,可以供初学者或对有一定经验的童鞋学习使用,里面demo是经过测试,完全可用的

2020-08-19

基于RateLimiter的令牌桶算法实现限速控制和计算法实现限流控制

本demo适用于分布式环境的基于RateLimiter令牌桶算法的限速控制与基于计数器算法的限量控制,可应用于中小型项目中有相关需求的场景(注:本实现未做压力测试,如果用户并发量较大需验证效果)。

2020-08-01

建造者模式源代码---BuilderDemo.rar

这是一个简单的建造者模式的开发demo,对于想了解设计模式的童靴还是有一定的学习和借鉴的作用。源代码都是经过自己测试,完全可用

2020-06-27

装饰器模式的简单demo

简单了说明,并用代码的方式解释了什么是装饰器模式,方便想要学习设计模式的童靴可以更好的学习和掌握设计模式,是自己的代码变得更高效和优雅

2020-06-27

静态代理和动态代理Demo

资源列举了设计模式中的静态代理和动态代理的简单java实现,jdk1.8版本经过测试验证,对于想学习设计模式的童靴应该有所帮助

2020-06-24

责任链设计模式开发的demo

写了几个实现责任链模式的代码,仅供参考,环境jdk1.8,代码完成可用,经过测试的,对于初学者还是有一定的帮助,

2020-06-23

ForkJoinUtil.java,一个分而治之的框架工具类

Fork/Join框架的测试demo,含源代码。 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+2+。。+10000,可以分割成10个子任务,每个子任务分别对1000个数进行求和,最终汇总这10个子任务的结果

2020-06-17

ImportServiceImpl.java

通过上传excel文件,使用poi读取excel的数据内容及图片信息,保存到数据库及服务器磁盘中,支持xls,xlsx两种格式

2020-06-16

Springboot+SpringCloud微服务架构demo

用Springboot 2.2.2.RELEASE,Spring Cloud Hoxton.SR1 搭建的最基本的微服务架构demo,供初学者学习springcloud使用,

2020-06-04

通过shell脚本,备份mysql数据库

linux系统通过shell脚本,备份mysql数据库,并通过定时任务的配置,每天在设定的时间内执行备份计划

2020-06-04

qt5-qtwebkit-5.212.20200324-1-omv4002.x86_64.rpm

成功安装Teamviewer的关键,解决:缺少libQt5WebKitWidgets.so的关键包。 以下是错误原文 --> 解决依赖关系完成 错误:软件包:teamviewer-15.5.3-0.x86_64 (/teamviewer_15.5.3.x86_64) 需要:libQt5WebKitWidgets.so.5()(64bit) >= 5.5 错误:软件包:teamviewer-15.5.3-0.x86_64 (/teamviewer_15.5.3.x86_64) 需要:libQt5WebKit.so.5()(64bit) >= 5.5 您可以尝试添加 --skip-broken 选项来解决该问题 您可以尝试执行:rpm -Va --nofiles --nodigest

2020-05-12

空空如也

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

TA关注的人

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