自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 整理了这么久,终于把多线程面试搞定了!

1.Java面试中常被问到的进程与线程你知道多少呢?2.并发和并行的区别3.Java多线程《一》4.Java多线程《二》5.线程池详解6.在多线程下,如果对一个数进行叠加,该怎么做?7.ReentrantLock你知道多少呢?8.ReentrantLock源码分析9.volatile关键字10.线程池的实现11.生产者消费者模型12.ConcurrentHashM...

2020-04-26 17:35:29 896

原创 《剑指offer》Java实现(1-10)

《剑指offer》java代码(1-10)

2020-03-24 15:54:42 226

原创 MQ如何保证消息不丢失(以RocketMQ为例)

2024-08-23 23:22:22 108

原创 Redisson分布式锁原理

2024-08-21 15:10:20 110

原创 MyBatis中${} 与 #{} 的区别

{}:表示一个占位符通过#{}可以实现preparedStatement向占位符中设置值,自动进行Java类型和JDBC类型转换,#{}可以有效防止SQL注入#{}可以接收简单类型值或pojo属性值如果parameterType传输单个简单类型值,#{}括号中名称随便写${}:表示拼接SQL串通过${}可以将parameterType传入的内容凭借在SQL中,不进行类型转换,会出现SQL注入问题${}可以接收简单类型值或者pojo属性值如果parameterType传输单个简单类型值,$

2024-08-20 00:40:52 209

原创 Redis 单线程如何处理那么多的并发客户端连接?

Redis的IO多路复用:redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,依次放到文件事件分派器,事件分派器将事件分发给事件处理器。Redis底层应用到了NIO的多路复用。

2024-08-19 22:30:00 221

原创 RocketMQ默认使用G1垃圾回收器

2024-08-18 14:13:58 85

原创 Java类加载器&不同类加载器的管辖范围

3、AppClassLoader是自定义类加载器的父类,负责加载classpath下的类文件。系统类加载器,线程上下文加载器继承ClassLoader实现自定义类加载器。1、BootStrapClassLoader是ExtClassLoader的父类加载器,默认负责载%JAVA_HOME%lib下的jar包和class文件。2、ExtClassLoader是AppClassLoader的父类加载器,负责加载%JAVA_HOME%/lib/ext文件夹下的jar包和class类。

2024-08-18 00:49:35 184

原创 进程间的通信方式有几种?

消息队列是一种常用的进程间通信方式,克服了上述两种方式种信号量有限的缺点,具有写权限的进程可以按照一定的规则给MQ中添加Message。信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某件事发生,一个进程收到一个信号与处理器收到一个中断请求在效果上是一致的。分为匿名管道和命名管道两种,匿名管道可用于具有父子进程间的通信,命名管道除了具有管道所具有的功能外,还允许无亲缘关系的进程之间的通信。比较普通普通的方式,可用于网络中不同机器之间的进程间通信,应用比较广泛。

2024-08-14 22:00:00 149

原创 线程的6种状态以及生命周期

线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。:表示线程阻塞于锁,只有synchronized才使其进入这个状态,其他显示的Lock锁等不可以,只能进入等待或者超时等待的状态。:Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。:进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。:表示该线程已经执行完毕。

2024-08-14 16:50:22 280

原创 从JVM分析对象创建的过程

这个时候无法使用指针碰撞的方式,这时虚拟机会维护一个列表,记录哪些内存是可用的,在分配的时候再列表中找出一块足够大的空间分配给对象实例,并更新列表上的记录。(1)一种是指针碰撞Bump the Pointer(JVM默认采用这种方式),如果Java堆中的内存是规整的,即使用过的内存在一边,未使用的在另一边,中间放着一个指针作为分界点的指示器,那么内存分配就是指针的移动;对象需要内存的大小在类加载完成之后就可以完全确定,为对象分配空间的任务等同于加你个一块确定大小的内存从Java堆中划分出来。

2024-08-12 17:47:08 428

原创 JAVA线程锁机制是怎样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?

1、Java的锁就是在对象的MarkWord中记录一个锁状态。无锁、偏向锁、轻量级锁、重量级锁以及对应不同的状态。2、Java的锁机制就是根据资源竞争的激烈程度不断进行锁升级的过程。

2024-08-12 00:12:40 172

原创 对于MySQL性能优化的理解

本人才疏学浅,如有错误,烦请指出!

2024-08-11 22:54:10 176

原创 Redis与Memorycache的区别

总结:Redis和Memorycache吞吐量(单位时间内的数据读写量都很大,redis是秒级万条数据(由于网络延迟原因,一般达不到))Redis是单线程的,优点是CPU开销小,省去多线程线程之间切换的开销,但是相对于Memorycache来说海量数据的相对较低。Memorycache使用了多线程技术,数据量大的时候,性能占优,但是缺点是CPU消耗大。Redis支持五种数据结构,string、hash、list、set、zset。Redis与Memorycache主要是持久线程和持久化的区别。

2024-08-09 00:24:39 331

原创 内存泄漏的常见原因

对象Hash值发生改变,使用HashMap、HashSet等容器中时候,由于对象修改之后的Hash值和存储容器时的Hash值不同,所以无法找到存入的对象,自然也就无法单独删除,这也会导致内存泄漏。这里主要指创建的创建的连接不在使用的时候,需要调用close方法关闭连接,只有被连接关闭后,GC才会回收对应的对象(Connection、Statement、Resultset、Session),忘记关闭这些资源都会导致持续占有CPU,无法被GC回收。Java中的内存泄漏主要指的是Java。

2024-08-07 17:15:37 285

原创 对于泛型以及泛型擦除的理解

泛型的本质就是参数化类型,也就是让数据类型作为参数传递,其中E相当于形式参数负责占位,而使用集合时<>中的数据类型相当于实际参数,用于给形式参数E进行初始化,从而使得集合中所有的E被实际参数替换,由于实际参数可以传递各种各样广泛的数据类型,因此得名为泛型。JVM看到的只有List,而由泛型附加的信息对于JVM是不可见的。// 试图将lt1的数值赋值给lt3,也就是覆盖lt3中原来的数值,结果编译报错:集合中支持的类型不同。Java的泛型是伪泛型,使用泛型的时候加上泛型类型参数,在。泛型修饰类-》泛型类。

2024-08-06 23:39:56 326

原创 单例模式-Java实现

第五种,单例模式枚举实现。因为Java虚拟机会保证枚举对象的唯一性,因此每一个枚举类型和定义的枚举变量在JVM中都是唯一的。把INSTANCE写在一个静态内部类里面,由于静态内部类只有调用静态内部类的方法,静态域,或者构造方法的时候才会加载静态内部类。第一种,是最简单的实现,通过延迟加载的方式进行实例化,并且增加了同步锁机制避免多线程环境下的线程安全问题。*这种方式在类加载的时候就触发了实例化,从而避免了多线程同步问题。单例模式,就是一个类在任何情况下绝对只有一个实例,并且提供一个全局访问点来获取该实例。

2024-08-05 00:45:54 212

原创 Info:查看redis服务运行信息

used_memory: # Redis分配的内存总量(byte),包含redis进程内部的开销和数据占用的内存 used_memory_human: # Redis分配的内存总量(Kb,human会展示出单位) used_memory_rss_human: # 向操作系统申请的内存大小(Mb)(这个值一般是大于used_memory的,因为Redis的内存分配策略会产生内存碎片)maxmemory_human:0B # 配置中设置的最大可使用内存值。3、Memory 服务器运行内存统计数据。

2024-08-03 12:54:17 244

原创 分布式数据库原理CAP

3、常见的例子是读写分离,某个节点负责写入数据,然后将数据同步到其他节点,其他读节点提供读取的服务,当两个节点出现通信故障的时候,面临CA的选择。比如现在的分布式系统中有一个或者几个机器宕掉了,其他剩下的机器可以满足正常运转并满足系统要求,对于用户而言并没有什么体验的影响。为了保证数据的一致性,需要等待失去联系的节点恢复过来,在这个过程中欧,节点不允许对外提供服务,系统处于不可用状态。分区容错性要求,虽然是一个分布式系统,也要看上去就好像可以运转的一个正常的整体。所有的节点在同一时间的数据完全一致。

2024-08-02 22:52:26 147

原创 sleep时间问题导致不能正常部署解决

检查脚本不规范之处,sleep 10,可能war包正在解压,就已经超过sleep时间,进行下一步操作。怀疑jar包做了升级,脚本没有及时更新,在平台的lib包中找到了对应的文件,确认版本号与脚本内一致。平台通过pset部署一直都运行正常,在没有更改执行脚本文件的情况下,部署不能成功。根据报错指引,切换到相应的目录,可以找到文件。重复执行脚本,没有报错。解决办法:优化了sleep等待时间,目前可以正常部署!服务器通过命令模拟部署环境,偶尔会有两种类型报错。类型一:找不到主类或无法加载主类。

2023-11-08 15:46:59 82

原创 匿名内部类

匿名内部类学习总结1、什么是匿名内部类?隐藏了名字的内部类,可以写在成员位置,也可以写在局部位置。2、匿名内部类的格式3、格式的细节包含了继承或实现,方法重写,创建对象。整体就是一个类的子类对象或者接口的实现类对象。4、使用场景当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码。

2022-10-31 10:21:31 190 1

原创 SQL的优化

SQL的优化1.sql尽量使用索引,而且查询要走索引2.对sql语句优化(1)子查询变成left join(2)limit 分布优化,先利用ID定位,再分页or条件优化,多个or条件可以用union all对结果进行合并(union all结果可能重复)(3)不必要的排序(4)where代替having,having 检索完所有记录,才进行过滤(5)避免嵌套查询(6)对多个字段进行等值查询时,联合索引...

2021-03-24 11:41:41 160

原创 drop、delete与truncate的区别

```bash```c```handlebars SQL中的drop、delete、truncate都表示删除,但是三者有一些差别: 1. Delete用来删除表的全部或者一部分数据行,执行delete之后,用户需要提交(commmit)或者回滚(rollback)来执行删除或者撤销删除, delete命令会触发这个表上所有的delete触发器; 2. Truncate删除表中的所有数据,这个操作不能回滚,也不会触发这个表上的触发器,TRUNCATE比delete更快,占用的空间更小.

2021-03-24 11:28:10 511

原创 JDBC连接数据库

package dao;import java.io.FileInputStream;import java.io.IOException;import java.sql.*;import java.util.Properties;public class JdbcTest { private String jdbcDriver; private String jdbcUrl; private String userName; private String pa

2020-09-29 16:54:25 132

原创 HTTP总结《二》

HTTP总结《二》1.HTTP的今生来世到现在为止,HTTP协议已经有四个版本了。HTTP1.0——》HTTP1.1——》HTTP/2——》HTTP/32.HTTP1.0与HTTP1.1这两者之间最大的区别就是HTTP1.1默认是持久化连接。HTTP1.0默认的是短连接,每次都需要三次握手建立连接,然后进行数据传输,最后通过四次挥手断开连接。简单来说,就是每次与服务器交互,都需要新打开一个连接!消耗资源HTTP1.1中默认使用持久化连接来解决:建立一个连接,多次请求均由这个连接完成(注意:如果

2020-06-15 13:43:21 97

原创 JVM系列之初识JVM《三》

从上一篇博文中,我们了解到JVM内存模型、加载器等内容,这一篇我们了解一下类的加载阶段用到的双亲委派模型。类的加载过程一个类继承层次很多,这就是有时候JVM会很慢的原因。双亲委派模型1.先从子类加载器到顶级类加载器,查找当前类加载器在之前有没有加载过这个类,如果加载过,此时返回这个类的class对象。2.如果没有加载过这个类。那么此时,应该从父类到子类依次尝试加载。(加载是否成功,就看这个类是否在三种类加载器的管辖范围之内)。本人才疏学浅,如有错误烦请指出,谢谢!..

2020-06-15 13:35:13 138

原创 JVM系列之初识JVM《二》

从前面的博文中,我们了解到Java的跨平台性以及JVM的生命周期以及工作原理,接下来我们来了解JVM的加载系统等。JVM架构图基础介绍将JVM划分为三个主要的子系统类装载子系统(Class Loader Subsystem)运行时数据区(Runtime Data Areas)执行引擎(Execution Engine)类装载子系统Java的动态类装载功能是由类装载子系统实现,可以装载,连接,初始化文件加载:功能是加载类,共有三种类加载器,Boot Strap Class

2020-06-15 13:14:15 141

原创 JVM系列之初识JVM《一》

Java的跨平台性Java中提到跨平台,想到的是JVM,但是能跨平台的是Java程序,而不是JVM。JVM是用C/C++开发的,是编译后的机器码,是不能跨平台,不同的平台需要安装不同版本的JVM编写的Java文件,编译之后生成.class文件,称之为字节码文件,Java虚拟机(JVM)负责将字节码文件翻译乘法特定平台的机器码后才能运行。即只要在不同的平台上安装对应的JVM,然后运行字节码文件,即运行Java程序在这个过程中,编写的Java程序没有改变,仅仅是通过JVM这个中间层,就能在不同的平台上运

2020-06-15 13:00:41 145

原创 迭代器模式

****将容器中包含的内部对象的访问委让给外部类,按顺序进行遍历访问,即可顺序访问集合对象元素,而不暴露该对象的底层细节。迭代器 角色Iterator(迭代器接口):该接口必须定义实现迭代功能的最小定义方法集,例如提供hasNext()和next()方法Concrete Iterator (迭代器实现类):迭代器接口的实现类,根据具体情况实现Aggregate(容器接口):定义基本功能以及提供类似Iterator类的iterator()方法Concrete Aggregate(容器实现类):容器接

2020-06-04 11:00:00 100

原创 HTTP总结《一》

HTTP总结《一》1.为什么学习HTTP?HTTP协议就是客户端和服务器交互的一种通讯的格式。让文档之间相互关联,形成超文本可以互相传阅。2.HTTP基础概念两台计算机相互通信的时候,HTTP分成的目的是为了将困难的问题简单化,而而且分层后就可以只关注我们需要关注的层次,而不用理会其他层。3.网站通信粗略过程我们在web通信的时候,不仅仅需要HTTP协议,还会涉及到其他的协议。DNS:负责解析域名我们在访问一个网页的时候哦,往往是通过域名来访问的链接,而计算机通信只认识主机地址 (192.1

2020-05-31 21:54:48 96

原创 索引失效的情况

索引失效的情况使用explain select....../G;来查询是否使用到索引,如果使用到,可以通过key查到,否则key为null。1.最好全值匹配;2.最左前缀法则:如果索引使用了多列,查询从索引的最左前列开始,且不能跳过索引中的列;3.不在索引中做任何操作(计算,函数,类型转换),会导致索引失效而转向全表扫描;4.存储引擎不能使用索引中范围条件右边的列,即范围之后全部失效;5.精良使用覆盖索引,只访问索引的查询(索引列和查询列一致),减少使用select *;6.My

2020-05-29 23:26:17 183 1

原创 网络

网络概括计算机网络:通过传输介质、通信设备和网络通信的协议、把分散在不同地点的计算机设备互联起来、实现资源共享和数据传输的系统传输介质:光纤、网线、光波通信设备:卫星、光缆、交换机。。。网络协议:TCP、UDP、IP…网络编程:编写程序使网络中的两个或多个设备(计算机)直接进行通信OSI网络模型国际标准化组织提出的网络的开发互联参考模型OSI(Open System InterCon...

2020-05-07 21:36:43 98

原创 static 关键字

static 关键字1.static 修饰成员变量 类名.静态变量静态变量和成员变量之间的区别:成员变量:堆 一份对象对应一份成员变量 this.name静态变量:方法区 一个类对应一个静态变量(多个对象操作同一个静态变量)(类变量) People.name2.static 修饰成员方法静态方法和成员方法之间区别:有无this引用3.静态块static { ...

2020-05-07 21:36:11 87

原创 Spring IOC,AOP原理

Spring IOC,AOP原理(重点)IOC:控制反转假设有这么一个场景:在A类中调用B类的方法,我们就称A依赖B,B为被依赖(对象)传统做法:直接在A(方法)中new出B类对象,然后调用B类方法Spring框架:在spring中,B的实例对象被看成Bean对象,这个Bean对象由spring容器进行创建和管理,这样,A获取B的实例对象就不是由自己主动去获取,而是被动接受spri...

2020-05-06 17:47:05 139

原创 Iterator 怎么使用?有什么特点?

Java中的Iterator功能比较简单,并且只能单向移动:(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。(2) 使用next()获得序列中的下一个元素。(3) 使用...

2020-05-06 11:57:59 3320

原创 HashMap和HashTable的区别

HashMapt和HashTable的区别HashMap和HashTable的区别继承的父类不同HashTable继承自Dictionary类,实现Map接口HashMap继承自AbstractMap类,实现Map接口线程安全性不同HashTable中的方法时synchronized,而HashMap中的方法在缺省情况下是非synchronized是否提供contain...

2020-05-05 22:13:32 92

原创 StringBuffer和StringBuilder,String的区别

StringBuffer和StringBuilder,String的区别Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们都可以存储和操作字符串 String 一个Java对象,只读字符串,引用的字符串内容不能被改变;如下,str仅仅是一个引用对象,它指向一个字符串对象“abc”。而str = "def" 的含义是让str重新...

2020-05-05 22:07:12 86

原创 synchronized关键字

synchronized关键字线程安全的解决方案还有Synchronized,提供了线程同步的方式Synchronized的使用方式关键字可以修饰方法或者代码块,确保多个线程在同一时刻,只能有一个线程处理方法或者是同步块,保证线程对访问变量的可见性,有序性,原子性1.修饰普通方法 //修饰普通方法 public synchronized void add() { ...

2020-05-05 20:53:50 217

原创 Java继承、多态接口和抽象类总结

一、继承(extends)继承的理解:当我们定义很多部分具有相同属性和行为的类时,如果使用之前我们所讲类的定义方式进行定义,那么是不是发现有大量的代码重复书写,为了允许使用现有的类的功能,并在无须改写原来的类的情况下,引入了继承的概念。我们把允许重用现有类称为基类(或超类,父类),由基类派生出来的类称为派生类(子类)。Java类的继承主要通过extends关键字来完成的。一旦继承后,子类将获...

2020-04-29 18:15:37 509

原创 三次握手与四次挥手详解

首先,在介绍三次握手和四次挥手之前,我们需要了解以下概念:TCP协议TCP(Transmission Control Protocol)传输控制协议,面向连接的传输协议,在传输层。TCP协议特点面向连接:通信之前必须建立连接,通信后断开连接 每一个TCP连接只能是点对点的(一对一) 提供的可靠的交付服务:通过TCP连接传输的数据,无差错,不丢失,不重复 提供全双工通信 面向...

2020-04-27 14:39:32 679

空空如也

空空如也

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

TA关注的人

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