Java面试题(每天10题)-------连载(40)

目录

Mysql篇

1、表中有大字段X(例如:text类型),且字段X不会经常更新,将该字段拆成子表好处是什么?

2、Mysql中InnoDB引擎的行锁是通过加载什么上完成的?

3、Mysql中控制内存分配的全局参数,有哪些?

4、若一张表只有一个字段VARCHAR(N)类型,utf8编码,则N的最大值时多少(精确到数量级即可)?

5、 [SELECT *]和[SELECT 全部字段]的2种写法有何优缺点?

6、HAVNG子句和WHERE的异同点?

7、Mysql当记录不存在时insert,当记录存在时update,语句怎么写? 

8、Mysql的insert和update的select语句语法


Mysql篇

1、表中有大字段X(例如:text类型),且字段X不会经常更新,将该字段拆成子表好处是什么?

如果字段里面有大字段( text,blob) 类型的,而且这些字段的访问并不多,这时候放在一起就变成缺点了。 MYSQL 数据库的记录存储是按行存储的,数据块大小又是固定的(16K ),每条记录越小,相同的块存储的记录就越多。此时应该把大字段拆走,这样应付大部分小字段的查询时,就能提高效率。当需要查询大字段时,此时的关联查询是不可避免的,但也是值得的。拆分开后,对字段的 UPDAE 就要 UPDATE 多个表了

2、Mysql中InnoDB引擎的行锁是通过加载什么上完成的?

InnoDB 行锁是通过给索引上的索引项加锁来实现的,这一点 MySQL 与Oracle 不同,后者是通过在数据块中对相应数据行加锁来实现的。 InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁!

3、Mysql中控制内存分配的全局参数,有哪些?

  1. Keybuffersize
    > * keybuffersize 指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Keyreadrequests Keyreads,可以知道 keybuffersize 设置是否合理。比例 keyreads /keyreadrequests 应该尽可能的低,至少是1:100,1:1000 更好(上述状态值可以使用 SHOW STATUS LIKE ‘keyread%'获得)。
    > * keybuffersize 只对 MyISAM 表起作用。即使你不使用 MyISAM 表,但是内部的临时磁盘表是 MyISAM 表,也要使用该值。可以使用检查状态值 createdtmpdisktables 得知详情。对于 1G 内存的机器,如果不使用 MyISAM 表,推荐值是 16M(8-64M) > * keybuffersize 设置注意事项:
    >>>1. 单个 keybuffer 的大小不能超过 4G,如果设置超过 4G,就有可能遇到下面 3 个bug: >>>>> http://bugs.mysql.com/bug.php?id=29446  
    >>>>> http://bugs.mysql.com/bug.php?id=29419
    >>>>> http://bugs.mysql.com/bug.php?id=5731
    >>>2. 建议
    keybuffer 设置为物理内存的 1/4(针对 MyISAM 引擎),甚至是物理内存的30%~40%,如果 keybuffersize 设置太大,系统就会频繁的换页,降低系统性能。因为 MySQL 使用操作系统的缓存来缓存数据,所以我们得为系统留够足够的内存;在很多情况下数据要比索引大得多。
    >>>3.
    如果机器性能优越,可以设置多个keybuffer,分别让不同的 keybuffer 来缓存专门的索引
  2. i nnodbbufferpool_size > 表示缓冲池字节大小,InnoDB 缓存表和索引数据的内存区域。mysql 默认的值是 128M。最大值与你的CPU 体系结构有关,在 32 位操作系统,最大值是 4294967295(2^32-1) ,在 64 位操作系统,最大值为18446744073709551615 (2^64-1)。
    > 32 位操作系统中,CPU 和操作系统实用的最大大小低于设置的最大值。如果设定的缓冲池的大小大于 1G,设置 innodbbufferpoolinstances 的值大于 1。
     > *
    数据读写在内存中非常快, innodbbufferpoolsize 减少了对磁盘的读写。 当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中。然而内存还有操作系统或数据库其他进程使用, 一般设置 buffer pool 大小为总内存的 3/4 4/5。 若设置不当, 内存使用可能浪费或者使用过多。 对于繁忙的服务器, buffer pool 将划分为多个实例以提高系统并发性, 减少线程间读写缓存的争用。buffer pool 的大小首先受 innodbbufferpool_instances 影响, 当然影响较小。
  3. querycachesize > mysql 接收到一条 select 类型的 query时,mysql 会对这条 query 进行 hash 计算而得到一个 hash 值,然后通过该 hash 值到 query cache 中去匹配,如果没有匹配中,则将这个hash 值存放在一个 hash 链表中,同时将 query 的结果集存放进cache 中,存放 hash 值的链表的每一个 hash 节点存放了相应 query结果集在 cache 中的地址,以及该 query 所涉及到的一些 table 的相关信息;如果通过 hash 值匹配到了一样的 query,则直接将 cache 中相应的 query 结果集返回给客户端。如果 mysql 任何一个表中的任何一条数据发生了变化,便会通知 query cache 需要与该 table 相关的query 的 cache 全部失效,并释放占用的内存地址。
    > query cache优缺点
    >> 1. query
    语句的 hash 计算和 hash 查找带来的资源消耗。mysql 会对每条接收到的 select 类型的 query 进行 hash 计算然后查找该 query cache 是否存在,虽然 hash 计算和查找的效率已经足够高了,一条 query 所带来的消耗可以忽略,但一旦涉及到高并发,有成千上万条 query 时,hash 计算和查找所带来的开销就的重视了;
    >> 2. query cache 的失效问题。如果表变更比较频繁,则会造
    成 query cache 的失效率非常高。表变更不仅仅指表中的数据发生变化,还包括结构或者索引的任何变化;
    >> 3.
    对于不同 sql 但同一结果集的 query 都会被缓存,这样便会造成内存资源的过渡消耗。sql 的字符大小写、空格或者注释的不同,缓存都是认为是不同的 sql(因为他们的 hash 值会不同);
    >> 4. 相关参数设置不合理会造成大量内
    存碎片,相关的参数设置会稍后介绍。
  4. readbuffersize >是 MySQL 读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL 会为它分配一段内存缓冲区。readbuffersize 变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以 及内存缓冲区大小提高其性能 。    

4、若一张表只有一个字段VARCHAR(N)类型,utf8编码,则N的最大值时多少(精确到数量级即可)?

由于 utf8 的每个字符最多占用 3 个字节。而 MySQL 定义行的长度不能超过65535,因此 N 的最大值计算方法为: (65535-1-2)/3 。减去 1 的原因是实际存储从第二个字节开始,减去 2 的原因是因为要在列表长度存储实际的字符长度,除以 3 是因为 utf8 限制:每个字符最多占用 3 个字节。

5、 [SELECT *]和[SELECT 全部字段]的2种写法有何优缺点?

  1. 前者要解析数据字典,后者不需要
  2. 结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。
  3. 表字段改名,前者不需要修改,后者需要改
  4. 后者可以建立索引进行优化,前者无法优化
  5. 后者的可读性比前者要高

6、HAVNG子句和WHERE的异同点?

  1. 语法上:where 用表中列名,having select 结果别名。
  2. 影响结果范围:where 从表读出数据的行数,having 返回客户端的行数。
  3. 索引:where 可以使用索引,having 不能使用索引,只能在临时结果集操作。
  4. where 后面不能使用聚集函数,having 是专门使用聚集函数的。

7、Mysql当记录不存在时insert,当记录存在时update,语句怎么写? 

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

8、Mysql的insert和update的select语句语法

`SQL insert into student (stuid,stuname,deptid) select 10,'xzm',3 from student where stuid > 8; update student a inner join student b on b.stuID=10 set a.stuname=concat(b.stuname, b.stuID) where a.stuID=10 ; `

*Mysql的全部更新完了 

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

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

相关文章

功能需求与程序的关系

确定程序的输入和输出:根据功能需求,确定程序的输入数据和输出结果。这有助于我们明确程序的功能和实现方式。设计程序的算法和逻辑:根据功能需求,设计程序的算法和逻辑。这包括确定程序的数据结构、流程控制和算法实现等方面。划…

使用GDBdeug调试QNX程序

使用GDBdeug调试QNX程序 远程调试 启动GDB,比如我的host是x86_64平台,因此: ./qnx/qos223/host/linux/x86_64/usr/bin/x86_64-pc-nto-qnx7.1.0-gdb 连接远程设备,比如雷达: target qnx 172.168.1.10:8000 设置远程工…

​ 华大基因发布《2023年全球地中海贫血认知现状报告》

在地中海沿岸地区、非洲、中东、东南亚和中国南部,一种名为地中海贫血(以下简称“地贫”)的遗传性血红蛋白疾病十分高发,已成为严重危害公共健康和社会稳定的重大问题。近日,华大基因发布《2023年全球地中海贫血认知现…

鸿蒙系统扫盲(四):鸿蒙使用的是微内核?

我们常说,看一个系统是不是自研,就看它的内核,常见的内核分为:宏内核和微内核,当然还有两者结合体,他们到底有什么区别? 1.白话宏内核和微内核 有一天,你结婚了,你和你…

微机原理9

一、单项选择题(本大题共15小题,每小题3分、共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 8088 系统的内存最大容量为 16MB. 其地址总线为() A. 16 位 B. 20 位 C. 24 位 D. 32 位 2,以CPU为核心…

Java题4:关于java的选择题简答题及答案

题目1:Java中的基本数据类型不包括以下哪种类型? A. double B. string C. char D. boolean 答案:B. string 题目2:以下哪个关键字用于定义一个类? A. class B. interface C. extends D. implements 答案:A…

2023年12月4日:多继承

代码 #include <iostream>using namespace std;class Sofa { private:string sit;int *len; public:Sofa(){cout << "Sofa::无参构造函数" << endl;}Sofa(string sit,int len):sit(sit),len(new int(len)){cout << "Sofa::有参构造函数…

Flutter 开发入门文章汇总

官网文档很详细&#xff0c;搭建环境和学习组件基本可以参考 官网文档 上拉加载和下拉刷新 Flutter 上拉加载和下拉刷新 - 掘金 gradle flutter配置gradle&#xff08;个人笔记&#xff0c;非教程&#xff09;_flutter gradle_追寻着星星的方向的博客-CSDN博客 gradle下载…

【uni-app】赋予你的APP(Android原生)小程序开发能力

采用DCloud(数字天堂&#xff08;北京&#xff09;网络技术有限公司)的uniMPsdk(uni小程序SDK)&#xff0c;是为原生App打造的可运行基于 uni-app 开发的小程序前端项目的框架&#xff0c;从而帮助原生App快速获取小程序的能力。 uni-app文档地址(小程序开发人员开发用) uniMP…

全网最新最全的自动化测试教程:python+pytest接口自动化(9)-cookie绕过登录(保持登录状态

在编写接口自动化测试用例或其他脚本的过程中&#xff0c;经常会遇到需要绕过用户名/密码或验证码登录&#xff0c;去请求接口的情况&#xff0c;一是因为有时验证码会比较复杂&#xff0c;比如有些图形验证码&#xff0c;难以通过接口的方式去处理&#xff1b;再者&#xff0c…

Day39| Leetcode 62. 不同路径 Leetcode 63. 不同路径 II

补 Leetcode 62. 不同路径 题目链接 62 不同路径 dfs题不多说了&#xff0c;dp也可以做。 class Solution { public:int uniquePaths(int m, int n) {int dp[109][109];//vector<vector<int>> dp(m, vector<int>(n, 0));for(int i0;i<m;i){dp[i][0] …

java连接池 理解及解释(DBCP、druid、c3p0、HikariCP)

一、在Java开发中&#xff0c;有许多常见的数据库连接池可供选择。以下是一些常见的Java数据库连接池&#xff1a;不使用数据库连接池的特性&#xff1a; 优点&#xff1a;实现简单 缺点&#xff1a;网络 IO 较多数据库的负载较高响应时间较长及 QPS 较低应用频繁的创建连接和关…

学习pytorch17 pytorch模型保存及加载

pytorch模型保存及加载 代码 import torch import torchvisionvgg16 torchvision.models.vgg16(pretrainedFalse)# 1. save model 1 保存模型结构及模型参数 torch.save(vgg16, ./vgg16_save1.model)# 2. save model 2 只保存模型参数 比第一种保存方法保存的文件要小 t…

企业架构LB-服务器的负载均衡之LVS实现

企业架构LB-服务器的负载均衡之LVS实现 学习目标和内容 1、能够了解LVS的基本工作方式 2、能够安装配置LVS实现负载均衡 3、能够了解LVS-NAT的配置方式 4、能够了解LVS-DR的配置方式 #一、LVS介绍和安装 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&…

【bug排查解决】现象级延迟8-10s

业务背景 最近公司在做物联网相关的项目&#xff0c;调试过程中发现好玩的bug。 首先一个数据采集场景&#xff0c;plc采集数据全链路&#xff1a; kepServer&#xff08;kepserver IOT gateway&#xff09; -> emqx &#xff08;查看日志&#xff09;-> iot服务 -> 业…

Vue项目目录结构

项目结构 目录说明.vscodeVSCode工具的配置文件node_modulesVue项目的运行依赖文件public资源文件夹&#xff08;浏览器图标&#xff09;src源码文件夹.gitignore配置git忽略文件index.html入口HTML文件package-lock.json信息描述文件&#xff08;所有模块&#xff09;package…

分布式追踪

目录 文章目录 目录自定义指标1.删除标签2.添加指标3.禁用指标 分布式追踪上下文传递Jaeger 关于我最后最后 自定义指标 除了 Istio 自带的指标外&#xff0c;我们还可以自定义指标&#xff0c;要自定指标需要用到 Istio 提供的 Telemetry API&#xff0c;该 API 能够灵活地配…

飞致云1panel + 雷池WAF

可能有许多人都有这个需求&#xff1a;为自己的个人站点套上WAF&#xff0c;增加安全性&#xff0c;本文将介绍如何将1panel面板深度结合长亭雷池防火墙&#xff0c;实现为个人站点套上WAF并且自动续签ssl证书。 前提条件&#xff1a; 服务器IP已绑定域名 完整的1panel环境 …

软考初级、中级、高级怎么选?

本年度的PMP考试已经结束啦&#xff0c;对于刚考完的威宝和已经通过考试的威班们来说&#xff0c;刚开始接触PMP认证的时候在科普阶段有看到过“软考”的字眼。什么是软考&#xff0c;它主要考什么&#xff1f;通常用于哪些方面&#xff1f;软考又和PMP有什么关系&#xff1f;如…

Shutdown Signal: channel error; protocol method: #method<channel.close>

完整异常信息&#xff1a; Shutdown Signal: channel error; protocol method: #method<channel.close>(reply-code404, reply-textNOT_FOUND - no exchange fanoutExchange in vhost /, class-id60, method-id40) 意思是找不到名字是 fanoutExchange 的虚拟机 就是虚拟机…