- 博客(42)
- 收藏
- 关注

原创 深入分析 ReentrantLock ,AQS部分源码
1.ReentrantLock分析我们从ReentrantLock 来分析,ReentrantLock 叫互斥锁也叫可重入锁,可重入的特性可以避免死锁,它是基于AQS来实现的,ReentrantLock采用内部自己定义的一个抽象静态类Sync 来管理锁 那么Sync则继承了AQS ,ReentrantLock 内部通过继承Sync抽象静态类,实现了两种锁一种是公平锁,一种是非公平锁,Ree...
2019-11-13 00:37:55
244

原创 给我的小迷妹解释什么是RPC
小迷妹:哥,我问你一个问题啊? 我:啥问题啊? 小迷妹:你最近嘴里面天天念叨的rpc 是啥啊? 我:好,哥今天给你普及一下,什么是rpc。 小迷妹:哇啊,哥哥你好棒啊。 我:哈哈,还好还好,你不要这么崇拜我。通俗解释RPC 是什么? RPC,就是Remote Procedure Call 远程过程调用 小迷妹:啥叫远程过程...
2019-09-23 16:29:51
822

原创 zookeeper分布式锁原理分析
zookeeper由来zookeeper 是外国人研究出来一款分布式服务协调组件,这就说来话长了,当时Google 研发出来一款叫Google Chubby 的组件,为了解决,分布式服务之间一致性问题,以及分布式锁 但是这货开发出来之后,代码不开源,别人也用不了,然后这时候 雅虎大哥就出来了,心想 你不开源,我就自己干,然后一气之下研究出来一款叫做zookeeper分布式协调组件,它基于 Go...
2019-09-22 17:45:55
1021

原创 sql 表和表之间关联
1.表和表之间关联:(1)左关联left join:两个表之间以左边的表数据为准;(2)右关联right join:两个表之间以右边的表数据为准;(3)等值关联join :两个表都满足两个表的数据; left join、right join、join on 三种匹配的范围不一样;2、为什么在mybatis 中要写单表查询: (1)为了提高性能,单表查询比多表查询性
2017-01-12 21:01:57
10335
原创 如何做好Code Review:思考、方法和实践 (真实经验总结)
我一直认为Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。然而对于我观察到的大部分软件开发团队来说,认真做Code Review的很少,有的流于形式,有的可能根本就没有Code Review的环节,代码质量只依赖于事后的测试。也有些团队想做好代码审查,但不知道怎么做比较好。网上关于如何做Code Review的文章已经有很多了,这里我结合自身所在的交易业务线总结一些code review 的方法。
2023-08-02 10:10:32
267
转载 缓存穿透,缓存击穿,缓存雪崩解决方案分析
前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。
2017-08-01 16:58:25
361
原创 git 分支
提测:feature(开发分支)--develop(合并)回归:从master拉取一个relax分支--把测试的develop合并到relax分支,然后进行回归测试,再把relax分支合并到master上面
2016-12-20 15:16:11
237
原创 dubbo 使用
1、dubbo 是什么? (1)、远程服务的调用的分布式框架;2、dubbo 能做什么? (1)、透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API入侵; (2)、软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 (3)、服务自动与发现,不再需要写死的服务地址,注册中心基于接口名的查询服务者的IP地址,并且能够
2016-12-18 00:14:13
314
原创 Git使用
一、主分支: 1.master 分支:上面存放的是随时可供生产环境部署的源代码,当开发一段时间后,就会产生新的可部署的代码,供master更新操作,同时每一次更新最好更新版本号; 2.develop分支:develop保存的是当前最新开发版本的工程代码,当develop上面的代码足够可以更新了,并且通过了测试,并将develop上面的代码合并回master 分支并做好,版本号的更新
2016-09-20 10:20:19
280
原创 深入TreeMap和TreeSet集合
hashSet底层则实际是一个hashMap,而TreeSet底层则采用NavigableMap这个接口来保存TreeSet集合,而实际上NavigableMap只是一个接口,实际上面TreeSet还是用TreeMap来保存set元素. TreeSet的初始化的时候都是初始化都是new 了一个TreeMap进行初始化; TreeMap,它采用一种被称为“红黑树”的排序二叉树来保存
2016-09-09 11:11:07
1171
原创 BigDecimal
1.介绍: Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传
2016-08-31 16:05:03
221
原创 一列多行进行列转行操作
其实列转行,可以在数据库当中转换,也可以在程序中进行转换,因为我这个设计多张表所以在程序当中进行转换,在nosql非关系型数据库当中,可以把行转列看成一个矩阵,这个矩阵的列可以进行90度的转换,在非关系型数据库当中,这样做会很简单,但是在关系型数据库当中这样做就很复杂了。 我说一下,我的java代码的实现,前提我手上有三张表分别为: T50_ETL_REPORT; //
2016-08-31 15:59:31
2613
原创 线程池原理
一、线程池优势: 1.降低资源消耗,通过反复利用已创建线程降低线程创建和销毁造成的消耗; 2.提高响应速度,当任务到达时,任务可以不需要等到线程的创建就能立即执行; 3.提高线程的可管理性;二、线程池原理:当提交一个任务时候,线程池处理的这么一个流程:文字描述: 1.线程池判断核心线程池是否都在执行任务,如果都在执行任务的时候则进行
2016-08-13 15:35:01
287
原创 java String深入理解
String这个类比较特殊,因为底层final的String 底层源码:public final class String { private final char value[];}因为String 底层是一个final的类,并且它底层的存储是一个char 类型的数组,也是一个final类型,也是说,从理论上面讲String 是一个不能更改的类。前提: J
2016-08-12 10:24:34
282
原创 linux 部署上线
1.查看was方法: 执行命令查看was相关进程,dmgr、nodegent、server1 命令 ps -ef|grep java2.杀死执行以下命令,杀死dmgr、nodeagent、server1 kill -9 进程编号 1 进程编号 2 进程编号 33.启动dm sh /startManager.sh 4.启动server1 sh /
2016-08-11 20:57:38
474
原创 web Mvc 设计思想
mvc : model(模型)、view(视图)、controller(控制层);mvc优势: 1.多个视图对应一个模型,按MVC设计模式,一个模型对应多个视图,可以减少代码的复制,一旦模型更改,便于维护; 2.模型返回来的数据,与显示逻辑层分离,模型数据可以应用任何的显示数据; 3.应用被分为三层,降低各层之间的耦合性,提高应用可扩展性; 4.控制层也
2016-08-11 10:53:50
258
原创 ArryaList和LinkedList性能分析和适用场景
ArrayList和LinkedList 我们先说性能方面; 1.插入: ArrayList是单向链表,底层是数组存储形式,在添加的时候,如果添加在ArrayList尾部,则性能更快于LinkedList,但是在List中添加完元素之后,导致超过底层数组的长度,就会垃圾回收原来的数组,并且用System.copyArray赋值到新的数组当中,这开销就会变大,而Like
2016-08-10 21:35:11
539
原创 深入ArrayList和LinkedList
List代表一种线性表的数据结构,ArrayList则是一种顺序存储的线性表,ArrayList底层则采用数组来保存每个集合元素,LinkedList则是一种链式存储的线性表,它实现了List的接口,还是实现了Deque的接口,LinkedList不仅可以当队列,和双向链表使用,也可以当做栈来使用;1.ArrayList查询速度相对于LinkedList会比较快,但是插入和删除会比Linked
2016-08-10 19:01:33
314
原创 深入map和set
对HashSet而言 系统采用hash算法决定集合的快速存取,集合元素,对HashMap而言,系统采用hash算法,跟据hash值来获取的key的存取位置,实现快速存取; HashMap类的put源码: public V put(K key,V value){ if(key==null) return putForNullKey(valu
2016-08-10 14:22:38
245
原创 抽象类和接口的不同
抽象类和接口的不同: 一、用法上不同: 1.接口的方法不能用static 进行修饰,而抽象类可以; 2.接口只能包含抽象的方法,而抽象类却可以包含普通的方法 3.接口里面没有构造函数和初始化块,而抽象类可以; 4.接口支持多继
2016-08-09 22:11:41
280
原创 接口使用的注意事项
接口则是抽象类更彻底的抽象;接口是一种规范,接口规定了实现者必须向外提供哪些服务,对于接口的调用者,调用者要掉哪些方法 例如: 【修饰符】 interface 接口名 extends 父接口1、父接口2..... 说明: 修饰符可以是public或者省略,如果省略了public 访问控制符,则默认采用包访问控制符,只有在相同包下面
2016-08-09 21:15:33
529
原创 使用 final 的注意事项
一、final修饰成员变量 与普通成员变量不同的是,final成员变量(包括实例Field,类Field) 必须由程序员显示的初始化,系统不会默认的为它初始化; 例如: public class Test{ final int age; { System.out.print(a
2016-08-09 14:41:15
647
原创 6.spring事务
J2EE 应用的事务有两种: 全局事务和局部事务;全局事务由应用服务器管理,需要底层服务器JTA支持,局部事务,则采用jdbc技术,connection连接来操作事务,hibernate 事务,则是用session来操作事务。 Spring 事务策略核心是PlatformTrationActionManager这个接口,该接口下面包含三个为实现的抽象方法:
2016-08-08 18:42:15
245
原创 5.spring aop
一.aop框架优点:spring引入AspectJ库来引入,来进行注解注入。xml则配置启动零注解的方式注入 各步骤良好的隔离性; 源代码无关性; 1.切面:就是增强目标对象的一个类。 2.连接点:被代理的目标方法。 3.增强处理(Advice):也叫通知的 这里面包括around,before,after; before:在切
2016-08-08 16:13:46
254
原创 4.spring基本用法
一、spring 注解用法: 1.@Componend:注解一个springbean 类 2.@Controller:注解一个控制层组件 3.@Service:注解一个业务层组件 4.@Repository:注解一个dao层组件如果要运用这些注解首先要在spring xml中配置一个扫描注解的一段代码: 如果在xml中配置了这样一段代码,然
2016-08-08 13:49:02
252
原创 redis 安装
一、安装redis 官方网站:http://redis.io/ 官方下载:http://redis.io/download 可以根据需要下载不同版本 windows版:https://github.com/mythz/redis-windows 如果linux 连网的话直接 1.下载:
2016-08-07 18:43:20
154
原创 3.Spring基本用法
1.容器工厂bean: 这个工厂模式相对于前面的实例工厂模式、静态工厂模式有所区别,因为前面是标准的工厂模式,调用工厂方法来产生bean,而容器工厂bean是实现了, FactoryBean,来产生bean,当调用工厂的getBean的时候容器不会获取FactoryBean的实例而是获取Factory的产品; FactoryBean在Spring中是一个很重要的接口,
2016-08-03 14:46:24
197
原创 2.Spring基本用法
spring 中的xml配置相对于spring注解去注释,要早很多产生的,后期spring意识到,在大型的项目中越来越日益,庞大和臃肿,所以就产生了,注解的形式。 1.bean的作用域: 在spring容器中产生的bean,这个bean是有生命周期 (1)singleton:单例模式,在springIOC中使用singleton来创建一个实例 (2
2016-08-02 10:58:27
233
原创 1.Spring基本用法
Spring 现在很多公司都在使用的一款非常强大的框架,刚开始的时候,只是停留在怎么使用spring框架,慢慢越来越深入了解spring框架的原理,让我重新对这个框架有重新的认识。 其实spring核心机制就是“依赖注入”(IOC)和"面向切面"(AOP)其实 控制反转和依赖注入都是一个意思,一个好的框架要符合“低耦合”,“高内聚” 这也正是验证了spring的核心思想。
2016-08-01 11:19:55
249
原创 Java 类加载回顾
Java 其实是个很神奇的东西,很强大的东西,当我们写完一个类,这个类是怎么加载到jvm内存里面的呢?是经过了一个怎么样的过程,好吧,请跟随我,来揭开这一层层神秘的面纱。 1.class 的加载: 当我们要用到一个类的时候,系统会经过这个三个步骤,类加载、类连接、类初始化,类加载要用到类加载器,这个类加载器我们下面会介绍,当类加载到jvm内存,就会产生一个相应的cla
2016-07-30 16:21:42
229
原创 java 反射回顾
最近一段时间把java基础又重新看一遍,感觉以前有很多不懂得地方,现在能明白了点,但是源码还是没有看,也是刚刚看完java反射,就过来把看过的都记下来,以备后面方便回顾; java反射机制,在spring框架中用到的比较多,像ioc和aop这个两个是spring的核心,大部分用到的都是反射原理,aop则用到的是动态代理; 我总结了一下,我感觉看完一遍java反射机制,用大白
2016-07-29 14:26:54
212
原创 java 多线程 回顾
一.进程和线程区别: 例如:我们使用的qq就是一个进程,而在这个qq里面有很多的其他功能,例如可以聊天,发送文件,视频,语音,等等,而这些功能就是一个一个线程,而这些线程可以同时的进行,简单来说一个程序有运行时,至少有一个进程,而进程下面可以有多个进程 再举个例子,为什么我在选择电脑的时候,要选择cpu比较高的,就是因为,当我们打开多个软件的时候,而这些,进程会轮流占用cp
2016-07-28 15:50:18
276
原创 java map集合学习
map 接口下面包含 hashMap、linkedHashMap、SortedMap、TreeMap、EnumMap 这些实现类,总的来说跟set 接口下面的实现类很相似,map 是由key-value 键值对,key是唯一的,value可以重复,key 的集合就是相当于一个set集合唯一性,而value的集合相当于一个list集合,map集合可以通过key来获取value一、hashMap和
2016-06-20 21:50:41
511
原创 java 集合 List 学习
list 是collection 接口下面的一个子接口,List 接口下面有ArrayList,Vector,linkedList 实现类,和Queue接口,该接口下面PriorityQueue实现类和Dequeue接口,deque接口下面的实现类是ArrayDeque 和linkedList; 1.List遍历:
2016-06-14 17:21:44
651
原创 对java set集合的理解与学习
java 集合是用来存储数量不等的多个对象,并可以实现常用的栈,队列等,还可以保存具有映射关系的关联数组,集合下面分为,set ,list,map 首先set 集合就像一个罐子,多个对象丢进去没有明显的关系,但是有一点set集合不允许重复,set 下面有这么几个实现类 hashSet ,LinkSet ,treeSet,enumSet. 一.hashSet:
2016-06-12 23:22:27
7262
原创 myeclipse 连接svn服务器验证位置时发生错误
问题描述:MyEclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能。但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的帐号、密码保存之后,就无法再变更了。当剪切项目的时候报这个错误的时候就是用一下方法解决解决思路:既然界面上不能进行修改,那就只有删除subclipse记录的帐号、密码信息,重新输入。
2015-04-23 10:05:53
16729
1
原创 ArcGis安装步骤
ArcGis安装步骤:1.新建一个desktop install文件夹把ArcGIS_Desktop_1022_140090解压到该文件夹下面,如下图:2.进desktop install文件夹下面点击ESRI进行安装,如下图:3.弹出ArcGis安装界面,如下图:4.单击页面上面的 进行环境监测,如下图:提示可以进行安装 然后点击Exit按钮4.单击安装
2015-04-22 17:33:03
1414
原创 从svn上面当下来的项目,跑不起有几种原因
从svn上面当下来的项目,跑不起有几种原因:1.先是检查一下你jar包是否有错;2.项目右键configure Build Path 里面的order and Export 全部选中 然后点击ok;3.检查一下你的jdk是否有问题,过你的jdk版本过低的话,在后台代码方法上面有@Override去掉,这样就不会有错了,或者你去下载一个高版本的,要不然有的时候在jdk高版本不会报错,在你
2015-04-09 10:43:52
3988
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人