实习面经摘录(九)

来自网络,供个人学习 某讯 两个

先完成后完美

计算机网络:

1.OSI七层,TCP/IP四层

物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

2.TCP/IP四层及对应协议

网络接口层,网络层(IP),传输层(TCP/UDP),应用层(HTTP,DNS,SMTP)

操作系统:

1.进程和线程区别

  • 进程:资源分配的最小单位。拥有独立的内存空间(堆、栈、数据段),进程间切换开销大。
  • 线程:CPU调度的最小单位。共享所属进程的内存资源(堆、方法区),拥有独立的栈和程序计数器。线程间切换开销小。

2.原子类和CAS

基于硬件级别的 CAS (Compare-And-Swap) 指令。CAS 本身是一条 CPU 指令,不可分割,不会被线程调度打断。

ABA 问题 :值从 A 变 B 又变回 A,CAS 会认为没变过。解决方法是加版本号(AtomicStampedReference)。

3.页面淘汰算法

  1. OPT (最佳置换):理论算法,淘汰未来最久不用的(无法实现,用于衡量标准)。
  2. FIFO (先进先出):淘汰最早进入的(可能出现 Belady 异常)。
  3. LRU (最近最少使用):淘汰最近一段时间最久未使用的(常用,效果好)。
  4. Clock (时钟置换):LRU 的近似实现,性能好,开销小。

mysql:

1.mysql如何实现持久性

  • 通过 Redo Log (重做日志) 实现。
  • 机制:事务修改数据时,先写内存(Buffer Pool),同时写 Redo Log(顺序写磁盘)。即使宕机,重启后可根据 Redo Log 恢复未刷盘的数据。

2WAL技术,为撒先写日志再写磁盘

顺序写日志:Redo Log 是追加写入,顺序IO,速度极快,且日志文件小,容易落盘。

redis:

java八股:

1.基本数据类型,容器

整数型、浮点型、字符型、布尔型

collection List(有序,可重复) set(无序(部分有序)、不可重复)

2.arrayList 和LinkedList结构 场景

arraylist基于动态数组,支持随机访问,增删慢,扩容时有拷贝开销;适用于读多写少,频繁访问的场景

LinkedList基于双向链表,需要遍历访问,增删快;写多读少

3hashmap底层原理

下篇写下

4.二维数组存储和按行遍历还是按列遍历性能高

  • 存储 :Java中的二维数组实际上是**"数组的数组"** 。int[][] arr 是一个引用,指向一个一维数组,该数组的每个元素又是一个指向另一块内存区域的一维数组的引用。内存不一定连续
  • 遍历性能按行遍历更快
    • 原因:虽然每一行内部的内存是连续的,但行与行之间可能不连续。按行遍历(外层循环行,内层循环列)符合局部性原理(Spatial Locality),CPU缓存命中率更高。按列遍历会导致频繁在不同行的内存块之间跳转,缓存失效(Cache Miss)严重。

5.怎么解决线程竞争,synchorized和reentranlock区别,哪个性能更高

  1. ReentrantLock:显式锁,功能更灵活。
  2. Atomic 原子类 :如 AtomicInteger,基于 CAS (Compare-And-Swap)。
  3. ThreadLocal:线程隔离,每个线程拥有一份独立副本(如果不需共享结果)。
  4. 并发容器 :如 ConcurrentHashMap
特性 synchronized ReentrantLock
层面 JVM 关键字 (内置锁) API 类 (代码级锁)
释放 自动释放 (代码结束或异常) 必须在 finally 中手动 unlock()
灵活性 较低 高 (可中断、超时尝试、公平/非公平)
条件变量 配合 wait/notify 配合 Condition (可绑定多个条件)
性能 JDK 1.6 优化后两者性能接近 高竞争下略优,低竞争下差别不大
  • 非公平 vs 公平:默认都是非公平锁(性能更好)。ReentrantLock 构造函数可指定为公平锁。
  • 性能哪个好 :在高并发激烈竞争下,ReentrantLock 通常略好;但在一般场景下,由于 JVM 对 synchronized 做了大量优化(偏向锁、轻量级锁、重量级锁升级),两者差异很小。首选 synchronized 因为不易出错(自动释放)

项目难点:

ai:

1.有了解过openclaw吗,底层是怎么做的

感知->规划(plan)->行动(tools,skills)->记忆(memory)->反思(reflection)

感知:多模态识别(ocr,whisper)、全渠道接入

规划:LLM 和system prompt

行动:tools skills

记忆:短期记忆 长期记忆

反思

OpenClaw 的底层本质是一个**"基于大模型的任务操作系统"** 。它利用 LLM 作为CPU (逻辑计算),利用 Tool/Skill 作为外设驱动 ,利用向量数据库作为硬盘(记忆),将自然语言直接编译为系统动作。

对于开发者而言,学习 OpenClaw 的架构(特别是它的Tool Calling 协议记忆管理机制沙箱执行策略)是理解下一代 AI Agent 开发的关键。

相关推荐
arvin_xiaoting1 小时前
OpenClaw学习总结_I_核心架构_8:SessionPruning详解
前端·chrome·学习·系统架构·ai agent·openclaw·sessionpruning
妄汐霜4 小时前
小白学习笔记(spring框架的aop和tx)
笔记·学习
椎4955 小时前
JSONUtil工具包大致学习使用
学习
leiming66 小时前
CAN 通信协议学习讲义(带图文 + C 语言代码)
c语言·开发语言·学习
星空7 小时前
RAG学习第一节
学习
知识分享小能手7 小时前
MongoDB入门学习教程,从入门到精通,MongoDB入门指南 —— 知识点详解(2)
数据库·学习·mongodb
炽烈小老头8 小时前
【 每天学习一点算法 2026/03/24】寻找峰值
学习·算法
Nan_Shu_6148 小时前
学习:Cesium (3)
学习
C羊驼9 小时前
C语言学习笔记(十五):预处理
c语言·经验分享·笔记·学习·算法