自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

陈东东的博客

一起撸代码

  • 博客(29)
  • 收藏
  • 关注

原创 基于Hexo搭建的纯净博客

记录自己的学习笔记https://renai-cdd.gitee.io/myblog/

2021-05-10 10:23:49 112

原创 ThreadLocal使用场景和阅读源码

ThreadLocal其实可以理解成每个线程独有的一块区域,线程间不能相互影响的一块区域(其中父子线程可以通过InheritableThreadLocal实现子线程读取父线程ThreadLocal的数据)。于是乎,我搜索了下项目中使用到ThreadLocal的地方。说说用到的几个场景:对象隔离(线程需要一个独享的对象,例如SimpleDateFormat)单线程public class Test { private static SimpleDateFormat sdf = new S

2021-05-10 10:16:49 148

原创 代理设计模式(JDK动态代理)什么是代理,静态代理动态代理实现,分析JDK代理实现逻辑,手动实现JDK代理逻辑。

什么是代理?从字面意思来看,代理比较好理解,无非就是代为处理的意思。举个例子,现在哪吒有女助理了,所以很多事情都不用我自己去处理了,比如说去银行排队取钱,那么我就可以叫我的女助理去代替我取钱并交给我,那么我自己就可以去干其他的事情,那么此时女助理就充当了代理的作用,代替我取钱。优点:1.增强目标对象。可以在执行目标对象方法的前后或者其他地方加上验证、日志等等代码;(Spring框架中的AOP)2.将调用对象和被调用对象分离,一定程度上降低了耦合度。扩展性好;3.保护目标对象;4.职责清晰。目标对

2021-03-26 14:04:30 137

原创 二、zookeeper源码(Client)

这篇只说客户端,服务端后边会肝出来的哈!我们开始吧。从zkCli.sh看源码我们在启动客户端的时候都需要在zk的bin目录下启动zkCli.sh。那我们就先看看这个脚本里边都是什么东西。下边是执行脚本后的样子:chendongdong@chendongdongdeMacBook-Pro bin % ./zkCli.shConnecting to localhost:2181Welcome to ZooKeeper!WATCHER::WatchedEvent state:SyncConne

2020-11-30 10:04:20 223

原创 基于RBAC模型结合AOP权限设计方案实现附源码地址

分享下最近写的一个权限设计方案,目前功能比较初步,大家可以理解思路后在此基础上进行扩展,希望大家可以多多提提意见哦。感谢此方案是基于目前最流行的RBAC模型(Role-Based Access Control ),就是权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。知道模型后大致就是有三个表和两个关联表咯,(用户,角色,权限,用户角色,角色权限)。-- ------------------------------ Table structure for sys_permission

2020-11-10 16:01:11 205 1

原创 Spring事务管理

@RequestMapping(value = "/updateUser")public void updateUser() { userservice.updateUser();}@Transactionalpublic void updateUser(){ User user = userMapper.selectByPrimaryKey(1); user.setUs...

2019-12-27 15:26:45 106

原创 RabbitMQ详解(二)Rabbit事务和Confirm发送方消息确认机制

引言上一篇文章中我们了解到为了保证消息的可靠性,我们需要对消息进行持久化处理。还有一个重要的步骤就是需要保证消息能够完整顺利的进入Rabbit服务器(Broker)。​ 正常情况下,如果消息经过交换器进入队列就可以完成消息的持久化,但如果消息在没有到达broker之前出现意外,那就造成消息丢失,有没有办法可以解决这个问题?RabbitMQ有两种方式来解决这个问题:通过AMQP提供的事务...

2019-11-11 08:04:11 283

原创 RabbitMQ详解(一)初识RabbitMQ

什么是MQ:​ 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。​ 其主要用途:不同进程Process/线程Thread之间通信。MQ框架非常之多,比较流行的有RabbitMq、kafka、阿里开源的RocketMQ。本文的主角:RabbitMq。特性RabbitMQRocketMQ...

2019-11-06 15:12:43 455 2

原创 Java基础-反射

反射Reflection is commonly used by programs which require the ability to examine or modify the runtime behavior of applications running in the Java virtual machine. This is a relatively advanced feat...

2019-11-04 14:45:07 102

原创 MyBatis中#和$占位符的区别

#{value}使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入,并且在使用#{}时形成的sql语句,已经带有引号。例如,select * from table1 where id=#{id} 在调用这个语句时我们可以通过后台看到打印出的sql为:select * f...

2019-11-04 14:43:34 1042

原创 MyBatis-动态SQL

Mybatis动态SQL概念摘自官网:https://mybatis.org/mybatis-3/zh/dynamic-sql.html​ MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQ...

2019-11-04 14:42:48 105

原创 MyBatis-参数传递

Mybatis参数传递概述:1.单个的参数Mybatis不会做特殊处理 #{这里随便写什么都可以} 它都能把这里面的值取到2.传入对象POJO(普通的java类).. #{对象的属性名称}3.多个参数。Mybatis会做特殊处理。会把传入的参数自动封装成Map类型 Map 的key值就是从param1...paramN .. map.put...

2019-11-04 14:42:02 126

原创 static代码块执行时机

public class StaticMain { public static void main(String[] args) { System.out.println(StaticDemo.INIT); }}class StaticDemo { public static final String INIT = "init"; static...

2019-11-04 14:38:49 449

原创 Spring in action 4 剑指Spring - (九)使用NoSQL数据库 - Redis

使用NoSql数据库NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。Redis:五大数据类型:string 数据类型:strin...

2019-11-01 17:09:25 133

原创 Spring in action 4 剑指Spring - (九)使用NoSQL数据库 - MongoDB

使用NoSql数据库NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。MongoDB:MongoDB支持的数据类型:数字: // ...

2019-11-01 15:20:48 184

原创 Java多线程学习(六)Executor 框架

本文思维导图使用线程池的优点线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。1.**降低资源消耗。**通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2.**提高响应速度。**当任务到达时,任务可以不需要的等到线程创建就能立即执行。3.**提高线程的可管理性。**线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,...

2019-11-01 15:17:53 151

原创 Java多线程学习(五)Lock锁的使用

Lock接口1.Lock接口介绍锁是用于通过多个线程控制对共享资源的访问的工具。通常,锁提供对共享资源的独占访问:一次只能有一个线程可以获取锁,并且对共享资源的所有访问都要求首先获取锁。 但是,一些锁可能允许并发访问共享资源,如ReadWriteLock的读写锁。在Lock接口出现之前,Java程序是靠synchronized关键字实现锁功能的。JDK1.5之后并发包中新增了Lock接口以...

2019-11-01 15:15:59 413

原创 Java多线程学习(四)等待/通知(wait/notify)机制

等待/通知机制介绍while(value=desire){ doSomething();}当两个线程之间存在生产和消费者关系,也就是说第一个线程(生产者)做相应的操作然后第二个线程(消费者)感知到了变化又进行相应的操作。比如像下面的whie语句一样,假设这个value值就是第一个线程操作的结果,doSomething()是第二个线程要做的事,当满足条件value=desire后...

2019-11-01 15:14:48 132

原创 Java多线程学习(三)volatile关键字

简介Java中的“volatile关键字”关键字:Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。数据的不一致,要解决这个问题,...

2019-10-29 11:06:03 144

原创 Java多线程学习(二)synchronized关键字

简介在学习知识前,我们先来看一个现象:public class SynchronizedDemo implements Runnable { private static int count = 0; public static void main(String[] args) { for (int i = 0; i < 10; i++) { ...

2019-10-29 11:05:27 125

原创 Java 多线程学习(一)初识多线程

一 进程和线程简介**进程和线程:**进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。如下图所示,在 windows 中通过查看任务管理器的方式,我们就可以清楚看到 window 当前运行的进程线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类...

2019-10-29 11:04:52 105

原创 Spring in action 4 剑指Spring - (八)通过Spring和JDBC征服数据库

Spring和JDBC操作数据库使用JNDI配置数据源:在Tomcat服务器的conf文件夹下的context.xml 配置数据源<Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <Resource auth="Container" driverClassNa...

2019-10-28 10:27:55 92

原创 Spring in action 4 剑指Spring - (七)Spring MVC的高级技术

SpringMVC 高级技术SpringMVC 配置:自定义DispatcherServlet配置:public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override //配置Servlet的映射 protected...

2019-10-26 14:28:03 105

原创 Spring in action 4 剑指Spring - (六)渲染Web视图

渲染Web视图理解视图解析器:我们编写的控制器方法都是没有直接产生在浏览器渲染过的HTML,都是通过将渲染的数据填充到模型中Model。然后将模型传递给渲染Web视图的视图解析器来渲染。(控制器处理逻辑和视图中的渲染解耦也是Spring MVC的一个重要特性),如果控制器中的方法直接产生HTML的话,就很难在不影响请求处理逻辑的前提下更新视图。所以两者应该保持足够的距离。从我们熟悉的Inte...

2019-10-25 11:50:07 101

原创 Spring in action 4 剑指Spring - (五)初识Spring MVC

初识Spring MVCSpringMVC 起步SpringMVC基于模型-视图-通知器(Model-View-Controller,MVC)模式实现的,它能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。SpringMVC 运行流程:流程说明:用户发送请求到前端控制器(DispatchServlet),该控制器会过滤出哪些请求可以访问servlet、哪些不能访问。...

2019-10-25 11:49:17 164

原创 Spring in action 4 剑指Spring - (四)面向切面的Spring

面向切面的Springaop: Aspect oriented Programming 面向切面编程,面向切面编程是面向对象编程的补充,而不是替代品。在运行时,动态地将代码切入到类的指定方法,指定位置上的编程思想就是面向切面编程。Aop中的专业术语:1.通知(Advice):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 ar...

2019-10-25 11:48:43 162

原创 Spring in action 4 剑指Spring - (三)高级装配

高级装配环境与Profile在实际开发过程中,往往会将项目发布到不同的环境中,由于环境的不同,我们一般需要对在不同环境的数据和配置进行一些个性化的设定。比如,我们一般将开发到生产流程中的环境分为三种:开发(dev)、测试(test)和生产(prod)。而在这三种环境下,我们有些配置(如数据源)需要根据环境来切换。下面看看Spring中如何进行环境的个性化配置。显示配置方式:@Profi...

2019-10-24 10:05:25 99

原创 Spring in action 4 剑指Spring - (二)装配Bean

装配BeanSpring装配Bean的三种方式1.在XML中进行显示配置2.在Java中进行显示配置3.隐式的Bean发现和自动装配尽可能地的使用自动配置的机制。显示的配置越少越好,当你必须要显示配置Bean的时候(比如:有些源码不是由你来维护的,而当你需要为这些代码配置的时候),推荐使用类型安全(因为在Java配置中可以利用编译器检查)并且比XML更加强大的JavaConfig。...

2019-10-24 10:04:49 100

原创 Spring in action 4 剑指Spring - (一)初识Spring

初识Springspring的两大功能Spring两大核心功能就是控制反转/依赖注入IoC/DI、面向切面编程Aop。下面介绍一下两大功能IoC/DI控制反转(Inversion of Control)/依赖注入(Dependency Injection),简称IoC/DI.控制反转不是一种技术,而是一种设计思想:将原来程序需要什么对象自己创建 转变为 需要什么对象向IoC容器获取,创建...

2019-10-24 10:02:10 166

空空如也

空空如也

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

TA关注的人

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