HashMap笔记
HashMap前言
HashMap是我们日常开发中经常遇到的一种数据结构,其内部存储采用K,V的形式存储数据,随着JDK的升级,在1.8之后对其进行了优化,例如引入了红黑树和扩容优化等。
数组数组是一类数据类型的数据的集合,相当于一个容器,容器中的数据都是相同的数据类型,下图为一个int类型的数组
数组因为其结构特性,查找数据时只需要用下标去相应的位置取就可以,效率高,但其添加和删除操作受其空间复杂度影响,每次删除添加都要进行移位,效率不高
链表链表是一种物理存储上的非连续、非顺序的存储结构,其逻辑顺序是依靠其指针建立的,其结构是由一个个的Node节点构成
这是单链表的结构,双向链表在此基础上加了一个prev指针,指向前一个元素,从而构成双向 从图中我们可以看出,在链表中添加和删除数据,我们只需断开当前连接,然后改变指针就可以了,所以在添加和删除数据的时候简单;但因为其链式结构,我们查找的时候,需要从第一个节点开始遍历,直到找出当前数据才能结束,因此其查找速度没有数组快
HashMap 1.7在JDK1.7时的HashMap采用数组+链表的结构 在存储时,会先根据key ...
JVM基本认识
JVM前言
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM运行与操作系统之上,是应用级java环境
JVM主要组成部分
类加载器
运行时数据区
执行引擎
本地方法接口
各组件的作用
首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。
类加载器(ClassLoader)负责从网络或文件系统中加载class文件,加载后的类信息存在方法区中
类的加载子系统的三个阶段
1、加载
通过类的全限定名获取类的二进制字节流
将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
在内存中生成一个代表这个类的java.lang.Class对象,作为方法区 ...
SpringBoot整合Activiti7(一)
SpringBoot整合Activiti(一)Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),可以定义流程、执行流程并以不同方式对其实现运行。
一、应用Activiti1、引入pom坐标123456<!-- activiti --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version> </dependency>
2、配置application.yml12345spring: activiti: database-schema-update: false history-lev ...
SpringBoot整合Activiti7(二)
SpringBoot整合Activiti7(二)之前只是一个springboot整合activiti的demo,在真正的开发中可能还需使用到它的其他api
Activiti核心api有六个:
RepositoryService
管理流程定义
RuntimeService
执行管理,包括启动、推进、删除流程实例等操作
TaskService
任务管理
HistoryService
历史管理(执行完的数据的管理)
IdentityService
组织机构管理
FormService
一个可选择的服务
ManagerService
管理服务
一、RepositoryService1、部署流程RepositoryService是Activiti流程引擎的仓库服务类,包含流程部署的两个文件:bpmn文件和流程图
1234Deployment deployment = repositoryService.createDeployment() .name("我的流程") //流程部署名 .addC ...
SpringBoot整合JWT
SpringBoot整合JWT一、JWT是什么
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是RSA的公私秘钥对进行签名。
1.1、JWT的执行流程
用户使用账号和面发出post请求;
服务器使用私钥创建一个jwt;
服务器返回这个jwt给浏览器;
浏览器将该jwt串在请求头中向服务器发送请求;
服务器验证该jwt;
返回响应的资源给浏览器
1.2、JWT的优点1.简洁(Compact): 可以通过URL,POST参数或者在HTTP header发送,因为数据量小,传输速度也很快
2.自包含(Self-contained):负载中包含了所有用户所需要的信息,避免了多次查询数据库
3.因为Token是以JSON加密的形式保存在客户端的,所以JWT是跨语言的,原则上任何web形式都支持。
4.不需要在服务端保存会话信息,特别适用于分布式微服务。
1. ...
Docker安装常用开发软件
Docker安装常用软件一、安装Mysql1、查看mysql最新版本1docker search mysql
2、拉取mysql镜像到本地1docker pull mysql:版本号
拉取下来后,使用 docker images 查看是否本地存在
3、安装mysql1、配置文件先新建一个文件夹存放mysql配置文件
1mkdir -p /opt/docker-mysql/conf.d
然后新建mysql配置文件
1vim config-file.cnf
config-file.cnf:
1234567891011[mysqld]# 表名不区分大小写lower_case_table_names=1 #server-id=1datadir=/var/lib/mysql#socket=/var/lib/mysql/mysqlx.sock#symbolic-links=0# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqld_safe]log-error=/var/log/mysqld.l ...
CentOs7安装Docker
CentOs安装Dockerdocker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。简言之,就是可以在Linux上镜像使用的这么一个容器。
一、卸载原先的docker12 yum -y remove docker-cerm -rf /var/lib/docker
二、安装新版本docker1、yum安装gcc相关12yum -y install gccyum -y install gcc-c++
我以前安装过,所以是这样的
2、确保旧版本卸载干净12345678yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ ...
SpringBoot全局异常处理
SpringBoot全局异常处理
通用异常处理
其实Spring系列的项目全局异常处理方式早已存在,只不过我们一直忙于搬砖,很少停下脚步去审视这个日夜与我们相伴的朋友。为了贴合主题,本次主要针对SpringBoot全局异常处理进行举例说明。SpringBoot中有一个@ControllerAdvice的注解,使用该注解即表示开启全局异常捕获,接下来我们只需在自定义的方法上使用@ExceptionHandler注解,并定义捕获异常的类型,对这种类型的异常进行统一的处理。
一、在config配置包下新建全局捕获异常处理类二、根据具体要捕获的异常编写处理类
假如我们需要针对NullException(空指针异常,是Java程序员最痛恨的异常,没有之一)进行全局处理(如下所示)。
1234567891011121314@RestControllerAdvicepublic class GlobalCatchException { /** * 空指针异常 * @param e * @return com.zhulin.ascentweb.dto.Res ...
SpringBoot整合Redis
SpringBoot整合Redis
redis在日常开发中使用非常多,下面是springboot整合redis
一、导入依赖
pom.xml文件中
12345678910<!--fastjson,后续转json可能会用到--><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
二、修改配置文件
application.yml中
12345678910 ...
JAVA文件上传下载
JAVA文件上传下载一、文件上传1234567891011121314151617181920212223242526272829303132333435363738public class UploadUtil { public boolean upload(String fileUploadPath, MultipartFile file) throws IOException { String filename = file.getOriginalFilename();//获取文件名 // String newfilename = UUID.randomUUID().toString(); // String fix=filename.substring(filename.lastIndexOf("."),filename.length()); //String newfile = newfilename+fix; String filePath = fileUploa ...