- 博客(586)
- 资源 (1)
- 收藏
- 关注
原创 【jvm】堆空间分代思想
2.当Eden区空间不足时,JVM会触发一次Minor GC(也称为Young GC),回收Eden区中的不再使用的对象,并将存活的对象复制到From Survivor区或To Survivor区。1.当老年代空间不足时,JVM会触发一次Full GC(也称为Major GC或Old GC),回收老年代中的不再使用的对象。2.这种分代策略将堆内存划分为不同的区域,每个区域存放不同生命周期的对象,从而采用不同的垃圾回收策略。2.新生代用于存放生命周期较短的对象,而老年代则用于存放生命周期较长的对象。
2024-11-03 15:01:27 541
原创 【jvm】Full GC
通过增加老年代的大小或减少年轻代的大小,可以减少老年代空间不足而触发的Full GC。同时,设置合理的初始堆大小和最大堆大小,使得JVM启动时堆内存就达到适合的大小,减少堆扩展时可能的Full GC。:在使用CMS(Concurrent Mark-Sweep)垃圾收集器时,如果在Minor GC之后没有足够的空间在老年代容纳晋升对象,会触发Full GC。:通过对象的复用、使用对象池等方式减少对象的产生,可以降低GC的负担,从而减少Full GC的发生。2.Full GC涉及对整个堆内存(包括。
2024-11-03 14:32:06 116
原创 【jvm】Major GC
4.使用更高效的垃圾回收器:根据应用程序的特点选择合适的垃圾回收器,如G1 GC、ZGC等,这些回收器在性能和停顿时间方面通常优于传统的Serial和Parallel GC。4.在Java 8及之前的版本中,如果永久代(PermGen)空间不足,也可能触发Major GC(尽管这更多与Full GC相关,但在某些情况下可能涉及老年代的回收)。1.Major GC,即老年代GC,指的是发生在老年代(Old Generation或Tenured Generation)的垃圾回收过程。
2024-11-03 14:14:34 227
原创 【jvm】Minor GC
1.调整年轻代大小:通过设置-Xms(初始堆大小)和-Xmx(最大堆大小)来调整堆的大小,确保年轻代有足够的空间,减少Minor GC的频率。3.复制阶段:将标记的存活对象从伊甸园区复制到一个幸存者区(如S0),然后交换两个幸存者区的角色(S0和S1)。4.优化对象分配策略:减少短生命周期对象的创建,尽量重用对象,避免在年轻代中存放大量短生命周期对象,这会增加Minor GC的压力。3.使用合适的垃圾收集器:根据应用的特点选择合适的垃圾收集器,如CMS GC或G1 GC,可以减少长时间的STW停顿。
2024-11-03 13:38:14 215
原创 【jvm】对象分配过程
4.动态对象年龄判断,如果Survivor区中相同年龄的所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象可以直接进入老年代,无须等到MaxTenuringThreadhold中要求的年龄。2.当伊甸园的空间填满时,程序又需要创建对象,JVM的垃圾回收器将对伊甸园区进行垃圾回收(Minor GC/YGC),将伊甸园区中的不再被其他对象所引用的对象进行销毁。8.在老年代,不会轻易变动。1.JVM会调用对象的构造方法,为对象的实例变量进行赋值,并执行其他初始化操作。
2024-11-03 12:35:44 708
原创 【springcloud】服务之间调用失败的重试机制
4.注意事项:在Spring Cloud的某些版本中,由于Feign整合了Ribbon,因此Feign的重试可能会受到Ribbon重试配置的影响。3.为了应对这种情况,Spring Cloud提供了一套完善的重试机制,允许开发者在服务调用失败时自动进行重试,以提高系统的容错能力和用户体验。:开发者可以通过配置文件或编程方式设置LoadBalancer的重试策略,包括最大重试次数、重试间隔等。:开发者可以通过配置Feign的重试器(Retryer)来调整重试策略,包括重试次数、重试间隔等。
2024-11-02 21:38:11 399
原创 【springcloud】gateway网关的作用
3.Spring Cloud Gateway网关在微服务架构中充当着统一入口的角色,通过提供路由转发、负载均衡、安全认证与授权、熔断与降级、请求限流、监控与日志以及过滤器功能等特性,帮助开发人员构建稳定、可靠和安全的微服务架构。2.通过实施网络安全策略,对进出的数据包进行检查和过滤,验证和授权来自源网络的数据包,并阻止未经授权的访问,从而保护微服务免受未经授权的访问和潜在的安全威胁。1.Gateway能够记录请求的详细信息,包括请求路径、请求参数、响应状态等,便于后续分析和故障排查。
2024-11-02 21:26:12 331
原创 【jvm】什么时候对象进入老年代
1.机制:除了上述两种明确的晋升条件外,JVM还会根据新生代空间的使用情况和对象的年龄分布来动态地选择对象进入老年代。具体来说,当Survivor区中年龄从1到n的对象大小之和超过Survivor区的50%时(这个比例也可以通过参数-XX:TargetSurvivorRatio进行调整),新生代中年龄大于等于n的对象将进入老年代。同时,新生代中伊甸园区和幸存者区常采用复制算法,需要经常复制对象到不同的区域,而大对象在复制时开销较大。1.定义:大对象是指占用较大内存空间的对象,如大数组或长字符串等。
2024-10-31 22:35:53 304
原创 【jvm】空间分配担保策略
1.如果老年代的空间不足以容纳新生代中晋升的对象,JVM会触发一次Full GC来回收老年代的空间,以确保有足够的空间来进行下一次Minor GC。1.在Java虚拟机(JVM)中,空间分配担保策略是一种关键的内存管理机制,它确保在进行垃圾收集(GC)时,有足够的空间来处理对象的晋升和分配。2.如果老年代的可用连续空间大于新生代所有对象的总大小或历次晋升的平均大小,那么这次Minor GC就是安全的,不会触发Full GC。2.较高的阈值可以减少对象晋升,但会增加新生代的GC频率。
2024-10-31 22:04:51 507
原创 【jvm】如何设置Eden、幸存者者区的比例
3.如果启用了自适应大小调整,JVM可能会根据应用程序的行为动态调整Eden区和Survivor区的大小,这可能会覆盖-XX:SurvivorRatio的设置。1.Eden区和幸存者区(Survivor spaces,通常称为S0和S1)的比例设置对于堆内存的管理和垃圾收集性能有重要影响。6.设置-XX:SurvivorRatio=8意味着Eden区的大小将是Survivor区大小的八倍,这与默认值相符。1.不同的垃圾收集器可能会对Eden区和Survivor区的比例有不同的默认行为或调整方式。
2024-10-31 21:41:49 549
原创 【jvm】如何设置新生代和老年代的比例
例如,-XX:SurvivorRatio=4表示Eden区与Survivor区的比例为4:1:1(因为有两个Survivor区,所以实际比例是8:2:2,但通常简化为8:1:1来表示)。4.设置方法:例如,要设置新生代与老年代的比例为1:3,可以使用-XX:NewRatio=3。3.默认值:默认情况下,-XX:NewRatio的值为2,表示老年代与新生代的比例为2:1,即新生代占堆内存的1/3,老年代占2/3。3.-XX:NewRatio=3 设置老年代与新生代的比例为3:1,即新生代占堆内存的1/4。
2024-10-30 21:25:31 624
原创 【jvm】为什么Xms和Xmx的值通常设置为相同的?
2.在开发环境中,开发人员可能希望快速启动应用程序并了解应用程序运行时的内存使用情况,此时可以根据实际使用情况逐渐增加最大堆内存设定。3.而在生产环境中,则需要根据应用程序的实际需求和容器限制的内存数量来调整堆内存大小,以确保应用程序的稳定性和性能。2.开发人员无需根据应用程序的实际需求动态调整堆内存大小,而是可以预先设定一个固定的值,从而简化部署和维护工作。3.将 -Xms 和 -Xmx 设置为相同的值可以固定堆内存的大小,从而避免堆内存的动态调整,减少性能开销。
2024-10-30 20:58:05 241
原创 【jvm】堆的默认最大值和默认最小值的计算
虽然JVM会根据物理内存大小计算默认的堆大小,但系统资源限制(如操作系统对进程内存的限制)可能会影响JVM实际能够使用的堆大小。1.JVM(Java虚拟机)堆的默认最大值和默认最小值的计算主要依赖于系统的物理内存大小以及JVM的类型(客户端JVM或服务器JVM)。2.在64位JVM上,如果有128GB或更多的物理内存,默认的最大堆大小最大可以为32GB(或更高,具体取决于JVM版本和配置)。1.默认值通常是物理内存的1/64(在物理内存小于1GB的情况下)或更高的值(在物理内存足够大的情况下)。
2024-10-30 20:50:06 514
原创 【jvm】如何设置堆内存大小
2.性能影响:堆内存的大小会影响JVM的性能。3.监控与调优:建议定期监控JVM的内存使用情况,并根据应用程序的需求和系统的可用内存来进行调优。1.内存单位:在设置堆内存大小时,应使用合适的单位(k、m、g)来表示内存大小。4.参数的值可以使用单位k(表示KB)、m(表示MB)或g(表示GB)。2.在运行配置的VM选项中添加-Xms和-Xmx参数。1.在Java命令后添加-Xms和-Xmx参数。2.-Xms参数用于设置JVM的初始堆内存大小。3.-Xmx参数用于设置JVM的最大堆内存大小。
2024-10-29 21:50:35 743
原创 【mysql】什么是当前读
1.插入操作在某些情况下也可能涉及到当前读,比如通过触发器(Triggers)或其他复杂的插入逻辑,不过一般来说,插入操作更多的是修改表的数据结构而不是读取已有数据。1.在mysql中,当前读(Current Read)是一种读取操作,不仅读取数据,还会对数据加上适当的锁,来保证数据的一致性和事务的隔离性。1.这种查询会对读取的行上加上共享锁(Shared Lock),以防止其他事务对这些行为进行更新或删除操作,但允许其他事务读取这些行。1.删除操作会对涉及的数据行加上排他锁,以确保数据一致性。
2024-10-27 22:34:26 269
原创 【jvm】新生代和老年代
1.新生代是JVM中用于存放新创建的对象的内存区域。2.它被进一步划分为Eden区和两个Survivor区(通常为From和To区,有时也称为S0和S1区)。1.老年代是JVM中用于存放长时间存活的对象的内存区域。2.当对象经过多次Minor GC仍然存活,或者对象太大无法直接放入新生代时,它们会被晋升到老年代。
2024-10-27 16:25:57 387
原创 【rabbitmq】绑定死信队列示例
1.正常队列绑定死信交换机和死信routing_key,正常队列中的消息在特殊情况下变为死信时,将死信通过绑定的死信交换机转移到死信队列中。3.这里演示的是10秒未消费的消息,进入死信队列。3.RabbitMQConfig配置类。2.消息10秒后过期,进入死信队列。
2024-10-27 14:56:49 481
原创 【rabbitmq】什么是死信
当队列中的消息被消费者接收,但消费者通过执行reject或nack操作(并将requeue参数设置为false)拒绝消费该消息时,该消息会变成死信。:如果队列设置了最大长度,并且队列中的消息数量超过了该长度,那么超出部分的消息可能会被标记为死信(这取决于队列的配置,如是否开启死信交换器等)。1.在RabbitMQ中,死信(Dead Letter)主要指的是被消费者接收但未被成功处理,或者因其他原因无法被正常消费的消息。1.延迟消息处理:实现延迟消息投递,例如实现消息的定时投递、消息重试机制等。
2024-10-27 11:39:36 459
原创 【rabbitmq】RabbitMQ中的交换机有哪些类型
2.特点:使用模式匹配来路由消息,路由键和绑定键都支持通配符*(表示一个词)和#(表示一个或多个词)。2.特点:根据完全匹配的路由键(Routing Key)将消息路由到绑定的队列。4.路由规则:消息会被转发到与该交换机绑定的所有队列上,类似于子网广播。2.特点:采用广播模式,将接收到的消息分发给所有绑定到该交换机的队列。4.绑定规则:使用模式匹配的绑定键,例如*.info或#.error。3.应用场景:适用于需要广播消息的场景,例如实时消息发布。3.应用场景:适用于需要根据消息的特定属性进行路由的场景。
2024-10-27 10:29:19 451
原创 【jvm】堆的内部结构
2.在发生Minor GC(年轻代垃圾回收)时,存活的对象会从Eden区和当前的Survivor区(比如S0)复制到另一个Survivor区(比如S1),然后清空原来的区域。1.JVM堆的内部结构主要包括年轻代(Young Generation)和老年代(Old Generation),这种划分是基于对象的存活时间和使用特点来进行的。1.当年轻代中的对象存活时间较长,或者年轻代空间不足无法容纳新生成的对象时,这些对象会被转移到老年代中。2.Eden区是年轻代中最大的区域,用于存放大多数新生成的对象。
2024-10-26 23:27:02 603
原创 【jvm】什么是TLAB
2.TLAB则为每个线程分配一个私有的内存区域,使得线程在分配对象时不再需要竞争全局锁,而是在自己的TLAB中进行分配,提高了对象分配的效率。1.由于TLAB是线程私有的,因此多个线程在分配对象时不会互相干扰,减少了线程之间的竞争,提高了系统的并发性能。1.在传统的JVM内存分配方式中,多个线程在分配对象时需要竞争同一个全局的分配锁,会导致性能瓶颈。4.TLAB的主要目的是提高对象分配的性能,减少线程之间的竞争,以及降低内存分配的开销。1.线程在分配对象时,会优先在自己的TLAB中进行分配。
2024-10-26 22:02:52 626
原创 【jvm】所有的线程都共享堆吗
2.堆内存(Heap)是JVM管理的内存中最大的一块,用于存储对象实例和数组等动态分配的数据。3.它是Java内存管理中非常重要的一块区域,也是垃圾回收(GC)的主要工作区域。6.当对象不再被引用时,垃圾回收机制会自动回收这些无用的对象占用的内存空间。4.由于堆内存被所有线程共享,因此线程可以通过堆内存来进行交互和共享数据。8.堆内存是线程共享的,但在访问和修改共享数据时,仍需要注意线程安全问题。5.当一个对象实例被创建时,它会被分配到堆内存中。1.是的,JVM中所有的线程都共享堆内存。
2024-10-26 19:49:32 527
原创 【jvm】jvm对象都分配在堆上吗
1.方法区(Method Area)或称为永久代(PermGen space,在JDK 8之前)或元空间(Metaspace,在JDK 8及之后)是JVM用于存储类的结构信息的内存区域。如果一个对象可以被拆解为多个标量(如基本数据类型),并且这些标量可以在栈上独立使用,那么JVM会将这些标量直接分配到栈上,而不是创建一个对象。3.方法区不是用于存储对象实例的,但一些与类相关的特殊对象(如类的静态变量、常量池中的字符串和符号引用等)会存储在方法区中。2.当创建一个新的对象时,JVM通常会在堆上为其分配内存。
2024-10-26 19:38:48 422
原创 【rabbitmq】rabbitmq工作模式
2.应用场景:适用于需要根据特定规则分发消息的场景,如系统打印日志,日志等级分为error、warning、info、debug,可以通过这种模式把不同的日志发送到不同的队列。2.应用场景:消息只能被单个消费者处理的场景,如用户通过接收手机验证码进行注册,点击获取验证码后,将验证码放到消息队列,然后短信服务从队列中获取到验证码,并发送给用户。2.应用场景:适用于处理消息较多的情况,如在电商平台中,有多个订单服务,用户下单时,任意一个订单服务消费用户的下单请求生成订单即可。
2024-10-26 14:56:26 713
原创 【面试】RabbitMQ有哪些消息模型
2.消息的发送者(Producer)将消息发送到队列中,消息的接收者(Consumer)从队列中获取消息并消费。2.消息发送者将消息发送到交换机中,并指定一个主题,消息接收者可以根据主题进行订阅,只接收他们感兴趣的消息。1.消息的发送者将消息发送到交换机(Exchange)中,交换机将消息广播给绑定到它的所有队列。1.类似于发布/订阅模型,但可以根据消息的特定主题(Topic)进行订阅。2.客户端发送请求消息到队列中,服务端消费请求消息并返回响应消息给客户端。2.每个消息可以被多个消费者接收。
2024-10-26 14:33:14 562
原创 【面试】rabbitmq的主要组件有哪些?
3.通过信道,客户端可以与Broker进行交互,如发送消息、接收消息、声明交换机和队列等。2.交换机有多种类型,如Direct、Fanout、Topic、Headers等。1.提供了逻辑上的隔离,每个虚拟主机都有自己独立的交换机、队列、绑定和权限机制。1.RabbitMQ支持通过插件扩展其功能,如管理界面、消息追踪、延迟队列等。1.负责接收生产者发送的消息,并根据路由规则将消息分发到一个或多个队列。1.RabbitMQ服务器本身,负责接收、存储和转发消息。2.通过绑定,交换机可以知道将消息发送到哪些队列。
2024-10-26 14:08:04 760
原创 【rabbitmq】实现问答消息消费示例
2.通过调用sse接口,触发rabbitmq向队列塞消息,向前端返回一个sseEmitter对象。3.rabbitmq监听队列消息,消费消息后,向sseEmitter对象写入内容。4.当业务逻辑结束,调用emitter.complete()方法,结束此次会话。1.实现的是一个简单的sse接口,单向的长连接,后端可以向前端不断输出数据。5.这里举一个问答的示例,采用的是work模式,逻辑比较简单,仅供参考。3.rabbitmq配置类。4.controller类。6.service实现类。
2024-10-26 13:09:24 661
原创 【rabbitmq】为什么使用消息队列?
1.消息队列允许生产者和消费者在不同的时间运行,甚至在不同的系统中运行。1.某些消息队列实现可以确保消息按照发送的顺序被接收和处理,这对于需要保证顺序性的应用场景非常重要。1.消息队列通常提供丰富的监控和跟踪功能,可以跟踪消息的状态、处理时间和消费者性能。2.这提高了系统的响应速度和吞吐量,特别是在处理大量请求或长时间运行的任务时。1.消息队列通常具有持久化功能,即使消费者在处理消息时失败,消息也不会丢失。1.消息队列可以很容易地扩展,以处理更多的消息和更大的负载。2.这有助于识别和解决潜在的问题。
2024-10-20 19:32:01 358
原创 【软考】子系统划分
1.如果把相关的功能数据分布到各个不同的子系统中,则会有大量的原始数据需要调用,大量的中间结果需要保存和传递,大量的计算工作将要重复进行,从而使得程序结构紊乱,数据几余,不仅给编码带来很大的困难,而且系统的工作效率也大大降低。2.一个内部联系强的子系统对外部的联系必然很少,所以在划分的时候,应将联系较多者列入子系统内部,而剩余的一些分散、跨度比较大的联系,就成为这些子系统间的联系和接口。1.子系统的设置仅依靠上述系统分析的结构是不够的,因为现存的系统由于各种原因,很可能没有考虑到一些高层次管理决策的要求。
2024-10-12 15:09:33 328
原创 【jvm】方法中定义的局部变量是否线程安全?
2.当一个线程调用一个方法时,该方法的局部变量会被存储在该线程的栈帧中。:如果多个线程通过局部变量引用同一个共享对象(如非线程安全的集合或可变对象),那么对这个共享对象的操作可能会引发线程安全问题。:如果一个局部变量被传递给了其他方法或作为参数传递给其他线程,并且该局部变量引用了可变对象,那么也需要考虑线程安全问题。2.当方法执行完毕后,局部变量就会被销毁,因此不会出现多个线程访问同一个局部变量的情况。1.局部变量只在定义它的方法内部可见,其他方法或线程无法直接访问这些局部变量。
2024-10-11 22:50:31 358
原创 【jvm】垃圾回收是否会涉及到虚拟机栈?
1.标记过程与标记/清除算法一样,但后续步骤不是直接对可回收对象进行回收,而是让所有存活的对象都向一端移动,然后直接清理掉端边线以外的内存。3.复制算法优化了标记清除算法的效率低、内存碎片多问题,但如果对象的存活率很高,那么复制存活对象的时间代价也是不可忽视的。1.由于虚拟机栈是线程私有的,且其内存分配和回收具有确定性(随线程而生、随线程而灭),因此垃圾回收不会涉及到虚拟机栈。2.当这一块的内存用完了,就将还存活的对象复制到另一块内存上,然后把这一块内存所有的对象一次性清理掉。,不需要垃圾回收器的介入。
2024-10-11 22:35:50 458
原创 【jvm】分配的栈内存越大越好吗
1.栈内存的大小对应用程序的性能也有一定影响。过大的栈内存可能会导致垃圾回收更加频繁,因为jvm在回收线程栈时会检查栈上的对象引用。1.栈内存的大小应该与线程的实际需求相匹配,如果栈内存设置得过大,而线程实际使用的栈空间远远小于这个值,就会造成内存浪费。2.对于需要大量线程的开发应用程序,过大的栈内存可能会导致线程创建失败,进而影响应用程序的性能。2.对于局部变量使用较少,递归调用深度较浅的应用程序,过大的栈内存是不必要的。2.过大的栈内存也可能增加CPU的缓存压力,因为更多的内存区域需要被缓存。
2024-10-11 21:45:54 423
原创 【软考】动态规划法
3.此时若用分治法递归求解,则每次遇到子问题都会视为新问题,会极大地降低算法的效率,而动态规划法总是充分利用重叠子问题,对每个子问题仅计算一次,把解保存在一个在需要时就可以查看的表中,而每次查表的时间为常数。5.如果能够保存已解决的子问题的答案,在需要时再找出已求得的答案,这样就可以避免大量的重复计算,从而得到多项式时间的算法。这就是动态规划法的基本思路。1.重叠子问题指用来解原问题的递归算法可反复地解同样的子问题,而不是总在产生新的子问题。,先求解子问题,然后从这些子问题的解得到原问题的解。
2024-10-11 21:02:49 290
原创 【软考】软件过程(开发)模型之喷泉模型
5.无间隙是指在开发活动(如分析、设计、编码)之间不存在明显的边界,也就是说,它不像瀑布模型那样,在需求分析活动结束后才开始设计活动,在设计活动结束后才开始编码活动,而是允许各开发活动交叉、迭代地进行。8.由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的开发人员不利于项目的管理。4.迭代意味着模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统。2.它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。6.喷泉模型的各个阶段没有明显的界线,开发人员可以同步进行。
2024-10-11 10:25:52 144
原创 【软考】设计模式之中介者模式
由于对象之间的交互被集中到中介者对象中,因此当需要修改或扩展对象之间的交互时,只需修改中介者对象,而不需要修改各个对象的代码。4.中介者模式定义了一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。:实现抽象同事类,每一个同事对象在需要和其他同事对象通信时,先与中介者通信,通过中介者来间接完成与其他同事类的通信。:中介者模式将对象之间的多对多交互关系转换为中介者与各个对象之间的一对多关系,简化了对象之间的交互逻辑。1.用一个中介对象来封装一系列的对象交互。
2024-10-10 22:44:55 1115 1
原创 【jvm】调整栈大小,能保证不会出现溢出吗
如果逃逸分析失败,JVM可能会错误地认为某些对象不会被引用,从而将它们分配在栈上,导致栈内存溢出。1.通过调整JVM的线程堆栈大小参数(如-Xss),可以为每个线程分配更多的栈空间,从而在一定程度上减少栈溢出的风险。:在方法体内初始化一个大的数组,尤其是当数组元素是对象引用时,会增加栈帧的大小,可能导致栈内存溢出。:在递归算法中,如果递归调用的深度过大,超过了JVM堆栈的大小限制,就会导致栈溢出。:如果程序中存在大量的方法调用,特别是深度较大的方法调用,会导致堆栈空间被耗尽。
2024-10-10 11:14:10 580
原创 【软考】高速缓存的组成
4.命中时直接对 Cache存储器寻址:未命中时,要按照替换原则决定主存的一块信息放到 Cache 存储器的哪一块里。3.控制部分的功能是判断 CPU 要访问的信息是否在 Cache 存储器中,若在即为命中,若不在则没有命中。1.高速缓存(Cache)、主存(Main Memory)与 CPU 的关系图。2.Cache 存储器部分用来存放主存的部分拷贝(副本)信息。5.其内容是主存局部域的副本,对程序员来说是透明的。1.高速缓存用来存放当前最活跃的程序和数据。2.高速缓存位于CPU 与主存之间。
2024-09-28 20:14:23 183
原创 【软考】存储器的层次结构
1.计算机系统中可能包括各种存储器,如 CPU 内部的通用寄存器组、CPU 内的 Cache(高速缓存)、CPU 外部的 Cache、主板上的主存储器、主板外的联机(在线)磁盘存储器以及脱机(离线)的磁带存储器和光盘存储器等。2.不同特点的存储器通过适当的硬件、软件有机地组合在一起形成计算机的存储体系结构。4.主存与辅存之间的交互功能可由硬件和软件结合起来实现。3.Cache 和主存之间的交互功能全部由硬件实现。
2024-09-28 19:57:45 108
原创 【软考】结构化分析方法概述
3.对于一个复杂的问题,人们很难一下子考虑问题的所有方面和全部细节,通常可以把一个大问题分解成若干个小问题,将每个小问题再分解成若干个更小的问题,经过多次逐层分解,每个最底层的问题都是足够简单、容易解决的,于是复杂的问题也就迎刃而解了。这个过程就是分解的过程。2.抽象是指忽略一个问题中与当前目标无关的那些方面,以便更充分地关注与当前目标有关的方面。随着分解层次的增加,抽象的级别也越来越低,即越来接近问题的解。6.自顶向下的过程是分解的过程,自底向上的过程是抽象的过程。的思想进行分析建模的。
2024-09-27 20:59:35 267
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人