• 基于netty的构建一个群聊系统

    要求1.群聊系统可以实现服务器端和客户端之间的数据简单通讯(非阻塞)2.通过系统可以实现多人群聊3.服务器端:可以监控用户上线,离线,并实现消息转发功能4.客户端:通过channel可以无阻塞发送消息给其它所有用户,同时可以接受到其它用户发送的消息(由服务端转发得到)代码实现(服务端) import java.io.IOException; import java.net.I...

    Java 2021年05月25日 1233 0
  • Spring Boot 极简集成 Shiro

    1. 前言Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理。Shiro有三大核心组件:Subject:即当前用户,在权限管理的应用程序里往往需要知道谁能够操作什么,谁拥有操作该程序的权利,shiro中则需要通过Subject来提供基础的当前用户信息,Subject 不仅仅代表某个用户,与当前应用交互的任何东西都是Subjec...

    Java 2021年04月21日 1082 0
  • MiniDao1.7.1 版本发布,轻量级Java持久化框架

    项目介绍MiniDao 是一款轻量级JAVA持久层框架,基于 SpringJdbc + Freemarker 实现,具备Mybatis一样的SQL分离和逻辑标签能力。Minidao产生的初衷是为了解决Hibernate项目,在复杂SQL具备Mybatis一样的灵活能力,同时支持事务同步。当前版本:v1.7.1 | 2021-03-29源码下载https://github.com...

    Java 2021年03月30日 1105 0
  • ConcurrentSkipListMap原理

    跳表为了引出 ConcurrentSkipListMap,先带着大家简单理解一下跳表。对于一个单链表,即使链表是有序的,如果我们想要在其中查找某个数据,也只能从头到尾遍历链表,这样效率自然就会很低。跳表就不一样了。跳表是一种可以用来快速查找的数据结构,有点类似于平衡树。它们都可以对元素进行快速的查找。但一个重要的区别是:对平衡树的插入和删除往往很可能导致平衡树进行一次全局的调整...

    Java 2021年03月18日 1396 0
  • ruoyi前后端分离框架增加只通过用户名认证获取token

    背景:最近选型使用ruoyi的前后端分离框架进行研发,除了管理系统部分还有小程序部分功能,需要提供api给小程序部分,而小程序使用openid关联用户名,这样希望提供只根据用户名能够获取token进行后续后台服务接口的访问需求,具体改造如下:增加5个关键类和一个测试类 修改一个config类,具体如下:拦截特殊验证的拦截器类package com.ruoyi.framework...

    Java 2021年03月18日 3312 0
  • 深入理解Java文件读写的底层实现

    继 《Java文件的简单读写、随机读写、NIO读写与使用MappedByteBuffer读写》,本篇通过调用Linux OS文件操作系统函数实现copy命令以加深我们对Java文件读写底层实现的理解。本篇内容包括:文件操作系统函数实战:实现文件拷贝命令实战:使用mmap实现文件拷贝命令文件操作系统函数本篇将介绍的函数有:open、close、write、lseek、read、m...

    Java 2021年03月10日 1553 0
  • HBase常用Api操作

    一、 环境准备新建项目后在pom.xml中添加依赖:<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-server</artifactId> <version>1.3.1</version></depend...

    Java 2021年03月09日 1624 0
  • 集群分布式下日志架构的搭建

    问题1.生产环境中项目节点过多,如何集中管理日志?2.多节点项目中,出现问题如何定位到某个具体节点出现问题?进而迅速获取该节点日志?3.EFK是如何收集管理日志的?演示。4.搭建过程日志基础架构解决效果非容器日志查看效果容器日志查看效果思路首先确定那种日志,容器或者非容器针对于非容器日志,直接采用filebeat采集固定目录日志即可,只不过在采集参数上可以有所调整,可以直接将业...

    Java 2021年03月08日 1406 0
  • java为我们已经提供了各种锁,为什么还需要分布式锁?

    目前的项目单体结构的基本上已经没有了,大多是分布式集群或者是微服务这些。既然是多台服务器。就免不了资源的共享问题。既然是资源共享就免不了并发的问题。针对这些问题,redis也给出了一个很好的解决方案,那就是分布式锁。这篇文章主要是针对为什么需要使用分布式锁这个话题来展开讨论的。不喜勿喷。前一段时间在群里有个兄弟问,既然分布式锁能解决大部分生产问题,那么java为我们提供的那些锁...

    Java 2021年03月08日 1317 0
  • 分布式锁设计方案

    分布式锁设计方案一.需求背景1.背景系统背景解决方案单机系统单体单机部署的系统,需要对某一个共享变量进行多线程同步访问的时候,所有的请求都会分配到当前服务器的jvm内部,然后映射为操作系统的线程进行处理。而这个共享变量只是在这个jvm内部的一块内存空间。使用java并发处理的相关API进行互斥控制(如ReentrantLock或Synchronized)分布式系统由于分布式系统...

    Java 2021年03月08日 1138 0
  • DocFetcher - 开源的文件内容搜索工具

    DocFetcher 是一款 开源 的 文件内容 搜索工具,它除了允许你 搜索电脑 上的 文件名称 查找文件以外,还支持通过 文件内容 进行查找 所需文件。除了 .txt 格式以外,还支持 .xlsx 等 常见格式,该软件支持在 Windows、macOS、Linux 操作系统上 运行使用,建议有 使用需求 的用户 安装使用。DocFetcher 依赖 JRE 环境,安装软件 ...

    Java 2021年03月07日 2132 0
  • Java实现PDF首页转缩略图

    一、maven安装<dependency> <groupId>org.icepdf.os</groupId> <artifactId>icepdf-core</artifactId> <version>6.2.2</version> </dependency>...

    Java 2021年03月05日 1359 0
  • dubbo filter实现参数透传

    在项目中转递参数通常是在接口中传递,然后在每个方法中接受这些参数处理。dubbo提供了rpc上下文可以实现设置和接受这些参数,实现我们的参数透传。(本文于2019年11在个人博客简书发表)1.RpcContext利用RpcContext实现consumer和provicer参数传递例如:消费端: RpcContext.getContext().setAttachment("bi...

    Java 2021年03月05日 3628 0
  • 自己动手写SQL执行引擎

    自己动手写SQL执行引擎前言在阅读了大量关于数据库的资料后,笔者情不自禁产生了一个造数据库轮子的想法。来验证一下自己对于数据库底层原理的掌握是否牢靠。在笔者的github中给这个database起名为Freedom。整体结构既然造轮子,那当然得从前端的网络协议交互到后端的文件存储全部给撸一遍。下面是Freedom实现的整体结构,里面包含了实现的大致模块:最终存储结构当然是使用经...

    Java 2021年03月02日 1070 0
  • 各类数据库驱动包

    我们在编译或使用一些数据同步软件时候,比如Datax、FlinkX、Kettle等,由于此类ETL软件连接的数据库较多,软件本身不提供各类数据库的驱动包,maven也无法找到相应的包,互联网上各类下载不是需要积分就是收费,很是不爽,因此通过在本人使用ETL软件过程中,整理的驱动包提供有需要的同胞使用,避免去互联网上花费较多的时间搜索。 Sybase驱动: jconn3-6.0...

    Java 2021年03月02日 2771 0
  • JVM内存参数设置

    关于JVM内存参数设置有一点想法,在这里记录一下:JVM内存参数设置没有固定的设置,一般都是对系统的业务以及单个业务对象的数据大小有一个初步的预估后,结合实际的业务场景以及并发量,对JVM内存参数进行一个初步的设置,并根据系统的实际运行情况来不断地调整,最后达到最佳的参数配置。下面我就根据之前做做的一个活动协同配置中心的业务,给出一个我认为合理的JVM配置信息针对营销活动推送中...

    Java 2021年03月02日 1867 0
  • Spring Boot部署JAR文件瘦身优化经验分享

    本文截取代码片段来自于对应的完整示例源码工程:https://gitee.com/xautlx/package-optimize-demohttps://github.com/xautlx/package-optimize-demo相关代码和配置均实际执行测试过,如在验证过程发现有任何问题可Issue反馈以便及时更正,感谢支持!概要说明随着Spring Boot的流行,大家体验...

    Java 2021年02月26日 1114 0
  • Java基本数据类型及其包装类

    1、基本数据类型:Java基本数据类型共8种,整数型:byte,short,int,long;浮点型:float,double;字符型:char和布尔型:boolean。数据类型 /占用空间/ 取值范围/ 默认值byte / 1字节 / -128(-2^7)~+127(-2^7-1)0short / 2字节 / -32768(-2^15)~+32767(2^15-1)0int ...

    Java 2021年02月20日 1122 0
  • Strings=newString("xyz")创建几个实例

    从面试题说起String s = new String("xyz"); 创建了几个实例?这是一道很经典的面试题,在一本所谓的Java宝典上,我看到的“标准答案”是这样的:两个,一个堆区的“xyz”,一个栈区指向“xyz”的s。这个所谓的“标准答案”槽点太多,后面我们慢慢分析。虽然答案很离谱,但是我觉得这个问题本身也不具有什么意义,因为问题没有既定义“创建”的具体含义,又没有指定...

    Java 2021年02月14日 1105 0
  • 启动一个没有 main 函数的 java 程序

    作为一名 JAVA 开发者,不知道大家有没有去想过,JAVA 程序为什么一定要从 main 函数执行开始,其实关于这个话题,我大概从网上搜了下,其实不乏有 main 方法是我们学习Java语言学习的第一个方法,也是每个 java 使用者最熟悉的方法, 每个 Java 应用程序都必须有且仅有一个 main 方法 这种说法。那么真的是这样吗?今天就来聊聊这个事情。为什么 main ...

    Java 2021年02月11日 1062 0
  • 阿里巴巴不建议 boolean 类型变量用isXXX的理由?

    背景平时工作中大家经常使用到boolean以及Boolean类型的数据,前者是基本数据类型,后者是包装类,为什么不推荐使用isXXX来命名呢?到底是用基本类型的数据好呢还是用包装类好呢?例子:1.其他非boolean类型   private String isHot;     public ...

    Java 2021年02月09日 1061 0
  • 线程安全集合类CopyOnWriteArrayList

    我们上一篇学习了ArrayList,它的添加操作在单线程下是安全的,但是在多线程场景中会存在数据被覆盖等线程不安全的情况,如果我们需要在多线程环境下使用集合类怎么办呢,今天勾勾带你解决这个问题!Collections工具类我们可以使用java.utils.Collections工具类将 ArrayList转换为线程安全的集合:    &n...

    Java 2021年02月07日 1299 0
  • 为什么要谨慎使用Arrays.asList、subList?

    1. 使用Arrays.asList的注意事项1.1 可能会踩的坑先来看下Arrays.asList的使用:List<Integer> statusList = Arrays.asList(1, 2); System.out.println(statusList); System.out.println(statusList.contains(1)); System...

    Java 2021年02月05日 1088 0
  • 分布式系统中如何使用聚合日志系统ELK查看后台日志

    ELK简介ELK日志系统相信大家都不陌生了,如果你的系统是集群有多个实例,那么去后台看日志肯定不方便,因为前台访问时随机路由到后台app的,所以需要一个聚合的日志查询系统。ELK就是一个不错的选择。ELK简单说的是:Elasticsearch + Logstash + Kibana。Logstash用于分析日志,获取想要的日志格式;Elasticsearch用于给日志创建索引;...

    Java 2021年02月05日 1327 0
  • 聊聊实现AOP框架的代理模式

    AOP(面向切面编程) 要达到的效果就是:在开发者不修改业务组件源代码的前提下,为这个业务组件添加某种通用功能。AOP的实现方式如果不在开发阶段去修改业务组件源代码,那么我们要在什么时候添加通用功能的代码呢?那就只能是在开发阶段之后,由AOP框架自动修改了源代码。按照 AOP 框架修改源代码的时机,大致可以分为两类实现方式:静态 AOP 实现:AOP 框架在编译阶段对程序代码进...

    Java 2021年02月04日 1273 0
  • 动态代理JDK和CGLib

    我们在生活场景中处处都是代理:租房买房找中介、购买商品找商城、吃饭点外卖等。今天就和勾勾一起来学习代理设计模式,并通过代码理解静态代理和动态代理。代理设计模式代理模式(Proxy Pattern)就是当一个对象A对另一个对象B的访问无法或者不想直接访问时,可以在两个对象添加代理对象C,A通过访问C而间接的访问B对象。代理模式一般包含3个角色:抽象主题角色(ISubject):它...

    Java 2021年02月02日 1159 0
  • Synchronized的原理及其实现

    我们知道 Java内存模型为了保证多线程安全访问有三个特征:1.原子性(Atomicity):JMM保证单个变量读写操作的原子性但是在多CPU环境引入多级缓存后,写操作的原子性意义扩大了,对一个变量的写,不能实时刷新至主内存,导致别的CPU缓存内的数据是旧的,volatile修饰的变量保证多CPU下读写操作的原子性注:与synchronized的原子性不同,因为volatile...

    Java 2021年01月31日 1803 0
  • 详解 spring data jpa,全方位总结,干货分享

    谈一谈 jpa什么是 jpa ? jpa 的全称是 Java Persistence API , 中文的字面意思就是 java 的持久层 API , jpa 就是定义了一系列标准,让实体类和数据库中的表建立一个对应的关系,当我们在使用 java 操作实体类的时候能达到操作数据库中表的效果(不用写sql ,就可以达到效果),jpa 的实现思想即是 ORM (Object Rela...

    Java 2021年01月31日 1108 0
  • Java泛型的协变与逆变

    从面向对象说起Java作为一门面相对象的语言,当然是支持面相对象的三大基本特性的,反手就蹦出三个词:封装、继承、多态。我们假设有三个类,动物、猫、狗。父类是动物Animal,有两个子类猫Cat和狗Dog。那在Java中或其它任何支持面相对象的语言中,子类可以把引用赋值给父类。下面这段代码没有任何问题:Animal animalOne = new Cat(); Animal an...

    Java 2021年01月30日 1077 0
  • 关于Spring AOP的灵魂十问

    AOP全称是Aspect Oriented Programming,翻译过来是“面向切面”编程。在Java语言里,一切皆对象,所以我们通常说Java语言是一门“面向对象”编程的语言。而面向切面编程,不是要取代面向对象编程,而是对它的一种补充。AOP要解决的问题是用一个“横切面”的方式,来统一处理很多对象都需要的,相同或相似的功能,减少程序里面的重复代码,让代码变得更干净,更专注...

    Java 2021年01月30日 1363 0