3.java高级之GUI编程

news2024/11/29 11:43:18

1.gui (graphical user interface)

   awt sun公司最早的gui,不美观,不兼容各平台
   swing : awt升级

2.顶层容器(只有一个)(其他的只能放这里)Jframe Jdialog对话框 Jwindow(x)

   //在main方法写
   f=new Jframe();  
   f.setSize(300,300); //设置大小
   f.setTitle("hello");  //设置窗口标题
   f.setLocation(500,200);//设置在屏幕的位置,默认在左上角
   f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置点击关闭按钮,关闭程序,不用设置也可以(默认)
   f.setVisible(true); //可见,但是看不到,要设置大小
    class Jframe extends JFrame{
          JButton b1,b2,b3;
          JPannel p;
          public MyFrame(){//放在构造方法里面
               //上面的代码改 
              
                b1= new JButton("aaa");    
                   // this.add(b1);//窗口添加按钮,不显示,覆盖了  
                  //this.add(b1);//覆盖了   
	p=new Panel(new FlowLayout( FlowLayout.LEFT,10,15));//左对齐,组件内部的对齐方式左 顶部距离
                                                 //可以自己new 出来定义
               p.add(b1);
               p.add(b2); 
              this.add(p);                  
          }
}//main方法new出来

-----完整代码-----

public class testMyFrame {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame();
    }
}

class MyFrame extends JFrame{
    JPanel jPanel;
    JButton jb,jb2;
    MyFrame(){
        setTitle("标题");
        setLocation(200,200);
        setBounds(200,200,300,500);

        jPanel=new JPanel();
        jb=new JButton("按钮1");
        jb2=new JButton("按钮2");
        jPanel.add(jb);
        jPanel.add(jb2);
        jPanel.setSize(300,300);

        add(jPanel);
        //记得最后一步才设置,不然不显示
        setVisible(true);

    }

}

2.JPanel中间容器(不能独立存在,放在其他容器中)

3.布局方式
panel.setLayOut(xxx);
1.FlowLayout 流布局,从左到右 从上到下(默认布局,默认中间.可以设置对齐方式)
2.BorderLayout 边界布局 容器分为 东西南北中

             ------------------
						北
               东       中        西 
                        南
             -------------------                   
 p=new Panel(new BorderLayout(10,15));//东西南北之间的间距      
 //button放的位置,自己可以添加pannel
p.add(btn1, BorderLayoutEAST);//没人放中间; WEST SOUTH NORTH CENTER
     3.GridLayout网格布局 格子多大界面有多大(弹性)
private JButton[] btns;
              p=new Panel(new GridLayout(3,3));//3行3列 只能行等于列,不然只显示1列 
                 btns=new JButton[6];
                for:
                       p.add(btns[i]);              

--------完整代码-----

public class testMyFrame {
    public static void main(String[] args) {
        MyFrame myFrame = new MyFrame();
    }
}

class MyFrame extends JFrame{
    JPanel jPanel;
    JButton jb,jb2,jb3,jb4;
    MyFrame(){
        setTitle("标题");
        setLocation(200,200);
        setBounds(200,200,300,500);

        jPanel=new JPanel(new GridLayout(2,1));
        jPanel.setBackground(Color.RED);
        jPanel.setSize(300, 300);

        jb=new JButton("按钮1");
        jb2=new JButton("按钮2");
        jPanel.add(jb);
        jPanel.add(jb2);



        jPanel.setSize(300,300);

        add(jPanel);
        //记得最后一步才设置,不然不显示
        setVisible(true);

    }

}
     4.卡片布局(用得少)(像扑克牌一样显示)
 JPanel panel;
Frame2(){
    super("第3题习题");
    this.setSize(400,350);
    this.setLocation(300,200);

    panel = new JPanel();
    JButton jb1 = new JButton("按钮1");
    JButton jb2 = new JButton("按钮2");
    JButton jb3 = new JButton("按钮3");
    JButton jb4 = new JButton("按钮4");
    JButton jb5 = new JButton("按钮5");
    CardLayout cardLayout = new CardLayout();


    panel.setLayout(cardLayout);
    panel.add(jb1);
    panel.add(jb2);
    panel.add(jb3);
    panel.add(jb4);
    panel.add(jb5);



   //是在布局后的pannel后的,前面是完整放入的组件中first和last
    cardLayout.last(panel);
    this.add(panel);
     5.BoxLayout盒布局(按照x轴或y轴排放元素)
p=new Panel(new .BoxLayout(p,));//垂直摆放 X相反
        public class houseWork3BoxGui {
    public static void main(String[] args) {
        Frame4 frame = new Frame4();


        frame.setVisible(true);

    }
}
class Frame4 extends JFrame {
    JPanel panel;
    Frame4(){
        super("第3题习题");
        this.setSize(400,350);
        this.setLocation(300,200);

        panel = new JPanel();
        JButton jb1 = new JButton("按钮1");
        JButton jb2 = new JButton("按钮2");
        JButton jb3 = new JButton("按钮3");
        JButton jb4 = new JButton("按钮4");
        JButton jb5 = new JButton("按钮5");
        BoxLayout boxLayout = new BoxLayout(panel,BoxLayout.Y_AXIS);
        panel.setLayout(boxLayout);
        Insets insets = new Insets(0,100,0,0);
        panel.add(jb1);
        panel.add(jb2);
        panel.add(jb3);
        panel.add(jb4);
        panel.add(jb5);






        this.add(panel);


    }

}

在这里插入图片描述

     6.空布局(全部原始宽高置空,直接自己设置位置);   (考试还是使用这个比较方便)             
    //设置空布局
    setLayOut(null);
   //全部组件有个方法setBounds(0,0,200,200);//记得设置为初始位置,不然看不到
  //精确设置xy和大小,         
         #解决文本框不能设置大小的问题
         
            passwordField.setColumns(20);

3.事件(重点)(发生动作)

事件源(发生的场所,地方,按钮)
事件处理 对发生事件进行处理
事件监听器(接口) event Listener
监听事件发生

1.点击事件改颜色例子

  1. 高级监听事件有对应的方法等待实现,包括了按钮列表菜单
    ActionEvent------ActionListenner
  2. 低级事件…
    MouseEvent—MouseListenner
//写个监听类
    class Listenner impls ActionListenner:  //鼠标MouseListenner
        actionPerformed(e)://处理事件函数
                     Object obj=(JButton)e.getSource();//得到事件源(得到这个btn)
                     if(btn==btnRed){//内部类所以可以对比对象,!!!向btn靠拢
                                p.setBackground(Color.red); //pannel
                      }else if(){xxxx}
                        
//组件添加我们的监听器监听器(注册监听器)
 Listsener l=new Listsener();       
 btnRed.addActionListener(l);    
 btnGreen.addActionListener(l);   
使用匿名内部类(推荐)
             btnRed.addActionListener(new ActionListener(){
                          xxx(){

                            }
     });

5.适配器实现了方法(可以少写实现的方法) extends xxAdapter直接覆盖
(但是进行了细化)

   extends MouseMotionAdapter//只有拖动
              this.repaint();//jframe的方法触发 重写的paint方法
              this.p.repaint();//相当于清除
               g.drawLine(prex,prey,x,y);
                //Btn1左 2中 3右

6.其他常用高级组件
//设置图片icon

   Toolkit t = Toolkit.getDefaultToolkit();
        //设置Icon
        Image i = t.getImage("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif");// 相对.java的路径 image:\\time.png
        this.setIconImage(i);//设置大容器的左上角图标
        
  //在组件画图片,JFrame覆盖方法
     public void paint(Graphics g){
      d.drawImage(icon.getImage(),50,50,this);//当前对象
    }             
     //在按钮添加图标
     new JButton("aaa",icon);
      //在jpanel不能设置

7.JLabel(不能响应用户操作)(不能时间监听)(可以类extends)

   new JLabel("text",icon,xx); //只是提示功能

8.文本组件(必须setColume不然不显示)

   JTextField//接收单行文本,指定输入字符长度
   JpasswordField//密码框可以设置 可以遮挡的字符
   JTextArea //长文本 多行

-----高级组件------
9.对话框(可以独立存在的顶级容器)

1.模式(只有关闭按钮,对焦我们这个,点不了父窗口)有套路

jd=new JDialog(this,"提示", Dialog.ModalityType.APPLICATION_MODAL);

2.非模式(可以点父窗口)

  jd=new JDialog(this,"提示", Dialog.ModalityType.MODELESS);
  new JDialog(Frame owner,title,Model);//指定父类窗体,标题,是否模式,默认非模式(不用!!!,只能指定Frame父类)
               .setVisible(true);//可见

3.自定义 trim去首尾空格
extends JDialog
//标准对话框(显示消息和获取消息) 确认消息,显示消息bti !!!(推荐使用,无论是是容器就可以用)

  JOptionPane jOptionPane = new JOptionPane();
                jOptionPane.showMessageDialog(jp,"登录成功","提示",JOptionPane.ERROR_MESSAGE);
第一个可以null,消息内容,标题,自带的图标

//输入对话框

JOptionPane.showInputDialog(null,"输入数字");

在这里插入图片描述

//确认框

 .showConfirmDialog(null,"msg","title",JOptionPane.YES_NO_OPTION);//自己可以选择
  int res = jOptionPane.showConfirmDialog(jp, "是否要保存");

//选择对话框

在这里插入图片描述

//
      JOptionPane jOptionPane = new JOptionPane();
      String options[]={"方案1","方案2","方案3"};
                  

//      int res = jOptionPane.showConfirmDialog(jp, "是否要保存");

                    jOptionPane.showOptionDialog(jp, "选择一个方案:",

                            "方案", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,

                            options, "方案1");

//文件对话框

   JFileChooser fc=    new JFileChooser();
        int val=fc.showOpenDialog(this);//打开对话框
        //如果点击对话框的打开按钮
        String name1 ="";
        String path="";
        if(val==JFileChooser.APPROVE_OPTION){
            //得文件名和路径
            name1=fc.getSelectedFile().getName();
            path= fc.getCurrentDirectory().toString();
        }

        FileReader d=new FileReader(path+"\\"+name1);

        //保存文件对话框
        fc.showSaveDialog(this);

10.带滚动条的面板(文本放不下)

new JScrollPane("文本");

11.颜色对话框

JColorChooser ch=new JColorChooser();
JDialog jDialog = new JDialog();
jDialog=JColorChooser.createDialog(this, "title", true, new JColorChooser(), new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {

    }
}, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {

    }
});
jDialog.setVisible(true);
Color color = ch.getColor();//得到颜色
System.out.println(color);//rgb的值

12.菜单栏(菜单[菜单项])

JMenuBar menuBar=   new JMenuBar();
this.setJMenuBar(menuBar);//放jframe的顶部
// 有监听器,是否分离式菜单
JMenu menu =new JMenu("title",true);
menuBar.add(menu);
JMenuItem item=new  JMenuItem("aaa");
JMenuItem item1=new  JMenuItem("bbb");
menu.add(item);

menu.add(item1);
menu.addSeparator();//组件之间加分割线
 item.addActionListener(new ActionListener() {
     @Override
     public void actionPerformed(ActionEvent e) {
         System.out.println("点击了");
     }
 });

13.工具栏 JToolBar(对比,不是只是放文字)

JToolBar bar=new JToolBar();

JButton btn =new JButton("save", new ImageIcon("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif"));//设置标题和icon
btn.setToolTipText("保存");//鼠标放上的提示信息
bar.add(btn);
jp.add(bar);//放容器顶部

14.空布局的完整登录demo(包括了大部分上面提到的组件)

public class nullLayOut {
    public static void main(String[] args) throws FileNotFoundException {
        MyLayout myLayout = new MyLayout();
        myLayout.setVisible(true);
    }
}

class MyLayout extends JFrame {
    JPanel jp,jp2,jp3,jp4;
    JButton jb;
    JDialog jd;
    JLabel name_lable,pwd_lable,alter_lable;
    JTextField name;
    JPasswordField passwordField;

    JDialog jdl;
    MyLayout() throws FileNotFoundException {
        setTitle("登录");
        setBounds(100,200,500,500);
        setLayout(null);
        Toolkit t = Toolkit.getDefaultToolkit();
        //设置Icon
        Image i = t.getImage("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif");
        this.setIconImage(i);



        jp=new JPanel();
        jp.setBounds(0,0,500,100);
        
        jd=new JDialog(this,"提示", Dialog.ModalityType.MODELESS);

//        jp.setBackground(Color.BLACK);
        jp2=new JPanel();
        jp2.setBounds(0,100,500,100);
//        jp2.setBackground(Color.RED);
        jp3=new JPanel();
        jp3.setBounds(0,200,500,100);
//        jp3.setBackground(Color.RED);
        jp4=new JPanel();
        jp4.setBounds(0,300,500,100);
//        jp4.setBackground(Color.RED);

        name_lable=new JLabel("用户名:");
        pwd_lable=new JLabel("密码:");
        alter_lable=new JLabel("提示");

        name=new JTextField();
        name.setColumns(20);
        name.setBounds(0,0,500,200);

        passwordField=new JPasswordField();

        name.setBounds(0,0,500,200);
        passwordField.setColumns(20);
        jb=new JButton("登录");
        jb.setIcon(new ImageIcon("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif"));

        jb.addMouseListener(new MouseListener() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("鼠标点");
            }

            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println("鼠标按");
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                System.out.println("鼠标释放");
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                System.out.println("鼠标进入");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                System.out.println("鼠标离开");
            }
        });
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JButton jb=(JButton)e.getSource();
                if(jb.getText().equals("登录")){
                    System.out.println("设置背景");
                    jb.setBackground(Color.RED);
                }

                if(passwordField.getText().equals("aaa")&& name.getText().equals("user")){
                    jd.setBounds(0,0,100,100);
                    jd.setVisible(true);
                    JOptionPane jOptionPane = new JOptionPane();

//                    jOptionPane.showMessageDialog(jp,"message","提示",JOptionPane.ERROR_MESSAGE);
                    String options[]={"方案1","方案2","方案3"};
                    jOptionPane.showInputDialog(jp,"输入数字");

//                    int res = jOptionPane.showConfirmDialog(jp, "是否要保存");

                    jOptionPane.showOptionDialog(jp, "选择一个方案:",

                            "方案", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null,

                            options, "方案1");

//                    System.out.println(res);
                    alter_lable.setText("登录成功");
                    System.out.println("成功");
                }else{
                    alter_lable.setText("登录失败");
                    System.out.println("失败");
                }
            }
        });
        //======文件选择器=======
//        JFileChooser fc=    new JFileChooser();
//        int val=fc.showOpenDialog(this);//打开对话框
//        //如果点击对话框的打开按钮
//        String name1 ="";
//        String path="";
//        if(val==JFileChooser.APPROVE_OPTION){
//            //得文件名和路径
//            name1=fc.getSelectedFile().getName();
//            path= fc.getCurrentDirectory().toString();
//        }
//
//        FileReader d=new FileReader(path+"\\"+name1);

//        //保存文件对话框
//        fc.showSaveDialog(this);
        //======文件选择器=======


        //===========菜单栏================
        JMenuBar menuBar=   new JMenuBar();
        this.setJMenuBar(menuBar);//放jframe的顶部
        // 有监听器,是否分离式菜单
        JMenu menu =new JMenu("title",true);
        menuBar.add(menu);
        JMenuItem item=new  JMenuItem("aaa");
        JMenuItem item1=new  JMenuItem("bbb");
        menu.add(item);

        menu.add(item1);
        menu.addSeparator();//组件之间加分割线
         item.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
                 System.out.println("点击了");
             }
         });
        //===========菜单栏================

        //===========工具栏================
        JToolBar bar=new JToolBar();

        JButton btn =new JButton("save", new ImageIcon("c:\\adbfe8e3432cc45860d2bdbf5f4bd407.gif"));//设置标题和icon
        btn.setToolTipText("保存");//鼠标放上的提示信息
        bar.add(btn);
        jp.add(bar);//放容器顶部
        //===========工具栏================



        //======颜色选择器=======
        JColorChooser ch=new JColorChooser();
        JDialog jDialog = new JDialog();
        jDialog=JColorChooser.createDialog(this, "title", true, new JColorChooser(), new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        }, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });
        jDialog.setVisible(true);
        Color color = ch.getColor();//得到颜色
        System.out.println(color);//rgb的值
     //======颜色选择器=======

        jp.add(name_lable);
        jp.add(name);
        jp2.add(pwd_lable);
        jp2.add(passwordField);
        jp3.add(jb);
        jp4.add(alter_lable);








        add(jp);
        add(jp2);
        add(jp3);
        add(jp4);


    }

}

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

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

相关文章

java条件语句

文章目录 一、java条件语句1、Java 条件语句 - if...else2、Java switch case 语句 总结 一、java条件语句 1、Java 条件语句 - if…else Java 中的条件语句允许程序根据条件的不同执行不同的代码块。 一个 if 语句包含一个布尔表达式和一条或多条语句。 语法 if 语句的语法…

你真的了解kotlin中协程的suspendCoroutine原理吗?

文章目录 什么是协程suspendCoroutineUninterceptedOrReturnsuspendCoroutineUninterceptedOrReturn存在的问题suspendCoroutinesuspendCancellableCoroutine ​ 引言: 在Kotlin协程中,如何让一个suspned 函数挂起?如何让挂起协程恢复&#…

STM32G4 比较器COMPx(寄存器开发)

目录 1. 特性1.1 框图1.2 比较器输入信号SEL1.3 比较器滞回选择HYST1.4 比较器的输出1.5 LOCK机制 2. 编程2.1 初始化步骤2.2 举例 STM内部的比较器是模拟量的比较器,其与APB2时钟同步,在RCC时钟控制器中没有COMx时钟使能标志位,其时钟的使能…

前端自学要多久?自学前端一般多久可以找到差不多的工作?

好程序员今天给各位同学分享自学前端的高效率路径,最快4个月,平均6个月! 一、html, CSS (1月) 1.基本语法, 2.做2-3个项目实战 3.刷面试题 二、JavaScript (1.5月) 1.基本语法 2.实际案例练习融合HTML, Css项目实战 3.刷题面试题 三、Vue/Rea…

Java 高级应用-多线程-(三)实现 Callable 接口与使用线程池创建线程

实现 Callable 接口 • 与使用 Runnable 相比, Callable 功能更强大些 – 相比 run()方法,可以有返回值 – 方法可以抛出异常 – 支持泛型的返回值(需要借助 FutureTask 类,获取返回结果) • Future 接口(…

游戏研发项目管理

基于阶段模式进行游戏新产品研发过程,以及基于这种研发过程Leangoo 领歌提供的项目模板。 二、游戏产品开发流程 通常开发一款新游戏大体上会按照如下流程来进行: 1) 概念阶段 – Concept 主策根据产品创意,确定游戏策划草案&a…

C++中的内存空间管理详解【C++】

文章目录 C/C内存分布C语言中动态内存管理方式:malloc/calloc/realloc/freeC内存管理方式new/delete操作内置类型new和delete操作自定义类型 operator new与operator delete函数重载operator new与operator deletenew和delete的实现原理内置类型自定义类型 定位new表…

使用tomcat可能遇到的问题

问题一:窗口一闪而过 如果双击startup.bat,启动tomcat,命令窗口一闪而过;或者用命令窗口执行startup.bat命令,未能启动tomcat,而是提示下面的文字; 说明可能是java的环境变量配置错误&#xf…

让ChatGPT谈谈科技发展

ChatGPT谈科技发展 讲讲科技发展的那些事儿谈谈ChatGPT对科技发展的影响谈谈你对ChatGPT的看法ChatGPT对科技发展的负面影响ChatGPT的存在是利是弊?关于全国科技者工作日 讲讲科技发展的那些事儿 谈谈ChatGPT对科技发展的影响 谈谈你对ChatGPT的看法 ChatGPT对科技发…

pdf怎么合并成一个文件?高效工具分享

PDF是一种非常常用的文档格式,许多人经常需要合并多个PDF文件为一个文件。这是因为有时候我们需要将多个PDF文件打包成一个文件,以便于共享或归档。在本文中,我们将介绍如何使用电脑或手机合并PDF文件。 以下是常见的合并PDF的软件&#xff1…

以太坊Layer 2即将爆发!加密巨头入场布局,或将迎来“百链大战”!

眼下,以太坊Layer 2发展势头强劲。在数十条Rollup Layer 2异彩纷呈之际,Coinbase、ConsenSys等加密巨头也开始下场参与竞争,部署原生Layer 2网络。 截至2022年底,Layer 2解决方案的日均交易数在持续增加,甚至超过了以太…

牛客网语法篇刷题(C语言) — 基本类型

🤩本文作者:大家好,我是paperjie,感谢你阅读本文,欢迎一建三连哦。 🥰内容专栏:这里是《C语言—语法篇》专栏,笔者用重金(时间和精力)打造,基础知识一网打尽,…

如何制作插件使用案例?

UE5 插件开发指南 前言0 示例角色蓝图1测试关卡2 扩展物品数据3 小结前言 作为一款插件,我们一定想要开发者拿到之后立即知道如何使用,所以我们需要制作插件使用案例,最好搭配相应的文档教会插件的使用者如何使用插件,如何对插件的功能进行扩展。为了达到这样的目标,我们…

TOPSIS(优劣解距离法)【附Python实现代码及可视化代码】

目录 一、指标正向化 1.极小型指标->极大型指标 2.中间型指标->极大型指标 3.区间型指标->极大型指标 二、标准化处理 三、计算得分并归一化(不带权重) 四、计算得分并归一化(带权重) 熵权法 1)判断输入的矩阵是否存在负数 2)计算第j…

通过 Wacom 的 Project Mercury 提高远程办公效率

过去几年中,我们的工作方式发生了翻天覆地的变化。疫情加快了对远程办公和协作的采纳,导致人们更加依赖技术来联系团队和提高工作效率。 但是,那些依靠专门硬件和软件来完成工作的创作者呢?艺术家、设计师和开发人员需要使用专门…

34 KVM管理设备-管理虚拟磁盘

文章目录 34 KVM管理设备-管理虚拟磁盘34.1 概述34.2 操作步骤 34 KVM管理设备-管理虚拟磁盘 34.1 概述 虚拟磁盘类型主要包含virtio-blk、virtio-scsi、vhost-scsi等。virtio-blk模拟的是一种block设备,virtio-scsi和vhost-scsi模拟的是一种scsi设备。 virtio-b…

window部署redis集群

1.下载Redis-x64-3.2.100.zip 下载网址:https://github.com/microsoftarchive/redis 百度网盘下载:百度网盘 请输入提取码 提取码:j2js redis版本一定要大于3.0,原因:windows暂不支持redis-cli创建集群,…

TPP0100泰克无源电压探头

tektronix泰克TPP0100 和 TPP0101无源电压探头是输入电阻为 10 M? 的 100 MHz、10X 无源电压探头。这些探头是和 1 MΩ/13 pF (TPP0100) 和 1 MΩ/20 pF (TPP0101) 输入的 BNC示波器搭配 使用。 tektronix泰克TPP0100无源电压探头特点 带宽 直流至 100 M…

Day5 统计回文、连续最大和

✨个人主页: 北 海 🎉所属专栏: C/C相关题解 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 选择题1.C指针/链表/结构 编程题1.统计回文2.连续最大和 选择题 1.C指针/链表/结构 题目:下面两个结…

MySQL 性能调优及生产实战篇终版

前言为什么会查询慢?优化数据访问查询数据低效原因是否请求了不需要的数据 优化执行过程查询缓存查询优化处理语法解析器查询优化器优化器的优化策略优化器的优化类型关联查询排序优化 大数据量查询优化优化 COUNT 查询优化关联查询优化子查询优化 LIMIT 分页优化 u…