自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HashMap的实现原理

HashMap的原理(JDK 1.7)HashMap是由数组+链表的形式实现的,集成了数组的获取元素方便以及链表的插入元素方便的优点,初试数组长度设置的是16位。其中HashCode代表了在hash表中的位置。并且在HashMap中有一个Hash算法 (使用异或运算) 使得链表的位置在数组中尽量均匀分布,来减少 哈希碰撞 的几率。因为计算方式使用的是位与运算,为了防止链表的位置可能多次出现在数组的第一个位置,尽量将HashMap的长度保持为2的次方数——当然在HashMap中也有相应的处理(tableS

2021-01-10 17:42:51 2206

原创 CAS(Compare and swap)

原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将整个操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征。CAS(Compare and swap)Compare and swap 比较和交换。属于硬件同步原语, 处理器提供了基本内存操作的原子性保证。CAS操作需要输入两个数值,一个是旧值A(期望操作前的值)和一个新值B,在操作期间先对旧值进行比较,若没有发生变化,才交换成新值,发生了变化则不变换。JAVA中的.

2020-11-30 09:33:13 158

原创 ReadWriteLock(读写锁)

在读写锁中,初试状态下owner为null,writecount和readwrite都为0。当写操作去争抢锁的时候,先去判断readcount是否为0,为0则再去判断writecount;读操作的时候,先去判断writecount是否为0,为0则直接去进行读操作,readcount加1;如果锁已经被占有,则进入等待队列。概念维护一对关联锁,一个只用于读操作,一个只用于写操作;读锁可以由多个读线程同时持有,写锁是排他的。同一时间,两把锁不能被不同线程持有。适用场景适合读取操作多于写入操作的场景,.

2021-01-10 15:11:51 194

原创 ReentrantLock(可重入锁)

有t1,t2,t3,t4四个线程争抢锁,首先要判断count是不是为0,如果为0就会同时对count进行CAS操作,所以只会有一个线程会成功,假设是t3线程成功,那么其他线程就会进入waiters等待,并且owner会指向t3。当t3线程释放锁,count变为0,owner被清空,那么t1就会尝试去修改count。由上图中源码可见,ReentrantLock可以自己设置是否为公平锁。...

2021-01-10 15:00:51 118

原创 Lock API

Locks包 类层次结构lock接口的方法和描述方法签名描述void lock();获取锁(不死不休)boolean trylock();获取锁(浅尝辄止)boolean tryLock(long time,TimeUnit unit) throws InterruptedException;获取锁(过时不候)void lockInterruptibly() throws InterruptedException;获取锁(任人摆布)void unlo

2021-01-10 14:56:43 112

原创 WebSocket

WebSocketWebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的链接,并且进行双向数据传输。WebSocket的特性websocket是基于HTTP协议的,或者说借用了http的协议来完成一部分握手。为了实现websocket通信,在http建立连接后,还需要进行一次"

2021-01-10 14:49:10 99

原创 对于同步的规则定义

线程间操作的定义线程间操作指:一个程序执行的操作可被其他线程感知或被其他线程直接影响。Java内存模型只描述线程间操作,不描述线程内操作,线程内操作按照线程内语义执行。线程间操作有:read操作(一般读,即 非volatile读)write操作(一般写,即 非volatile写)volatile readvolatile writeLock.(锁monitor)、Unlock线程的第一个和最后一个操作外部操作所有线程间操作,都存在可见性问题,JMM需要对其进行规范volati

2020-11-29 10:39:49 466 1

原创 工作内存缓存问题

工作内存缓存会导致问题的是CPU指令重排序CPU指令重排序Java编程语言的语义允许Java编译器和微处理器进行执行优化,这些优化导致了与其交互的代码不再同步,从而导致了与其交互的代码不再同步,从而导致看似矛盾的行为。但是在多线程的情况下:...

2020-11-29 10:04:06 107

原创 Java内存模型vs JVM运行时数据区

Java内存模型vs JVM运行时数据区Java虚拟机可以同时支持多个执行线程,若未正确同步,线程的行为可能会出现混淆和违反直觉。多线程程序的语义,它包含了,当多个线程修改了共享内存中的值时,应该读取到哪个值的规则。由于这部分规范类似于不同硬件体系结构的内存模型,因此这些语义称为Java编程语言内存模型。 这些语义没有规定如何执行多线程程序。他们描述了允许多线程程序的合法行为。...

2020-11-29 09:51:44 82

原创 缓存优化

1、了解内存缓存1. 1、什么是缓存在计算中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快。通过缓存,可以高效地重用之前检索或计算的数据。缓存本质上是以空间换时间,提高接口的响应速度。硬件是指一块芯片被集成到硬盘或者CPU上,作用就是充当硬盘,CPU与外界的接口之间的一个暂存器。这里的外界接口通常是指硬盘和内存,或者是CPU与内存之间。利用缓存可以减轻系统的负载,同时提高传播效率。客户端缓存为了实现可以快速地响应用户的

2020-09-23 23:17:02 1339

原创 链表知识点

感觉链表这东西还是要多练,但是实在没做什么双链表的题。。理解的不好。哈希表的简单介绍哈希表在使用层面上可以理解为一种集合结构;如果只有key,没有伴随数据value,可以使用HashSet结构;如果既有key,又有伴随数据value,可以使用HashMap结构;有无伴随数据,是HashMap和HashSet唯一的区别,底层的实际结构是一回事;使用哈希表**增(put)、删(remove)、改(put)|和查(get)**的操作,可以认为时间复杂度为O(1),但是常数时间比较大。放入哈希表的东

2020-09-08 11:21:00 121

原创 排序算法学习和总结

在学习排序算法的过程中做的笔记以及总结,都是手写,有错误的话请大家包容一下并指出来,一起进步。时间复杂度是粗描算法流程和数据量之间的一个关系。常数时间的操作(和数据量无关的操作),一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。时间复杂度为一个算法流程中,常数操作数量的一个指标。从算法流程中总结出常数操作数量的表达式,在表达式中,只要高阶项,如果这部分为f(N),那么时间复杂度为O(f(N))。评价一个算法流程的好坏,先看时间复杂度的指标,...

2020-09-03 13:31:36 159

原创 Tomcat容器优化

TCP/UDP协议OSI网络七层模型为使不同计算机厂家的计算机能够互相通信,以便在更大的范围内建立计算机网络,有必要建立一个国际范围的网络体系结构。各层的主要功能低三层物理层: 使原始的数据比特流能在物理介质上传输。数据链路层: 通过校验、确认和反馈重发等手段,形成稳定的数据链路(01010101)。网络层: 进行路由选择和流量控制。(IP协议:定义到具体的某台机器)目的是为了让我们屏蔽底层网络的复杂性,比如一些后端语言开发的人员,如果对底层不是非常了解也没有什么关系。中间层传输层

2020-08-27 18:52:46 318

原创 JVM性能优化实战

类加载机制类生命周期类加载器类加载器负责装入类,搜索网络、jar、zip、文件夹、二进制数据、内存等指定位置的类资源。一个java程序运行,最少有三个类加载器实例,负责不同类的加载。查看类对应的加载器通过JDK-API进行查看:java.lang.Class.getClassLoader(),返回装载类的类加载器。如果这个类是由bootstrapClassLoader加载的,那么这个方法在这种实现中将返回null。JVM如何知道类在哪里class信息存放在不同的位置,桌面jar、项目bin

2020-08-27 17:57:34 403

原创 性能测试

功能与性能功能:指的是可以做什么。性能:指的是做得怎么样。而程序可以从可拓展性,可靠性,可维护性,可用性四个方面来衡量一个系统的性能。可拓展性硬件垂直拓展:横向多节点拓展:可靠性可靠性机制的表现fail over:失效转移。当系统中某台服务器出现问题,可以把处理请求转移到Backup备份机器。fail back:失效恢复。fail over之后,待master故障恢复时候,接受Backup继续恢复处理请求的过程。fail safe:失效安全。故障的情况下也不会造成系统损坏,比如数据

2020-08-27 17:45:19 110

原创 多线程核心

线程状态六个状态定义:java.lang.Thread.StateNew:尚未启动的线程的线程状态。Runnable:可运行线程的线程状态,等待CPU调度。Blocked:线程阻塞等待监视器锁定的线程状态。处于synchronized同步代码块或方法中被阻塞。Waiting:等待线程的线程状态。下列不带超时的方式:Object.wait、Thread.join、LockSupport.parkTimed Waiting:具有指定等待时间的等待线程的线程状态。下列带超时的方式:Tread.sle

2020-08-27 17:44:10 194

原创 Java程序运行原理分析

Java运行原理分析class文件内容class文件包含JAVA程序执行的字节码;数据严格按照格式紧凑排列在class文件中的二进制流,中间无任何分隔符;文件开头有一个0xcafebabe(16进制)特殊的一个标志。这文件是有复杂格式专门给JVM读里面的内容,人类阅读可以借助工具查看,包括:版本、访问标志、常量池、当前类、超级类、接口、字段、方法、属性。版本号/访问控制public class Demo1 minor version:0//次版本号 major version:52//主版本号

2020-08-27 17:41:58 113

原创 servlet的开发

servlet的使用相关参考:菜鸟教程参考:https://www.runoob.com/servlet/servlet-tutorial.htmlservlet3.0:http://tomcat.apache.org/tomcat-7.0-doc/servletapi/index.htmlservlet3.0社区文档:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/index.htmlservlet4.0:http://tom

2020-08-27 17:40:15 200

原创 模板引擎

JSP模板引擎了解模板引擎:模板引擎(用于Web开发)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。模板引擎的分类置换型的模板引擎就是将规定好的文本标记替换为目标内容。这种模板引擎实现简单,除了标签替换之外,很少支持诸如子模板引用、流程控制等功能。置换型模板引擎通常于业务逻辑不是很复杂的项目,比如生成短信、生成电子邮件,甚至有很多代码生成器也在用它。可以说,置换型模板引擎的思想是整个模板引擎界的基础。解释型模板引

2020-08-27 17:38:36 3426

原创 数据库事务

数据库事务数据库事务的概念以及原理认识事务事务的概念:数据库事务是访问并可能更新数据库中各种数据项的一个程序执行单元。事务的组成:一个数据库事务通常包含对数据库进行读或写的一个操作序列。一个典型的数据库事务:BEGIN TRANSACTION//事务开始SQL1SQL2COMMIT/ROLLBACK//事务提交或回滚事务的相关特性数据库事务可以包含一个或多个数据库操作,但这些操作构成一个逻辑上的整体。构成逻辑整体的这些数据库操作,要么全部执行成功,要么全部执行不成功。构成事务的

2020-08-27 17:35:54 123

原创 数据库访问中间件

mybatis回顾什么是ORM框架对象关系映射(Obiect Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象与关系数据库相互映射;异构性:ORM可以解决数据库与程序间的异构性,比如在Java中我们使用String表示字符串,而Oracle中可使用varchar2,MySQL中可使用varchar,SQLServer可使用nvarchar。映射:ORM提供了实现持久

2020-08-20 22:10:05 1608

原创 springboot基础

基本介绍Spring与Spring boot的关系Spring发展史2003年兴起的一个轻量级的java开源框架,这个框架最初是为了解决企业级应用开发笨重臃肿的问题。宗旨就是简化开发。特点:AOP和IOC。并且提供了很多Template模板。Spring boot的诞生随着Spring越来越火,Spring也慢慢从一个小而精的框架变成了一个覆盖面广又全的框架,但是也导致了大量繁琐的XML配置和第三方整合配置,这时候Spring boot应运而生。从13年开始研发,到14年4月1.0版本正式发布。

2020-08-20 22:02:25 148

原创 封装核心基础

注解&反射注解(Annotation)是Java5引入的一种代码辅助工具,核心作用是对类、方法、变量、参数和包进行标注,通过反射来访问这些标注信息,以此在运行时改变所注解对象的行为。Java中的注解由内置注解和元注解组成。元注解@Retention:定义注解的生命周期 [source—class—runtime]@Documented:文档注解,会被Javadoc工具文档化@Inherited: 是否让子类继承该注解@Target:描述了注解的应用范围TYPE:表示可以用来

2020-08-11 20:58:03 148

原创 JAVA基础准备

java基础准备继承(extends)​ public class XXX(子类) extends XXX(父类) { }​ 父类中private的,只有父类自己可以用。​ 若需要子类访问:可以改为 protexted(同一个包内),但是尽量不要。在父类中为对象建立构造器做初始化,然后在子类中用**super(XXX);**调用父类中的构造器。执行顺序:父类的定义初始化 —> 构造器 —> 子类的定义初始化 —> 构造器子父类同名成员变量时,两者之间没有任何联系,子类的

2020-08-11 20:56:58 109

原创 使用HbuilderX学习Vue笔记

使用HbuilderX学习Vue从各种视频和书中结合学习。做个笔记温故知新。html中的页面结构<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <!-- 1.导入vue的包 --> <scri...

2019-10-25 21:08:38 1968

原创 css+html+js学习笔记----JS

CSS+HTML+JS----JSJS的实例轮播图片var pics=document.getElementById("pics");var n = 1;setInterval(function() {//设置时钟控件 if(n>4) n=1 pics.innerHTML="<img src='img/a%20("+n+").jpg' />";//innerHTM...

2019-10-25 21:06:31 157

原创 css+html+js学习笔记----css

CSS+HTML+JS中的cssCSS中的一些用法首先,在css的书写中,“#”:ID选择器,代表的是获取html中“id”相对应的元素,“.”:类选择器,代表的是获取html中“class”相对应的元素。例如:#header .nav a{ background-color: orange;}其中在,自定义的名称之后加上空格表示包含的关系,例如:就包含在>中,而“ a ”为标...

2019-10-25 11:10:56 335

原创 css+html+js学习笔记---html

CSS+HTML+JS中关于HTML关于连接css或者js文件<link rel="stylesheet"href="css/common.css"/>css/common.css是css文件夹的文件名称。而在hbuilderX中,只要打出link即可弹出提示,推荐把link写在中。<div style="width:100px;margin: auto;"> ...

2019-10-25 11:09:08 307

空空如也

空空如也

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

TA关注的人

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