- 博客(89)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 CGLib浅析
CGLib浅析什么是CGLibCGLIB实现动态代理,并不要求被代理类必须实现接口,底层采用asm字节码生成框架生成代理类字节码(该代理类继承了被代理类)。所以被代理类一定不能定义为final class并且对于final 方法不能被代理。实现需要//MethodInterceptor接口的intercept方法/***obj 代理对象*method 委托类方法,被代理对象的方法字节码对象*arg 方法参数*MethodProxy 代理方法MethodProxy对象,每个方法都会对应
2021-09-11 19:32:09
963
6
原创 处理 Java 异常的 10 个最佳实践「译文」
原文:https://www.javacodegeeks.com/10-best-practices-to-handle-java-exceptions.html本文是处理 Java 异常的最佳实践。Java 中的异常处理并不是一件容易的事,因为新手很难知道应该去抛出或者处理哪些 Java 异常,资深的开发人员也会花费很长时间去确认哪些异常应该抛出、哪些异常应该处理。如果你是一个新手,那你很可能会对Java 异常处理中出现的各种情况感到迷惑和不...
2022-04-11 19:45:49
830
1
原创 数据结构-链表
链表现虽然顺序表的查询很快,时间复杂度为 O(1) , 但是增删的效率是比较低的,因为每一次增删操作都伴随着大量的数据元素移动。所以可以使用另外一种存储结构实现线性表,链式存储结构。链表是一种物理存储单元上非连续、非顺序的存储结构,其物理结构不能只管的表示数据元素的逻辑顺序,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列的结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成。1.单向链表单向链表是链表的一种,它由多个结点组成,每个结点都由一个数据域和一个指针域组
2022-01-25 20:32:18
708
6
原创 秋招记录总结---加油,陌生人
秋招记录总结—加油,陌生人首先,自我介绍:关键词:郑州、双非渣本、男生、22届、Java后端很幸运,可以在秋招期间,获得了 阿里、快手、滴滴 三个offer对比很多大佬来说,我的offer可能不多,或者部门不够核心、不够好,但是个人来说我很满足,仅此而已。而下面,也算是我的小记录吧~~从今年3月份开始找实习,因为自己学校不是太好,了解了以往的校友进入的企业发现,进中厂已经是寥寥无几了,并且发现原来找工作还需要背八股,怀着 好奇+不自信 的心态,一个小菜鸡踉踉跄跄进入了自己的找工作之路。春
2021-10-24 23:24:23
428
1
原创 排序算法解析
排序算法排序算法是《数据结构与算法》中最基本的算法之一。排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:1.冒泡排序**冒泡排序(Bubble Sort)**也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的
2021-10-06 15:14:56
398
原创 RabbitMQ 安装与界面管理
RabbitMQ 安装与界面管理RabbitMQ概述官网:https://www.rabbitmq.com/RabbitMQ是部署最广泛的开源消息代理。RabbitMQ拥有成千上万的用户,是最流行的开源消息代理之一。从T-Mobile到Runtastic, RabbitMQ在全球范围内广泛应用于小型初创企业和大型企业。RabbitMQ是轻量级的,易于部署在premises和云中。它支持多种消息传递协议。RabbitMQ可以以分布式和联合的方式部署,以满足高规模、高可用性的需求。RabbitM
2021-09-27 14:05:35
835
原创 Rabbit 高级操作
Rabbit 高级操作1.过期时间TTL过期时间TTL表示可以对消息设置预期的时间,在这个时间内都可以被消费者接收获取;过了时间之后消息将自动被删除。RabbitMQ可以对消息和队列设置TTL。目前有两种方法可以设置。第一种方法是通过队列属性设置,队列中所有消息都有相同的过期时间。第二种方法是对消息进行单独设置,每条消息TTL可以不同。如果上述两种方法同时使用,则消息的过期时间以两者之间TTL较小的那个数值为准。消息在队列的生存时间一旦超过设置的TTL值,就称为dead message被投递
2021-09-26 22:10:33
227
原创 Spring Boot 整合 RabbitMQ
Spring Boot 整合 RabbitMQ简介在Spring项目中,可以使用Spring-Rabbit去操作RabbitMQ尤其是在spring boot项目中只需要引入对应的amqp启动器依赖即可,方便的使用RabbitTemplate发送消息,使用注解接收消息。一般在开发过程中:生产者工程:application.yml文件配置RabbitMQ相关信息;在生产者工程中编写配置类,用于创建交换机和队列,并进行绑定注入RabbitTemplate对象,通过RabbitTemplate
2021-09-26 22:09:23
175
原创 代理、静态、动态
代理为其他对象提供一种代理以控制这个对象的访问,在某些情况下一个对象不能直接访问那个对象时,代理就起到了客户端和**被代理对象(委托类)**中介作用。按照代理的创建时期,代理类可以分为两种:静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。动态:在程序运行时运用反射机制动态创建而成。静态代理Subject: 代理类和被代理类实现同样的接口Proxy:代理类,里面有被代理类,具体逻辑委托被代理类进行处理RealSubject:被
2021-09-05 23:10:24
308
2
原创 RabbitMQ工作模式
RabbitMQ工作模式1.Work queues 工作队列模式1.1 模式说明work queues 与入门程序的 简单模式 相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息。应用场景:对于任务过重或任务较多情况使用工作队列可以提高任务处理的速度。1.2 模式实现生产者public class Producer { static final String QUEUE_NAME = "work_queue"; public static void mai
2021-08-15 20:11:48
179
原创 消息中间件RabbitMQ
消息中间件RabbitMQ1.什么是消息中间件MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。为什么使用MQ?在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量2.应用场景2.1 任务异步处理将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。2.2 应用程序解耦合MQ相当于一个中介,通过它让生产者与消费者
2021-08-15 20:10:52
104
原创 RabbitMQ入门案例
RabbitMQ入门案例Rabbit 模式https://www.rabbitmq.com/getstarted.html实现步骤构建一个 maven工程导入 rabbitmq的依赖启动 rabbitmq-server服务定义生产者定义消费者观察消息的在 rabbitmq-server服务中的进程初步实现前期准备1.构建项目2.导入依赖<dependency> <groupId>com.rabbitmq</groupId>
2021-08-13 20:25:28
226
原创 RabbitMQ 安装与界面管理
RabbitMQ 安装与界面管理RabbitMQ概述官网:https://www.rabbitmq.com/RabbitMQ是部署最广泛的开源消息代理。RabbitMQ拥有成千上万的用户,是最流行的开源消息代理之一。从T-Mobile到Runtastic, RabbitMQ在全球范围内广泛应用于小型初创企业和大型企业。RabbitMQ是轻量级的,易于部署在premises和云中。它支持多种消息传递协议。RabbitMQ可以以分布式和联合的方式部署,以满足高规模、高可用性的需求。RabbitM
2021-07-18 20:19:23
545
原创 npm常用命令
npm常用命令简介npm是跟随node一起安装的包(模块)管理器。常见的使用场景有以下几种:允许用户从npm服务器下载别人编写的第三方包到本地使用。允许用户从npm服务器下载并安装别人编写的命令行程序到本地使用。允许用户将自己编写的包或命令行程序上传到npm服务器供别人使用。常用命令检测是否安装及版本npm -v # 显示版本号说明已经安装相应的版本生成package.json文件npm initpackage.json用来描述项目中用到的模块和其他信息安装模块npm
2021-07-12 23:42:36
639
原创 Markdown使用教程
Markdown使用教程一、Markdown简介Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。应用当前许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。例如:GitHub、简书、知乎等编辑器推荐使用Typora,官网:https://typora.io/二、徽章什么是徽章徽章是一种小巧精美的小图标,一般配有相关文字进行辅助说明,可对数据进行监控,链接跳转等,富有表现力。常见于github项目主页,但其不仅出现于 githu
2021-07-12 23:41:36
2923
原创 Git使用教程
Git使用教程安装官网下载:https://git-scm.com/downloads 下载完成后使用默认进行安装。安装完成后,在开始菜单里找到 Git -> Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功!还需要最后一步设置,在命令行输入:git config --global user.name "Your Name"git config --global user.email "email@example.com"因为Git是分布式版本控制系统,所以,每个机
2021-07-12 23:34:48
218
原创 yaml语言教程
yaml语言教程简介YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。YA
2021-07-12 23:24:14
264
原创 Redis缓存穿透和雪崩
Redis缓存穿透和雪崩缓存穿透概念用户如果想查询一个数据,会先在redis内存数据库中进行查询,redis中没有,再向持久层数据库中查询。缓存穿透的概念很简单,用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询。发现也没有,于是本次查询失败。当用户很多的时候,缓存都没有命中,于是都去请求了持久层数据库。这会给持久层数据库造成很大的压力,甚至直接导致崩溃。这时候就相当于出现了缓存穿透。解决方案1.布隆过滤器布隆过滤器是一种数据结构,对所有可能查询的
2021-07-08 11:16:07
106
4
原创 Redis主从复制
Redis主从复制概念主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave以读为主默认情况下,每台Redis服务器都是主节点;’'且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点主从复制的作用主要包括:数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。故障恢
2021-07-06 22:28:48
120
1
原创 Redis发布订阅
Redis发布订阅什么是发布订阅所谓发布订阅,就是 消息发布者发布消息 及 消息订阅者接收消息 ,二者通过某种媒介关联起来。这类似以前的『订报』,当我们订阅了某种报纸后(比如财经报),每当报纸有新的期刊出版后,就会有邮递员给我们送过来。即,只有定了这种报纸才会收到出版社发布的这种新报纸。发布订阅解析Redis发布订阅(pub/sub)是一种 消息通信模式 :发送者(pub)发送消息,订阅者(sub)接收消息。Redis客户端可以订阅任意数量的频道。订阅/发布消息图:图中可以看出,所需:
2021-07-01 13:16:17
125
2
原创 Redis持久化
Redis持久化Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失,所以Redis提供了持久化功能RDB(Redis DataBase)什么是RDB在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里。Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时RDB文件中,等持久化过程都结束了,再用这个临时文件替换上次已经持久化完成的文件。整个过程
2021-06-26 13:49:36
92
4
原创 数据结构---顺序表
顺序表顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。1.实现顺序表代码实现public class SequenceList<T>{ //存储元素的数组 private T[] list; //记录当前顺序表中的元素个数 private in
2021-06-24 00:10:31
131
2
原创 SpringBoot整合Redis
SpringBoot整合Redis整合Redis在SpringBoot2.x之后,原来使用的jedis被替换为了lettuce**jedis:**采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用jedis pool连接池 , 更像BIO模式**lettuce:**采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据了,更像NO模式1.创建项目首先创建一个SpringBoot项目,注入依赖如下:2.配置redis信息spring.re
2021-06-22 21:49:06
274
2
原创 SpringBoot-06 员工管理系统
SpringBoot-06 员工管理系统一、环境搭建1.新建SpringBoot项目具体步骤如图:之后就是起好项目名,然后完成创建。红框中的可以自行选择删除,不删除也没事情。2.导入静态资源**静态资源文件:**https://pan.baidu.com/s/1xjkUFp0ke73tUxM6SUJaSw**提取码:**m2yf或者大家自己自己下载一个静态资源文件:**BootStrap静态模板:**https://getbootstrap.com/docs/4.0/
2021-06-22 18:47:37
511
2
原创 Jedis与Redis
Jedis与Redis通过Jedis操作RedisJedis是Redis官方推荐的java连接开发工具 , 使用ava操作Redis中间件创建项目首先创建一个空项目:创建一个Maven的Module项目:一路next即可。因为该项目的最先创建的是空项目,所以需要手动调节部分配置:以下修改的都是JDK配置,按照自己电脑为准File----Project Structure—projectFile----Project Structure—modulesFile—
2021-06-13 21:47:41
559
原创 Redis事务操作
Redis事务操作Redis事务本质: 一组命令的集合 , 一个事务中的所有命令都会被序列化 , 在事务执行过程中 , 会按照顺序执行一次性 : 事务之间的事情,会一次性执行,而不是立刻执行顺序性 : 会按照顺序进行执行排他性 : 事务过程中,不允许被其他事情影响Redis事务没有隔离级别的概念Redis单条命令保存原子性 , 但事务不保证原子性redis事务 :开启事务( multi )命令入队( 写命令 )执行事务( exec )所以事务中的命令在加入时
2021-06-13 21:45:57
125
原创 Redis数据类型及命令
Redis数据类型及命令基本数据类型String - 字符串我提前存入了两个数据 k:v 、z:c追加字符串追加字符串,如果当前可以不存在就相当于 setAPPEND xxx value获取字符串长度STRLEN XXX自动加 1INCR XXX自动减 1DECR XXX设置步长,指定增量INCRBY XXX 数值设置步长,指定减量DECRBY XXX 数值 截取字符串GETRANGE k 0 3 #截取字符串[0,3] GETRANGE k
2021-06-06 14:17:58
149
原创 Redis入门命令
Redis入门命令Redis基础从配置文件中可以看出:Redis有 16 个数据库,默认使用的是第 0 个切换数据库select x # 切换数据库 0-15查看数据库容量DBSIZE 数据库之间存取的数据一般是不连通的如果你在 3 号数据库存了信息 ,不会影响其他数据库的 DBSIZE存取数据ser key value # 存入 k:vget key # 得到 对应k的v查看所有keykeys * 清空当前数据库
2021-06-03 11:11:14
224
原创 初识Redis
初识Redis概述**官网:**https://redis.io/**中文官网:**http://www.redis.cn/推荐使用Linux服务器学习Redis是什么?Redis(Remote Dictionary Server ),即远程字典服务是一个开源的使用ANSI ,C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘
2021-05-30 23:02:32
133
2
原创 No beans of ‘xxx‘ type found
Could not autowire. No beans of ‘xxx’ type found如果是Spring Boot 项目中 Mapper 文件注入出现报错,可以尝试启动,如果可以正常启动的话,是不会影响的。首先,检查三点导入类是不是导入错了依赖是不是导入错了引入的类是不是对应依赖的检查完毕,如果还是出现这样的问题,参考以下解决方法:遇到的问题Could not autowire. No beans of ‘xxx’ type found这是我是在使用 WebSock
2021-05-26 13:58:00
807
原创 FastDFS依赖无法导入
FastDFS依赖无法导入fastdfs-client-java 导入爆红<!-- FastDFS--><dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.29-SNAPSHOT</version></dependency
2021-05-23 23:22:39
645
6
原创 使用 yum 出现 Loaded plugins: fastestmirror
使用 yum 出现 Loaded plugins: fastestmirrorLoaded plugins: fastestmirror意思为:插件不可用[root@localhost ~]# yum –y install xxxLoaded plugins: fastestmirror解决办法1.修改fastestmirror配置文件vim /etc/yum/pluginconf.d/fastestmirror.conf将 enable=1 改为 enable=02.修改yum
2021-05-19 15:55:25
662
1
原创 source is null for getProperty(null, “name“)
source is null for getProperty(null, “name”)这个问题的发生一般是在 Mapper.xml 的 sql语句中出错。我在项目中使用到了,用到了XML中的判断条件查询方式,代码如下:<if test="employee.name != null and employee.name != ''"> AND e.`name` LIKE CONCAT( '%', #{employee.name}, '%' )</if>上述语句的简单
2021-05-07 23:10:57
5837
1
原创 Spring Security 下
Spring Security 下Security 注解使用1.@Secured判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀 ROLE1.在 启动类 或者 配置类 上加入注解 开启该注解@EnableGlobalMethodSecurity(securedEnabled = true)2.Controller层加入方法注解@GetMapping("/update")@Secured({"ROLE_sale","ROLE_man"}) //有该权限才可以pub
2021-05-06 20:30:39
161
4
原创 Spring Security 上
Spring Security 上Security-dome1.创建项目创建一个Spring Boot项目,不用加入什么依赖2.导入依赖<dependencies> <!--启动器变为 web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-
2021-05-06 20:28:02
260
2
原创 JWT
JWT1.什么是JWTJSON Web Token(JWT)是一个开放的行业标准(RFC 7519),它定义了一种简介的、自包含的协议格式用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任,JWT可以使用HMAC算法或使用RSA的公钥私钥对来签名,防止被篡改。官网 https://jwt.io/标准 https://tools.ietf.org/html/rfc7519优点:jwt基于ison,非常方便解析可以在令牌中自定义丰富的内容,易扩展。通过非对称加密算法及数
2021-04-24 22:25:33
432
原创 SSM 完整项目 (内含源码)
SSM 电影后台管理项目概述通过对数据库中一张表的CRUD,将相应的操作结果渲染到页面上。笔者通过这篇博客还原了项目(当然有一些隐藏的坑),然后将该项目上传到了Github、Gitee,在末尾会附上有源码地址,读者可参考。该项目使用的是 Spring+SpringMVC+Mybaits(SSM)后端架构,POJO—Dao—Service—Controller的结构,简单易懂。POJO:实体类层,封装的是数据中的设计的表对应的元素。Dao:Mapper的接口以及Mapper.xml文件,实现
2021-04-23 00:16:30
3606
8
原创 Vue-组件化
Vue-组件化计算属性计算属性应该使用 computed 属性,他会把内部方法变为静态属性直接可以调用一下使用 computed 与 methods 进行对比<div id="vue" > <div>date1: {{date1()}} </div> <div>date_1: {{date1}}</div> <div>date2: {{date2}}</div><!--<div&
2021-04-22 23:28:23
150
2
原创 Vue-Axios
Vue-Axios什么是AxiosAxios是一个开源的可以用在浏览器端和NodeJs的异步通信框架,她的主要作用就是实现AJAX异步通信,其功能特点如下:从浏览器中创建XMLHttpRequests从node.js创建http请求支持Promise API[JS中链式编程]拦截请求和响应转换请求数据和响应数据取消请求自动转换JSON数据客户端支持防御XSRF(跨站请求伪造)GitHub:https://github.com/gxios/axios中文文档:http://www.a
2021-04-20 23:55:42
1492
原创 第一个 vue-cli项目
第一个 vue-cli项目什么是vue-clivue-cli官方提供的一个脚手架,用于快速生成一个vue的项目模板;预先定义好的目录结构及基础代码,就好比咱们在创建Maven项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速主要的功能:统一的目录结构本地调试热部署单元测试集成打包上线需要的环境:Node.js : http://nodejs.cn/download/Git : https://git-scm.com/doenloadsGit镜像 :h
2021-04-18 21:01:14
94
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人