
Java
文章平均质量分 55
纵然间
资深码农,编程十年有余,曾服务于多家互联网大厂。技术精湛,经验丰富,擅长解决复杂问题。对新技术充满热情,致力于创造卓越的产品体验
展开
-
高并发的写接口如何优化?
确保关键字段,如WHERE条件中的字段和ORDER BY后的排序字段,都已经建立了合适的索引。总结起来,高并发的写接口优化需要从多个方面入手,包括数据库优化、代码优化、JVM调优、引入中间件等。同时,建立完善的监控和日志分析系统也是非常重要的,它可以帮助我们及时发现和解决性能问题。根据应用的特点和监控数据,调整JVM参数,如堆大小、新生代和老年代的比例等。将写操作转化为异步任务进行处理,减少写操作的响应时间,提高吞吐量。根据需要引入中间件,如消息队列、缓存系统、负载均衡器等,以提高系统的整体性能和稳定性。原创 2024-06-06 08:33:05 · 251 阅读 · 0 评论 -
如何对线程同步的特征进行分析?
这是通过某种同步机制(如锁)来实现的,当一个线程获得锁时,其他试图访问同一资源的线程将被阻塞,直到锁被释放。如果没有同步机制,一个线程对共享资源的修改可能对其他线程不可见,导致数据不一致或脏读的情况。在需要保证数据一致性和完整性的关键区域使用同步机制,而在对性能要求较高的区域则尽量减少同步的使用。线程同步还需要保证共享资源的可见性,即当一个线程对共享资源进行修改后,其他线程能够立即看到最新的值。同步机制可以确保在并发环境中,程序的执行结果是一致的,不依赖于线程的执行顺序或调度策略。原创 2024-06-04 08:25:06 · 286 阅读 · 0 评论 -
优秀的 Java 项目,代码都是如何分层的?
在Web项目中,通常对应MVC(Model-View-Controller)模式中的View部分,可能是JSP、Thymeleaf、FreeMarker等模板引擎渲染的页面,或者是前端框架(如Vue、React)构建的单页面应用。负责数据的持久化操作,包括数据的查询、插入、更新和删除等。:根据项目的具体需求,可能还需要定义其他层级,如安全层(Security)、缓存层(Cache)、消息层(Messaging)等。:提供一些通用的、与业务逻辑无关的工具方法或帮助类,如日期处理、字符串处理、文件操作等。原创 2024-05-30 09:13:43 · 582 阅读 · 0 评论 -
java为什么匿名内部类的参数引用时final
如果允许内部类直接引用局部变量而不做final修饰,那么在内部类试图访问这个局部变量时,它可能已经不存在了,这会导致不可预知的行为。但是,有一个重要的注意事项是,这里的"final"并不意味着变量的值是不可变的。但是,如果变量引用的是一个可变对象(如ArrayList或自定义的可变类),那么这个对象本身的状态是可以改变的。在Java中,匿名内部类(以及任何在方法内部定义的局部内部类)只能引用final的局部变量,或者等效于final的局部变量(即实际上没有被修改过的变量)。原创 2024-05-26 09:49:25 · 574 阅读 · 0 评论 -
线程池中submit分发给线程池的task任务是否可以是死循环任务
yield是Java中的一个方法,用于暂停当前正在执行的线程,以便其他线程可以获得执行机会。因此,如果死循环任务中包含了yield调用,那么该线程在执行完当前迭代后,会主动放弃CPU的使用权,从而让其他线程有机会执行。这样可以确保线程池中的线程能够得到充分的利用,并且不会出现资源浪费的情况。这是因为死循环任务会无限期地占用线程,导致线程无法返回到线程池中等待新的任务。当线程被死循环任务长期占用时,线程池中的其他任务将无法获得执行机会,从而导致资源的浪费和可能的性能问题。原创 2024-05-25 10:38:58 · 204 阅读 · 0 评论 -
你知道java线程池的原理吗
线程池在初始化时,会根据用户的配置创建一定数量的线程,并将这些线程放入线程池中等待任务。如果没有空闲线程,且当前线程数量未达到最大线程数量,线程池会创建新的线程来执行任务。如果所有线程都在忙碌,且任务队列已满,那么根据线程池的拒绝策略,可能会拒绝新提交的任务或采取其他措施。当有新任务提交时,线程池会先将任务添加到任务队列中。当任务数量超过最大线程数量时,新提交的任务会在任务队列中等待,直到有线程空闲出来可以处理新任务。当线程池中的线程都在忙碌,且任务队列已满时,线程池需要采取一种策略来处理新提交的任务。原创 2024-05-24 08:34:49 · 389 阅读 · 0 评论 -
Redis挂了,流量把数据库也打挂了,怎么办
对Redis和数据库进行详细的故障排查,找出导致故障的根本原因,并采取措施防止类似问题再次发生。立即启动数据库的备份恢复计划,如果可能,将数据库恢复到Redis故障之前的状态。实施限流策略,限制对数据库的并发请求数量,以防止过多的请求同时打到数据库上。如果数据库支持,可以启用数据库的读写分离,将读请求和写请求分散到不同的服务器上处理,以减轻单个服务器的压力。如果Redis短时间内无法恢复,可以考虑使用其他缓存解决方案,如Memcached,来临时替代Redis,以缓解数据库的压力。原创 2024-05-24 08:19:42 · 544 阅读 · 0 评论 -
既然有java如此完美的编程语言,为什么还有人发明新的编程语言?
通过设计和实现新的语言,研究人员可以探索新的编程概念、验证新的理论模型,并推动计算机科学的发展。有时候,新的编程语言之所以能够获得成功,是因为它们能够吸引一个活跃的开发者社区,这个社区能够提供丰富的库、工具和资源来支持语言的使用和发展。它们可能提供了更高级的抽象、更简洁的语法或者更强大的库支持,从而使得开发者能够更高效地编写代码。尽管Java已经是一种非常优秀的编程语言,但人们仍然有动机去发明新的编程语言来满足不断变化的技术需求、推动计算机科学的发展以及构建更加丰富的技术生态系统。原创 2024-05-23 07:57:03 · 293 阅读 · 0 评论 -
为什么学好JDK,是学好Java的基础
通过深入学习JDK,Java程序员可以掌握Java语言的核心API、理解JVM的工作原理、熟悉开发工具链、跟上技术发展的步伐、深入理解Java语言规范、提高扩展性和兼容性以及获得实践机会。JDK还提供了一系列开发工具,如javac(Java编译器)、java(Java运行器)、javap(Java反编译器)、jdb(Java调试器)等。了解JVM的工作原理,如类加载机制、内存管理(堆、栈、方法区等)、垃圾回收等,对于优化Java程序的性能、解决内存泄漏等问题至关重要。原创 2024-05-22 08:24:40 · 465 阅读 · 0 评论 -
为什么说 Java 程序员到了必须掌握 Spring Boot 的时候
Spring Boot 是基于 Spring 框架构建的,因此它与 Spring 生态系统中的其他组件(如 Spring MVC、Spring Security、Spring Data 等)具有良好的兼容性。由于 Spring Boot 的易用性和强大的功能,它在企业级应用中得到了广泛的应用。Spring Boot 能够简化开发流程、提供丰富的内置功能、支持微服务架构、拥有活跃的社区和丰富的资源、在企业级应用中广泛应用以及与 Spring 生态系统的良好兼容性。原创 2024-05-22 08:22:05 · 718 阅读 · 0 评论 -
Java如何去规避一些没用的类型转换?
通过理解数据类型、使用泛型、类型推断、编写清晰的代码、利用IDE的功能、理解类型转换规则、使用接口、重构代码以及使用设计模式等方法,你可以有效地规避Java中一些没用的类型转换。避免在赋值时进行不必要的类型转换,如果可能,直接在声明时指定正确的类型。这样,你的代码就可以与多种类型的对象一起工作,而无需进行显式的类型转换。如果你的代码中存在大量类型转换,并且这些转换导致了问题或冗余,考虑重构你的代码以简化类型关系。在Java中,类型转换是常见的,但有时可能由于不必要的类型转换而导致代码冗余或错误。原创 2024-05-21 08:53:39 · 487 阅读 · 0 评论 -
List、Set 和 Map 之间的主要区别是什么?
但请注意,这与迭代键的集合并不总是意味着值(value)的集合也是有序的。Set 和 Map 通常不提供基于索引的访问或修改,因为它们不维护元素的特定顺序(除了 LinkedHashSet 和 LinkedHashMap)。选择使用 List、Set 还是 Map 取决于你的具体需求,包括是否需要维护元素的顺序、是否允许重复元素、是否需要存储键值对以及性能要求等。Set 通常用于需要快速查找元素但不关心元素顺序且不允许重复元素的场景。Map 的键(key)不允许重复,但值(value)可以重复。原创 2024-05-20 09:03:15 · 301 阅读 · 0 评论 -
Spring中@Transactional是怎么引入事务AOP的
Spring的@Transactional注解实际上定义了一个切面,该切面包含了启动、提交和回滚事务的通知。:@Transactional注解可以配置多种事务属性,如传播行为(propagation)、隔离级别(isolation)、超时时间(timeout)、只读性(read-only)和回滚规则(rollbackFor、noRollbackFor)。这些属性决定了事务的具体行为。通常,一个事务开始于第一个被@Transactional注解的方法的调用,并结束于该方法返回时(除非发生异常并触发回滚)。原创 2024-05-19 10:17:07 · 268 阅读 · 0 评论 -
java 如何解析网页?
这可以通过正则表达式来完成,但通常建议使用专门的HTML解析库,如Jsoup。Jsoup提供了一种非常方便的方式来解析HTML文档,并可以通过类似于CSS或jQuery的选择器语法来提取和操作数据。如果你需要处理更复杂的网页或进行更高级的网页抓取和解析任务,你可能还需要考虑使用如Selenium这样的浏览器自动化工具来模拟真实的浏览器行为。但是,请注意,频繁或大规模地抓取网页可能会违反网站的使用条款,甚至可能构成法律问题。:一旦你发送了请求并收到了响应,你需要读取响应的内容,这通常是HTML格式的字符串。原创 2024-05-18 09:01:48 · 322 阅读 · 0 评论 -
Java 开发者的编程噩梦,为什么你的代码总有 bug
Java 是一种静态类型语言,语法错误很容易在编译阶段被捕获,但开发者可能会忽略编译器给出的警告信息,导致运行时问题。:糟糕的代码质量,如重复代码、长方法、复杂的类结构等,可能使代码难以理解和维护,也更容易引入 bug。:在进行代码修改或重构时,如果没有充分理解现有代码,或者没有正确地管理代码变更,就可能引入新的 bug。:使用的第三方库可能存在已知的或未知的 bug,这些 bug 可能会影响到你的代码。:在紧张的项目时间表和压力下,开发者可能会忽略某些重要的细节或跳过某些必要的步骤,从而导致 bug。原创 2024-05-15 09:10:55 · 318 阅读 · 0 评论 -
java采用int32作为hashcode,会不会出现更高的碰撞概率?
在Java中,hashCode() 方法通常返回一个 int 类型的值,其范围是从 -2^31(即 -2147483648)到 2^31 - 1(即 2147483647)的整数。如果你正在处理一个非常大的数据集,或者你的数据具有某种特殊的分布,那么你可能需要考虑使用更大的哈希空间或使用更复杂的哈希函数来减少碰撞的概率。哈希表的大小:哈希表的大小(即桶的数量)也会影响碰撞的概率。哈希函数的质量:一个好的哈希函数应该能够均匀地分布哈希值,从而减少碰撞的概率。原创 2024-05-14 11:48:53 · 479 阅读 · 0 评论 -
Java开发转岗有哪些岗位优势
广泛的技能基础:Java作为一种流行的编程语言,为开发者提供了广泛的技能基础。丰富的工具和框架:Java拥有大量的工具和框架,如Spring、Hibernate、Maven等,这些工具和框架能够大大提高开发效率和质量。在转岗到其他岗位时,Java开发者可以充分利用这些工具和框架,快速适应新的工作环境。Java开发转岗到其他岗位时具有广泛的技能基础、跨平台性、大型项目经验、丰富的工具和框架以及强大的社区支持等优势。Java开发者可以利用自己的编程基础和游戏开发经验,转岗到游戏开发岗位。原创 2024-05-11 08:36:51 · 534 阅读 · 0 评论 -
MySQL 索引结构解释一下
在创建索引时,需要根据实际的数据和业务需求来选择合适的索引类型和结构。同时,还需要注意索引的维护和管理,以确保索引的有效性和性能。MySQL的索引结构是用于提高数据检索效率的关键组件。原创 2024-05-10 08:48:33 · 234 阅读 · 0 评论 -
如何分析“慢查询”日志进行 SQL索引优化?
分析MySQL的慢查询日志进行SQL/索引优化是一个重要的性能调优步骤。启用慢查询日志:首先,确保MySQL的慢查询日志已启用。这可以通过设置slow_query_log参数为ON来实现。你还可以设置long_query_time来定义哪些查询被认为是“慢”的。默认值是10秒,但你可以根据需要调整它。确保将慢查询日志记录到一个文件中,以便稍后分析。收集和分析日志:使用mysqldumpslow工具来分析慢查询日志。这个工具可以帮助你快速识别最慢的查询。你可以使用不同的排序选项(如按查询时间、锁定时间等)来查原创 2024-05-08 08:29:29 · 340 阅读 · 0 评论 -
Java 内存分配策略?多个线程同时请求内存,如何分配?
由于堆区是共享的,因此需要采取同步措施来确保线程安全,避免多个线程同时修改同一个对象导致数据不一致的问题。Java的垃圾回收器会自动回收不再使用的内存空间,包括堆区中的对象。在Java中,每个线程都有自己独立的栈空间,用于存储该线程的局部变量和方法调用信息。Java 的内存分配策略主要涉及到三种类型的内存区域:静态存储区(也称为方法区)、栈区和堆区。堆由大片的可利用块或空闲块组成,由Java的垃圾回收器来负责回收不再使用的内存。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。原创 2024-05-08 08:24:49 · 560 阅读 · 0 评论 -
悲观锁和乐观锁,应用中的案例,mysql 当中实现,java 中的实现
在Java中,可以使用CAS(Compare-And-Swap)操作或版本号等方式实现乐观锁。悲观锁假设在数据处理过程中,数据冲突发生的概率很大,因此在数据处理开始之前,就先将数据锁住,其他线程/事务在这段时间内不能对数据进行修改。乐观锁假设在数据处理过程中,数据冲突发生的概率很小,因此不会直接锁定数据,而是在数据更新时检查是否有其他线程/事务修改了数据。在MySQL中,可以使用版本号或时间戳来实现乐观锁。更新后,需要判断受影响的行数,如果为0则表示有其他事务已经修改了数据,需要重新读取数据并尝试更新。原创 2024-05-08 08:21:29 · 300 阅读 · 0 评论 -
volatile 关键字的作用?Java 内存模型?
在Java中,每个线程都有自己的工作内存(也称为本地内存),线程会先从主内存中读取共享变量的值到本地内存,然后在本地内存中进行操作,操作完成后再将结果写回主内存。JMM规定了所有的变量都存储在主内存中,每条线程都有自己的工作内存(与前面提到的本地内存概念类似),线程之间无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成。线程在访问某个变量时,会先从主内存中读取这个变量的值到自己的工作内存中,然后在自己的工作内存中进行操作,操作完成后再将结果写回主内存。原创 2024-05-08 08:16:23 · 304 阅读 · 0 评论 -
linkedList 与 arrayList 区别 适用场景
增加和删除:LinkedList在添加和删除元素(add和remove操作)时效率更高,因为它只需要修改相关节点的指针即可,而不需要移动大量数据。而ArrayList在添加或删除元素时,可能需要移动操作点之后的所有元素,以保持数组的连续性。此外,由于LinkedList可以在任意位置进行高效的添加/删除操作,因此也适用于需要有序集合并对元素进行排序的场景。随机访问:ArrayList在随机访问元素(get和set操作)时效率更高,因为元素在内存中是连续存储的,可以通过下标直接访问。但使用相对不那么方便。原创 2024-05-08 08:09:02 · 452 阅读 · 0 评论 -
内存泄漏与内存溢出的区别
内存泄漏(Memory Leak)和内存溢出(Out Of Memory,简称OOM)是编程中常见的两种内存管理问题,但它们之间存在明显的区别。原创 2024-05-05 09:41:52 · 333 阅读 · 0 评论 -
讲讲JVM运行时数据库区和内存模型
JVM(Java Virtual Machine)运行时数据区,也称为JVM内存模型或JVM内存结构,是Java虚拟机在执行Java程序时用于存储数据和状态信息的内存区域。JVM内存模型(JMM,Java Memory Model)是一种抽象的概念,旨在定义程序中变量的访问规则,以及在并发的情况下如何和何时可以看到其他线程引起的变化。JMM还定义了happens-before原则,这是一个全局的顺序规则,决定了一个操作的结果对另一个操作可见的条件。JMM将内存划分为两个区域:主内存区和工作内存区。原创 2024-05-05 09:39:39 · 452 阅读 · 1 评论 -
数据结构和算法对哪些行业用处大?
数据结构和算法在推荐系统中发挥着关键作用,用于构建适当的数据结构来存储用户和物品之间的关系以及相关属性,并通过高效的算法对大规模数据进行处理和计算,从而为用户提供个性化的推荐内容。图的邻接表和邻接矩阵等数据结构被用于表示网络拓扑结构,而Dijkstra算法和Bellman-Ford算法等则被用于计算最短路径或最佳路径。搜索引擎需要构建庞大的数据结构来存储和索引互联网上的网页,并需要高效的算法来对这些数据进行搜索和排序,以找到与用户查询相关的结果。它们被用于存储、检索、更新和排序数据,确保数据库的高效运行。原创 2024-05-04 07:51:43 · 267 阅读 · 0 评论 -
Java的jvm你应该知道的
类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。3.JConsole 是一个 JMX(JavaManagementExtensions,即 Java 管理扩展)的 JVM 监控与管理工具,监控主要体现在:堆栈内存、线程、CPU、类、VM 信息这几个方面,而管理主要是对 JMXMBean(managed beans,被管理的 beans,是一系列资源,包含对象、接口、设备等)的管理,不仅能查看 bean 的属性和方法信息,还能够在运行时修改属性或调用方法。原创 2024-05-04 07:31:10 · 845 阅读 · 0 评论 -
Java对象创建过程与对象结构
对象头由两部分组成,第一部分存储对象自身的运行时数据:哈希码、GC分代年龄、锁标识状态、线程持有的锁、偏向线程ID(一般占32/64 bit)。第二部分是指针类型,指向对象的类元数据类型(即对象代表哪个类)。1.JVM遇到一条新建对象的指令时首先去检查这个指令的参数是否能在常量池中定义到一个类的符号引用。实例数据用来存储对象真正的有效信息(包括父类继承下来的和自己定义的)对齐填充:JVM要求对象起始地址必须是8字节的整数倍(8字节对齐)Java对象由三个部分组成:对象头、实例数据、对齐填充。原创 2024-05-04 07:26:44 · 257 阅读 · 0 评论 -
什么场景需要 JVM 调优
jmap,JVM Memory Map命令用于生成heap dump文件jhat,JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看jstack,用于生成java虚拟机当前时刻的线程快照。堆内存是JVM中最重要的内存区域之一,用于存储Java对象。深入了解JVM的内部机制和工作原理,如内存模型、类加载机制、垃圾回收算法等,有助于更好地理解JVM调优的原理和技巧。原创 2024-05-04 07:24:15 · 618 阅读 · 1 评论 -
垃圾回收算法
回收时先将 eden 区存活对象复制到一个 survivor0 区,然后清空 eden 区,当这个 survivor0 区也存放满了时,则将 eden 区和 survivor0 区存活对象复制到另一个 survivor1 区,然后清空eden和这个survivor0区,此时survivor0区是空的,然后将survivor0 区和 survivor1 区交换,即保持 survivor1 区为空,如此往复。这里,需要注意的是,如果存活下来的对象 from 区都放不下,则这些存活下来的对象全部进入年老代。原创 2024-05-04 07:19:14 · 389 阅读 · 0 评论 -
对象一定分配在堆中吗?有没有了解逃逸分析技术?
当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,这样就会被其他方法或者线程所引用,这种现象称作指针(或者引用)的逃逸(Escape)。通俗点讲,如果一个对象的指针被多个方法或者线程引用时,那么我们就称这个对象的指针发生了逃逸。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围,从而决定是否要将这个对象分配到堆上。这样的好处有,一、减少内存使用,因为不用生成对象头。」 不一定的,JVM通过「逃逸分析」,那些逃不出方法的对象会在栈上分配。原创 2024-05-03 09:20:38 · 234 阅读 · 0 评论 -
虚拟机为什么使用元空间替换了永久代?
XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;换句话说,就是方法区还是在的,只是实现变了,从永久代变为元空间了。-XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集。-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集。原创 2024-05-03 09:16:35 · 278 阅读 · 0 评论 -
什么是Stop The World 什么是OopMap?什么是安全点?
一旦类加载动作完成的时候,HotSpot就会把对象内什么偏移量上是什么类型的数据计算出来,记录到OopMap。在即时编译过程中,也会在「特定的位置」生成 OopMap,记录下栈上和寄存器里哪些位置是引用。进行垃圾回收的过程中,会涉及对象的移动。为了保证对象引用更新的正确性,必须暂停所有的用户线程,像这样的停顿,虚拟机设计者形象描述为「Stop The World」。」 用户程序执行时并非在代码指令流的任意位置都能够在停顿下来开始垃圾收集,而是必须是执行到安全点才能够暂停。原创 2024-05-03 09:13:29 · 47 阅读 · 0 评论 -
JVM 内存结构
线程私有的,与线程在同一时间创建。栈的大小可以是固定的,或者是动态扩展的。首先通过编译器把 Java源代码转换成字节码,Class loader(类装载)再把字节码加载到内存中,将其放在运行时数据区的方法区内,而字节码文件只是 JVM 的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。原创 2024-05-03 09:08:42 · 733 阅读 · 2 评论 -
tomcat常见考核知识点
Tomcat 服务器Apache软件基金会项目中的一个核心项目,是一个免费的开放源代码的Web 应用服务器(Servlet容器),属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。reloadable :这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重启tomcat的情况下改变应用程序。启动,关闭和其他脚本。原创 2024-05-01 09:22:16 · 367 阅读 · 0 评论 -
Java日志管理梳理
能工作的,必须搭配其他具体的日志实现方案,比如 apache 的 org.apache.log4j.Logger,jdk 自带。logback-core 是其它模块的基础设施,其它模块基于它构建,显然,logback-core 提供了一些关键的。Log4j 是 Apache 的一个开源项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、简单地说,Logback 是一个 Java 领域的日志框架。当输出时,只有级别高过配置中规定的 级别的信息才能真正的输出,这样就很方便的来配置不同情况。原创 2024-04-30 13:37:18 · 550 阅读 · 0 评论 -
Java网络相关面试真题讲解
与传统的多线程/多进程模型比,I/O 多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降低了系统的维护工作量,节省了系统资源。4. 传输层:定义了一些传输数据的协议和端口号(WWW 端口 80 等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与 TCP 特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如 QQ 聊天数据就是通过这种方式传输的)。这是由于 TCP 的半关闭造成的。原创 2024-04-30 11:33:09 · 499 阅读 · 0 评论 -
spring 常见面试真题
这意味着不会出现其他的 Spring 配置类型(比如声明的方式或基于 Java Class 的配置方式)Spring 的 XML 配置方式是使用被 Spring 命名空间的所支持的一系列的 XML 标签来实现的。在传统的编程方式中,业 务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在 bean 内部没有找到相应的构造器或者是无参构造器,容器就会自动选择 byTpe 的自动装配方式。原创 2024-04-30 11:11:41 · 522 阅读 · 0 评论 -
丰巢面试真题讲解系列-NO5
CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。PROPAGATION_NOT_SUPPORTED以⾮事务⽅式执⾏操作,如果当前存在事务,就把当前事务挂起。原创 2024-04-22 11:09:39 · 970 阅读 · 0 评论 -
丰巢面试真题讲解系列-NO4
中⼼化:中⼼化的设计思想在⾃然界和⼈类⽣活中是如此的普遍和⾃然,它的设计思想也很简单,分布式集群中的节点按照⻆⾊分⼯,可以分为两种⻆⾊--“领导”和“⼲活的”,中⼼化的⼀个思路就是“领导”通常分发任务并监督“⼲活的”,谁空闲了就给它安排任务,谁病倒了就⼀脚踢出去,然后把它的任务分给其他⼈;此种情况是强⼀致性的。11.在使⽤索引字段作为条件时,如果该索引是复合索引,那么必须使⽤到该索引中的第⼀个字段作为条件时才能保证系统使⽤该索引,否则该索引将不会被使⽤,并且应尽可能的让字段顺序与索引顺序相⼀致。原创 2024-04-21 09:17:36 · 709 阅读 · 0 评论