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

Java全核心-阿里大厂面试-Gemini版

完善更新中......一、Java 核心基础1、Java 四大引用与 ThreadLocal 深度拷问【核心连环炮】面试官说一下 Java 的四大引用及其实际业务场景面试官ThreadLocal 为什么要用弱引用不用行不行面试官既然用了弱引用为什么还会内存泄漏真实业务中怎么防范【P6级满分答法】“四大引用分别是强、软、弱、虚。 在我的实际开发中软引用SoftReference常用于内存敏感的本地缓存比如 MyBatis 的底层缓存机制或大图片缓存在发生 OOM 之前 JVM 会自动回收它们。弱引用WeakReference最经典的场景就是ThreadLocalMap的 Key只要发生 GC 就会被回收。虚引用PhantomReference业务代码极少直接用一般配合引用队列ReferenceQueue使用我研究过 NIO 的源码DirectByteBuffer分配堆外内存时就是用虚引用Cleaner 机制来监控对象被回收的时刻从而调用Unsafe.freeMemory()释放操作系统物理内存。关于ThreadLocal 它底层维护了一个ThreadLocalMapKey 是 ThreadLocal 实例弱引用Value 是具体的业务对象强引用。为什么用弱引用如果 Key 是强引用那么即使业务代码里把ThreadLocal实例置为null只要线程存活比如在线程池中这个 Entry 就会一直存在导致 Key 和 Value 都无法回收。用了弱引用后GC 时 Key 会被自动回收此时 Key 变成null。内存泄漏的根本原因虽然 Key 被回收了但 Value 依然被强引用着Thread - ThreadLocalMap - Entry - Value。如果线程池复用核心线程这个nullKey 对应的 Value 就会永远驻留内存。我的落地规范在拦截器Interceptor或 AOP 的afterCompletion/finally代码块中绝对强制调用remove()方法。”【致命追问及解答】追问 1父子线程怎么传递 ThreadLocal如果是线程池里的异步任务呢解答父子线程可以用InheritableThreadLocal。但在线程池场景下InheritableThreadLocal会失效因为线程是复用的不会触发初始化。阿里开源了TransmittableThreadLocal(TTL)它通过修饰Runnable/Callable在任务提交时抓取当前线程的上下文在任务执行前重放执行后恢复完美解决了全链路追踪TraceId在异步线程池中的传递问题。2、线程底层与锁机制 volatile / synchronized / Lock 【核心连环炮】面试官volatile 和 synchronized 的底层区别是什么面试官详细讲讲 synchronized 的锁升级过程会降级吗面试官ReentrantLock 里的 AQS 原理是什么公平锁和非公平锁怎么实现的【P6级满分答法】“volatile是轻量级同步机制保证了可见性和有序性但不保证原子性。在底层它是通过插入内存屏障Memory Barrier来禁止 CPU 指令重排并通过缓存一致性协议如 MESI强制将修改刷新到主存并让其他线程的工作内存缓存行失效。synchronized是 JVM 层面的重量级锁保证了三大特性。底层是基于对象头Mark Word和 Monitor 管程实现的monitorenter和monitorexit指令。锁升级过程JDK 1.6 优化无锁 / 偏向锁一开始认为只有一个线程执行在对象头里记录 Thread ID。下次该线程来直接放行几乎零开销。轻量级锁自旋锁当有第二个线程来竞争时偏向锁撤销升级为轻量级锁。线程会在自己的栈帧里建立 Lock Record用 CAS 操作尝试将对象头替换为指向自己栈帧的指针。如果没拿到会原地自旋CAS 轮询不阻塞挂起因为线程上下文切换代价太大。重量级锁如果自旋超过一定次数或者自适应自旋失败或者第三个线程加入了竞争锁就会膨胀为重量级锁。此时底层调用操作系统的 Mutex Lock未拿到锁的线程会被放进阻塞队列挂起不消耗 CPU。”【致命追问及解答】追问 1刚刚提到 volatile 的内存屏障具体是怎么插的解答在写操作前插入 StoreStore写操作后插入 StoreLoad读操作后插入 LoadLoad 和 LoadStore。最耗时的是 StoreLoad 屏障。追问 2锁能降级吗解答HotSpot JVM 实际上是支持锁降级的但它只发生在STWStop The World的 GC 阶段VM Thread 会把空闲的重量级锁降级所以对应用层开发来说一般默认“锁只能升级不能降级”。追问 3ReentrantLock 非公平锁的效率为什么比公平锁高解答公平锁每次必须到 AQS 队列尾部排队而非公平锁在调用lock()时会直接先无脑执行一次 CAS 尝试抢锁如果此时锁刚好释放它就能直接插队拿到锁。这减少了线程被挂起和唤醒的上下文切换开销吞吐量大幅提升代价是可能产生线程饥饿。3、线程池与并发架构【核心连环炮】面试官线程池的七大参数是什么工作流程是怎样的面试官你们线上业务的线程池是怎么配的面试官如果线上流量突增队列满了拒绝策略选哪个【P6级满分答法】“七大参数包括核心线程数(corePoolSize)、最大线程数(maxPoolSize)、存活时间(keepAliveTime)、时间单位、阻塞队列(workQueue)、线程工厂(threadFactory)、拒绝策略(handler)。工作流任务进来先看核心线程满没满没满就创建满了就塞进队列队列也满了就创建非核心线程直到达到最大线程数最后连最大线程数都满了就执行拒绝策略。线上真实业务落地如果是IO 密集型如调用外部 RPC、查数据库通常配置2N 1N为CPU核数或者按公式CPU核数 * (1 等待时间/计算时间)计算。 如果是CPU 密集型如复杂的内存数据聚合、排序通常配N 1。多出来的一个是为了防止缺页中断等异常导致的 CPU 空闲。拒绝策略默认是AbortPolicy抛异常。但是在我们的核心交易链路/打标服务中一般自定义拒绝策略。策略内部会将遭拒绝的任务信息记录到日志或者发到 MQ 中后台跑一个补偿定时任务去重试保证任务绝对不丢失。”【致命追问及解答】追问 1怎么在不重启服务的情况下动态调整线上线程池的参数解答利用 JDK ThreadPoolExecutor 预留的setCorePoolSize()和setMaximumPoolSize()方法。我们可以结合配置中心如 Nacos/Apollo监听配置的变更事件。一旦监听到修改直接获取 Spring 容器中的线程池 Bean调用set方法实时生效。追问 2Tomcat 的线程池工作流程和 JDK 原生的一样吗解答完全不一样JDK 原生是“先塞队列满了再开扩容线程”这适合 CPU 计算。但 Tomcat 面对的是 Web 请求它重写了TaskQueue的offer方法当核心线程满了它会先判断如果当前线程数小于最大线程数直接返回 false队列假装自己满了从而强制线程池先去创建最大线程来处理请求直到达到最大线程数了再真正塞入队列排队。这是一种“优先响应请求”的极致优化。4、CAS 与 Atomic 高级原理【核心连环炮】面试官讲讲 CAS 原理及 ABA 问题面试官高并发下 CAS 一直自旋失败导致 CPU 飙升怎么解决【P6级满分答法】“CASCompare And Swap包含三个关键值内存地址 V、旧的预期值 A、要修改的新值 B。只有当 V 的值等于 A 时才将 V 改为 B。它底层是依赖 CPU 的cmpxchg指令实现的原子操作。ABA 问题线程 1 读到值是 A此时线程 2 将 A 改成了 B又马上改回了 A。线程 1 执行 CAS 时发现值还是 A认为没被改过操作成功。虽然对简单数字没影响但在链表等复杂数据结构并发操作中会导致严重 Bug。解决方案使用 JDK 的AtomicStampedReference加一个版本号Stamp每次修改不仅比较值还比较版本号A1 - B2 - A3就能彻底解决。高并发下的 CPU 飙升问题如果几百个线程同时对一个 AtomicInteger 循环 CAS 失败会造成极大的 CPU 资源浪费。优化方案在 JDK 8 中如果是统计/计数场景我会直接用LongAdder替代AtomicLong。它的核心思想是“分段分离”类似 JDK7 的 ConcurrentHashMap。底层维护了一个Base值和一个Cell数组并发低时直接 CAS 更新 Base并发高时各个线程通过 Hash 路由到不同的 Cell 元素上独立进行 CAS 累加。最后sum()时把 Base 和所有 Cell 累加起来即可。极大地减少了热点冲突。”5、HashMap 底层深度解析【核心连环炮】面试官HashMap 在 JDK 7 和 JDK 8 的主要区别面试官为什么 JDK8 链表长度到 8 才会转红黑树到 6 又退化回链表面试官HashMap 线程不安全具体体现在哪里【P6级满分答法】“区别JDK7 是 数组单向链表采用头插法。JDK8 是 数组单向链表红黑树采用尾插法。JDK8 在扩容时做了优化不再需要重新计算 hash只需判断(hash oldCap) 0如果为真就留在原位为假就移动到原位置 oldCap。红黑树阈值为 8 的原因底层源码的注释明确说明这符合泊松分布Poisson distribution。在默认负载因子 0.75 下同一个桶里发生 hash 碰撞到达 8 个元素的概率只有千万分之六。也就是说转红黑树是一个兜底的防爆机制平时几乎不会触发。退化阈值设为 6 而不是 8是为了形成缓冲带避免 7 和 8 之间频繁的树化和解树化浪费 CPU。并发不安全的体现JDK 7 的死链问题并发扩容时头插法会导致链表节点顺序翻转如果两个线程时间差正好卡在节点转移的过程会形成环形链表下次get()时触发死循环导致 CPU 100%。JDK 8 的数据覆盖问题尾插法解决了死链但在put()阶段如果两个线程同时判断当前位置没有哈希冲突准备执行写入时发生时间片切换后面的线程会直接覆盖前一个线程写入的值。”【致命追问及解答】追问 1那如果要求线程安全JDK8 的 ConcurrentHashMap 是怎么设计的解答摒弃了 JDK7 的 Segment 分段锁太重采用了CAS synchronized的极致细粒度锁。只锁当前链表或红黑树的头节点。只要不发生 Hash 碰撞不同的头节点完全可以并发写入使用 CAS 写入头节点发生碰撞时再用synchronized锁住头节点往下遍历。追问 2ConcurrentHashMap 调用size()方法在高并发下怎么保证性能的解答思想和上面提到的LongAdder一模一样维护了一个baseCount和一个CounterCell[]数组。高并发写入时不强制去更新baseCount而是把元素增量 CAS 到自己的CounterCell上最后统计时求和即可。6、泛型、反射、注解实际业务落地【核心连环炮】面试官泛型的类型擦除是什么如何突破类型擦除获取真实泛型面试官反射性能差在哪里你在业务中用过反射和注解吗【P6级满分答法】“泛型擦除Java 的泛型是伪泛型编译阶段会将泛型擦除为 Object 或边界类extends。这意味着运行期的 ListString 和 ListInteger 其实是同一个类。突破擦除阿里实战重点在解析复杂 JSON如 Fastjson / Jackson时经常遇到无法反序列化泛型集合的问题。我们业务代码中普遍采用匿名内部类TypeReference的方式。因为泛型类虽然被擦除但如果作为父类被子类继承泛型信息会保存在子类的字节码常量池Signature 属性中。TypeReference 就是通过getClass().getGenericSuperclass()动态拿到了原始泛型信息。反射与注解的落地反射的性能损耗主要在方法区查找 Method 对象和参数装箱拆箱/安全校验。但 JDK 做了优化当反射调用某个方法超过 15 次InflationThresholdJVM 会动态生成字节码GeneratedMethodAccessor将反射调用转为直接调用性能大幅回升。真实业务落地我主导过一个接口防刷限流注解的开发。定义RateLimit(permits 10, time 1)注解。将注解打在 Controller 接口上。利用 Spring AOP 定义切面Pointcut拦截该注解。在Around环绕通知中通过反射获取方法签名上的注解信息限流阈值然后结合Redis Lua 脚本实现分布式的滑动窗口限流。如果超限直接抛出业务异常阻断流程。这让系统与底层的限流逻辑完全解耦。”建议在回答时遇到熟悉的地方一定要主动出击比如讲 CAS 时主动带出 LongAdder 的优化讲线程池时主动带出 Tomcat 的区别这在 P6 面试中叫作“展现技术深度与视野”。二、JVM 调优1、JVM 内存模型与对象分配的“千层套路”【核心连环炮】面试官说一下 JVM 内存模型对象一定分配在堆上吗面试官元空间Metaspace和永久代有什么区别为什么要换【P6级满分答法】“JVM 内存区域主要分为程序计数器、虚拟机栈、本地方法栈这三个是线程私有的、堆和元空间这两个是线程共享的。 但在实际底层实现中对象不一定全部分配在堆上。如果开启了逃逸分析-XX:DoEscapeAnalysis和标量替换JVM 在 JIT 编译期间发现一个对象的作用域没有逃出方法内部就会将其打散成基本类型直接在虚拟机栈上分配。随着方法出栈内存直接回收极大减轻了 GC 压力。此外为了解决多线程并发分配内存的锁竞争问题堆内存中还有一个TLAB本地线程分配缓冲每个线程在 Eden 区有一块私有的小空间对象优先在这里无锁分配。关于元空间与永久代 JDK 8 之前叫永久代用的是 JVM 的堆内存JDK 8 之后改为元空间直接使用本地物理内存Native Memory。 替换的核心原因有两点一是永久代大小很难预估太小容易报java.lang.OutOfMemoryError: PermGen space特别是在大量使用 CGLIB 动态生成代理类的 Spring 项目中二是字符串常量池在 JDK 7 时已经移到了堆中JDK 8 彻底移除永久代把类的元数据放到本地内存只要物理内存够就不容易 OOM。”【致命追问及解答】追问 1既然元空间用的是物理内存那还需要监控和调优吗如果不设上限会怎样解答必须设上限-XX:MaxMetaspaceSize。如果不设它默认可以无限使用物理内存。一旦代码中存在动态类加载的内存泄漏比如使用自定义 ClassLoader 但没有卸载或者 ThreadLocal 导致 ClassLoader 泄漏会把操作系统的物理内存吃干引发 OOM 甚至导致 Linux 的 OOM Killer 把整个 Java 进程强杀。2、垃圾回收器演进从 CMS 到 G1再到 ZGC 的降维打击【核心连环炮】面试官CMS 的并发三色标记是怎么回事会有什么漏洞面试官G1 是怎么解决 CMS 的碎片的它的停顿时间为什么可控面试官你了解 ZGC 吗它凭什么能做到亚毫秒级的停顿【P6级满分答法】“CMS是以获取最短回收停顿时间为目标的收集器。核心过程分为初始标记STW、并发标记、重新标记STW、并发清除。 在并发标记阶段采用的是三色标记法白未访问灰本身已访问但成员变量未访问完黑全部访问完。漏洞漏标问题当且仅当满足两个条件时会漏标1. 黑色对象增加了一条指向白色对象的引用2. 灰色对象删除了指向该白色对象的引用。导致本该存活的白色对象被当成垃圾回收这是极其致命的。CMS 的补救采用增量更新Incremental Update机制。只要黑色对象插入了对白色对象的引用就把这个黑色对象记录下来在‘重新标记’阶段把它变回灰色重新扫描一遍。缺点是重新扫描的代价较大。G1 的破局G1 放弃了传统的物理分代改为逻辑分代和物理分区Region。它将堆分成 2048 个大小相同的 Region。解决碎片整体看是标记-整理局部看是复制算法每次回收都会把存活对象复制到空闲 Region不会产生内存碎片。解决漏标采用SATB原始快照机制。在并发标记开始时保留一份对象图逻辑快照。如果灰色对象删除了指向白色对象的引用就把这个引用记录下来。在最终标记阶段只扫描这些被删除的引用把它们当作存活对象处理产生一点浮动垃圾但避免了全量重扫极大缩短了 STW。停顿可控G1 会在后台维护一个收益优先队列。根据用户设置的-XX:MaxGCPauseMillis优先回收那些垃圾最多、回收耗时最短的 Region。ZGC 的降维打击G1 虽然优秀但它的 Region 复制阶段转移阶段仍然需要 STW堆越大停顿越长。而ZGC 实现了并发转移。它通过染色指针Colored Pointers*在指针的高位记录对象状态配合*读屏障Load Barrier。即使对象在并发转移阶段被移动了物理地址业务线程访问该对象时读屏障也会通过染色指针的转发状态自动将指针修正到新地址。这使得 ZGC 的 STW 时间与堆大小完全无关目前 JDK 17 中已经能稳定在 1ms 以内。”3、线上 OOM 排查实战与 Arthas 炫技【核心连环炮】面试官线上机器突然报警 OOM你怎么快速定位是内存溢出还是内存泄漏面试官如果 Dump 文件有几十个 G本地电脑打不开怎么办面试官如果不用 Dump 文件你会用 Arthas 怎么排查【P6级满分答法】“收到报警第一时间先看日志里 OOM 的后缀 如果是Java heap space大概率是数据量激增或者内存泄漏。 如果是GC overhead limit exceeded说明系统 98% 的时间都在 GC但只回收了不到 2% 的内存这是典型的老年代内存泄漏前兆。 如果是Metaspace重点查动态类加载或反射。 如果是unable to create new native thread说明线程数超了操作系统的ulimit限制。标准化排查流程我们在生产环境会默认开启-XX:HeapDumpOnOutOfMemoryError。拿到 Dump 文件后使用 Eclipse MAT 进行分析。重点看Dominator Tree支配树和Histogram直方图直接就能找出占用 Retained Heap深堆最大的对象。然后右键Path to GC Roots排除虚引用和弱引用就能清晰看到这个大对象是被哪个业务代码里的静态集合或线程的局部变量强引用着导致无法回收。这就是区分溢出和泄漏的核心如果是溢出大对象一般是业务必需的如果是泄漏通常是某些本该清空的 HashMap/List 没有清空。几十个 G 的 Dump 文件处理绝不能拉到本地处理。我会直接在生产环境或一台高配的跳板机上使用jhat或者通过脚本执行 MAT 的无头模式Headless Mode./ParseHeapDump.sh dump.hprof让服务器自己解析生成 HTML 报告我只看最终的报告页面。使用 Arthas 实时排查如果 OOM 还没发生只是内存水位告警不能随便触发 HeapDump会导致长 STW。我会立刻挂载 Arthas输入dashboard实时观察堆内存各区域的水位和 GC 频率。输入thread -n 3查看当前最忙的三个线程看是不是 GC 线程在疯狂自旋或者业务线程在处理死循环。如果怀疑是某个静态缓存一直变大我会用ognl命令直接查看应用上下文中的某个 HashMap 的size()。使用profiler start采集 CPU 或内存的火焰图直观看出哪段代码在疯狂分配对象。”4、JVM 调优方法论与场景实战【核心连环炮】面试官遇到频繁的 Minor GCYoung GC怎么解决面试官什么是“过早晋升Premature Promotion”如何调优参数避免面试官如果没有性能瓶颈你会主动去调优 JVM 参数吗【P6级满分答法】“频繁的 Minor GC如果 Minor GC 极度频繁通常是因为新生代Eden 区给得太小或者短生存周期的对象创建速率Allocation Rate极高。我会先通过 GC 日志-Xloggc计算出每秒对象分配速率。如果机器内存允许最直接的办法是适当调大新生代的比例调整-XX:NewRatio或增大整体 Heap 大小。过早晋升核心痛点过早晋升是指本该在年轻代被回收的短命对象因为 Survivor 区空间不足或 Survivor 比例不合理触发了 JVM 的动态年龄判断机制Survivor 区中相同年龄所有对象大小的总和大于 Survivor 空间的一半被提前送到了老年代。这会迅速填满老年代导致极具破坏性的 Full GC。调优动作观察 GC 日志看对象晋升的平均年龄。如果远小于默认的 15说明出现了过早晋升。增大 Survivor 区的大小调小-XX:SurvivorRatio比如从默认的 8 调到 6。如果是突发的大流量可以适当上调-XX:TargetSurvivorRatio默认 50%可以调到 70%-80%来提高 Survivor 区的利用率。如果是确定的长生命周期对象如本地缓存可以通过-XX:PretenureSizeThreshold让大对象直接进入老年代避免在 Survivor 区来回复制。调优的最高心法如果没有发生明显的性能瓶颈响应时间变慢、CPU 飙高、频繁 Full GC我绝对不会为了调优而调优。JVM 发展到 JDK 8 和之后的版本其自适应启发式算法Ergonomics已经非常聪明。人为乱调参数往往适得其反。调优一定是基于明确的数据支撑监控告警、压测数据、GC 日志和具体的业务痛点去进行的。”

相关文章:

Java全核心-阿里大厂面试-Gemini版

完善更新中......一、Java 核心基础1、Java 四大引用与 ThreadLocal 深度拷问【核心连环炮】面试官:说一下 Java 的四大引用及其实际业务场景?面试官:ThreadLocal 为什么要用弱引用?不用行不行?面试官:既然…...

OpenClaw技能市场挖掘:百川2-13B-4bits量化版适配插件精选

OpenClaw技能市场挖掘:百川2-13B-4bits量化版适配插件精选 1. 为什么需要专门适配百川模型的技能? 去年冬天第一次尝试用OpenClaw对接百川2-13B模型时,我遇到了一个典型问题:虽然模型本身运行良好,但很多现成的技能模…...

AI基础设施权力更迭:AWS Bedrock 凭什么在 2026 年让开发者集体“倒戈”?

声明:本文由AI编辑生成,内容仅供参考。文中涉及的行业判断、平台能力分析、商业趋势推演与产品价值描述,均基于公开资料、通用观察及示意性表达整理,不构成任何商业承诺、采购建议、投资建议或服务保证。实际产品能力、接口支持范…...

golang如何理解值类型和引用类型_golang值类型与引用类型区别详解

<p>Go所有传参均为值传递&#xff0c;但“值”取决于类型底层&#xff1a;基础类型传数据副本&#xff0c;slice/map/chan传含指针的header副本&#xff0c;修改元素会影响原变量&#xff1b;需改变量本身&#xff08;如重置slice header&#xff09;时才必须传* T。<…...

Spring Boot 4.0 Agent-Ready架构的7个隐秘陷阱:90%团队在第4步就触发JVM元空间泄漏

第一章&#xff1a;Spring Boot 4.0 Agent-Ready架构的演进本质与企业级定位Spring Boot 4.0 并非简单版本迭代&#xff0c;而是面向可观测性、运行时可塑性与平台协同能力重构的范式跃迁。其核心突破在于将 Java Agent 集成从“可选插件”升维为“原生架构契约”&#xff0c;使…...

2026 安全生产精选:五款巡检软件实用清单,隐患排查与闭环管理轻松上手

安全生产是企业发展的核心防线&#xff0c;而巡检巡查则是守护这道防线的关键动作。无论是餐饮门店的消防安全检查、工厂车间的设备点检&#xff0c;还是建筑工地的隐患排查&#xff0c;传统的纸质记录和人工巡查方式正逐渐暴露出效率低、易造假、难追溯的问题。今天为大家整理…...

Python如何实现定时异步任务_结合asyncio与loop.call_later调用

asyncio.call_later不能直接await&#xff0c;因为它返回Handle对象而非Awaitable&#xff1b;正确做法是在回调中用asyncio.create_task启动协程。asyncio.call_later 为什么不能直接 await&#xff1f;因为 loop.call_later 是一个同步注册函数&#xff0c;它不返回协程对象&…...

嘉立创-AD PCB封装导入(含3D封装)

大多数元器件都可以在立创商城找到2D和3D封装&#xff0c;点击立即打开 COPY 2D封装 1.切换到PCB 2.导出PCB文件 3.用AD打开下载的PCB文件&#xff0c;复制时选择中心吸附点 4.在自己的库中添加&#xff0c;并重命名 5.对齐原点粘贴并保存 6.至此2D封装COPY完成 COPY 3D模型 …...

RAG系统的多路召回(Multi-Retrieval)详解

在RAG&#xff08;检索增强生成&#xff09;系统中&#xff0c;多路召回是一种通过多种检索策略并行获取候选文档&#xff0c;再进行结果融合的机制。它的核心目的是提高召回率&#xff0c;确保不同类型的查询都能被有效检索。一、为什么需要多路召回&#xff1f;单一检索方式存…...

【PHP 8.9命名空间终极指南】:5大突破性增强、3个迁移避坑清单与向后兼容性权威验证

第一章&#xff1a;PHP 8.9命名空间增强的演进背景与核心定位PHP 命名空间自 5.3 版本引入以来&#xff0c;已成为组织大型代码库的事实标准。然而&#xff0c;随着现代 PHP 应用向模块化、跨域共享和静态分析深度依赖方向演进&#xff0c;原有命名空间机制在别名解析、嵌套声明…...

固态新概念—准固态,或许车用准固态,手机用全固态,无奈的妥协

固态电池说了很多年了&#xff0c;但是到了如今离量产装车越来越近的时刻&#xff0c;电池行业和汽车行业终于清醒认识到全固态电池在汽车行业面临着无法跨越的技术难题&#xff0c;由此近期行业提出了一个新概念&#xff0c;那就是准固态电池。此前汽车行业曾提出了半固态电池…...

嵌入式系统中状态机的实现与优化技巧

1. 状态机在嵌入式系统中的核心价值在资源受限的嵌入式环境中&#xff0c;状态机&#xff08;State Machine&#xff09;是处理复杂逻辑的利器。我曾在智能家居控制器项目中&#xff0c;用状态机管理设备工作模式切换&#xff0c;代码量减少了40%而可靠性提升显著。状态机本质上…...

程序员副业图谱

引言&#xff1a;程序员副业的现状与趋势程序员副业需求增长的背景&#xff08;技术变现、职业发展多元化&#xff09;CSDN作为技术社区在副业生态中的角色CSDN程序员副业图谱的核心模块技术内容创作博客/专栏写作&#xff1a;技术干货、实战经验、行业分析视频教程&#xff1a…...

DDD难落地?就让AI干吧! - cleanddd-skills介绍嘶

AI训练存储选型的演进路线 第一阶段&#xff1a;单机直连时代 早期的深度学习数据集较小&#xff0c;模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低&#xff0c;吞吐量极高&#xff0c;也就是“数据离…...

基于File-Based App开发MVP项目鸥

Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的&#xff0c;以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成&#xff0c;将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...

WorkBuddy的优势和劣势分别是什么?

最真实、不吹不黑、结合实际使用体验的 WorkBuddy 优劣势总结&#xff0c;完全基于当前版本&#xff08;2026 年&#xff09;的表现&#xff0c;方便你判断要不要长期用、怎么用更划算。 一、WorkBuddy 的核心优势 1. 真・能动手操作电脑&#xff0c;不是只聊天 这是它最大的亮…...

2026年三角洲俱乐部3×3保险箱:守护私密空间的智能选择

在《三角洲行动》这款充满策略与竞技的游戏中&#xff0c;无论是珍贵的“暗星燃料”、“勇者之证”&#xff0c;还是辛苦积累的“哈夫币”&#xff0c;都是玩家心血的结晶。如何安全、便捷地管理这些虚拟资产&#xff0c;成为许多玩家&#xff0c;尤其是高端玩家和团队管理者关…...

这本《大语言模型》直接封神,清华张亚勤盛赞“入门圣经”,A100集群训练日志全公开!

《大语言模型》由赵鑫教授领衔&#xff0c;系统拆解大语言模型全流程&#xff0c;含预训练、微调、部署等核心内容&#xff0c;并曝光“毒数据”识别技巧。书中案例支持端到端复现&#xff0c;配套YuLan大模型和LLMBox工具库&#xff0c;适合入门学习。当DeepSeek开出11w*14薪抢…...

Scikit-learn怎么实现协同过滤推荐_利用NearestNeighbors找相似用户

NearestNeighbors 不能直接做协同过滤&#xff0c;它仅是最近邻搜索工具&#xff1b;需手动构建用户向量、标准化、选择余弦距离&#xff0c;并基于相似用户加权聚合推荐&#xff0c;无现成User-Based CF实现。NearestNeighbors 能直接做协同过滤吗&#xff1f;不能。它只是找最…...

RP2040 PIO驱动WS2812:纳秒级时序的NeoPixel库

1. 项目概述NeoPixelConnect 是一款专为 Arduino Nano RP2040 Connect 开发板设计的高性能 WS2812&#xff08;NeoPixel&#xff09;驱动库。该库并非基于传统 ArduinoAdafruit_NeoPixel的 PWM 或 bit-banging 实现&#xff0c;而是深度依托 Raspberry Pi 官方 Pico C SDK 中成…...

智谱GLM-5.1实测

智谱在GLM-5发布不到两个月后&#xff0c;迅速推出了迭代版本GLM-5.1。官方将其定位为"面向长程任务的开源第一模型"&#xff0c;核心升级方向集中在代码工程能力和长程Agent任务上——GLM-5.1能够在单次任务中独立、持续工作超过8小时&#xff0c;在SWE-Bench Pro等…...

基于单片机的智能锁芯报警系统设计

文章目录一、摘要二、设计要求三、系统设计四、效果图源码获取一、摘要 以单片机为主要的红外线报警是本文所采用的&#xff0c; 其核心为报警器的硬件和软件系统&#xff0c;在整体上完成了智能控制&#xff0c;他安装比较方便&#xff0c;并且防盗性能还比较稳定。由于经济的…...

为什么国内的知名企业都在使用C1N短链接?

先说结论&#xff1a;确实有很多知名大厂都在用C1N短链接(c1n.cn)&#xff0c;比如腾讯科技、TCL、字节跳动等等。可能有很多人会好奇&#xff0c;短链接本身技术并不复杂&#xff0c;一些具备研发能力的公司完全可以自己研发&#xff0c;为何还要采购第三方的链接服务?其实这…...

G-Helper:华硕笔记本性能革命的轻量解决方案

G-Helper&#xff1a;华硕笔记本性能革命的轻量解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, and o…...

OpenClaw调试技巧:Qwen3.5-9B-AWQ-4bit任务执行日志分析

OpenClaw调试技巧&#xff1a;Qwen3.5-9B-AWQ-4bit任务执行日志分析 1. 为什么需要关注OpenClaw日志 第一次用OpenClaw对接Qwen3.5-9B-AWQ-4bit模型时&#xff0c;我遇到了一个典型问题&#xff1a;任务明明显示"执行成功"&#xff0c;但最终输出结果却牛头不对马嘴…...

如何使用ASH诊断系统级挂起_分析System State Dump与ASH结合

挂起时ASH不可用——因MMNL进程常被卡住&#xff0c;v$active_session_history数据中断或滞后&#xff0c;报告仅为挂起前1–2分钟“残影”&#xff1b;此时应立即转向HANGANALYZE和systemstate。挂起时连不上数据库&#xff0c;ASH还能用吗不能直接用——ash依赖后台进程mmnl持…...

从涂鸦到专业:优艺汇艺术教育给出完整的少儿绘画学习指南(附各阶段实用规划)

2026年4月9编辑很多家长问&#xff1a;孩子到底几岁开始学画画比较好&#xff1f;学画画到底有什么用&#xff1f;是不是只有将来考美院才需要学&#xff1f;其实&#xff0c;绘画从来不只是“未来画家”的事。它对孩子专注力、观察力、审美能力甚至性格养成的影响&#xff0c;…...

ADS1X15高精度I²C ADC驱动开发与工程实践指南

1. ADS1X15库深度解析&#xff1a;面向嵌入式工程师的高精度IC ADC驱动开发指南ADS1X15系列&#xff08;ADS1015/ADS1115&#xff09;是德州仪器&#xff08;TI&#xff09;推出的低功耗、高精度Δ-Σ模数转换器&#xff0c;广泛应用于工业传感、电池监测、环境数据采集等对模拟…...

【Spring Boot 4.0 Agent-Ready 架构权威白皮书】:20年资深架构师亲授企业级落地避坑指南

第一章&#xff1a;Spring Boot 4.0 Agent-Ready 架构全景认知Spring Boot 4.0 正式引入 Agent-Ready 架构范式&#xff0c;标志着其从“开发友好”迈向“运行时可观测、可干预、可演进”的新阶段。该架构并非简单叠加 Java Agent 支持&#xff0c;而是将字节码增强、生命周期钩…...

Blazor WebAssembly AOT编译踩坑实录(含.NET 9 RTM正式版12类崩溃场景+符号映射调试秘钥)

第一章&#xff1a;Blazor WebAssembly AOT编译的核心价值与2026演进定位Blazor WebAssembly 的 AOT&#xff08;Ahead-of-Time&#xff09;编译自 .NET 6 起引入&#xff0c;并在 .NET 7/8 中持续优化&#xff0c;其核心价值在于将 C# 代码直接编译为高度优化的 WebAssembly 二…...