Editor工具开发实用篇:EditorGUI/EditorGUILayout的区别和EditorGUILayout的方法介绍

news2025/1/17 15:47:29

目录

一:EditorGUI和EditorGUILayout区别

二:EditorGUILayout

1.EditorGUILayout.BeginFadeGroup(float value);

2.EditorGUILayout.BeginHorizontal  EditorGUILayout.BeginVertical

3.EditorGUILayout.BeginScrollView

4.EditorGUILayout.BeginToggleGroup&&EditorGUILayout.Toggle

5.EditorGUILayout.BoundsField  EditorGUILayout.BoundsIntField  public static Color ColorField   等等等....

6.EditorGUILayout.DropdownButton

7.EditorGUILayout.BeginBuildTargetSelectionGrouping

8.EditorGUILayout.EnumFlagsField

9.EditorGUILayout.EnumPopup

10.EditorGUILayout.Foldout

11.EditorGUILayout.GetControlRect

12.EditorGUILayout.GradientField

13.EditorGUILayout.HelpBox

14.EditorGUILayout.IntSlider||EditorGUILayout.Slider

15.EditorGUILayout.ObjectField

16.EditorGUILayout.PrefixLabel

17.EditorGUILayout.PropertyField

18.EditorGUILayout.SelectableLabel

19.EditorGUILayout.Space();

三.所有代码:


一:EditorGUI和EditorGUILayout区别

官方的api给出的是EditorGUILayout是EditorGUI的自动布局版本

什么意思呢?

如果我们进入到EditorGUI和EditorGUILayout的代码里可以看到EditorGUI类里有的方法 基本在EditorGUILayout类里都有相对应的方法 

区别就是:
EditorGUI类的方法基本上都要传入一个参数Rect包含了位置和大小而EditorGUILayout不需要

这样看的话我们着重了解一下EditorGUILayout

二:EditorGUILayout

常用方法:

1.EditorGUILayout.BeginFadeGroup(float value);

解释: 开始一个可隐藏/显示的组,并且过渡将生成动画。

eg:

private void OnGUI() {
        if(EditorGUILayout.BeginFadeGroup(0)) {
            GUILayout.TextArea("1\n2\n3\n4\n");
        }
        EditorGUILayout.EndFadeGroup();
    }

效果:

修改值为0.5f

private void OnGUI() {
        if(EditorGUILayout.BeginFadeGroup(0.5f)) {
            GUILayout.TextArea("1\n2\n3\n4\n");
        }
        EditorGUILayout.EndFadeGroup();
    }

效果:

 

修改为1

private void OnGUI() {
        if(EditorGUILayout.BeginFadeGroup(1)) {
            GUILayout.TextArea("1\n2\n3\n4\n");
        }
        EditorGUILayout.EndFadeGroup();
    }

效果:

 

2.EditorGUILayout.BeginHorizontal
  EditorGUILayout.BeginVertical

解释:开始一个水平组/垂直组
eg:

        EditorGUILayout.BeginHorizontal();
        GUILayout.Button("H_Btn1");
        GUILayout.Button("H_Btn2");
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginVertical();
        GUILayout.Button("V_Btn1");
        GUILayout.Button("V_Btn1");
        EditorGUILayout.EndVertical();

效果:

3.EditorGUILayout.BeginScrollView

解释:开始一个自动布局的滚动视图。
eg:

scrolpos = EditorGUILayout.BeginScrollView(scrolpos, GUILayout.Width(80), GUILayout.Height(80));
        GUILayout.Label("item1111111111111");
        GUILayout.Label("item2");
        GUILayout.Label("item3");
        GUILayout.Label("item4");
        GUILayout.Label("item5");
        EditorGUILayout.EndScrollView();

效果:

 

4.EditorGUILayout.BeginToggleGroup&&EditorGUILayout.Toggle

BeginToggleGroup  解释:开始一个垂直组,带有可一次性启用或禁用所有控件的开关
Toggle                       解释:创建一个开关
eg:

bool showToggle;
    private void OnGUI() {
        showToggle =  EditorGUILayout.BeginToggleGroup("toggleGroup", showToggle);
        EditorGUILayout.Toggle("toggle1", showToggle);
        EditorGUILayout.Toggle("toggle2", !showToggle);
        EditorGUILayout.EndToggleGroup();
    }

效果:

 

5.EditorGUILayout.BoundsField
  EditorGUILayout.BoundsIntField
  public static Color ColorField   等等等....

unity的api 或者C# api 的一些类型的展示
eg:

    Bounds Bounds;
    BoundsInt boundsInt;
    Color color;
    private void OnGUI() {
        EditorGUILayout.BeginVertical();
        Bounds = EditorGUILayout.BoundsField(Bounds);
        boundsInt = EditorGUILayout.BoundsIntField(boundsInt);
        color = EditorGUILayout.ColorField(color);
        EditorGUILayout.EndVertical();
    }

效果:

6.EditorGUILayout.DropdownButton

解释:创建一个能够对鼠标按下做出反应的按钮,用于显示您自己的下拉菜单内容
eg:

private void OnGUI() {
EditorGUILayout.BeginVertical();
        GUIContent dropDown = new GUIContent("菜单");
        if(EditorGUILayout.DropdownButton(dropDown, FocusType.Keyboard)) {
            GenericMenu genericMenu = new GenericMenu();
            genericMenu.AddItem(new GUIContent("文件"), true, Select);

            genericMenu.AddItem(new GUIContent("工具"), false, Select);

            genericMenu.AddSeparator("");
            genericMenu.AddItem(new GUIContent("设置/设置1"), true, Select);
            genericMenu.AddItem(new GUIContent("设置/设置2"), false, Select);

            genericMenu.AddItem(new GUIContent("主题/1"), true, Select);
            genericMenu.AddSeparator("主题/");
            genericMenu.AddItem(new GUIContent("主题/2"), false, Select);
            genericMenu.AddDisabledItem(new GUIContent("不可更改"));
            Rect rect = GUILayoutUtility.GetLastRect();
            genericMenu.DropDown(rect);
        }
        EditorGUILayout.EndVertical();
}

    private void Select() {
        Debug.Log("Select");
    }

效果:

修改:
            Rect rect = GUILayoutUtility.GetLastRect();
            genericMenu.DropDown(rect);

为:
            genericMenu.ShowAsContext();

效果:

拓展:GenericMenu 创建自定义上下文菜单和下拉菜单。

变量
allowDuplicateNames
允许菜单具有多个同名的菜单项。


公共函数
AddDisabledItem
向菜单添加已禁用的项。
AddItem
向菜单添加一个项。
AddSeparator
向菜单添加一个分隔符项。
DropDown
在给定屏幕矩形中显示菜单。
GetItemCount
获取菜单中的项数。
ShowAsContext
右键单击时在鼠标下显示菜单。


委托
MenuFunction
回调函数,菜单项选中时调用。
MenuFunction2
带有用户数据的回调函数,菜单项选中时调用。

7.EditorGUILayout.BeginBuildTargetSelectionGrouping

解释:开始构建目标组并返回所选 BuildTargetGroup
eg:

BuildTargetGroup buildTargetGroup = EditorGUILayout.BeginBuildTargetSelectionGrouping();
        if(buildTargetGroup == BuildTargetGroup.Android) {
            GUILayout.Button("A_Btn1");
            GUILayout.Button("A_Btn2");
        } else if(buildTargetGroup == BuildTargetGroup.iOS) {
            GUILayout.Button("I_Btn1");
            GUILayout.Button("I_Btn2");
        } else if(buildTargetGroup == BuildTargetGroup.Standalone) {
            GUILayout.Button("S_Btn1");
            GUILayout.Button("S_Btn2");
        } else if(buildTargetGroup == BuildTargetGroup.WebGL) {
            GUILayout.Button("W_Btn1");
            GUILayout.Button("W_Btn2");
        }
        EditorGUILayout.EndBuildTargetSelectionGrouping();

效果:

 

 

 

8.EditorGUILayout.EnumFlagsField

解释:单击后,系统会为枚举类型每个值显示带有选项的菜单
eg:

public enum CONENUM {
    NONE = 1 << 0,
    NORMAL = 1 << 2,
    SPE = 1 << 3,
    OTHER = 1 << 4,
    ALL = 1 << 5,
}
CONENUM cONENUM;
    private void OnGUI() {
     EditorGUILayout.BeginVertical();
        cONENUM = (CONENUM)EditorGUILayout.EnumFlagsField(cONENUM);
        EditorGUILayout.EndVertical();
}

效果:

 

9.EditorGUILayout.EnumPopup

解释:创建一个枚举弹出选择字段
eg:

public enum CONENUM {
    NONE = 1 << 0,
    NORMAL = 1 << 2,
    SPE = 1 << 3,
    OTHER = 1 << 4,
    ALL = 1 << 5,
}
CONENUM cONENUM;
    private void OnGUI() {
     EditorGUILayout.BeginVertical();
        cONENUM = (CONENUM)EditorGUILayout.EnumPopup("ENUM", cONENUM);
        EditorGUILayout.EndVertical();
}

效果:

10.EditorGUILayout.Foldout

解释:创建一个左侧带有折叠箭头的标签
eg:

 bool foldout = false;
    private void OnGUI() {
    EditorGUILayout.BeginVertical();
        foldout = EditorGUILayout.Foldout(foldout, "这个是什么意思,带折叠箭头的标签???");
        if(foldout) {
            GUILayout.Label("来吧展示!");
        }
        EditorGUILayout.EndVertical();
}

效果:

 

 

11.EditorGUILayout.GetControlRect

解释:获取编辑器控件的矩形。
eg:    

Rect controlRect;
    string selectPath;

    private void OnGUI() {
     EditorGUILayout.BeginVertical();
        controlRect = EditorGUILayout.GetControlRect(true, 100);
        selectPath = EditorGUI.TextField(controlRect, selectPath);
        EditorGUILayout.EndVertical();
}

效果:

12.EditorGUILayout.GradientField

解释:创建一个用于编辑 Gradient 的字段。
eg: 

Gradient gradient = new Gradient();
   private void OnGUI() {
        EditorGUILayout.BeginVertical();
        gradient = EditorGUILayout.GradientField(gradient);
        EditorGUILayout.EndVertical();
    }

效果:

 

 

13.EditorGUILayout.HelpBox

解释:创建一个带有发送给用户的消息的帮助框。
eg:

private void OnGUI() {
      EditorGUILayout.BeginVertical();
        EditorGUILayout.HelpBox("一个带有发送给用户消息的帮助框?", MessageType.Error);
        EditorGUILayout.EndVertical();
    }

效果:

 

14.EditorGUILayout.IntSlider||EditorGUILayout.Slider

解释:创建一个滑动条,用户可以进行拖动以在最小值和最大值之间更改整数值。
eg:

int sliderValue = 0;
    private void OnGUI() {
     EditorGUILayout.BeginVertical();
        sliderValue = EditorGUILayout.IntSlider(sliderValue, 0, 100);
        EditorGUILayout.EndVertical();
    }

效果:

 

注: EditorGUILayout.Slider 区别是支持浮点类型

15.EditorGUILayout.ObjectField

解释:生成一个可接收任何对象类型的字段。
eg:

UnityEngine.Object obj;
    private void OnGUI() {
     EditorGUILayout.BeginVertical();
        obj = EditorGUILayout.ObjectField(obj, typeof(UnityEngine.Object), true);
        EditorGUILayout.EndVertical();
    }

效果:

16.EditorGUILayout.PrefixLabel

解释:创建一个显示在特定控件前标签
eg:

Color color;
private void OnGUI() {
        EditorGUILayout.BeginVertical();
        EditorGUILayout.PrefixLabel("Color");
        color = EditorGUILayout.ColorField(color);
        EditorGUILayout.EndVertical();
    }

效果:

 

17.EditorGUILayout.PropertyField

解释:为 SerializedProperty 生成一个字段
eg:

public class TestBtn: MonoBehaviour {
    [HideInInspector]
    public string _name;
    private void OnGUI() {
        EditorGUILayout.BeginHorizontal();
        if(GUILayout.Button(_name)) {
        }
        EditorGUILayout.EndHorizontal();
    }
}
[CustomEditor(typeof(TestBtn))]
public class TestBtnTool : Editor {
    SerializedProperty serializedProperty;
    GUIContent gUIContent;
    private void Awake() {
        //反射拿到_name 赋值给serializedProperty
        if(serializedObject.FindProperty("_name") != null) {
            serializedProperty = serializedObject.FindProperty("_name");
        }
        gUIContent = new GUIContent("L_Name");
    }

    public override void OnInspectorGUI() {
        base.OnInspectorGUI();
        if(serializedProperty != null) {
            EditorGUILayout.PropertyField(serializedProperty, gUIContent);
            //保存 serializedObject  serializedObject是TestBtn 的序列化
            serializedObject.ApplyModifiedProperties();
        }
    }
}

效果:

 

修改L_Name

 

 

18.EditorGUILayout.SelectableLabel

解释:生成一个可选择标签字段。(用于显示可复制粘贴的只读信息。)
eg:

private void OnGUI() {
        EditorGUILayout.BeginVertical();
        EditorGUILayout.SelectableLabel("1");
        EditorGUILayout.SelectableLabel("2");
        EditorGUILayout.SelectableLabel("3");
        EditorGUILayout.EndVertical();
}

修改:

 注:1 2 3 可复制

19.EditorGUILayout.Space();

用在两个控件中间 会有一个空格
eg:      

EditorGUILayout.BeginVertical();
        GUILayout.Button("V_Btn1");
        //EditorGUILayout.Space();
        GUILayout.Button("V_Btn1");
        EditorGUILayout.EndVertical();

效果:

 

使用后:

 

三.所有代码:

using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.AnimatedValues;
using UnityEngine;

public class EditorToolWindowOne: EditorWindow {
    public static EditorToolWindowOne inst;
    float progress;
    [MenuItem("EditorTool/OpenWindowOne")]
    public static void CreateWindow() {

        inst = GetWindow<EditorToolWindowOne>(true, "这是一个浮动窗口");
        inst.Show();
    }

    private void Awake() {

    }
    Vector2 scrolpos = new Vector2(100, 100);
    bool showToggle;
    Bounds Bounds;
    BoundsInt boundsInt;
    Color color;

    CONENUM cONENUM;

    bool foldout = false;

    Rect controlRect;

    string selectPath;

    Gradient gradient = new Gradient();

    int sliderValue = 0;

    UnityEngine.Object obj;
    private void OnGUI() {
        BuildTargetGroup buildTargetGroup = EditorGUILayout.BeginBuildTargetSelectionGrouping();
        if(buildTargetGroup == BuildTargetGroup.Android) {
            GUILayout.Button("A_Btn1");
            GUILayout.Button("A_Btn2");
        } else if(buildTargetGroup == BuildTargetGroup.iOS) {
            GUILayout.Button("I_Btn1");
            GUILayout.Button("I_Btn2");
        } else if(buildTargetGroup == BuildTargetGroup.Standalone) {
            GUILayout.Button("S_Btn1");
            GUILayout.Button("S_Btn2");
        } else if(buildTargetGroup == BuildTargetGroup.WebGL) {
            GUILayout.Button("W_Btn1");
            GUILayout.Button("W_Btn2");
        }
        EditorGUILayout.EndBuildTargetSelectionGrouping();

        if(EditorGUILayout.BeginFadeGroup(1)) {
            GUILayout.TextArea("1\n2\n3\n4\n");
        }
        EditorGUILayout.EndFadeGroup();

        EditorGUILayout.BeginVertical();
        GUILayout.Button("V_Btn1");
        EditorGUILayout.Space();
        GUILayout.Button("V_Btn1");
        EditorGUILayout.EndVertical();

        scrolpos = EditorGUILayout.BeginScrollView(scrolpos, GUILayout.Width(80), GUILayout.Height(80));
        GUILayout.Label("item1111111111111");
        GUILayout.Label("item2");
        GUILayout.Label("item3");
        GUILayout.Label("item4");
        GUILayout.Label("item5");
        EditorGUILayout.EndScrollView();

        showToggle =  EditorGUILayout.BeginToggleGroup("toggleGroup", showToggle);
        EditorGUILayout.Toggle("toggle1", showToggle);
        EditorGUILayout.Toggle("toggle2", !showToggle);
        EditorGUILayout.EndToggleGroup();


        EditorGUILayout.BeginVertical();
        Bounds = EditorGUILayout.BoundsField(Bounds);
        boundsInt = EditorGUILayout.BoundsIntField(boundsInt);
        color = EditorGUILayout.ColorField(color);
        GUIContent dropDown = new GUIContent("菜单");
        if(EditorGUILayout.DropdownButton(dropDown, FocusType.Keyboard)) {
            GenericMenu genericMenu = new GenericMenu();
            genericMenu.AddItem(new GUIContent("文件"), true, Select);

            genericMenu.AddItem(new GUIContent("工具"), false, Select);

            genericMenu.AddSeparator("");
            genericMenu.AddItem(new GUIContent("设置/设置1"), true, Select);
            genericMenu.AddItem(new GUIContent("设置/设置2"), false, Select);

            genericMenu.AddItem(new GUIContent("主题/1"), true, Select);
            genericMenu.AddSeparator("主题/");
            genericMenu.AddItem(new GUIContent("主题/2"), false, Select);
            genericMenu.AddDisabledItem(new GUIContent("不可更改"));
            genericMenu.ShowAsContext();
            //Rect rect = GUILayoutUtility.GetLastRect();
            //genericMenu.DropDown(rect);
        }
        EditorGUILayout.EndVertical();


        EditorGUILayout.BeginVertical();
        cONENUM = (CONENUM)EditorGUILayout.EnumFlagsField("enum", cONENUM);
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        cONENUM = (CONENUM)EditorGUILayout.EnumPopup("ENUM", cONENUM);
        EditorGUILayout.EndVertical();


        EditorGUILayout.BeginVertical();
        foldout = EditorGUILayout.Foldout(foldout, "这个是什么意思,带折叠箭头的标签???");
        if(foldout) {
            GUILayout.Label("来吧展示!");
        }
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        controlRect = EditorGUILayout.GetControlRect(true, 100);
        selectPath = EditorGUI.TextField(controlRect, selectPath);
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        gradient = EditorGUILayout.GradientField(gradient);
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        EditorGUILayout.HelpBox("一个带有发送给用户消息的帮助框?", MessageType.Error);
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        sliderValue = EditorGUILayout.IntSlider(sliderValue, 0, 100);
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        obj = EditorGUILayout.ObjectField(obj, typeof(UnityEngine.Object), true);
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        EditorGUILayout.PrefixLabel("Color");
        color = EditorGUILayout.ColorField(color);
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical();
        EditorGUILayout.SelectableLabel("1");
        EditorGUILayout.SelectableLabel("2");
        EditorGUILayout.SelectableLabel("3");
        EditorGUILayout.EndVertical();
    }
    private void Select() {
        Debug.Log("Select");
    }
}
public enum CONENUM {
    NONE = 1 << 0,
    NORMAL = 1 << 2,
    SPE = 1 << 3,
    OTHER = 1 << 4,
    ALL = 1 << 5,
}

 效果:

如果有不对的地方希望能指出来 感激不尽。
另外,不熟悉的代码一定要写一下加深记忆 只用看的记不了太久。 

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

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

相关文章

携手中国联通丨美格智能成为中国联通物联网产业联盟苏州分联盟副理事长单位

2月24日&#xff0c;联通数科物联网2023年巡展活动首场——中国联通物联网生态合作伙伴大会暨中国联通物联网产业联盟苏州分联盟成立仪式在苏州成功举办。本次活动由联通数字科技有限公司、中国联通物联网产业联盟联合主办&#xff0c;江苏省物联网服务协会指导&#xff0c;中国…

MySQL运维篇之日志

01、日志 1.1、错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysqld启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&…

微服务之Nacos注册与配置

&#x1f3e0;个人主页&#xff1a;阿杰的博客 &#x1f4aa;个人简介&#xff1a;大家好&#xff0c;我是阿杰&#xff0c;一个正在努力让自己变得更好的男人&#x1f468; 目前状况&#x1f389;&#xff1a;24届毕业生&#xff0c;奋斗在找实习的路上&#x1f31f; &#x1…

短视频美颜sdk人脸编辑技术详解、美颜sdk代码分析

短视频美颜sdk中人脸编辑技术可以将人像风格进行转变&#xff0c;小编认为这也是未来的美颜sdk的一个重要发展方向&#xff0c;下文小编将为大家讲解一下短视频美颜sdk中人脸编辑的关键点。 一、人脸编辑的细分关键点 1、年龄 通过更改人脸的年龄属性&#xff0c;可用于模仿人…

「TCG 规范解读」TCG 软件栈 TSS (下)

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alliance,TCPA)所开发的规范。现在的规范都不是最终稿,都…

【Redis】Redis线程IO模型与基于文件的网络通信模型(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

Unity 渲染顺序

Unity中的渲染顺序自上而下大致分为三层渲染优先级 Camera depth > Sorting Layer > Order in Layer > RenderQueueCamera depth:越小越优先&#xff08;大的显示在小的前面&#xff09;如图&#xff1a;尽管Sphere距离摄像机较远&#xff0c;但由于Camera_Sphere dep…

Linux 常用 API 函数

文章目录1. 系统调用与库函数1.1 什么是系统调用1.2 系统调用的实现1.3 系统调用和库函数的区别2. 虚拟内存空间3. 错误处理函数4. C 库中 IO 函数工作流程5. 文件描述符6. 常用文件 IO 函数6.1 open 函数6.2 close 函数6.3 write 函数6.4 read 函数6.5 lseek 函数7. 文件操作相…

算法笔记(十六)—— 有序表(红黑树,AVL树,Size-balance树,跳表),一文搞定!

有序表所有的操作都是O(logN)级别&#xff08;红黑树&#xff0c;AVL树&#xff0c;Size-balance树&#xff0c;跳表&#xff09;。 红黑树&#xff0c;AVL树&#xff0c;Size-balance树都属于平衡搜索二叉树&#xff08;BST&#xff09;。 搜索二叉书&#xff08;不保证平衡性…

OSPF -- (开放式最短路径优先协议)(公共协议)

OSPF -- &#xff08;开放式最短路径优先协议&#xff09;&#xff08;公共协议&#xff09; 1、属性&#xff1a;无类别链路状态IGP协议 无类别&#xff1a;更新携带精确掩码 链路状态&#xff1a;共享拓扑&#xff08;共享LSA&#xff09;本地计算路由IGP&#xff1a; 基于…

EasyExcel

文章目录&#x1f68f; EasyExcel&#x1f680; 一、初识EasyExcel&#x1f6ac; 1、Apache POI&#x1f6ad; 1.1 学习使用成本较高&#x1f6ad; 1.2 POI的内存消耗较大&#x1f6ad; 1.3 特点&#x1f6ac; 2、EasyExcel&#x1f6ad; 2.1 重写了POI对07版Excel的解析&#…

Nginx学习整理

Nginx学习第一章 Nginx概述1.1、Nginx概述1.2、Nginx官网1.3、Nginx用处第二章 Nginx单实例安装2.1、环境说明2.2、安装依赖2.3、Nginx下载2.4、Nginx解压2.5、Nginx安装2.6、Nginx命令2.7、开放防火墙2.8、启动后效果第三章 Nginx正向代理、反向代理3.1、概述3.2、反向代理配置…

大数据|Hadoop系统

目录 &#x1f4da;Hadoop介绍 &#x1f4da;Hadoop优点 &#x1f4da;Hadoop的体系结构 &#x1f430;HDFS的体系结构 &#x1f430;MapReduce的体系结构 &#x1f430;HDFS和MapReduce的协同作用 &#x1f4da;Hadoop与分布式开发 &#x1f430;MapReduce计算模型 &a…

【让面试官吃惊的回答:HTTP中GET和POST请求的区别你知道吗?】

一.知识回顾 之前我们一起学习了HTTP1.0、HTTP1.1、HTTP2.0协议之前的区别、以及URL地址栏中输入网址到页面展示的全过程&&DNS域名解析的过程、HTTP协议基本概念以及通信过程、HTTPS基本概念、SSL加密原理、通信过程、中间人攻击问题、HTTP协议和HTTPS协议区别、HTTP协…

Python - Opencv应用实例之CT图像检测边缘和内部缺陷

Python - Opencv应用实例之CT图像检测边缘和内部缺陷 将传统图像处理处理算法应用于CT图像的边缘检测和缺陷检测,想要实现效果如下: 关于图像处理算法,主要涉及的有:灰度、阈值化、边缘或角点等特征提取、灰度相似度变换,主要偏向于一些2D的几何变换、涉及图像矩阵的一些统…

使用ChIPSeeker进行ChIP-seq, ATAC-seq,cuttag等富集峰的基因组注释

二代测序产生的数据类型 常规的下一代高通量测序&#xff08;next generation sequencing, NGS&#xff09;实验通常产生大量短片段(reads)&#xff0c;通常我们需要将这些reads比对到参考基因组/转录组上&#xff0c;即将它们置于生物学上有意义的基因背景下&#xff0c;才能…

《MySql学习》 Select 查询语句慢的非性能原因

一.查询被阻塞 A会话执行 查询操作&#xff0c;长时间没有返回信息,此时我们就可以去排查一下是否是被阻塞了 select * from words 被阻塞的原因有很多&#xff0c;首先列举第一种情况 1.等MDL锁 当我们执行DDL语句时&#xff0c;会自动给表加上MDL写锁。当执行DML和DQL时&…

电压放大器和电流放大器的区别是什么意思

在日常电子实验测试中&#xff0c;很多电子工程师都会使用到电压放大器和电流放大器&#xff0c;但是很多新手工程师却无法区分两者的区别&#xff0c;下面就让安泰电子来为我们讲解电压放大器和电流放大器的区别是什么意思。 一、电压放大器介绍&#xff1a; 电压放大器是一种…

Android系统10 RK3399 init进程启动(四十七) Android init 进程整体代码逻辑简述

配套系列教学视频链接&#xff1a;安卓系列教程之ROM系统开发-百问100ask说明系统&#xff1a;Android10.0设备&#xff1a; FireFly RK3399 &#xff08;ROC-RK3399-PC-PLUS&#xff09;前言本文简单描述一下android init祖先进程启动的基本执行流程&#xff0c;让大家有一个整…

Java基础:爬虫

1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.获取Matc…