自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 synchronized同步代码块

并发线程在访问 synchronized(this) 同步代码块时,一段时间内只能有一个线程被执行,另一个线程必须等待当前线程执行完这个代码块后才能执行;示例代码:Task.javapackage com.daimakuai;/** * @Auther: 13213 * @Date: 2020/5/30 17:59 * @Description: */public class Task { public void doLongTimeTask(){ fo

2020-05-30 21:23:30 190

原创 synchronized深入理解

synchronized注意:在一个类中,不管有几个方法进行了同步(synchronized),这些同步方法都共有一把锁,只要一个线程获得了这个对象锁,其他的线程就不能访问该对象的任何一个同步方法,但是可以访问其他的非同步方法;synchronized可重入机制:即在一个 synchronized 方法/块的内部调用本类的其他 synchronized 方法/块时,是永远可以得到锁的;synchronized实现任务的顺序执行示例:Main.javapackage com.shunxu;

2020-05-30 17:35:46 123

原创 maven项目pom、import关键字的理解

有import在使用springboot时,通常工程有自己的父模块,而不能继承spring-boot-starter-parent时:<dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot --> <groupId>org.springframework.boot</gr

2020-05-29 16:32:29 1357

原创 java堆内存和栈内存分析

1. 区别:堆和栈区别堆:主要用于储存实例化的对象,数组。由JVM动态分配内存空间。一个JVM只有一个堆内存,线程是可以共享数据的。栈:主要用于储存局部变量和对象的引用变量,每个线程都会有一个独立的栈空间,所以线程之间是不共享数据的。2. 堆内存和栈内存区别堆内存:储存的是数组和对象(其实数组就是对象),凡是new建立的都是在堆中,堆中存放的都是实体(对象),实体用于封装数据,而且是封装多个(实体的多个属性),如果一个数据消失,这个实体也没有消失,还可以用,所以堆是不会随时释放的,但是栈不一样,栈里

2020-05-28 13:41:31 294

原创 重写equals()时需要同时重写hashcode()

示例代码:1.没有重写equalspackage com.compareObject;/** * @Auther: 13213 * @Date: 2020/5/26 14:22 * @Description: */public class Dog { private int age; private String name; public Dog(int age,String name){ this.age=age; this.

2020-05-26 14:55:25 222

原创 Spring cloud简介

Spring cloud简介一、Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序,提供与外部系统的集成。二、spring cloud 和dubbo区别:1. 服务调用方式 dubbo是RPC springcloud Rest Api2. 注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper三、REST 和RPC对比:1.RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行

2020-05-26 10:31:14 221 1

原创 分布式应用中的分布式锁

分布式应用中的分布式锁如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁,分布式锁就是指在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。分布式锁的要求:1. 互斥性–在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;2. 高性能的获取锁与释放锁;3. 具备可重入特性–当一个客户端获取锁之后,这个客户端可以再次获取锁;一般有三种实

2020-05-26 09:28:39 144

原创 @PostConstruct作用

1.作用:@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。2. 执行顺序:其实从依赖注入的字面意思就可以知道,要将对象p注入到对象a,那么首先就必须得生成对象a和对象p,才能执行注入。所以,如果一个类A中有个成员变量p被@Autowried注解,那么@Autowired注入是发生在A的构造方法执行完之后的。如果想在生成对象时完成某些初始化操作,而偏偏这些初始化操作又依赖于依赖注入,那么.

2020-05-25 17:34:05 4019

原创 springboot常用注解

1. RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;...

2020-05-23 22:41:45 89

原创 Java基本数据类型

bit (位):位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为0或1。byte (字节):字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据或者一个英文字母,但是一个汉字需要两个字节表示。1B=8bit1Byte=8bit1KB=1024Byte(字节)=8*1024bit1MB=1024KB1GB=1024MB1TB=1024GB...

2020-05-23 15:07:12 107

原创 http与WebSocket协议区别

tcp三次握手:第一步:client 发送 syn 到server 发起握手;第二步:server 收到 syn后回复syn+ack给client;第三步:client 收到syn+ack后,回复server一个ack表示收到了server的syn+ack(此时client的56911端口的连接已经是established)。http与websocket区别与联系:都是一样基于TCP的,都是可靠性传输协议。WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不

2020-05-21 17:25:18 368

原创 maven多模块项目结构

maven多模块结构一个父项目(app-parent)聚合很多子项目(app-util, app-dao, app-service, app-web)。每个项目,不管是父子,都含有一个pom.xml文件。而且要注意的是,小括号中标出了每个项目的打包类型。父项目是pom,也只能是pom。子项目有jar,或者war。这些模块的依赖关系如下:app-dao --> app-utilapp-service --> app-daoapp-web --> app-service注意依赖的传

2020-05-21 10:41:13 2680

原创 本机mysql以及redis启动(windows)

命令窗口启动mysql1. cd 'C:\Program Files\MySQL\MySQL Server 8.0\bin'2. net start MySQL3. mysql -uroot -p4. 键入密码: 1qaz!QAZ

2020-05-19 13:20:07 330

原创 netty零拷贝深入理解

一、零拷贝特性:1. Netty的接收和发送数据采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝;2. Netty提供了组合Buffer对象,可以聚合多个ByteBuffer对象进行一次操作;3. Netty的文件传输采用了transferTo方法,它可以直接将文件缓冲区的数据发送到目标Channel,避免了传统通过循环write方式导致的内存拷贝问题;4. 内存池:为了减少堆外直接内存的分配和回收产生的资源损耗问题,Netty提供了基于内存池的

2020-05-19 11:03:34 116

原创 rabbitmq

1. 异步,将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度;2. 削峰,并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常;所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉,做好之后,你会发现,妈呀,系统复杂度提升了一个数量级,也许是复杂了 10 倍。但是关键时刻,用,还是得用的。ActiveMQ: 没法确认ActiveMQ可以支撑互联网公司的高并发、高负载以及高吞吐的复杂场景,在国内互联网公司落地较少

2020-05-18 17:25:15 288

原创 多线程安全

一、特性:方法中的变量不存在非线程安全问题,永远都是线程安全的,这是方法内部的变量是私有的特性决定的。示例代码;1.HasSelfPrivateNum.javapackage com.threadtest6;public class HasSelfPrivateNum { public void addI(String username){ try { int num = 0; if (username.equals.

2020-05-17 20:57:30 114

原创 线程停止

1.package com.threadtest4;public class MyThread extends Thread{ @Override public void run(){ super.run(); for (int i = 0; i < 500000; i++) { if (this.isInterrupted()){ System.out.println("已经停止,我要退

2020-05-17 14:59:40 103

原创 cookie/session的区别与联系

为什么要有cookie/session在客户端浏览器向服务器发送请求,服务器做出响应之后,二者便会断开连接(一次会话结束)。那么下次用户再来请求服务器,服务器没有任何办法去识别此用户是谁。有了cookie可以向服务器证明用户身份了,我们的web系统中是不是需要将用户的详细信息储存在某个位置供页面调用呢?用户的详细信息就包括姓名,年龄,性别等信息。而cookie是存在于客户端的,将用户详细信息通过网络发送到客户端保存是极不安全的。且cookie大小不能超过4k,不能支持中文。这就限制cookie不能满足存

2020-05-15 10:28:10 124

原创 悲观锁与乐观锁

悲观锁与乐观锁一、悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。Java在JDK1.5之前都是靠 synchronized关键字保证同步的,synchronized 是悲观锁。悲观锁机制存在以下问题:  1. 在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。2. 一个线程持有锁会导致其它所有需要此锁的线程挂起。3. 如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先

2020-05-14 15:14:50 136

原创 Map排序

首先解释下泛型:List<? extends T>表示该集合中存在的都是类型T的子类,包括T自己;List<? super T>表示该集合中存的都是类型T的父类,包括T自己;以? extends T这种方式可以取元素而不能添加,这个叫get原则;以? super T可以添加元素但是没法取出来,这个叫put原则;public class TypeTest { public static void main(String[] args) { Boa

2020-05-14 13:38:45 402

转载 spring aop

1. Aop类中的注解@Before 前置通知@AfterReturning 后置通知@Around 环绕通知@AfterThrowing 异常通知@After 最终通知@pointcut 定义切点匹配表达式2. 切点表达式由于Spring切面粒度最小是达到方法级别,而execution表达式可以用于明确指定方法返回类型,类名,方法名和参数名等与方法相关的部件,并且在Spring中,大部分需要使用AOP的业务场景也只需要达到方法级别即可,因而execution表达式的使用是最为广泛的。如下是

2020-05-13 14:44:02 140

原创 过滤器与拦截器

1.过滤器Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是设置字符集、控制权限、控制转向、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的w.

2020-05-12 13:00:28 228

原创 sql语句优化

索引失效的几种情况:1. 面前带模糊查询不能利用索引(like '%XX'或者like '%XX%')2. 条件中有or,应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=203. 索引无法存储null值,所以where的判断条件如果对字段进行了null值判断,将导致数据库放弃索引而进行全表查询: select id from t where num is nul...

2020-05-09 10:16:49 159

原创 spring bean生命周期

Spring Bean的生命周期1. 实例化 Instantiation2. 属性赋值 Populate3. 初始化 Initialization4. 销毁 Destruction实例化 -> 属性赋值 -> 初始化 -> 销毁// 忽略了无关代码protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args)

2020-05-08 18:44:19 173

转载 spring mvc servlet原理分析

1. Servlet规范在servlet的规范当中,servlet容器或者叫web容器如tomcat,其中运行的每个应用都由一个ServletContext表示,在web容器中可以包含多个ServletContext,即可以有多个web应用在web容器中运行。如在tomcat的webapp目录下,每个war包都对应一个web应用,tomcat启动时会解压war包,并启动相关的应用。在web容器启...

2020-05-08 10:43:41 494

转载 分库分表简介

在实践中对于海量数据一张表无法搞定,那么就想办法将数据放到多个地方,目前比较普遍的方案有3个:1. 读写分离2. 分库分表3. NoSQL只分库,或者只分表,或者分库分表融合方案都统一认为是分库分表方案,因为分库,或者分表只是一种特殊的分库分表而已。NoSQL比较具有代表性的是MongoDB,es;1. 读写分离,主从复制在实际应用中的绝大多数情况下读操作远大于写操作。MySQL提供了...

2020-05-05 16:27:27 622

原创 深入理解jvm

1.JVM体系结构类装载器ClassLoader:用来装载.class文件执行引擎:执行字节码,或者执行本地方法运行时数据区:方法区、堆、Java栈、程序计数器、本地方法栈1.1 程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成;如果线程正在执行...

2020-05-04 15:19:41 172

转载 线程让步(yield)和线程睡眠(sleep)区别

线程睡眠(sleep)让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态sleep()方法来实现。当前线程调用sleep()方法进入阻塞状态后,在其睡眠时间内,该线程不会获得执行的机会,而其它任何优先级的线程都可以得到执行的机会,即使系统中没有其它可执行的线程,处于sleep()的线程也不会执行,sleep()是用来暂停线程的执行。线程让步(yield)y...

2020-05-04 10:41:22 673

原创 redis数据类型以及常用操作

Redis与Memcached的区别:1 、Redis不仅仅支持简单的k/v类型的数据,同时还提供hash,list,set,zset等数据结构的存储。2 、Redis支持数据的备份,即master-slave模式的数据备份。3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。string类型String是redis最基本的类型,你可以...

2020-05-03 14:45:01 140

原创 HashSet和HashMap的区别

HashSet和HashMap的区别*HashMap* *HashSet* HashMap实现了Map接口 HashSet实现了Set接口 HashMap储存键值对 HashSet仅仅存储对象 使用put()方法将元素放入map中 使用add()方法将元素放入set中 HashMap中使用键对象来计算hashcode值 HashSet使用成员对象来...

2020-05-03 11:09:36 152

转载 红黑树简介

红黑树的简介:红黑树是一种自平衡二叉查找树,红黑树和平衡二叉树(AVL树)都是二叉查找树的变体,但红黑树的统计性能要好于AVL树。因为,AVL树是严格维持平衡的,红黑树是黑平衡的。维持平衡需要额外的操作,这就加大了数据结构的时间复杂度,所以红黑树可以看作是二叉搜索树和AVL树的一个折中,维持平衡的同时也不需要花太多时间维护数据结构的性质。红黑树在很多地方都有应用,例如:C++的STL,map和...

2020-05-03 10:22:42 253

原创 hashmap实现原理

为什么Java强调当重写equals()时需要同时重写hashcode()方法,假设两个不同对象,在内存中的地址不同分别为a和b,那么重写equals()以后a.equals(b) =true 开发者希望把a,b这两个key视作完全相等然而由于内存地址的不同导致hashcode不同,会导致在hashmap中储存2个本应相同的key值;执行new HashMap()时会通过默认的负载因子初始化...

2020-05-02 17:19:45 103

原创 java设计模式

代理模式:静态代理总结:1.可以做到在不修改目标对象的功能前提下,对目标功能扩展.2.缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护.动态代理:Cglib代理是功能最为强大的一种代理方式,因为其不仅解决了静态代理需要创建多个代理类的问题,还解决了jdk代理需要被代理对象实现某个接口的问题。Cgli...

2020-05-01 10:36:13 235

HTML语言初级教学

学习html的学习资料,主要是一个ppt文档

2014-05-21

空空如也

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

TA关注的人

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