自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 JMM(Java内存模型)和voltile

什么是JMM,为什么要有JMM,JVM和JMM的关系,JMM规范,Volatile

2021-12-01 18:15:11 472

原创 缓存一致性协议和volatile

在阅读LongAdder源码的过程中,碰到了@sun.misc.Contended的使用,在百度了一下后了解到该注解是为了解决伪共享问题。 什么是伪共享? 要想彻底了解伪共享,首先要对缓存行(也可称为缓存段),和缓存一致性协议有所了解。个人在网上找了许多资料认为:缓存一致性(Cache Coherency)入门,这篇简绍的比较好,建议大家阅读一下。 以及了解缓存一致性协议(MESI)的具体流程这里我推荐:缓存一致性协议的工作方式(但是里面在脏段被修改后,其它CPU依然可以...

2021-04-18 16:36:30 994 1

原创 Timsort——Java源码阅读记录

在工作的时候用到了对泛型集合排序,本来以为里面也是像排序数组一样使用双轴快排,但是跟着Collections.sort()源码里发现是用了TimSort.sort()的排序,去网上简单的搜索了一下,说TimSort用了归并排序,并极大程度的利用了自然界很多数都已经拍好序了这个规律,其中比较好的文章是:世界上最快的排序算法——Timsort,我在看完源码之后虽然看"懂"了,TimSort它是怎么做的,但是不清楚它为什么这么做,这篇文章就解答了我很多疑惑。为了帮助大家更好的理解TimSort,也...

2021-04-05 15:02:12 226

原创 模仿CGLib,通过使用字节码实现动态代理

实现思路:在内存中通过拼接字符串的方式继承被代理的类,生成的代理类字符串通过JavaCompiler编译为字节码,并将字节码保存在内存中,最后通过自定义的类加载器加载到元数据区生成了代理类的Class对象。 Enhancer类:package com.lj.proxy;import lombok.Data;import javax.tools.*;import java.io.*;import java.lang.reflect.Field;import java.lang...

2020-10-08 09:27:00 200

原创 学习Git

一、安装git客户端https://www.cnblogs.com/ximiaomiao/p/7140456.html二、创建Github的repositoryhttps://blog.csdn.net/qq_38723394/article/details/80305245遇到一个小问题:当完成这两步时会报错,说无法找到远程连接,这让我莫名其妙,基本步骤都是按上面来的。...

2020-04-23 12:16:53 168

原创 dubbo学习笔记

配置文件优先级关系:1.JVM -D参数,当你部署或者启动应用时,它可以轻易地重写配置,比如,改变dubbo协议端口;2.外部化配置,指将配置集中起来放在注册中心服务器上或其它。3. ServiceConfig、ReferenceConfig等编程接口采集的配置4.XML, XML中的当前配置会重写dubbo.properties中的;5..Properties,默认配置,仅...

2020-03-30 17:33:05 179

原创 框架演变过程以及分布式基础RPC原理

1.2)、发展演变单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。缺点: 1、性能扩展比较难:如果要对应用里的某个功能扩展,所有应用必须重新部署 2、协同开发问题:大家一起修改可能会使项目...

2020-03-22 09:11:38 235

原创 SpringBoot整合dubbo以及遇到的坑

学习网站:https://blog.csdn.net/belonghuang157405/article/details/84070689说说遇到的坑:1.依然要加log4j的配置文件(log4j.properties):# Global logging configuration 开发时候建议使用 debuglog4j.rootLogger=DEBUG, stdout# Con...

2020-03-19 10:22:35 684

原创 初学dubbo+zookeeper以及遇到的问题

通过Dubbo:从入门到实战在初步了解dubbo以后,我决定先安装配置zookeeper:ZooKeeper的下载安装遇到两个坑(windows系统):1.从2.6版本以后官网下载将源码和打包好的分开了,如果只下载源码是没办法运行的,需要将那个可以运行的zookeeper根目录下的lib目录复制过来,否则启动zkServer会报无法加载主类的错误,之后闪退。2在启动zkSer...

2020-03-15 12:55:08 358 1

原创 后端缓存系统设计要点

选择合适的缓存的分类:1.本地缓存:本地调用,不支持分布式,调用较快。适合一些静态数据,比如配置数据、游戏商店道具等。2.分布式缓存:远程调用,支持分布式,调用较慢。适合一些全局数据,比如排行榜,世界消息等。缓存同步方式:Cache Aside:读取数据先检查缓存中是否有该数据,若有则返回数据,若没有则去访问数据库,返回时添加到缓存中。更新数据同步更新数据库和缓存中的数据,或只更新...

2020-03-12 10:07:01 443

原创 如何搭建一个高性能高可用MySQL数据库

首先关系型数据库和非关系型数据库对比:怎么搭建一个高性能、高可用和能存储海量数据的关系型数据库(比如MySOL):主从同步:从数据库对主数据库进行数据备份,并且通过数据冗余(比如将数据多复制一份,那么我们就可以将访问流量分成两半同时访问)来提升效率。读写分离:一般情况下,对数据库的读操作远远多于写操作,我们可以将写请求分配给主服务器,将读请求分配给从数据库,这样我们就只需要对主数据...

2020-03-07 14:50:12 831

原创 怎么使用软引用和弱引用提升内存性能

软引用的作用是当GC时在内存足够的情况下不会回收,弱引用只要发生GC就会回收。软引用可以用来做缓存,这样既不影响内存整体使用,又不需要单独编写清理缓存程序,因为GC更懂的合理适时回收。弱引用可以用来替换手动清理的过程,比如当一个用户下线时,我们可能在不同的地方保存了对这个用户的信息,如果使用弱引用保存信息,当这个用户的强引用消失时,下一次GC会自动回收。...

2020-03-06 17:28:05 176

原创 关于Java中的fianl、finally、finalize的看法

fianl:是一个关键字可以用来修饰变量、方法和类 1、修饰变量:如果修饰的是一个基本类型的变量(包括静态的和非静态的),那么表示这个变量的值被初始化之后将无法被更改,如果修饰的是一个对象,那么表示这个变量所指向的引用是不会变得,而这个对象里的内容是可以被修改的(类似于C语言中的指针,指针的指向无法被修改而指向的变量的值是可以被修改的)。 注:被fin...

2020-03-06 17:24:20 285

原创 JAVA学习笔记之GC

引用文章有: JVM内存区域解析 JAVA内存模型及垃圾回收自我总结 JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代Java GC(绝对干货)GC(gabage collection)垃圾收集器。为什么java要有GC。 我们编程人员在编程中用到的内存空间主要有两部分:堆栈和堆。一般变量的空间都占用的是堆栈空间,不过我们编程人员可...

2020-03-06 17:23:45 198

原创 DualPivotQuicksort源码解析

我们可以直接调用Arrays.sort()来排序一个数组,跟踪下去实际上调用的是DualPivotQuicksort中的sort(a,left,rigth,null,0,0)int sort(对int类型的数组进行的排序) /** * Sorts the specified range of the array using the given * work...

2019-05-09 22:36:11 528

原创 ThreadLocal源码解析

ThreadLocalMap是ThreadLocal的内部类,核心操作都在ThreadLocalMap类里实现当我们在外部通过ThreadLocal对象调用get方法获得在之前传入的value,本质上是取出当前线程Thread对象的ThreadLocalMap对象,再从中取出想要的值,也就意味着ThreadLocalMap是线程私有的。因为对ThreadLocalMap的操作封装在内部,由...

2019-03-28 21:43:18 140

原创 遍历子序列(递归与非递归)

递归: public static void main(String[] args){ int[] array = {1, 2, 3, 4, 5}; for (int i = 1; i <= array.length; i++) { findChildOrder(0, 1, array, new int[i]); ...

2019-03-26 10:58:21 594

原创 由前序遍历和中序遍历还原二叉树非递归算法

原理:前序遍历的第一个为根结点,在中序遍历中找到对应的结点位置后,在该位置左侧为根结点的左子树,在该位置右侧的为右子树,并可以找到在前序遍历中根结点左子树的的前序遍历和右子树的前序遍历,这两个数组的第一个就分别为根结点的左右孩子。思路:一层一层的还原二叉树,还原一层的结点需要两种信息,上一层的所有结点,以及上一层每个结点左右孩子的信息。还原算法以及前序、中序和后序遍历非递归算法pac...

2019-02-01 14:58:32 1281

原创 深入剖析js的原型、Function和Object之间的关系并简单实现继承

我看了很多网上有关于原型的一些说明,总觉得说的不够清楚,而有一句话很有意思“在js里万物皆对象”,我承认事实确实是这样,但是都说的模棱两可,现在我们就深入探究一下这里面的门道(我使用的火狐浏览器开发版,不同浏览器可能控制台输出不一样)js里的对象,属性等说法,其实就是指针,它们指向自己的实例空间(除了基本类型)先看一个简单的function变量function fun1(name) ...

2018-10-25 18:51:45 6914

空空如也

空空如也

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

TA关注的人

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