php经典2

x33g5p2x  于2022-03-15 转载在 其他  
字(13.8k)|赞(0)|评价(0)|浏览(411)

1.什么是引用变量?在php中用什么符号定义引用变量
答题技巧:
1.php的引用变量的概念及定义方式
2.延伸:php引用变量的原理

  1. 概念:在php中应用意味着用不同的名字访问同一个变量
  2. 其他:[其他](https://blog.csdn.net/xmwh19996/article/details/89642431)

二,会话控制技术
1.简述cookie和session的区别以及各自的工作机制,存储位置等,简述cookie的优缺点
考点:会话控制技术
会话控制技术的思想是:允许服务器跟踪同一个客户端做出的连续请求。(即之前做过登录,下一次再进行请求的时候,就会知道之前已经登录过,不需要再登录,这一可以保持用户的状态,从而完成登录状态的保持。)

  1. cookie的工作原理:是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或硬盘当中的技术。【可以把它当做是存储在浏览器中的一个文件,这个文件中包含我们客户端的一些片段的信息(如:登录或存储的一些其他信息等),它就是一个文件,这个文件是存储在客户端的!!!】
  2. Cookie 的优点和缺点:
  3. cookie的优点:因为cookie是将信息存储在客户端,因此不会占用服务器的资源(即不会浪费服务器的资源),效率会高一些。
  4. cookie的缺点:也是因为其存储在客户端,由于我们的信息全部保存在客户端计算机中,所以不建议将一些敏感重要的数据保存到cookie当中,而且用户有权限禁止cookie的使用。如果我们在浏览器中,将cookie禁止掉,一旦用户禁止cookie,我们没有办法去保存用户的信息。
  5. session的工作原理:将使用者相同的资料存储在服务器中,这样用户无法禁用session的使用。
  6. 注:session 并不是完全脱离 cookie的,而是基于 cookie的。
  7. session的优点:信息非常的安全,都是存储在服务器端的,客户端不可能拿到 session 的数据。
  8. session的缺点:会占用服务器的资源(session文件越来越多,可能某一天会占满磁盘),并且它的分布式也是一个问题(如:将来我们可能会有多台 web服务器,但是 session 可能是存储在其中一台,而另外一台是没有办法去使用的。这种情况下,我们可以使用 redis,不管在哪台服务器,都可以去调用 redis 的服务器,就可以达到信息共享)。
  9. 用户禁用cookie后的解决方案:
  10. 方法1:<a href="1.php?<?php echo session_name().'='.session_id(); ?>">下个页面</a>
  11. 此处的 session_name 就是 php.ini 配置文件中的 session.name的值(即默认情况下 PHPSESSID);此处的 session_id 就是 登录之后上传的那个新的 session文件的ID的值。
  12. 方法2:<a href="1.php?<?php echo SID; ?>">下个页面</a>
  13. 常量 SID 就是 session_name() session_id 的拼接。
  14. SID 的特性:
  15. 如果开启了 cookieSID为空;
  16. 如果未开启 cookiecookie被禁用掉了),此时 SID才是 session_name() session_id()字符串的拼接。
  17. 出现的问题
  18. 假设有5 web服务器,有其中一台存储了 session,在登录的是否访问了5台中的一台,即登录的信息存储在了5台中的第一台服务器中,但是当跳转到下一个页面时,有可能就被轮询到了第二台服务器中,在第二台服务器上,我们去寻找 sessionId对于的那个 session文件的时候,无法找到。因为 session文件是在第一台服务器中存储着。
  19. 解决方法:
  20. 通过session_set_save_handler()存入 MySQLMemcacheRedis等。
  21. // 存储方式:默认情况下存储到服务器的文件中,还可以通过 session_set_save_handler()存储到Mysql/Memcache/redis
  22. // 遍历方式
  23. $_SESSION;
  24. 设置:setcookie(键名,值,过期时间,路径,域名,是否安全性传递https)
  25. 读取:$_COOKIE
  26. 删除:
  27. 其他:[其他](https://blog.csdn.net/studyphp123/article/details/83586775)

三,开发环境及配置相关考点
1.你是否使用过版本控制软件?如果有,您用的版本控制软件的名字是什么?
考点:对于版本控制软件的了解
延伸:php的运行原理
延伸:php的常见的配置项

  1. 大致的版本控制软件Fenwick两类:集中式和分布式
  2. 请简述CGIFastCGI PHP-FPM 的区别。
  3. CGI : 为了联系 Web Server PHP解析器中的一个协议,它起一个桥梁的作用。
  4. FastCGI : CGI的改良版本。
  5. PHP-FPM : FastCGI Process ManagerFastCGI进程管理器。
  6. 其他:[其他](https://blog.csdn.net/studyphp123/article/details/83624094)

四,正则表达式考察点
1.正则表达式的作用:分割、查找、匹配、替换字符串

  1. 2.分隔符:
  2. 1) 正斜线(/)【推荐使用】;
  3. 2) hash符号(#);
  4. 3) 取反符号(`);
  5. 3.通用原子:
  6. 1) \d: 0-9
  7. 2) \D: 除了0-9
  8. 3) \w: 数字、字母、下划线
  9. 4) \W: 除了数字、字母、下划线
  10. 5) \s: 空白符
  11. 6) \S: 除了空白符
  12. 4.元字符:
  13. 1) . : 除了 换行符 之外的任意符
  14. 2) * : 出现0次、1次或者多次
  15. 3)? : 出现0或1次
  16. 4) ^ : 必须以其开头
  17. 5) $ : 必须以其结尾
  18. 6) + : 出现1次或多次
  19. 7) {n} : 恰巧出现n次
  20. 8) {n,} : >= n次
  21. 9) {n, m} : n <= 出现次数 <= m
  22. 10) [] : 集合【如:[abc] 表示匹配 a或b或c】
  23. 11) ():互相引用,即匹配一个整体【如:(abc) 表示同时匹配abc】
  24. 12) [^] : 取反【如:[^abc] 表示除了a/b/c】
  25. 13) | : 或者
  26. 14) [-] : 匹配一个范围【如:[0-9] 表示匹配0-9】
  27. 5.模式修正符:
  28. 1) i : 不区分大小写
  29. 2) m : 将字符串通过分隔符进行分割【即将字符串中的每一行分别进行匹配】
  30. 3) e : 在进行 preg_replace时,可以将匹配的内容进行PHP语法的处理【PHP7.0起废除】
  31. 4) s : 修正圆点元字符(.)和换行
  32. 5) U : 取消贪婪模式
  33. 6) x : 忽略模式中的空白符
  34. 7) A : 必须以该模式开头
  35. 8) D : 修正 $对\n的忽略
  36. 9) u : 当进行uft-8中文匹配的使用,可以使用
  37. 6.后向引用:将前面匹配到的放到后面
  38. $string = 'April 15, 2003';
  39. $pattern = '/(\w+) (\d+), (\d+)/i';
  40. $replacement = '${1},$3';
  41. // \1=April \2=15 \3=2003 \均可用$代替
  42. echo preg_replace($pattern, $replacement, $string);
  43. echo "<br>";
  44. echo "<br>";
  45. echo "-------------------------------------";
  46. echo "<br>";
  47. echo "<br>";
  48. $str = '<b>abc</b>';
  49. $pattern = '/<b>(.*)<\/b>/'; // 正则表达式
  50. echo preg_replace($pattern, '\\1', $str); // 两个反斜线是为了防止将 \1 转义掉;\1表示匹配第一个括号中的内容;
  51. 7.贪婪模式
  52. 取消 贪婪模式 的方法
  53. ① 使用 . * ? 取消贪婪模式
  54. $str = '<b>abc</b><b>bcd</b>';
  55. // 匹配每一个<b>标签中的内容
  56. $pattern = '/<b>(.*?)<\/b>/'; // 匹配到了abc和bcd(从<b>开始,匹配到了abc,遇到</b>结束;再次遇到<b>开始,匹配到了bcd,遇到</b>结束)
  57. echo preg_replace($pattern, '\\1', $str);
  58. ②使用 . * 后面加 U 取消贪婪模式
  59. $str = '<b>abc</b><b>bcd</b>';
  60. // 匹配每一个<b>标签中的内容
  61. $pattern = '/<b>(.*)<\/b>/U'; // 匹配到了abc和bcd(从<b>开始,匹配到了abc,遇到</b>结束;再次遇到<b>开始,匹配到了bcd,遇到</b>结束)
  62. echo preg_replace($pattern, '\\1', $str);
  63. 注:不可以同时使用 . * ? 和 U 来取消贪婪;因为 . * ? 代表取消贪婪模式,如果再加一个 U 又变成了贪婪模式,双重否定表肯定。
  64. 8.中文匹配:
  65. ① UTF-8汉字编码范围是:0x4e00-0x9fa5; UTF-8要使用 u模式修正符 使模式字符串被当成 UTF-8。
  66. // 该中文为UTF-8下的中文
  67. $str = '中文';
  68. // UTF-8进行匹配
  69. $pattern = '/[\x{4e00}-\x{9fa5}]+/u'; // 匹配一次或多次,不区分大小写
  70. preg_match($pattern, $str, $match);
  71. var_dump($match);
  72. 9.写出13系列的手机号码
  73. $str="17325641205";
  74. $pattern="/^17[0-9]{1}\d{8}$/";
  75. $res=preg_match($pattern,$str,$match);
  76. echo $res."<br>";
  77. var_dump($match);
  78. 10.请写出一个正则表达式,取出页面中所有 img标签 中的 src值
  79. $str = '<img alt="狗狗" id="dog" src="dog.jpg" />';
  80. $pattern='/<img .*? src="(.*?)".*?\/?>/i';
  81. $res=preg_match($pattern,$str,$match);
  82. echo $res."<br>";
  83. var_dump($match);
  84. 其他:[其他](https://blog.csdn.net/studyphp123/article/details/83515629?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161775198116780262545270%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161775198116780262545270&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-1-83515629.pc_v2_rank_blog_default&utm_term=%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F)

五,自定义函数及内部函数考点
考点:
1.变量的作用域和静态变量

  1. 1)变量的作用域也称为变量的范围,变量的范围就是它生效的范围。大部分php变量只有一个单独的范围。
  2. $outer='str';
  3. function fun(){
  4. echo $outer; //这个无法访问到外部的变量(局部无法访问内部的变量)
  5. }
  6. 如果想要局部访问全局变量可以使用global变量
  7. $outer='str';
  8. function fun(){
  9. global $outer;
  10. echo $outer; //现在可以访问到全局变量了
  11. }
  12. 2)静态变量:
  13. 仅在局部的函数域中存在,但当程序执行离开此作用域的时候,其值并不会消失
  14. 静态变量的属性:
  15. a.关键词static
  16. b.仅初始化一次
  17. c.初始化时需要赋值
  18. d.每次执行函数该值会保留
  19. e.static修饰的变量时局部的,仅在函数内部有效
  20. f.可以记录函数的调用次数,从而可以在某些条件下终止递归
  21. function fun(){
  22. statis $a=1;
  23. echo $a++;
  24. }
  25. fun(); //1
  26. fun(); //2
  27. fun(); //3
  28. 2.延伸:函数的参数及参数的引用传递
  29. 3.延伸:函数的返回值及引用返回
  30. 4.延伸:外部文件的导入
  31. 5.系统内置函数
  32. 1)数组处理函数
  33. array_keys()
  34. array_values()
  35. array_diff()
  36. array_intersect()
  37. array_merge()
  38. array_shift()
  39. array_unshift()
  40. array_pop()
  41. array_push()
  42. sort
  43. 2)时间日期函数
  44. date():对当前日期或时间进行格式化。
  45. strtotime():把人类可读的字符串转换为 Unix 时间。
  46. mktime():返回一个日期的 UNIX 时间戳。
  47. time():返回当前时间戳(推荐)
  48. microtime():返回当前 Unix 时间戳的微秒数
  49. date_default_timezone_set():设置默认时区
  50. 3)IP处理函数
  51. ip2long():IP网络址协议地址转换成整数
  52. long2ip():整数转换成IP网络址协议地址
  53. 4)序列化及反序列化函数
  54. serialize():用于序列化对象或数组,并返回一个字符串。
  55. unserialize():反序列化
  56. 5)字符串处理函数
  57. implode():把数组元素组合为一个字符串
  58. explode():把字符串打散为数组
  59. join():把数组元素组合为一个字符串
  60. strrev():反转字符串
  61. trim():移除字符串两侧的空白字符或其他预定义字符。
  62. ltrim():移除字符串左侧的空白字符或其他预定义字符
  63. rtrim():移除字符串右侧的空白字符或其他预定义字符
  64. strstr():搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE
  65. number_format():通过千位分组来格式化数字
  66. 重点:字符串函数和数组函数
  67. 其他:[其他](https://blog.csdn.net/rebekah_/article/details/104430757)

六,面向对象考点
1.考点:
1)php的类权限控制修饰符
public,protected,private
2)延伸:面向对象的封装,继承和多态
a.封装指的是成员访问权限
b.继承:
aa.单一继承(php的继承是单一继承),只能继承一个类
bb.方法重写
class A{
public function text(){}
}
class B extends A{
public function text(){//这里会覆盖掉A类中的方法

  1. }
  2. }
  3. //如果不想让父类的方法覆盖可以使用parent::方法名()
  4. class B extends A{
  5. public function text(){//这里会覆盖掉A类中的方法
  6. parent::text();
  7. .......
  8. }
  9. }
  10. c.多态
  11. 多态性是指相同的函数或方法可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
  12. 3)延伸:魔术方法
  13. 4)延伸:设计模式
  14. 工厂模式
  15. 单例模式
  16. 注册树模式
  17. 设配器模式
  18. 观察者模式
  19. 策略模式
  20. 重点:[重点](https://blog.csdn.net/rebekah_/article/details/104618081)

七,网路协议考察点
1.考点
1)http协议状态码
五类响应状态码
1XX //信息类状态码,主要接受请求,表示接受请求正在处理
2XX //成功状态码,请求正常处理完毕
3XX //重定向
4XX //客户端错误,服务器服务处理请求
5XX 服务器错误状态码
2)延伸:OSI七层模型
物理层: 建立/维护/断开物理连接
数据链路层: 建立逻辑连接/进行硬件地址寻址/差错校验等功能
网络层: 进行逻辑地址寻址,实现不同网络间的路径选择
传输层: 定义传输数据的协议端口号,以及流控和差错校验
协议有TCP和UDP,数据包一单离开网卡即进入网络传输层
会话层: 建立/管理/结束会话
表示层: 数据的表示/安全/压缩
应用层: 网络服务与最终用户的一个接口
协议有: FTP/HTTP/TFTP/SMTP/SNMP/DNS/TELNET/HTTPS/POP3/DHCP
3)延伸:http协议的工作特点和工作原理
工作特点: 基于B/S模式,
通信开销小/简单快速/传输成本低
使用灵活/可使用超文本传输协议
节省传输时间
无状态
工作原理: 客户端发送请求给服务器,创建一个TCP连接,指定端口号,默 认80,连接到服务器,服务器监听到浏览器请求,一旦监听到客户 端请求,分析请求类型后,服务器会向客户端返回状态信息和数据 内容
4)延伸:http协议常见请求/响应头和请求方法
a.http协议常见请求/响应头
Cookie等
b.http协议的请求方法
get,post,head,options,put,delete,trace
延伸考点
http协议的get和post请求方法的区别
aa.post刷新的时候会被重新提交
bb.get可以被收藏为书签,post不能被收藏为书签
cc.get可以被浏览器缓存,post不能被浏览器缓存
dd.get和post的编码不同
ee.get的数据可以保存到历史当中,post则不能被保存
ff.数据类型
gg.数据安全性
5)延伸:https协议的工作原理
https是一种基于ssl/tls的http协议,所有的http数据都是在ssl/tls协议封装之上传输的
https协议在http协议的基础上。添加了ssl/tls握手以及数据加密传输,也属于应用层协议。
6)延伸:常见的网络协议含义以及端口
ftp 端口21
teinet 远程登录 端口23
smtp 发送邮件 端口25
pop3 接受邮件 端口110
http 超文本传输协议 端口80
DNS 域名解析服务 端口53

  1. 其他:[其他](https://blog.csdn.net/weixin_39534845/article/details/95099934)

八,文件以及目录处理相关考点

  1. 实例1
  2. //打开文件
  3. //将文件的内容读取出来,在开头加入hello
  4. //将拼接好的字符串协会到文件当中
  5. $file='./hello.txt';
  6. $handel=fopen($file,'r');
  7. $content=fread($handel,filesize($file));
  8. $content="HELLO".$content;
  9. fclose($handel);
  10. $handel=fopen($file,'w');
  11. fwrite($handel,$content);
  12. fclose($handel);
  13. 其他:[其他](https://blog.csdn.net/rebekah_/article/details/104554260)

九,运算符考察点
1.考点
php的运算符的错误控制符
延伸:php所有的运算符考点
延伸:运算符的优先级
延伸:比较运算符
延伸:递增/递减运算符
延伸:逻辑运算符

  1. 其他:[其他](https://blog.csdn.net/rebekah_/article/details/104377247)

十,流程控制考察点
1.考点
php的遍历数组的丧钟方式以及各自的区别
延伸:分支结构

  1. 其他:[其他](https://blog.csdn.net/heima201907/article/details/106275308)

十一,常量以及数据类型考察点
1.考点
1)php的字符串的定义方式以及各自区别
a.单引号
b.双引号
c.heredoc()和newdoc()
d.各自的属性:
aa.单引号:
在单引号中,不能解析变量;
在单引号中,不能解析转义字符,只能解析单引号和反斜线本身;
在变量和变量,变量和字符串,字符串和字符串之间可以用 . 来连接。
bb.双引号:
双引号可以解析变量,变量可以使用特殊字符和{}包含;
双引号可以解析所有转义字符;
双引号也可以在变量和变量,变量和字符串,字符串和字符串之间可以用 . 来连接。
cc.heredoc()和newdoc()的使用
heredoc()相当于双引号的作用,newdoc()类似于单引号的作用,当在处理大文本或html代码时可以使用,使用格式如下:
2)延伸:数据类型及常量
a.常量:
定义方式:const和define
const更快,是语言结构,define是函数
const可以定义类常量,define不能用域类常量的定义
常量的使用:

<?php const ONE_DEMO = “我是常量1”; //常量不用加$符,一般用大写来表示 define(“TWO_DEMO”,“我是常量2”); //第一个参数为常量名,第二个参数是常量值 ?>

预定义常量:
FILE 默认常量,是指PHP程序文件名及路径;
LINE 默认常量,是指PHP程序的行数;
DIR 目录
FUNCTION 所在函数体里里面的函数名称
CLASS //获取当前类的名称 test
TRAIT
METHOD 类名+方法名
NAMESPACE //输出当前的命名空间
b.数据类型
标量类型:String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型)
复合类型: Array(数组), Object(对象)
特殊类型:资源 , NULL(空值)

  1. false的七种情况:
  2. 0
  3. 0.0
  4. ‘’
  5. 0
  6. false
  7. array()
  8. NULL
  9. NULL又有三种情况:
  10. 直接将变量赋值为NULL
  11. 未定义的变量
  12. unset()销毁的变量
  13. c.超全局数组
  14. $GLOBALS
  15. $_GET
  16. $_POST
  17. $_REQUEST
  18. $_COOKIE
  19. $_SESSION
  20. $_SERVER
  21. 当前运行脚本所在的服务器的 IP 地址。
  22. $_SERVER[‘SERVER_NAME’]
  23. 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com)
  24. $_SERVER[‘REQUEST_TIME’]
  25. 请求开始时的时间戳。
  26. $_SERVER[‘HTTP_REFERER’]
  27. 引导用户代理到当前页的前一页的地址(如果存在)。也就是说发起请求的地址。
  28. $_SERVER[‘REMOTE_ADDR’]
  29. 浏览当前页面的用户的 IP 地址。
  30. 其他:[其他](https://blog.csdn.net/rebekah_/article/details/104294558)

十二,JavaScript和jQuery基础考点

  1. 其他:[其他](https://blog.csdn.net/weixin_34270865/article/details/93571710)

十三,AJAX基础内容考察点

  1. ajax技术利用了什么协议?简述ajax的工作机制
  2. 考点:
  3. ajax的工作原理
  4. b.工作原理
  5. XMLHttpRequest AJAX的基础,在使用AJAX的时候,一定要去使用XMLHttpRequest这个对象,AJAX是基于该对象的;
  6. XMLHttpRequest 用于在后台与服务器交换数据。
  7. jq的工作原理
  8. 要求写出jQuery中,可以处理AJAX的几种方法。
  9. $.ajax();
  10. $.get();
  11. $.post();
  12. $.getJSON();
  13. $.getScript();
  14. 其他:[其他](https://blog.csdn.net/studyphp123/article/details/83628940)

十四,MySQL数据库基础考察点
1.考点:
mysql数据类型
整数类型:
tinyint,smallint,mediumint,int,bigint
属性 :unsigned(所存的值非负)
长度:
可以为整数类型指定宽度,例如:int(11),对大多数应用是没有意义的,它不会限制值的合法范围,只会影响显示字符的个数。(就是int(11)不只可以存11个字符,只是显示11个字符.嗯,对就是这样)
eg:int(3) 可以存1234,
假设存了12
(指定一个属性zerofill,mysql就是用0填充)
012
int(5) 12 zerofill 00012
int(0)不是代表我们只能存0位,是代表宽度
实数类型:
float,double,decimal
decimal可以存储比bigint还大的整数;可以用于存储精确的小数
float和double类型支持使用标准的浮点进行近似计算
计算来说,float和double效率更高一些,decimal可以理解成当作字符串进行处理的,存储的内容会更大
字符串类型:
varchar,char,text,blob
varchar类型用于存储可变长字符串,它比定长类型更加节省空间
varchar使用1个或2个额外字节记录字符串的长度,列长度小于255个字节,使用1个字节表示,否则用两个
varchar长度,如果存储内容超出指定长度,会被截断
char定长,根据定义的字符串长度分配足够的空间
char会根据需要采用空格进行填充以方便比较
char适合存储很短的字符串,或者所有值都接近同一个长度 例如:md5()
char长度,超出设定的长度,会被截断
对于经常变更的数据,char比varchar更好,char不容易产生碎片
对于非常短的列,char比varchar在存储空间上更有效率,只分配真正需要的空间,更长的列会消耗跟多的内存
尽量避免使用blob/text(存字符串 大文本)类型,查询会使用临时表,导致严重的性能开销。
延伸:mysql基础操作
Mysql的链接和关闭:mysql -u -p -h -P
分别指定用户名,密码,主机,端口
\G,打印的结果垂直显示,格式化处理一下
\c, 取消当前mysql命令,不执行,取消掉
\q,退出mysql
\s,显示我们mysql服务器的状态
\h,帮助信息
\d,改变我们的执行符,假如将分号改成逗号,
延伸:mysql搜索引擎
innodb表引擎,默认的事务引擎,最重要最广泛的存储引擎,性能非常优秀
数据存储在 共享表空间,可以通过配置分开(表的索引和数据(多个表)都存在一个文件中
通过mysql的配置的改变,进行配置
对主键查询的性能高于其他类型的存储引擎
内部做了很多优化,从磁盘读取数据时自动在内存构建hash索引,插入数据时自动构建插入缓冲区
通过一些机制和工具支持真正的热备份
支持崩溃后的安全恢复
支持行级锁
支持外键

  1. myisam
  2. mysql5.1版本前,myisam 默认的存储引擎
  3. 拥有全文索引,压缩,空间函数
  4. 不支持行级锁和事务,不支持崩溃后安全恢复
  5. 表存储在两个文件,MYDMYI
  6. 设计简单,某些场景下性能很好
  7. 其他表引擎:
  8. Archive,Blackhole,CSV,Memory
  9. 延伸:mysql锁机制
  10. 表锁:当多个查询同一时刻进行数据修改时,就会产生并发控制的问题
  11. 共享锁和排它锁 读锁 写锁
  12. 读锁:共享的,不堵塞,对个用户可以提示都一个资源,互不干扰
  13. 写锁:排它锁,一个写锁可以阻塞其他的写锁和读锁,这样只允许一个人进行写入,防止其他用户读取正在写入的资源
  14. 锁粒度:表锁,系统性能开销最小,会锁定整张表,Myisam 使用表锁
  15. 行级锁:最大程度的支持并发处理,但是也带来了最大的锁开销,innodb实现行级锁
  16. 延伸:mysql事务处理,存储过程,触发器
  17. 事务处理,mysql提供不管理事务,由下层引擎实现,所以同一个事务中,使用多种存储引擎不靠谱。
  18. 其他:[其他](https://blog.csdn.net/weixin_33950035/article/details/93232545)

十五,MySQL创建高性能的索引考察点
1.考点
1)mysql索引的基础和类型
字段作为索引的原则:
选择唯一性索引
为经常需要排序、分组和联合操作的字段建立索引
为常作为查询条件的字段建立索引
限制索引的数目
尽量使用数据量少的索引
尽量使用前缀来索引
删除不再使用或者很少使用的索引
索引对性能的影响
大大减少服务器需要扫描的数据量。
帮助服务器避免排序和临时表。
将随机I/O变顺序I/O。
大大提高查询速度。
降低写的速度(不良影响)。
磁盘占用(不良影响)。
索引的使用场景:
对于非常小的表,大部分情况下全表扫描效率更高。
中到大型表,索引非常有效。
特大型的表,建立和使用索引的代价会随之增大,可以使用分区技术来解决。
索引的类型
普通索引:最基本的索引,没有任何约束限制。
唯一索引:和普通索引类似,但是具有唯一性约束。
主键索引:特殊的唯一索引,不允许有空值。
联合索引:将多个列组合在一起创建索引,可以覆盖多个列。(也叫复合索引,组合索引)
外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性、和实现级联操作(基本不用)
全文索引:MySQL自带的全文索引只能用于MyISAM,并且只能对英文进行全文检索 (基本不用)
2)延伸:mysql索引的创建原则
最适合创建索引的列是出现在WHERE或ON子句中的列,或连接子句中的列而不是出现在SELECT关键字后的列。
索引列的基数越大,数据区分度越高,索引的效果越好。
对于字符串进行索引,应该制定一个前缀长度,可以节省大量的索引空间。
根据情况创建联合索引,联合索引可以提高查询效率。
避免创建过多的索引,索引会额外占用磁盘空间,降低写操作效率。
主键尽可能选择较短的数据类型,可以有效减少索引的磁盘占用提高查询效率。
3)延伸:mysql索引的注意事项
a.LIKE查询,%不能在前
WHERE name LIKE “%wang%”
以上语句用不到索引,可以用外部的ElasticSearch、Lucene等全文搜索引擎替代。
b.列值为空(NULL)时是可以使用索引的,但MySQL难以优化引用了可空列的查询,它会使索引、索引统计和值更加复杂。可空列需要更多的储存空间,还需要在MySQL内部进行特殊处理。
c.如果MySQL估计使用索引比全表扫描更慢,会放弃使用索引
d.如果关键词or前面的条件中的列有索引,后面的没有,所有列的索引都不会被用到。
e.列类型是字符串,查询时一定要给值加引号,否则索引失效
注意:
1.只要列涉及到运算,MySQL就不会使用索引
2.MyISAM索引与InnoDB索引的区别?
答:InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。
其他:其他

十六,MySQL的SQL语句编写考察点
1.考点:
mysql的关联update语句
关联更新:update a,b set a.c1=b.c1,a.a2=b.a2 where a.id=b.id
update a inner join b on a.id=b.id set a.c1=b.c1,a.c2=b.c2 where …
实例1:
update a,b set a.c1=b.c1,a.c2=b.c2 where a.id=b.id and b.age>50
update a inner join b on a.id=b.id set a.c1=b.c1,a.c2=b.c2 where b.age>50
延伸:mysql的关联查询语句
交叉连接(CROSS JOIN)
select * fron a,b(,c)
select * fron a cross join b (cross join c)
内连接(INNER JOIN)
select * from a,b where a.id=b.id
select * from a inner join b on a.id=b.id
内连接的分类:
等值连接: on a.id =b.id
不等值连接: on a.id=b.id
自连接

  1. 外连接(LEFT JOIN/RIGHT JOIN)
  2. 联合查询(UNIONUNION ALL)
  3. select * from a union select * from b union
  4. 就是把多个结果集集中在一起,union前的结果为基准,需要注意的是联合查询的列数要相等,相同的记录行会合并
  5. 如果使用union all ,不会合并重复的记录行

十七,MySQL的查询优化考察点

  1. 其他:[其他](https://blog.csdn.net/weixin_38399962/article/details/80107633?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161792413716780262593134%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161792413716780262593134&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-8-80107633.pc_v2_rank_blog_default&utm_term=%E9%9D%A2%E8%AF%95)

其他:
1.range(0,1000);生成一个0到1000的数组

相关文章