运维自动化bingo前端

项目目录结构介绍

项目创建完成之后,我们会看到bingo_web项目其实是一个文件夹,我们进入到文件夹内部就会发现一些目录和文件,我们简单回顾一下里面的部分核心目录与文件。

├─node_modules/   # node的包目录,项目运行的依赖包存储目录,package.json和package-lock.json文件中会自动记录了这个目录下所有的包以及包的版本信息,
├─public/  # 静态资源目录,项目中的静态资源(css,js,图片等文件)放在这个文件夹
├─src/       # 主开发目录,要开发的客户端代码文件(单文件组件,css样式、工具函数等等)全部在这个目录下
    ├─assets/  # 静态资源存储目录,与public目录作用类似。
    ├─router/  # 路由存储目录,是我们创建项目的时候,如果选择安装vue-router,就自动会生成这个目录。
    ├─views/   # 组件页面存储目录,就是浏览器中用户看到的页面内容,views往往会加载并包含components中的组件进来
    ├─components/  # 组件存储目录,就是浏览器中用户看到的页面的一部分内容。
    ├─App.vue
    ├─main.js
    └─style.css
├─index.html
└─package.json   #  如果node_modules没有,但是有package.json,则可以在终端下,通过npm install进行恢复node_modules所有内容。

2.3、项目执行流程图

在这里插入图片描述
要在Vue.js项目中指定域名和端口,你通常需要配置Vue CLI提供的devServer,而不是直接在defineConfig里面指定域名和端口。devServer配置通常用于开发环境,它允许你定义开发服务器的参数,比如端口号、代理设置等。不过,如果你想要在生产环境中配置一个特定的域名和端口,这通常需要在部署到服务器时,通过服务器配置(例如Nginx或Apache)来实现,而不是在Vue CLI的配置中直接设置。

如果你的目的是为了开发环境,想要Vue CLI开发服务器运行在www.bingo.com域名和80端口,你可以试着修改vue.config.js文件(如果文件不存在,你需要手动创建这个文件):

首先,确认你的电脑上hosts文件已经将www.bingo.com指向了127.0.0.1(本地开发环境)。

然后,编辑vue.config.js文件来包含devServer配置,类似下面这样:

const { defineConfig } = require('@vue/cli-service');

module.exports = defineConfig({
  transpileDependencies: true,
  // 配置开发服务器
  devServer: {
    host: 'www.bingo.com', // 指定开发服务器监听的域名
    port: 80, // 指定开发服务器的端口
  },
});

请注意,由于80端口是一个标准的HTTP端口,通常需要管理员权限才能让应用监听在80端口上。在Linux或macOS上,你可能需要使用sudo来启动应用。在Windows上,可能需要以管理员权限运行命令行工具。

此外,使用80端口有可能和系统上已经运行的其他服务发生冲突,确保80端口没有被其他应用占用。

使用www.bingo.com进行项目访问:
在这里插入图片描述

最后,因为我们是在本地开发环境配置,所以实际上并不会直接影响到生产环境的域名和端口设置。生产环境的域名和端口设置依赖于你的服务器和DNS配置。

在Vue CLI中,vue.config.js是一个可选的配置文件,如果项目的构建和开发过程中需要自定义选项,可以在项目根目录下创建这个文件。vue.config.js提供了很多配置项可以帮助你优化和调整开发以及构建的过程。以下是一些常用的配置项:

  1. publicPath: 类型:string,部署应用包时的基本 URL。用法如下:

    module.exports = {
      publicPath: process.env.NODE_ENV === 'production' ? '/production-sub-path/' : '/'
    }
    
  2. outputDir: 类型:string,构建时生成的生产环境构建文件的目录。默认在项目根目录下生成一个dist目录。用法如下:

    module.exports = {
      outputDir: 'dist'
    }
    
  3. assetsDir: 类型:string,放置生成的静态资源 (js、css、img、fonts) 的目录。相对于outputDir

    module.exports = {
      assetsDir: 'assets'
    }
    
  4. indexPath: 类型:string,指定生成的index.html的输出路径,相对于outputDir

    module.exports = {
      indexPath: 'index.html'
    }
    
  5. filenameHashing: 类型:boolean,默认情况下,生成的静态资源文件名中包含了hash以控制缓存,你可以通过这个选项关闭。

    module.exports = {
      filenameHashing: false
    }
    
  6. pages: 类型:Object,在多页面应用下构建应用。每个“page”应该有一个对应的 JavaScript 入口文件。

    module.exports = {
      pages: {
        index: {
          // page 的入口
          entry: 'src/index/main.js',
          // 模板来源
          template: 'public/index.html',
          // 在 dist/index.html 的输出
          filename: 'index.html',
        },
        // 当使用只有入口的字符串格式时,默认会使用`public/subpage.html`作为模板,如果不存在,则回退到`public/index.html`模板。
        subpage: 'src/subpage/main.js'
      }
    }
    
  7. lintOnSave: 类型:boolean | 'warning' | 'default' | 'error',是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码。这个值会默认取[process.env.NODE_ENV] 的值,是生产构建时禁用。

    module.exports = {
      lintOnSave: process.env.NODE_ENV !== 'production'
    }
    
  8. runtimeCompiler: 类型:boolean,是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了。

    module.exports = {
      runtimeCompiler: true
    }
    
  9. transpileDependencies: 类型:Array<string | RegExp>,默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来。

    module.exports = {
      transpileDependencies: [/my-dependency/]
    }
    

这些是vue.config.js中比较常见和有用的配置项。对于更详细的配置和更高级的用法,建议查看Vue CLI官方文档。

安装axios模块
npm install axios --save --registry https://registry.npmjs.org/

view.HomeView.vue内容详解:

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>

<script>
// @ is an alias to /src
import HelloWorld from '@/components/HelloWorld.vue'

export default {
  name: 'HomeView',
  components: {
    HelloWorld
  }
}
</script>

在 Vue 组件中,name 选项用于指定组件的名称。虽然这个选项不是必须的,但它在某些场景下扮演了重要的角色,提供了以下几个好处:

  1. 调试:当你在开发工具(如 Vue Devtools)中调试应用时,有名字的组件会更容易识别和跟踪。没有名称的组件可能仅显示为 <AnonymousComponent>,这使得调试变得更加困难。

  2. 递归组件:如果一个组件需要在其模板内递归地调用自己,那么为这个组件指定一个 name 是必须的。这样组件就可以通过其名称引用自己,实现递归渲染。

  3. keep-alive<keep-alive> 是 Vue 提供的一个抽象组件,用于保留组件状态或避免重新渲染。在使用 <keep-alive> 时,includeexclude 属性允许你指定哪些组件应该被缓存或忽略。这两个属性接受组件 name 作为参数,因此在这种场景下 name 选项非常有用。

  4. Vue 组件库:在创建可复用的组件库时,为每个组件指定一个 name 选项可以更方便地管理和使用这些组件。特别是在全局注册组件的时候,Vue 将使用组件的 name 选项作为组件的标识。

示例中的 name: 'App' 表示将这个根组件的名称设为 “App”。这对调试非常有帮助,因为如果出现错误或需要在 Vue Devtools 中查看组件层次结构时,你可以轻松找到名为 “App” 的根组件。

总之,name 选项虽不是必须的,但在实践中为组件指定名称是一个好习惯,尤其是在以上提到的几种场景中。它有助于提升代码可读性和维护性,并且在开发、调试以及构建可重用组件时,使得工作流程更加顺畅。

在JavaScript(包括用于开发Vue应用的ES6标准)中,除了export default之外,还有export关键字用于导出模块的其他成员。export defaultexport共同构成了ES6的模块导出机制,它们之间有几个关键的区别:

export default

  • 每个模块可以有一个default导出。
  • 使用export default时,导入时可以为其指定任意名称。
  • 主要用于导出模块的“主要”功能或值。

例如,导出一个函数:

export default function() { console.log("Hello World!"); }

导入时:

import myFunction from './myModule';

export

  • 一个模块可以导出多个(非默认)成员。
  • 导入时需要使用相同的名称,或者使用as关键字重命名。
  • 用于导出一个模块的多个功能或值。

例如,导出多个函数或变量:

export const myConstant = 123;
export function myFunction() { console.log("Hello World!"); }
export class MyClass {}

导入时:

import { myFunction, myConstant, MyClass as RenamedClass } from './myModule';

结合使用export defaultexport:

一个模块中可以同时使用export defaultexport来导出多个成员,其中一个作为默认导出,而其他则作为具名导出。

// myModule.js
export default function() { console.log("Default Function"); }
export function myFunction() { console.log("My Function"); }
export const myConstant = 123;

导入时:

// 引入默认导出的函数,可以任意命名
import defaultFunction, { myFunction, myConstant } from './myModule';

注意事项:

  • export default允许你导出模块时不必使用大括号,而export导出的成员则需要在导入时放在大括号内。
  • 当使用export导出多个成员时,导入这些成员必须使用它们原有的名字,除非使用as关键字进行重命名。
  • export default的主要优势在于简化了默认导出成员的导入语法,因为你不需要使用大括号并且可以自由命名导入的成员。

这种模块化机制极大地增强了JavaScript代码的组织性和可维护性,使开发者可以轻松地在不同的文件和模块之间共享功能和值。

总结 export default与export

  1. export default: 由于每个模块文件只能有一个默认导出,因此在导入时可以随意命名。这意味着无论在导出时成员被命名为什么,在导入时都可以自定义命名,而 JavaScript 会理解你指的是该文件的默认导出成员。这就是为什么export default能使导入语法变得简化和灵活。

  2. export: 允许一个模块导出多个成员。由于可能同时导出多个成员,每个成员都有自己的名字,所以在导入这些成员时需要明确指出导入成员的具体名称。这样做是为了保证明确性和一致性,确保在导入时 JavaScript 知道你指的是哪个具体成员。

    如果需要,在导入时改变名称,可以使用as关键词来重命名,这样做即可以保持导入成员的明确性,又能提供一定程度的灵活性。

综上所述,这两种导出(exportexport default)方式提供了不同级别的灵活性和明确性,以适应不同的使用场景。选择哪一种方式取决于你的具体需求,例如,当模块只提供一个主要功能或值时,使用export default比较方便;而当模块提供多个函数、变量或组件时,使用export可以同时导出它们,使得导入这些成员时更加清晰明确。

从 Vue 3.0 开始,<script setup> 是为了简化组合式 API 的使用而提出的一个编译时语法糖。当使用 <script setup> 时,您不能以传统的方式(export default {})导出组件选项。<script setup> 标签内部的代码被视为组件的顶层代码,因此直接定义变量、函数以及其他响应式状态即可,无需封装在 export default {} 里。

  1. 移除 export default 声明。
  2. 直接在 <script setup> 内部声明组件的逻辑。
  3. 如果需要定义组件的 name,可以通过 defineComponent 的方式。
    将天气预报的代码进行vue-cli的修改
    view.ShowCenter.vue

<template>
  <h1 class="showcenter">Show Center</h1>
  <input type="text" v-model="city"><button @click="getque" class="table-bordered">查询城市天气</button>
  <div>当前查询城市: {{city}}</div>
  <p></p>
  <table  v-if="data1!=''">
    <tr>
      <th>序号</th>
      <th>城市</th>
      <th>日期</th>
      <th>白天天气</th>
      <th>夜间天气</th>
      <th>最高温度</th>
      <th>最低温度</th>
      <th>相对湿度</th>
      <th>能见度</th>

    </tr>
    <tr v-for="(tq,index) in data1">
      <td>{{index+1}}</td>
      <td>{{city}}</td>
      <td>{{tq.fxDate}}</td>
      <td>{{tq.textDay}}</td>
      <td>{{tq.textNight}}</td>
      <td>{{tq.tempMax}}</td>
      <td>{{tq.tempMin}}</td>
      <td>{{tq.humidity}}</td>
      <td>{{tq.vis}}</td>


    </tr>
  </table>
</template>


<script setup>
import { defineComponent, ref, onMounted } from 'vue';
import axios from "axios";

defineComponent({ name: 'show-center' });

// 以 ref 创建响应式变量
const data1 = ref([]);
const id = ref('');
const city = ref('北京');

// 定义获取数据的方法
const getque = async () => {
  try {
    const { data: locationData } = await axios.get(`https://geoapi.qweather.com/v2/city/lookup?location=${city.value}&key=dc7728d14dfb4c6eb3eadc070a5839&lang=zh`);
    console.log(locationData.location);
    // 省略业务逻辑
    city.value = locationData.location[0].name;
    id.value = locationData.location[0].id;
    console.log(data1.value, id.value);

    const { data: weatherData } = await axios.get(`https://devapi.qweather.com/v7/weather/7d?location=${id.value}&key=dc7728d14dfb4c6eb3eadc070a5839&lang=zh`);
    console.log(weatherData.daily);
    data1.value = weatherData.daily;
  } catch(error) {
    console.error("请求时发生错误:", error);
  }
};
// 使用 onMounted 生命周期钩子
onMounted(() => {
  getque();
});
</script>
<style scoped>
table,tr,th,td{
  border: 3px solid red;
  border-collapse: collapse;
}
th ,td{
  width: 200px;
  text-align: center;
  height: 30px;
  line-height: 30px;
}

.co{
  background-color: orange;
}
</style>

在这段代码中,我们通过 defineComponent({ name: 'showcenter' }) 来定义组件名称,使用 ref 创建响应式变量来替代原有的 data(){} 定义方式。函数和生命周期钩子直接定义在 <script setup> 的顶级作用域中,这样既符合 <script setup> 的使用规范,又保持了原有逻辑的完整性。

请注意,当使用 <script setup> 时,组件的大部分功能都可以通过直接在脚本中声明来实现,无需包裹在 export default {} 里。另外,如果您的项目中还未启用 <script setup>,或不打算使用它的特性,建议回归到传统 Vue 组件的写法。

const { data: locationData } = await axios.get(`https://geoapi.qweather.com/v2/city/lookup?location=${city.value}&key=dc7728d14dfb4c6eb3eadc070a5839&lang=zh`);

这行代码使用了几个JavaScript和Vue.js中常见的技术点,包括解构赋值、模板字符串、await关键字以及axios库的使用。下面我会逐一解释这些技术点:

  1. axios库
    axios是一个基于Promise的HTTP客户端,用于浏览器和node.js环境中发送HTTP请求。在这段代码中,axios.get方法用于向指定的URL发送GET请求。

  2. 模板字符串
    使用反引号括起来的字符串称为模板字符串,它允许你在字符串中嵌入变量或表达式。${city.value}这部分代码会被替换为city.value变量的实际值,变量city可能是一个响应式变量,通过Vue的refreactive函数创建。

  3. await关键字
    await关键字用于等待一个Promise对象的结果。它只能在异步函数(通过async定义的函数)中使用。在这里,它用于等待axios.get发送请求并返回响应的过程完成。

  4. 解构赋值
    解构赋值允许你将数组或对象的属性/值“解构”到不同的变量中。在这个例子中,const { data: locationData } = ...从axios返回的响应对象中解构出data属性,并将其重命名为locationData。这意味着你可以直接使用locationData变量访问原响应对象中data属性的值。

综上所述,这行代码的执行流程如下:

  1. 使用axios.gethttps://geoapi.qweather.com/v2/city/lookup发送GET请求,请求参数包括location(其值取自city.value)、key(API密钥)和lang(语言偏好)。
  2. 请求发送后,await会暂停当前异步函数的执行,直到Promise解决并返回响应结果。
  3. axios的Promise解决后,其返回的响应对象中的data属性被解构并赋值给locationData变量。
  4. 现在,locationData包含了从天气API获得的、关于请求位置的信息,可以在后续代码中使用这些数据。

错误处理
通过 try-catch 捕捉错误,但由于 Axios 请求使用的是 Promise(并且被 .then 方法处理),错误不会被 try-catch 捕获到,除非 Axios 请求中使用 await
const getque = async () => {} 是一个使用 ES6 箭头函数语法和 async 关键字定义的异步函数。这个函数可以进行异步操作,比如网络请求、读写文件等不会立即完成的操作,并使用 await 关键字以同步的方式写异步代码。这种语法提供了一种更简洁和直观的方式来处理 JavaScript 中的异步编程。下面将分步骤详细介绍这一语法。

const getque = async () => {}语法详解

1. 箭头函数 (() => {})

箭头函数是一种在 ES6 (ECMAScript 2015) 中引入的简写形式,用于定义函数。与传统的函数定义方式相比,箭头函数提供了更简洁的语法。

  • 基本语法
(parameters) => { statements }

如果函数只有一个参数,可以省略参数周围的括号:

parameter => { statements }

如果函数体只有一条语句,且是返回值的话,可以省略大括号和 return 关键字:

parameter => expression
// 等价于
parameter => { return expression; }
  • 没有自己的 this

箭头函数没有自己的 this 值,它会捕获其所在上下文的 this 值为自己的 this,使得在回调函数中的 this 行为变得更加可预测。

2. async 关键字

async 是一个在函数定义前使用的关键字,表明该函数是异步的。async 函数总是返回一个 Promise 对象。如果 async 函数显式返回一个非 Promise 值,这个值会被自动包裹在一个 Promise 中。

async function myFunction() {
  return 'Hello';
}
myFunction().then(alert); // 弹出 'Hello'

使用箭头函数定义异步函数的形式如下:

const myAsyncFunction = async () => {
  // 异步操作
};

3. await 关键字

async 函数内部,可以使用 await 关键字来等待一个 Promise 完成。它会暂停 async 函数的执行,直到 Promise 完成(即 Promise 被 “resolve” 或 “reject”),然后继续执行 async 函数,并返回结果。

  • 基本用法
const data = await someAsyncOperation();

await 只能在 async 函数内部使用,如果在普通函数中使用 await,会引发语法错误。

总结

const getque = async () => {} 定义了一个名为 getque 的异步函数,该函数内部可以包含异步操作,如进行网络请求或者执行其他返回 Promise 对象的操作。通过 asyncawait 的组合使用,可以以更接近同步编程的方式写出清晰、简洁的异步代码。

route.index.js

import { createRouter, createWebHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue';
import showcenter from  '../views/ShowCenter.vue'

const routes = [
  {
    path: '/',
    name: 'showcenter',
    component: showcenter
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router

实现效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/370503.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

逆向基础-破解密码

1.通过study PE查看.exe程序的位数 打开 x32dbg 从暂停到运行程序 原理&#xff1a;软件算出的密码与用户输入的密码作比较 破解流程&#xff1a;查信息 --> 找内存关键数据 --> 测试

Optimizer:基于.Net开发的、提升Windows系统性能的终极开源工具

我们电脑使用久了后&#xff0c;就会产生大量的垃圾文件、无用的配置等&#xff0c;手动删除非常麻烦&#xff0c;今天推荐一个开源工具&#xff0c;可以快速帮助我们更好的优化Windos电脑。 01 项目简介 Optimizer是一个面向Windows系统的优化工具&#xff0c;旨在提升计算机…

[GN] 23种设计模式 —— 常见设计模式学习总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言创建型模式 —— 创建的艺术结构型模式 —— 组合的艺术适配器模式 -- 不兼容结构的协调对象适配器类适配器模式优缺点适用场景 组合模式 -- 树形结构的处理例子…

微信小程序课设(基于云开发)

微信小程序通过Laf云平台接入ChatGPT实现聊天&#xff0c;回答方式采用流式回答。 以下是图片展示其页面 回答次数通过卡密兑换 以下是对话页面的代码 <!--pages/content/content.wxml--><view class"container"><view class"div" hidde…

前端工程化基础(二):前端包管理工具npm/yarn/cnpm/npx/pnpm

前端包管理工具 代码共享方案 创建自己的官网&#xff0c; 将代码放到官网上面将代码提交到GitHub上面&#xff0c;负责让使用者下载将代码提交到npm registry上面 下载比较方便&#xff0c;使用npm install xxx即可下载相应的代码npm管理的包 npm配置文件 主要用于存储项目…

视云闪播截图

视云闪播截图 1. 截图设置2. 热键设置3. 视频截取3.1. 保存 -> 完成 References 深度学习图像数据获取工具。 视云闪播 https://www.netposa.com/Service/Download.html 1. 截图设置 视云闪播 -> 系统设置 -> 截图设置 2. 热键设置 视云闪播 -> 系统设置 ->…

洛谷 P3694 邦邦的大合唱站队 【状压DP】

数据约定&#xff1a; N ≤ 1 0 5 , M ≤ 20 N \leq 10^5, M \leq 20 N≤105,M≤20 思路 对于最终排好的状态&#xff0c;如果我们枚举排在最后一位的团队编号 j j j&#xff0c;可以发现&#xff1a;如果这个团队总共有 x x x 人的话&#xff0c;那么 [ n − x 1 , n ] …

计算机设计大赛 深度学习 植物识别算法系统

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

一篇文章搞懂CNN(卷积神经网络)及其所含概念

目录 1. 什么是卷积神经网络&#xff1a;2. 应用领域&#xff1a;3. 架构&#xff1a;4. 卷积层的参数和名词参数&#xff1a;名词&#xff1a; 5. 注意&#xff1a;6. 经典网络&#xff1a;小结&#xff1a; 当下&#xff0c;计算机视觉在人工智能领域中扮演着至关重要的角色。…

java数组学习

目录 1.数组概念 2.数组的定义 3.数组的静态初始化 4.地址值 5.数组元素访问 6.索引 7.数组的遍历 8.数组的动态初始化 9.数组两种初始化方式的区别 10.数组常见问题 1.数组概念 数组是一种容器&#xff0c;可以同来存储同种数据类型的多个值。但是数组容器在存储数据…

漫漫数学之旅015

文章目录 经典格言数学习题古今评注名人小传 - 亚里士多德 经典格言 首要问题不是我们知道什么&#xff0c;而是我们如何知道的。——亚里士多德&#xff08;Aristotle&#xff09; 亚里士多德&#xff0c;这位古希腊的大哲学家&#xff0c;如果今天穿越到现代脱口秀舞台&…

SQL注入:sqli第一关

一、实验设备&#xff1a; 需要下载并安装phpstudy_pro&#xff0c;下载sqli-labs-php7-master解压到/phpstudy_pro/www中。 二、实验步骤&#xff1a; 1、在id1后加入一个闭合符号“ ‘ ”&#xff0c;但是当你输入?id1&#xff0c;是会报错的&#xff0c; http://127.0.…

vue3实现命令式弹窗

效果图 代码区域 首先实现弹窗组件my-modal.vue 这里实现一个极简易弹窗作为示例&#xff0c;其他功能和样式可自行补充和优化&#xff1b; <template><div class"modal-mask"><div class"modal-wrap"><div class"modal"…

Qt之使用Qt内置图标

一效果 二.原理 Qt内置图标封装在QStyle中,共七十多个图标,可以直接拿来用,能应付不少简单程序需求,不用自己去找图标并添加到资源文件了。 下面是内置图标的枚举定义: enum StandardPixmap {SP_TitleBarMenuButton,SP_TitleBarMinButton,SP_TitleBarMaxButton,SP_T…

JVM之Java内存区域

JVM-Java内存区域 Java内存区域是Java虚拟机&#xff08;JVM&#xff09;管理的内存资源的逻辑划分&#xff0c;用于存储程序运行时所需的数据。Java内存区域的合理划分和管理对于程序的性能和稳定性具有重要影响。本文将深入探讨Java内存区域的各个部分&#xff0c;包括方法区…

android inset 管理

目录 简介 Insets管理架构 Insets相关类图 app侧的类 WMS侧的类 inset show的流程 接口 流程 WMS侧确定InsetsSourceControl的流程 两个问题 窗口显示时不改变现有的inset状态 全屏窗口上的dialog 不显示statusbar问题 View 和 DecorView 设置insets信息 输入法显…

图数据库(neo4j)在工业控制中的应用

图模型 事物的模型中&#xff0c;除了它自身的某些特征之外&#xff0c;还包括它与其它事物的关系特征&#xff0c;例如一个学生的属性包括姓名&#xff0c;性别&#xff0c;年龄等属性&#xff0c;同时&#xff0c;他还有许多关系属性&#xff0c;比如他属于哪一个院系&#x…

认识Tomcat (一)

认识Tomcat &#xff08;一&#xff09; 一、服务器 1.1 服务器简介 ​ 硬件服务器的构成与一般的PC比较相似&#xff0c;但是服务器在稳定性、安全性、性能等方面都要求更高&#xff0c;因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。 ​ 软件服务器&…

数据分析:当当网书籍数据可视化分析

当当网书籍数据可视化分析 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&…

便宜寄快递,就选闪侠惠递,帮您省钱!

随着电子商务的发展&#xff0c;物流也越来越发达&#xff0c;人们的生活中有很多地方都与物流快递打交道。网购或者给远方的亲戚朋友寄礼物等等都需要快递。有时候就止步于昂贵的快递的&#xff0c;其实选对方法&#xff0c;寄快递并不贵... 编辑 现在一般寄快递都是选择去菜鸟…