自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot2.x +redis5.x读写分离配置

redis的主从复制我就不赘述了,各大博客都有写怎么配置的,我们来讲SpringBoot怎么配置读写分离:方法应该有多种:可能的实现有利用AOP动态的获取redis连接工厂并注入对应的实例本文的实现比较呆板,读写分离,主redis负责写,从redis负责读,有两个java配置类如下:附加:java Config(java配置类)是Spring的一种编码风格,其他两种编码风格为XML和注解,J...

2019-11-20 20:31:04 2999

原创 深入理解JDK动态代理《从手写模拟到源码剖析》

目录  一.java代理模式的实现  二.手写模拟JDK动态代理  三.JDK动态代理源码剖析正题一、java代理模式的实现  1.java中代理模式的实现方式java代理分静态代理和动态代理,java静态代理实现有两种:继承,聚合。java动态代理实现有两种:JDK动态代理,CGLIB代理。  2.静态代理和动态代理的主要区别和特...

2019-11-13 14:54:50 497

原创 计算机网络面试题总结《持续更新》

CSDN什么时候能出个html或者笔记的导入功能?这格式全都没了1.OSI7层概念模型:      应用层:主要协议:Http、Https、DNS      表示层:信息的语法语义以及他们的关联,如加密解密,转换翻译,压缩解压等,主要协议:  &nbs...

2019-10-27 18:44:35 2082 3

原创 关于JDK7HashMap多线程场景下扩容死循环问题的原因以及JDK8的解决方案

JDK7中HashMap扩容出现死循环的本质原因是,这个集合不是线程安全的,共享变量Node结点访问出错,当前线程在扩容到槽中最后一个节点B时,由于其他线程将最后一个节点B的next引用置成了A(下图),被当前线程看到了(实际情况是,没有同步措施的情况下,当前线程可能看到,可能看不到,和线程何时将自己本地内存的值刷新到主存有关,这里涉及JMM模型和内存可见性,如有不懂请百度),导致了当前线程多执行...

2019-11-14 20:44:23 526

原创 一张图简单的解释AOP思想

2019-11-06 19:56:17 228

原创 关于ThreadLocal的使用可能造成的内存泄露以及避免方案以及为什么使用弱引用

我们知道,每个Thread类中有一个ThreadLocalMap类型的threadLocals变量,即每个线程中都有一个自己的map,map中的key为ThreadLocal实例,value为要存储的值我们查看该Map的结构,发现里面有个内部类Entry,此Entry类型是构成map的结点结构,类似HashMap中的Node一样。我们在此发现一个问题,发现Entry中的key没有显式声明,...

2019-11-04 14:32:42 676

原创 JDK8中HashMap链表转红黑树的阈值为什么选8?为什么用红黑树做优化?

为什么会引入红黑树做查询优化呢?在平常我们用HashMap的时候,HashMap里面存储的key是具有良好的hash算法的key(比如String、Integer等包装类),冲突几率自然微乎其微,此时链表几乎不会转化为红黑树,但是当key为我们自定义的对象时,我们可能采用了不好的hash算法,使HashMap中key的冲突率极高,但是这时HashMap为了保证高速的查找效率,就引入了红黑树来优化...

2019-11-03 21:33:18 8735 7

原创 计算1+2+3+...+n;不许用乘除法和if、 while、switch、for等关键字计算《三种方法!》

题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题目思路思路1:递归+短路,当当前栈的入参n为0时,短路后面的递归语句,就可以达到终止递归的效果;思路2(Java实现):利用异常机制,当当前栈的入参n为0时,制造异常使程序不走递归函数,catch块返回0即可;思路3(C++实现):利用boo...

2019-10-28 11:14:04 554

原创 关于IDEA中的classpath定义

想要知道classPath具体包含哪些路径,我们应该先看看自己项目的目录结构,点击IDEA左上角的file->Project-Structure.结构的右边列出了4个项目中的文件类型:Source Folders:表示的都是代码源文件目录,生成的class文件会输出到target->classess文件夹中,但是里面的源文件不会复制到target->classes文件夹中...

2019-09-14 20:22:06 17136 2

原创 JAVA 读写锁中锁降级的必要性

既然大家看到了这篇博客,也应该都大概了解了读写锁的一些概念,咱们直接上主题,读写锁中为什么要用锁降级;先引用书上的一段话说说锁降级的概念:        锁降级指的是写锁降级成为读锁。如果当前线程拥有写锁,然后将其释放,最后再获取读锁,这种分段完成的过程不能称之为锁降级。锁降级是指线程先持有写锁,再获取到读锁,随后释放(先前拥有的)写锁的过程;锁降级的必要性1:锁降级中读锁的获取是否必要呢...

2019-08-27 20:16:02 1698 5

转载 深入理解volatile关键字---缓存一致性原理

volatile关键字转自:http://www.cnblogs.com/dolphin0520/p/3920373.html        volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,vola...

2019-06-05 21:10:52 3095

原创 为什么J2EE Service层、Dao层要有接口

在此不单单只说为什么这两层要有接口,包括了平时开发写接口的好处,不是不写不行,而是写了更方便程序扩展和后期维护。0.有个接口,注入的时候可以注入到Service对象,没有你就要注入到ServiceImp对象。以后修改了实现,变成ServiceImp2.java了,有接口的话,注入都不用修改。没有的话,你要修改所有用到ServiceImp的类。1.面向对象设计原则中有三条与此相关:开闭原则、依...

2019-05-26 15:41:18 425

原创 Tomcat重新部署与热部署与重启服务

1.重启tomcat服务,只会重新编译java模块下的文件(相当于更新.classes文件)2.重新部署,将java类和.xml等配置文件都复制到tomcat的运行环境中(相当于既更新.classes文件又更新web.xml等配置文件)3.热部署,既在运行时修改java类或者jsp文件可以在不重服务器的情况下让修改生效,但是对修改配置文件(例如.xml)无效!总结:开启热部署后,不更改配置...

2019-05-03 16:17:44 3617

原创 如何在idea启动或者Tomcat启动时,让gradle自动执行自己所写的task

上图中对你自己添加的任务点击右键,然后选择在编译前执行就OK了,自己添加的task一般都在IDEA右边gradle模块的other目录下

2019-04-28 10:53:50 1236

原创 关于IDEA建立Gradle项目build/libs/exploded目录无法生成导致Tomcat找不到web模块问题

我之前用的Gradle作为编译器,导致了开启服务器时,Tomcat找不到web模块,就会导致开启服务器时候报类似 XXXX.war not found for the web module 的错误因为Gradle编译器不会给你自动创建exploded目录,但是Tomcat找的时候是去哪个目录找的,所以改回用IDEA做编译器就好了,我之前也试过改Tomcat寻找war包的路径,但是出现了很多问题...

2019-04-27 10:20:13 5510 17

原创 Gradle项目 tomcat 启动not found for the web module

将此路径名放入下图中的位置:

2019-04-23 21:25:01 6536 1

原创 The origin server did not find a current representation for the target resource or is not willing to

将此路径复制,然后粘贴到

2019-04-23 20:08:47 244

原创 记一次Gradle项目mybatis整合Spring时, Invalid bound statement (not found):

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题,即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。常见原因: 一般的原因 Mapper interface和xml文件的定义对应不上,需要检查...

2019-04-18 21:05:46 2466

原创 SSM框架整合之配置文件(详细)

一.applicationContext.xml1.配置数据源(Mybatis)<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql....

2019-04-18 16:54:01 752

原创 JAVA三种代理模式:静态代理、动态代理和cglib代理的实现

一、代理模式介绍代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。代理模式UML类图:举个例子,我们生活中经常到火车站去买车票,但是人一多的话,就会非常拥挤,于是就有了代售点,我们能从代售...

2019-04-09 19:56:02 234

原创 Spring中的xml配置Schema约束

相关概念在使用spring的配置文件时,新添加一个配置文件就需要添加相应的约束,一直没有研究过为什么要有这些约束,这些约束是干什么的。spring在启动的时候需要验证xml文档,约束的作用就是来验证配置文件的xml文档语法的正确性。在项目中其中的一个spring配置文件约束:<?xml version="1.0" encoding="UTF-8"?> <!--...

2019-03-31 20:58:37 543

原创 JDK7HashMap的存储结构以及时间复杂度

我们知道HashMap是基于Hash表来设计的,他的底层是数组和链表的结合体,那么HashMap的最大的特点就是快,因为是由键找值。(1)什么是HashMap以及HashMap的构成HashMap是基于哈希表的Map接口实现,用来存储键值对,线程不安全因此也很快,允许null值null键。HashMap实际上是一个数组和链表的结合体。键值对Map.Entry存放在链表里面,数组里面存放的是...

2019-03-20 13:01:01 7287 8

原创 String中创建字符串常量用new和不用new的区别

String实质是字符数组,两个特点:1、该类不可被继承;2、不可变性(immutable)例如 String s1 = new String(“myString”);和 String s1 = “myString”;第一种方式通过关键字new定义过程:1.在程序编译期,编译程序先去字符串常量池检查,是否存在“myString”,如果不存在,则在常量池中开辟一个内存空间存放“myStri...

2019-01-19 16:11:33 7093 4

原创 C语言 线性表的顺序存储结构(顺序表实现)以及删除顺序表中值为e的全部元素

#include&amp;amp;quot;bits/stdc++.h&amp;amp;quot;;#define max 100#define zengliang 20/**顺序表*/typedef struct orderList{int a;int length;int capacity;}List;void initiaList(List &amp;amp;amp;amp;list){list.a=(int)malloc(sizeof(i...

2018-12-27 14:02:48 4100

原创 c语言动态与静态分配内存空间的区别

*所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。例如我们定义一个float型数组:float score[100];   但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大?在很多的情况下,你并不能确定要使用多大的数...

2018-12-27 11:20:11 3769

原创 关于Java对象作为参数传递是传值还是传引用的问题

在Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用,这是一个饱受争议的话题。若传的是值,那么函数接收的只是实参的一个副本,函数对形参的操作并不会对实参产生影响;若传的是引用,那么此时对形参的操作则会影响到实参。  首先我们来看一句代码:Object obj = new Object();这句话的意思是:创建一个Object对象,再创建一个名为obj的引用,让这个引用指向...

2018-12-27 11:10:10 599

原创 Java中String直接赋值和使用new的区别:

String str2 = new String(“ABC”);String str1 = “ABC”;String str1 = “ABC”;可能创建一个或者不创建对象。从JDK1.7版本之后,java String池设置在堆中;如果”ABC”这个字符串在java String池里不存在,会在java String池里创建一个String对象(“ABC”),然后str1指向这个内存地址。...

2018-12-27 11:04:41 4585 3

原创 Lambda表达式与匿名内部类的区别

1:匿名内部类可以为任意接口创建实例-----不管接口中包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可;但Lambda表达式只能为函数式接口创建实例。2:匿名内部类可以为抽象类甚至普通类创建实例;但Lambda表达式只能为函数式接口创建实例。3:匿名内部类实现抽象方法的方法体中允许调用接口中定义的默认方法;但Lambda表达式的代码块中不允许调用接口中定义的默认方法。...

2018-12-27 10:58:50 594

原创 C语言 字符串数组与字符串指针

区别:数组形字符串存放在全局数据区或栈区,可读可写。指针字符串存放在常量区,只读不能写。char str[] = “max666”;char * pstr = str;上面是定义了一个字符串数组及一个指向这个字符串数组的指针,可以通过这个指针对数组中的内容进行操作;例如:*(pstr + i) = ‘a’;但是下面的情况不可以直接对数组进行操作:char *str = “1234567...

2018-12-27 10:39:54 695

原创 C语言 删除单链表中值为e的全部元素

#include&amp;amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;amp;gt;#include&amp;amp;amp;amp;amp;amp;amp;lt;malloc.h&amp;amp;amp;amp;amp;amp;amp;gt;//删除单链表中值为e的全部元素typedef struct Node{int data;struct Node *next;} LNode,*Li

2018-12-26 21:39:55 4943

原创 C语言栈的顺序存储结构实现

//1;线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素。//2;采用的实现方式:一段地址连续的存储单元可以用固定数组或者动态存储结构来实现,这里采用动态分配存储结构。#include"bits/stdc++.h";#define max 100#define zengliang 20typedef struct stack{int *base;in...

2018-12-26 21:23:03 404

原创 C语言队列的顺序存储结构实现(循环队列)

#include&amp;quot;bits/stdc++.h&amp;quot;;#define max 100/**循环队列关键 rear在front的后一位来分辨满与空 巧妙取模实现循环*/typedef struct queue{int *base;int front;int rear;}Queue;void initiaStack(Queue &amp;amp;amp;stack){stack.base=(int...

2018-12-26 21:16:32 1724

空空如也

空空如也

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

TA关注的人

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