自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 深入线程池

像是服务员和厨师,要是都做请两个人把这两个任务一起做了,等同时来两个客人的时候,两人同时去服务客人,这时就没人做饭了,就是卡死在这一步,这就是一种饥饿。(ForkJoinP,它体现的是一种分治思想,适用于能够进行任务拆分的cpu密集型运算(Fork/Join默认创建cpu核心数相同的线程池。Fork/Join在分治的基础上加入了多线程,可以把每个任务的分解和合并交给不同的线程来完成,进一步提升了运算效率。整个线程池表现为线程数会根据任务量不断增长,没有上限,当任务执行完毕,空闲1min后释放线程。

2024-10-06 16:02:27 851

原创 idea中的Java版本运行错误

在Java 21及更高版本中,qualid字段的类型从JCTree变更为JCFieldAccess。Lombok在早期版本中使用反射访问com.sun.tools.javac.tree.JCTree$JCImport类的qualid字段,该字段在Java 21中的类型发生了变化。这个错误通常是由于升级到Java 21后,Lombok等库无法正确访问内部的Java编译器API导致的。通过升级Lombok版本,就可以解决这个NoSuchFieldError的问题。在项目的依赖项中添加Lombok的最新版本。

2024-10-05 13:10:01 354

原创 深入Volatile

直接上代码子线程从主内存中读取数据放到工作内存,将flag修改为true,但是此时flag的值还没有写回主内存,所以主线程读取的flag依然是false当子线程将flag值写回主内存后,main函数里面的while(true)调用的是系统比较底层的代码,速度较快,没时间再去主存中读取flag所以while(true)读取到的值一直是false(当然主线程可能在一个时刻去主内存读取最新的值,我们无法控制)

2024-10-02 14:57:42 820

原创 并发的几个程:

​ Java Project Loom中引入的一种概念,也称为虚拟线程。它是一种由Java虚拟机(JVM)管理的轻量级线程,相比传统的操作系统线程,纤程的创建和销毁成本更低。​ 它提供了一种同步机制,以确保在任何时刻只有一个线程可以访问被保护的共享资源。​ 是一种并发编程概念,用于管理多个线程之间的互斥访问共享资源的问题。​ 是一种轻量级的并发编程模型,它允许在单个线程内创建多个执行流程。​ 进程内部创建和运行的执行单元,共享进程的地址空间和系统资源。​ Java: Java中的。

2024-09-27 13:50:11 290

原创 Redis实战之 分布式缓存

基于解决单机Redis存在的问题。

2024-09-25 15:29:36 902

原创 Redis实战之 分布式锁

重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如HashTable这样的代码中,他的方法都是使用synchronized修饰的,假如他在一个方法内,调用另一个方法,那么此时如果是不可重入的,不就死锁了吗?所以可重入锁他的主要意义是防止死锁,我们的synchronized和Lock锁都是可重入的。不可重试:是指目前的分布式只能尝试一次,我们认为合理的情况是:当线程在获得锁失败后,他应该能再次尝试获得锁。

2024-09-24 21:43:02 924

原创 Redis实战之 缓存

系统也需要缓存,防止过高的数据访问猛冲系统,导致其操作线程无法及时处理信息而瘫痪。

2024-09-24 14:21:07 445

原创 Redis实战之 实现共享Session:

在这个方案中,他确实可以使用对应路径的拦截,同时刷新登录token令牌的存活时间,但是现在这个拦截器他只是拦截需要被拦截的路径,假设当前用户访问了一些不需要拦截的路径,那么这个拦截器就不会生效,所以此时令牌刷新的动作实际上就不会执行,所以这个方案他是存在问题的。

2024-09-22 22:05:10 571

原创 MySQL深入原理

客户端通过连接器连接 MySQL 服务;连接成功后向 SQL 接口发送 SQL 语句请求;SQL 接口接收到 SQL 查询语句会先去缓存查询,如果命中返回给客户端,否则交给解析器;解析器在拿到 SQL 语句后会判断语法是否正确,正确会生成 SQL 语法树交给优化器,否则报错给客户端;优化器会根据 SQL 语法树生成一个最优的执行计划交给执行器执行;执行器拿到执行计划调用存储引擎来获取数据响应给客户端;完成!!!在执行前需要:① 连接器连接数据库;

2024-09-21 16:09:35 1511

原创 《剑指offer》题解

《剑指offer》

2024-09-12 10:20:29 344

原创 数据库基础原理

(Database)可以理解是一种特殊格式的数据(Database Management System)是对数据库进行管理的一组系统结构化查询语言(Struct Query Language,),是一种允许我们在上查询和操作数据的语言开发者通过完整性约束。

2024-08-27 01:20:06 1005

原创 ThreadLocal原理

Thread类里维护了一个ThreadLocalMap,这个map的key是ThreadLocal,所有说一个Thread里可以有多个ThreadLocal。

2024-08-18 15:36:33 380 1

原创 synchronized原理

JMM是一套在多线程读写共享变量时,对共享变量的可见性、有序性、和原子性的规则和保障。可见性:synchtonized会执行lock原子操作会刷新工作内存中的值。,以及在JVM中将变量存储到内存和从内存中读取变量这样的底层细节。有序性:synchtonized保证只有一个线程中执行同步代码块。原子性:synchtonized上锁保证锁住区域的原子性。,描述了java程序中各种变量(线程共享变量)的。着CPU寄存器、CPU缓存、内存中的任意一个。JMM中的主内存和工作内存都可能。了底层不同计算机的区别。

2024-08-14 22:16:03 707

原创 《Java编程思想》并发篇:

单核CPU只能执行一个Thread类实现了Runnable接口Thread类的线程对象调用start方法来启动一个线程执行线程代码的方法:写一个的子类,去重写run方法,再去创建这个子类的对象,调start方法写一个类,去重写run方法,再去创建这个类的对象,把引用当作参数放入new Thread(),调start方法、用第二种方法比第一种更加灵活,平时使用线程池Runnable是执行工作的独立任务,但它不返回任何值;如果需要,那么可以实现。

2024-08-10 22:47:20 844

原创 《计算机网络 - 自顶向下方法》阅读笔记

应用层、运输层、网络层、数据链路层。

2024-08-07 12:28:47 1158

原创 初涉JVM

字节码、类的生命周期、内存区域、垃圾回收JVM主要功能:JVM的组成:组成;作用:避免相同的内容重复定义,节省空间加载:类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。程序员可以使用java代码拓展的不同的渠道:类加载器在加载完类之后,JVM会将字节码中的信息保存到内存的方法区中,生成一个InstanceKlass对象,保存类的所有信息同时,JVM还会在堆中生成一份与方法去中数据类似的java.lang.Class对象这个堆中对象的信息是少于InstanceKlass对象的,只有需要

2024-07-27 22:25:31 852

原创 操作系统概念(黑皮书)阅读笔记

进程和内存管理部分章节。

2024-07-24 13:16:26 950

原创 初涉Java SPI

SPI(Service Provider Interface)从java 6 开始引入,是一种基于类加载器来发现并加载服务的机制。一个标准的SPI由三个组件构成,SpringBoot与SPI。

2024-07-14 19:58:59 215

原创 初涉项目架构

传统项目指OA、HR、CRM这种,互联网项目则是常见的app首先是受众(服务对象)不同,传统项目是面向公司、学校等群体,互联网项目则是面向全体网民。

2024-07-14 01:07:28 1106

原创 Java Web开发

【黑马程序员Maven全套教程,maven项目管理从基础到高级,Java项目开发必会管理工具maven】https://www.bilibili.com/video/BV1Ah411S7ZE?javaweb:系统架构,http请求响应,servelet开发,cookie,session(只会这些就可以)上面很多技术栈,我都是说学第一遍会用就行,因为真的小白没必要第一遍就搞很透彻(很难很痛苦),就是要搞几遍。Java部分:面向对象后,注重学集合,抛异常,泛型,线程,反射,注解。Java Web开发。

2024-07-06 15:34:51 1519

原创 对象reids

redis并没有直接使用之前学的数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统这个对象系统包含了字符串对象、列表对象、哈希对象、集合对象、有序集合对象这五种,每个对象都用到了至少一种之前的数据结构redis可以在执行命令之前,根据对象的类型来判断一个对象是否可以执行给定的命令。

2024-06-18 15:27:33 589

原创 压缩列表(ziplist)

ziplist是列表键和哈希键的底层实现之一ziplist是redis为了节约内存而开发的是由一系列特殊编码的连续内存块组成的顺序型数据结构,一个ziplist可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值ziplist的构成:ziplist节点的构成:连锁更新:

2024-06-17 15:29:03 630

原创 算法刷题之路(from2024.6.16 每日至少一道)

【代码】算法刷题之路(from6.16,每日至少一道)

2024-06-16 19:41:17 165

原创 整数集合(intset)

intset是reids用于保存整数值的集合抽象数据结构,它可以保存int16_t,int32_t,int64_t整数值,并且保证集合中不出现重复元素。

2024-06-14 14:33:13 309

原创 Redis跳表

跳表是一种有序数据结构,它通过在每个节点维持多个指向其他节点的指针,从而达到快速访问节点的目的跳表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作来批量处理节点大部分人时候,跳表的效率可以和平衡树媲美,而且跳表的实现更方便简单redis只在两个地方使用到了跳表,一个是实现有序集合键,另一个实在集群节点中用作内部数据结构。

2024-06-13 22:35:14 686

原创 redis字典

字典就是map,一种保存键值对的抽象数据结构字典里的每个键都是独一无二的,程序就是通过键来查其对应的值但C语言也没有内置map,因此redis自己构建的字典在Redis中,哈希键(Hash key)是一种特殊的键类型,它是一个字符串,其值是一个哈希表。哈希表中可以存储多个键值对字典就是哈希键的底层实现之一,当一个哈希键包含的键值对比较多,又或者键值对中的元素都是比较长的字符串时,Redis会使用字典作为底层实现哈希键。

2024-06-12 22:29:11 1405

原创 Redis链表

C语言没有内置链表,Redis自己构建的链表。链表在redis中的实现。

2024-06-11 17:33:23 595

原创 简单动态字符串SDS

Redis设计与实现(阅读笔记)

2024-06-10 23:07:10 1296

原创 java注解

Interface其中长似方法的为属性,且定义的属性,使用注解时必须赋值,除非注解中指定了默认值如果只有一个属性,且属性名是value,赋值时就可以不写属性名如果属性为一维数组,使用注解时,数组值只有一个,数组的大括号可以省略属性的类型有要求:String, Class, 枚举类型, 注解类型以上所有类型的一维数组形式。

2024-06-07 14:05:20 358

原创 宝塔面板部署Springboot项目

宝塔面板部署springboot项目

2024-06-05 20:50:21 386

原创 浅识Docker

DockerCompose:通过一个单独的doker-compose.yml模板文件来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。网络:默认情况下,所有容器都是以bridge方式连接到docker的一个虚拟网桥上,且加入自定义网络的容器才可以通过容器名互相访问。镜像不仅包含了应用本身,还包含应用运行所需要的环境、配置、系统函数库。组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。docker最常见的命令就是操作容器和镜像相关的。

2024-06-03 17:31:29 676 2

原创 第二次项目的总结

暂时做了这些,以后有需求和实力,会去持续拓展此项目。

2024-06-02 22:09:13 702

原创 学java路上看到的设计模式

Servlet规范(用到了适配器和模板方法设计模式)设计模式:一种可以被重复利用的解决方案。Filter过滤器(责任链设计模式)Spring(工厂模式和代理模式)23种设计模式分为三种。

2024-06-01 22:50:13 137

原创 Redis(未完)

数据类型:对应了java中的数据类型。

2024-06-01 17:32:37 817

原创 数据结构与算法(数组、链表)

程序=数据结构+算法数据结构是一门研究非数值计算的程序设计中计算机的操作对象以及它们之间的关系和操作的学科。评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的实际运行时间。尽管数据情况不同,时间复杂度不一定相同,但时间复杂度取的是数据最差时的情况。

2024-05-31 20:46:50 943

原创 计算机组成原理,没有原理

3.存储器:分为主存储器(内存储器,cpu能直接访问)和辅助存储器(外存储器,协助主存储器记忆更多的信息,辅助存储器的信息需要导入到主存储器中,才可以被cpu访问)5.控制器:计算机的指挥中心,指挥各个部件自动协调进行工作,现代计算机将运算器和控制器集成到一个芯片上,合成为中央处理器,简称cpu。2.输出设备:将计算机处理的信息以人所能接受的方式输出出来,如显示屏,打印机等。1.输入设备:是指将外部信息以j计算机能读懂的方式输入进来,如键盘、鼠标等。集成到一个芯片上,合成为中央处理器,简称cpu。

2024-05-31 20:45:21 289

原创 好用的ThreadLocl工具

这也就是ThreadLocal工具类的使用场景:需要一个变量作为当前线程内全局共用,可以在不同方法内部直接使用,避免了传递参数的繁琐。(认证和授权时,user相关信息可以借此传递,在拦截器中被使用,总之它可以在一个user的所用操作中被用到)每个线程都可以用ThreadLocal的set方法和get方法对某个局部变量进行操作,实现线程的数据隔离,而且取值很方便。它继承这个所谓弱引用的意义(作用)在于:避免内存泄漏,可以要通过检查键是否被gc回收来实现.注释也写着,它是一个定制化的HashMap。

2024-05-31 16:13:08 681

原创 浅识Linux

先装VMware打开虚拟机软件,创建新的虚拟机,选择自定义安装硬件兼容性(默认选项即可)稍后安装操作系统,只创建一台裸机中间一些按需选择即可。。。。。。。。。。。指定网络连接方式为NAT(有需要虚拟机与宿主机处于同一网段的情况选桥接模式,有需要虚拟机访问外部网络的情况选NAT模式。创建新的虚拟磁盘指定硬盘容量虚拟机差不多配完了,现在装操作系统接下来开启虚拟机,相当于现实中给电脑通电接下来,要处理三件事:第一个:安装目的地第二个:设置root密码第三个:软件选择。

2024-05-31 14:56:19 1286

原创 MySQL

数据库操作:查看当前使用的数据库 select database();create database 数据库名;drop database 数据库名;use 数据库名;create table 表名(字段1 字段1类型[comment 字段1注释],字段2 字段2类型[comment 字段1注释],字段3 字段3类型[comment 字段1注释],……字段n 字段n类型[comment 字段1注释],)[comment 表注释];查询表结构 desc 表名;

2024-05-27 15:13:16 931

原创 数据库设计范式

​ 字段不可拆分。

2024-05-27 15:12:48 145

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除