- 博客(94)
- 收藏
- 关注
原创 java的单例模式是什么?
单例模式通过保证类只有一个实例来实现资源共享。在多线程环境下,通常推荐使用双重检查锁定或枚举方式来实现单例模式,以确保线程安全和高效性。
2025-08-09 17:19:46
192
原创 力扣-128最长连续序列
用额外的空间(HashSet)换取时间复杂度的降低(从 O(n²) 降为 O(n))。每个元素最多被访问两次(一次加入 HashSet,一次查找序列)。来判断当前数字是否为连续序列的“起点”。避免重复计算,确保每个连续序列只遍历一次。通过将数组转为 Set 实现元素去重。查询效率来判断某个数是否存在。快速判断连续的前后项是否存在。用于存储 HashSet。利用 HashSet 的。,是这题的核心优化手段。
2025-08-05 20:44:08
219
原创 力扣-146LRU缓存
参考思路(灵茶山艾府 ):get:就是把key的node移到链表最前端put:如果有这个key的话把他移动到最前端,把value换掉;没有这个key的话把new一个node,并把他放到链表最前端和map里面。
2025-08-04 21:55:27
319
原创 设计一个数据结构,插入删除,根据key查询value,随机返回一个的时间复杂度为O(1)
为了设计一个数据结构,支持插入、删除操作的时间复杂度为 O(1),并且能够根据 key 查询 value,同时还能随机返回一个值,我们可以结合使用和(或动态数组)。
2025-07-29 12:00:24
212
原创 力扣-1049.最后一块石头的重量II
一堆的石头重量是sum,那么我们就尽可能拼成 重量为 sum / 2 的石头堆。这样剩下的石头堆也是 尽可能接近 sum/2 的重量。那么此时问题就是有一堆石头,每个石头都有自己的重量,是否可以 装满 最大重量为 sum / 2的背包。本题其实是尽量让石头分成重量相同的两堆(尽可能相同),相撞之后剩下的石头就是最小的。
2025-07-27 20:42:37
241
原创 力扣-416. 分割等和子集
这道题就是 装满 承载重量为 sum / 2 的背包,价值最大是多少?如果最大价值是 sum / 2,说明正好被商品装满了。
2025-07-27 20:23:21
140
原创 力扣-96.不同的二叉搜索树
j-1 为j为头结点左子树节点数量,i-j 为以j为头结点右子树节点数量。dp[i] += dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]j相当于是头结点的元素,从1遍历到i为止。
2025-07-26 18:43:14
134
原创 力扣-343. 整数拆分
一个是j * dp[i - j],相当于是拆分(i - j),对这个拆分不理解的话,可以回想dp数组的定义。dp[i]:分拆数字i,可以得到的最大乘积为dp[i]。其实可以从1遍历j,然后有两种渠道得到dp[i].可以想 dp[i]最大乘积是怎么得到的呢?一个是j * (i - j) 直接相乘。
2025-07-26 18:20:04
215
原创 力扣-746. 使用最小花费爬楼梯
初始化 dp[0] = 0,dp[1] = 0;3.dp数组如何初始化。1.确定dp数组含义。从前到后遍历cost数组。
2025-07-26 17:25:09
171
原创 本地方法栈有什么用?
本地方法栈(Native Method Stack)用于支持 Java 中的**本地方法(native method)执行,它为 JVM 调用非 Java 编写的函数(如 C 语言)**提供运行环境。本地方法栈是 JVM 调用“非 Java 代码”的专属通道,支撑 Java 与操作系统、底层硬件、高性能库之间的桥梁。
2025-07-25 19:33:49
455
原创 static关键字是什么?静态方法能不能调用非静态成员?对象实例是什么?
staticstatic是 Java 中的静态修饰符,可以用来修饰变量、方法、代码块、内部类。一旦使用static修饰,它就不再属于某个“对象”,而是属于这个类本身。对象实例就是通过类new出来的“具体对象”。类(class)是模板,而对象是用这个模板创建的“实际产品”。关键词属于是否需要对象调用是否可访问非静态成员static方法类❌ 不需要❌ 不可以直接访问非静态方法对象实例✅ 需要✅ 可以访问全部成员静态变量类❌ 不需要✅ 可被所有对象共享实例变量对象✅ 需要。
2025-07-25 17:42:19
279
原创 java面向对象的特性?
封装是指将数据(属性)和行为(方法)包装在一个类中,并对外隐藏内部的实现细节,仅暴露必要的接口。继承是指一个类(子类)可以继承另一个类(父类)的属性和方法,从而实现代码重用和功能扩展。多态是指“同一个接口,不同的实现”。它允许对象以多种形式表现出来。
2025-07-25 17:09:52
217
原创 既然有 HTTP 协议,为什么还要有 WebSocket?
特性HTTPWebSocket通信模式单向,请求-响应双向,实时通信连接时长一次请求一个连接长连接服务端主动推送不支持(需轮询)支持协议开销较大(Header 多)较小(帧结构紧凑)使用场景网页加载、REST API聊天、股票推送、游戏同步、实时协作WebSocket 的出现是为了解决 HTTP 在实时双向通信方面的天然缺陷。它不是用来替代 HTTP,而是针对特定场景(如即时通信、实时数据流)的补充方案。
2025-07-25 11:10:19
585
原创 通讯模式,单工、半双工、全双工的区别是什么?
模式通信方向同一时刻传输方向数量典型应用单工单向1 个广播、电视、打印机半双工双向,但需交替进行1 个对讲机、早期以太网全双工双向,可同时进行2 个电话、现代网络(以太网、WiFi)在实际应用中,选择哪种通信模式需要综合考虑通信效率、成本以及应用场景等多方面因素。
2025-07-25 11:07:56
872
原创 为什么有了HTTP还要用RPC?
HTTP主要适用于Web服务和资源请求,设计上更倾向于简单、面向资源的请求/响应模式。RPC则更适合微服务架构、远程方法调用、服务间通信,它提供了更高效、灵活和易于扩展的方式来处理复杂的跨服务通信,特别是在高性能和高可靠性要求的场景中,RPC相比HTTP更具优势。因此,虽然HTTP在许多应用场景中表现出色,但在需要更复杂、高效和灵活的服务间通信时,RPC是一个更合适的选择。
2025-07-25 11:03:39
591
原创 HTTP1.0,HTTP1.1,HTTP2.0,HTTP3.0的区别是什么?
HTTP/1.0:每个请求需要独立连接,效率低。HTTP/1.1:支持持久连接和管道化,性能有所提升。HTTP/2.0:引入二进制帧和多路复用,解决了队头阻塞,提高了性能。HTTP/3.0:基于QUIC协议,进一步提高连接速度,减少延迟,避免了队头阻塞,并增强了安全性。这些版本的演进主要集中在性能优化和降低延迟方面,尤其是HTTP/2和HTTP/3对大规模互联网应用的提升效果明显。
2025-07-25 10:10:38
657
原创 水平触发(LT) 和 边缘触发(ET)的区别是什么?
水平触发(LT)是更常见和简单的模式,适合多数应用。它会反复通知应用程序,直到事件被完全处理,适用于阻塞 I/O 和简单应用。边缘触发(ET)提供更高的性能,但要求应用程序必须及时处理每个事件,否则会错过事件通知。它适用于高并发、性能要求高的场景,通常与非阻塞 I/O 配合使用。在实际应用中,LT模式通常作为默认选择,容易实现并且适用于大多数场景,而ET模式适用于需要优化性能的高并发应用。
2025-07-23 22:01:59
898
原创 I/O多路复用是什么意思?
I/O 多路复用是一种高效的 I/O 处理机制,它通过允许一个线程监控多个 I/O 操作,避免了传统方法中每个 I/O 操作都需要一个独立线程的开销。它适用于高并发的网络服务器、聊天系统、负载均衡器等场景,能够提高系统的吞吐量和响应能力,减少内存和 CPU 的消耗。常见的 I/O 多路复用技术有select()poll()epoll()和kqueue(),其中epoll()是 Linux 系统中最常用的高效多路复用方法。
2025-07-23 21:56:54
738
原创 高性能网络模式:Reactor 和 Proactor?
Reactor 模式适合同步 I/O场景,通过事件驱动和 I/O 多路复用处理大量并发连接,应用程序需要主动等待和处理每个 I/O 事件。Proactor 模式适合异步 I/O场景,操作系统或底层库负责执行 I/O 操作,应用程序只需要处理完成后的回调,减少了等待和阻塞,提高了性能。Reactor 和 Proactor 都是高性能网络编程中的重要设计模式,选择哪种模式取决于 I/O 操作的同步或异步特性、操作系统的支持以及应用场景的需求。
2025-07-23 21:48:05
663
原创 一致性哈希是什么,使用场景,解决了什么问题?
一致性哈希是一种有效的分布式哈希算法,广泛应用于分布式缓存、负载均衡、分布式数据库、消息队列等场景。它的核心优势是能够在系统扩展和节点变化时,最小化数据迁移和负载不均衡的问题。通过使用一致性哈希,系统能够更平滑地处理节点的增加或删除,同时确保性能和数据的高可用性。
2025-07-23 21:14:24
660
原创 零拷贝是什么意思?哪里用到了?
可以将磁盘文件直接映射到进程的虚拟内存空间,避免了将文件从磁盘加载到内核缓冲区,再从内核缓冲区复制到用户空间的多次拷贝操作。零拷贝的核心思想是让数据尽量在内核空间和用户空间之间传输时不经过不必要的拷贝,而是直接在内存中进行操作。这种多次拷贝导致了不必要的内存使用和 CPU 开销,尤其是在处理大文件或高吞吐量的网络通信时,零拷贝可以显著减少这些冗余操作。:通过减少内存的复制次数,减少了 CPU 的负担,提高了 I/O 操作的效率,尤其在处理大数据量时。通常在操作系统中,数据传输的过程涉及多个步骤和内存拷贝。
2025-07-23 21:02:42
460
原创 select、poll、epoll的区别?
select:适用于低并发、小规模的应用,简单但性能差,存在文件描述符数量限制。poll:比select更灵活,没有文件描述符限制,但在高并发情况下仍然会面临性能瓶颈。epoll:适用于高并发、大规模的应用,提供最好的性能,尤其适合 Linux 系统。
2025-07-23 20:55:55
204
原创 java怎么实现网络IO高并发编程?
使用非阻塞 I/O 和 Selector 管理多个连接,适合大并发的应用。:通过线程池管理多个线程,适合处理连接数量较少的场景。:完全异步的 I/O 操作,适用于非常高并发的场景。
2025-07-23 20:53:14
385
原创 多进程通信在不同场景用哪种通信方式?
本文概述了常见的多进程通信方式及其适用场景。管道适用于父子进程通信,消息队列适合异步通信,共享内存适合大规模数据交换,信号量用于资源管理,套接字支持跨机器通信,内存映射文件适合大文件共享,RPC简化远程调用,信号提供简单通知,数据库用于持久化存储。选择时应考虑实时性、数据量、网络需求等因素,如追求高效选择共享内存或管道,跨网络通信选择套接字或RPC,异步处理选择消息队列。
2025-07-23 20:48:44
759
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅