八股总结(Java)实时更新!
八股总结(java)
-
ArrayList和LinkedList有什么区别
- ArrayList底层是动态数组,LinkedList底层是双向链表;
- 前者利于随机访问,后者利于头尾插入;
- 前者内存连续分配,后者通过指针连接多块不连续的内存;
-
实现多线程的几种方式
- 通过继承Tread并重写run();
- 实现无返回值的Runnable接口;
- 实现有返回值的Callable接口,通常于Future一起使用;
- 使用
ExecutorService
线程池工厂; - 使用
ThreadPoolExecutor
自定义线程池; - 使用
ComletetableFuture
异步链式编程;
-
线程池有哪些核心参数
-
核心线程数:线程池创建时就存在的线程数,并且不会因为任务运行完成而销毁;
-
最大线程数:线程池最大承载的线程数,非核心线程任务运行完成后自动销毁;
-
工作队列:用于存放待执行任务的阻塞队列,有基于数组的有界队列,基于链表的无界队列,不存储元素的队列但每个插入必须等待一个移除,支持优先级排序的无界队列;
-
线程空闲时间:非核心线程任务运行完成后等待新任务的最长时间;
-
时间单位:空闲时间的单位;
-
拒绝策略:当任务数超过最大线程数时的行为,默认抛出异常,也可以由提交任务的线程直接执行任务,也可以丢弃任务不抛出异常,也可以丢弃队列最旧任务并重新提交;
-
-
线程的状态有哪些
-
新建:线程new,但没有start();
-
可运行:调用start(),但还在操作系统分配资源;
-
阻塞:线程因为锁而阻塞;
-
等待:线程无限期等待其他线程的操作;
-
超时等待:线程等待其他线程的操作,但设置过期时间;
-
终止:线程执行完毕或异常终止;
-
-
String、StringBuilder、StringBuffer有什么区别
-
String,是定长字符串,对String的所有操作都会创建新的对象;
-
StringBuilder,可以在不创建新对象的情况下对字符串内容进行修改,线程并不安全,适用于单线程环境下;
-
StringBuffer,可以在不创建新对象的情况下对字符串内容进行修改,线程安全,适用于多线程环境下;
-
-
等于号(==)和equals方法有什么区别?
- ==常用于基本数据类型之间的比较,对于引用数据类型,则对比的是其地址
- equals常用于比较两个对象的内容是否相等,默认情况下Object类的equals方法比较的也是地址,但和许多包装类都重写了equals方法,使其比较的是对象的内容;
-
final关键字有什么作用?修饰类时有什么效果?
- final修饰的变量称为常量,如果修饰的是基本数据类型,则其值不能修改,若修饰的是引用数据类型则其指向的对象不能修改,但可以修改其对象内部状态;
- 修饰方法,不能被子类重写;
- 修饰类,不能被继承;
-
HashMap的底层原理
- 底层是一个默认长为16的动态数组,其存储链表或红黑树;
- 当有键值对存入时,键会通过哈希函数映射当数组对应下标位置,值则会存入链表中;
- 若链表长度超过8则转换为红黑树;若红黑树的数据量小于6,则退化为链表;
- 若数组元素数量超过默认负载因子的0.75就成倍扩容;
-
Hashmap的扩展知识
-
为什么链表长度超过8要转换为红黑树
- 在极端情况下,数据分配不均,导致大量键值对集中在一个元素链表中,会导致hashmap退化为链表影响效率;
- 根据大数据统计,链表长度超过8是因为哈希冲突导致的;
为什么选择红黑树而不是B+树
- 红黑树是自适应平衡二叉树,内存占用小,在hashmap中性能足够;
- B+树的适用情景为io数据流的读取,因为其节点可以有多个子节点,每个节点可以存储多个键,用于减少树的高度,降低磁盘io访问次数,并且所有子节点在同一层,用于平衡io的平均访问时间,叶子节点之间通过指针连接,形成一个有序链表,支持高效返回查询;
-
-
ConcurrentHashMap的底层原理
-
concurrentHashMap的底层就是HashMap的基础上保证线程安全;
-
在jdk8之前,采用分段锁实现线程安全,内部有多个段组成,每个段维护一部分数据,并各自有一把锁。修改某个段的数据时对该段加锁保证线程安全;读取则不用加锁,因为段内的数组使用volatile修饰,保证可见性;
-
jdk8后,采用CAS+synchronized实现线程安全,当要向数组中某一位置插入数据时,若该位置无数据就使用CAS进行写入,反之加锁后进行写入;
-
当数组进行扩容时采用的是并发+CAS+锁的方式,让扩容的同时不影响读取操作;
-
为什么改为CAS+锁,因为原来的分段锁每个段都需要维护一把锁,占用了过多的资源,并且段相比较节点的颗粒度较大;
-
class的生命周期
- class的生命周期指类从JVM虚拟机加载开始,直到卸载的过程,生命周期包括加载、验证、准备、解析、初始化、使用和卸载七个阶段;
- 加载,new创建类的实例、访问类的静态方法或属性、使用反射时会将class文件加载到JVM中,生成字节码class文件;
- 验证,确保字节码class文件的合法;
- 准备,静态变量分配内存并设置默认值;
- 解析,符号引用转为直接引用;
- 初始化,执行static{}代码块和静态变量的显式赋值;
- 使用;
- 卸载,释放内存;
-
JVM是什么
- java的java虚拟机,负责执行java字节码,并提供内存管理、垃圾回收等机制;
- JVM是java“一次编写,随处运行”的核心,将java源码编译为class字节码再解释或编译为机器码交由操作系统执行;
- JVM主要组成有类加载器,运行时数据区,执行引擎等;
-
JVM的工作流程
-
编写java代码;
-
使用javac编译为class字节码;
-
加载字节码;
-
执行字节码,交由JIT编译器与解释器,转换为机器码;
-
内存管理,分为堆、栈、方法区等;
-
程序结束,释放所有资源;
-
-
JVM的内存模型与垃圾回收机制
- 主要分为分为堆、栈、方法区(jdk8前叫永久代)、pc程序计数器、直接内存;
- 方法区,用于存放类信息,常量池,静态变量等;
- 堆,用于存放对象实例和数组,是垃圾回收的主要区域,分为新生代和老年代;
- 栈,用于存放局部变量、方法调用帧;
- 程序计数器,用于记录当前线程执行的字节码指令魏智用于线程切换后回复执行位置;
- 直接内存,手动管理,不受JVM堆内存限制;
- 垃圾回收机制
-
是JVM自动管理内存的核心机制,负责回收不再使用的对象,释放内存空间;
-
垃圾回收的基本原理是,可达性分析,从GC根对象触发,遍历所有可达对象,不可达对象视为垃圾进行回收;
-
垃圾回收算法:
- 标记-清除算法:从根对象出发,标记所有可达对象,清除未被标记的对象;缺点是会产生内存碎片;
- 标记-整理算法:在标记-清理算法的基础上,标记后先将存活的对象移动到另一片区域,之后进行清除;
- 复制算法:将内存分为AB两块,A区存活的对象赋值到B区,清理A区的所有对象;
- 分代收集:将堆分为新生代和老年代,新生代是新对象分配的区域,采用复制算法,老年代是长期存活的对象,使用标记-清除或标记-整理算法;
-
垃圾回收器:
- 单线程回收器,适用于单线程;
- 多线程回收器,适用与多线程;
- CMS回收器,采用三色标记法,并发执行,对象尚未被标记则为白色,对象已被标记但引用的对象还未标记则为灰色,对象及其引用对象都被标记则为黑色,适用于响应时间敏感的应用;工作流程是:
- 初始标记:标记从GC根对象直接可达的对象,标记灰色,需要STW停顿;
- 并发标记:标记所有灰色对象的引用对象;
- 重新标记:重新标记并发标记阶段所有修改引用或者不在引用的对象,需要SWT停顿;
- 并发清除:清除所有白色标记的对象;
- G1回收器,分区回收,适用于低延迟的大内存应用;
- ZGC回收器,超低延迟;
- G1垃圾回收器与CMS垃圾回收器的区别
- G1是在可控的停顿时间内实现高吞吐量,并且适用于大内存。CMS尽量减少停顿时间,适用于中小内存;
- G1堆内存管理基于分区管理,划分为多个大小相同的区域,每个区域可以是年轻代、老年代和永久代。而CMS则将堆内存划分为新生代和老年代;
- G1内存管理采用并发标记整理算法,减少碎片,而CMS采用并发标记清除算法,容易造成FullGC堆溢出;
- 发生了OutOfMemoryError如何解决
- 首先根据报错确认问题在哪;
- 使用jmap生成堆转储文件;
- 分析堆内存;
- 根据原因调整JVM参数;
- 选择合适的垃圾回收机制;
-
CAS的原理
- CAS是一种无锁原子操作,他有三个属性,变量的内存地址,预期值,新值,如果期望值与内存中的值一致则更新为新值;
- CAS存在ABA问题,ABA问题是当一个变量从A变为B再变为A,CAS机制会误认为值没有被修改;
- 常见的解决方案是通过给变量加上时间戳或是版本号,每次修改就会更新,这样修改值时,CAS就能检测到变化;
-
volatile字段的原理,是否能替代锁
- volatile是java的修饰词,用于确保变量的可见性与有序性,主要作用于解决多线程环境下的内存可见性问题;
- 在多线程环境下,每个线程都有自己的工作内存,当线程对变量进行修改时,会先修改变量存放到自己的内存中,不会立即同步给主内存,导致其他线程不能看到最新的值;
- volatile会强制修改后的值立即写会主内存,并强制其他线程重新读取该变量,保证可见性;
- volatile会保证变量的读写操作按照代码的顺序执行;
- volatile的底层原理是依赖于内存屏障,他是一种CPU指令用于控制指令的执行顺序与内存可见性;
- 在写入变量时,会插入写屏障,确保之前操作都完成后,在将新的变量同步给主内存;
- 在插入变量时,会插入读屏障,确保之后的操作都能看到最新的值;
- volatile只能解决可见性与有序性的问题,无法解决复合操作的原子性问题;
-
双亲委派模型
- 是java类的加载机制,采用逐级委派的方式加载类,主要目的是保证java核心类的安全性和避免类的重复加载;
- 按照层次关系分为:
- 启动类加载器:负责加载Java核心类库;
- 扩展类加载器:负责加载扩展类库;
- 应用类加载器:负责还在开发者自己编写的Java代码;
- 自定义类加载器:开发者继承ClassLoader自定义类加载逻辑;
- 工作机制:当类加载器需要加载一个类时,会由当前加载器先向父类加载器发送加载请求,直到启动类加载器,如果找不到则由当前加载器加载;
-
AQS的底层原理
- AQS(抽象队列同步器)是Java并发包中的核心组件,用于实现锁和同步器;
- AQS采用FIFO队列+CAS操作来管理锁的同步和排队,其底层主要通过状态变量(state)和队列管理来实现线程的阻塞、唤醒、等待和竞争锁等功能,通过CAS操作保证线程安全;
- state变量用于表示同步的当前状态,state==0表示锁为被占用,!=0表示已被占用;
- FIFO队列来管理等待同步的线程,当线程尝试获取同步资源失败时会被放入队列,按照先进先出的顺序等待获取同步;
- 队列数据结构是一个双向链表,每个等待的线程都是一个队列的节点,节点包含线程和前后指针;头部是等待同步的线程,尾部是最新加入的线程;
-
Executors线程工厂类有哪些常见的工厂方法
-
newFixedThreadPool(int nThreads),创建一个固定大小的线程池,核心线程数与最大线程数相同,适用于执行长期稳定任务,保证一定并发量的情况;
-
newCachedThreadPool(),创建一个可缓存的线程池,无核心线程,最大线程数为Integer.MAX_VALUE,适用于执行大量短时间任务的情况,能够充分利用系统资源;
-
newSingleThreadExecutor(),创建单线程的线程池,保证所有任务按照顺序执行;
-
-
数组如何转为list
- 使用Arrays.asList(T… a),返回定长list;
- 使用new ArrayList<>(Arrays.asList(array));
- 使用Stream,Arrays.stream(array).collect(Collectors.toList());
- 使用for循环手动添加;
-
如何遍历list
- 增强型for循环;
- 普通循环,访问下标;
- 迭代器;
- Stream流,forEach(System.out::println);
-
任务提交给线程池后是怎么工作的
- 线程池会先检查核心线程数,小于核心线程数,会创建新线程;
- 任务队列未满则任务进入阻塞队列;
- 如果任务队列(ArrayBlockingQueue)已满,且当前线程数小于最大线程数,则会创建新线程执行任务;
- 如果已经达到最大线程数,线程池会执行拒绝策略;
-
wait()和sleep()的区别
- wait和sleep方法都用于使用线程暂停执行,但他们在使用方式、功能和影响上有显著区别;
- sleep是Thread类的静态方法,可以在任何地方调用,无需持有对象锁,调用后线程会暂停执行指定的时间,但不会释放已持有的锁,其他县城无法获取这些锁;
- wait是Object类的方法,必须在同步方法或同步代码块内调用,并且在调用时需要持有该对象的监视器锁,调用后,线程会释放已持有的锁,允许其他线程获取这些锁,线程会进入等待状态,直到被其他线程调用其对象的notify()方法唤醒。如果wait添加了过期时间,若未超过过期时间也可以被notify唤醒,超过时间后自动唤醒;
- sleep常用于让线程暂停执行一段固定的时间,例如实现定时任务或控制线程执行频率;wait常用于线程间的通信;
-
并行与并发的区别:
- 并行(Parallelism): 多个任务在同一时刻同时执行,通常需要多核处理器的支持。
- 并发(Concurrency): 多个任务在同一时间段内交替执行,但不一定同时执行。
-
Java常见的设计模式
- 单例模式:
- 在系统中一个类只存在一个实例,类自身负责创建并维护唯一实例,并提供一个全局方法,允许外部访问该实例;
- 常用于资源管理、配置管理和日志记录;
- 实现单例模式一般通过双重检查锁定,在需要时才创建实例,并通过双重检查和同步块确保线程安全,同时提高性能;
- 普通工厂模式:
- 由一个工厂类根据传入的不同参数创建不同的产品实例,将对象创建逻辑封装在工厂类中;
- 将对象的创建与使用分离,降低了耦合性;
- 缺点是集中力所有对象的创建逻辑,违反了单一职责原则,可能导致工厂类过于复杂。且当需要添加新产品时,需要修改工厂类的代码,不符合开闭原则;
- 工厂方法模式:
- 定义了一个创建对象的接口,由子类决定实例化哪个具体类;
- 相比较普通工厂方法,符合开闭原则,增加新产品时无需修改现有代码;
- 符合单一职责原则,每个具体工厂类只负责创建对应的产品;
- 增加了系统的复杂度,需要对每个具体实现创建工厂类;
- 抽象工厂方法:
- 提供一个创建一系列相关或相互依赖对象的接口,也就是对多组产品抽象其方法,封装隐藏其产品创建的过程;
- 单例模式:
-
threadLocal是什么?
- TreadLocal是一个创建线程局部变量的类,通常情况下,多个线程共享同一变量,可能导致并发问题,使用TreadLocal,存储的变量只能由当前线程使用,保证线程隔离;
- 使用TreadLocal时,可能会导致内存泄露,因为与线程生命周期绑定,如果不及时清理,可能会导致无法回收对象占用内存,所以需要在不需要TreadLocal时调用remove()清理;
相关文章:
八股总结(Java)实时更新!
八股总结(java) ArrayList和LinkedList有什么区别 ArrayList底层是动态数组,LinkedList底层是双向链表;前者利于随机访问,后者利于头尾插入;前者内存连续分配,后者通过指针连接多块不连续的内存…...
NVIDIA TensorRT 10 [TAR]安装教程
平台信息 操作系统:Ubuntu 20.04.6 LTSCPU架构:x86_64GPU:Tesla T4 x 2驱动信息: NVIDIA-SMI:535.104.05Driver Version: 535.104.05CUDA Version: 12.2 步骤 预备步骤 安装驱动和CUDA 假设已经成功安装好驱动&a…...
深入探索 iOS 卡顿优化
认识卡顿 一些概念 FPS:Frames Per Second,表示每秒渲染的帧数,通过用于衡量画面的流畅度,数值越高则表示画面越流畅。CPU:负责对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码…...
【C/C++算法】从浅到深学习---分治算法之快排思想(图文兼备 + 源码详解)
绪论:冲击蓝桥杯一起加油!! 每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论:本章是针对快速排序进行的优化和再次理解快排思想,将会通过4道题目带你再次…...
精通React JS中的API调用:示例指南
精通React JS中的API调用:示例指南 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 精通React JS中的API调用:示例指南为什么在React JS中进行API调用?在React JS中制作API调用:…...
浅谈Thread类及常见方法与线程的状态(多线程编程篇2)
目录 前言 1.Thread类及常见方法 Thread类中常见的属性 1. getId() 2. getName() 3. getState() 4. getPriority() 5. isDaemon() 6. isAlive() 7. isInterrupted() 2.Thread类中常见的方法 Thread.interrupt() (中断线程) Thread.start()(启动线程) 1. 覆写 run…...
算法刷题记录——LeetCode篇(1.2) [第11~20题](持续更新)
更新时间:2025-03-29 LeetCode题解专栏:实战算法解题 (专栏)技术博客总目录:计算机技术系列目录页 优先整理热门100及面试150,不定期持续更新,欢迎关注! 17. 电话号码的字母组合 给定一个仅包含数字 2-9…...
基于HTML5和CSS3实现3D旋转相册效果
基于HTML5和CSS3实现3D旋转相册效果 这里写目录标题 基于HTML5和CSS3实现3D旋转相册效果项目介绍技术栈核心功能实现原理1. HTML结构2. CSS样式设计2.1 基础样式设置2.2 容器样式2.3 图片样式 3. JavaScript实现4. 交互功能实现4.1 触摸和鼠标拖拽4.2 播放控制 项目亮点技术难点…...
unity中Xcharts图表鼠标悬浮表现异常
鼠标悬浮在面板附近,只显示单独的一个项目 而且无论鼠标如何移动,根本没有效果。 解决方案: 需要在对应的Canvas上绑定主相机才可以 鼠标移动到项目上就有信息展示了...
Unity程序嵌入Qt后点击UI按钮Button没有反应
一、前言 在一次项目中,需要将Unity程序嵌入qt中,并在主界面显示,根据网络资料与相关代码,成功将unity程序嵌入,但是在点击Unity的Button按钮时却没有响应,在查找相关资料后,解决问题ÿ…...
Linux安装Cmake (Centos 7.9)
cmake安装 这个虽然已经更新到了4.0.0版本了,但是我们要用3.5版本的,因为这个比较稳定 官方地址:https://github.com/Kitware/CMake/releases/tag/v3.5.0,选择那个cmake-3.5.0-Linux-x86_64.tar.gz下载, 首先解压文…...
31天Python入门——第14天:异常处理
你好,我是安然无虞。 文章目录 异常处理1. Python异常2. 异常捕获try-except语句捕获所有的异常信息获取异常对象finally块 3. raise语句4. 自定义异常5. 函数调用里面产生的异常补充练习 异常处理 1. Python异常 Python异常指的是在程序执行过程中发生的错误或异…...
Linux使用集群服务器查看已安装conda环境,且环境名无显示、系统环境混乱等问题
一、问题 在使用集群服务器前可以查看导入,module load不需要安装。我都是自己重新下载Anaconda3-2024.10-1-Linux-x86_64.sh,然后安装,导致混乱。下面是情况 1.创建的环境名跑到目录下了 2.多个base,且有个base无显示 二、解决办法 1.删…...
【Linux】B站黑马程序视频学习笔记(一)
一、Linux内核与发行版 注意:下图程序指向内核的箭头用的是“调用”,内核指向硬件用的是“调度”。 Linux内核代码下载网站:https://www.kernel.org/ 二、虚拟机-VMware 学习Linux可以借助虚拟机(其使用到的CPU、内存、硬盘都是…...
HarmonyOS NEXT——【鸿蒙原生应用加载Web页面】
鸿蒙客户端加载Web页面: 在鸿蒙原生应用中,我们需要使用前端页面做混合开发,方法之一是使用Web组件直接加载前端页面,其中WebView提供了一系列相关的方法适配鸿蒙原生与web之间的使用。 效果 web页面展示: Column()…...
【软件工程】习题及答案
目录 第一章 习题第一章 习题答案第二章 习题第二章 习题答案第三章 习题第三章 习题答案第四章 习题第四章 习题答案第五章 习题第五章 习题答案第六章 习题第六章 习题答案第七章 习题第七章 习题答案 第一章 习题 一、选择题 1.关于引起软件危机的原因ÿ…...
css选择最后结尾的元素DOM
前言 选中最后一个元素,实际使用非常频繁。 解决方案 使用 CSS 提供的选择器,即可完成。 如下代码示例,两种选择器均可实现。 <p>...</p>p:last-child{ background:#ff0000; }p:nth-last-child(1){background:#ff0000; }p&…...
【AI论文】挑战推理的边界:大型语言模型的数学基准测试
摘要:近年来,大型推理模型的迅猛发展导致现有用于评估数学推理能力的基准测试趋于饱和,这凸显出迫切需要更具挑战性和严谨性的评估框架。为填补这一空白,我们推出了OlymMATH,这是一项全新的奥林匹克级数学基准测试&…...
使用 Python包管理工具 uv 完成 Open WebUI 的安装
uv 是一个极其快速的 Python 包安装器和解析器,用 Rust 编写,旨在作为 pip 和 pip-tools 工作流的替代品 使用 uv 安装(推荐) macOS/Linux: curl -LsSf https://astral.sh/uv/install.sh | shWindows: po…...
【区块链安全 | 第三篇】主流公链以太坊运行机制
文章目录 1. 以太坊账户类型2. 以太坊网络架构2.1 节点类型2.2 交易流程 3. 共识机制4. Gas 机制4.1 Gas 计算方式4.2 以太坊 EIP-1559 交易机制 5. EVM(以太坊虚拟机)5.1 EVM 结构5.2 EVM 指令5.3 EVM 运行机制 6. 智能合约7. ERC 代币标准7.1 ERC-207.…...
C# 字符串(String)
C# 字符串(String) 引言 在C#编程语言中,字符串(String)是处理文本数据的基础。字符串是字符的有序集合,用于存储和处理文本信息。C#的字符串类型是System.String,它是一个引用类型࿰…...
Unity Shader 学习18:Shader书写基本功整理
1. Drawer [HideInInspector]:面板上隐藏[NoScaleOffset]:隐藏该纹理贴图的TillingOffset[Normal]:检查该纹理是否设为法线贴图[HDR]:将颜色类型设为高动态范围颜色(摄像机也要开启HDR才有效果)[PowerSlid…...
构建第一个SpringBoot程序
第一种方式: 注,构建过程中一定要联网 new module -->选择spring Initializr 选择Web --> 勾选Spring Web --> create 构建好的项目如下 这里的 .mvn .git* HELP.md mvnw* 都可以删除 编辑好controller 之后 点击即可运行第一个springbo…...
Java高级JVM知识点记录,内存结构,垃圾回收,类文件结构,类加载器
JVM是Java高级部分,深入理解程序的运行及原理,面试中也问的比较多。 JVM是Java程序运行的虚拟机环境,实现了“一次编写,到处运行”。它负责将字节码解释或编译为机器码,管理内存和资源,并提供运行时环境&a…...
使用飞书API自动化更新共享表格数据
飞书API开发之自动更新共享表格 天马行空需求需求拆解1、网站数据爬取2、飞书API调用2.1 开发流程2.2 创建应用2.3 配置应用2.4 发布应用2.5 修改表格权限2.6 获取tenant_access_token2.7 调用API插入数据 总结 天马行空 之前一直都是更新的爬虫逆向内容,工作中基本…...
C++中ShellExecute函数使用方法说明,如果一开始参数为隐藏,后面还能再显示出来吗
文章目录 一、ShellExecute基础用法函数原型关键参数 nShowCmd示例代码:启动程序并隐藏窗口 二、隐藏后能否重新显示窗口直接答案 三、实现隐藏后显示窗口的步骤1. 获取目标窗口句柄2. 显示窗口 四、完整流程示例五、注意事项六、总结 在C中使用ShellExecute函数时&…...
MySQL的多表查询
我们之前在讲解SQL语句的时候,讲解了DQL语句,也就是数据查询语句,但是之前讲解的查询都是单表查询,而本章节我们要学习的则是多表查询操作,主要从以下几个方面进行讲解。 5.1 多表关系 项目开发中,在进行…...
(UI自动化测试web端)第二篇:元素定位的方法_css定位之层级选择器
看代码里的【find_element_by_css_selector( )】( )里的表达式怎么写? 文章介绍了第五种写法,层级选择器 ,你要根据网页中的实际情况来判断自己到底要用哪一种方法来进行元素定位。每种方法都要多练习,全都熟了之后你在工作当中使…...
《Python Web部署应知应会》No2:如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务
《Python Web部署应知应会》No2:如何基于FastAPI 和 OLLAMA 架构实现高并发 AI 推理服务(上) 摘要: 在 FastAPI 和 OLLAMA 架构中实现高并发 AI 推理服务,并优化性能指标采集和缓存策略,可以充分利用 asy…...
【LeetCode 题解】算法:8.字符串转换整数(atoi)
一、问题描述 在 LeetCode 的算法题库里,有这样一道题目,要求我们实现一个名为 myAtoi(string s) 的函数,其功能是将给定的字符串转换为一个 32 位有符号整数。具体的转换规则如下: 处理步骤 剔除前导空格:读取字符串…...
Uni-app页面信息与元素影响解析
获取窗口信息uni.getWindowInfo {pixelRatio: 3safeArea:{bottom: 778height: 731left: 0right: 375top: 47width: 375}safeAreaInsets: {top: 47, left: 0, right: 0, bottom: 34},screenHeight: 812,screenTop: 0,screenWidth: 375,statusBarHeight: 47,windowBottom: 0,win…...
飞书电子表格自建应用
背景 coze官方的插件不支持更多的飞书电子表格操作,因为需要自建应用 飞书创建文件夹 创建应用 开发者后台 - 飞书开放平台 添加机器人 添加权限 创建群 添加刚刚创建的机器人到群里 文件夹邀请群 创建好后,就可以拿到id和key 参考教程: 创…...
《云原生安全攻防》-- K8s容器安全:权限最小化与SecurityContext
一旦容器被入侵,攻击者就可以获取到容器的权限,所以,容器运行过程中,我们首先需要考虑的是容器的权限问题。 在本节课程中,我们将重点介绍权限最小化以及如何使用SecurityContext来管理容器的权限。 在这个课程中&…...
uniapp中的流式输出
一、完整代码展示 目前大多数的ai对话都是流式输出,也就是对话是一个字或者多个字逐一进行显示的下面是一个完整的流式显示程序,包含的用户的消息发出和ai的消息回复 <template><view class"chat-container"><view class&quo…...
PipeWire 音频设计与实现分析一——介绍
PipeWire 是一个基于图的媒体处理引擎,一个可以运行多媒体节点图的媒体服务器,是 Linux 的音频/视频总线,它管理 Linux 系统中,不同应用程序对音频和视频设备的共享访问。它提供了一个本地客户端音频 API,但也提供兼容…...
MVC 文件夹:架构之美,开发之魂
MVC 文件夹:架构之美,开发之魂 引言 在软件开发领域,MVC(Model-View-Controller)架构模式已经成为了一种广泛应用的架构设计理念。它将应用程序分为三个核心部分:模型(Model)、视图…...
IO模型之于并发编程模型、并发模型之于架构模式
一、并发编程模型主要包括以下几种: 多进程模型:利用操作系统的进程模型来实现并发。每个用户请求接入时都会创建一个进程,适用于I/O密集型任务。缺点是创建进程的开销高,且上下文切换的开销也大。典型应用如Apache Web Ser…...
Postman 7.3.5 旧版下载指南(Win64)及注意事项
Postman-win64-7.3.5-Setup 是 Postman 的一个旧版本(2019年发布,适用于 Windows 64位系统)。以下是相关信息和建议: 1. Postman 7.3.5 版本说明 功能:用于 API 开发、测试和协作。 系统要求:Windows 64位…...
Flink/Kafka在python中的用处
一、基础概念 1. Apache Kafka 是什么? 核心功能:Kafka 是一个分布式流处理平台,主要用于构建实时数据管道和流式应用程序。核心概念: 生产者(Producer):向 Kafka 发送数据的程序。…...
【Spring Boot 与 Spring Cloud 深度 Mape 之十】体系整合、部署运维与进阶展望
【Spring Boot 与 Spring Cloud 深度 Mape 之十】体系整合、部署运维与进阶展望 #微服务实战 #Docker #Kubernetes #SpringSecurity #OAuth2 #分布式事务 #Seata #ServiceMesh #总结 #SpringCloud #SpringBoot 系列终章:经过前九篇 [【深度 Mape 系列】] 的系统学习…...
轻松理解Python装饰器:从基础到应用
一、为什么需要装饰器 想象一下,你写了很多函数来完成不同的任务,突然有个新需求:在每个函数执行前打印一条“函数开始执行”的消息,执行后打印“函数执行结束”。如果没有装饰器,你就得在每个函数里手动添加这两条打…...
RabbitMQ 技术详解:异步消息通信的核心原理与实践
这里写目录标题 RabbitMQ 技术详解:异步消息通信的核心原理与实践一、RabbitMQ 本质剖析核心架构组件 二、核心功能与应用场景主要作用典型应用场景 三、工作流程深度解析消息传递流程关键协议机制 四、Java 实现示例1. 依赖配置(Maven)2. 消…...
MySQL-- 多表查询的分类,SQL92与SQL99,7种JOIN的实现,SQL99语法的新特性
目录 一,多表查询的分类 角度1:等值连接 vs 非等值连接 角度2:自连接 vs 非自连接 角度3:内连接 vs 外连接 二,SQL92语法实现内连接:见上,略SQL92语法实现外连接:使用 -…...
Selenium文件上传
在 Web 自动化测试中,文件上传是一项常见的任务。不同的网站和前端技术可能导致上传方式有所不同,因此需要采用不同的方法进行处理。 方法 1:使用 send_keys() 直接上传(最常用) 适用场景: 页面中 有标准的 <input type="file"> 标签。 不需要弹出 Wind…...
getID3获取本地或远程视频时长
音频文件也可使用,使用ffmeg安装太复杂了 附ffmpeg方式:centos下安装ffmpeg_yum安装ffmpeg-CSDN博客 使用composer先安装 composer require james-heinrich/getid3 获取本地视频 //获取本地视频$video_path $_SERVER[DOCUMENT_ROOT].$params[video];…...
OpenAI流式解析
OpenAI 流式的代码: 首选一般请使用os.getenv 去读环境变量的内容 注意使用pip install python-dotenv 的安装方法 load_dotenv 是这个库提供的一个函数,用于读取 .env 文件并将其中定义的键值对设置为系统的环境变量。 默认情况下,load_…...
在Trae中设置Python解释器版本
Python 是一种广泛使用的高级编程语言,因其简洁易读的语法和强大的功能而备受欢迎。随着 Python 的不断发展,多个版本相继发布,每个版本都带来了新特性和改进。然而,这也带来了一些问题,比如不同的工程,需要…...
第 6 章:优化动态分配内存的变量_《C++性能优化指南》_notes
优化动态分配内存的变量 第六章核心知识点详解总结第六章 动态内存优化 重点难点梳理 一、多选题(每题至少2个正确答案)二、设计题答案与详解多选题答案设计题答案示例 第六章核心知识点详解 动态内存分配的开销 知识点:动态内存分配需要调用…...
图像数据增强教程:为目标检测任务准备数据
目录 一、简介 二、代码结构 三、环境要求 四、数据增强类 4.1 调整增强概率和参数 4.2 增强方法参数 五、数据增强主函数 六、主函数 效果展示 完整代码 一、简介 在目标检测任务中,数据增强是一种关键技术,通过对原始图像应用多种变换来增加…...
Unity编辑器功能及拓展(2) —Gizmos编辑器绘制功能
Unity中的Gizmos功能是用于在场景视图中绘制辅助图形或图标的工具,帮助开发者在编辑模式下直观调试和可视化游戏对象的位置、范围、方向等信息。 一.定义概述 Gizomsd 概述 Gizoms是Unity提供的一个API,或者叫做一个工具类,包含一系列静态…...