vue3快速上手(尚硅谷b站)
1. Vue3简介
2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n
经历了:4800+次提交、40+个RFC、600+次PR、300+贡献者
官方发版地址:Release v3.0.0 One Piece · vuejs/core
截止2023年10月,最新的公开版本为:3.3.4
1.1. 【性能的提升】
打包大小减少41%。
初次渲染快55%, 更新渲染快133%。
内存减少54%。
1.2.【 源码的升级】
使用Proxy代替defineProperty实现响应式。
重写虚拟DOM的实现和Tree-Shaking。
1.3. 【拥抱TypeScript】
Vue3可以更好的支持TypeScript。
1.4. 【新的特性】
Composition API(组合API):
setup
ref与reactive
computed与watch
……
新的内置组件:
Fragment
Teleport
Suspense
……
其他改变:
新的生命周期钩子
data 选项应始终被声明为一个函数 ...
redis 基础
Redis 是完全开源免费的,遵守 BSD 协议,是一个高性能的 key-value 数据库
Redis 与其它 key/value 缓存产品有以下三个特点:
1、 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用;2、 Redis不仅支持key-value类型的数据,还提供list,set,zset,hash等数据结构的存储;3、 Redis支持数据的备份,即master-slave模式的数据备份;
Redis 优势
1、 高性能:Redis能读的速度是110000次/s,写的速度是81000次/s;2、 丰富的数据类型:Redis支持Strings,Lists,Hashes,Sets及OrderedSets数据类型操作;3、 **原子型操作:**Redis的所有操作都是原子性的,还支持对几个操作全并后的原子性执行;4、 **丰富的特性:**Redis支持publish/subscribe,通知,key过期等等特性;
Redis 与其它 key-value 存储有什么不同?
1、 Redis支持更多的数 ...
mysql事务原理
一、Redo LogMySQL 中事务的原子性和持久性是由 Redo Log 实现的,它确保 MySQL 事务提交后,事务所涉及的所有操作要么全部执行成功,要么全部执行失败
1.Redo Log 基本概念Redo Log 也被称作重做日志,它是在 InnoDB 存储引擎中产生的,用来保证事务的原子性和持久性。Redo Log 主要记录的是物理日志,也就是对磁盘上的数据进行的修改操作。Redo Log 往往用来恢复提交后的物理数据页,不过只能恢复到最后一次提交的位置
Redo Log 通常包含两部分:一部分是内存中的日志缓冲,称作 Redo Log Buffer,这部分日志比较容易丢失,另一部分是存放在磁盘上的重做日志文件,称作 Redo Log File,这部分日志是持久化到磁盘上的,不容易丢失
2.Redo Log 基本原理Redo Log 能够保证事务的原子性和持久性,在 MySQL 发生故障时,尽力避免内存中的脏页数据写入数据表的 IBD 文件。在重启 MySQL 服务时,可以根据 Redo Log 恢复事务已经提交但是还未写入 IBD 文件中的数据,从而对事务提交的数据进行持久 ...
事务详解
一、事务的特性数据库的事务在实现时,会将一次事务中包含的所有操作全部封装成一个不可分割的执行单元,这个单元中的所有操作要么全部执行成功,要么全部执行失败。只要其中任意一个操作执行失败,整个事务就会执行回滚操作
1.原子性事务的原子性指的是构成事务的所有操作要么全部执行成功,要么全部执行失败,不可能出现部分执行成功,部分执行失败的情况
比如A 向 B 转账 100 元,数据库需要进行两个操作,A 的账户要减少 100 元,B 的账户要增加 100 元,这两个操作要么全部执行成功,要么全部执行失败
2.一致性事务的一致性指的是在事务执行之前和执行之后,数据始终处于一致的状态
还是上面转账的例子,如果转账完成后,A 的账户没有减少 100 元或者 B 的账户没有增加 100 元,这就是数据处于不一致状态
3.隔离性事务的隔离性指的是并发执行的两个事务之间互不干扰。也就是说,一个事务在执行过程中不能看到其他事务运行过程的中间状态
还是上面转账的例子,在转账完成之前,其他事务查询 A 的账户或者 B 的账户,余额应该是转账完成之前的余额,而不会查询到 A 的账户减少了 100 元,而 B 的账户 ...
JVM内存调优
java 应用的内存优化一部分在jvm的调优,本篇主要讲述 内存溢出的问题定位和问题分析 相关的的方式方法。
详细的 jvm部分优化可以参考文章: JVM 相关汇总
内存泄漏 内存泄漏(memory leak):在Java中如果不再使用一个对象,但是该对象依然在GC ROOT的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内存泄漏。 少量的内存泄漏可以容忍,但是如果发生持续的内存泄漏,就像滚雪球雪球越滚越大,不管有多大的内存迟早会被消耗完,最终导致的结果就是内存溢出。但是产生内存溢出并不是只有内存泄漏这一种原因。 内存泄漏绝大多数情况都是由堆内存泄漏引起的,没有特别说明则讨论的都是堆内存泄漏。
常见的复现场景
java后端应用处理完请求后没有删除用户相关数据,导致随着访问量增大内存占满后OOM;
一些离线的调度任务(Elastic-job、Quartz)
解决内存溢出问题1. 排查和发现问题常用工具
visualVM 可视化的jvm内存分析工具,随jdk一起;
优点:功能丰富,实时监控CPU、 内存、线程等详细信息
缺点: -适用于开发、测试环 ...
Java“并发”常见问题概述
进程和线程区别? 进程是操纵系统的一个概念,用于直接分配内存运行程序的一个标识。即,每一个运行的程序。线程是由进程创建的,一个进程可以创建多个线程,每个线程有自己独立的程序控制流程。
线程的生命周期:
**初始(NEW)**:线程被构建,还没有调用 start()。**运行(RUNNABLE)**:包括操作系统的就绪和运行两种状态。**阻塞(BLOCKED)**:一般是被动的,在抢占资源中得不到资源,被动的挂起在内存,等待资源释放将其唤醒。线程被阻塞会释放CPU,不释放内存。**等待(WAITING)**:进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。**超时等待(TIMED_WAITING)**:该状态不同于WAITING,它可以在指定的时间后自行返回。**终止(TERMINATED)**:表示该线程已经执行完毕。
创建线程的方法
通过扩展Thread类来创建多线程
通过实现Runnable接口来创建多线程
实现Callable接口,通过FutureTask接口创建线程。
使用Executor框架来创建线程池。
1234567891011121314151 ...
HashMap 源码解析
1.HashMap集合简介HashMap基于哈希表的Map接口实现,是以key-value存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突**(两个对象调用的hashCode方法计算的哈希码值一致导致计算的数组索引值相同)而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(或者红黑树的边界值,默认为 8)并且当前数组的长度大于64时,此时此索引位置上的所有数据改为使用红黑树存储。**
补充:将链表转换成红黑树前会判断,即使阈值大于8,但是数组长度小于64,此时并不会将链表变为红黑树。而是选择进行数组扩容。
这样做的目的是因为数组比较小,尽量避开红黑树结构,这种情况下变为红黑树结构,反而会降低效率,因为红黑树需要进行左旋,右旋,变色这些操作来保持平衡 。同时数组长度小于 ...
Java 基础试题1
java 基本语法Java是一门面向对象的编程语言 。
平台独立,可移植。 class 一次编译到处运行;
强类型语言,编译时检查,必须显示声明方法;
异常处理;
跨平台(java虚拟机);
java与c++区别
Java 是纯粹的面向对象语言,所有的对象都继承自 java.lang.Object,C++ 兼容 C ,不但支持面向对象也支持面向过程。
Java 通过虚拟机从而实现跨平台特性, C++ 依赖于特定的平台。
Java 没有指针,它的引用可以理解为安全指针,而 C++ 具有和 C 一样的指针。
Java 支持自动垃圾回收,而 C++ 需要手动回收。
Java 不支持多重继承,只能通过实现多个接口来达到相同目的,而 C++ 支持多重继承。
jvm/jre/jdk
jvm : 虚拟机,class文件的运行环境;
jre :java运行时环境,一个提供java运行的环境,包含编译后的jdk和jvm
jdk: java dev kit (java 开发工具),一个包含常用开发工具与包的合集。
编译型语言和解释型语言
编译型语言: 运行前编译为二进制文 ...
JVM 常见问答题
什么是增量式垃圾收集?首先, G1的堆内存不再单纯划分为年轻代和老年代, 而是划分为多个( 通常是 2048个) 可以存放对象的小块堆区域( smaller heap regions) 。每个小块, 可能一会被定义成 Eden 区, 一会被指定为 Survivor 区或者 Old 区。这样划分之后, 使得 G1 不必每次都去回收整个堆空间, 而是以增量的方式来进行处理: 每次只处理一部分内存块, 称为此次 GC 的回收集( collection set) 。下一次GC时在本次的基础上, 再选定一定的区域来进行回收。 增量式垃圾收集的好处是大大降低了单次GC暂停的时间。
什么是GC停顿(GC pause)?STW因为GC过程中, 有一部分操作需要等所有应用线程都到达安全点, 暂停之后才能执行,这时候就叫做GC停顿, 或者叫做GC暂停。
如果CPU使用率突然飙升, 你会怎么排查?缺乏经验的话, 针对当前问题, 往往需要使用不同的工具来收集信息,例如:ps ‐ef jps ‐vfree ‐m free ‐h top收集不同的指标( CPU, 内存, 磁盘IO, 网络等等)分析应用日志分析GC ...
JVM 相关汇总
jvm 概念JVM(Java虚拟机)是一个抽象的计算模型。就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域。目的是为构建在其上运行的应用程序提供一个运行环境。JVM可以解读指令代码并与底层进行交互:包括操作系统平台和执行指令并管理资源的硬件体系结构。
一种提供了 java 字节码文件运行的环境,独立与平台之上,包含jvm规范和jvm实现两大部分。
与jdk,jre区别: jdk 是一套泛指java开发的工具库(里面当然包含了jre和jvm)jre 是java运行时环境,jvm+java标准库
jvm厂商有哪些? oracleJDK 和openJDK 区别?
oraclejdk 和openjdk 都实现了java虚拟机的规范不同在于:
工具套件略有差别
某些协议与配置不同,如 美国出口限制的加密算法等。
api 细微的差别;
使用哪个版本
目前LTS 有2个流行的版本: java8 和 java11 建议这两种选择
java11 有更强的性能,支持更多特性,也在近些年的维护和验证中处于稳定。
无论是哪个版本,请保证 各个环境的jdk版本一致, ...