面试汇总

MySQL mysql隔离级别、如何避免脏读和幻读 https://blog.csdn.net/johnstrive/article/details/46724315 Read Uncommitted(读取未提交内容) 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。 Read Committed(读取提交内容) 这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。 Repeatable Read(可重读) 这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 (Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。 Serializable(可串行化) 这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。 这四种隔离级别采取不同的锁类型来实现,若读取的是同一个数据的话,就容易发生问题。例如: **脏读(Drity Read):**某个事务已更新一份数据,另一个事务在此时读取了同一份数据,由于某些原因,前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。 **不可重复读(Non-repeatable read):**在一个事务的两次查询之中数据不一致,这可能是两次查询过程中间插入了一个事务更新的原有的数据。 **幻读(Phantom Read):**在一个事务的两次查询中数据笔数不一致,例如有一个事务查询了几列(Row)数据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据是它先前所没有的。 隔离级别 脏读 不可重复读 幻读 Read Uncommitted √ √ √ Read Committed × √ √ Repeatable Read × × √ Serializable × × × mysql主从同步原理和过程 slave(从服务器) master(主服务器) mysql主从是异步复制过程 master开启bin-log功能,日志文件用于记录数据库的读写增删 需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程, Slave 通过IO线程连接master,并且请求某个bin-log,position之后的内容。 MASTER服务器收到slave IO线程发来的日志请求信息,io线程去将bin-log内容,position返回给slave IO线程。 slave服务器收到bin-log日志内容,将bin-log日志内容写入relay-log中继日志,创建一个master.info的文件,该文件记录了master ip 用户名 密码 master bin-log名称,bin-log position。 slave端开启SQL线程,实时监控relay-log日志内容是否有更新,解析文件中的SQL语句,在slave数据库中去执行。 ...

2018-12-24 · 3 分钟 · 492 字 · 王站站

面试题目

1.什么是引用变量?在PHP中,用什么符号定义引用变量? 在PHP中引用意味着用不同的名字访问同一个变量内容。使用&符号。 <?php // 定义一个变量 $a = range(0, 1000); var_dump(memory_get_usage()); // 定义变量b,将a变量的值赋值给b // COW Copy On Write $b = $a; var_dump(memory_get_usage()); // 对a进行修改 $a = range(0, 1000); var_dump(memory_get_usage()); <?php // zval变量容器(需要安装xdebug扩展) $a = range(0, 3); xdebug_debug_zval('a'); // 定义变量b,把a的值赋值给b $b = $a; xdebug_debug_zval('a'); // 修改a $a = range(0, 3); xdebug_debug_zval('a'); 2.PHP中字符串可以使用那三种定义方法以及各自的区别是什么? 定义方式:单引号,双引号,heredoc和newdoc. 单引号:不能解析变量,不能解析转义字符,只能解义单引号和反斜线本身,变量和变量,变量和字符串,字符串和字符串之间可以用.连接 双引号:可以解析变量,变量可以使用特殊字符和{}包含,可以解义所有的转义字符,可以使用.连接 单引号效率高 heredoc类似于双引号,newdoc类似于单引号,两者都是用来处理大文本 八大数据类型:标量(浮点,整型,字符串,布尔),复合(数组,对象),特殊(null,资源) 布尔中与false七种:0,0.0,’’,‘0’,false,array(),NULL 超全局数组:$GLOBALS,$_GET,$_POST,$_REQUEST,$_SESSION,$_COOKIE,$_SERVER,$_FILES,$_ENV $_SERVER[’…’]在下面⬇ // HTTP_HOST 主机名 // HTTP_USER_AGENT 获取终端设备, 浏览器版本 // // SERVER_SOFTWARE 获取服务器环境 // SERVER_NAME 服务器名 // SERVER_ADDR 服务器地址 (IP) // REMOTE_ADDR 客户端IP地址 // // SCRIPT_FILENAME 脚本地址(盘符) // SCRIPT_NAME 脚本地址(网址) // // REQUEST_URI 传输地址(带参数) // REQUEST_METHOD 传输方式 // QUERY_STRING 传输参数 // // HTTP_REFERER 获取上一级的来源地址 null:直接赋值为NULL,未定义变量,unset销毁的变量 ...

2018-12-17 · 3 分钟 · 579 字 · 王站站

云之梦面试题

第一课总结(最新PHP面试教程http://www.php.cn/course/876.html) 1.自己充满正能量,心态好,多吃苦,提升技能. 2.团队要正能量,融入团队,积极乐观. 3.人品第一,技能其次. 第二课 Use du. 当前目录的空间(Linux) crontab -e 分时日月周(Linux) cp f1.txt f2.txt 复制 看Linux启动信息:dmesg 第三课 加号(+)可以进行数组合并 月:m和n 日:d和j(带不带前导零) preg_split(/-|_/,$arr) 正则分割 str_split($arr,3) 按长度分割 str_replace('1','2',$str) 字符串替换(把1换成2) preg_replace(/linux|php/,'js',$arr) 字符串正则替换 类:protect,public,private interface 接口 abstract 抽象类或抽象方法 final 最终版本的类或方法 static 静态属性或方法 5.从表login中选出name字段包含admin的前10条结果所有信息的sql语句 select * from login where name like "%admin%" limit 10; 6.解释:左连接,右链接,内连接,索引 左连接:left ... join ... on 以左表为主导,先输出左边表的所有数据,右边匹配的输出,不匹配的值为null. 内连接:inner ... join ... on 相当于普通多表查询 索引:主键,唯一,普通 7.简述论坛中无限分类等等实现原理 表字段至少4列: id,name,pid(父类id),path(分类地图) 10.描述一下大流量高并发量网站的解决方案 1.服务器负载均衡 2.web服务器用nginx(3万)替换apache(3千) (最大并发数) 6.调高apache的默认并发数调大 7.减少客户在服务器上的连接断开时间 4.数据缓存(memcache,redis,tp文件缓存) 5.表索引 11.如何设计或配置MySQL,才能达到高效的使用目的? 1.mysql服务器主从复制 2.表分区 3.表引擎 数据小量尽量选择myisam 4.索引优化 用desc解析sql语句看字段 是否需要优化 5.服务器优化 max_connections=1500 并发连接数 wait_timeout=120 链接关闭时间 12.如何防sql注入? 1.表单尽量使用post提交 2.使用HTTP_REFERER检查源文件 3.开启addslashes 在特殊符号前加\ 4.使用htmlspecialchars对字符串实体 5.提高并发连接数 6.减小链接关闭时间 7.用户授权登录 8.定期给mysql打补丁 23.isset()和empty()的区别? isset()为假(false),只有未定义变量 empty()为空(true):未定义,0,false,'','0',array(),null 24.如何在页面之间传递变量? get,post,ajax,curl,cookie,session 25.冒泡排序? function mysort($arr){ for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-$i-1;$j++){ if($arr[$j]>$arr[$j+1]){ $x = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $x; } } } } mysql中二次排序 第一次排完,第二次排序在第一次排序之后, 不影响第一次排序的基础上进行排序 ...

2018-12-10 · 1 分钟 · 167 字 · 王站站

docker mysql-server 8.0 主从

启动三个 MySQL 容器 mkdir -p /root/docker/mysql{1,2,3}/config cp my.cnf mysql1/config/ && cp my.cnf mysql2/config/ && cp my.cnf mysql3/config/ chmod -R 755 mysql* docker run --name=mysql1 -v /root/docker/mysql1/config/my.cnf:/etc/my.cnf \ -v /root/docker/mysql1/data:/var/lib/mysql -d -p 19013:3306 mysql/mysql-server docker run --name=mysql2 -v /root/docker/mysql2/config/my.cnf:/etc/my.cnf \ -v /root/docker/mysql2/data:/var/lib/mysql -d -p 19014:3306 mysql/mysql-server 获取初始密码并重置: docker logs mysql1 2>&1 | grep GENERATED docker exec -it mysql1 mysql -uroot -p ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; USE mysql; UPDATE user SET host='%' WHERE user='root'; FLUSH PRIVILEGES; 配置 Master vim mysql1/config/my.cnf ...

2018-09-17 · 1 分钟 · 147 字 · 王站站