摘要: TS(六)三斜线指令与声明文件 1 三斜线指令 类似于import的作用,但是不知道为什么我这里无效 ///<reference path="index2.ts" /> ///<reference path="index3.ts" /> namespace A { export const a = 阅读全文
posted @ 2023-12-18 13:59 Tod4 阅读(35) 评论(0) 推荐(0) 编辑
摘要: TS(五)tsconfig配置文件与命名空间 1 tsconfig配置文件简介 使用tsc --init即可生成ts配置文件 "compilerOptions": { "incremental": true, // TS编译器在第一次编译之后会生成一个存储编译信息的文件,第二次编译会在第一次的基础上 阅读全文
posted @ 2023-12-18 13:59 Tod4 阅读(129) 评论(0) 推荐(0) 编辑
摘要: TS(四)泛型与泛型约束 1 基本使用 TS的泛型可以让函数能够动态地支持多种参数和返回值的数据类型 即在写的时候不指定具体的数据类型,而在调用的时候进行指定 TS的泛型在调用的时候可以不用指定类型,解释器会自己推断,下面的两个语句作用是相同的 fun2<string, string>("1", " 阅读全文
posted @ 2023-12-18 13:58 Tod4 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 元组 元组定义需要指定每一个元素的类型: let arr:[number, boolean] = [1, true] arr[0] = 2 越界则推断为交叉类型 let arr:[number, boolean] = [1, true] arr.push(2) console.log(arr) 如果 阅读全文
posted @ 2023-12-18 13:58 Tod4 阅读(15) 评论(0) 推荐(0) 编辑
摘要: JDK9新特性 概述 ​ java9提供了近150项新功能,包括: 模块化系统 jShell命令 多版本兼容jar包 接口的私有方法 钻石操作符的升级使用 语法改进:try String存储结构 集合特性:of() 增强streamAPI 全新HTTP客户端API Deprecated的相关API 阅读全文
posted @ 2023-12-18 13:54 Tod4 阅读(36) 评论(0) 推荐(0) 编辑
摘要: Stream API 1 概述 Stream是java8中处理集合的关键抽象概念 它可以指定对集合进行的操作,比如执行肥非常复杂的查找、过滤和映射等操作 还可以使用Steam API来进行并行操作 2 Steam实例化 2.1 集合创建 ​ 实现自接口collection.stream() @Tes 阅读全文
posted @ 2023-12-18 13:07 Tod4 阅读(8) 评论(0) 推荐(0) 编辑
摘要: Java8新特性 速度更快:如HashMap底层使用红黑树 代码更少 强大的Stream API 便于并行 最大化减少空指针异常:Optional Nashorn引擎:在JVM上运行JS应用 1 Lambda表达式 1.1 Lambda表达式的格式 (o1, o2) -> Integer.compa 阅读全文
posted @ 2023-12-18 13:06 Tod4 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 用Netty实现一个简单全双工通信 ​ 如题,需要注意在ByteBuf使用的过程中要使用buf.retain()保证buf引用计数大于0,才能够正常使用否则会报异常,原因是pipeline上的handler都是使用NIO线程执行的,因此使用buf的handler和tail handler(最后调用b 阅读全文
posted @ 2023-11-20 22:24 Tod4 阅读(86) 评论(0) 推荐(0) 编辑
摘要: Netty(四)NIO多线程优化 ​ 前面的代码都只有一个选择器,没有充分利用多核CPU,因此可以分两组选择器 boss:单线程配一个选择器,专门处理accept事件,不负责数据的读写 worker:创建CPU核心数的线程,每个线程配一个选择器,轮流处理read事件 1 多线程问题分析 关键是这一部 阅读全文
posted @ 2023-11-13 15:09 Tod4 阅读(62) 评论(0) 推荐(0) 编辑
摘要: Netty(三)网络编程 1 阻塞和非阻塞 堵塞: 在没有数据可读的时候,包括数据复制的过程,线程必须堵塞等待,不会占用CPU但是线程相当于闲置 在单线程下,两个堵塞的方法会相互影响,必须使用多线程,32位JVM一个线程320K,64位JVM一个线程1024K,为了减少线程数,需要采用线程池技术 但 阅读全文
posted @ 2023-11-13 15:09 Tod4 阅读(9) 评论(0) 推荐(0) 编辑
摘要: Netty(二)文件编程 1 FileChannel 不能够直接打开FileChannel,只能够通过FileInputStream、FIleOutPutStream和RandomAccessFile的getChannel()方法来获取FileChannel FileInputStream获得的ch 阅读全文
posted @ 2023-11-13 15:08 Tod4 阅读(25) 评论(0) 推荐(0) 编辑
摘要: Sentinel工作原理和源码解析 1 工作原理简介 Sentinel在使用上是通过注解@SentinelResource来实现的对资源的流控保护的,本质是通过AOP的方式来实现的流控方法增强,底层是通过SentinelResourceAspect指定切入点为注解,然后通过环绕通知的方式获取注解传来 阅读全文
posted @ 2023-09-15 10:07 Tod4 阅读(99) 评论(0) 推荐(1) 编辑
摘要: Sentinel工作原理和源码解析 1 架构图解析 ​ Sentinel的核心骨架是ProcessorSlotChain,其将不同的Slot按照顺序串在一起(责任链模式),从而将不同的功能组合在一起,系统会为每个受保护的资源都创建一套SlotChain。 ​ 整个架构分为两部分,一部分的Slot用于 阅读全文
posted @ 2023-09-15 10:06 Tod4 阅读(23) 评论(0) 推荐(0) 编辑
摘要: Sentinel(二)网关流控 ​ 官网介绍:https://github.com/alibaba/Sentinel/wiki/网关限流 1 引入依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud 阅读全文
posted @ 2023-09-15 10:06 Tod4 阅读(109) 评论(0) 推荐(0) 编辑
摘要: Sentinel(一)Sentinel简介 1 高并发系统关注的问题 服务单一职责+独立部署:秒杀服务即使自己扛不住压力,挂掉,也不要影响别人 秒杀链接加密:防止恶意攻击,模拟秒杀请求1000次/秒攻击;防止链接暴露,防止自己工作人员提前秒杀商品 库存预热+快速扣减:无需每次进行实时校验,库存预热放 阅读全文
posted @ 2023-09-15 10:05 Tod4 阅读(31) 评论(0) 推荐(0) 编辑
摘要: ### 【转载】JUC常见面试题:Java线程和操作系统线程有什么区别 整理来自于:https://cloud.tencent.com/developer/article/1818151 #### 1 操作系统的用户态和核心态 在操作系统中,内存通常会被分成`用户空间(User space)`与`内 阅读全文
posted @ 2023-08-16 21:33 Tod4 阅读(38) 评论(0) 推荐(0) 编辑
摘要: ### JVM调优(十七)JVM常见调优问题和工具的使用 #### 说辞 - 熟悉GC常见算法 - 熟悉常见的垃圾回收器,具有实际JVM调优经验 #### 1 什么是调优 - 根据需求进行JVM优化和预调优 - 优化JVM的运行环境(慢、卡顿) - 解决JVM运行过程中出现的各种问题(OOM) ## 阅读全文
posted @ 2023-08-16 20:49 Tod4 阅读(54) 评论(0) 推荐(0) 编辑
摘要: ### Redis(九)五种数据类型的底层结构 #### 1 string ​ string是redis中最常见的数据类型 - 基本编码方式是`RAW`,基于`简单动态字符串(SDS)`实现,存储上限为512MB,此时的object head和SDS是两个独立的空间,是通过redisObject的b 阅读全文
posted @ 2023-08-13 09:49 Tod4 阅读(41) 评论(0) 推荐(0) 编辑
摘要: ### Redis(八)底层数据类型原理 #### 1 SDS 动态字符串 - Redis中保存的key是字符串,value往往是字符串或者字符串的集合,字符串是redis里面最常用的数据结构 - Redis虽然是用C语言写的,没有直接使用C语言的字符串,原因有: - 获取字符串长度需要位运算(因为 阅读全文
posted @ 2023-08-12 23:57 Tod4 阅读(36) 评论(0) 推荐(0) 编辑
摘要: #### 【力扣357次周赛】6953. 判断是否能拆分数组 给你一个长度为 `n` 的数组 `nums` 和一个整数 `m` 。请你判断能否执行一系列操作,将数组拆分成 `n` 个 **非空** 数组。 在每一步操作中,你可以选择一个 **长度至少为 2** 的现有数组(之前步骤的结果) 并将其拆 阅读全文
posted @ 2023-08-06 12:04 Tod4 阅读(14) 评论(0) 推荐(0) 编辑
摘要: ### RabbitMQ(五)延时队列 ​ 延时队列的使用场景: - 未支付订单,超过一段时间后,系统自动取消订单并释放占有物品 - 锁定库存一段时间后,检查订单不存在或者被取消,则解锁库存 #### 1 定时任务存在的问题 ​ 如果使用Spring Schedule定时轮询数据库,则 - 消耗系统 阅读全文
posted @ 2023-08-02 22:23 Tod4 阅读(65) 评论(0) 推荐(0) 编辑
摘要: #### 【优先队列】【堆排序实现优先队列】[1054. 距离相等的条形码](https://leetcode.cn/problems/distant-barcodes/) 在一个仓库里,有一排条形码,其中第 i 个条形码为 barcodes[i]。 请你重新排列这些条形码,使其中任意两个相邻的条形 阅读全文
posted @ 2023-07-23 11:42 Tod4 阅读(5) 评论(0) 推荐(0) 编辑
摘要: ### RabbitMQ(四)RabbitMQ的确认机制 - 保证消息不丢失、可靠抵达,可以使用`事务消息`,但**性能会下降250倍**,因此引入`确认机制`: - `publisher`:`Confirm Callback确认模式` - `publisher`:`return CallBack` 阅读全文
posted @ 2023-07-22 22:12 Tod4 阅读(39) 评论(0) 推荐(0) 编辑
摘要: ### RabbitMQ(三)整合SpringBoot #### 1 整合RabbitMQ ##### 1 导入依赖 ```xml org.springframework.boot spring-boot-starter-amqp ``` ##### 2 查看容器的自动配置 - 给容器自动配置了`R 阅读全文
posted @ 2023-07-22 22:11 Tod4 阅读(15) 评论(0) 推荐(0) 编辑
摘要: ### RabbitMQ(二)Exchange #### 1 RabbitMQ的运行机制 - AMQP中消息的路由过程和JMS存在一些差别,AMQP中增加了`Exchange`和`Binding`的角色 - 生产者把消息发布到`Exchange`上,消息最终到达队列而被消费者接受,而`Binding 阅读全文
posted @ 2023-07-22 22:11 Tod4 阅读(13) 评论(0) 推荐(0) 编辑
摘要: ### RabbitMQ(一)简介 #### 1 简介 - 大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力 - 消息中间件有两个重要概念: - 消息代理 - 目的地 消息发送者发送消息之后,将由消息代理接管,消息代理保证消息传递到指定目的地 - 消息队列有两种形式的目的地 - `队 阅读全文
posted @ 2023-07-22 22:10 Tod4 阅读(15) 评论(0) 推荐(0) 编辑
摘要: ### MySQL(二十一)MVCC多版本并发控制 #### 1 什么是MVCC - MVCC(Multiversion Concurrency Control)多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制,使得在InnoDB事务隔离级别下执行`一致性读`操作有了保障。 - 就是 阅读全文
posted @ 2023-07-18 09:07 Tod4 阅读(32) 评论(0) 推荐(0) 编辑
摘要: #### 1 MySQL(十五)分析优化器的查询计划:Trace ​ `OPTIMIZER_TRACE`是mysql 5.6引入的一项追踪功能,它可以追踪优化器做出的各种决策(比如访问表的方法、各种开销计算和各种转换等等),并将结果记录到表`INFORMATION_SCHEMA.OPTIMIZER_ 阅读全文
posted @ 2023-07-18 09:03 Tod4 阅读(66) 评论(0) 推荐(0) 编辑
摘要: #### [75. 颜色分类](https://leetcode.cn/problems/sort-colors/) 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示 阅读全文
posted @ 2023-07-17 10:11 Tod4 阅读(6) 评论(0) 推荐(0) 编辑
摘要: #### 01背包问题 ​ `题目描述`:有n件物品,每件物品的重量为w[i],价值为c[i]。现在有一个容量为V的背包,问怎么选取物品放入背包,能使得背包内的总价值最大。其中每件物品只能放入一次。 ​ `样例`: ``` n = 5, V =8 w[i] = 3, 5, 1, 2, 2 c[i] 阅读全文
posted @ 2023-07-16 22:54 Tod4 阅读(17) 评论(0) 推荐(0) 编辑
摘要: JVM(十六)七种垃圾收集器 阅读全文
posted @ 2023-07-16 14:43 Tod4 阅读(56) 评论(0) 推荐(0) 编辑
摘要: JVM (十五)垃圾回收器概述 1 垃圾回收器概述 2 垃圾回收器分类 3 GC的性能指标 4 垃圾回收器的发展迭代史5 垃圾回收器的组合关系 6 查看默认的垃圾回收器 阅读全文
posted @ 2023-07-16 14:40 Tod4 阅读(38) 评论(0) 推荐(0) 编辑
摘要: ### JVM(十四)垃圾回收的一些额外点 #### 1 System.gc()的理解 - 在默认情况下,通过`System.gc()`或者`Runtime.getRuntime().gc()`的调用,会显式触发`Full GC`,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存 - `S 阅读全文
posted @ 2023-07-12 16:16 Tod4 阅读(22) 评论(0) 推荐(0) 编辑
摘要: ### JVM(十三)分代收集、增量收集以及分区算法 #### 1 分代收集算法 ​ 前面的所有算法中,没有一种算法能够完全替代其他算法,它们都有自己独特的优势和特点,分代收集算法应运而生: - 分代收集算法对不同生命周期的对象采取不同的收集方式,一般划分为新生代和老年代,以便提高回收效率 > 在J 阅读全文
posted @ 2023-07-12 10:38 Tod4 阅读(83) 评论(0) 推荐(0) 编辑
摘要: ### JVM(十二)垃圾清除阶段算法 - 垃圾清除阶段是指,当成功区分出内存区域中的存活对象和死亡对象之后,GC接下来的任务就是**执行垃圾回收,释放掉无用对象所占用的内存空间,以便有足够的可用内存空间为新对象分配内存**。 - 目前在JVM中比较常见的三种垃圾收集算法是`标记-清除算法(Mark 阅读全文
posted @ 2023-07-12 10:38 Tod4 阅读(23) 评论(0) 推荐(0) 编辑
摘要: ### JVM(十一)垃圾回收概述和垃圾标记阶段的算法 #### 1 Java垃圾回收概述 - **什么是垃圾?** - 垃圾是在**程序运行过程中不被任何指针指向的对象**,这个对象就是需要被回收的垃圾 - **为什么要进行垃圾回收?** - 如果不及时对内存中的垃圾进行清理,那么这些垃圾对象所占 阅读全文
posted @ 2023-07-12 10:37 Tod4 阅读(24) 评论(0) 推荐(0) 编辑
摘要: ### JVM(十)StringTable #### 1 String的基本特性 - **String即字符串,通过一对引号""表示**,String创建的方式主要有 - String s = "abc"; // 字面量的方式 - String s = new String("abc"); // 类 阅读全文
posted @ 2023-07-12 10:37 Tod4 阅读(15) 评论(0) 推荐(0) 编辑
摘要: ### JVM(九)执行引擎 #### 1 执行引擎概述 - 执行引擎是Java虚拟机核心的组成部分之一 - 虚拟机是一个相对于物理机的概念,这两种机器都有代码执行能力,区别在于**物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的**,而**虚拟机的执行引擎是由软件自主实现的,因此 阅读全文
posted @ 2023-07-12 10:36 Tod4 阅读(97) 评论(0) 推荐(0) 编辑
摘要: ### JVM(八)对象的实例化内存布局与访问定位 #### 1 对象创建的方式 - **new** - 变形1: - **Class的`newInstance()`**,即反射 > Class的`newInstance`反射的使用较为苛刻,要求只能调用空参的构造器,而且权限必须是public > 阅读全文
posted @ 2023-07-12 10:36 Tod4 阅读(15) 评论(0) 推荐(0) 编辑
摘要: ### JVM(七)方法区 #### 1 方法区 - 方法区和Java堆一样,是各个**线程共享**的内存区域,**用于存储编译后的字节码中的类的机构信息,如运行时常量池、属性方法数据以及方法、构造器的字节码** - 方法区在JVM启动的时候被创建,并且它的实际物理内存空间和Java堆区一样都是可以 阅读全文
posted @ 2023-07-12 10:35 Tod4 阅读(31) 评论(0) 推荐(0) 编辑