自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 资源 (2)
  • 收藏
  • 关注

原创 分布式服务事物解决方案

目前流行的是tx-lcn引入包如下: <!-- springcloud 分布式事物 --> <dependency> <groupId>com.codingapi</groupId> <artifactId>transaction-springcloud</a...

2019-05-31 16:36:34 160

原创 集群下分布式项目锁解决方案

1、基于数据库缓存(Redis使用Redission下的RLock对逻辑代码加锁);2、基于数据库实现原理与Redis的SETNX相似后面演变两种方案:乐观锁:在数据库表中添加一个version字段,每次更新成功version+1,线程每次更新时需要比较版本号,如果不一致,则更新失败;悲观锁(排他锁):基于MySql InnoDB引擎来实现步骤如下:先建表,代码如下:CREA...

2019-05-31 10:52:08 895

原创 Redis长短链接

长链接方式:pconnect(函数)方式短链接方式:随机生成

2019-05-29 17:42:06 670

原创 为什么Redis单线程这么快(效率这么高)

Redis数据是基于内存的,所以读写非常快;Redis是单线程的,所以省去上下文线程切换时间;Redis采用多路复用(使用一个线程处理多个socket连接)技术,可以处理并发连接;Redis全程使用hash结构,或者其他有序数据结构,读写快;Redis使用自己的事件分离器,内部使用非阻塞方式执行,吞吐量大等。...

2019-05-29 17:12:41 1008

原创 为什么我们项目选择了Redis

目的:减少应用服务器和cpu的压力;减少IO操作,减轻IO压力;对不规则数据进行进行存储,扩展性强...使用场景:会话缓存存储用户登录认证信息(分布式)、海量数据存储读写、高并发数据读写、不规则数据读写、用户头像(base64位)Redis集群模式:宏观上--主从模式模式、分布式模式 狭义上--主从复制、哨兵模式、Redis-cluster集群模式、Jedis sharding...

2019-05-29 17:05:44 142

原创 Redis集群方案

Twitter开发的twemproxy(使用proxy对后端redis server进行代理)、豌豆荚的codis、Redis官方的redis-cluster

2019-05-29 14:00:45 71

原创 Redis支持存储的几种数据

String、List、Set、Hash、SortedSet提升内存使用空间:数据放于hash表中现在使用RedisTemplate比较多

2019-05-29 11:25:43 774

原创 Redis的三大策略

持久化策略(内存到磁盘上):RDB(全部选中的数据进行全量备份)、AOF日志记录修改指令(增量备份针对上一次选中的数据)两种方案内存淘汰策略:noeviction--默认策略,不删除数据 allkeys-lru--所有key中,删除最近最少使用的数据 volatile-lru--设置过期时间的所有key中,选取最近最少使用的数据删除 volatile-random--在所有key中,...

2019-05-29 10:44:53 4431

原创 GC调优思路

1、确定需求和目标,如要达到多少吞吐量;2、掌握JVM和GC状态,如启动GC日志,jstat等工具查看 GC状态等;3、考查GC类型是否符合当前应用;4、根据应用硬件配置适配合适参数;5、最后再验证所配参数达到目标。(重复分析、调整、验证)...

2019-05-22 17:46:04 84

原创 启动一个简单程序可能会看到几个线程

main:主线程Reference Handler:处理引用对象本身的垃圾回收Finalizer:处理用户的finalize方法Signal Dispatcher:外部jvm命令的转发器Attach Listener:jdk工具类请求响应处理线程...

2019-05-21 18:16:53 191

原创 synchronized与ReentrantLock的区别

1、如有线程A和B,对象锁O:如果使用synchronized,线程A先获取锁O,那么B会一直等待B释放锁为止(类似于自旋状态)如果使用ReentrantLock,线程A先获取锁O,那么B不会等待(消耗CPU),而是去干其他的事,等A释放锁O后,再获取锁2、synchronized是JVM层面的,会自行监控,而且代码执行异常时,会自动释放锁,而ReetrantLock是常与try{}f...

2019-05-21 17:51:43 177

原创 解决哈希冲突的办法

1、开放地址法:为冲突地址寻求地址序列(根据计算公式)2、链地址法:相同地址的放同一链表中(根据计算公式)3、再哈希法:再计算出一个哈希地址,直到不发生冲突为止(根据计算公式)4、建立公共溢出区...

2019-05-20 18:04:46 123

原创 多线程安全解决方式

1、互斥同步:具体方案有synchronized,获得锁monitorenter将锁计数器加1,执行对象monitorexit将锁计数器减1,当锁计数器为0,锁对象释放。java.util.concurrentJava工具类:下的并发包对应的ReentrantLock,跟synchronized很类似,配合lock()、unlock()、try/finally来使用。2、非阻塞同步(常用C...

2019-05-17 17:09:53 71

原创 使用Jekins自动化构建Spring Boot 项目

1、插件配置Jenkins第一次进入推荐安装的插件默认安装就行,需要安装Maven和Git插件。2、全局工具配置配置Maven配置JDK配置Git因为SpringBoot是以jar的形式发布自带tomcat,所以不需要配置tomcat容器了。3、配置项目构建自由风格的项目新建项目,选择构建自由风格的项目,给项目起个名字,然后点击Ok。配置参数构...

2019-05-16 15:34:25 210

原创 JVM类加载过程

类加载:类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载过程:加载==》验证==》准备==》解析==...

2019-05-15 14:53:35 62

原创 JVM中Minor GC与 Full GC 的触发条件

Minor GC(新生代GC)触发条件:Eden(伊甸园)空间不足。Full GC(老年代GC)触发条件:模拟前提VMoptions:-XX:+UseSerialGC -Xms200M -Xmx200M -Xmn32m -XX:SurvivorRatio=8 -XX:+PrintGCDetails1.(手动)直接调用System.gc(); List<Object&g...

2019-05-14 18:05:49 631

原创 GC回收算法

个人理解对象回收条件:当对象不再被使用时。引用计数算法:有被引用,引用计数器+1,引用失效,计数器-1,否则为0 缺点:无法解决对象相互引用导致循环问题 优点:判断效率高。可达性分析算法:以“GC Roots"为根作为引用链,当对象无法到达GC Roots时,该对象是可以回收的。垃圾收集算法:标记-清除算法算法、复制算法、标记-整理算法、分代收集算法。标记-清除算法:先标记垃圾...

2019-05-14 15:54:10 72

原创 Java对象访问定位方式

句柄池、直接指针(访问速度更快)

2019-05-14 10:31:50 279

原创 编译与反编译

编译:高级语言程序变成低级机器语言(二进制机器码)的过程。反编译:编译的逆向过程,低级语言向高级语言转化的过程。

2019-05-14 10:08:25 129

原创 堆区内存分配解决方案

指针碰撞:如果Java堆中内存是绝对规整的,所有用过的内存都放在一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间那边挪动一段与对象大小相等的距离。空闲列表:如果Java堆中内存不规整,已使用内存和空闲内存相互交错,那就没办法进行指针碰撞,虚拟机必须维护一个列表,记录哪些内存块是可用的,分配的时候从列表中找到一个足够大的空间划分给对象实例,...

2019-05-14 09:56:21 499

原创 JVM调优

参考Oracle官方文档配置如下:-XX:MetaspaceSize=128m (元空间默认大小)-XX:MaxMetaspaceSize=128m (元空间最大大小)-Xms1024m (堆最大大小)-Xmx1024m (堆默认大小)-Xmn256m (新生代大小)-Xss256k (棧最大深度大小)-XX:SurvivorRatio=8 (新生代分区比例 8:2)...

2019-05-13 18:03:07 650

原创 JVM运行时内存划分

JVM内存管理运行时数据区域分为:方法区、虚拟机桟、本地方法桟、堆、程序计数器、常量池;JVM与外界交互:调用执行引擎====》本地库接口====》本地方法库;程序计数器:分支、循环、跳转、异常处理,线程切换都依赖此计数器,此区域不会出现内存溢出异常;虚拟机栈:也是线程私有,也是字面上常说的栈内存,通常所指存放boolean、byte、char、short、int、float、long...

2019-05-12 23:10:07 144

tomcat9.0配置服务器包

Apache Tomcat是一个开放源代码、运行servlet和JSP Web应用软件,基于Java的Web应用软件容器,Tomcat由Apache-Jakarta子项目支持并由Java社区的志愿者进行维护。Tomcat Server是根据servlet和JSP规范进行执行的,因此我们就可以说Tomcat Server也实行了Apache-Jakarta规范且比绝大多数商业应用软件服务器要好。

2017-09-26

springmvc 的开发教程示例

springmvc 的开发教程示例

2015-06-01

空空如也

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

TA关注的人

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