- 博客(49)
- 资源 (1)
- 收藏
- 关注
原创 【this关键字】
private void setName(String name){ this.name = name;}上面的代码很简单,java类中普通的set方法。但是其中的this的用法有很少需要注意的地方。首先指明this在这里代表的是什么?在Java语言中规定使用this来代表本类对象的引用。this关键词被隐式地用于引用对象的变量和方法。如开头的代码中,this.name指的就是Book类中name的成员变量,而this.name = name 中第二个name则指的是形参name。实际上setN
2022-05-31 01:36:10 295 1
原创 【spring项目中抽象类如何注入bean】
在项目中遇到了该问题,纠结了不少的时间。特此记录。先说一下对该问题的理解。为什么在抽象类中无法注入bean?根本原因在于抽象类无法实例化。spring的原理是在启动服务器的时候读取配置文件,取得类名后在spring的上下文中生成一个单例的对象,在由spring注入其中所需要的bean。抽象类在反射生成对象的时候就已经失败,所以也就不可能为其中的bean注入属性。在说下该问题产生的背景:仓库管理系统中,有各种各样的费用问题,比较的繁琐。目前在项目中用到了7中不同的收费项,还有待收录的对象有26中。而且每种
2022-05-31 01:22:09 6361 1
原创 【用户角色权限设计】
用户角色权限设计结构:用户表,用户角色关联表,角色表,角色菜单关联表,菜单表,角色权限关联表,权限表,员工表,员工角色关联表这几张表涵盖了用户体系,角色体系,和权限体系以及菜单体系。...
2022-05-12 17:57:03 3535
原创 【获取唯一编号】
最近遇到一个问题在这里和大家分享一下:目前在做仓库管理系统,在系统中遇到了很多的编号问题。如货件编号,入库编号,出库编号,清点编号,发货编号等等。这些编号都是按照相似的规则生成的,如货件编号就是"HJ"+8位日期数+4位随机数,入库编号就是“RK”+8位日期数+4位随机数。都是这样的规律。并且要求要具有唯一性。在这样的情况下,雪花算法和uuid之类之前比较常用一些方法都无法使用了。最开始想到的是利用加锁在实现://伪代码加锁{ //1.获取日期 //2.获取随机数 //3.循环判随机数在数据
2022-05-12 17:47:46 831
原创 【聚水潭SDK使用说明】
聚水潭SDK使用说明(只写了部分)。聚水潭SDK下载地址:聚水潭sdk1. 准备在使用SDK之前,需要事先准备appKey,appSecret,signatureappKey:聚水潭应用的appKeyappSecret: 聚水潭应用的appSecretsignature: 授权回调验签是否开启,默认false另外还需要注意以下的几个属性:聚水潭开放平台测试环境:https://dev-api.jushuitan.com聚水潭开放平台正式环境:https://openapi.jushu
2022-05-12 16:14:10 4025
原创 【SpringBoot中使用监听器】
1. 监听器介绍什么是 web 监听器?web 监听器是一种 Servlet 中特殊的类,它们能帮助开发者监听 web 中特定的事件,比如 ServletContext, HttpSession, ServletRequest 的创建和销毁;变量的创建、销毁和修改等。可以在某些动作前后增加处理,实现监控。2. Spring Boot中监听器的使用web 监听器的使用场景很多,比如监听 servlet 上下文用来初始化一些数据、监听 http session 用来获取当前在线的人数、监听客户端请求的 s
2022-03-31 15:48:22 550
原创 【6. Netty的核心组件】
1. 前言本节我们主要从整体上了解 Netty 有哪些核心组件,很多同学学习完 Netty 虽然会使用,但是只知道如何自定义 Handler 而已,根本不清楚 Netty 有哪些核心的组件。本节的主要目的是,从整体上概括 Netty 的核心组件,有助于深入了解 Netty 以及关于 Netty 的面试。2. 核心组件Netty 的核心模块组件主要分为以下:组件模块 说明 Boostrap Bootstrap 其实就是启动的意思,主要用来配置 Netty 的相关配置,串联各
2022-03-29 15:48:15 293
原创 【5. Netty ChannelFuture 异步监听】
1. 前言本节主要讲解 ChannelFuture ,它的作用是用来保存 Channel 异步操作的结果,可以看作是一个异步操作结果的占位符。2. 概念在 Netty 中所有的 IO 操作都是异步的,不能立刻得到 IO 操作的执行结果,但是可以通过注册一个监听器来监听其执行结果。在 Java 的并发编程当中可以通过 Future 来进行异步结果的监听,但是在 Netty 当中是通过 ChannelFuture 来实现异步结果的监听。通过注册一个监听的方式进行监听,当操作执行成功或者失败时监听会自
2022-03-29 15:47:04 4387
原创 【接口多实现类的动态调用】
1. 准备工作接口类//消息处理接口public interface Message { /** * 消息处理 */ public void handler(); /** * 消息反馈 */ public void ack();}常量public class Constants { public static final String TEXT = "TEXT"; public static fi
2022-03-29 15:40:59 1028
原创 【Builder设计模式】
1. 简介最近在做IM系统的sdk, 要求也是非常的简单,要求sdk简单易用。简单的要求实现起来可没有那么简单。这里就先说一下,其中遇到的一个难题:系统中对象的创建?在sdk中对象的创建需要精细到每一个属性上,不同于接口可以直接在接口文档中写明传输对象需要传输的字段内容即可,在sdk中不仅仅要写明每一个要传输的对象的字段内容,还需要对每个对象的属性进行验证。在web应用中,比如IM的服务端中采用的是Jsr303来对传输的对象进行验证。但是sdk只需要采用最基本的Java中的知识点即可,要求就是轻
2022-03-29 11:21:44 4385
原创 【无标题】Git操作—— git add --all、git add.、git add * 的区别
git add --all这个命令会将当前目录下包括子目录下所有改动的文件提交到暂存区,注意只包括改动的文件,不改动的不会放到缓存区。这个命令还会把删除的文件也提交进去。如你在本地删除了min.c 这个命令会把删除信息也记录进去,然后在提交的时候把仓库里对应的min.c也删除掉,也就是说你在本地做的删除操作会被记录,提交仓库时会删除同样的文件,如果不想删除文件,可以使用git add .,注意后面有一个“.”点的符号,这个命令跟git add --all一样,但是不会记录删除操作。git add .
2022-03-24 16:50:22 3801
原创 Git操作——将本地代码首次提交到远程仓库
目录1. 简介2. 操作3. 提升1. 简介Git目前肯定是最为主流的版本控制系统了,但是自己在项目中使用的还是比较少。因为之前的公司一直是使用的svn,所以也就导致了自己对于git的使用,缺乏熟练度。今天在项目中遇到一个问题,自己写了一个服务端代码的sdk,是自己本地先创建了项目。项目完成之后需要提交到公司的远程仓库,和领导说了之后,领导给了一个远程仓库的git地址,让我提交上去。哈哈哈,一开始内心是拒绝的。。。所以今天在此特地记录下这种类型的处理方法,以便后面使用学习。2. 操作主要用到的
2022-03-24 16:11:26 4118
原创 【4. Netty ServerBootstrap 服务端启动类】
1. 前言本节主要讲解服务端主启动类 ServerBootstrap 的核心 API 的使用。2. ServerBootstrap 流程ServerBootstrap 的用法基本上都是固定的,一般对于新接触 Netty 的同学来说,会觉得这些模板代码比较多,难以理解。我们主要记住几个核心配置即可。指定线程模型:通过.group(bossGroup, workerGroup)给引导类配置两大线程组,这个引导类的线程模型也就定型了。其中 bossGroup 表示监听端口,accept 新连接..
2022-03-18 09:45:14 580
原创 【3. Netty Bootstrap客户端启动类】
1.前言上一节,我们主要讲解了一个Netty入门案例,其中无论是客户端还是服务端的代码编写,都是分为 2 个核心步骤,分别是:启动类模板代码 + 自定义业务 Handler,其中 Handler 可以根据不同的业务定义多个。本节主要介绍 Bootstrap 客户端启动类的代码含义。2. Bootstrap流程客户端启动类的写法都是固定模板的写法,需要掌握几个核心的流程,有助于理解模板代码,具体如下:指定线程模型:通过.group(group)给引导类(Bootstrap)配置线程组,..
2022-03-18 09:44:36 919
转载 c语言关于链表和“->”符号
常规单链表的实现方式是定义一个结构体,结构体中定义一个存放数据的变量和一个指向下一个节点的指针。在初次接触链表时,接触到了一个符号“->”,笔者在学习时,最开始常常把它和“.”傻傻分不清楚,对于这种状况,首先要搞清楚一点,结构体也是数据类型的一种,跟“int”"char"一样,定义一个结构体后结构体中的变量也就可以被这个结构体定义的变量访问。结构体的作用即对一个东西进行封装,封装之后方便以后使用,使用了这个类型的变量都会具有这个结构的属性。结构体变量访问结构体元素时:例如a和b:那么当a是指
2022-03-16 10:00:56 2261
原创 【2. Netty的入门案例】
1. 前言本节主要是使用 Netty 来开发服务端和客户端,Netty 的开发模式基本上都是主启动类 + 自定义业务 Handler,Netty 是基于责任链的模式来管理自定义部分的 Handler,本节带大家感受一下 Netty 的开发。需求: 本节主要通过 Netty 来实现我们的第一个 Demo,主要功能是分别建立两个项目(客户端和服务端),客户端向服务端发送 Hello World,服务端接受到数据之后打印到控制台,并且给客户端响应。2. 环境搭建第一步: 使用 Maven 构建工程
2022-03-16 09:33:25 649
原创 【c语言指针的学习】
目录1. 简介2. 地址和指针2. 指针变量的定义3. 指针的基本运算3.1 取地址运算和间接访问运算3.2 赋值运算3.3 示例程序3.4 指针算术运算**自增运算****自减运算****指针比较**4. 指针变量的初始化5. 指针数组5. 参考文档1. 简介指针是C语言中一个非常重要的概念,也是C语言的特色之一。使用指针可以轻松的执行某些C编程任务,而不使用指针则无法执行其他任务,例如动态分配内存。所以我们学习指针就变得很有必要。2. 地址和指针地址和指针是计算机中两个重要概念,在程序运行过程中
2022-03-16 09:32:13 1197
原创 【Netty 什么是事件驱动模型?】
首先来简单的看一下netty的简介:Netty 是一个 Java 开源通讯框架,是一个异步的,基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。这里主要和大家分享的就是事件驱动模型。首先我们看下百度百科是如何描述“事件驱动模型”的:鼠标的一个点击,移动,键盘的按键按下等等操作,都是对应操作系统的一个事件,然后应用程序接受你的操作进行处理。em...好像没有什么不对的地方,但是基本上我们看完后也还是不懂什么是事件驱动模型。只能说百度百科凝结的都是精华(敷衍~)。1
2022-03-15 11:28:33 1723
原创 【1. Netty简介】
1. 什么是NettyNetty是由JBOSS提供的一个Java开源通讯框架,用以快速开发高性能,高可靠的网络IO程序。它底层很好的封装了Socket,处理网络通讯的一个开源通讯框架。通俗的说,Netty就是解决两个系统之间互相通信的一个框架。在Java领域Netty被广泛的应用,Tomcat,Dubbo,RocketMQ,Zookeeper,ElasticSearch等等这些中间件的网络通讯框架都是Netty实现的。其中Netty只是对Java原生的通讯框架进行了高度的封装,如下图所示:
2022-03-15 11:23:06 977
原创 【9. Netty Reactor模型之主从多线程模型】
1. 前言通过上节的分析,我们知道单Reactor多线程模型它的性能瓶颈在于单个Reactor,本节主要讲解如何优化单个Reactor带来的性能瓶颈问题。2.单个Reactor性能瓶颈单 Reactor 主要存在的性能瓶颈如下:压力问题:客户端数量比较多的情况,单个 Reactor 负责监听和转发,那么 Reactor 压力非常的大; 单点故障问题:如果 Reactor 发生故障,则即使后面的 Handler 和 Worker 正常工作,但是整个应用程序无法正常对外提供服务。3.如何..
2022-03-15 11:15:06 930 1
原创 【8. Netty Reactor模型之多线程模型】
1. 前言回顾上节,我们了解了什么是传统堵塞 I/O 模型,什么是单 Reactor 单线程模型,以及它们的缺点,本节内容主要是针对单 Reactor 单线程模型的缺点进行升级,让它的性能得到进一步的提高。2. 如何进行优化首先,我们思考一下单 Reactor 单线程的性能瓶颈在哪里?主要有以下两个方面的性能上的缺点: 整个流程处理都是单线程,包括:监听客户端连接、分发客户端请求、处理客户端请求及响应,整个流程非常的复杂和耗时,只有一个线程的话,如果客户端数量比较多,那么将处理不过
2022-03-15 11:14:34 763
原创 【7. Netty Reactor模型之单线程模型】
1. 前言不同的线程模式,对于程序的性能差别是很大的,目前存在的线程模式主要有两种,分别是传统堵塞 I/O 服务模型和 Reactor 模型。其中又根据 Reactor 的数量和处理资源池线程的数量不同具体分为以下几种模型,具体如下: 单 Reactor 单线程; 单 Reactor 多线程; 主从 Reactor 多线程。 本节内容,主要讲解传统堵塞 I/O 模型和单 Reactor 单线程模型的核心原理。2. 学习目的学习 Reactor 模型的好处在于可以知道
2022-03-15 11:13:40 421
原创 【Netty中异步的理解】
1. 同步和异步的理解同步和异步关注的是消息通讯机制(synchronous communication / asynchronous communication )。同步就是调用某个东西时,调用方得等待这个调用返回结果才能继续往后执行。异步和同步相反,调用方不会等待得到结果,而是在调用者发出调用后,调用者可以继续执行后续操作,被调用者通过状态来通知调用者,或者调用者通过回调函数来处理这个调用的结果。图解:同步执行异步执行2. 同步异...
2022-03-15 09:42:22 2159 1
原创 【springboot中jasypt-spring-boot-starter的使用】
目录1. 简介2. 引入依赖3. 自定义加解密的方式4. 获取密文5. 编写配置文件6. 验证结果1. 简介在项目开发的过程中,经常会需要在配置文件中存储一些敏感的信息,如数据库的账号密码,支付相关信息,密钥等等,这些信息在开发的过程中一般是以明文的方式存储在配置文件中。这种方式的存储会存在非常大的安全隐患。jasypt能够很好的解决这一类的问题,特此记录,一遍后面学习使用。2. 引入依赖<!--springboot整合jasypt--> <dependency>
2022-03-09 17:22:37 14756 1
原创 【国密简介】
1. 国密算法介绍国密算法,即国家商用密码算法。是由国家密码管理局认定和公布的密码算法标准及其应用规范,其中部分密码算法已经成为国际标准。如SM系列密码,SM代表商密,即商业密码,是指用于商业的,不涉及国家秘密的密码技术。商用密码又很多,作为一览,我整理出下表,列举了常用的国际跟国产商密。下面逐个介绍国密算法:1.1 SM1是一种分组加密算法对称加密算法中的分组加密算法,其分组长度,密钥长度都是128bit,算法安全保密强度跟AES相当,但是算法不公开,仅以IP核的形式存在于芯片中,需要通过加密
2022-03-09 15:20:39 3569
原创 【凯撒密码】
目录1. 介绍2. Java实现3. 凯撒密码的破解3.1 暴力破解3.2 频率分析法1. 介绍凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行了,它的基本思想是:通过把字母移动一定的位数来实现加密和解密。明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如当偏移量是3的时候,所有的字母A将被替换成D,B变成E,由此可见,位数就是凯撒密码加密和解密的密钥。例如:字符串"ABC"的每个字符都右移3位则变成了“DEF”,解密的时候“DEF”的每个字符左移
2022-03-09 12:37:54 12700
原创 【ASCII码表】
ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有
2022-03-09 11:26:48 1328
原创 【闰年的介绍】
1. 闰年的由来地球环绕太阳转一周的实际时间是365天5时48分46秒。如果一年只有365天,那么每年就多出5个小时。4年就多出23小时15分4秒,差不多就是一天。于是决定每四年增加一天。但是它比一天24小时又少了45分钟,如果每100年有25个闰年的话,就少了18时43分20秒,这就差不多等于1天,这显然不合适。可以算出,每年多出5小时48分56秒,100年就多出581小时16分40秒。而25个闰年需要25*24=600小时。581小时16分40秒只够24个闰年(24*24=576)。于是决定每1
2022-03-09 09:36:31 781
原创 【spring跨域问题处理】
目录1. 什么是跨域?2. 为什么浏览器要限制跨域访问呢?3. 为什么要跨域4. SpringBoot 实现前后端分离的跨域访问(CORS)1. 基本介绍1.1 CORS工作原理1.2 Request Headers(请求头)1.3 Response headers(响应头)2.CORS实现跨域访问1. 返回新的CorsFilter(全局跨域)2. 重写WebMvcConfigurer(全局跨域)3. 使用注解(局部跨域)4. 手工设置响应头(局部跨域 )5. SpringBoot 实现前后端分离的跨域访问
2022-03-08 17:26:37 1922
原创 【spring请求日志过滤器】
目录1. 方式一2. 方式二1. 方式一直接继承OncePerRequestFilterimport com.alibaba.fastjson.JSON;import com.util.IpUtil;import org.slf4j.MDC;import org.springframework.beans.BeanWrapper;import org.springframework.web.filter.OncePerRequestFilter;import org.springframew
2022-03-08 16:56:58 606
原创 【过滤器的使用】
目录1. 方式一2. 方式二3. 方式三1. 方式一先定义Filterpublic class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, Serv
2022-03-08 16:49:37 94
原创 【C语言中的数据类型】
1. 有名有姓的C编程时给变量或者函数起的名字就是标识符,就好比我们在生活中的每一个同事,每一个朋友都有姓名,姓名就是这位朋友的标识符。c语言的标识符不可以随便起名字,必须遵循一定的规则。c语言规定,标识符可以是字符(A-Z,a-z),数字(0-9),下划线_组成的字符串,并且第一个字符必须是字母或者下划线。在使用标识符时还需要注意以下几点:标识符的长度最好不要超过8位,因为在某些版本的C中规定标识符前8位有效,当两个标识符前8位相同时,则被认为时同一个标识符。标识符是严格区分大小写的。例如Imo
2022-03-02 15:34:05 1394
原创 【初始C语言】
初始C语言C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。C语言与C++、C# 有什么区别?—— C++是一种多范式的编程语言(比如可以进行面向对象编程)。C++兼容于C,但应把C++看作是与C不同的一门语言。—— C#是微软开发的一门语言。总之C、C++和C#是三种完全不同的编程语言。—— 简单地说,像
2022-03-02 10:50:48 230
原创 【JSR303 自定义校验的两种方式】
目录1. 简介2. @ScriptAssert注解3. 自定义注解1. 简介最近在项目中遇到一个问题。简单来说就是对对象的属性进行有关联性的校验。比如:登录接口public ResponseResult login(@Validated(Groups.Query.class) @RequestBody LoginReqVO loginRepVO){//do something}public class LoginReqVO { @NotNull(message = "userId
2022-03-01 15:01:27 1185
原创 【IM数据协议】
目录1. 简介2. 基础数据结构3. IMLogin4. IMAck5. IMCmd6. IMMsg7. 总结1. 简介IM (instant messaging) 即时通讯,之前做过一款即使通讯的项目。今天在这里和大家分享一下即时通讯中比较重要的一个内容 ——数据结构或者说通信协议。通信协议的选择是采用谷歌的protobuf结构序列化方法。至于这里为什么选择采用protobuf,这里先和大家简单说一下,后面的其他文章再详细的介绍一下protobuf的用法。protobuf的优点:protob
2022-02-28 17:21:37 1124
原创 【if-else分支控制的进阶方法】
目录1.需求2. 传统方式3. 策略模式4. 选择Map结构1.需求今天在公司的业务功能中做到了公司的支付模块这块,支付这块相信大家应该都有一个比较清晰的概念。这里就先分享支付的相关功能,而是接着这个功能来引出一个比较基础的知识点,代码中分支控制。在做支付功能的时候,别的什么也不用多想。我的第一印象就是好多种类型:阿里,微信,余额,银联等等这些是国内主流的支付方式,还有很多很少用到的支付方式,如果项目种有需求,也需要我们一个个来对接。如果牵扯到国外的项目,国外的支付方式也需要对接。所以支付这块是比较复
2022-02-24 17:49:21 741
聚水潭SDK第一版(有待完善)
2022-05-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人