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

Java面试题、八股文学习之JVM篇

1.对象一定分配在堆中吗?有没有了解逃逸分析技术?

对象不一定总是分配在堆中。在Java等一些高级编程语言中,对象的分配位置可以通过编译器或运行时系统的优化来决定。其中,逃逸分析(Escape Analysis)是用于提高程序性能的一种技术,它可以帮助JVM(Java虚拟机)确定一个对象是否真的需要被分配到堆上。

逃逸分析的基本概念

逃逸分析是一种可以确定指针动态范围的技术。如果一个对象在一个方法内部创建,并且这个对象的引用不会逃逸出该方法(即该方法之外的代码无法访问这个对象),那么这个对象就可以被认为是“不逃逸”的。反之,如果一个对象的引用可以被其他线程访问或者存储到全局变量中,那么这个对象就是“逃逸”的。

逃逸分析的应用

  • 栈上分配:对于不逃逸的对象,JVM可以选择不在堆上分配内存,而是在栈上分配。这样做可以减少垃圾回收的压力,因为栈上的对象会随着方法的结束而自动销毁。这种方法也被称为“栈分配”。

  • 同步消除:如果一个对象只被一个线程访问,那么对该对象的同步操作(如锁)可能是不必要的。通过逃逸分析,JVM可以识别这些情况并移除多余的同步开销。

  • 标量替换:当一个对象的所有字段都不会逃逸时,JVM可以直接将这些字段分配给调用者的方法栈帧,而不需要为整个对象分配空间。这进一步减少了内存的使用和垃圾回收的工作量。

实现细节

逃逸分析的具体实现依赖于具体的JVM版本和配置。例如,在HotSpot JVM中,默认情况下逃逸分析是开启的,但它的效果可能会受到其他因素的影响,比如JIT(Just-In-Time)编译器的选择和优化级别。

总的来说,逃逸分析是一个强大的工具,它可以显著提升应用程序的性能,尤其是在内存管理和多线程环境中。然而,它的效果并不是绝对的,有时候可能需要开发者通过代码设计来辅助优化。

2.虚拟机为什么使用元空间替换了永久代?

Java虚拟机(JVM)在Java 8及更高版本中,使用元空间(Metaspace)替换了永久代(PermGen),主要是为了改进内存管理的效率和灵活性。以下是几个关键原因:

  • 无固定大小限制:永久代有一个固定的大小,当加载大量的类时可能会导致OutOfMemoryError。而元空间是动态扩展的,默认情况下不受JVM堆大小的限制,只受限于操作系统的可用内存。
  • 性能优化:移除永久代后,类的元数据存储在本地内存区域,这有助于提高垃圾回收的效率。由于类的元数据不再与应用程序对象一起存储在堆中,因此可以更有效地进行清理和压缩。
  • 简化内存管理:永久代的设计初衷是为了隔离类的元数据和其他应用程序数据,但它的实现较为复杂。相比之下,元空间通过直接使用本地内存来简化了内存管理过程。
  • 更好的诊断工具支持:随着元空间的引入,相关的监控和调试工具得到了增强,能够更好地帮助开发者理解和解决与类加载相关的问题。
  • 减少碎片化:永久代容易产生碎片化问题,尤其是在频繁加载和卸载类的情况下。元空间则避免了这种问题,因为它不依赖于堆内存分配策略。

这些改进使得元空间成为了一个更为高效、灵活和可靠的替代方案。

3.什么是Stop The World ? 什么是OopMap?什么是安全点?

在Java虚拟机(JVM)中,Stop-The-World (STW)、OopMap 和 安全点(Safepoint) 是与垃圾回收和其他并发操作密切相关的重要概念。下面我将详细解释每个概念及其作用。

Stop-The-World (STW)

Stop-The-World 指的是 JVM 在执行某些操作时需要暂停所有正在运行的 Java 线程。这些操作通常包括但不限于:

  • Full GC(Full Garbage Collection):当年轻代和老年代都需要进行垃圾回收时。
  • Heap Resize:调整堆内存大小。
  • Class Unloading:卸载不再使用的类。
  • Thread Dumping:生成线程转储信息。
  • Debugging Operations:调试操作。

特点

  • 暂停时间:STW 会导致所有 Java 线程暂停,这段时间称为 STW 停顿。
  • 影响性能:长时间的 STW 停顿会影响应用程序的响应时间和吞吐量。
  • 优化目标:现代 JVM 实现通过各种技术(如 G1 垃圾收集器)尽量缩短 STW 时间。

OopMap

OopMap 是一种数据结构,用于记录某个时刻线程栈上对象引用的位置。它在垃圾回收过程中扮演着关键角色,特别是在处理并发垃圾回收算法时。

主要用途:

  • 识别活动对象:在垃圾回收期间,GC 需要知道哪些对象仍然被程序引用,以决定是否可以回收它们。OopMap 提供了这些对象的精确位置信息。
  • 支持增量式和并发垃圾回收:通过 OopMap,GC 可以准确地跟踪和更新对象引用,即使是在线程继续运行的情况下也能进行有效的垃圾回收。

安全点(Safepoint)

  • 安全点是指程序执行过程中的特定位置,在这些位置,所有的线程都可以被暂停,并且此时的程序状态是“一致”的。换句话说,安全点是一个可以让 JVM 进行全局操作的时间点,比如垃圾回收。

关键特性:

  • 一致的状态:在安全点处,所有的线程都处于一个可预测的状态,便于 JVM 执行全局操作。
  • 自动插入:编译器会在字节码中自动插入安全点指令,通常在方法调用、循环控制等地方。
  • 协作机制:线程在遇到安全点时会检查是否有全局操作请求,如果有,则进入等待状态,直到操作完成。

安全点与 OopMap 的关系

安全点和 OopMap 之间有着密切的关系:

  • 同步信息:在安全点处,线程会提供其当前的 OopMap 给垃圾回收器,以便 GC 能够准确地追踪和更新对象引用。
  • 协调操作:通过结合安全点和 OopMap,JVM 可以在不中断应用程序逻辑的前提下高效地执行垃圾回收和其他全局操作。

总结

  • Stop-The-World:JVM 暂停所有线程以执行全局操作,常见于 Full GC。
  • OopMap:记录线程栈上的对象引用位置,帮助垃圾回收器识别活动对象。
  • 安全点:程序执行过程中的特定位置,允许 JVM 暂停所有线程并执行全局操作。

4.说一下JVM 的主要组成部分及其作用?

Java虚拟机(JVM)是Java平台的核心组件,负责执行编译后的Java字节码。JVM由多个主要组成部分构成,每个部分都有其特定的作用。以下是JVM的主要组成部分及其作用:

1. 类加载器子系统 (ClassLoader Subsystem)

作用:

  • 加载类:从不同的来源(如文件系统、网络等)加载类文件。
  • 链接类:包括验证、准备和解析三个阶段。
    • 验证:确保加载的类符合JVM规范。
    • 准备:为类的静态变量分配内存,并设置默认初始值。
    • 解析:将常量池中的符号引用替换为直接引用。
  • 初始化类:执行类构造器 () 方法,对静态变量进行显式初始化。

2. 运行时数据区 (Runtime Data Areas)

作用:

  • 方法区 (Method Area):存储类的信息(如字段、方法)、常量池、静态变量等。在Java 8及更高版本中,方法区被元空间(Metaspace)取代。
  • 堆 (Heap):所有线程共享的一块内存区域,用于存储对象实例和数组。
  • Java栈 (Java Stack):每个线程拥有一个私有的Java栈,用于存储方法调用帧(Frame),每个帧包含局部变量表、操作数栈、动态链接信息等。
  • 程序计数器 (Program Counter Register):每个线程有一个程序计数器,指向当前正在执行的指令。
  • 本地方法栈 (Native Method Stack):用于支持本地方法(C/C++ 编写的代码)的执行。

3. 执行引擎 (Execution Engine)

作用:

  • 解释器 (Interpreter):逐条解释字节码指令,适用于启动初期或方法调用次数较少的情况。
  • 即时编译器 (Just-In-Time Compiler, JIT Compiler):将热点代码(频繁执行的方法)编译成机器码,提高执行效率。常见的JIT编译器有HotSpot VM中的Client Compiler和Server Compiler。
  • 垃圾回收器 (Garbage Collector):自动管理内存,回收不再使用的对象,防止内存泄漏。

4. 系统接口 (System Interface)

作用:

  • 本地接口 (Native Interface):提供与操作系统之间的通信机制,允许Java程序调用本地库函数。
  • 输入输出接口 (Input/Output Interface):处理标准输入输出流,以及文件系统访问等。

5. 工具接口 (Tool Interface)

作用:

  • 调试接口 (Debugging Interface):提供调试功能,允许开发者使用调试工具检查和控制程序运行状态。
  • 性能监控接口 (Performance Monitoring Interface):提供性能监控功能,帮助开发者分析和优化程序性能。

6. 安全管理器 (Security Manager)

作用:

  • 安全管理:控制程序的行为,防止恶意代码对系统造成损害。通过安全策略文件定义权限规则。

7. 内核类库 (Core Class Libraries)

作用:

  • 提供丰富的API:包括集合框架、I/O处理、多线程支持、图形用户界面等,简化开发工作。

总结

JVM 的各个组成部分协同工作,共同实现了 Java 字节码到机器码的转换和执行过程,提供了高效的运行环境。了解这些组成部分及其作用有助于更好地理解和优化 Java 应用程序的性能和安全性。

5.什么是指针碰撞?

指针碰撞(Pointer Bumping) 是一种内存分配策略,主要用于堆内存管理。它通常与 分代垃圾回收(Generational Garbage Collection) 结合使用,特别是在年轻代的内存分配中。下面详细介绍指针碰撞的工作原理及其特点。

指针碰撞的基本概念

在分代垃圾回收机制中,堆内存被分为不同的区域,最常见的是 年轻代(Young Generation) 和 老年代(Old Generation)。年轻代进一步细分为 Eden 区 和两个 Survivor 区(通常是 S0 和 S1)。指针碰撞主要发生在 Eden 区和 Survivor 区的内存分配过程中。

工作原理

  • 初始化:

    • 当 JVM 启动时,年轻代会被划分为 Eden 区和两个 Survivor 区。
    • 初始化时,top 指针指向 Eden 区的起始位置,end 指针指向 Eden 区的末尾。
  • 对象分配

    • 当需要创建新对象时,JVM 会尝试将对象分配到 Eden 区。
    • 分配过程非常简单且高效:只需移动 top 指针,使其向前移动对象所需的字节数。这个操作类似于“指针碰撞”。
  • 检查空间

    • 在每次分配对象之前,JVM 会检查 Eden 区是否有足够的连续空间来容纳新对象。
    • 如果有足够的空间,则直接进行指针碰撞;否则,触发 Young GC 或者重新分配 Survivor 区的空间。
  • Minor GC(Young GC)

    • 当 Eden 区满载或即将满载时,发生 Minor GC。
    • 尚存活的对象会被复制到其中一个 Survivor 区(例如 S0),而另一个 Survivor 区(S1)则清空。
    • 生存下来的对象在下次 Minor GC 中可能会再次被复制到另一个 Survivor 区,或者如果达到一定的年龄阈值(通常是 15 次),则会被晋升到老年代。
  • 指针重置

    • Minor GC 后,top 指针会重置回 Eden 区的起始位置,准备接收新的对象分配。

示例图解

假设有一个简单的年轻代结构如下:

+-------------------+
|       Eden        |
|                   |
|      top          | -> 指向下一个可用地址
|                   |
+-------------------+
|     Survivor S0   |
+-------------------+
|     Survivor S1   |
+-------------------+

初始状态:

+-------------------+
|       Eden        |
|                   |
|      top          | -> 初始位置
|                   |
+-------------------+
|     Survivor S0   |
+-------------------+
|     Survivor S1   |
+-------------------+

分配对象 A:

+-------------------+
|       Eden        |
|       [A]         |
|      top          | -> 移动后的 top
|                   |
+-------------------+
|     Survivor S0   |
+-------------------+
|     Survivor S1   |
+-------------------+

分配对象 B:

+-------------------+
|       Eden        |
|       [A][B]       |
|      top          | -> 再次移动后的 top
|                   |
+-------------------+
|     Survivor S0   |
+-------------------+
|     Survivor S1   |
+-------------------+

触发 Minor GC

  • 存活对象 [A] 被复制到 S0。
  • Eden 和 S1 清空。
  • top 指针重置到 Eden 的起始位置。

GC 后的状态:

+-------------------+
|       Eden        |
|                   |
|      top          | -> 初始位置
|                   |
+-------------------+
|     Survivor S0   |
|       [A]         |
+-------------------+
|     Survivor S1   |
+-------------------+

特点和优势

  • 高效性:
    • 指针碰撞只需要简单的指针移动操作,速度极快,适合频繁的对象分配场景。
  • 低开销:
    • 相比于其他复杂的内存分配算法,指针碰撞几乎没有额外的开销。
  • 紧凑存储:
    • 新分配的对象紧邻在一起,减少了内存碎片化的问题。
  • 易于实现:
    • 指针碰撞的逻辑相对简单,易于理解和实现。

注意事项

  • 内存不足:
    • 如果 Eden 区无法容纳新对象,需要触发 Minor GC 或者调整堆大小。
  • 对象过大:
    • 对于大对象(大于 Eden 区一半大小的对象),通常会直接分配到老年代,以避免频繁的 GC。
  • 垃圾回收频率:
    • 频繁的对象分配可能导致较高的 Minor GC 频率,影响性能。可以通过调整堆大小和垃圾收集器参数来优化。

总结

指针碰撞是一种高效的内存分配策略,广泛应用于现代 JVM 的年轻代内存管理中。通过简单的指针移动操作,它可以快速地为新对象分配内存,并结合分代垃圾回收机制有效地管理内存,确保应用程序的高性能和稳定性。

相关文章:

Java面试题、八股文学习之JVM篇

1.对象一定分配在堆中吗?有没有了解逃逸分析技术? 对象不一定总是分配在堆中。在Java等一些高级编程语言中,对象的分配位置可以通过编译器或运行时系统的优化来决定。其中,逃逸分析(Escape Analysis)是用于…...

【eNSP】动态路由协议RIP和OSPF

动态路由RIP(Routing Information Protocol,路由信息协议)和OSPF(Open Shortest Path First,开放式最短路径优先)是两种常见的动态路由协议,它们各自具有不同的特点和使用场景。本篇会对这两种协…...

春秋云境 CVE 复现

CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数,这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下,具有管理选项功能 (admin) 的用户可以使用受影响的功能,但是该插件有一个设置允许低权限用…...

Linux入门攻坚——39、Nginx入门

Nginx:engine X Tengine:淘宝改进维护的版本 Registry: 使用了libevent库:高性能的网络库 epoll()函数 Nginx特性: 模块化设计、较好的扩展性;(但不支持动态加载模块功能&#…...

计算机网络的类型

目录 按覆盖范围分类 个人区域网(PAN) 局域网(LAN) 城域网(MAN) 4. 广域网(WAN) 按使用场景和性质分类 公网(全球网络) 外网 内网(私有网…...

解决 MySQL 5.7 安装中的常见问题及解决方案

目录 前言1. 安装MySQL 5.7时的常见错误分析1.1 错误原因及表现1.2 错误的根源 2. 解决方案2.1 修改YUM仓库配置2.2 重新尝试安装2.3 处理GPG密钥错误2.4 解决依赖包问题 3. 安装成功后的配置3.1 启动MySQL服务3.2 获取临时密码3.3 修改root密码 4. 结语 前言 在Linux服务器上…...

VITE+VUE3+TS环境搭建

前言(与搭建项目无关): 可以安装一个node管理工具,比如nvm,这样可以顺畅的切换vue2和vue3项目,以免出现项目跑不起来的窘境。我使用的nvm,当前node 22.11.0 目录 搭建项目 添加状态管理库&…...

【设计模式】【创建型模式(Creational Patterns)】之原型模式(Prototype Pattern)

1. 设计模式原理说明 原型模式(Prototype Pattern) 是一种创建型设计模式,它允许你通过复制现有对象来创建新对象,而无需通过构造函数来创建。这种方式可以提高性能,尤其是在对象初始化需要消耗大量资源或耗时较长的情…...

黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产

11月23日,芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位;并与香港科技大学校董会主席沈向洋展开深刻对话,涉及人工智能(AI)、计算力、领导…...

【C语言】宏定义详解

C语言中的宏定义(#define)详细解析 在C语言中,宏定义是一种预处理指令,使用 #define 关键字定义。它由预处理器(Preprocessor)在编译前处理,用于定义常量、代码片段或函数样式的代码替换。宏是…...

LangChain——多向量检索器

每个文档存储多个向量通常是有益的。在许多用例中,这是有益的。 LangChain 有一个基础 MultiVectorRetriever ,这使得查询此类设置变得容易。很多复杂性在于如何为每个文档创建多个向量。本笔记本涵盖了创建这些向量和使用 MultiVectorRetriever 的一些常…...

《岩石学报》

本刊主要报道有关岩石学基础理论的岩石学领域各学科包括岩浆岩石学、变质岩石学、沉积岩石学、岩石大地构造学、岩石同位素年代学和同位素地球化学、岩石成矿学、造岩矿物学等方面的重要基础理论和应用研究成果,同时也刊载综述性文章、问题讨论、学术动态以及书评等…...

数据结构 (12)串的存储实现

一、顺序存储结构 顺序存储结构是用一组连续的存储单元来存储串中的字符序列。这种存储方式类似于线性表的顺序存储结构,但串的存储对象仅限于字符。顺序存储结构又可以分为定长顺序存储和堆分配存储两种方式。 定长顺序存储: 使用静态数组存储&#xff…...

职场发展陷阱

一、只有执行,没有思考 二、只有过程,没有结果 三、只有重复,没有精进 四、不懂向上管理 五、定期汇报 六、不要憋大招 七、多同步信息...

Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃

0x00 启动崩溃 崩溃日志,只有 2 行,看不出啥来。 0x01 默认配置 由于我开发时,使用的 Xcode 14.1,打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【二】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

PVE相关名词通俗表述方式———多处细节实验(方便理解)

PVE设置初期,对CIDR、 网关、 LinuxBridge、VLAN等很有困惑的朋友一定很需要一篇能够全面通俗易懂的方式去理解PVE 中Linux网桥的工作方式,就像操作一个英雄,多个技能,还是需要一点点去学习理解的,如果你上来就对着别人…...

Ansible--自动化运维工具

Ansible自动化运维工具介绍 1.Ansible介绍 Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。…...

微信小程序学习指南从入门到精通

🗽微信小程序学习指南从入门到精通🗽 🔝微信小程序学习指南从入门到精通🔝✍前言✍💻微信小程序学习指南前言💻一、🚀文章列表🚀二、🔯教程文章的好处🔯1. ✅…...

微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 框架 2.0 服务调用 2.1 RestTemplate 远程调用 3.0 服务注册和发现 3.1 注册中心原理 3.2 Nacos 注册中心 …...

使用 Django 构建支持 Kubernetes API 测试连接的 POST 接口

文章目录 使用 Django 构建支持 Kubernetes API 测试连接的 POST 接口功能需求使用 kubectl 获取 Token命令解析输出示例 完整代码实现Kubernetes API 客户端类功能说明 Django 接口视图关键点解析 路由配置 接口测试请求示例响应结果成功错误 优化建议1. 安全性2. 错误处理3. …...

十二、正则表达式、元字符、替换修饰符、手势和对话框插件

1. 正则表达式 1.1 基本使用 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title&g…...

计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

【后端面试总结】MySQL索引

数据库索引不只一种实现方法&#xff0c;但是其中最具代表性&#xff0c;也是我们面试中遇到最多的无疑是B树。 索引为什么选择B树 数据量很大的查找&#xff0c;是不能直接放入内存的&#xff0c;而是需要什么数据就通过磁盘IO去获得。 红黑树&#xff0c;AVL树等二叉查找树…...

[蓝桥杯 2021 省 AB2] 小平方

题目描述 小蓝发现&#xff0c;对于一个正整数 nn 和一个小于 nn 的正整数 vv&#xff0c;将 vv 平方后对 nn 取余可能小于 nn 的一半&#xff0c;也可能大于等于 nn 的一半。 请问&#xff0c;在 11 到 n−1n−1 中, 有多少个数平方后除以 nn 的余数小于 nn 的一半。 例如&…...

Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1

Jmeter测试工具的安装和使用JSON格式请求 一、安装1、安装jdk包和设置java环境2、去官网下载Jmeter3、解压后&#xff0c;打开mac终端&#xff0c;进入apache-jmeter的bin文件开启jmeter 二、使用jmeter1、添加线程2、添加HTTP请求3、配置请求的协议、IP地址、端口号、请求方法…...

kmeans 最佳聚类个数 | 轮廓系数(越大越好)

轮廓系数越大&#xff0c;表示簇内实例之间紧凑&#xff0c;簇间距离大&#xff0c;这正是聚类的标准概念。 簇内的样本应该尽可能相似。不同簇之间应该尽可能不相似。 目的&#xff1a;鸢尾花数据进行kmeans聚类&#xff0c;最佳聚类个数是多少&#xff1f; plot(iris[,1:4…...

【纪念365天】我的创作纪念日

过去的一年 没有注意加入csdn已经有一年了。 这几天翻看小猴儿的通知才发现时间来到了一年的纪念日。稍稍思索想要将这一段时间的学习到的知识以及偶然遇到的机遇做一下总结。 上一次写纪念日是来到csdn128天的时候&#xff0c; 200天前我的学习状态是非常疯狂的。 只记得我当时…...

Opencv+ROS实现颜色识别应用

目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像&#xff1a;RGB&#xff08;红&#xff0c;绿&#xff0c;蓝&#xff09; HSV图像&#xff1a;H&#xff0…...

蓝桥杯c++算法秒杀【6】之动态规划【下】(数字三角形、砝码称重(背包问题)、括号序列、异或三角:::非常典型的必刷例题!!!)

别忘了请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01;! ! ! ! &#xff01; 关注博主&#xff0c;更多蓝桥杯nice题目静待更新:) 动态规划 三、括号序列 【问题描述】 给定一个括号序列&#xff0c;要求尽可能少地添加若干括号使得括号序列变得合…...

昭通建设局网站/网站一键生成

strip_whitespace() php读取txt文件并分割行替换空字符串 $handler opendir(zhuzhuoquan);//文件夹名 $ii0; $str ; while( ($filename readdir($handler)) ! false ) { if($filename . || $filename.. || $filenameviews) continue;$ii;//echo $ii.. .$filename.<br…...

更新服务 wordpress/google引擎入口

ONBUILD--当构建一个被继承的dockerfile时运行命令&#xff0c;父镜像在被子继承后父镜像的onbuild被触发 1.父dockerfile FROM centosRUN yum install -y curlENTRYPOINT ["curl","-s","http://ip.cn"]ONBUILD RUN echo "father images…...

手机网站开发 教程/seo就是搜索引擎广告

温习一下这些天学习的CLR编程&#xff0c;存储过程&#xff0c;函数。 编写CLR的存储过程&#xff0c;运行起来的效率&#xff0c;果然比普通的SQL语句&#xff0c;存储过程或是函数均高。以后专案需求&#xff0c;或是执行效率较高的SQL&#xff0c;得写成CLR程序&#xff0c;…...

网站建设专业术语/客户引流推广方案

MySQL5.7高可用MHAAtlas视频课程9 ?0 n% Y9 N1 X- D( p" N0 D" F7 A3 ?: z Q课程目标/ ~# K1 ?9 l2 m. P掌握企业MySQL常用高可用技术并且和Atlas读写分离结合使用0 u; X \6 p. s M D9 o) ~适用人群1 K& Q. Z7 I3 K5 |7 G8 hLinux运维、DBA、MySQL运维( [ …...

淄博网站建设讲解透彻/济宁seo优化公司

web servicesWeb Services 简介Web Services 是一种构建应用程序的普通模型&#xff0c;并能在所有支持 Internet 通讯的操作系统上实施运行。Web Services 令基于组件的开发和 Web 的结合达到最佳&#xff0c;基于组件的对象模型&#xff0c;如&#xff1a;Distributed Compon…...

郑州网站建设到诺然/弹窗广告最多的网站

Vue 官方团队于 2020 年 9 月 18 日晚 11 点半左右发布了 Vue3.0 版本 。代号为 One Piece。Vue 3.0 终于发布了&#xff0c;具体更新内容详见 v3.0.0。官网地址 Vue&#xff0c;但内容还都是英文的&#xff0c;毕竟刚发布嘛&#xff0c;中文内容还没那么快。Vue3 英文指引索性…...