Vue
Day24:Vue目标 1234561. Vue3 为什么出现(★★★)2. Vue3 Composition API(★★★★★)3. ref 和 reactive 区别(★★★★★)4. computed 和 watch(★★★★★)5. Vue 响应式原理(★★★★★)6. 生命周期(★★★★) Vue2 和 Vue3 为什么升级? Composition APIVue2 都是Options API配置项。一个业务逻辑可能分散。Vue3 组合式api相关逻辑放一起。 更好的 TypeScript 支持 Vue3 响应式原理Vue3 使用 Proxy 实现响应式,通过代理对象拦截属性访问和修改,在数据变化时通知依赖更新。 Vue2使用 Object.defineProperty 监听getter/setter。Vue3使用 Proxy。 ref 和 reactive 区别ref接收的数据可以是:基本类型、也可以是对象类型。基本类型的数据:响应式依然是靠Object.defineProperty()的get与set完成的。对象类型的数据:内部也是reactive函...
其他中间件
Day20:RabbitMQ 1目标 123451. 为什么需要 MQ(★★★★★)2. RabbitMQ 整体架构(★★★★★)3. Producer、Exchange、Queue、Consumer(★★★★★)4. 四种 Exchange 类型(★★★★★)5. RabbitMQ 消息发送流程(★★★★★) 为什么需要 MQ?MQ 主要解决异步、解耦、削峰三个问题。 RabbitMQ 架构RabbitMQ 核心四个角色: text1234567891011121314151617181920Producer生产消息 | vExchange交换机, 负责路由 | vQueue队列 | vConsumer消费消息 Exchange 是什么?根据规则,把消息发送到不同 Queue。 四种 Exchange 类型 Direct Exchange(直连)根据routing key精确匹配。 Fanout Exchange(广播)不看routing key所有绑定Queue都收到。 Topic Exchange(主题)支持通配符。根据routing key模糊...
Redis
Day17:Redis 1目标 123451. Redis 为什么快(★★★★★)2. Redis 的五种基本数据结构(★★★★★)3. String 底层与应用(★★★★☆)4. Hash、List、Set、ZSet 的使用场景(★★★★★)5. 结合你的项目 Redis 快主要有四个原因 基于内存(★★★★★)数据放在内存。不用磁盘 IO。而数据库最大的耗时就是磁盘。 单线程模型(★★★★★)Redis 6 之后引入了 I/O 多线程,但:命令执行仍然是单线程。因为Redis 操作的是共享内存。Redis采用单线程顺序执行没有锁竞争。 I/O 多路复用(★★★★★)例如个10000客户端。传统线程模型10000线程。Redis一个线程管理10000连接。Linux提供epoll哪个Socket有数据,Redis处理哪个,所以CPU几乎不空转。 数据结构设计优秀 例如Hash、ZSet、SkipList、压缩列表(旧版本)、ListPack(新版本)。很多操作都是O(1)。 Redis 五种基本数据结构 类型 场景 String 缓存、...
数据库
Day14:数据库目标: 1231. 数据库索引(★★★★★)2. SQL 为什么会慢(★★★★★)3. 数据库事务(★★★★★) 1. 为什么数据库索引像书的目录?为什么不用全表扫描?索引本质是一种帮助数据库快速定位数据的数据结构,就像书的目录一样。如果没有索引,数据库只能从第一条记录开始逐行扫描;有了索引,可以直接定位到目标数据所在的位置,大幅减少扫描的数据量。 2. 为什么数据库大部分索引使用B+Tree为什么不用Hash?数据库需要的不只是等值查询,还需要范围查询和排序,因此选择了 B+Tree。 3. 为什么 LIKE ‘%abc’ 容易索引失效?B+Tree 索引按照前缀有序存储,LIKE ‘abc%’ 可以利用前缀定位,而 LIKE ‘%abc’ 无法确定起始位置,因此通常无法利用索引。 4. SQL查询很慢你一般怎么排查? EXPLAIN ANALYZE 查看执行计划 看有没有Seq Scan,有说明是全表扫描 看看索引为什么没用。例如: 没索引 索引失效 返回数据太多,优化器觉得全表扫描更快 类型转换 函数计算 如果SQL没问题再看是不是JOIN、数据量、...
Spring
Day11:Spring目标 12345Spring├── 为什么要有 Spring(★★★★★)├── IOC(★★★★★)├── Bean 生命周期(★★★★★)├── AOP(★★★★★) Bean 生命周期123451. 实例化(调用构造方法)2. 依赖注入(@Autowired)3. 初始化(@PostConstruct、InitializingBean)4. 使用5. 销毁(@PreDestroy) AOPAOP(面向切面编程)就是把日志、事务、权限等横切关注点从业务代码中抽离出来,统一增强目标方法。 1. 为什么Spring要IOC为什么比new好?第一,降低耦合。对象不再依赖具体实现,而是依赖 Spring 容器管理。 第二,统一管理生命周期。Spring 可以统一管理 Bean 的创建、销毁、作用域(Singleton、Prototype 等)。 第三,方便扩展。例如以后 UserDao 换实现,或者增加代理、事务,都不用修改业务代码。 2. Bean生命周期五步是什么?创建bean、注入依赖、初始化、使用、销毁 3. 为什么@PostConstruct里面...
JVM
Day 8:JVM目标: 123456JVM├── JVM 内存结构(★★★★★)├── 对象创建过程(★★★★★)├── 垃圾回收为什么需要 GC Root(★★★★★)├── 常见垃圾回收器(CMS/G1)└── 类加载机制(先了解) GC Root有哪些? 虚拟机栈中局部变量引用的对象。 方法区(Metaspace)中静态变量引用的对象。 方法区中常量引用的对象。 JNI(本地方法)引用的对象。 GC Root 一定在栈上吗?不一定。GC Root 的本质是 JVM 认为一定存活、作为可达性分析起点的对象引用。栈中的局部变量只是最常见的一类,静态变量、JNI 引用、活动线程、Class 对象、Monitor 等都可以成为 GC Root。 1. 为什么Java对象放Heap。引用放Stack?对象放在堆中主要有两个原因。第一,对象通常比较大,而栈空间比较小,栈主要用于方法调用,如果整个对象都放栈中,每次方法调用和返回都会产生大量数据复制,效率很低。第二,对象的生命周期通常长于方法,例如对象可以作为返回值返回给调用者,如果放在栈中,方法结束对象就没了,所以对象必须放在堆中...
并发
Day3:并发123456789101112131415161718192021222324252627282930Java 并发│├── volatile│ ││ ├── Memory Barrier│ ├── Happens-Before│ └── 可见性│├── CAS│ ││ ├── CompareAndSet│ ├── 自旋│ ├── ABA│ └── AtomicInteger│├── AQS│ ││ ├── state│ ├── CLH等待队列│ ├── park/unpark│ └── CAS│└── JUC │ ├── ReentrantLock ├── Semaphore ├── CountDownLatch ├── FutureTask └── ReadWriteLock 目标: 123456并发├── 一、为什么需要线程?├── 二、Thread...
Java基础
Day1:Java 集合目标: 1234Collection├── ArrayList├── LinkedList└── HashMap 1. 为什么 ArrayList 查询快,而 LinkedList 查询慢?ArrayList 底层是连续内存空间,可以通过数组下标直接计算出元素地址,因此随机访问时间复杂度是 O(1)。LinkedList 底层是双向链表,每个节点只知道前后节点的位置,因此访问第 n 个元素需要从头或尾开始遍历,时间复杂度是 O(n)。 2. 为什么 LinkedList 插入快,但项目中却很少使用?实际场景中基本都是查询和遍历,例如分页查询,获取数组中第几个元素什么的。链表虽然插入和删除快,但是也要先查找遍历到指定元素才可以。而且从中间插入的需求实际业务中很少遇到。我基本没有用过linkedList 2.1 那 LinkedList 真有比 ArrayList 快的时候吗?有。如果已经拿到了链表节点,例如 ListIterator 已经定位到了当前位置,或者频繁在队列头尾插入删除,那么 LinkedList 确实比 ArrayList 更合适。但普通业务...
面试题
自己整理的一些常见面试题和知识点 Day1:Java 集合目标: 1234Collection├── ArrayList├── LinkedList└── HashMap 1. 为什么 ArrayList 查询快,而 LinkedList 查询慢?ArrayList 底层是连续内存空间,可以通过数组下标直接计算出元素地址,因此随机访问时间复杂度是 O(1)。LinkedList 底层是双向链表,每个节点只知道前后节点的位置,因此访问第 n 个元素需要从头或尾开始遍历,时间复杂度是 O(n)。 2. 为什么 LinkedList 插入快,但项目中却很少使用?实际场景中基本都是查询和遍历,例如分页查询,获取数组中第几个元素什么的。链表虽然插入和删除快,但是也要先查找遍历到指定元素才可以。而且从中间插入的需求实际业务中很少遇到。我基本没有用过linkedList 2.1 那 LinkedList 真有比 ArrayList 快的时候吗?有。如果已经拿到了链表节点,例如 ListIterator 已经定位到了当前位置,或者频繁在队列头尾插入删除,那么 LinkedList 确实比 Ar...
CentOS 安装翰高数据库
创建 highgo 用户创建用户1234# 创建用户useradd highgo -d /home/highgo# 设置密码 1qaz@WSXpasswd highgo 提升用户权限12chmod u+w /etc/sudoersvi /etc/sudoers 查找到 Allow root to run any commands anywhere,在 root 下增加一行命令 1highgo ALL=(ALL) ALL 准备安装包 hgdb6.0.4-enterprise-centos7-x86-64-20220127.rpmpostgis3.0-6.0.4-enterprise-centos7-x86-64-20220127.rpm 放到 /home/highgo 目录下 123# 修改安装包所属用户sudo chown highgo:highgo hgdb6.0.4-enterprise-centos7-x86-64-20220127.rpmsudo chown highgo:highgo postgis3.0-6.0.4-ente...










