自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进一步分析一下Channel在做什么

那么既然是和操作系统进行内容的传递,那么说明应用程序可以通过通道读取数据,也可以通过通道向操作系统写数据。I/O 多路复用模型本质上是一种阻塞 I/O,进行读操作的 read 系统调用是阻塞的,select 的时候也是阻塞的。在接收到连接请求之前,选择器(位于应用程序)都会一直阻塞在select()方法上:select()在系统内部实际在连接操作系统,操作系统会去检测有没有数据发送过来,没发过来就一直阻塞。接收到数据之后(就绪事件触发),因为通道是连接到操作系统的,而数据已经被发送到操作系统,

2024-03-29 11:44:23 334

原创 根据实例逐行分析NIO到底在做什么

Selector(选择器)是 Channel 的多路复用器,它可以同时监控多个 Channel 的 IO 状况,允许单个线程来操作多个 Channel。Channel在从Buffer中获取数据。选择器、通道、缓冲池是NIO的核心组件。此时选择器内只包含这一条负责监听连接请求的通道答:最最关键的一步是选择器的存在,同时下图第一个红框,ServerSocketChannel属性设置为非阻塞也有一定作用(某客户端发一半数据不发了,卡在那里谁也救不了)选择器监听通道,所监视的正是通道中的事件,key就代表通道中出现

2024-03-29 01:32:53 1046

原创 Spring Cloud 网关Gateway + 配置中心

网络的接口,负责请求的路由、转发、身份校验路由:告诉请求去哪找转发:请求找不到直接带请求过去。

2024-03-25 16:52:54 333

原创 Spring Cloud 注册中心及注册中心的桥梁OpenFeign源码分析

服务提供者定时发送心跳续约,如果注册中心持续没有收到续约,则向服务消费者发送推送变更,将这个服务(电话号)剔除。服务提供者在启动时将自己能提供的服务注册至注册中心,服务消费者可以从注册中心订阅和拉取相关服务信息。,把application.yaml中热更新的属性配置扔到nacos上,方便人去配置。进一步转换,发现item-service还只是微服务名,需要把他转成对应的真正地址。注册中心用于已经拆开的各项服务之间通信,类似作为远程通信的可以动态更新的。使用,把服务的地址扔到nacos上,方便服务找。

2024-03-24 21:49:05 415

原创 JVM类加载全过程

Java虚拟机类加载的全过程,即加载,验证,准备,解析,初始化。

2023-12-05 01:11:59 1199

原创 JVM==>图解字节码指令

getstatic #4. 表示获取System.out 的静态字段, 该静态字段的类型为java.io.PrintStream。该指令执行完成后,操作数栈顶存放的就是System的out静态字段的引用。根据常量池,方法区提供的信息,确定操作数栈深度为2,局部变量表的长度为4就足够用了, 避免浪费。, 但是区别在于, i++ 是返回操作数栈上的值, ++i 是返回局部变量表上的值。short范围以内的数字不会放到常量池中的, 直接进入存入方法区。执行完成后,弹出println栈帧,并清空main操作数栈。

2023-12-04 19:55:13 644

原创 JVM类加载==>类结构与.class文件字节码指令

himagic:魔数minor_version 小版本号major_version 主版本号constant_pool_count 常量池access_flags 访问修饰符(public)this_class 类的包名,类名super_class 父类interfaces_count 接口信息fields 成员变量,静态变量等变量信息method 方法信息attributes_count 附加属性用一段代码:编译成.class字节码文件就是这样(16进制)

2023-12-04 14:50:05 536

原创 JVM:强软弱虚四种引用

下面依次解释五种引用。

2023-12-03 21:51:50 549 1

原创 JVM垃圾回收机制GC

一句话介绍GC: 自动释放不再使用的内存。

2023-12-03 20:53:19 560

原创 JVM内存结构:StringTable与常量池关系

首先看一道题 这就涉及到StringTable和常量池,答案在文末,全做对就不用看了而StringTable的位置在不同版本也有变化 , 我们只探讨jdk1.8版本与StringTable 串池对应的是常量池。

2023-12-03 16:55:45 410

原创 JVM内存结构

虚拟机栈和程序计数器一样, 也是线程私有的, 即线程运行需要开辟一块内存空间-->栈栈帧:栈会在栈上为线程中每个方法的都分配一块空间, 成为栈帧方法执行完栈帧释放, 线程执行完栈释放每个虚拟栈默认分配1024KB大小内存, 也可以通过参数指定1. 不涉及 线程执行完栈内存自动没了 GC主要涉及堆2. 不是 太大线程数量就会受限了3. 那得看变量是线程共享还是线程私有。

2023-12-03 01:36:27 915

原创 ConcurrentHashMap 1.8详解

Java8 中的使用的锁加 CAS 的机制。结构是Node 数组 + 链表 / 红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。

2023-10-20 15:42:26 261

原创 苍穹外卖(八) 使用WebSocket协议完成来单提醒及客户催单功能

WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信(双向传输)——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。HTTP是短连接WebSocket是长连接HTTP通信是单向的,基于请求响应模式WebSocket支持双向通信HTTP和WebSocket底层都是TCP连接既然WebSocket支持双向通信,功能看似比HTTP强大,那么我们是不是可以基于WebSocket开发所有的业务功能?

2023-10-15 21:44:13 1007

原创 苍穹外卖(七) Spring Task 完成订单状态定时处理

是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。应用场景:信用卡每月还款提醒火车票售票系统处理未支付订单入职纪念日为用户发送通知点外卖未按时支付取消订单只要是需要定时处理的场景都可以使用Spring Task。

2023-10-15 21:02:09 713 2

原创 苍穹外卖(五) 微信小程序

小程序是一种新的开放能力,开发者可以快速地开发一个小程序。可以在微信内被便捷地获取和传播,同时具有出色的使用体验。

2023-10-15 15:47:32 753 1

原创 苍穹外卖(六) redis缓存解决数据库压力

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。基于内存存储,读写性能高适合存储热点数据(热点商品、资讯、新闻)企业应用广泛Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。

2023-10-14 21:41:45 544 2

原创 苍穹外卖(四) AOP切面公共字段自动填充及文件上传

的方式为这个Mapper的方法加入注解, (让这个方法成为切入点)作为一个标识表示该操作需要赋值 没有标识就不需要。

2023-10-14 14:43:01 445

原创 AOP面向切面编程

其实就是面向方法编程在调用List()方法时, 会自动调用模板方法对这六种方法计算执行时间都使用这个模板方法, 因此这就是面向方法编程。

2023-10-13 20:46:32 110

原创 苍穹外卖(三) 员工分页及技术实现细节

PageHelper, 扩展SpringMVC框架消息

2023-10-13 17:03:18 202

原创 苍穹外卖(二)新增员工及项目细节

ThreadLocal 并不是一个Thread,而是Thread的局部变量。ThreadLocal为每个线程提供单独一份存储空间,具有线程隔离的效果,只有在线程内才能获取到对应的值,线程外则不能访问。

2023-10-13 14:50:28 149

原创 苍穹外卖(一)

本项目(苍穹外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括 系统管理后台 和 小程序端应用 两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的分类、菜品、套餐、订单、员工等进行管理维护,对餐厅的各类数据进行统计,同时也可进行来单语音播报功能。小程序端主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单、支付、催单等。接下来,通过功能架构图来展示管理端和用户端的具体业务功能模块。

2023-10-12 21:28:54 534

原创 Web后端开发登录校验及JWT令牌,过滤器,拦截器详解

如果用户名正确则成功进入。

2023-10-12 20:49:14 872 3

原创 Cookie 和 Session机制

CookieCookieHTTP 协议自身是属于 "无状态" 协议."无状态" 的含义指的是:默认情况下 HTTP 协议的客户端和服务器之间的这次通信, 和下次通信之间没有直接的联系.但是实际开发中, 我们很多时候是需要知道请求之间的关联关系的.例如登陆网站成功后, 第二次访问的时候服务器就能知道该请求是否是已经登陆过了图中的 "令牌" 通常就存储在 Cookie 字段中.此时在服务器这边就需要记录令牌信息, 以及令牌对应的用户信息, 这个就是 Session 机制所做的工作.

2023-09-25 14:26:44 211

原创 Servlet

Servlet是一种实现动态页面的技术是一组Tomcat提供给程序猿的API,帮助程序猿简单高效的开发一个 web app.允许程序猿注册一个类在Tomcat收到某个特定的HTTP请求的时候执行这个类中的一些代码帮助程序猿解析HTTP请求把HTTP请求从一个字符串解析成一个对象帮助程序猿构造HTTP响应程序猿只要给指定的对象填写一些属性字段, Servlet就会自动的安装HTTP协议的方式构造出一个HTTP响应字符串并通过Socket。

2023-09-21 23:51:30 83

原创 HTTP响应详解, HTTP请求构造及HTTPS详解

响应报头的基本格式和请求报头的格式基本一致类似于ContentTypeContentLength等属性的含义也和请求中的含义一致。

2023-09-16 22:04:28 338

原创 HTTP协议介绍与HTTP请求详解

HTTP (全称为超文本传输协议")是一种应用非常广泛的所谓超文本的含义就是传输的内容不仅仅是文本比如html, css这个就是文本),还可以是一些 其他的资源,比如图片视频音频等二进制的数据HTTP诞生与1991年目前已经发展为最主流使用的一种应用层协议HTTP往往是基于传输层的TCP协议实现的均为TCP, HTTP3基于UDP 实现)目前我们主要使用的还是HTTP1.1和HTTP2.0 .当前课堂上讨论的HTTP以1.1版本为主。

2023-09-13 14:48:54 222

原创 java包装类&简单认识泛型

一般的类和方法,只能使用具体的类型要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。---Java编程思想》对泛型的介绍。

2023-09-09 20:50:18 157

原创 第16章_多版本并发控制MVCC

在MVCC机制中,多个事务对同一个行记录进行更新会产生多个历史快照,这些历史快照保存在Undo Log里。如果一个事务想要查询这个行记录,需要读取哪个版本的行记录呢?这时就需要用到ReadView了,它帮我们解决了行的可见性问题。ReadView就是事务在使用MVcc机制进行快照读操作时产生的读视图。当事务启动时,会生成数据库系统当前的一个快照,InnoDB为所有事务构造了一个数组,用来记录并维护系统当前活跃事务的ID(“活跃"指的就是,启动了但还没提交。

2023-09-08 16:50:28 317

原创 第15章_锁: (表级锁、页级锁、行锁、悲观锁、乐观锁、全局锁、死锁)

为了提高数据库并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但管理锁是很耗资源(涉及获取、检查、释放锁等动作)。因此数据库系统需要在高并发响应和系统性能两方面进行平衡,这样就产生了“锁粒度(Lock granularity)”的概念。对一条记录加锁影响的也只是这条记录而已,我们就说这个锁的粒度比较细;其实一个事务也可以在表级别进行加锁,自然就被称之为表级锁或者表锁,对一个表加锁影响整个表中的记录,我们就说这个锁的粒度比较粗。

2023-09-07 23:56:24 344

原创 第15章_锁: MySQL并发访问相同记录以及从数据操作的类型划分锁(读锁、写锁)

1. 概述事务的隔离性由这章讲述的锁来实现。1. 概述锁是计算机协调多个进程或线程并发访问某一资源的机制. 在程序开发中会存在多线程同步的问题, 当多个线程并发访问某个数据的时候, 尤其是针对一些敏感数据(订单, 金额), 我们就需要保证这个数据在任何时刻最多只有一个线程在访问, 保证数据的完整性和一致性. 在开发过程中加锁是为了保证数据的一致性。

2023-09-06 15:52:10 248

原创 MySQL事务日志--redo, undo详解

事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由锁机制实现。而事务的原子性、一致性和持久性由事务的 redo日志和undo日志来保证。REDO LOG称为重做日志,提供再写入操作,恢复提交事务修改的页操作,用来保证事务的持久性。UNDO LOG称为回滚日志,回滚行记录到某个特定版本,用来保证事务的原子性、一致性。有的DBA或许会认为UNDO是REDO的逆过程,其实不然。

2023-09-06 14:11:01 1440

原创 事务隔离级别

在RR隔离级别下,step1、step2是会正常执行的,step3则会报错主键冲突,对于事务1的业务来说是执行失败的,这里事务1就是发生了幻读,因为事务1在step1中读取的数据状态并不能支撑后续的业务操作,事务1:“见鬼了,我刚才读到的结果应该可以支持我这样操作才对啊,为什么现在不可以”。这里要灵活的理解读取的意思,第一次select是读取,第二次的insert其实也属于隐式的读取,只不过是在mysql的机制中读取的,插入数据也是要先读取一下有没有主键冲突才能决定是否执行插入。

2023-09-05 17:26:59 75

原创 数据库事务概述

的状态就叫做合法的状态。如果事务中的某个操作失败了,系统就会自动撤销当前正在执行的事务,返回到事务操作之前的状态。当我们通过事务对数据进行修改的时候,首先会将数据库的变化信息记录到重做日志中,然后再对数据库中对应的行进行修改。状态时, 一个事务的生命周期才算是结束了. 对于已经提交的事物来说, 该事务对数据库所做的修改将永久生效, 对于处于终止状态的事物, 该事务对数据库所做的所有修改都会被回滚到没执行该事务之前的状态。当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并。

2023-09-05 16:01:53 106

原创 淘宝数据库,主键如何设计的?

聊一个实际问题:淘宝的数据库,主键是如何设计的?某些错的离谱的答案还在网上年复一年的流传着,甚至还成为了所谓的MySQL军规。其中,一个最明显的错误就是关于MySQL的主键设计。大部分人的回答如此自信:用8字节的BIGINT做主键,而不要用INT。错!这样的回答,只站在了数据库这一层,而没有从业务的角度思考主键。主键就是一个自增ID吗?自增ID做主键,简单易懂,几乎所有数据库都支持自增类型,只是实现上各自有所不同而已。自增ID。

2023-09-05 14:17:25 138

原创 第10章_索引优化与查询优化(覆盖索引, 索引下推等)

索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。

2023-09-04 23:36:33 303

原创 EXPLAIN概述与字段剖析

定位了查询慢的sQL之后,我们就可以使用EXPLAIN或DESCRIBE 工具做针对性的分析查询语句。DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的。MySQL中有专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供它认为最优的执行计划(他认为最优的数据检索方式,但不见得是DBA认为是最优的,这部分最耗费时间)。这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方

2023-09-04 20:05:14 1038

原创 MySQL性能分析工具的使用

当我们遇到数据库调优问题的时候,该如何思考呢?这里把思考的流程整理成下面这张图。整个流程划分成了观察(和行动(Action两个部分。字母S的部分代表观察(会使用相应的分析工具),字母 A代表的部分是行动(对应分析可以采取的行动)。我们可以通过观察了解数据库整体的运行状态,通过性能分析工具可以让我们了解执行慢的SQL都有哪些,查看具体的SQL执行计划,甚至是SQL执行中的每一步的成本代价,这样才能定位问题所在,找到了问题,再采取相应的行动。

2023-09-04 14:39:56 453 2

原创 数据库范式以及drop、delete 与 truncate区别

非主键字段(部门地址等)必须完全依赖于主键字段(部门名称 + 姓名), 那么要想满足第二范式则必须保证所有非主键字段都要靠整个主键字段推出 即。2. 插入异常: 因为这是一个以员工为对象的表,当我们想新建一个部门时,如果这个部门还没有员工, 就会导致无法维护这个表的信息。3. 更新异常: 如果我们需要修改部门信息, 必须先找到员工再从员工找到对应部门, 如果遗漏员工则会导致数据更新遗漏。1. 数据冗余: 我们可以看到部门名称相同时, 部门地址也是重复的 因此会重复存储数据。

2023-08-30 09:43:00 113

原创 Leetcode刷题之1658. 将 x 减到 0 的最小操作数

那我们可以反向思考, 假如整个数组的和为sum, 那么我们就可以求中间部分和为sum-x的数字(当然必须连续), 当中间部分的数字同时达到和为sum-x以及长度最长两个要求时, 两侧数字也就达到了和为x以及数量最少的要求.可以看出,这道题本意是从计算两侧和为x 的数字, 要求数量最少,此时我们发现 这正好是滑动窗口的解法。令中间部分求和结果为target。

2023-08-23 20:20:36 237 2

原创 Leetcode刷题之快乐数

我们做这道题可以参考环形链表:142. 环形链表 II - 力扣(LeetCode)从上图可以看到, 当我们不断重复X 操作时计算一定会 "死循环":而判断链表是否有环的过程中必定能找到快慢指针相遇处的节点,注意此处相遇节点和链表头节点同时出发再次相遇节点为链表中环的进入节点我们这里只需要找到第一次的相遇节点就可以

2023-08-20 20:03:56 86

空空如也

空空如也

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

TA关注的人

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