当前位置: 首页 > news >正文

Java 语言特性(面试系列4)

一、数据结构与算法

1. 常见算法
(1)排序算法
算法时间复杂度(平均)空间复杂度稳定性
冒泡排序O(n²)O(1)稳定
选择排序O(n²)O(1)不稳定
插入排序O(n²)O(1)稳定
快速排序O(n log n)O(log n)不稳定
归并排序O(n log n)O(n)稳定
堆排序O(n log n)O(1)不稳定
桶排序O(n + k)O(n + k)稳定
快速排序核心代码
public void quickSort(int[] arr, int left, int right) {if (left < right) {int pivotIndex = partition(arr, left, right);quickSort(arr, left, pivotIndex - 1);quickSort(arr, pivotIndex + 1, right);}
}private int partition(int[] arr, int left, int right) {int pivot = arr[right];int i = left - 1;for (int j = left; j < right; j++) {if (arr[j] <= pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, right);return i + 1;
}
(2)搜索算法
  • 二分查找:适用于有序数组,时间复杂度 O (log n)。
    public int binarySearch(int[] arr, int target) {int left = 0, right = arr.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) return mid;if (arr[mid] < target) left = mid + 1;else right = mid - 1;}return -1;
    }
    (3)动态规划
  • 核心思想:将复杂问题分解为重叠子问题,通过保存子问题的解避免重复计算。
  • 经典问题
    • 斐波那契数列
      public int fib(int n) {if (n <= 1) return n;int[] dp = new int[n + 1];dp[0] = 0;dp[1] = 1;for (int i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];
      }

2. 设计模式
(1)单例模式
  • 饿汉式:线程安全,类加载时初始化。
    public class Singleton {private static final Singleton INSTANCE = new Singleton();private Singleton() {}public static Singleton getInstance() {return INSTANCE;}
    }

    懒汉式(双重检查锁):线程安全,延迟初始化。

    public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
    }

(2)工厂模式
  • 简单工厂:根据参数创建对象
    public class ShapeFactory {public Shape createShape(String type) {if ("circle".equalsIgnoreCase(type)) {return new Circle();} else if ("rectangle".equalsIgnoreCase(type)) {return new Rectangle();}return null;}
    }

二、操作系统

1. 进程 / 线程
特性进程线程
定义程序在操作系统中的一次执行过程进程内的一个执行单元
资源拥有独立的内存空间和系统资源共享进程的资源
调度操作系统进行资源分配和调度的基本单位CPU 调度的基本单位
通信进程间通信(IPC):管道、消息队列、共享内存直接共享数据
开销创建 / 销毁开销大创建 / 销毁开销小
健壮性进程间互不影响一个线程崩溃可能导致整个进程崩溃
2. 内存管理
  • 虚拟内存:将物理内存和磁盘空间结合,提供更大的地址空间。
  • 分页机制:将虚拟内存和物理内存划分为固定大小的页(Page)。
  • 页面置换算法
    • FIFO:先进先出。
    • LRU(最近最少使用):选择最近最久未使用的页面置换。
    • LFU(最不经常使用):选择访问次数最少的页面置换。

 3.IO 模型
  • 同步阻塞 IO(BIO)
    • 应用程序发起 IO 请求后,必须等待 IO 操作完成才继续执行。
    • 示例:传统的 Socket 编程。
  • 同步非阻塞 IO(NIO)
    • 应用程序可以不断轮询 IO 操作状态,不阻塞等待。
    • 示例:Java NIO 中的 Selector。
  • 异步 IO(AIO)
    • 应用程序发起 IO 请求后继续执行,IO 操作完成后系统通知应用程序。
    • 示例:Java 7 的 AsynchronousFileChannel。

三、计算机网络

1. HTTP 协议
  • 版本
    • HTTP/1.1:支持持久连接(keep-alive)、分块传输、请求头压缩。
    • HTTP/2:二进制分帧、多路复用、头部压缩、服务器推送。
    • HTTP/3:基于 QUIC 协议,解决 TCP 队头阻塞问题。
  • 请求方法:GET、POST、PUT、DELETE、HEAD、OPTIONS 等。
  • 状态码
    • 1xx:信息性状态码(如 100 Continue)。
    • 2xx:成功状态码(如 200 OK、201 Created)。
    • 3xx:重定向状态码(如 301 Moved Permanently)。
    • 4xx:客户端错误(如 404 Not Found、403 Forbidden)。
    • 5xx:服务器错误(如 500 Internal Server Error)。
2. TCP/IP 三次握手
  1. 客户端→服务器:发送 SYN 包,请求建立连接,携带初始序列号 ISN (c)。
  2. 服务器→客户端:发送 SYN+ACK 包,确认客户端请求,携带自身初始序列号 ISN (s) 和确认号 ACK=c+1。
  3. 客户端→服务器:发送 ACK 包,确认服务器响应,确认号 ACK=s+1。
 

四次挥手

 
  1. 客户端发送 FIN 包,表示请求关闭连接。
  2. 服务器发送 ACK 包,确认客户端请求。
  3. 服务器发送 FIN 包,表示请求关闭连接。
  4. 客户端发送 ACK 包,确认服务器请求。

3. 网络分层模型
OSI 七层模型TCP/IP 四层模型典型协议
物理层网络接口层Ethernet、WiFi
数据链路层ARP、MAC
网络层网络层IP、ICMP、路由协议
传输层传输层TCP、UDP
会话层应用层SSH、TLS
表示层SSL/TLS、JSON/XML
应用层HTTP、SMTP、DNS、FTP

四、综合应用示例

场景:设计一个高并发的电商系统,分析计算机基础的应用

 
  1. 算法优化
    • 商品搜索:使用倒排索引 + 二分查找加速查询。
    • 推荐系统:基于用户行为的协同过滤,使用动态规划优化路径计算。
  2. 操作系统
    • 多线程处理订单:使用线程池避免频繁创建线程。
    • 内存管理:使用 LRU 缓存热门商品信息。
    • IO 优化:采用 NIO 模型处理大量并发请求。
  3. 计算机网络
    • HTTP/2 协议:提升 API 请求性能。
    • 负载均衡:通过 Nginx 实现 HTTP 请求分发。
    • 数据传输:使用 TCP 保证订单数据可靠传输

相关文章:

  • 从0到1落地一个RAG智能客服系统
  • 加性同态加密的原理与函数解析
  • 运维之十个问题篇--3
  • PTA天梯赛L1 041-050题目解析
  • 239. 滑动窗口的最大值
  • C语言:指针进阶(下)
  • 从代码学习深度学习 - 全局向量的词嵌入(GloVe)PyTorch版
  • codeforces C. Devyatkino
  • 建筑末端配电回路安全用电解决方案:筑牢电气防火最后一道防线
  • 华为云Flexus+DeepSeek征文 | 基于华为云ModelArts Studio搭建AnythingLLM聊天助手
  • 边缘计算一:现代前端架构演进图谱 —— 从 SPA 到边缘渲染
  • 【大模型训练】中短序列attention 和MOE层并行方式(二)
  • 深度剖析:UI 设计怎样为小程序构建极致轻量体验
  • 从0到1掌握Sqoop:开启大数据迁移之旅
  • Kivy的ButtonBehavior学习
  • java面向对象高级部分
  • day6补 cpp:c++输入输出流,流的四种状态,标准输入输出流
  • CUDA 与 cuDNN 免登录下载政策详解(基于官方权威信息)
  • 软件确认测试报告:如何评估软件功能及测试关键点?
  • Java并发编程实战 Day 17:CompletableFuture高级应用
  • 自己做网站卖二手车/抚顺优化seo
  • 怎么做游戏网站编辑/快速提升网站排名
  • 网站建设加网络营销/google浏览器下载安装
  • java培训学校/长沙网站推广排名优化
  • 做移动网站设计/公众号推广引流
  • 有域名了如何做网站/百度推广客服电话人工服务