自定义博客皮肤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)
  • 收藏
  • 关注

原创 JVM面试题

自定义类加载器只需要继承 java.lang.ClassLoader 类,该类有两个核心方法,一个是loadClass(String, boolean),实现了双亲委派机制,还有一个方法是findClass,默认实现是空方法,所以我们自定义类加载器主要是重写findClass方法。

2023-06-21 17:23:51 23

原创 MySQL面试题

在遍历索引的过程中,对索引中包含的所有字段先做判断,过滤掉不符合条件的记录之后再回表,可以有效的减少回表次数。索引下推会减少回表次数,对应innodb引擎的表索引下推只能用于二级索引,innodb的主键索引叶子节点上保存的是全行数据,所以这时候索引下推并不会起到减少查询全行数据的效果。

2023-05-31 17:30:01 33

原创 Java知识

MyBatis是一个持久层(ORM)框架,支持自定义SQL、存储过程和高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注释来配置和映射原始类型、接口和Java对象为数据库中的记录。

2023-03-24 10:22:36 44

原创 RabbitMQ

MQ的基本概念MQ全称Message Queue(消息队列),是在消息的传输过程中保存的消息的容器。多用于分布式系统之间进行通信。MQ的优势应用解耦:使用MQ使得应用间解耦,提升容错性和可维护性。异步提速:采用异步的方式提升用户体验和系统吞吐量削峰填谷:使用MQ之后,高峰产生的数据会被积压在MQ中,这样一来,高峰就被“削”掉了,但因为消息的积压,在高峰过后的一段时间,消费消息的速度还是会维持在比较高的水平,直到消费完积压的消息,这就叫做“填谷”。MQ的劣势:系统的可用性降低:系统引入的外

2021-06-30 17:44:29 77

原创 Windows下关闭某个端口运行的程序

1、查看端口netstat -ano:查看所有端口的占用情况netstat -aon|findstr “端口号”:查看指定端口的占用情况2、根据PID来查看对应的占用程序tasklist|findstr “PID”:根据指定的PID找到程序名3、结束程序taskkill /f /t /im 程序名:根据程序名结束程序...

2021-06-28 17:34:10 464

原创 Linux

Linux基本命令目录切换命令cd name:切换到该目录下name目录cd …:切换到上一层目录cd /:切换到系统根目录cd ~:切换到用户主目录cd -:切换到上一个所在目录目录的操作命令mkdir 目录名称:增加目录ls或ll:查看目录信息(ll 是ls -l的缩写,ll命令查看该目录下所有的目录和文件的详细信息)find 目录 参数:查找目录。如:列出当前目录及子目录下所有文件和文件夹: find .在/home目录下查找以.txt结尾的文件名:find /

2021-05-20 17:14:05 104

原创 Maven

maven基本概念mvn编译命令:mvn compilemvn打包命令:mvn packagemvn测试命令:mvn testmaven采用了约定的方式从指定项目结构中获取源码与资源文件进行编译打包主源码文件:$ {project}/src/main/java主资源文件:$ {project}/src/main/resources测试源码文件:$ {project}/src/test/java测试资源文件:$ {project}/src/test/resources必须是Test开头的类

2021-05-18 14:56:25 108

原创 Git

GIT体系概述Git和SVN的区别存储方式不一样Git将内容按元数据方式存储类似k/v数据库,而SVN是按文件(新版SVN已改成元数据存储)使用方式不一样从本地把文件推送远程服务,SVN只需要commit而Git需要add、commit、push三个步骤。管理方式不一样Git是一个分布式的版本管理系统,而SVN是一个远程集中式的管理系统Git核心命令使用本地初始化Git仓库:git clone <远程仓库地址>当前目录初始化为git本地仓库:git init

2021-05-17 16:56:38 55

原创 synchronize&Lock

synchronizesynchronize内置锁是一种对象锁(锁的是对象而非引用),作用粒度是对象,可以用来实现对临界资源的同步互斥访问,是可以重入的。加锁的方式同步实例方法,锁的是当前对象同步类方法,锁的是当前类对象同步代码块,锁的是括号里的对象synchronize底层原理synchronized是基于JVM内置锁实现,通过内部对象Monitor(监视器锁)实现,基于进入与退出Monitor对象实现方法与代码块同步,监视器锁的实现依赖底层操作系统的Mutex lock(互斥锁)实现

2021-05-07 16:19:29 91

原创 Redis面试题

因为Redis的数据都存储在内存中,所有的运算都是内存级别的运算,单线程避免了多线程的切换导致的性能损耗问题(正是因为Redis是单线程,所以要小心使用Redis指令,对于那些耗时的指令,一定要谨慎使用,一不小心就可能会导致Redis卡顿)。AOF在重写时,会将重写这一刻之前的内存做快照处理,并将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件(appendonly.aof),Redis在重启的时候,会先加载RDB的内容,然后再执行存放的AOF命令。

2021-05-07 16:18:46 16

原创 定时任务&定时线程池

ScheduledThreadPoolExecutor用来处理延时任务或定时任务接收SchduledFutureTask类型的任务,是线程池调度任务的最小单位,有三种提交任务的方式:1、schedule2、scheduleAtFixedRate3、scheduleWithFixedDelay采用DelayQueue存储等待的任务,DelayQueue是一个无界队列,DelayQueue内部封装了一个PriorityQueue,它会根据time的先后时间排序,若time相同则根据sequence

2021-05-07 11:51:57 323

原创 Atomic&Unsafe

处理器如何实现原子操作处理器会自动保证基本内存操作的原子性。使用总线锁保证原子性,总线锁就是使用处理器提供的一个LOCK信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占使用共享内存。使用缓存锁保证原子性在同一时刻我们只需保证对某个内存地址的操作是原子性即可,但总线锁定把CPU和内存之间通信锁住了,这使得锁定期间,其他处理器不能操作其它内存地址的数据,所以总线锁定的开销比较大,最近的处理器在某些场合下使用缓存锁定代替总线锁定的方式来进行优化。缓存锁定就是如果缓

2021-05-03 13:08:32 63

原创 Tools&CountDownLatch&Semaphore

SemaphoreSemaphore是信号量的意思,可以控制访问特定资源的线程数目,底层依赖AQS的状态State。用于资源访问,服务限流(Hystrix里限流就有基于信号量的方式)public Semaphore(int permits)public Semaphore(int permits, boolean fair)permits表示许可线程的数量fair表示公平性,如果设置为true,下次会执行等待最久的线程acquire()方法表示阻塞并获取许可,每次只有在许可线程数量范围内

2021-05-02 21:13:57 46

原创 BlockingQueue

概要BolckingQueue可用于解决并发生产者-消费者问题,能保证任意时刻只有一个线程可以进行take或者put操作,并且BlockQueue提供了超时return null的机制。队列类型无限队列-几乎可以无限增长有限队列-定义了最大容量队列的数据结构通常使用链表或数组实现一般而言队列具备先进先出的特性,当然也有双端队列,优先级队列主要操作:入队(EnQueue)与出队(DeQueue)常见的4种阻塞队列:ArrayBlockingQueue由数组支持的有界队列Linked

2021-05-02 20:37:44 110

原创 MESI缓存一致性协议

CPU多级缓存一致性协议MESI多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致,不让系统数据混乱。这里就引出了一个一致性的协议MESI。MESI是指四种状态的首字母。每个Cache line(缓存行)有4个状态,可用两个bit表示,分别是:状态描述监听任务M修改该Cache line有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。缓存行必须时刻监听所有试图读取该缓存行相对主内存的操作,这种操作必须在缓存将该缓存行写会主内存并将状态变成S(共

2021-05-01 15:11:17 98

原创 Java内存模型&volatile

什么是Java内存模型Java内存模型是一种抽象的概念,它描述的是一组规则或规范,通过这组织规范定义了程序中各个变量的访问方式。

2021-05-01 14:06:29 134 1

原创 操作系统

冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后按地址把结果送到内存中去,接下来,在取出第二条指令,在控制器的指挥下完成规定操作。依次执行下去,直到遇到停止指令。程序和数据一样存储,按程序的编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作模型。计算机五大核心组成部分控制器,对程序规定的信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。运算

2021-04-30 13:59:30 215

原创 线程池

线程池线程池线程协程线程池线程线程是CPU调度的最小单位,线程模型分为KLT模型和ULT模型,Java线程与OS线程保持1:1的映射关系,也就是说一个java线程也会在操作系统里有一个对应的线程。协程(纤程,用户级线程),目的是为了追求最大力度的发挥硬件性能和提升软件的速度,协程基本原理是:在某个点挂起当前的任务,并且保存栈信息,去执行另一个任务;等完成或达到某个条件时,再还原原来的栈信息并继续执行(整个过程线程不需要上下文切换)。...

2021-04-30 12:43:15 50

原创 HashMap&ConcurrentHashMap

HashMap目录HashMap1.7:1.8:ConcurrentHashMap1.71.8CopyOnWrite1.7:数据结构:数组+链表put采用头插法在高并发的情况下,扩容可能会出现环链(类似于我们Java中的死锁),原因是因为只有e和next指针,扩容通过hash值计算(位运算)的转移方式1.8:数据结构:数组+链表+红黑树put采用尾插法在链表的长度大于8且HashMap容量大于等于64时链表转红黑树。否则优先扩容为什么是大于

2021-04-26 13:48:17 155

空空如也

空空如也

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

TA关注的人

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