自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 问答 (1)
  • 收藏
  • 关注

原创 分布式缓存 Redis

一. 缓存缓存是⼀个⾼速数据交换的存储器,使⽤它可以快速的访问和操作数据。相⽐于数据库⽽⾔,缓存的操作性能更⾼,缓存性能⾼的主要原因有以下⼏个:缓存⼀般都是 key-value 查询数据的,因为不像数据库⼀样还有查询的条件等因素,所以查询的性能 ⼀般会⽐数据库⾼;缓存的数据是存储在内存中的,⽽数据库的数据是存储在磁盘中的,因为内存的操作性能远远⼤于磁 盘,因此缓存的查询效率会⾼很多;缓存更容易做分布式部署(当⼀台服务器变成多台相连的服务器集群),⽽数据库⼀般⽐较难实现分布 式部署,因此缓存的负载

2020-08-31 22:41:56 281

原创 初识Spring

1.Bean容器: 提供管理java对象的容器.管理对象定义维护,对象的创建,对象之间的关系等等,开发人员只需要调用容器的context即可获得所需要的对象实例,而不再需要在程序中通过New关键字去创建2.IoC(Inversion of Control 控制反转)(1) 降低代码之间的耦合度(2)在程序开发中,实例的创建不再由调用者管理,而有Spring容器创建 ,对象的生命周期不再由程序管理,而是交给了Spring的Bean容器, 控制权发生了反转.3.依赖注入 DI(Dependency I

2020-08-11 12:22:00 205

原创 Lock体系

synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用;而Lock则必须要用户去手动释放锁,用**unlock()**方法释放锁,如果没有主动释放锁,就有可能导致出现死锁现象。原理:AQS–独占锁防止死锁1.AbstractQueuedSynchronizer(AQS) 队列式同步器作用:处理线程 锁的获取与释放.原理:双端队列+CAS.3.通信机制—ConditionObject的

2020-07-07 17:06:28 355

原创 Callable实现多线程

线程执行完成后会返回一个结果.Future可以拿到异步执行任务的返回值通过 get() 方法可以阻塞当前线程,并获取对象的返回值.FutureTask实现了两个接口,Runnable和Future,所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值,...

2020-07-06 18:28:05 197

原创 synchronized底层原理 及 优化方案

1.对象锁 (monitor) 机制执行同步代码块时首先要执行 monitorenter 指令,退出同步代码块时要执行 monitorexit 指令.所以 使用Synchronized进行同步,其关键就是必须要对对象的监视器monitor进行获取,当线程获取monitor后才能继续往下执行,否则就只能等待。而这个获取的过程是互斥的,即同一时刻只有一个线程能够获取到monitor。一个monitorenter指令以及多个monitorexit指令。确保所获得的锁在正常执行路径,以及异常执行路径上都能够被

2020-07-05 11:52:34 213

原创 CAS机制

1.1 乐观锁 vs 悲观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。1.2 CAScompare and swap :比较并交换多个线程都拷贝主内存的值到自己的工作内存,当修改后写回主内存时,会和原来拷贝时的进行

2020-07-04 20:43:17 193

原创 Linux基本指令

lsls [选项] [目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件-l 列出文件的详细信息。-r 对目录反向排序。-t 以时间排序。-R 列出所有子目录下的文件。(递归)2 pwd命令语法: pwd 功能:显示用户当前所在的目录3

2020-06-28 15:21:46 225

原创 JVM之 GC(垃圾回收)

当进程启动后会创建垃圾回收线程,来回收内存中无用的对象1.垃圾回收的时机(1)System.gc()显示的调用此方法, 建议JVM进行fgc(full gc),虽然只是建议而非一定,但多半都会进行fgc, 增加fgc的频率,所以一般不用此方法,而是让JVM自己管理它的内存(2)jvm 垃圾回收机制决定创建对象需要分配内存, 当内存不足时 出发GC;finalize(),java.lang.Object中的方法,当JVM发现不在有引用指向某对象时,垃圾收集器会在对象上调用该方法2.垃圾回收策略—

2020-06-22 15:35:24 333

原创 java的类加载过程

具体步骤:载入,验证,准备,解析,初始化1.载入:JVM在该阶段把数据源(.class文件,jar包,网络等)转换为二进制字节流,并生成一个代表该类的java.lang.Class对象2.验证jvm对字节流文件进行检验(确保二进制字节流格式符合预期(比如说是否以 cafe bene 开头)。是否所有方法都遵守访问控制关键字的限定。方法调用的参数个数和类型是否正确。确保变量在使用之前被正确初始化了。检查变量是否被赋予恰当类型的值。),看它是否符合规范3.准备阶段对类变量(静态变量, .

2020-06-17 15:30:02 386 3

原创 jar和maven

1.关于jar包概念:基于zip文件格式的文件 ,把java生成的类文件,资源文件,管理文件以特定的格式打包成一个独立的文件,便于程序的发布和网络下载.2.mavenApache Maven 是一种用于软件项目管理的工具,基于 Project Object Model(POM),用来管理项目的构建,汇报及文档生成等功能。maven 的目标是完成项目构建解决的一切繁琐事宜。提供一个标准的项目工程目录提供项目描述提供强大的版本管理工具可以分阶段的进行构建过程提供了丰富的插件库使用(1)

2020-06-16 15:12:54 433

原创 基于http协议 的cookie 和session

会话:这里指web系统的会话,指用户登录以后, 在退出以前都是一个会话, 退出条件:注销登录或超出系统设置的会话时间.Http 是一个无状态协议, 就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。这种无状态的的好处是快速。坏处是需要进行用户状态保持的场景时[比如,登陆状态下进行页面跳转,或者用户信息多页面共享等场景],必须使用一些方式或者手段比如: session 和 cookiecookie1.作用:客户端本地保存用户信息, 之后每次发起http请求时,cookie就会自动携带

2020-06-15 15:31:55 253

原创 HTTP协议 原理

1.什么是HTTP协议“超文本传输协议”:对客户端和服务器端之间数据传输的格式规范.是应用层协议.2.认识URL3.HTTP格式(组成)请求报文:(1)请求行:请求方法,URL,版本协议;(2)请求报头,(3)请求正文响应报文:(1)状态行:http版本,状态码,状态原因短语(2)响应报头;(3)响应正文.4.请求方式GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用

2020-06-14 19:07:44 328

原创 TCP协议和UDP协议 的特点和对比

都是传输层的协议一 .UDP协议1.UDP的特点(1)无连接:知道对端的IP和端口号就可以了, 不需要建立任何连接就可以传输数据(2)不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;(3)面向数据报:不能灵活的控制数据传输的次数和数量. 应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;如: 用UDP传输100个字节的数据:如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调

2020-06-13 20:25:11 2950

原创 网络传输--集线器,交换机,路由器(局域网/广域网传输)

1.IP地址和MAC地址IP地址在IP协议中, 用来标识网络中不同主机的地址,作用在网络层;IP协议有两个版本, IPv4和IPv6. 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指IPv4对于IPv4来说, IP地址是一个4字节, 32位的整数;我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 范围是 0 - 255;MAC地址MAC地址用来识别数据链路层中相连的节点;长度为48位, 及6个字节

2020-06-12 15:07:01 1040 1

原创 网络原理初识----OSI七层模型 & TCP/IP五层(或四层)模型

一 .OSI七层模型OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯.二. T

2020-06-11 12:16:43 438

原创 java中File(文件)操作类

1.理解文件文件,简单的可以理解成,在外设硬盘上面保存数据的一种方式,在windows操作中,经常在硬盘上创建的各种.txt, .doc, .exe, .java, .lib, .mp3等等,都可以称之为文件文件一共可以由两部分构成:属性(文件大小,文件名,文件类型等)+内容(就是文件里面放的是什么)学习JavaIO ,就是学习对文件的属性和内容进行操作,而实际写入或者读取的过程,就是IO2.File类在 java.io 包之中,用 File 类来对文件进行操作(创建、删除、取得信息等)ja

2020-06-10 13:04:43 241

原创 java I/O_序列化与反序列化

1.什么是序列化, 反序列化序列化:把对象转换为字节序列的过程反序列化:把字节序列恢复成对象的过程有时候我们想把一些信息持久化保存起来,那么序列化的意思就是把内存里面的这些对象给变成一连串的字节描述的过程。 常见的就是变成文件。但是问题来了,我就算不序列化,也可以保存到文件当中。有什么问题吗?答:序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列后才能进行远程通信,即在网络上传送对象的字节序列

2020-06-09 13:52:08 174

原创 java I/O_字节流和字符流

1.概念在 Java中所有数据都是使用流读写的。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,**流的本质是数据传输,**根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。1).按照流向分:输入流;输出流2).按照处理数据的单位分:字节流(8位的字节);字符流(16位的字节)2.何为输入和输出(输出设备和输入设备都是站在内存的角度来看的)输入就是将数据从各种输入设备(包括文件、键盘等)中读取到内存中。输出则正好相反,是将数据写入到

2020-06-08 17:30:02 258

原创 java多线程----定时器

1.定时任务线程ScheduledExecutorServiceclass MyScheduledThreadPool { public static void main(String[] args) { //给定大小的线程数 ScheduledExecutorService executorService = Executors.newScheduledThreadPool(10); System.out.println(new Date());

2020-06-06 22:23:57 168

原创 java多线程案例----阻塞式队列

阻塞队列 当队列里面没有值时,会阻塞直到有值输入。当队列满的时候,会阻塞输入,直到队列有值输出一,自己实现阻塞队列生产者消费者模型生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。public class MyB

2020-06-05 14:57:13 255

原创 单例模式---饿汉模式和懒汉模式

单例模式就是保证类在内存中只有一个对象1)控制类的创建,不让其他类创建本类的对象,即需要设置private属性2)在本类中定义一个本类的对象public class test { public static void main(String[] args) { //分别实例化对象 s1,s2 Singleton s1 = Singleton.getInstance(); Singleton s2 = Singleton.getInstance(); System.out.pri

2020-06-04 16:45:15 292 2

原创 线程--中断(interruput),等待线程结束(join),休眠(sleep)

1.线程中断(1)通过thread 对象调用 interrupt 方法通知线程中断.(2). thread 收到通知的方式有两种:如果线程调用了 wait/join/sleep 等方法而阻塞挂起,则以 InterruptedException 异常的形式通知,清除中断标志否则,只是内部的一个中断标志被设置,thread 可以通过(设置中断标志:true; 清除中断标志:false)①. Thread.interrupted() 判断当前线程的中断标志被设置,清除中断标志② Thread.c

2020-06-03 17:56:41 419

原创 java多线程-----通信(wait,notify)

多个线程并发执行时,CPU是随即切换线程的,为了满足一定要求,就需要使用线程通信.1.wait方法作用:使当前线程停止运行,处于等待(阻塞)状态,并释放其持有的对象锁,wait方法是Object类的方法,调用wait方法,使线程停止在wait()代码行,直到接到通知或被中断为止.2.notify和notifyAll其他线程调用此对象的 notify 或 notifyAll ,则唤醒当前对象上等待的线程继续运行,即 重新竞争对象锁.notify:随即通知一个等待的线程,notifAll:通知所有

2020-06-02 14:53:16 150

原创 java 线程池

线程池最大的好处就是减少线程每次启动和销毁的损耗.

2020-05-31 10:13:02 161

原创 解决线程不安全问题(synchronized和volatile)

1.synchronized.当线程释放锁时,JMM会把该线程对应的工作内存中的共享变量刷新到主内存中.当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从主内存中读取共享变量synchronized用的锁是存在Java对象头里的。解决多个线程访问时出现互相干扰的问题,被synchronized修饰的方法或代码块,在同一时刻,只会有一个 获得锁 的线程执行操作,其他线程都处于阻塞状态.具体:1.修饰实例方法调用实例方法就要创建一个对应的对象,锁的也就

2020-05-22 13:55:05 311

原创 线程不安全原因(原子性,可见性,代码顺序性)

概念线程安全:多线程访问时,采用加锁机制,一个线程访问一个数据时,进行保护,其他线程不得进行访问该数据 知道该线程读取完成.不会出现数据不一致或数据污染. 通俗来说: 多线程环境下运行的程序结果符合我们的预期要求,即 在单线程下的结果.那么这个程序就是线程安全的.线程不安全:不提供数据保护,多个线程先后对数据进行更改会出现脏数据.影响线程不安全的原因(1)原子性操作不可分割性,比如:a++操作是分为3步的①读取a的值②a的值+1③将更新后的值赋予a. 如果一个线程正在执行时,中途插入了其他线程,

2020-05-20 16:49:08 387

原创 线程基本概念[java]

线程是系统调度的最小单位线程可以理解成是在进程中独立运行的子任务。举例说明:比如QQ.exe运行时就会有很多的子任务在同时运行。比如,好友视频线程、下载文件线程、传输数据线程、发送表情线程等。这些不同的任务或者说功能都可以同时运行,其中每一个任务完全可以理解成是“线程”在工作,传文件、听音乐、发送图片表情等功能都有对应的线程在运行。1.线程的创建(1)继承Thread;(2)实现Runnable接口;通过实现 Runnable 接口,并且调用 Thread 的构造方法时将 Runnable 对象作

2020-05-18 16:50:45 190

原创 进程详细内容

1.进程的初步认识.对于操作系统来说,一个任务就是一个进程.课本概念:程序的一个执行实例,正在执行的程序等.内核观点:担当分配系统资源(CPU的时间,内存)的实体,

2020-05-16 10:52:01 413

原创 事务,分布式事务如何实现

1.事务该如何实现?事务的实现基于数据库存储引擎,事务的隔离性通过加锁实现; 一致性,原子性,持久性通过事务日志实现.(存储引擎:存储文件的各种不同的技术和相关功能称为数据库存储引擎; 事务日志: 不同于数据库文件的文件,数据的更改都存储在事务日志里.)2.分布式系统如何实现事务?分布式事务用于在分布式系统中保证不同节点的数据的一致性 ;主要是XA分布式协议,主要包含两阶段提交(2PC)和三阶段提交(3PC);XA协议包含两个角色:事务协调者和事务参与者;2PC 过程: 第一阶段 事务协调者

2020-05-09 22:15:23 139

原创 数据库----事务

1.概念事务是指逻辑上的一组操作,组成该操作的各个单元,要么全部执行成功,要么全部执行失败; 只有全部执行成功后,事务才会提交, 若有一个单元执行失败,那么所有数据都会通过回滚自动恢复.(**回滚机制:**当事务内部有一个操作执行失败后,那么将会撤销所有已完成的更新操作)2.事务的四大特性(1)原子性–即不可分割性,事务里的操作要么全执行,要么都不执行.(2)一致性(可串性)–事务执行前后...

2020-05-08 13:41:17 137

原创 MySQL--索引

1.概念索引是一种能帮助 MySQL 提高查询效率的数据结构。索引是一种特殊的文件,包含着数据表里所有记录的引用指针,好比是书的目录,可以提高查询效率.2.应用场景(满足的条件)(1)数据量大,而且经常 条件查询这些列;(2)表的插入操作,及这些列的修改操作的 频率较低;(3)索引会占用磁盘空间,即需要有充足的空间.满足这些条件时可以考虑创建索引,以提高查询效率.3.使用创建主...

2020-05-07 15:16:52 116

原创 MySQL表的增删改查(基础)

1.新增(Create)创建一个货物表(1)全列 数据插入 insert into 表名 values(插入的数据)(2)指定列 数据插入 insert into 表名 (指定的列名) values(插入的数据)2.查询 关键字select(1)全列查询:[(2)指定列查询 select 列名 from 表名;(3)去重 distinct;(4)条件查询 where...

2020-04-26 18:08:33 175

原创 排序 (快排和归并)

一.快速排序//快速排序; public void quickSort(int[] arr){ //用一个辅助方法完成递归; quickHelp(arr,0,arr.length-1); } private void quickHelp(int[] arr,int left,int right){ if(left>=r...

2020-04-12 17:57:56 155

原创 排序(一)

一.插入排序整个区间分为1.有序区间2.无序区间,每次选择无序区间的第一个元素插入到有序区间的合适位置 //插入排序; public void inertionSort(int[] arr){ //[0,y)已排序区间;[y,size)待排序区间; for(int y=1;y<arr.length;y++){ int...

2020-04-10 13:22:44 109

原创 优先级队列(堆)

一,概念二,下标关系1.已知父节点 的下标为p;左子树下标:p2+1;右子树下标:p2+2;2.已知孩子节点下标为c(不分左右)父节点下标:(c-1)/2;三.操作—向下调整前提:左右子树必须是堆;以小堆为例建堆以大堆为例;...

2020-04-06 15:07:34 103

原创 初识二叉树!四种常见遍历方法

1.概念 : 每个节点的度不超过2,最多只有左子树和右子.2.二叉树的基本形态3.二叉树的遍历----前中后序(根节点是什么时候访问的,就是什么遍历)1)前序遍历(先序遍历) :先访问根节点–>左子树–>右子树;代码:2)中序遍历:先遍历左子树—>再访问根节点—>右子树代码:3)后序遍历:先遍历左子树—>右子树—>最后访问根节点;代码...

2020-03-30 14:44:46 483

原创 List

import java.util.ArrayList;import java.util.Collections;import java.util.List;class Card{ private String rank; private String suit; public Card(String rank, String suit) { thi...

2020-03-26 14:42:53 252

原创 多态

public class Shape {public void draw(){}}class Cycle extends Shape{@Overridepublic void draw(){System.out.println(“o”);}}class Rect extends Shape{@Overridepublic void draw(){System.out.p...

2020-03-05 11:59:25 155

原创 java给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。package Test;public class D2 { private ListNode getIntersect(ListNode head){ ListNode tortoise = head; ListNode hare = head; while (hare !...

2020-01-27 22:08:08 353

原创 java环形链表

给定一个链表,判断链表中是否有环。 public boolean hasCycle(ListNode head){ if(head==null||head.next==null){ return false; } ListNode slow=head; ListNode fast=head.next; ...

2020-01-27 20:51:53 369

空空如也

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

TA关注的人

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