- 博客(119)
- 收藏
- 关注
原创 golang基础语法(七)if-else、for、range、switch、goto
在编程中,变量的作用范围越小,所造成的问题可能性越小,每一个变量代表一个状态,有状态的地方,状态就会被修改,函数的局部变量只会影响一个函数的执行,但全局变量可能会影响所有代码的执行状态,因此限制变量的作用范围对代码的稳定性有很大的帮助。关键字以及另一代码块,这个代码块中的代码只有在条件不满足时才会执行,if 和 else 后的两个代码块是相互独立的分支,只能执行其中一个。else if 分支的数量是没有限制的,但是为了代码的可读性,还是不要在 if 后面加入太多的 else if 结构。
2025-09-28 17:48:49
1004
原创 golang基础语法(六)Map
map 是一种无序的键值对的集合。map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过map是无序的,我们无法决定它的返回顺序,这是因为 map 是使用hash表来实现的。
2025-09-28 17:10:48
1218
1
原创 算法专题(三)01背包问题理论
因为是二维数组,我们从递推公式也可以看出,[i][j]只和[i][j-1]、[i-1][j-weight[i]]有关,意思就是数据只会从左上来,所以我们只考虑第一行和第一列。就是说硬塞进物品i,容量得减去第i个物品的重量,剩下的也是0到i-1中的物品,然后再加上i的价值,最后赋值给dp[i][j]dp[i][j]表示第0个到第i-1个的物品中放入容量为j的背包中的最大价值。就是说容量没变化,但是只放入了0到i-1中的物品,最后赋值给dp[i][j]分为两个部分:不放物品i和放物品i。资源来源:代码随想录。
2025-09-26 08:59:47
407
原创 golang基础语法(五)切片
切片(Slice)与数组一样,也是可以容纳若干类型相同的元素的容器。与数组不同的是,无法通过切片类型来确定其值的长度。每个切片值都会将数组作为其底层数据结构。我们也把这样的数组称为切片的底层数组。切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型。这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内(左闭右开的区间)。Go语言中切片的内部结构包含地址、大小和容量,切片一般用于快速地操作一块数据集合。(a[:2])
2025-09-25 20:48:58
906
原创 golang基础语法(三)常量、指针、别名、关键字、运算符、字符串类型转换
Go语言中的常量使用关键字const定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式。声明格式(type类型可以省略):例如:和变量声明一样,可以批量声明多个常量:常量间的所有算术运算、逻辑运算和比较运算的结果也是常量对常量的类型转换操作或以下函数调用都是返回常量结果:len、cap、real、imag、complex 和 un
2025-09-23 21:57:12
967
原创 golang基础语法(二)类型
1047483647 对应的十六进制为 0x3e6f54ff,转为 int16 类型后,长度缩短一半,也就是在十六进制上砍掉一半,变成 0x54ff,对应的十进制值为 21759。UTF-8 是编码规则,将 Unicode 中字符的 ID 以某种方式进行编码,UTF-8 的是一种变长编码规则,从 1 到 4 个字节不等。&&(AND),||(OR)是具有短路行为的,如果运算符左边的值已经可以确定整个布尔表达式的值,那么运算符右边的值将不再被求值。将 s2 追加到 s1 尾部并生成一个新的字符串 s。
2025-09-21 14:38:20
721
原创 golang基础语法(一)变量
在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量。int8(占1字节),int16(占2字节),int32(占4字节),int64(占8字节),在32位系统下int(占4字节),在64位系统下int(占8字节)在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,函数的参数和返回值变量都属于局部变量。匿名变量不占用命名空间,也不会分配内存。
2025-09-20 12:19:21
731
原创 并发编程(七)线程池一
线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如 Tomcat。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。
2025-08-14 16:39:34
662
原创 并发编程(六)CAS、Atomic
什么是 CASCAS(Compare And Swap,比较与交换),是非阻塞同步的实现原理,它是CPU硬件层面的一种指令,从CPU层面能保证"比较与交换"两个操作的原子性。CAS指令操作包括三个参数:内存值(内存地 址值)V、预期值E、新值N,当CAS指令执行时,当且仅当预期值E和内存值V相同时,才更新内存值为 N,否则就不执行更新,无论更新与否都会返回否会返回旧的内存值V,上述的处理过程是一个原子操作// 内存中当前的值,使用 volatile 保证可见性/**
2025-08-08 14:28:01
1152
原创 并发编程(五)ThreadLocal
ThreadLocal工具类用来提供线程内部的局部变量。线程内部的局部变量通常存储在Java虚拟机栈的局部变量表中这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。特性:线程安全: 在多线程并发的场景下保证线程安全我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量线程隔离: 每个线程的变量都是独立的,不会互相影响。
2025-08-08 11:22:14
1217
原创 并发编程(四)Callable、Future、FutureTask
直接继承Thread或者实现Runnable接口都可以创建线程,也就是不能获取执行完的结果。
2025-08-07 19:22:45
806
原创 并发编程(三)线程模型和通信
就是通过调用LockSupport.park()和 LockSupport.unpark()实现线程的阻塞和唤醒的。
2025-08-07 17:27:44
783
原创 算法专题(二)回文链表
快指针一次走2步,慢指针一次走一步,当快指针走到null代表为偶数,快指针的next是null代表为奇数,因此得到以下代码。我们把整个链表看成镜像,因此我们只需要把左右进行对比,这样就会出现一个奇偶数问题,因此判断方法采用快慢指针。移动之后,如果是奇数。此时slow在中位数,要向下移动一位,因为中位数是谁都无所谓。然后就需要把后半段链表进行反转,此时要把快指针放到头结点。然后一一进行值对比,如果对不上直接false。
2025-08-06 17:01:02
189
原创 MongoDB学习专题(五)索引
索引是一种用来快速查询数据的数据结构。B+Tree就是一种常用的数据库索引数据结构,MongoDB采用B+Tree 做索引,索引创建在colletions上。MongoDB不使用索引的查询,先扫描所有的文档,再匹配符合条件的文档。使用索引的查询,通过索引找到文档,使用索引能够极大的提升查询效率。
2025-08-06 15:53:23
1386
原创 MongoDB学习专题(四)聚合操作
注意:当$sort在管道中的$limit之前立即出现时,$sort操作只会在过程中维持前n个结果,其中n是指定的限制,而MongoDB只需要将n个项存储在内存中。返回与find()集合或视图的查询匹配的文档计数。每个输入待处理的文档,经过$lookup 阶段的处理,输出的新文档中会包含一个新生成的数组(可根据需要命名新key )返回每组最后一个文档,如果有排序,按照排序,如果没有按照默认的存储的顺序的最后个文档。返回每组第一个文档,如果有排序,按照排序,如果没有按照默认的存储的顺序的第一个文档。
2025-08-06 12:59:08
908
原创 MongoDB学习专题(三)数据类型、数组、集合
db.books.updateOne({"author.name":"三毛"},{$push:{tags:{$each:["伤感","想象力"],$slice:-3}}})});timestamp指股票动态消息的产生时间。stock指股票的名称。price指股票的价格,是一个Double类型的字段。为了能支持按时间条件进行快速的检索,比如查询某个时间点之后的数据,可以为timestamp添加索引MongoDB从3.0开始引入可插拔存储引擎的概念。
2025-08-05 21:32:42
731
原创 MongoDB学习专题(一)介绍安装基本操作
Mongo 是 humongous 的中间部分,在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译成“巨大无比的数据库”,更优雅的叫法是“海量数据库”。MongoDB是一款,说到非关系型数据库,区别于关系型数据库最显著的特征就是没有SQL语句,数据没有固定的数据类型。
2025-08-05 14:55:56
848
原创 JVM学习专题(四)对象创建过程
1.jdk1.6 update14开始,在64bit操作系统中,JVM支持指针压缩2.jvm配置参数:UseCompressedOops,compressed--压缩、oop(ordinary object pointer)--对象指针3.启用指针压缩:-XX:+UseCompressedOops(默认开启),禁止指针压缩:-XX:-UseCompressedOops作用:把内存地址的位数压缩减少,可以减少每一个对象的大小,可以放更多的对象触发gc。
2025-08-04 17:07:07
1157
原创 JVM学习专题(三)内存模型深度剖析2
在minor gc过程中对象挪动后,引用如何修改?对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。
2025-08-04 15:04:56
426
原创 SpringCloud之Nacos基础认识-服务注册中心
不使用注册中心就直接用Spring的RestTemplate框架存在问题:如果ip和端口发生迁移,就调不通了因此我们可以手动维护一个注册表,从注册表拉取订单服务信息存在问题:订单服务水平扩容、某个订单服务宕机,没有及时更新注册表因此我们可以利用Nginx存在问题:成千上万的微服务,nginx的配置会非常复杂,运维不便因此我们考虑mysql作为注册中心在mysql里建服务注册表,包含状态1、服务启动调用注册接口,执行insert语句2、调用服务前查询订单服务列表,执行select语句。
2025-08-04 13:14:11
919
原创 SpringCloud之微服务基础认识
这些小型服务各 自独立运行,服务与服务间的通信采用轻量级通信机制(一般基于HTTP协议的RESTful API) ,达到互相协调、互相配合的目的。被拆分后的服务都围绕着具体的业务进行构建,每个服务都能独立地进 行开发、部署、扩展。由于相互独立且采用,因此各个小型服务能够使用不同的语言开发,也可以使用不同的数据存储技术。
2025-08-01 17:16:52
776
原创 集合专题之Map
以下是jkd8的内容,jdk11+略有更新代码展示11.Map存放数据的key-value示意图,一对是放在一个HashMap的中的,因为实现了接口,有些书上也说(如图)我们来看一下Node的源码,是我们HashMap的一个静态内部类存储的是 在EntrySet中,定义类型是Map.entry,但是实际上存放的还是hashmap的Node,因为展开例子讲解:我们定义一个HashMap之后可以查看Set的类型,其实还是Node为了方便程序员遍历,还创建了EntrySet集合。
2025-07-25 15:55:08
1021
原创 Spring底层(二)Spring IOC容器加载流程原理
这个容器也叫IOC容器、Spring上下文ApplicationContext容器:管理Bean对象,通过依赖注入的方式组织Bean之间依赖关系,从而解决业务之间的耦合性之前对象又程序员自己new自己创建,现在Spring注入给我们,这样的创建权力被反转了然后通过getBean()方法去获得Bean然后会把配置信息读到BeanDefinition,把扫描的bean变成BeanDefinition,这是一个接口里面就定义了beanClass、scope、lazy-init...通过set方法导入。
2025-07-18 14:01:32
1059
原创 Spring底层原理(一)核心原理
如果默认的无参构造方法被删了,那么只会选择一个有参构造,如果两个以上就不行了,Spring不知道用哪个,并且有参构造是有值的传入的,这个值是从Spring容器中拿的。调用context.getBean("userService")时,就可以根据"userService"找到UserService类,从而就可以去创建对象了。注解,这个注解是对象变成bean的初始化阶段前,标记这个对象下的方法,然后Bean完全就绪前触发。的,都是创建一个容器,把文件放进去。这是 Spring 提供的另一种初始化机制,与。
2025-07-17 20:49:59
1153
原创 Sharding-Sphere学习专题(四)广播表和绑定表、分片审计
目录一、广播表与绑定表实战1、广播表2、绑定表二、分片审计指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。示例如下:建表:创建实体:创建mapper配置广播规则: 配置方式很简单。 直接配置broadcast-tables就可以了。 # 指定广播表。广播表会忽略分表的逻辑,只往多个库的同一个表中插入数据。 spring.shardingsphere.rules.sharding.br
2025-07-14 23:27:59
955
原创 Sharding-Sphere学习专题(三)数据加密、读写分离
这本质也是一种数据路由的功能。,需要将Master的数据实时同步到slave。例如Canal框架,或者MySQL自己提供的主从同步方案等。ShardingSphere内置了多种加密算法,可以用来快速对关键数据进行加密。最典型的,比如对用户的密码,通常都是需要加密存储的。然后去执行对user表的插入和查询操作,从日志中就能体会到读写分离的实现效果。在插入时,就会在password_cipher字段中加入加密后的密文。的方式,快速实现数据加密。将读写请求分发到不同的数据库,从而减少主库的客户端请求。
2025-07-14 21:32:25
606
原创 Sharding-Sphere学习专题(二)案例和分片策略
就算是有一些数据根本和数据库的数据差得不是一点半点,根本就没必要分片去查浪费性能所以我们需要定制# 使用CLASS_BASED分片算法- 不用配置SPI扩展文件# 指定策略 STANDARD|COMPLEX|HINT# 指定算法实现类。这个类必须是指定的策略对应的算法接口的实现类。//保留配置的分片键。在当前算法中其实是没有用的。@Override/*** 实现自定义分片算法* @param availableTargetNames 在actual-nodes中配置了的所有数据分片。
2025-07-14 17:49:23
1288
原创 Sharding-Sphere学习专题(一)基础认识
Apache ShardingSphere是分布式SQL事务和查询引擎,可以通过数据分片、弹性压缩、加密等能力对任意数据库进行增强ShardingSphere是一款起源于当当网内部的应用框架。ShardingSphere这个词可以分为两个部分:Sharding就是数据分片、Sphere是生态。所以ShardingSphere不是一个单独的框架或者产品,而是一个由多个框架以及产品构成的一个完整的技术生态。核心产品。
2025-07-14 14:21:32
989
原创 雪花算法Snowflake
用一张单独的表,每一行数据维护一个业务表的主键id,每次请求取一个step步长的id(图中1000),再去内存+1,max_id是上一次取出的最后一行的id数,leaf无状态的支持线性扩容。由于强依赖时钟,对时间的要求比较敏感,在机器工作时NTP同步也会造成秒级别的回退,建议可以直接关闭NTP同步。因为雪花算法根据时间戳的顺序来保证ID的唯一性,回拨使得新生成的ID在时间顺序上看起来比之前的ID更“旧”,从而可能被误认为是之前已经生成过的ID,破坏了ID的唯一性原则。
2025-07-13 14:20:15
1423
原创 并发编程(二)深入概念
该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。可以利用join()方法实现,把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行。比如在线程T2中调用了线程T1的join()方法,直到线程T1执行完毕后,才会继续执行线程T2剩下的代码。来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(int)方法来修改优先级,默认优先级是5,优先级高的线程分配时间片的数量要多于优先级低的线程。
2025-07-11 00:03:23
1069
原创 Mysql底层专题(七)MVCC多版本并发控制机制
2. 如果 row 的 trx_id 落在红色部分( trx_id>max_id ),表示这个版本是由将来启动的事务生成的,是不可见的(若 row 的 trx_id 就是当前自己的事务是可见的);3. 如果 row 的 trx_id 落在黄色部分(min_id<=trx_id<= max_id),那就包括两种情况。中,表示这个版本是由还没提交的事务生成的,不可见(若 row 的 trx_id 就是当前自己的事务是可见的);(数组里最小的id为min_id)和已创建的最大事务id(max_id)组成。
2025-07-09 18:32:50
599
原创 Mysql底层专题(六)事务、隔离、锁优化
摘要:数据库事务具备ACID四大特性:原子性、一致性、隔离性和持久性。并发事务处理可能引发脏写、脏读、不可重复读和幻读等问题。为解决这些问题,数据库提供了四种隔离级别(读未提交、读已提交、可重复读和可串行化),不同级别对读一致性问题的控制程度各异,从可能允许所有问题到完全杜绝问题。隔离级别越高,数据一致性越强,但并发性能可能降低。
2025-07-09 15:47:28
955
原创 并发编程(一)基础概念
当一个程序被运行,从加载这个程序的代码至,这时就开启了一个进程就可以视为程序的一个实例。进程=系统进程+用户进程凡是用于完成操作系统的各种功能的进程就是用户进程就是所有由你启动的进程。
2025-07-09 01:15:27
908
原创 Mysql底层专题(五)索引优化实战二
整个过程会读取 t2 表的所有数据(扫描100行),然后遍历这每行数据中字段 a 的值,根据 t2 表中 a 的值索引扫描 t1 表中的对应行(扫描100次 t1 表的索引,1次扫描可以认为最终只扫描 t1 表一行完整数据,也就是总共 t1 表也扫描了100行)。让mysql做join操作时尽量选择NLJ算法,驱动表因为需要全部查询出来,所以过滤的条件也尽量要走索引,避免全表扫描,总之,能走索引的过滤条件尽量都走索引。,二级索引存储数据比主键索引少,所以count(字段)>count(主键 id)
2025-07-07 18:19:10
661
原创 Mysql底层专题(四)索引优化实战一
1、MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。2、order by满足两种情况会使用Using index。(1) order by语句使用索引最左前列。(2) 使用where子句与order by子句条件列组合满足索引最左前列。3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。
2025-07-05 15:24:22
1317
原创 计算机网络(五)数据链路层 MAC和ARP协议
数据链路:在链路的基础上增加一些必要的软件(协议的实现)和硬件(网络适配器)。网络中的主机、路由器都必须实现数据链路层。:在直连网络中定位设备(交换机通过MAC地址表转发帧)。:无法跨路由器解析(跨网络需解析网关MAC),路由器会剥离并替换MAC头部(跨网络时)。),前24位是厂商标识,后24位是设备编号。局域网中的主机、交换机都必须实现数据链路层。解析方式:通过ARP广播询问:“谁是。链路:一个结点到相邻结点的物理线路。在局域网(LAN)中,将。:48位十六进制(如。,实现数据链路层通信。
2025-07-02 14:07:14
477
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅