关于反射机制及其应用的一些梳理

反射机制是一个很重的开销,很多框架的搭建依赖反射机制,比如Spring的AOP,但是实际开发编码中一般不要用反射,一是因为开销太大,另一方面也污染代码,也是因为开发过程中接触不多,之前对于反射机制一直是概念模糊的,现在我把反射机制理解成了一句话:根据一个String操作特定的对象(可以是属性,方法...

2019-05-15 23:21:36

阅读数 4

评论数 0

Base64编码简单总结

有人说Base64编码是一种加密算法,其实本质上就是一个“二进制到文本”的编码方法,规则是将3个字节(24位)转为4个字符,这样就方便了二进制数据的传输,例如图片等。 编码过程中可能出现最后还剩下1个或者2个字节,不够24位,这种情况就会在后面补0,经常会在Base64编码后的字符串结尾处看到“...

2019-05-13 14:52:45

阅读数 3

评论数 0

DateFormat工具类存在并发问题

也是今天踩了一个坑才去了解到的。 并发问题主要是在format()和parse()两个方法中,因为这两个方法中会去调用calendar.setTime(),如果DateFormat对象被静态全局变量引用,calendar就一个,并发下的setTime当然会有问题。我们常用的SimpleDateF...

2019-04-11 21:24:40

阅读数 16

评论数 0

关于数据库事务的简单总结

数据库事务有四个特性即ACID,具体分别是原子性,一致性,隔离性和持久性。事务如果在service层,那么每个业务处理方法有自己的事务,一个事务中只连接了数据库一次,有时候比如方法里面有多个增删改查这种情况,其实这也只连接了一次数据库,并不是多次访问数据库,这个容易混淆。 再来看MySQL四种事...

2018-12-10 12:19:14

阅读数 57

评论数 0

JDK1.7和1.8中HashMap与ConcurrentHashMap总结比较

谈到HashMap和ConcurrentHashMap,必然会联想到一些其他集合结构,比如HashTable,Vector等,先理一下他们的区别吧。其实HashTable和Vector已经被废弃了,HashTable和Vector以及ConcurrentHashMap都是线程安全的同步结构,区别是...

2018-12-09 19:11:20

阅读数 74

评论数 0

Spring两种配置方式

Spring有两种配置方式,分别为XML配置与java文件配置,其实两者本质上是一模一样的,只不过用java文件配置的好处是少了一个读文件的过程,可以将两种配置方式结合对应起来总结。 首先了解一下Spring配置需要配置哪些东西: 1.前端控制器 DispatcherServlet 2.处理...

2018-12-09 13:26:52

阅读数 60

评论数 0

其实REST风格一直在身边

之前一直对rest风格很是模糊,听过一直也没注意过到底是什么意思,其实日常开发中系统一般已经部分符合rest风格了,只不过没有注意到。 先看下rest风格系统几个特性: 1.客户——服务器 2.无状态 3.可缓存 4.分层系统 5.统一接口 6.支持按需代码 下面是对应的详解: ...

2018-12-04 23:00:20

阅读数 24

评论数 0

继上篇后AQS简要理解

AQS详解之前转载过一篇优秀的博文,这篇是想总结一下便于理解。 AQS机制核心有两个: 一是维护了一个记录资源占用状态的statue,statue=0的时说明当前资源没有被占用,statue为N则说明当前资源被几个线程占用,用CAS机制去修改维护这个statue,所以AQS机制还是要依赖于CA...

2018-11-28 23:50:09

阅读数 39

评论数 0

这篇AQS详解忍不住转载一个

这篇写AQS真的很棒,特转载学习 作者:水岩 出处:http://www.cnblogs.com/waterystone/ 一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!...

2018-11-28 21:48:48

阅读数 62

评论数 0

Spring,Spring boot和SpringMVC关系串想

Spring框架是一个大家族,再大的框架必然也是基于基础,所以说到这三个概念之间的关系,我想先梳理一下近几年java web项目开发框架的演变。 最初的静态页面以至于JSP这类技术暂不讨论,大部分人都是servlet开始入门的。其实每个JSP页面在执行的时候都会编译成一个servlet类文件,所...

2018-11-28 21:21:18

阅读数 394

评论数 0

JAVA类的卸载

首先了解一下类加载器的类型,有三大类,分别为启动类加载器,扩展类加载器和应用类加载器,其中应用类加载器又可以分为系统类加载器和用户自定义加载器。 这里面,启动类加载器,扩展类加载器和系统类加载器加载的类在JVM整个生命周期中都不会被卸载,只有自动加载器加载的类可以被卸载。注意,类被卸载和对象被回...

2018-11-21 23:30:39

阅读数 119

评论数 0

关于GC Roots的简单梳理

GC的前提是判断对象是否存活,有两种方式去判断,一种是计数分析,另一种就是可达性分析。首先知道GC Root是用于可达性分析的,判断对象和GC Roots之间是否有直接或者间接的引用关系,有即对象还存活,没有的话即对象可以被回收。 有四种对象可以作为GC Roots: 1.虚拟机栈中引用的对象...

2018-11-20 23:40:15

阅读数 153

评论数 0

记和同事间关于动态代理的争论

争论的过程是一个逐渐统一意见的过程,互相纠正对方的盲点,最终得出一个一致的结论。 动态代理本质上就是运行时加载类,有两种动态代理,一个是JDK自带的动态代理,另一个是cglib动态代理,比较一下两者: JDK动态代理本质上是操作接口,利用反射机制和ClassForName()运行时加载一个类,...

2018-11-19 22:09:18

阅读数 24

评论数 0

到底创建了几个字符串对象

首先,JDK1.7之后,常量池和静态变量从方法区中移到了堆里面,至于JDK1.8之后方法区被改为元空间这是后话。这里有一个容易混淆的地方。 String str = "abc"; 这我们都知道句话是在常量池中创建了一个对象,容易混淆的是"...

2018-11-15 22:48:49

阅读数 55

评论数 0

再入锁,线程安全队列与线程池串想

题中这三者是有一环扣一环的联系的,在此做一个总结加深理解。 再入锁Reentrantlock主要是和synchronized关键字作区别,都是加锁但是调度单位不同。synchronized是以调用次数为单位,即被synchronized修饰的方法或者代码块每被线程执行一次,都有一个获取锁释放锁的...

2018-11-07 21:07:48

阅读数 63

评论数 0

四种遍历map方式效率比较

之前总结过三种遍历list方式的效率问题,今天看到一位博主的遍历map方式效率比较,特转载分享一下,自己也记录一下。 原文地址:https://blog.csdn.net/zajiayouzai/article/details/80922610   作者:zajiayouzai 先创建一个ma...

2018-11-06 20:54:24

阅读数 111

评论数 0

关于并发性能和并发安全随想

一直以来,我理解的并发编程包括两个方面,一个是并发性能,另一个则是并发安全。 在并发性能上,通过具体的编码能做的事情不多,从本质上来说,一些并发编程的编码方式比如锁机制等必然会降低系统吞吐量即降低性能,当然是无锁快,我们能做的只是尽力提高并发性能。其实提高并发性能的主要方式还是通过一些中间件以及...

2018-11-05 23:54:26

阅读数 83

评论数 0

并发编程的原子性随想

首先了解到并发编程有三个性质:原子性,可见性和有序性。 关于原子性,最重要的一个概念是原子性是针对一个操作而言,有点抽象,我是这么理解的:一个线程执行一段代码的时候没有受到其他线程执行这段代码的影响。 比如,i = 1; 这也是一段代码,而且必然是原子性的,因为一个线程在给i赋值为1的时候不可...

2018-10-31 21:26:04

阅读数 29

评论数 0

GC种类和GC算法种类精简梳理

主要有五种GC: 1.Serial GC Serial体现在工作是单线程的,精简,但是垃圾收集时会进入"stop-the-world"状态。是JDK8中client模式下默认GC。新生代的Serial GC采用复制算法,老年代的Serial GC采用标记-整...

2018-10-30 22:41:42

阅读数 91

评论数 0

JVM,HotSpot和JIT关系梳理

像JAVA以及.net这种跨平台语言,之所以能够屏蔽平台特性,是因为它们的源码被编译成.class文件后,由虚拟机解释执行,当然扩展一下,JAVA在jdk8以后是编译与解释混合执行模式,当然最重要的还是虚拟机的解释执行。 提到虚拟机不能只想到JVM,JVM只是JAVA虚拟机,JVM只解释JAVA...

2018-10-27 23:48:58

阅读数 409

评论数 0

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