自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (4)
  • 收藏
  • 关注

原创 JVM运行模式

JVM的运行模式由三种:解释模式(Interpreted Mode):只使用解释器(-Xint 强制JVM使用解释模式),执行一行JVM字节码就编译一行为机器码编译模式(Compiled Mode):只使用编译器(-Xcomp JVM使用编译模式),先将所有的JVM字节码一次编译为机器码,然后一次性执行所有机器码混合模式(Mixed Mode):(-Xmixed 设置JVM使用混合模式)依然使用解释模式执行代码,但是对于一些“热点”代码采取编译器模式执行,这些热点代码对应的机器码会被缓存起来,下次执

2020-06-01 19:49:36 702

原创 类加载机制

1. 类加载过程多个java文件经过编译打包成可运行的jar包,最终由java命令运行某个主类的main函数启动程序,这里首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他的类,会逐步去加载这些类1。从类加载到使用整个过程有如下几步加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才加载,例如调用类的main方法,new对象

2020-05-27 22:04:57 245

原创 Redis

三、Redis集群方案比较哨兵模式高可用集群模式

2020-05-04 21:32:58 224

原创 Java对象内存结构

对象内存结构分为三部分:对象头hash码,对象所属的年代,对象锁,锁状态标志,偏向锁(线程)ID,偏向时间,数组长度(数组对象)等对象实际数据即创建对象时,对象中成员变量,方法等对齐填充保证对象的大小是8字节的整数倍MataData元数据指针——指向当前对象的Class对象HotSpot虚拟机对象头MarkWord...

2020-04-06 21:02:30 200

原创 并发编程——Java中的锁

为了访问临界资源访问的安全性,通过同步器将所有的并发访问编程串行化的访问。

2020-04-06 20:59:55 149

原创 Java中实例对象存储在哪?

当实例对象存储在堆区时:实例对象存放在堆区,对实例的引用存在线程栈上,而实例的元数据存在方法区或者元空间。那么,实例对象一定是存放在堆区吗?答案是不一定,如果实例对象没有发生线程逃逸行为,就会被存储在线程栈中。这涉及到JIT在编译中对Java代码的优化——逃逸分析。逃逸分析的基本行为就是分析对象动态作用域。如果一个对象在方法中被定义,但是对象的使用仅是在当前方法中,而且对象本身比较简单,那么...

2020-04-06 19:15:42 2626

原创 单例模式——双检锁

对象创建过程申请内存空间 address = allocate实例化对象 instance填充数据到内存空间 address = instance无法保证上述的三步的原子性,也有可能产生指令重排(防止产生异常1,需要添加 volatile 关键字)public class LazySingleton { private static volatile LazyS...

2020-01-15 23:57:19 163

原创 并发编程——指令重排和内存屏障

一、指令重排什么是指令重排?     java语言规范规定JVM线程内部维持顺序化语义。即只要程序的最终结果与 它顺序化情况的结果相等,那么指令的执行顺序可以与代码顺序不一致,此过程叫指令的重排序。指令重排发生阶段?执行器编译阶段CPU运行时指令重排的意义     适当的对机器指令进行重排序,使机器指令能更符合CPU的执行特性,最大限度的发挥机器性能。源码到最终执行的指令序列示...

2020-01-15 22:58:02 809

原创 并发编程——JMM(Java内存模型)

一、现代计算机理论模型与工作原理冯诺依曼计算机模型控制器(Control)运算器(Datapath)存储器(Memory)输入(Input system)输出(Output system)现代计算机主要结构基础CPU数据读取速度: 寄存器 > L1 > L2 > L3 > 内存    CPU缓存是为了弥补内存速度跟不上cpu处理数据速度而诞生的,当...

2020-01-15 21:16:26 189

原创 并发编程——volatile

    volatile是Java虚拟机提供的轻量级的同步机制volatile语义有如下两个作用可见性:保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。有序性:禁止指令重排序优化。volatile缓存可见性实现原理JMM内存交互层面:volatile修饰的变量的read、load...

2020-01-14 23:06:45 193

原创 ElasticSearch安装与环境配置

1. 下载安装包并解压安装包下载地址:https://elasticsearch.cn/download/这里我使用的6.6.0版本;使用wget命令或者下载到本地后复制到机器上,wget命令如下:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz解压安装包到自己想要放...

2019-12-29 21:44:42 207

原创 秀翻了——计算一个数是否是2的指数

private static boolean isPowerOfTwo(int val) { return (val & -val) == val;}负数的二进制表示是对应正数的二进制编码的补码例如:-3 的二进制编码3 的原码: 0000 00113 的反码: 1111 11003 的补码: 1111 1101补码就是反码加1...

2019-12-24 00:19:22 90

原创 查看windows端口占用

netstat -ano | findstr 端口号

2019-12-19 21:45:51 102

原创 最短路径——迪杰斯特拉 Dijkstra 算法

Dijkstra算法用于解决单源最短路径问题;是贪婪算法的最好的例子。在上述有向图中,要计算从点1到达其余各点的最短路径。其中两点之间的有向箭头表示从起点到终点的距离,例:0~2之间的箭头表示从0到2的距离为30,从2到0是不可达的。这里我们使用邻接矩阵data[][]来存储点到点之间的距离,data[3][4]表示3~4的路径,-1表示不可达;{{ 0, -1, 10, -1, 30, ...

2019-12-09 23:11:05 264

原创 图论入门篇

相关定义图 由顶点和边组成的结构顶点 图中的元素节点,如上图中的A,B,C等边(弧) 顶点之间的关系连线,如果边是有向(或者点对有序的),则图也会被叫做有向图。边的表示(A, B),同时也说明A,B邻接度 顶点邻接的顶点数目图的存储方式1.邻接矩阵对于上边的有向图,可以通过邻接矩阵的方式来表示:当图中顶点的度比较低时,我们说图是稀疏的,对应的矩阵也被称为稀疏矩阵2...

2019-12-04 00:11:05 579 1

原创 自定义BeanDefinitionRegistryPostProcessor

实现 BeanDefinitionRegistryPostProcessor 接口@Componentpublic class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor { // 在所有bean定义信息将要被加载,bean实例还未创建的时候;优先于post...

2019-12-02 21:41:10 219

原创 在自定义BeanFactory的后置处理器中尚未示例化的bean定义进行修改

创建自定义BeanFactory的后置处理器并设置MyLog为懒加载/** * 在类的定义加载完但是没有初始化是对类定义做除修改 */@Componentpublic class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override public void postPro...

2019-12-02 21:20:03 169

原创 通过实现ApplicationListener接口创建监听器

实现ApplicationListener接口,覆写onApplicationEvent(ApplicationEvent event)方法@Componentpublic class MyApplicationListener implements ApplicationListener { @Override public void onApplicationEvent...

2019-12-02 21:09:16 387

原创 通过@Profile注解 来根据环境来激活标识不同的Bean

@Profile标识在类上,那么只有当前环境匹配,整个配置类才会生效@Profile标识在Bean上 ,那么只有当前环境的Bean才会被激活没有标志为@Profile的bean 不管在什么环境都可以被激活激活切换环境的方法通过运行时jvm参数来切换 -Dspring.profiles.active=test | dev | prod通过代码的方式来激活AnnotationConfi...

2019-11-30 15:58:27 340

原创 @AutoWired自动装配

1. @AutoWired的使用@Servicepublic class MyService { @Autowired private MyDao myDao;}1.1 自动装配首先时按照类型进行装配,若在IOC容器中发现了多个相同类型的组件,那么就按 属性名称来进行装配@Configuration@ComponentScan(value = {"com.dgr.an...

2019-11-28 00:30:50 269

原创 通过@Value +@PropertySource来给组件赋值

public class Person { @Value("董") private String firstName; @Value("#{28-10}") private int age; @Value("${person.lastName}") private String lastName; public Person() { ...

2019-11-27 23:44:03 314

原创 Bean的初始化方法和销毁方法

1. bean的生命周期bean的创建、初始化、销毁方法。由容器管理Bean的生命周期,我们可以通过自己指定bean的初始化方法和bean的销毁方法@Configurationpublic class MainConfig { @Bean(initMethod = "init", destroyMethod = "destroy") public Car car() { ...

2019-11-27 23:20:36 310

原创 往IOC容器中添加组件的方式

1. 通过@CompentScan + @Controller | @Service | @Respository | @compent 组合的方式针对我们自己写的组件可以通过该方式来进行加载到容器中2. 通过@Bean注解来导入组件(适用于导入第三方组件的类)3. 通过@Import注解来导入组件 (导入组件的id为全类名路径)14. 通过实现FacotryBean接口来注册组件2适合...

2019-11-26 23:41:15 207

原创 @Import注解

导入第三方组件通过@Import来导入组件(导入组件的id为全类名路径)@Configuration@Import({Person.class})public class MainConfig {}通过@Import 的ImportSeletor类实现组件的导入 (导入组件的id为全类名路径)public class MyImportSelector implements Impo...

2019-11-26 23:25:21 132

原创 @Conditional进行条件判断

有两个组件,MyLog 和 MyAspect,Mylog 需要依赖 MyAspect创建MyCondition类,实现Condition接口public class MyCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedType...

2019-11-26 22:58:25 650

原创 @Lazy注解

主要针对单实例的bean在容器启动的时候,不创建对象,在第一次使用的时候才会创建该对象@Bean@Lazypublic Person person() { return new Person();}

2019-11-26 22:43:01 136

原创 @Scope注解

用于配置Bean的作用域对象。1. 在不指定@Scope的情况下,所有的bean都是单实例的bean,而且是饿汉加载(容器启动实例就创建好了)@Beanpublic Person person() { return new Person();}2. 指定@Scope为 prototype 表示为多实例的,而且还是懒汉模式加载(IOC容器启动的时候,并不会创建对象,而是 在第一次...

2019-11-26 22:40:29 97

原创 @CompentScan注解

在配置类上添加@CompentScan注解来进行包扫描@ComponentScan(basePackages = {"com.dgr.annotation.component_scan"})public class MainConfig {}1. 排除用法 excludeFilters(排除@Controller注解的,和TulingService的)@ComponentScan(ba...

2019-11-26 22:26:04 354

原创 JAVA注解

@Inherited@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})public @interface SafeVarargs {}使用此注解声明出来的自定义注解,在使用此自定义注解时,如果注解在类上面时,子类会自动继承此注解;@S...

2019-11-26 22:16:05 57

原创 哈夫曼树(最优二叉树)

给定N个权值作为N个叶子节点,构造一个二叉树,带权路径长度总和最小,这样二叉树称做哈夫曼树,又称做最优二叉树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼编码数据通信中,需要将传输的文字转为二进制的字符串,为了使编码后字符串尽可能端,在不等长编码中,可以让使用频率高的字符用短码,频率低的字符使用长码。为了使不等长编码为前缀编码(要求一个字符的编码不能是另一个字符的编码的前缀...

2019-11-25 00:39:14 1770

原创 红黑树

红黑树:一种自平衡二叉查找树。红黑树和AVL树1类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。红黑树的性质节点是红色或黑色;根节点是黑色;每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点);从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点红黑树的操作颜色变换:红 -> 黑, 黑 -&...

2019-11-17 20:09:06 72

原创 二叉查找树

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。在对二叉查找树进行中序遍历,会得到一个关键字的有序数列。下图所示就是一个二叉查找树:二叉查找树的查找...

2019-11-17 11:25:57 148

原创 MongoDB的索引特性

mongoDB中collections中会有默认索引 _id索引,单键索引# 在name属性上添加索引db.student.createIndex({name:1})# 查看查询学生名为 学生1 的执行计划db.student.find({name:"学生1"}).explain(){ "queryPlanner" : { "planne...

2019-11-14 22:41:43 173

原创 MongoDB的聚合操作

MongoDB的聚合操作分为两种:pipeline聚合mapReduce聚合mapReduce聚合:通过自定义的聚合命令,实现聚合操作,自由度高,适合大数据量且复杂的聚合操作pipeline聚合使用MongoDB提供的聚合命令,速度快,只能运行在单机上,适合小数据量的实时聚合操作,且在资源的使用上有一定的限制:单个聚合操作耗费的内存不能超过20%;返回的结果集大小小于16M1. 语...

2019-11-14 21:37:26 329

原创 MongoDB中$type和null类型

MongoDB中的数据类型如下图:插入数据:db.user.insert([{name:"张三", sex: "man"}, {name:"李四", sex:null}, {name:"王五"}])查询sex为null的用户:db.user.find({sex:null}){ "_id" : ObjectId("5dcc1a794552bedf4414fe77"), "name" :...

2019-11-13 23:08:14 517

原创 二叉树的层次遍历

树的相关定义:结点:树里的元素 父子关系:节点之间相连的边 子树:结点大于1时,其余的结点分为互不相交的集合 度:子节点的数量 叶子:度为0的结点 孩子:结点的子树的根二叉树:一种特殊的数据结构,每个结点至多只有两个子树;二叉树的第N层至多有个结点,树至多有个结点。满二叉树:每个存在子结点的结点都有两个子结点完全二叉树:除了最后一层外,其他层的结点树达到最大...

2019-11-12 23:13:45 169

原创 初识MongoDB

MongoDB的体系结构1. NoSql的概念NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是 SQL ”,互联⽹的早期我们的数据 ⼤多以关系型数据库来存储的。其特点是规范的数据结构(预定义模式)、强⼀⾄性、表与表 之间通过外键进⾏关联,这些特征使我们对数据的管理更加清晰和严谨,但随着互联⽹的发展 数据成爆炸式的增⻓我们对数据库需要更好的灵活性和更快的速度。这就是NoS...

2019-11-11 22:50:46 226

原创 动态规划之简单背包问题

背景有三个物品,,它们的信息如下:物品物品1物品2物品3体积124价值61012现在有一个能够容量为5的背包,将上述三个物品任意放入背包中,要求放入背包的物品的总价值最大;思路将背包容量按照单位容量划分,依次计算放入物品时被背包中物品的总价值:背包容量12345物品166666物品26101...

2019-11-09 23:19:46 222

原创 Linux安装jdk

一、下载安装包选择适合自己系统的jdk版本或者使用wget命令下载:wget命令如下wget --user=orcale账号 --ask-password 下载链接我的orcale账号为295135885@qq.com,下载链接可以右键自己要下载的jdk文件,复制链接地址获得wget --user=295135885@qq.com --ask-password https://down...

2019-11-08 19:30:16 80

原创 java 序列化和反序列化

一、什么是序列化和反序列化序列化 把对象转换为字节序列的过程称为对象的序列化;反序列化 把字节序列恢复为对象的过程称为对象的反序列化;对于字节序的说明,我在Endian–计算机中字节、字的存储机制一文中做了简单介绍,百度百科中相对详细一点。网络传输中都是使用大端格式,不同的操作系统所使用的字节序是不同的。二、什么情况下需要序列化和反序列化对象要被保存到文件或者数据库使用套接字在网络上...

2019-10-30 23:25:57 94

JVM指令手册.pdf

Java字节码文件反编译后,在对应的文件中可以查看到对应的JVM指令,本资源提供JVM指令对应的操作说明,查找每一个JVM指令是做什么操作的

2020-05-28

Nacos源码流程——服务注册与发现.png

Nacos服务注册与发现源码流程图, 通过流程图展示了服务注册到Nacos服务注册中心的整个源码过程,同时对Nacos代码中一些优秀的思想进行总结

2020-04-02

常用的内部排序相关代码.rar

常用的内部排序相关代码,对于相关步骤说明如果有不太理解的可以查看《疯狂JAVA:突破程序员基本功的16课第12章》

2019-09-10

排序算法.xmind

常用排序算法分类:主要分为内部排序和外部排序,这里内部排序又分为6大类

2019-09-10

空空如也

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

TA关注的人

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