GridBagLayout GridBagConstraints 笔记231130

实例化使用模板

		GridBagLayout gbl = new GridBagLayout();
//		gbl.columnWidths = new int[]{200,200,200}; // 用数组设置列
//		gbl.rowHeights   = new int[]{100,100,100,100,100}; // 用数组设置行GridBagConstraints gbc = new GridBagConstraints();/*** gridBagConstraints.fill* 当子组件比所在网格小时:* 设置 fill =* GridBagConstraints.NONE; 不拉伸, 是默认值* GridBagConstraints.HORIZONTAL;  水平填满所在网格* GridBagConstraints.VERTICAL;    垂直填满所在网格* GridBagConstraints.BOTH;        拉伸到所在网格大小,填满所在网格, */gbc.fill = GridBagConstraints.NONE;
//		gbc.fill = GridBagConstraints.BOTH        ;/*** gridBagConstraints.anchor , `anchor`中文意思是: 锚(n), 抛锚(v)* 当子组件比所在网格小时:* 设置 anchor =* GridBagConstraints.CENTER;   位于水平和垂直的正中央,(默认值)* GridBagConstraints.EAST;   东* GridBagConstraints.SOUTH;  南* GridBagConstraints.WEST;   西* GridBagConstraints.NORTH;  北* GridBagConstraints.NORTHEAST;(东北,右上)* GridBagConstraints.SOUTHEAST;(东南,右下)* GridBagConstraints.SOUTHWEST;(西南,左上)* GridBagConstraints.NORTHWEST;(西北,左上)* 还有很多选项* 此属性接受三种类型的值:相对于方向(orientation relative)、相对于基线(baseline relative)和绝对位置(absolute)。绝对位置值不依赖于其他因素,包括:CENTER(中心)、NORTH(北)、NORTHEAST(东北)、EAST(东)、SOUTHEAST(东南)、SOUTH(南)、SOUTHWEST(西南)、WEST(西)和NORTHWEST(西北)。
相对于方向的值依赖于容器的组件方向属性,包括:PAGE_START(页面开始)、PAGE_END(页面结束)、LINE_START(行开始)、LINE_END(行结束)、FIRST_LINE_START(第一行开始)、FIRST_LINE_END(第一行结束)、LAST_LINE_START(最后一行开始)和LAST_LINE_END(最后一行结束)。
相对于基线的值依赖于基线位置,包括:BASELINE(基线)、BASELINE_LEADING(基线前导)、BASELINE_TRAILING(基线后尾)、ABOVE_BASELINE(基线之上)、ABOVE_BASELINE_LEADING(基线之上前导)、ABOVE_BASELINE_TRAILING(基线之上后尾)、BELOW_BASELINE(基线之下)、BELOW_BASELINE_LEADING(基线之下前导)和BELOW_BASELINE_TRAILING(基线之下后尾)。
默认值是CENTER,表示组件居中放置。*/gbc.anchor = GridBagConstraints.CENTER;
//		gbc.anchor = GridBagConstraints.NORTH;gbc.gridx = -1;     gbc.gridy = GridBagConstraints.RELATIVE;  //网格的横纵坐标,从0开始, -1是RELATIVE相对自动gbc.gridwidth = 1;  gbc.gridheight = 1;  //横向或纵向站几个网格,如同html的td的colspan和rowspangbc.ipadx = 0;      gbc.ipady = 0;    //增加子组件宽高, gbc.weightx = 0; gbc.weighty = 0; 才有效gbc.weightx = 0;    gbc.weighty = 0;  //值为浮点数, 功能有点像css的grid的fr , 不为0时

GridBagLayout

  • columnWidths 用int数组设置的数量和宽度
  • rowHeights 用int数组设置的数量和宽度
  • columnWeights double数组, 默认是空,
  • rowWeights double数组, 默认是空,
columnWidths 和 rowHeights

三行三列

GridBagLayout gbl = new GridBagLayout(); frame.setLayout(gbl);
gbl.columnWidths=new int[]{200,200,200}; // 用数组设置列
gbl.rowHeights = new int[]{100,100,100}; // 用数组设置行

单行单列

GridBagLayout gbl = new GridBagLayout(); frame.setLayout(gbl);
gbl.columnWidths=new int[]{200}; // 用数组设置列
gbl.rowHeights = new int[]{100}; // 用数组设置行
columnWeights 和 rowWeights

columnWeights
columnWeights是一个double数组,它包含一组可以覆盖已计算列权重的值。如果这个字段是非空的,那么在所有列的权重被计算之后,这些值将被应用到GridBag布局中。如果columnWeights数组中的某个元素的值大于对应列的权重,那么该列将被分配columnWeights数组中对应元素的值作为权重。然而,如果columnWeights数组的元素数量超过列的数量,多余的元素将被忽略,而不会导致创建更多的列。

/*** This field holds the overrides to the column weights.* If this field is non-{@code null} the values are* applied to the gridbag after all of the columns* weights have been calculated.* If {@code columnWeights[i] >} weight for column i, then* column i is assigned the weight in {@code columnWeights[i]}.* If {@code columnWeights} has more elements than the number* of columns, the excess elements are ignored - they do* not cause more columns to be created.** @serial*/
public double[] columnWeights;
此字段包含列权重的覆盖。如果此字段非空,则值将在计算完所有列权重后应用于网格包。如果columnWeights[i] > column i的权重,则column i被分配columnWeights[i]中的权重。如果columnWeights的元素多于列数,则多余的元素将被忽略 - 它们不会导致创建更多的列。

rowWeights
rowWeights是一个double数组,它包含行权重的覆盖值。如果该字段不为空,则在计算完所有行权重后,这些值将被应用到网格包中。如果rowWeights[i]的值大于第i行的权重,则第i行将被分配rowWeights[i]中的权重。如果rowWeights的元素数量超过行数,多余的元素将被忽略,并且不会导致创建更多的行。

/*** This field holds the overrides to the row weights.* If this field is non-{@code null} the values are* applied to the gridbag after all of the rows* weights have been calculated.* If {@code rowWeights[i] > } weight for row i, then* row i is assigned the weight in {@code rowWeights[i]}.* If {@code rowWeights} has more elements than the number* of rows, the excess elements are ignored - they do* not cause more rows to be created.** @serial*/
这个字段持有对行权重的覆盖。如果这个字段非空,那么这些值将在所有行权重被计算后应用于网格包(GridBag)。如果rowWeights[i] > i行的权重,那么i行将分配rowWeights[i]中的权重。如果rowWeights的元素数量超过行数,多余的元素将被忽略,它们不会导致创建更多的行。
public double[] rowWeights;

GridBagConstraint

GridBagConstraints 类包含许多用于定义这些约束的字段和方法。以下是一些常用的字段:

  • gridxgridy:指定组件在网格中的位置。
  • gridwidthgridheight:指定组件跨越的网格单元数量。
  • weightxweighty:指定组件在其行或列中的额外空间分配比例。
  • anchor:指定组件在其网格单元中的对齐方式。
  • fill:指定组件在其网格单元中的填充方式。
  • insets:指定组件的边缘间距。

GridBagConstraints源码的无参构造方法,可看出默认值

    public GridBagConstraints () {gridx = RELATIVE; //从0开始第几列; 默认RELATIVE=-1,表示add时自动加列gridy = RELATIVE; //从0开始第几行; 默认RELATIVE=-1,表示add时自动加行gridwidth = 1;  //如同colspan,横跨几列gridheight = 1;  //如共同rowspan,竖跨几行weightx = 0;  //浮点数, 功能有点像css的grid的frweighty = 0;  //浮点数, 功能有点像css的grid的franchor = CENTER;fill = NONE;insets = new Insets(0, 0, 0, 0);ipadx = 0;  // 增加子件宽度, weightx=0时才有用ipady = 0;  // 增加子件高度, weighty=0时才有用}

GridBagConstraints源码的设参构造方法

    public GridBagConstraints(int gridx, int gridy,int gridwidth, int gridheight,double weightx, double weighty,int anchor, int fill,Insets insets, int ipadx, int ipady) {this.gridx = gridx;this.gridy = gridy;this.gridwidth = gridwidth;this.gridheight = gridheight;this.fill = fill;this.ipadx = ipadx;this.ipady = ipady;this.insets = insets;this.anchor  = anchor;this.weightx = weightx;this.weighty = weighty;}

anchor

anchor中文意思是: 锚(n), 抛锚(v)

anchor 属性决定了组件在其单元格中的位置。例如,如果 anchor 被设置为 GridBagConstraints.WEST,组件将被左对齐。

以下是一些可能的 anchor 值:

  • GridBagConstraints.CENTER:将组件居中在其单元格中(默认)。
  • GridBagConstraints.NORTH:将组件与其单元格的顶部对齐。
  • GridBagConstraints.SOUTH:将组件与其单元格的底部对齐。
  • GridBagConstraints.EAST:将组件与其单元格的右侧对齐。
  • GridBagConstraints.WEST:将组件与其单元格的左侧对齐。
  • GridBagConstraints.NORTHWEST:将组件与其单元格的左上角对齐。
  • GridBagConstraints.NORTHEAST:将组件与其单元格的右上角对齐。
  • GridBagConstraints.SOUTHWEST:将组件与其单元格的左下角对齐。
  • GridBagConstraints.SOUTHEAST:将组件与其单元格的右下角对齐。

还有更多取值,如与基线对齐相关的: GridBagConstraints.BASELINE, GridBagConstraints.BASELINE_LEADING, 和 GridBagConstraints.BASELINE_TRAILING 等值

anchor还有更多的取值,

此属性接受三种类型的值:相对于方向(orientation relative)、相对于基线(baseline relative)和绝对位置(absolute)。

  • 绝对位置值不依赖于其他因素,包括:CENTER(中心)(默认值)、NORTH(北)、NORTHEAST(东北)、EAST(东)、SOUTHEAST(东南)、SOUTH(南)、SOUTHWEST(西南)、WEST(西)和NORTHWEST(西北)。

  • 相对于方向的值依赖于容器的组件方向属性,包括:PAGE_START(页面开始)、PAGE_END(页面结束)、LINE_START(行开始)、LINE_END(行结束)、FIRST_LINE_START(第一行开始)、FIRST_LINE_END(第一行结束)、LAST_LINE_START(最后一行开始)和LAST_LINE_END(最后一行结束)。

  • 相对于基线的值依赖于基线位置,包括:BASELINE(基线)、BASELINE_LEADING(基线前导)、BASELINE_TRAILING(基线后尾)、ABOVE_BASELINE(基线之上)、ABOVE_BASELINE_LEADING(基线之上前导)、ABOVE_BASELINE_TRAILING(基线之上后尾)、BELOW_BASELINE(基线之下)、BELOW_BASELINE_LEADING(基线之下前导)和BELOW_BASELINE_TRAILING(基线之下后尾)。

默认值是 CENTER,表示组件居中放置。GridBagConstraints.CENTER


fill

这个字段用于当组件的显示区域大于组件所请求的大小时。它决定了是否要调整组件的大小,以及如果要调整,该如何调整。

对于填充(fill)属性,以下值是有效的:

• NONE:不调整组件的大小。(默认值)
• HORIZONTAL:使组件足够宽,以水平填充其显示区域,但不改变其高度。
• VERTICAL:使组件足够高,以垂直填充其显示区域,但不改变其宽度。
• BOTH:使组件完全填充其显示区域。

默认值是NONE。这意味着,除非明确指定,否则组件的大小不会进行调整以适应其显示区域。




weightxweighty
gbc.weightx ; gbc.weighty; 可实现css的grid的fr的效果

在这里插入图片描述
注意f下面代码or循环中的gbc.weighty = gbc.weightx = r*c;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;public class T2311300901 {public static void main(String...arguments)throws Exception{JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());frame.setBounds(100, 100, 800, 600);frame.addWindowListener(new WindowAdapter() {@Override public void windowClosing(WindowEvent wev) {System.exit(100);}});GridBagLayout gbl = new GridBagLayout();
//		gbl.columnWidths = new int[]{200,200,200}; // 用数组设置列
//		gbl.rowHeights   = new int[]{100,100,100,100,100}; // 用数组设置行GridBagConstraints gbc = new GridBagConstraints();gbc.fill = GridBagConstraints.BOTH;
//		gbc.anchor = GridBagConstraints.EAST;gbc.gridwidth = 1;  gbc.gridheight = 1; gbc.ipadx = 0;      gbc.ipady = 0;gbc.weightx = 0;    gbc.weighty = 0;JPanel panel = new JPanel(gbl); frame.getContentPane().add(panel);int xc=3 , yc=3;JButton jbtA2[][] = new JButton[yc][];for(int r=0;r<yc;r++) {jbtA2[r] = new JButton[xc];for(int c=0;c<xc;c++) {gbc.gridx=c;gbc.gridy=r;gbc.weighty = gbc.weightx = r*c;JButton jbt = new JButton("<html><div style='color:red;'>"+"R"+r+"C"+c+"</div></html>");
//				gbl.setConstraints(jbt, gbc);  panel.add(jbt);   // 可用 panel.add(jbt, gbc); 取代//👆👇上下句效果一样,二选一panel.add(jbt, gbc);}}frame.setVisible(true);}
}




用 GridBagLayout 和 GridBagConstraints 来居中

例1 , 单网格居中
import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class GridBag居中 {static JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());static GridBagLayout frameGbl = new GridBagLayout();static GridBagConstraints frameGbc = new GridBagConstraints();static {frame.addWindowListener(new WindowAdapter() {@Override public void windowClosing(WindowEvent ev) {System.exit(0);}});frame.setBounds(100, 100, 800, 600);frame.setLayout(frameGbl);}static JButton jbt = new JButton("jbt001");static {GridBagLayout gbl = frameGbl; GridBagConstraints gbc = frameGbc;// 将布局设为一列一行, 如果不设定, 在只加入一个子组件时也会自动变为一列一行, 但是没有高宽, 即便fill=BOTH,由于网格的高宽为0,子组件依然是原始大小gbl.columnWidths = new int[] {300};  // 网格宽度gbl.rowHeights = new int[] {100};    // 网格高度gbc.fill = GridBagConstraints.BOTH;  // 横纵拉伸为和网格一样的宽高, 就可以用 columnWidths 和 rowHeights 来设定子组件的宽高frame.add(jbt, gbc);// 注意: 此时布局大小只是整个Button的大小,并不是容器的大小, 居中是因为容器的默认, 而不是 anchor 属性默认值的作用}public static void main(String...arguments)throws Exception{frame.setVisible(true);}}

效果
在这里插入图片描述
关键代码

		// 将布局设为一列一行, 如果不设定, 在只加入一个子组件时也会自动变为一列一行, 但是没有高宽, 即便fill=BOTH,由于网格的高宽为0,子组件依然是原始大小gbl.columnWidths = new int[] {300};  // 网格宽度gbl.rowHeights = new int[] {100};    // 网格高度gbc.fill = GridBagConstraints.BOTH;  // 横纵拉伸为和网格一样的宽高, 就可以用 columnWidths 和 rowHeights 来设定子组件的宽高frame.add(jbt, gbc);// 注意: 此时布局大小只是整个Button的大小,并不是容器的大小, 居中是因为容器的默认, 而不是 anchor 属性默认值的作用

还有一些属性因为默认值就满足要求,所以不用设置

注意: 此时布局大小只是整个Button的大小,并不是容器的大小, 居中是因为容器的默认, 而不是 anchor 属性默认值的作用


例2 , 九网格居中
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class GridBag居中2 {static JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());static GridBagLayout frameGbl = new GridBagLayout();static GridBagConstraints frameGbc = new GridBagConstraints();static {frame.addWindowListener(new WindowAdapter() {@Override public void windowClosing(WindowEvent ev) {System.exit(0);}});frame.setBounds(100, 100, 800, 600);frame.setLayout(frameGbl);}static JButton jbt = new JButton("""<html><span style="font-size:30px; color:blue; ">按钮1</span></html>""");static {GridBagLayout gbl = frameGbl; GridBagConstraints gbc = frameGbc;// 将布局设为一列一行, 如果不设定, 在只加入一个子组件时也会自动变为一列一行, 但是没有高宽, 即便fill=BOTH,由于网格的高宽为0,子组件依然是原始大小gbl.columnWidths = new int[] {9999,300,9999};  // 网格宽度, 设置3列, 只要左右相等,就能居中,即便总数超过容器宽度gbl.rowHeights = new int[] {666,300,666};    // 网格高度, 设置3列, 只要左右相等,就能居中,即便总数超过容器高度gbc.fill = GridBagConstraints.BOTH;  // 横纵拉伸为和网格一样的宽高, 就可以用 columnWidths 和 rowHeights 来设定子组件的宽高gbc.gridx=1; gbc.gridy=1;  // 放到中间格(横竖第二格),索引从0开始,所以第二格的索引号是1gbc.anchor = GridBagConstraints.WEST;frame.add(jbt, gbc);}public static void main(String...arguments)throws Exception{frame.setVisible(true);}

效果

在这里插入图片描述

关键代码

		// 将布局设为一列一行, 如果不设定, 在只加入一个子组件时也会自动变为一列一行, 但是没有高宽, 即便fill=BOTH,由于网格的高宽为0,子组件依然是原始大小gbl.columnWidths = new int[] {9999,300,9999};  // 网格宽度, 设置3列, 只要左右相等,就能居中,即便总数超过容器宽度gbl.rowHeights = new int[] {666,300,666};    // 网格高度, 设置3列, 只要左右相等,就能居中,即便总数超过容器高度gbc.fill = GridBagConstraints.BOTH;  // 横纵拉伸为和网格一样的宽高, 就可以用 columnWidths 和 rowHeights 来设定子组件的宽高gbc.gridx=1; gbc.gridy=1;  // 放到中间格(横竖第二格),索引从0开始,所以第二格的索引号是1gbc.anchor = GridBagConstraints.WEST;frame.add(jbt, gbc);

可以用边缘网格控制中间网格的位置, 只居中时, 可以将左右上下网格的高宽设很大,只要左等于右,上等于下,就能居中,并且可以用中间网格的大小调整子组件的大小

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14-1、IO流

14-1、IO流 lO流打开和关闭lO流打开模式lO流对象的状态 非格式化IO二进制IO读取二进制数据获取读长度写入二进制数据 读写指针 和 随机访问设置读/写指针位置获取读/写指针位置 字符串流 lO流打开和关闭 通过构造函数打开I/O流 其中filename表示文件路径&#xff0c;mode表示打…

【KCC@南京】KCC南京“数字经济-开源行”活动回顾录

11月26日&#xff0c;由KCC南京、中科南京软件研究所、傲空间、PowerData联合主办的 KCC南京“数字经济-开源行” 的活动已圆满结束。此次活动&#xff0c;3 场主题研讨&#xff0c;11 场分享&#xff0c;现场参会人数 60&#xff0c;线上直播观看 3000&#xff0c;各地小伙伴从…

Android画布Canvas绘图scale,Kotlin

Android画布Canvas绘图scale&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.…

数据仓库工具Hive

1. 请解释Hive是什么&#xff0c;它的主要用途是什么&#xff1f; Hive是一个基于Hadoop的数据仓库工具&#xff0c;主要用于处理和分析大规模结构化数据。它可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类似SQL的查询功能&#xff0c;将SQL语句转换为MapRedu…

Windows 和 MacOS 上安装配置ADB(安卓调试桥)

一、Android 调试桥 (ADB) Android 调试桥&#xff08;ADB&#xff09; 是一款多功能命令行工具&#xff0c;它让你能够更便捷地访问和管理 Android 设备。使用 ADB 命令&#xff0c;你可以轻松执行以下操作 在设备上安装、复制和删除文件&#xff1b;安装应用程序&#xff1…

YOLOV3 SPP 目标检测项目(针对xml或者yolo标注的自定义数据集)

1. 目标检测的两种标注形式 项目下载地址:YOLOV3 SPP网络对自定义数据集的目标检测(标注方式包括xml或者yolo格式) 目标检测边界框的表现形式有两种: YOLO(txt) : 第一个为类别,后面四个为边界框,x,y中心点坐标以及h,w的相对值 xml文件:类似于网页的标注文件,里面会…

JavaEE 08 线程池简介

前言 前面我们谈完了定时器,单例模式,阻塞队列等的操作并且做了模拟实现,今天我们再来说一说线程池的操作以及一些锁策略. 注:本章几乎均为理论篇,实践较少. 下面就让我们开始吧. 线程池 我们知道因为进程的频繁创建和销毁,带来的开销过大,我们无法接受,所以我们引入了更轻量级…

Linux常见压缩指令小结

为什么需要压缩技术 我们都知道文件是以byte作为单位的&#xff0c;如果我们的文件仅仅在低位占一个1 0000 0001这种情况我们完全可以压缩一下&#xff0c;将高位的0全部抹掉即可。 如上所说是一种压缩技术&#xff0c;还有一种就是将1111(此处省略96个)一共100个1&#xff0…

mysql执行带函数命令的sql脚本报错

一、前言 开发给了一个带函数的sql文件让我执行&#xff0c;但是执行导入时报以下错误 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled 二、解决 在数据库命令行中执行以下命令&#xff08;临时生效&…

HarmonyOS4.0从零开始的开发教程11给您的应用添加弹窗

HarmonyOS&#xff08;十&#xff09;给您的应用添加弹窗 概述 在我们日常使用应用的时候&#xff0c;可能会进行一些敏感的操作&#xff0c;比如删除联系人&#xff0c;这时候我们给应用添加弹窗来提示用户是否需要执行该操作&#xff0c;如下图所示&#xff1a; 弹窗是一种…

AI:99-基于深度学习的飞机故障检测与维修

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的核心代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新…

【pycharm】Pycharm中进行Git版本控制

本篇文章主要记录一下自己在pycharm上使用git的操作&#xff0c;一个新项目如何使用git进行版本控制。 文章使用的pycharm版本PyCharm Community Edition 2017.2.4&#xff0c;远程仓库为https://gitee.com/ 1.配置Git&#xff08;File>Settings&#xff09; 2.去Gitee创建…

记录一次云原生线上服务数据迁移全过程

文章目录 背景迁移方案调研迁移过程服务监控脚本定时任务暂停本地副本服务启动&#xff0c;在线服务下线MySQL 数据迁移Mongo 数据迁移切换新数据库 ip 本地服务启动数据库连接验证服务打包部署服务重启前端恢复正常监控脚本定时任务启动旧服务器器容器关闭 迁移总结 背景 校园…

机器学习基本概念介绍 2023

笔记来源于&#xff1a; https://www.youtube.com/watch?vphQK8xZpgoU&t172s https://www.youtube.com/watch?vXLyPFnephpY&t645s Machine/Deep Learning 机器学习概况来说&#xff0c;让机器具备自动找函式的能力 &#xff08;Machine Learning 约等于 Looking …

智能优化算法应用:基于飞蛾扑火算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于飞蛾扑火算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于飞蛾扑火算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.飞蛾扑火算法4.实验参数设定5.算法结果6.…

订单系统的设计与海量数据处理实战

概述 订单系统可以说是整个电商系统中最重要的一个子系统&#xff0c;因此订单数据可以算作电商企业最重要的数据资产。订单系统从代码上来说可分为两部分&#xff1a;订单程序和历史订单处理程序。数据存储进行分库分表。 订单系统业务分析 对于一个合格的订单系统&#xf…

如何使用bash写脚本

本章主要介绍如何使用bash写脚本。 了解通配符了解变量了解返回值和数值运算数值的对比判断语句循环语句 grep的用法是“grep 关键字 file”&#xff0c;意思是从file中过滤出含有关键字的行。 例如&#xff0c;grep root /var/log/messages&#xff0c;意思是从/var/log/me…

JVM进程缓存

引言 缓存在日常开发中启动至关重要的作用&#xff0c;由于是存储在内存中&#xff0c;数据的读取速度是非常快的&#xff0c;能大量减少对数据库的访问&#xff0c;减少数据库的压力。我们把缓存分为两类&#xff1a; 分布式缓存&#xff0c;例如Redis&#xff1a; 优点&…

Java项目-瑞吉外卖Day4

实现文件的上传下载&#xff1a; 前端代码&#xff1a; 对文件的操作就是对流的操作。 上传文件的后端代码&#xff0c;需要注意MultipartFile的名字必须与前端相对&#xff1a; 为文件存储位置进行动态设置&#xff0c;配置application.xml 在CommonController中设置属性读…

Nodejs后端+express框架

前言 基于vue3Node后台管理项目&#xff0c;补充nodejs和express相关知识。 文章目录 一&#xff0c;express 1.官网 Express - 基于 Node.js 平台的 web 应用开发框架 - Express中文文档 | Express中文网 2.安装 npm install express --save 二、MongoDB 特点 非关…