来自网络,供个人学习 某讯 两个
先完成后完美
计算机网络:
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.页面淘汰算法
- OPT (最佳置换):理论算法,淘汰未来最久不用的(无法实现,用于衡量标准)。
- FIFO (先进先出):淘汰最早进入的(可能出现 Belady 异常)。
- LRU (最近最少使用):淘汰最近一段时间最久未使用的(常用,效果好)。
- 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区别,哪个性能更高
- ReentrantLock:显式锁,功能更灵活。
- Atomic 原子类 :如
AtomicInteger,基于 CAS (Compare-And-Swap)。 - ThreadLocal:线程隔离,每个线程拥有一份独立副本(如果不需共享结果)。
- 并发容器 :如
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 开发的关键。