- 博客(64)
- 收藏
- 关注
原创 计算机网络,常见开发知识补充
作为一名开发人员,对于计算机网络的一些知识,我们肯定要熟悉,在此,我对剩下的一些网络方向的常见开发知识点作为补充。http:超文本传输协议,是一种用于在网络上传输超文本(如 HTML 页面、图片、视频等)的协议,它允许客户端向服务器发送请求,并接收服务器返回的响应,以实现网页浏览等功能。https:超文本传输安全协议,它是在 HTTP 的基础上加入了 SSL/TLS(安全套接层 / 传输层安全)协议,对数据进行加密处理(传输的都是加密后的数据),确保数据在传输过程中的安全性和完整性。
2025-03-23 00:33:26
605
原创 传输层协议,TCP与UDP,三握四挥,TCP的可靠传输,断点续传技术
另外,也可以用HTTP的分块传输编码可以让发送端将一个大文件分成多个小块进行传输,这些小文件都会被加上序号,大文件会指定文件的总大小。TCP在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还需断开连接。:传输数据时的数据包有大小限制,如果传输的数据过大,还需要将其拆开分批次发送。当遇到磁场炸蛋时,传输电线会被迫切割磁感线,根本上会产生感应电压,影响电压信号的传输,传输信息可能会报错。在传的时候还会有校验码,在传输过程中,如果出现问题,那么校验码就对不上了,那么就要重传。
2025-03-23 00:19:54
599
原创 计算机网络七层架构,详解+分析
累计确认或累计应答:比如 B 发了一个确认号为 ack = 3,它不仅仅表示 A 发送的序号为 2 的包收到了,还表示 2 之前的数据包都收到了。区别:流量控制的窗口大小是 发送方 直接告诉 接收方 的,而拥塞控制的窗口大小按理说就应该是网络环境主动告诉 发送方。,同时通过标准化协议和接口实现不同应用间的互操作性,促进网络应用的多元化发展与创新,为用户带来丰富多样的服务和便利。:在前三层的基础上,加上了端口号,将原本主机到主机的通信,升级为了进程和进程之间的通信(实现了udp)。
2025-03-23 00:17:48
768
原创 一条sql语句在mysql中的执行流程(Mysql基础架构)
基本上会沿查询的流程走,但执行更新的时候要记录日志,此时日志模块有:MySQL 自带的日志模块式 binlog(归档日志) ,所有的存储引擎都可以使用;等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。没有命中缓存的话,SQL 语句就会经过分析器,分析器主要分析你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。
2025-03-23 00:09:21
310
原创 Redis优秀集群架构:
通过将一个Redis节点(主节点)的数据复制到一个或多个其他Redis节点(从节点)来实现数据的冗余和备份。哨兵节点会自动从从节点中选举出一个新的主节点,并通知其他从节点和客户端,实现故障转移。主节点故障时,需要手动切换到从节点,故障恢复时间较长。将客户端请求分发到不同的节点上,有效地分摊节点的压力。可以突破单节点的内存限制,实现更大规模的数据存储。大规模数据存储:通过数据分片,突破单节点内存限制。将数据分散在不同的节点上,从而突破单节点内存限制。依然无法实现数据分片,受单节点内存限制。
2025-03-22 23:36:05
402
原创 Redis进阶:持久化机制、缓存DB一致性、缓存隐患、分布式锁
客户端会向 Redis 集群中多个独立的 Redis 实例节点请求加锁,如果客户端能够从半数以上的 Redis 实例节点申请加锁成功,我们则认为客户端获取分布式锁成功,反之,则认为获取分布式锁失败!:把所有可能存在的请求的值都存放在布隆过滤器中,当用户请求过来,先判断用户发来的请求的值是否存在于布隆过滤器中。在某些分布式缓存系统中,数据可能有多个副本,第一次删除可能没有移除所有的副本。aof是基于内存中的数据进行重写的,重写的时候会把那些历史的无用命令都清除掉,只根据当前一刻内存的数据的最终命令进行重写。
2025-02-24 23:46:16
891
原创 Redis基础
Redis是一个C语言开发的内存数据库,读写速度很快,可用作缓存,Redis 也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。
2025-02-24 23:38:23
959
原创 linux环境下redis的部署安装
本篇无硬性知识点,简单记录一下,本人之前在Linux环境上安装和部署Redis的过程,已经安装完成后Redis 的简单使用。
2025-02-24 23:33:32
263
原创 Mysql之事物隔离与相关锁算法
事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。
2025-02-24 23:27:21
652
原创 Mysql的存储引擎与锁机制
今天呢,我们主要来聊一聊Mysql存储引擎和锁机制。首先,mysql如何把数据组成文件存到硬盘里呢?答案就是:存储引擎的作用。
2025-02-24 23:03:54
516
原创 数据库的大表优化问题
池化设计应该不是一个新名词。我们常见的如java线程池、jdbc连接池、redis连接池等就是这类设计的代表实现。这种设计会初始预设资源,解决的问题就是抵消每次获取资源的消耗,如创建线程的开销,获取远程连接的开销等。就好比你去食堂打饭,打饭的大妈会先把饭盛好几份放那里,你来了就直接拿着饭盒加菜即可,不用再临时又盛饭又打菜,效率就高了。除了初始化资源,池化设计还包括如下这些特征:池子的初始值、池子的活跃值、池子的最大值等,这些特征可以直接映射到java线程池和数据库连接池的成员属性中。
2024-07-30 17:50:44
808
原创 什么是事物?
事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。
2024-07-30 17:46:48
695
原创 线程安全的集合 及设计原理,为什么HashMap不是线程安全的?
当一个线程访问同步方法时,其他线程也访问同步方法,可能会进入阻塞或轮询状态,如使用 put 添加元素,另一个线程不能使用 put 添加元素,也不能使用 get,竞争会越来越激烈效率越低。JDK1.7 的 ConcurrentHashMap 底层采用 分段的数组+链表 实现,JDK1.8 采用的数据结构是数组+链表/红黑二叉树。1、在 JDK1.7 的时候,ConcurrentHashMap(分段锁) 对整个桶数组进行了分割分段(Segment),并发控制使用 synchronized 和 CAS 来操作。
2024-07-28 14:21:09
259
原创 Java线程池
核心线程 是正在处理的线程,处理不完的放在队列里面,队列存放的线程达到临界值,就开启最大线程数,作为可同时执行的线程,加速消耗存储在队列里的线程;假设现在核心线程数是5个,提交了第一个任务但是还没提交第二个任务,那第一个核心线程执行完第一个任务后(没有任务的情况下)会一直处于运行状态,现在如果提交第二个任务,此时不会放到第一个核心线程里执行,而是新建第二个核心线程去执行(目的,要先保证核心线程开启的数量,保证相应速度)如果五个核心线程都满了,再有任务时,才会重新启用第一个空闲但运行的核心线程。
2024-07-28 14:08:01
369
原创 阻塞队列(手动实现)
在队列已满或为空时,使用 lock.wait() 让当前线程进入等待状态,直到被 lock.notifyAll() 唤醒。使用 synchronized 关键字和一个共享的 lock 对象来保证线程安全。当队列已满时等待空闲空间;从队列中移除元素,当队列为空时等待数据可用。满了之后,从中取数据,当队列空了之后,取元素的队列也会发生阻塞。多个线程向队列中添加元素,队列满时则发生阻塞。
2024-07-28 13:57:31
170
原创 线程进程之间的通信,JMM内存模型
Java线程之间的通信由Java内存模型(简称JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。本地内存是JMM的一个抽象概念,并不真实存在。JMM通过控制主内存与每个线程的本地内存之间的交互,来提供内存可见性保证。:线程之间的共享变量存储在主内存(Main Memory)中,步骤1)线程A把本地内存A中更新过的共享变量刷新到主内存中去。步骤2)线程B到主内存中去读取线程A之前已更新过的共享变量。本地内存中存储了该线程以读/写共享变量的副本。JMM定义了线程和主内存之间的抽象关系。
2024-07-28 13:49:55
920
原创 线程与进程的区别与联系,线程状态的切换
操作系统运行一个程序,就开启了一个进程(比如QQ、微信),在进程内部有很多个线程(比如qq的不同功能);进程是操作系统管理资源的基本单位;线程是操作系统调度的基本单位(CPU执行的时间片分配是以线程为基本单位分配。协程:( Java里面没有协程)在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。
2024-07-28 13:46:09
543
原创 synchronized锁解析+synchronized锁的膨胀过程
如果锁方法,那么需要等这个方法全部执行完之后(方法出了线程栈)才解锁释放。
2024-07-28 13:28:52
1041
原创 volatile锁作用特点及其原理解析
volatile可以理解为轻量级的synchronized。但他与synchronized不同,volatile只修饰变量,无法修饰方法和代码块。防止指令重排序;保持线程的可见性(可保障读操作是绝对准确的)作用的解释:1、计算机里面的指令重排序:计算机可能不按照我们写的代码指令顺序执行,而是会自己进行指令重排序(流水线技术)2、可见性:指其中一个线程对共享变量做出操作的时候,其他线程可以准确无误地读出它的改变(注意:final也有防止指令重排序,保障多线程下线程可见性的作用)
2024-07-28 13:08:08
331
原创 死锁的原因及其避免方法,银行家算法
死锁是指在执行过程中,两个或两个以上的进程(或线程)由于竞争资源或彼此通信而阻塞,导致无法继续执行的情况。大白话:在执行过程中,两个及以上的进程或线程相互拥有对方要执行的资源,从而都受到阻塞,程序无法执行。
2024-07-28 02:00:35
452
原创 Java并发编程深入浅出(个人造诣)
今天,我们从最基本的角度来谈谈并发编程,本篇文章主要来聊聊并发编程的整体思路,具体的知识和原来我们放在之后的文章。串行:n个任务 挨个执行并行:多个任务 同一时刻发生 (多个程序可同时运行 多个任务分配到多个处理器上)并发:多个任务 同一时间段发生 (每一时刻只能有一个程序执行,但由于CPU高速运转,使多个任务快速切换,程序交替运行)
2024-07-28 01:55:55
412
原创 JVM之类加载机制
在某些情况下,当类中定义了静态常量,并在其他类中被引用时,可能会触发该类的初始化。特别是当常量在其他类中被直接引用时,JVM 可能会在编译时将其替换为常量值,从而触发类的初始化。
2024-07-26 11:08:19
518
原创 JVM之经典垃圾收集器
收集器能够对扮演不同角色的Region采用不同的策略去处理,这样无论是新创建的对象还是已经存活了一段时间、熬过多次收集的旧对象都能获取很好的收集效果。同样是基于标记-复制算法实现的收集器,也是能够并行收集的多线程收集器,Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能 地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。STW,标记在并发标记过程中产生的垃圾。
2024-07-26 10:59:31
536
原创 JVM之垃圾收集策略与内存分配策略
堆里面存在大量对象实例,垃圾收集器在对堆进行回收前,要先判断哪些对象已死(“死去”即不可能再被任何途径使用的对象)。
2024-07-26 10:52:14
643
原创 JVM之对象的创建过程
reference中存储的是稳定句柄址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要被修改。前提:Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针 作为分界点的指示器。,即我们在程序代码里面所定义的各种类型的字段内容,无论是从父类继承下来的,还是在子类中定义的字段都必须记录起来。为对象分配空间就是把。如果Java堆中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起。
2024-07-26 10:43:30
801
原创 JVM之内存区域的划分与功能
JVM作为一个运行在操作系统之上的虚拟层,负责管理和分配内存给Java应用程序,而这些内存最终都来源于物理内存。首先JVM向操作系统申请内存空间(物理内存),JVM将申请的内存划分为多个区域,包括堆区、栈区、方法区等,这些区域共同构成了JVM的内存空间。JVM通过垃圾收集器(GC)来管理堆内存中的对象。当堆内存中的对象不再被使用时,GC会将其回收以释放内存空间。当JVM需要更多内存时,它会向操作系统申请新的内存空间;当不再需要某些内存时,JVM会将其释放回操作系统。
2024-07-26 10:36:57
662
原创 JVM深入浅出(个人造诣)
如果将字符串数组中改变某一个字符串,那么他本身不可修改,变的是数组中存放的地址,修改后的新地址会指向字符串常量池中新的字符串(如果没有那就在字符串常量池新建)只有将java栈区域中自定义的方法线程转化为本地方法栈中的方法线程,然后调动本地方法栈中的线程方法,才是真正的调动操作系统内核,最终体现为硬件执行。进入就绪态的线程,谁先执行由操作系统决定,不一定按进入就绪态的顺序。在这个栈中同一时刻只能有一个方法运行,方法运行时拷贝入栈,运行完自动出栈(出栈即为标记为无效,下一个方法入栈时,将无效的方法覆盖掉)。
2024-07-26 10:03:42
723
原创 设计模式笔记(一)
Java设计模式是一套在Java程序设计中经过反复使用、多数人知晓的、代码设计经验的总结。它提供了一种框架和结构,旨在帮助开发者更好地理解和设计复杂的系统。设计模式不仅仅是一种语法规则,更是一种思想和方法论,能够帮助开发者更好地分析、设计和实现软件系统,确保代码的重用性、可维护性和可扩展性。这些模式通常被分为创建型模式、结构型模式和行为型模式,每种模式都针对特定的设计问题提供了标准的解决方案。
2024-07-25 22:44:13
766
原创 MyBatis
MyBatis是基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。采用了ORM的思想。
2024-07-23 00:08:55
1008
原创 springMVC常用注解
(完整版示例代码可接前几篇关于springMVC的文章,这是一个整体的演示springMVC的demo),则可用@RequestParam注解,指定一下前端请求参数。作用:把请求中的指定名称的参数传递给控制器中的形参赋值。前端请求参数name与后端方法的参数不一致。这里给一个index.jsp用于前端演示。get方法不可以,必须用post方法。获取前端传过来的参数和id然后通过。此时Integer id就是5。此时,前端传递的可以是。
2024-07-22 23:26:39
673
原创 springMVC前后端不同类型请求参数绑定传递
*** 进行类型转换的方法* @param s 用户输入的内容* @return*/// 判断throw new RuntimeException("请输入内容");// 进行转换try {// 进行转换。
2024-07-18 09:05:16
577
原创 SpringMVC框架
是一种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。
2024-07-17 10:46:56
983
原创 spring框架之AOP注解方式(java代码实例)
*** @Component // 把该类交给IOC去管理* @Aspect // 声明是切面类 == <aop:aspect ref="myXmlAspect">*/@Component@Aspect/*** 通知的方法*/// @Before(value = "切入点的表达式")System.out.println("前置方法执行了!!");
2024-07-17 00:48:02
306
原创 spring框架之AOP 面向切面编程
*** 定义自己的切面类* 自定义切面类 = 切入点(表达式) + 通知(增强的代码)*//*** 通知*/// 发送手机短信// 发送邮件/记录日志/事务管理System.out.println("增强的方法执行了...");/*** 异常*/// 发送手机短信// 发送邮件/记录日志/事务管理System.out.println("增强的方法的异常执行了...");/*** 最终*/// 发送手机短信// 发送邮件/记录日志/事务管理。
2024-07-17 00:41:50
630
原创 java代理模式之JDK动态代理
动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以通过调用代理对象来实现对目标对象的调用。
2024-07-17 00:34:35
330
原创 spring框架:IOC注解形式的管理
之前,我们一直在配置文件里写bean标签,用DI注入的方式,将实现类交给spring工厂去管理,然后通过spring工厂去创建实现类的对象下面我们来看一种新的将实现类交给spring工厂去管理的方式:IOC注解不用再写配置文件,进行注入首先我们来看。
2024-07-16 09:24:26
437
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人