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

Android第六次面试总结之Java设计模式篇(一)

一、单例模式在 Android 面试中的核心考点

1. Android 中如何安全实现单例?需注意哪些坑?(字节跳动、美团面试真题)

解答
Android 中实现单例需重点关注 Context 泄漏线程安全 和 反射 / 序列化攻击

  • 推荐实现:静态内部类(线程安全 + 避免内存泄漏)
    public class AppManager {  private Context context;  // 静态内部类持有实例(类加载时初始化,线程安全)  private static class Holder {  static final AppManager INSTANCE = new AppManager();  }  private AppManager() {  // 使用 Application Context,避免持有 Activity Context 导致泄漏  context = MyApplication.getAppContext();  }  public static AppManager getInstance() {  return Holder.INSTANCE;  }  
    }  
    
  • 注意事项
    • Context 选择:单例若需持有 Context,必须使用 Application Context(通过 getApplicationContext() 或自定义 Application 类获取),避免传入 Activity Context 导致内存泄漏(Activity 销毁后单例仍持有其引用)。
    • 反序列化安全:若单例需实现 Serializable,需添加 readResolve() 方法返回已有实例;或直接使用 枚举单例(Android 中枚举序列化安全,且代码简洁)。
2. 单例在 Android 中的典型应用场景(阿里、腾讯面试真题)

解答

  • 全局管理器:如网络请求管理器(Retrofit 单例)、图片加载器(Glide 内部单例)、数据库管理类(Room Database 单例)。
  • 状态管理:全局用户信息、配置参数(如 App 主题、语言设置)。
  • 系统服务代理:封装 SensorManagerNotificationManager 等系统服务,提供统一访问入口。
3. 反模式:为什么不推荐在 Android 中使用双重检查锁(DCL)?

解答

  • DCL 需配合 volatile 关键字防止指令重排序,但 Android 早期版本(如 Java 1.4 前)的 JVM 对 volatile 支持不完整,可能导致实例未完全初始化就被访问。
  • 静态内部类或枚举单例实现更简单且线程安全,无需手动处理同步,是 Android 中的首选方案。

二、工厂模式在 Android 开发中的实战场景

1. LayoutInflater 如何体现工厂模式?如何自定义 View 工厂?(字节跳动面试真题)

解答

  • 系统级应用:Android 的 LayoutInflater 是典型的 工厂方法模式,通过 inflate() 方法根据布局文件创建 View 实例,子类(如 AppCompatDelegate)可自定义 View 创建逻辑(如兼容旧版控件)。
  • 自定义 View 工厂(示例:根据类型创建不同的 ViewHolder):
    public interface ViewHolderFactory {  ViewHolder createViewHolder(View itemView, int viewType);  
    }  
    // 实现类  
    public class DefaultViewHolderFactory implements ViewHolderFactory {  @Override  public ViewHolder createViewHolder(View itemView, int viewType) {  if (viewType == TYPE_TEXT) {  return new TextViewHolder(itemView);  } else if (viewType == TYPE_IMAGE) {  return new ImageViewHolder(itemView);  }  throw new IllegalArgumentException("Unknown view type");  }  
    }  
    
  • 优势:解耦 View 创建逻辑,方便扩展(如新增 ViewType 时无需修改适配器核心代码)。
2. 对比简单工厂 vs 工厂方法:何时选择哪种?

Android 场景举例

  • 简单工厂:适合轻量化场景,如根据类型创建不同的动画对象(AnimationFactory.createAnimation (type)),新增类型需修改工厂类。
  • 工厂方法:适合复杂场景或需遵循开闭原则,如 RecyclerView 的 ViewHolder 创建(通过 onCreateViewHolder 由子类实现)。
3. ThreadFactory 为什么是线程池的 “灵魂组件”?(字节跳动、美团面试真题)

源码级解析
线程池(如ThreadPoolExecutor)通过ThreadFactory创建线程,核心作用:

  • 解耦线程创建逻辑:将 “如何创建线程”(如命名、优先级、守护线程)与 “如何管理线程”(如任务队列、拒绝策略)分离。
  • 统一线程属性:确保线程池内所有线程具备相同的基础配置(如业务线程设置setName("Biz-Thread-%d"),便于日志追踪)。

自定义 ThreadFactory 实战(面试必考代码)

public class NamedThreadFactory implements ThreadFactory {  private final String namePrefix;  private final boolean daemon;  private final int priority;  public NamedThreadFactory(String namePrefix, boolean daemon, int priority) {  this.namePrefix = namePrefix;  this.daemon = daemon;  this.priority = Math.min(Math.max(priority, Thread.MIN_PRIORITY), Thread.MAX_PRIORITY);  }  @Override  public Thread newThread(Runnable r) {  Thread thread = new Thread(r, namePrefix + "-" + counter.incrementAndGet());  thread.setDaemon(daemon); // 设置守护线程(如后台日志线程)  thread.setPriority(priority);  // 关键:为线程设置未捕获异常处理器,避免静默崩溃  thread.setUncaughtExceptionHandler((t, e) -> {  Log.e("ThreadFactory", "Thread " + t.getName() + " crashed: " + e.getMessage());  });  return thread;  }  private final AtomicInteger counter = new AtomicInteger(1);  
}  
4. 线程池工厂模式的 5 大面试考点

① 为什么线程池不直接使用 new Thread (),而是通过工厂?

  • 答案
    • 统一管控线程属性(命名规则、优先级),避免 “野线程”(无意义的 Thread-0/1/2),提升调试效率(通过线程名快速定位问题线程)。
    • 支持扩展(如创建守护线程、设置安全上下文AccessControlContext)。

② FixedThreadPool 为什么被弃用?与工厂模式的关系?

  • 源码对比(JDK 8):
    // 旧版FixedThreadPool(硬编码工厂,无自定义能力)  
    public static ExecutorService newFixedThreadPool(int nThreads) {  return new ThreadPoolExecutor(nThreads, nThreads,  0L, TimeUnit.MILLISECONDS,  new LinkedBlockingQueue<Runnable>(),  new DefaultThreadFactory()); // 匿名工厂,线程名无业务含义  
    }  
    // 推荐做法:自定义工厂  
    ExecutorService pool = new ThreadPoolExecutor(  4, 8, 30, SECONDS,  new ArrayBlockingQueue<>(100),  new NamedThreadFactory("Order-Processor", false, Thread.NORM_PRIORITY)  
    );  
    
  • 弃用原因:默认工厂创建的线程名无业务意义,且LinkedBlockingQueue可能导致 OOM(队列无界),自定义工厂 + 合理参数是现代开发标配。

③ 守护线程在工厂中的应用场景

  • 场景:后台日志收集线程、心跳检测线程,设置thread.setDaemon(true),确保程序退出时随主线程终止,避免资源泄漏。

④ 工厂模式如何配合线程池拒绝策略?

  • 当线程池拒绝任务(如AbortPolicy抛出异常),可通过工厂为线程添加钩子函数,监控拒绝事件:
    // 在newThread中设置钩子  
    thread.setUncaughtExceptionHandler((t, e) -> {  if (e instanceof RejectedExecutionException) {  metrics.trackRejectedTask(t.getName()); // 统计拒绝次数  }  
    });  
    

三、建造者模式在 Android 中的高频考点

1. OkHttpClient.Builder:网络配置的 “瑞士军刀”(字节跳动、腾讯面试真题)

核心配置项源码解析

public final class OkHttpClient.Builder {  // 必选参数(无默认值,构建时校验)  private int connectTimeout = 10_000; // 10秒  private int readTimeout = 10_000;  private int writeTimeout = 10_000;  // 可选参数(有默认实现,支持链式覆盖)  private List<Interceptor> interceptors = new ArrayList<>(); // 应用拦截器(用户自定义)  private List<Interceptor> networkInterceptors = new ArrayList<>(); // 网络拦截器(OkHttp内部)  private ConnectionPool connectionPool = new ConnectionPool(); // 连接池(默认保持5分钟)  // 链式方法本质:返回this,支持连续调用  public Builder connectTimeout(int timeout, TimeUnit unit) {  this.connectTimeout = unit.toMillis(timeout);  return this;  }  // 构建核心:校验参数 + 不可变对象创建  public OkHttpClient build() {  return new OkHttpClient(this); // 将Builder状态复制到OkHttpClient实例  }  
}  

面试高频问题:
① 应用拦截器 vs 网络拦截器(顺序决定行为)

  • 执行顺序:应用拦截器(用户自定义)→ 重试 & 重定向拦截器 → 桥接拦截器 → 网络拦截器 → 连接池拦截器 → 最后是实际网络请求。
  • 典型场景
    • 应用拦截器:添加公共 Header(如 Token)、日志打印(不关心重定向)。
    • 网络拦截器:处理响应体压缩(Gzip)、监控真实网络请求耗时(排除重试逻辑)。

② 连接池为什么默认保持 5 分钟?建造者如何自定义

// 自定义连接池(长连接场景)  
OkHttpClient client = new OkHttpClient.Builder()  .connectionPool(new ConnectionPool(10, 30, TimeUnit.MINUTES)) // 保持10个空闲连接,30分钟  .build();  
  • 原理:通过建造者设置ConnectionPool,避免频繁创建 TCP 连接(三次握手开销),提升 HTTPS 请求性能。
2. Retrofit.Builder:从接口到网络请求的 “转换器工厂”(阿里、美团面试真题)

核心扩展点源码解析

public final class Retrofit {  private final String baseUrl;  private final List<Converter.Factory> converterFactories; // 数据转换器(如Gson/Jackson)  private final List<CallAdapter.Factory> callAdapterFactories; // 回调适配器(如RxJava、Kotlin Coroutines)  private final OkHttpClient client; // 依赖OkHttp的建造者配置  // 建造者核心:链式添加工厂  public Builder addConverterFactory(Converter.Factory factory) {  converterFactories.add(factory);  return this;  }  public Builder client(OkHttpClient client) {  this.client = client; // 可复用外部配置好的OkHttpClient(如已添加日志拦截器)  return this;  }  
}  

面试高频问题:
① 为什么 Retrofit 需要 Converter.Factory?自定义转换器如何实现?

  • 答案
    Retrofit 通过工厂模式解耦 “网络字节流” 与 “业务对象” 的转换逻辑,例如:
    // 自定义Gson转换器(支持LocalDateTime序列化)  
    public class CustomGsonConverterFactory extends Converter.Factory {  private final Gson gson;  public static CustomGsonConverterFactory create() {  return create(new GsonBuilder()  .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeAdapter())  .create());  }  // 重写requestBodyConverter和responseBodyConverter方法  
    }  
    // 使用时通过建造者添加  
    Retrofit retrofit = new Retrofit.Builder()  .addConverterFactory(CustomGsonConverterFactory.create())  .build();  
    

② Retrofit 为什么推荐复用 OkHttpClient 实例?与建造者模式的关系?

  • 性能原因:OkHttpClient 内部的连接池、DNS 缓存等是重量级资源,重复创建会导致性能下降。
  • 建造者实践
    // 全局单例OkHttpClient(通过建造者配置)  
    private static final OkHttpClient OK_HTTP_CLIENT = new OkHttpClient.Builder()  .connectTimeout(15, SECONDS)  .addInterceptor(new LoggingInterceptor())  .build();  // Retrofit复用该实例  
    private static final Retrofit RETROFIT = new Retrofit.Builder()  .baseUrl("https://api.example.com")  .client(OK_HTTP_CLIENT)  .addConverterFactory(GsonConverterFactory.create())  .build();  
    
3. OkHttp vs Retrofit 建造者模式对比(面试必考点)
特性OkHttpClient.BuilderRetrofit.Builder
核心职责配置网络底层(连接、拦截器、证书、连接池)配置接口转换(BaseUrl、数据转换器、回调适配)
不可变对象构建后OkHttpClient所有属性不可变同理,Retrofit实例构建后不可变
依赖关系独立配置,可被 Retrofit.Builder 引用必须依赖 OkHttpClient(或使用默认实例)
链式调用核心网络参数的 “物理层” 配置(如超时、代理)业务层抽象(如将接口方法转为 HTTP 请求)
面试陷阱忘记设置readTimeout导致 Socket 永久阻塞未添加数据转换器导致ClassCastException
Android 场景如何区分?

解答

  • 工厂模式:适合 “一键创建” 简单对象,如 LayoutInflater.inflate() 直接生成 View。
  • 建造者模式:适合 “分步配置” 复杂对象,如配置一个带有拦截器、超时时间、缓存策略的 OkHttpClient(需多个可选参数组合)。

四、Android 面试高频综合题:设计模式与性能 / 内存优化结合

1. 单例持有 Activity Context 为什么会导致内存泄漏?如何避免?(阿里、美团面试真题)

解答

  • 原理:单例是全局静态实例,若持有非静态的 Activity Context,当 Activity 销毁后,单例的强引用会阻止 Activity 被回收,导致内存泄漏。
  • 解决方案
    • 单例中使用 Application Context(生命周期与 App 一致)。
    • 若必须持有 Activity Context,可使用 弱引用(但需注意空指针问题,非推荐方案)。
2. 线程池工厂模式如何避免 “幽灵线程”?(字节跳动面试真题)
  • 问题场景:线程异常终止后,线程池通过工厂创建新线程,但未记录历史,导致调试困难。
  • 解决方案
    // 在ThreadFactory中添加线程创建序号和业务标签  
    public Thread newThread(Runnable r) {  Thread thread = new Thread(r, String.format("%s-%d", namePrefix, counter.getAndIncrement()));  // 关键:设置线程上下文(如MDC,用于日志关联)  MDC.put("thread_id", thread.getName());  return thread;  
    }  
    
3. OkHttp 建造者如何优化 HTTPS 性能?(阿里面试真题)
  • 实战配置
    OkHttpClient client = new OkHttpClient.Builder()  // 启用TLS 1.3(比1.2快50%握手时间)  .sslSocketFactory(sslContext.getSocketFactory(), trustManager)  .protocols(Arrays.asList(Protocol.TLS_1_3, Protocol.TLS_1_2))  // 配置连接池(长连接场景)  .connectionPool(new ConnectionPool(50, 5, TimeUnit.MINUTES))  // 启用HTTP/2(需服务端支持)  .addInterceptor(new OkHttp3.Http2CleartextInterceptor())  .build();  
    
4. Retrofit 建造者如何处理多环境配置(开发 / 测试 / 生产)?
  • 工厂方法 + 建造者组合模式
    public class RetrofitFactory {  private static final Map<String, Retrofit> retrofitMap = new HashMap<>();  public static Retrofit getRetrofit(String env) {  if (!retrofitMap.containsKey(env)) {  OkHttpClient client = new OkHttpClient.Builder()  .addInterceptor(new EnvInterceptor(env)) // 根据环境切换BaseUrl  .build();  Retrofit retrofit = new Retrofit.Builder()  .client(client)  .baseUrl(getBaseUrlByEnv(env))  .addConverterFactory(GsonConverterFactory.create())  .build();  retrofitMap.put(env, retrofit);  }  return retrofitMap.get(env);  }  
    }  
    

相关文章:

Android第六次面试总结之Java设计模式篇(一)

一、单例模式在 Android 面试中的核心考点 1. Android 中如何安全实现单例&#xff1f;需注意哪些坑&#xff1f;&#xff08;字节跳动、美团面试真题&#xff09; 解答&#xff1a; Android 中实现单例需重点关注 Context 泄漏、线程安全 和 反射 / 序列化攻击。 推荐实现&…...

关于论文中插入公式但是公式相对于段落的位置偏上应该如何调整备份

因为mythtype之前插入到word里面出现了一些问题就给删掉了&#xff0c;本来要是word里面内联mythtype的话直接&#xff0c;点击mythtype的格式化就可以了&#xff0c; 也就是这个佬的视频介绍链接 然后现在试了试普通word里面的方法&#xff0c;这个是比较有用的 然后看这个例…...

[java八股文][Java并发编程面试篇]并发安全

juc包下你常用的类&#xff1f; 线程池相关&#xff1a; ThreadPoolExecutor&#xff1a;最核心的线程池类&#xff0c;用于创建和管理线程池。通过它可以灵活地配置线程池的参数&#xff0c;如核心线程数、最大线程数、任务队列等&#xff0c;以满足不同的并发处理需求。Exe…...

【东枫科技】代理英伟达产品:智能网卡

文章目录 对比详细&#xff1a;NVIDIA ConnectX-7 适配器详细&#xff1a;NVIDIA ConnectX-6 Lx 以太网智能网卡详细&#xff1a;NVIDIA ConnectX-6 Dx 以太网智能网卡详细&#xff1a;NVIDIA ConnectX-6 InfiniBand 适配器 对比 详细&#xff1a;NVIDIA ConnectX-7 适配器 为最…...

eNSP中路由器OSPF协议配置完整实验和命令解释

本实验使用三台华为路由器&#xff08;R1、R2和R3&#xff09;相连&#xff0c;配置OSPF协议实现网络互通。拓扑结构如下&#xff1a; 实验IP规划 R1: GE0/0/0: 192.168.12.1/24 (Area 0)Loopback0: 1.1.1.1/32 (Area 0) R2: GE0/0/0: 192.168.12.2/24 (Area 0)GE0/0/1: 192.…...

解锁健康生活:全新养身指南

健康养身不是遥不可及的目标&#xff0c;而是由一个个小习惯编织成的生活方式。当我们将这些健康理念融入日常&#xff0c;就能为身体注入源源不断的活力。​ 从 “吃” 开始守护健康。尝试制作 “营养碗”&#xff0c;底层铺满羽衣甘蓝、生菜等绿叶蔬菜&#xff0c;中间搭配水…...

win11 怎样把D盘空间分给C盘一点

如下所示&#xff0c;我的C盘甚至已经爆红了&#xff0c;打算D盘清理一些空间给C盘。 首先附上链接&#xff0c;这是我在b站看的教程&#xff0c;虽然跟着视频没成功&#xff0c;但是结合评论区大神们的建议&#xff0c;尝试了好几种方法&#xff0c;最终自己摸索成功了。 【怎…...

Apache Doris与StarRocks对比

## 历史背景 Apache Doris源自百度的Palo项目,于2017年开源,2018年贡献给Apache基金会,并于2022年从Apache孵化器毕业成为顶级项目。StarRocks则是由原Apache Doris团队的一部分成员在2020年分支出来成立的独立项目,最初称为DorisDB,后更名为StarRocks。这两个项目虽然有…...

OSCP - Proving Grounds - NoName

主要知识点 linux命令注入SUID find提权 具体步骤 从nmap开始搜集信息&#xff0c;只开放了一个80端口 Nmap scan report for 192.168.171.15 Host is up (0.40s latency). Not shown: 65534 closed tcp ports (reset) PORT STATE SERVICE VERSION 80/tcp open http …...

2025年OpenAI重大架构调整:资本与使命的再平衡

目录 前言 一、调整核心&#xff1a;三重架构的重构 1.1 控制权的重新锚定 1.2 营利部门的角色转型 1.3 资金池的重新配置 二、调整动因&#xff1a;三重矛盾的破解 2.1 资金需求与融资限制的冲突 2.2 商业竞争与使命纯度的博弈 2.3 内部治理与外部监管的张力 三、产…...

【quantity】0 README.md文件

PhysUnits 物理单位库 Type-safe physical quantities with dimensional analysis 带量纲分析的类型安全物理量库 A Rust library for safe unit operations / Rust实现的类型安全单位计算库 Core Design / 核心设计 1. Dimension / 量纲 /// Base SI dimensions / 国际单…...

[python] str

一、移除字符串中所有非字母数字字符 使用正则表达式 import re string_value "alphanumeric123__" cleaned_string re.sub(r[\W_], , string_value) # 或 r[^a-zA-Z0-9] print(cleaned_string) # 输出: alphanumeric123使用**str.isalnum()**方法 string_v…...

iOS与HTTPS抓包调试小结

最近在做一个多端 SDK 网络请求兼容性的测试&#xff0c;期间遇到一些 HTTPS 请求抓不到、iOS 抓包失效等问题&#xff0c;趁机整理一下我平时抓包时用到的几个工具和技巧&#xff0c;也顺便记录一下对比体验。 一、传统工具的局限 最早用的是 Charles 和 Fiddler&#xff0c…...

AI基础知识(02):机器学习的任务类型、学习方式、工作流程

03 机器学习(Machine Learning)的任务类型与学习方式 广义的机器学习主要是一个研究如何让计算机通过数据学习规律,并利用这些规律进行预测和决策的过程。这里的Machine并非物理意义上的机器,可以理解为计算机软硬件组织;Learning可以理解为一个系统或平台经历了某些过程…...

2025年大风灾害预警升级!疾风气象大模型如何筑起安全防线?

近年来,全球极端天气事件频发,大风灾害正成为威胁城市安全、交通运输和公共设施的重要隐患。据气象部门预测,2025年我国大风天气将更加频繁,局部地区可能出现超强阵风,对高空作业、电力设施、交通运输等领域构成严峻挑战。面对这一趋势,传统的气象预警方式已难以满足精准…...

Docker手动重构Nginx镜像,融入Lua、Redis功能

核心内容&#xff1a;Docker重构Nginx镜像&#xff0c;融入Lua、Redis功能 文章目录 前言一、准备工作1、说明2、下载模块3、Nginx配置文件3、Dockerfile配置文件3、准备工作全部结束 二、构建镜像三、基于镜像创建容器三、lua脚本的redis功能使用总结 前言 ⁣⁣⁣⁣ ⁣⁣⁣⁣…...

Spring Boot Starter简介-笔记

1. Starter简介 Spring Boot Starter 是 Spring Boot 框架的核心组件之一&#xff0c;它通过预定义的依赖集合和自动化配置机制&#xff0c;极大简化了 Spring 应用的开发和部署。 Spring Boot Starter 的核心功能 自动化配置&#xff08;Auto-Configuration&#xff09; Spr…...

关系型数据库与非关系型数据库深度对比:从设计哲学到应用场景的全解析

关系型数据库与非关系型数据库深度对比:从设计哲学到应用场景的全解析 引言 在数字化浪潮中,数据库技术始终扮演着基础核心角色。本文将通过技术架构、应用场景等维度,深入剖析关系型数据库(RDBMS)与非关系型数据库(NoSQL)的本质差异。我们将以MySQL、MongoDB、Redis等…...

论文速读:《CoM:从多模态人类视频中学习机器人操作,助力视觉语言模型推理与执行》

论文链接&#xff1a;https://arxiv.org/pdf/2504.13351 项目链接&#xff1a;https://chain-of-modality.github.io/ 0. 简介 现代机器人教学的一个重要方向是让机器人通过观看人类的视频演示&#xff0c;自动学习并执行复杂的物理操作任务&#xff0c;比如拧瓶盖、插插头、打…...

系统思考:选择大于努力

在今年的伯克希尔哈撒韦股东大会上&#xff0c;94岁高龄的股神巴菲特再次以他的智慧和幽默&#xff0c;给年轻人留下了三句关于人生的黄金建议。让我印象最深刻的是&#xff1a;“选择和谁一起走&#xff0c;比怎么走更重要。” 这一句话让我反思了许多——人生的轨迹不单单是…...

【HTML5】显示-隐藏法 实现网页轮播图效果

【HTML5】显示-隐藏法 实现网页轮播图效果 实现思路&#xff1a;先将所有图片在页面中设置好&#xff0c;然后给放置图片的元素li添加display&#xff1a;none属性将其隐藏&#xff0c;然后通过js获取到放置图片的元素li&#xff0c;再一个一个的给li元素添加display&#xff…...

Jenkins 改完端口号启动不起来了

让我们将 Jenkins 恢复到默认的 8080 端口&#xff0c;确保它能正常启动&#xff1a; 1. 修改 Jenkins 的配置文件&#xff1a; sudo nano /etc/default/jenkins 将内容修改为&#xff1a; HTTP_PORT8080 JENKINS_ARGS"--webroot/var/cache/jenkins/war --httpPort8080…...

招标专家随机抽选——设计讲解—未来之窗智能编程——仙盟创梦IDE

招标专家系统 专家评标系统是服务于各类招标评标活动的数字化平台。它依托先进信息技术&#xff0c;集专家库管理、随机抽取专家、在线评标等功能于一体。系统依据项目需求设定筛选条件&#xff0c;从庞大专家库中精准抽取合适专家。评标时&#xff0c;专家可在线查阅投标文件…...

Os 库报错指南 路径处理常见陷阱

平台分隔符差异 Windows用\&#xff0c;Unix用/ → 使用os.path.join()自动处理 路径解析错误 os.path.abspath()解析相对路径时依赖当前工作目录 路径规范化缺失 ../等符号链接需用os.path.normpath()规范化 # 不推荐 path dir\\file.txt # Windows风格 path dir/file.…...

GD32/STM32 ADC/DMA使用指南

首先我们对ADC及DMA的基础知识作一下简单介绍。 一、 GD32/STM32 ADC模块的核心要点 一&#xff09;、ADC基础特性 ‌12位逐次逼近型‌ GD32/STM32 ADC为12位分辨率&#xff0c;最大量化值为4095&#xff08;对应3.3V参考电压&#xff09;&#xff0c;支持0-3.3V模拟输入范…...

CSS Border 三角形阴影与多重边框的制作

CSS Border 三角形阴影与多重边框的制作 在现代网页设计中&#xff0c;CSS的强大功能让设计师和开发者能够创造出丰富多彩的视觉效果。本文将深入探讨如何利用CSS的border​属性制作三角形阴影以及多重边框效果。这些技巧不仅能提升页面的美观度&#xff0c;还能增强用户体验。…...

ES6/ES11知识点 续五

迭代器【Iterator】 ES6 中的**迭代器&#xff08;Iterator&#xff09;**是 JavaScript 的一种协议&#xff0c;它定义了对象如何被逐个访问。迭代器与 for…of、扩展运算符、解构赋值等语法密切相关。 &#x1f4d8; 迭代器工作原理 ES6 迭代器的工作原理基于两个核心机制…...

如何选择 边缘计算服务器

边缘计算服务器选型指南&#xff08;2025年更新版&#xff09; 一、明确应用场景需求 场景细分‌ 工业控制、自动驾驶等需‌毫秒级响应‌的场景&#xff0c;优先选择集成多核处理器&#xff08;如Xeon D系列&#xff09;和实时算法加速模块的机型&#xff0c;确保延迟≤50ms&…...

VMware如何安装?Ubuntu详细步骤

VMware如何安装&#xff1f;Ubuntu详细步骤如下&#xff1a; 在VMware中安装Ubuntu是一个常见的操作&#xff0c;适用于开发、测试或学习Linux的场景。以下是详细的实战步骤和注意事项&#xff0c;帮助你顺利完成安装。 准备工作 软件下载&#xff1a; VMware Workstation/Play…...

【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)高级用法

【Bootstrap V4系列】学习入门教程之 组件-卡片&#xff08;Card&#xff09;高级用法 一、Sizing 尺寸1.1 Using grid markup 使用网格标记1.2 Using utilities 使用实用程序1.3 Using custom CSS 使用自定义CSS 二、Text alignment 文本对齐方式三、Navigation 导航 一、Sizi…...

WiFi那些事儿(八)——802.11n

目录 802.11n 技术简介与测试项 一、802.11n 技术简介 &#xff08;一&#xff09;标准概述 &#xff08;二&#xff09;关键技术特性 1. MIMO&#xff08;多输入多输出&#xff09;技术 2. 信道绑定&#xff08;Channel Bonding&#xff09; 3. 帧聚合&#xff08;Fram…...

Transformer数学推导——Q56 推导动态残差门控(Dynamic Residual Gating)的权重更新公式

该问题归类到Transformer架构问题集——残差与归一化——残差连接。请参考LLM数学推导——Transformer架构问题集。 1. 引言 在深度学习的演进历程中&#xff0c;网络结构的创新始终围绕着如何更高效地处理信息、提升模型性能展开。动态残差门控&#xff08;Dynamic Residual…...

Kaggle——House Prices(房屋价格预测)简单实现

题目‌&#xff1a; 从Kaggle的“House Prices - Advanced Regression Techniques”数据集使用Pandas读取数据&#xff0c;并查看数据的基本信息。选择一些你认为对房屋价格有重要影响的特征&#xff0c;并进行数据预处理&#xff08;如缺失值处理、异常值处理等&#xff09;。…...

Vue项目Git提交流程集成

Vue项目Git提交流程集成 本教程将指导你如何在Vue项目中集成一个规范化的Git提交流程&#xff0c;包括代码规范检查、提交信息规范和自动化工具配置。 前置条件 Node.js 14.0 和 npm/yarn/pnpmVue项目&#xff08;Vue 2或Vue 3均可&#xff09;Git已初始化的仓库 一、规范化…...

使用 OpenSSL 吊销 Kubernetes(k8s)的 kubeconfig 里的用户证书

一.用 OpenSSL 依据已有的自签名 CA 注销签发的证书的步骤 1. 准备工作 你得有自签名 CA 的私钥&#xff08;通常是 .key 文件&#xff09;、CA 证书&#xff08;通常是 .crt 文件&#xff09;以及证书吊销列表&#xff08;CRL&#xff09;文件。若还没有 CRL 文件&#xff0c…...

kubeadm部署k8s

我在阿里云上部署的k8s master 4c/8g/40g rocky linux8.9 node1/node2 2c/4g/40g rocky linux8.9 安装docker (我安装的是v1.19.1版本&#xff0c;是旧版本&#xff0c;可以装新版本&#xff0c;docker的版本和kubeadm,kubectl,kubelet版本相同&#xff09; 1.所有…...

FPGA实战项目1——坦克大战

FPGA实战项目1——坦克大战 根据模块化思想&#xff0c;可将此任务简单的进行模块拆分&#xff1a; 系统原理&#xff0c;模块划分&#xff0c;硬件架构&#xff0c;算法支持&#xff0c;Verilog实现框架 一&#xff0c;系统总体原理 1. 核心设计思想 硬件并行处理&#x…...

LeetCode 1781. 所有子字符串美丽值之和 题解

示例 输入&#xff1a;s "aabcb" 输出&#xff1a;5 解释&#xff1a;美丽值不为零的字符串包括 ["aab","aabc","aabcb","abcb","bcb"] &#xff0c;每一个字符串的美丽值都为 1这题光用文字解说还是无法达到讲…...

Spring Web MVC————入门(1)

今天开始正式带大家学习Spring部分的内容了&#xff0c;大家尝试去弄个专业版嗷&#xff0c;学习起来爽一点 在idea中下载这个插件就行了 我们之后开始创建Spring项目&#xff0c; 蓝色 部分自己起名&#xff0c;type选Maven&#xff0c;其他的默认就好了&#xff0c;之后nex…...

关于 js:1. 基础语法与核心概念

js 全称 JavaScript&#xff08;简称 JS&#xff09;&#xff0c;是 一种运行在浏览器和服务器端的脚本语言。 用途&#xff1a; 浏览器端交互&#xff08;如&#xff1a;点击按钮出现弹窗&#xff09; 网页动态内容渲染&#xff08;如&#xff1a;淘宝、京东页面更新&#xf…...

云境天合水陆安全漏电监测仪—迅速确定是否存在漏电现象

云境天合水陆安全漏电监测仪是一种专为水下及潮湿环境设计的电气安全检测设备&#xff0c;通过高灵敏度电磁传感器探测漏电电流产生的交变磁场&#xff0c;基于法拉第电磁感应定律&#xff0c;自动区分高灵敏度信号和低灵敏度信号&#xff0c;精准定位泄漏电源的具体位置。一旦…...

二、Hadoop狭义和广义的理解

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月6日&#x1fae0; 专栏&#xff1a;Hadoop教程 Hadoop 的双重身份&#xff1a;核心框架与生态系统 在大数据领域&#xff0c;Hadoop 是一个广为人知的概念&#xff0c;但它并非单指某一个软件&#xff0c;而是涵盖了两个层…...

DTU_DTU厂家_5G/4G DTU终端_DTU模块_厦门计讯物联科技有限公司

在物联网蓬勃发展的当下&#xff0c;数据的高效、稳定、可靠的传输成为关键。厦门计讯物联科技有限公司(以下简称“计讯物联”)作为国内工业物联网领域的核心厂商&#xff0c;专注于5G/4G DTU终端、DTU模块及无线数传设备的研发与生产&#xff0c;致力于为智慧城市、能源电力、…...

学习alpha,第2个alpha

alphas (-1 * ts_corr(rank(ts_delta(log(volume), 2)), rank(((close - open) / open)), 6)) 先分析操作符从左到右 ts_corr: Pearson 相关度量两个变量之间的线性关系。当变量呈正态分布且关系呈线性时&#xff0c;它最有效。 ts_corr(vwap, close, 20)是一个计算时间序列相…...

如何用爬虫获得按关键字搜索淘宝商品

在电商领域&#xff0c;获取淘宝商品的详细信息对于市场分析、选品上架、库存管理和价格策略制定等方面至关重要。淘宝作为国内知名的电商平台&#xff0c;提供了丰富的商品资源。通过 Python 爬虫技术&#xff0c;我们可以高效地获取淘宝商品的详细信息&#xff0c;包括商品名…...

Android SDK 开发中的 AAR 与 JAR 区别详解

在 Android SDK 开发中&#xff0c;构建项目时我们常常会看到生成两个不同的文件&#xff1a;一个是 build/outputs/aar/*.aar&#xff0c;另一个是 build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar。很多初学者会疑惑&#xff1a;它们之间有什么区别&am…...

Python cv2滤波与模糊处理:从原理到实战

在图像处理领域&#xff0c;滤波与模糊是预处理阶段的两大核心操作&#xff0c;既能消除噪声干扰&#xff0c;又能实现艺术化效果。本文将结合OpenCV的cv2库&#xff0c;系统讲解滤波与模糊的原理及Python实现&#xff0c;带你从理论到实战全面掌握这项技术。 一、滤波与模糊的…...

【SpringBoot3】idea找不到log符号

解决idea找不到log符号&#xff0c;Slf4j注解不起作用 如图 解决办法 pom.xml文件里要手动添加版本号 插件也要添加对应的版本号 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30&l…...

Android学习总结之Java和kotlin区别

一、空安全机制 真题 1&#xff1a;Kotlin 如何解决 Java 的 NullPointerException&#xff1f;对比两者在空安全上的设计差异 解析&#xff1a; 核心考点&#xff1a;Kotlin 可空类型系统&#xff08;?&#xff09;、安全操作符&#xff08;?./?:&#xff09;、非空断言&…...

C++笔记-二叉搜索树(包括key,key/value搜索场景等)

1.二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 1.若它的左子树不为空&#xff0c;则左子树上所有结点的值都小于等于根结点的值若它的右子树不为空&#xff0c;则2.右子树上所有结点的值都大于等于根结点…...