常用方法
以下是 Java 中 String、List、Map 和 Set 的常用方法总结:
1. String 常用方法构造方法• String() 创建一个空字符串。• String(String original) 根据指定字符串创建新字符串。• String(char[] value) 根据字符数组创建新字符串。
常用方法查询和比较• int length() 返回字符串的长度。• boolean isEmpty() 判断字符串是否为空。• boolean equals(Object anObject) 比较字符串内容是否相等。• boolean equalsIgnoreCase(String anotherString) 忽略大小写比较字符串内容。• int compareTo(String anotherString) 按字典顺序比较字符串。• int compareToIgnoreCase(String str) 忽略大小写按字典顺序比较字符串。
查找和截取• char charAt(int index) 返回指定索引处的字符。• int indexOf(St ...
数据机构java案例
一、数组(Array)与集合(Collection)的转换1. 数组 → 集合• 固定大小 List(不可增删): Integer[] arr = {1, 2, 3};List<Integer> list = Arrays.asList(arr); // 注意:list 是 Arrays 内部类,不能增删元素• 可变 List(推荐): List<Integer> list = new ArrayList<>(Arrays.asList(arr)); // 可增删
• 基本类型数组(需手动转换): int[] arr = {1, 2, 3};List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList()); // Java 8+
2. 集合 → 数组• List → 数组: List<Integer> list = new ArrayList<>();Integer[] arr ...
数据结构java
一、数据结构与核心操作1. 数组(Array)• 核心操作: • 遍历:for (int num : arr) { ... } • 快速访问:arr[i](时间复杂度 O(1)) • 长度:arr.length • 排序:Arrays.sort(arr)(快排,O(n log n)) • 二分查找:Arrays.binarySearch(arr, key)(需先排序)
2. 字符串(String)• 核心方法: • 长度:s.length() • 转字符数组:s.toCharArray()(便于修改字符) • 截取子串:s.substring(start, end) • 分割:s.split(regex) • 拼接:用 StringBuilder(避免频繁创建 String 对象)
3. 动态数组(ArrayList)• 核心方法: • 添加元素:list.add(element)(尾部 O(1),中间 O(n)) • 获取元素:list.get(index)(O(1)) • 删除元素:list.remove(index)(O(n)) ...
高频八股总结4
系统调用过程系统调用是用户程序与操作系统内核交互的核心机制,其过程可分为以下步骤:
一、基本流程
用户程序发起调用用户程序通过标准库(如glibc)调用系统调用封装函数(如open()、read())。
参数准备• 将系统调用号(如SYS_open)存入指定寄存器(如x86的EAX)。• 参数按顺序存入其他寄存器(如x86的EBX、ECX、EDX)。
触发模式切换• 通过软中断(x86的int 0x80)或专用指令(x86-64的syscall)切换到内核态。
内核处理• 中断向量表跳转到系统调用入口(如system_call函数)。• 根据系统调用号查找内核的sys_call_table,执行对应服务例程(如sys_open)。
执行内核操作• 执行权限检查(如文件访问权限)。• 完成请求操作(如打开文件、分配内存)。
返回用户空间• 将结果存入指定寄存器(如EAX)。• 通过iret或sysret指令切换回用户态。
二、关键细节1. 系统调用号• 作用:唯一标识内核服务(如Linux中SYS_read=0, SYS_write=1)。• 映射方式:内核维护系统调用 ...
高频八股总结3
进程和线程进程与线程的对比解析1. 定义与核心区别• 进程:是操作系统进行资源分配的最小单位。每个进程拥有独立的内存空间(代码段、数据段、堆栈等)和系统资源(如文件句柄、CPU时间片),进程之间相互隔离,一个进程崩溃不会直接影响其他进程。• 线程:是CPU调度的最小单位,属于进程的一部分。同一进程内的多个线程共享进程的内存和资源(如全局变量、文件描述符),但每个线程拥有独立的栈空间和寄存器状态。
2. 资源分配与隔离性• 进程: • 资源隔离性强,进程间通信需通过IPC机制(如管道、共享内存、消息队列等)。 • 创建和切换成本高,涉及独立地址空间的分配和上下文保存。• 线程: • 共享进程资源,通信可直接读写共享内存,效率更高。 • 创建和切换开销小,仅需保存线程的栈和寄存器状态。
3. 执行与调度• 进程:由操作系统内核调度,采用抢占式策略(如分时调度)。• 线程: • 调度可由用户程序控制(协作式调度)或由内核控制(抢占式调度)。 • 同一进程内的线程并发执行,适合处理I/O密集型任务或高并发场景。
4. 稳定性与容错性• 进程:崩溃后不影响其他进 ...
高频八股总结2
TCP和UDP的区别TCP(Transmission Control Protocol) 和 UDP(User Datagram Protocol) 是两种常用的传输层协议,它们在数据传输方式、可靠性和适用场景等方面有显著区别。以下是它们的详细对比:
1. 连接方式• TCP: • 面向连接,需要先建立连接(三次握手),再传输数据,传输完成后断开连接(四次挥手)。 • 适用于需要可靠传输的场景。• UDP: • 无连接,直接发送数据,不需要建立连接。 • 适用于对实时性要求高的场景。
2. 可靠性• TCP: • 提供可靠的数据传输,通过确认机制、重传机制、流量控制和拥塞控制确保数据不丢失、不重复、按序到达。 • 适用于对数据完整性要求高的场景,如文件传输、邮件发送等。• UDP: • 不保证可靠性,数据可能丢失、重复或乱序。 • 适用于对实时性要求高、允许少量数据丢失的场景,如视频流、在线游戏等。
3. 数据传输方式• TCP: • 基于字节流,将数据分成多个数据包按序传输,接收端按序重组。 • 适合传输大量数据。• UDP: • 基于数据报,每个数据包独 ...
高频八股总结1
线程池的原理,核心线程与非核心线程的区别?线程池是一种多线程处理形式,其核心思想是预先创建一定数量的线程,这些线程存放在一个“池”里,当有任务提交时,就从池中选取一个空闲线程来执行任务。执行完毕后,线程并不会销毁,而是回到池中等待下一次的任务。线程池的好处在于减少在创建和销毁线程上所花的时间和资源消耗,提高了程序响应速度和并发量。
线程池的原理
任务提交:当有任务提交到线程池时,线程池会首先检查核心线程是否都在执行任务。如果核心线程有空闲,则直接使用核心线程执行任务;如果核心线程都在忙,则将任务放入任务队列中等待。
任务队列:如果任务队列未满,任务会被放入队列中等待执行;如果任务队列已满,线程池会检查当前线程数是否小于最大线程数。如果小于,则创建非核心线程执行任务;如果已达到最大线程数,则根据拒绝策略处理任务。
线程复用:线程执行完任务后,会继续从任务队列中获取新的任务执行,而不是销毁。这样可以避免频繁创建和销毁线程的开销。
线程回收:非核心线程在空闲超过一定时间(keepAliveTime)后会被回收,而核心线程默认会一直存活,除非设置了allowCoreThreadTimeOut为 ...
项目分布式Session知识点拷打
技术点拆解:分布式Session(Redis + Hash)以下是对该技术点的详细拆解,帮助你应对面试中的深度追问:
1. 核心实现原理技术要点:• 传统Session的问题: • 单机Session:集群环境下用户请求可能路由到不同服务节点,导致登录态丢失。 • Session复制:同步开销大(如Tomcat Session Replication),性能差。• Redis分布式Session方案: • 用户登录后生成唯一Token(如JWT),Token作为Key,用户信息作为Value存入Redis。 • 每次请求通过Token从Redis获取用户信息,实现无状态会话。• Hash结构优化: • String存储:SET session:token1 '{"userId":1,"name":"Alice"}' → 内存占用高,修改需全量更新。 • Hash存储:HSET session:token1 userId 1 name Alice → 支持字段级读写,内存更省(z ...
项目Spring Task知识点拷打
技术点拆解:Spring Task定时任务(订单超时取消)
1. 核心实现原理技术要点:• Spring Task基础: • 基于@Scheduled注解实现定时任务,支持cron表达式、固定速率(fixedRate)、固定延迟(fixedDelay)等配置。 • 示例代码: @Component public class OrderTimeoutTask { @Scheduled(cron = "0 0/5 * * * ?") // 每5分钟执行一次 public void cancelTimeoutOrders() { // 查询超时未支付订单并取消 } } ``` • **项目应用场景**: • **订单超时取消**:用户下单后若未在15分钟内支付,自动取消订单并释放库存。 • **数据统计**:每日凌晨统计前一日订单数据生成报表。 ---#### **2. 高频面试问题与回答示 ...
项目websocket知识点拷打
技术点拆解:WebSocket实时通信(来单提醒/催单)以下是对该技术点的详细拆解,帮助你应对面试中的深度追问:
1. 核心实现原理技术要点:• WebSocket协议:基于TCP的全双工通信协议,服务端可主动推送消息,避免HTTP轮询的资源浪费。• 握手过程:客户端通过HTTP Upgrade请求建立连接(Connection: Upgrade,Upgrade: websocket)。• 项目应用场景: • 来单提醒:商家端实时接收新订单通知。 • 客户催单:用户发起催单后,商家端立即收到提醒。
2. 高频面试问题与回答示例Q1:为什么选择WebSocket而不是HTTP轮询?回答示例:
“HTTP轮询需要客户端频繁发起请求,无效查询多(如90%的请求无新订单),浪费带宽和服务器资源。WebSocket只需一次HTTP握手即可建立长连接,后续双向通信无额外开销,延迟更低(从轮询的秒级降至毫秒级),适合实时性要求高的场景。”
扩展追问:• WebSocket与Server-Sent Events(SSE)的区别:
“SSE仅支持服务端到客户端的单 ...