乐观锁、悲观锁
相关文章参考: 面试官灵魂4连问:乐观锁与悲观锁的概念、实现方式、场景、优缺点? 乐观锁和悲观锁详解 概念乐观锁乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。 乐观锁本身不会上锁。但是可以与加锁操作合作实现一些业务需求 悲观锁悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。也就是说,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。 实现悲观锁的实现像 Java 中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。 12345678910111213public void performSynchronisedTask() { synchronized (this) { // 需要同步的操作 }}private Lock lock = new R...
正则表达式
匹配规则 注意正则表达式在Java代码中也是一个字符串,所以,对于正则表达式a&c来说,对应的Java字符串是”a\&c”,因为\也是Java字符串的转义字符,两个\实际上表示的是一个\ 单个字符的匹配规则如下:多个字符的匹配规则如下: 复杂匹配规则 分组匹配String.matches()正则表达式用(…)分组可以通过Matcher对象快速提取子串: group(0)表示匹配的整个字符串; group(1)表示第1个子串,group(2)表示第2个子串,以此类推。eg: 12345678910111213141516import java.util.regex.*;public class Main { public static void main(String[] args) { Pattern p = Pattern.compile("(\\d{3,4})\\-(\\d{7,8})"); Matcher m = p.matcher(&qu...
SpringMVC
封面图片来源文章参考视频参考 概述MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架。SpringMVC可以帮助我们进行更简洁的Web层的开发,并且它天生与 Spring 框架集成。SpringMVC下我们一般把后端项目分为 Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面). SpringMVC的核心组件 DispatcherServlet:核心的中央处理器,负责接收请求、分发,并给予客户端响应 HandlerMapping:处理器映射器,根据URL去匹配查找能处理的Handler,并会将请求涉及到的拦截器和 Handler 一起封装。 HandlerAdapter:处理器适配器,根据 HandlerMapping 找到的 Handler ,适配执行对应的 Handler; Handler:请求处理器,处理实际请求的处理器。 ViewResolver:视图解析器,根据 Handler 返回的逻辑视图 / 视图,解析并渲染真正的视图,并传递给 Dispatche...
Redis入门
Redis官方文档 在开始之前NoSQL-非关系型数据库特点 结构-非结构化 键值(Redis) 文档(MongoDB) 图(Neo4j) 列(HBase) 关联-无关联的 查询-非SQL 1SELECT id,name age FROM tb_user WHERE id =1 非SQL-不统一的语法 1get user: 1 1db.users.find({_id: 1}) 事务-BASE-相对于SQL的ACID(原子性,一致性,隔离性,持久性) 存储-内存 SQL为磁盘存储 扩展性- 水平 SQL为垂直 使用场景 数据结构不固定 对一致性、安全性要求不高 对性能要求高的时候 Redis介绍和Redis的安装Redis的特征 键值型 单线程(核心),每个命令具备原子性 低延迟,速度快(基于内存、IO多路复用、良好的编码) 支持数据持久化 支持主从集群、分片集群 支持多语言客户端 Redis的安装 Ubuntu 下安装 参考文章戳我跳转 Redis的启动我觉得最舒服的还是service 1service redis-ser...
跨域认证
参考视频 Session认证提要互联网用户认证的一般流程: 用户向服务器发送用户名和密码 服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登陆时间等。 服务器向用户返回一个session_id,写入用户的Cookie 用户随后的每一次请求,都会通过Cookie,将session_id传回服务器 服务器收到session_id,找到前期保存的数据,由此得知用户的身份 Session的问题与解决方案session认证扩展性不好,如果是服务器集群,或者是跨域的武器导向架构,就要求session数据共享,每台服务器都能够读取session,针对这种问题一般有两种方案: session数据持久化,写入数据库或者别的持久层。各种服务收到请求后,都向持久层请求数据。这种方案的优点是架构清晰,缺点是工程量比较大 服务器不再保存session数据,所有数据都保存在客户端,每次请求都发回服务器。Token认证就是这种方案的代表 Token认证是服务器产生的一串字符串,是客户端访问资源接口(API)时所需要的资源凭证,流程如下: 客户端使用用户名跟密码请求登...
前端数据模拟mockjs
参考视频戳我跳转 mockjs介绍 Mock.js是一款开发中拦截Ajax请求再生成随机数据响应的工具,可以用来模拟服务器响应 优点是非常简单方便,无入侵性,基本覆盖常用的接口数据类型 支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等 安装:npm install mockjs 官方文档 基本使用 在项目中创建mock目录,新建index.js文件 12345678910111213141516171819import Mock from 'mockjs'Mock.mock('/product/search', { "ret": 0, "data": { //随机生成日期时间 "mtime: "@datetime", //随机生成1-800的数字 "score|1-800": 800, //随机生成1-100的数字 ...
Axios网络请求
文章参考来源Axios网络请求 Axios了解简介 Axios是基于promise网络请求库(基于AJAX的网络请求框架),作用于node.js和浏览器中 Axios在浏览器端使用XMLHttpRequests发送网络请求,并能自动完成JSON数据的转换 安装官网地址:更多安装方式以及教程参考官方文档 npm安装: 1npm install axios 导入import axios form 'axios' 可以全局导入也可以哪个组件用哪里导入,注意axios导入和正常写路径不同 发送网络请求发送GET请求 方法一:在axios方法中直接传入一个对象,配置请求路径:url,传递参数:params。然后使用。.then方法获得响应数据 1234567891011121314151617//配置接口地址axios.defaults.baseURL = 'http://127.0.0.1:3000'function testget() { axios({ ...
Vue框架相关(2)
如何使用别人的vue项目 通常情况网上下好的vue开源项目都是不包含node_modules文件的 这个时候只需要打开npm i一下,就会自动读取package.json中的记录下好依赖 第三方组件element-ui3.0版本官网 居然是饿了么提供的开源前端框架 安装 安装:npm install element-plus --save 快速开始: 完整导入:如果你对打包后的文件大小不是很在乎,那么使用完整导入会更方便。1234567import { createApp } from 'vue'import ElementPlus from 'element-plus'import 'element-plus/dist/index.css'import App from './App.vue'const app = createApp(App)app.use(ElementPlus)app.mount('#app') app.use(ElementPl...
Vue框架相关(1)
参考视频1天搞定SpringBoot+Vue全栈开发vue前端框架,没有介绍 MVVM模式 Model-View-ViewModel,一种基于前端开发的框架模式,其核心是提供对View和ViewModel的双向数据绑定 Vue提供了MVVM风格的双向数据绑定,核心是MVVM中的VM,也就是ViewModel,其负责连接VIEW和Model,保证视图和数据的一致性 快速上手vue官方文档 建议使用按照官方文档来 1234567891011121314151617181920212223242526272829<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Hello Vue!&...
Java之集合
摘自廖雪峰的java教程,有部分删改 Java集合简介Java的集合类定义在java.util包中,支持泛型,主要提供了3种集合类,包括List,Set和Map。Java集合使用统一的Iterator遍历,尽量不要使用遗留接口。 使用List 分为ArrayList和LinkedList 通常情况下,我们总是优先使用ArrayList List的特点 List接口允许我们添加重复的元素,即List内部的元素可以重复: 123456789101112import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("apple"); // size=1 list.add("pear"); //...
SpringBoot相关
参考视频1天搞定SpringBoot+Vue全栈开发 SpringBoot开发环境热部署概述 需求:开发环境,代码频繁修改,重启麻烦 SpringBoot提供spring-boot-devtools组件,无需手动重启 devtools会监听classpath下文件变动,出发Restart类加载器重新加载该类,实现热部署 并不是所有更改都需要重启应用(如静态资源、视图模板),可以通过设置spring.devtools.restart.exclude属性来指定一些文件或目录修改不用重启应用 配置 在pom.xml中添加dev-tools依赖 使用optional=true表示依赖不会传递,即该项目依赖devtools;其他项目如果引入此项目生成的jar包,则不会包含devtools 12345<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <op...
JVM一篇速览
本文为个人学习笔记,内容大部分摘自JavaGuide,稍有部分修改,如有错误,欢迎指正 基本介绍 全程Java Virtual Machine 特点:直接与操作系统进行交互,与硬件不直接交互 运行机制 将java文件编译成可读的.class文件 类加载器JVM执行.class文件,需要将文件先放入类加载器中 方法区 存放类似于元数据信息方面的数据 eg:类信息、常量、静态变量、编译后的代码… 类加载器将.class文件搬过来就是先丢在这一块 堆 存放一些储存的数据 eg:对象实例、数组… 与方法区共属线程共享区域,存在线程不安全的问题 栈 编写的方法都在此处运行 8 种基本类型的变量+对象的引用变量+实例方法都是在栈里面分配内存 程序计数器 指向下一行我们需要执行的代码 和栈一样都是线程独享的 JVM调优的主要方法就是围绕堆和栈两块进行 类加载器-ClassLoader从类被加载到虚拟机内存中开始,到释放内存共七个步骤:加载、验证、准备、解析、初始化、使用、卸载 其中验证、准备、解析三个步骤统称为链接 类加载器的流程加载 将class文件加载到内...












