自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MyBatis学习

一、Mybatis使用1、新建mybatis配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 导入数据库配置文件的信

2023-09-03 14:13:19 231

原创 Linux学习

linux入门

2022-11-26 17:18:48 969 1

原创 Nginx学习(一:启动与介绍)

nginx启动

2022-07-17 10:04:27 173

原创 ThreadLocal底层源码分析

ThreadLocal底层源码分析

2022-06-22 23:07:47 330

原创 ZooKeeper学习

一、概述:Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。工作机制Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,zookeeper就将负责通知已经在zookeeper上注册的那些观察者做出相应的反应。Zookeeper=文件系统特点1)Zookeeper: 一个领导者(Leader),多个跟随者(Follower)组成的集群。2)集群中

2022-02-08 17:33:30 1519

原创 LinkedBlockingQueue

一、LinkedBlockingQueue结构public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { /** * Linked list node class */ static class Node<E> { E ite

2021-12-13 21:07:39 428

原创 ConcurrentHashMap源码

一、ConcurrentHashMap常用方法1、computeIfAbsent(args1, args2):如果缺少一个key,则计算生成一个value,然后将 key,value放入map,如果存在,则会将上一次的值返回。二、jdk8中ConcurrentHashMap重要属性和方法 /** * 默认为 0 * 当初始化时,为-1 * 当扩容时,为-(1 + 扩容线程数) * 当初始化或扩容完成后,为下一次扩容的阈值大小 */ p

2021-12-12 12:06:25 258

原创 多线程学习(六)

一、StampedLock该类从JDK1.8 加入,是为了进一步优化读性能,它的特点是在使用读锁、写锁时必须配合【戳】使用。加解读锁long stamp = lock.readLock();lock.unlockRead(stamp);加解写锁long stamp = lock.writeLock();lock.unlockWrite(stamp);乐观读,StampedLock 支持 tryOptimisticRead()方法(乐观读),读取完毕后需要做一次戳校验,如果校验通过,表示这

2021-12-08 23:02:16 195

原创 ReentrantReadWriteLock原理

读写锁:ReentrantReadWriteLock当读操作远远高于写操作时,这时候使用 读写锁 让 读-读 可以并发,提高性能。类似于数据库中select … from … lock in share mode。使用举例:package com.concurrent.test;import java.util.concurrent.locks.ReentrantReadWriteLock;public class TestReadWriteLock { public static

2021-12-05 10:56:54 398

原创 多线程学习(五)

一、AQS全称是AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架,特点是:用state属性表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁1、getState-获取state状态;2、setState-设置state状态;3、compareAndSetState-cas机制设置state状态;4、独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问资源;5、提供了基于FIFO的等待队列,类似于Mon

2021-12-01 22:03:38 361

原创 多线程学习(四)

一、Java线程池的结构二、线程池状态ThreadPoolExecutor使用int的高3位来表示线程池状态,低29位表示线程数量。线程池的各个状态及说明如下图:从数字上比较(最高位为符号位):terminated > tidying > stop > shutdown > Running// ctl,用于表示线程池状态及线程数量private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)

2021-11-24 22:42:22 309

原创 实现线程池

package com.concurrent.test;import java.util.ArrayDeque;import java.util.Deque;import java.util.HashSet;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;public class T

2021-11-16 23:45:17 69

原创 多线程学习(三)

一、Java内存模型JMM即Java Memory Model, 它定义了主存、工作内存抽象概念 , 底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。JMM体现在一下方面1、原子性-保证指令不会受到线程上下文切换的影响;2、可见性-保证指令不会收cpu缓存的影响;3、有序性-保证指令不会受cpu指令并行优化的影响;注意:synchronized既能保证原子性又能保证可见性,但缺点是synchronized是属于重量级操作,性能相对更低;二、同步模式之BalkingBalking(犹

2021-11-07 17:41:28 165

原创 多线程学习(二)

一、wait/notify原理1、锁的拥有者发现条件不满足,调用wait方法,进入WaitSet中变为Wating状态;2、blocked与waiting的线程都处于阻塞状态,不占用cpu时间片;3、blocked线程会在owner线程释放锁时唤醒;4、waiting线程会在owner线程调用notify或notifyAll时唤醒,但唤醒后并不是立即获得锁,仍然需要进入EntryList中重新竞争;注意:wait、notify、notifyAll都属于Object对象的方法,必须获得此对象的锁,

2021-10-30 23:34:40 231 1

原创 synchronized实现原理详解

Java对象头:若对象为数组,则虚拟机使用3个字宽存储对象头,否则,使用2个字存储对象头(64位虚拟机1字为8字节,64bit; 32虚拟机1字为4字节,32bit),具体如下图2-2所示:其中Mark Word中存储着对象的HashCode、分代年龄、锁标记位。32位虚拟机的Mark Word如下图2-3所示(默认情况下):运行期间,Mark Word中存储的数据可能会变化为下面四种:注意:当要使用到对象的hashCode时,才会生成对象的hash码,这时因为要存储hashCode,对象的偏

2021-10-24 12:19:33 96

原创 Java多线程学习(1)

一、进程和线程进程是资源分配的最小单位,可以视为程序的一个实例,进程是用来加载指令,管理内存、管理IO的。一个进程可以分为多个线程,一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给cpu执行,java中,线程作为最小调度单位,进程作为资源分配的最小单位。线程上下文切换场景:1、线程cpu时间片用完;2、垃圾回收;3、有更高优先级线程需要运行;4、线程自动调用sleep, yield, wait, join, park, synchronized, lock等方法;当contec

2021-10-13 23:38:05 86

转载 Redis缓存管理策略

转载地址

2021-10-13 22:21:43 109

原创 Redis持久化原理

一、RDB原理: redis数据保存在内存中,为避免数据丢失,将某个时间节点的数据快照保存至一个二进制文件(经过压缩),通过该文件可以还原生成RDB文件时的数据库状态。重写时机:1、手动执行:手动调用save命令,bgsave命令;2、自动间隔性保存:通过save选项配置的多个保存条件,只要其中任意一个条件满足,服务器就会执行bgsave命令;默认:save 900 1save 300 10save 60 10000当redis服务器启动时,会通过配置文件或传入启动参数的方式读取

2021-10-13 22:00:59 114

原创 Redis常见数据类型

一、Redis协议RESP(redis序列化协议)字符串协议初衷:1、实现简单2、快速被计算机解析3、简单的可以能被人工解析Redis协议将传输的数据分为5种最小单元类型1、单元结束时统一加上回车换行符 CRLF="\r\n";2、+ 单行字符串以‘+’开头;3、$ 多行字符串以‘$’开头,后跟字符串长度;4、: 整数值以‘:’开头,后跟整数的字符串形式;5、- 错误消息以‘-’开头;6、* 数组以‘*’开头,后跟数组长度;Redis在TCP端口6379上监听到来的连接,客户端连接

2021-10-08 22:39:58 198

原创 Redis常见问题

缓存穿透:现象:应用服务器压力变大了;redis命中率降低;一直查询数据库;原因:1、redis查询不到数据2、出现非正常url访问解决方案:1、对空值缓存:如果存在一个查询返回的数据为空(不管数据是否存在),我们仍然把这个空结果(null)进行缓存,设置空结果的过期时间会很短,最长不超过5分钟;2、设置可访问的名单(白名单):使用bitMaps类型定义一个可以访问的名单,名单id作为bitmaps的偏移量,每次访问和bitmap里面的id做比较,如果访问id不到bitmaps里面

2021-10-03 21:40:48 625

原创 Redis常见模式

主从复制好处:读写分离,性能扩展;容灾快速恢复(一台从机宕掉,切换其他从机);一主二从:当从服务器挂掉,重新启动时,(从机)切换为独立主机,重新设置为从机,则从头开始复制主机数据;主服务器挂掉,从服务器不变,主服务器恢复,还为主服务器;主从复制原理:(全量复制+增量复制)1、当从服务器连接主服务器后,从服务器向主服务器发送进行数据 同步消息;2、主服务器接到从服务器发送过来的同步消息,把主服务器数据进行持久化,rdb文件,把rdb文件发送从服务器,从服务器拿到rdb进行读取;3、每次主

2021-10-03 21:23:09 107

原创 Redis持久化

Redis持久化分为两种方式:RDB(默认)AOF若两者同时开启,Redis启动时系统默认取值为AOF。RDB:在指定的时间间隔内将内存中的数据集快照写入磁盘。 Redis会单独创建一个子进程来进行持久化,会先将数据写入一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要进行大规模数据的恢复。且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加高效。RDB的缺点是最后一次持久化后的

2021-10-03 01:21:41 62

原创 Redis事务

Redis不支持ACID;Redis事务分为两大阶段:multi(组队阶段)和exec(执行阶段),放弃执行可使用discard,若在组队阶段失败,则后面执行阶段所有操作将会一块失败,若组队阶段全部成功,则后面执行阶段只会部分失败(造成不一致);在执行multi之前,可以先执行watch(乐观锁方式),监控一个或多个key,如果在事务执行之前监视的key被其他命令所改动,事务将被打断(类似准备阶段出现失败,后面执行阶段将会一起失败);Redis事务 三特性:单独隔离操作(事务中所..

2021-10-03 01:05:06 82

原创 spring中bean的生命周期

单例bean(容器启动)构造器 --> postProcessBeforeInitialization(后置处理器的before方法)–>init-method(初始化方法)–>postProcessAfterInitialization(后置处理器的after方法)–>容器关闭调用destroy方法(销毁方法);多实例bean(容器启动)构造器 --> postProcessBeforeInitialization(后置处理器的before方法)–>init-m.

2021-06-27 16:59:40 38

原创 2021-06-27

IOC中创建bean实例的几种方式spring配置文件配置bean(选择使用constract-args/properties);spring配置文件中配置自定义的静态工厂/实例工厂 并指定 factory-method,获取该工厂实例时则会创建工厂bean;实现BeanFactory<?>接口,并将实现后的类注册到spring容器中,从容器中获取该实例则会调用getObject()方法返回需要的bean实例;...

2021-06-27 16:40:14 46

原创 linux软链接与硬链接文件

软链接特征:类似Windows快捷方式1、 lrwxrwxrwx:软链接文件权限都为rwxrwxrwx2、文件大小-只是符号链接3、/tmp/issue.soft->/etc/issue(箭头指向源文件)硬链接特征:1、 拷贝 cp -p + 同步更新2、通过i节点识别3、不能跨分区4、不能只对目录使用建立链接:文件处理命令:ln命令名称:ln命令英文原意:link命令所在路径:/bin/ln执行权限:所有用户语法:ln -s[原文件] [目标文件] ,-s:创建软链接

2020-11-29 22:24:21 77

原创 linux中ls命令详解

一、ls命令介绍ls命令英文原意:list命令所在路径:/bin/ls执行权限:所有用户功能描述:显示目录文件语法:ls 选项[-ald][文件或目录]-a 显示所有文件(all, linux中隐藏文件以"."开头)-l 详细信息显示(long)-d 查看目录属性(diretory)-i 查看文件iNode号(每一个文件特殊的标识)-h 信息的人性化显示(human)二、ls -lh后显示信息详解显示的信息从左到右依次代表文件权限:首位分为“-:文件”,“d:目录”

2020-11-29 16:07:17 17347

转载 linux各个目录的作用

/bin:存放系统命令的目录,普通用户和超级用户都可以执行。不过放在/bin下的命令在单用户模式也可以执行。/sbin/:保存和系统环境相关的命令,只有超级用户可以使用这些命令进行系统环境设置,但是有的写命令可以允许普通用户查看。/usr/sbin/:存放根文件系统下不必要的系统管理命令,例如多数服务程序。只有超级用户可以使用。大家其实可以注意到linux的系统,在所有的“sbin”目录中保存的命令只有超级用户可以使用,“bin”目录中保存的命令所有用户都可以使用(superBinary)。/boo.

2020-11-29 10:57:53 654

原创 系统分区

系统分区概念分区类型linux系统分区概念系统分区又称为磁盘分区,它是使用分区编辑器在磁盘上划分几个逻辑部分,磁盘被划分为多个分区后,不同类的目录和文件就可以存储进不同的分区。分区类型分区按照类型可以分为以下三种:主分区 :最多只能有四个;扩展分区 :最多只能有一个且主分区加扩展分区最多有四个,另外,扩展分区不能写入数据、不能格式化,只能包含逻辑分区;逻辑分区:可正确的写入数据和格式化(永远从第5开始) ;(格式化:又称为逻辑格式化,它是指根据用户选定的文件系统,在磁盘的特定区域写入特定的

2020-11-28 18:36:23 1103

原创 J2EE请求响应乱码问题

J2EE请求响应乱码问题乱码分类1、请求乱码(浏览器发送给服务器的数据,服务器收到数据解析出来乱码。)2、响应乱码(服务器 发送给浏览器的数据,浏览器收到,解析乱码。)乱码分类1、请求乱码(浏览器发送给服务器的数据,服务器收到数据解析出来乱码。)1.1 GET请求乱码解决原理:String un = request.getParameter("***"); un = new Strin...

2020-04-29 18:35:14 133

原创 html中用class引入样式失效

今天,在html中用class引入样式后,访问页面样式不生效,打开开发者模式,发现class内容为空,试着清空浏览器缓存,样式生效。

2019-07-24 23:05:53 3108

原创 使用iframe内嵌网页,修改信息后当前页面不刷新

之前遇到在jsp页面修改信息后,为了使结果刷新回当前页面,一般使用重定向即可实现;例(“redirect:/allbooks.html”),但是今天又遇到这个问题,刚开始一下又想到了重定向,试验了以后发现不行(重定向不能传递参数,这次需要传递一个参数),接着又想到能不能在请求成功后,使用jQuery再次请求一下,把数据库更新后的数据刷新回来,又不行(这次是iframe内嵌网页),于是在请求成功后在...

2019-07-08 00:02:21 3247

原创 ssm实现分页

之前实现分页,都是写好后端就行,今天要自己全面实现一个分页,不知从何下手,也查了很多,但是基本都是说什么重构框架,自己写sql,计算前一页,前端 js 实现之类的,看的是云里雾里,后来也成功实现了分页,在此记录一下,希望能对大家有帮助。一、maven pom文件中导入依赖(若没有使用响应的maven构建项目,导入相应的jar包即可)<dependency> <gro...

2019-07-05 00:06:27 2271 2

原创 Mybatis逆向工程数据库中类型为text的字段封装失败

今天,使用mybatis逆向工程生成的mapper查询数据库,发现其他字段都封装成功,但是有一个字段始终为null, 检查数据库,发现该字段类型为 mediumtext ,而我使用的查询方法是 selectByExample(example);查阅资料发现,mybatis对text类型特别进行了处理,应该使用selectByExampleWithBLOBs或者updateByExampleWit...

2019-07-04 00:08:43 430

原创 Java中HashSet之toArray()方法

今天无意间发现一个问题,那就是使用HashSet中toArray()方法,强制类型转换时报出java.lang.ClassCastException, 具体问题代码描述如下:public static void main(String[] args) { HashSet<String> h1 = new HashSet<>(); h1.add("dsfs");...

2019-06-20 21:46:43 6410

原创 MyBatis底层源码解析

MyBatis底层源码解析演示代码:@Test public void test() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession(); try {...

2019-05-23 13:03:57 1017

原创 Java垃圾回收器

一.四种主要的垃圾收集器1、串行垃圾回收器(Serial)它为单线程环境设计且只使用一个线程进行垃圾回收,会暂停所有用户线程。所以不适合服务器环境2、并行垃圾回收器(paraller)多个垃圾收集线程并行工作,此时用户线程是暂停的,适用于科学计算/大数据处理首台处理等弱交互场景3、并发垃圾回收器(CMS)用户线程和垃圾收集线程同时执行(不一定是并行,可能交替执行),不需要停顿用户线程...

2019-05-14 00:20:25 253

原创 Java中常见的“OOM”异常

一.异常整体结构1. java.lang.OutOfMemoryError: Java heap space代码演示:/** * JVM配置:-Xms20m -Xmx20m */public class JavaHeapspaceDemo { public static void main(String[] args) { // java.lang.OutOf...

2019-05-09 18:31:48 1305

转载 linux下'ps -ef|grep java'命令及查询结果的解析

经常使用Linux的朋友,经常可能会使用ps -ef |grep+服务名来对于查询服务是否正常运行,通常情况下我们知道,如果只是蹦出一条信息,如下面所示,基本就可以知道这个服务是没有正常运行的,这是因为ps -ef是显示所有进程的消息,包括vncserver@:1.service和grep vncserver@:1.service这两个甚至包括ps -ef本身,而grep是查找输出包含想要的字...

2019-05-09 09:54:02 8672

原创 Java之‘引用’

@Java之‘引用’整体架构一、强引用(默认支持模式)当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表示对象还"活着",垃圾回收器不会碰这种对象。在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它处...

2019-05-08 16:23:21 115

空空如也

空空如也

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

TA关注的人

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