<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>面试 on 王站站</title>
    <link>/tags/%E9%9D%A2%E8%AF%95/</link>
    <description>Recent content in 面试 on 王站站</description>
    <image>
      <title>王站站</title>
      <url>/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo</generator>
    <language>zh</language>
    <lastBuildDate>Mon, 24 Dec 2018 01:12:24 +0000</lastBuildDate>
    <atom:link href="/tags/%E9%9D%A2%E8%AF%95/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>面试汇总</title>
      <link>/posts/4537645869/</link>
      <pubDate>Mon, 24 Dec 2018 01:12:24 +0000</pubDate>
      <guid>/posts/4537645869/</guid>
      <description>&lt;h3 id=&#34;mysql&#34;&gt;MySQL&lt;/h3&gt;
&lt;h4 id=&#34;mysql隔离级别如何避免脏读和幻读&#34;&gt;mysql隔离级别、如何避免脏读和幻读&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/johnstrive/article/details/46724315&#34;&gt;https://blog.csdn.net/johnstrive/article/details/46724315&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Read Uncommitted（读取未提交内容）&lt;/strong&gt;
在该隔离级别，所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用，因为它的性能也不比其他级别好多少。读取未提交的数据，也被称之为脏读（Dirty Read）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read Committed（读取提交内容）&lt;/strong&gt;
这是大多数数据库系统的默认隔离级别（但不是MySQL默认的）。它满足了隔离的简单定义：一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读（Nonrepeatable Read），因为同一事务的其他实例在该实例处理其间可能会有新的commit，所以同一select可能返回不同结果。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repeatable Read（可重读）&lt;/strong&gt;
这是MySQL的默认事务隔离级别，它确保同一事务的多个实例在并发读取数据时，会看到同样的数据行。不过理论上，这会导致另一个棘手的问题：幻读 （Phantom Read）。简单的说，幻读指当用户读取某一范围的数据行时，另一个事务又在该范围内插入了新行，当用户再读取该范围的数据行时，会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制（MVCC，Multiversion Concurrency Control）机制解决了该问题。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serializable（可串行化）&lt;/strong&gt;
这是最高的隔离级别，它通过强制事务排序，使之不可能相互冲突，从而解决幻读问题。简言之，它是在每个读的数据行上加上共享锁。在这个级别，可能导致大量的超时现象和锁竞争。
这四种隔离级别采取不同的锁类型来实现，若读取的是同一个数据的话，就容易发生问题。例如：
**脏读(Drity Read)：**某个事务已更新一份数据，另一个事务在此时读取了同一份数据，由于某些原因，前一个RollBack了操作，则后一个事务所读取的数据就会是不正确的。
**不可重复读(Non-repeatable read):**在一个事务的两次查询之中数据不一致，这可能是两次查询过程中间插入了一个事务更新的原有的数据。
**幻读(Phantom Read):**在一个事务的两次查询中数据笔数不一致，例如有一个事务查询了几列(Row)数据，而另一个事务却在此时插入了新的几列数据，先前的事务在接下来的查询中，就会发现有几列数据是它先前所没有的。&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;隔离级别&lt;/th&gt;
					&lt;th&gt;脏读&lt;/th&gt;
					&lt;th&gt;不可重复读&lt;/th&gt;
					&lt;th&gt;幻读&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Read Uncommitted&lt;/td&gt;
					&lt;td&gt;√&lt;/td&gt;
					&lt;td&gt;√&lt;/td&gt;
					&lt;td&gt;√&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Read Committed&lt;/td&gt;
					&lt;td&gt;×&lt;/td&gt;
					&lt;td&gt;√&lt;/td&gt;
					&lt;td&gt;√&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Repeatable Read&lt;/td&gt;
					&lt;td&gt;×&lt;/td&gt;
					&lt;td&gt;×&lt;/td&gt;
					&lt;td&gt;√&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Serializable&lt;/td&gt;
					&lt;td&gt;×&lt;/td&gt;
					&lt;td&gt;×&lt;/td&gt;
					&lt;td&gt;×&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;mysql主从同步原理和过程&#34;&gt;mysql主从同步原理和过程&lt;/h4&gt;
&lt;p&gt;slave（从服务器）&lt;/p&gt;
&lt;p&gt;master（主服务器）&lt;/p&gt;
&lt;p&gt;mysql主从是异步复制过程&lt;/p&gt;
&lt;p&gt;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数据库中去执行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>面试题目</title>
      <link>/posts/312099341/</link>
      <pubDate>Mon, 17 Dec 2018 01:12:17 +0000</pubDate>
      <guid>/posts/312099341/</guid>
      <description>&lt;h5 id=&#34;1什么是引用变量在php中用什么符号定义引用变量&#34;&gt;1.什么是引用变量？在PHP中，用什么符号定义引用变量？&lt;/h5&gt;
&lt;p&gt;在PHP中引用意味着用不同的名字访问同一个变量内容。使用&amp;amp;符号。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;?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());
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;?php

// zval变量容器(需要安装xdebug扩展)
$a = range(0, 3);
xdebug_debug_zval(&amp;#39;a&amp;#39;);

// 定义变量b，把a的值赋值给b
$b = $a;
xdebug_debug_zval(&amp;#39;a&amp;#39;);

// 修改a
$a = range(0, 3);
xdebug_debug_zval(&amp;#39;a&amp;#39;);
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;2php中字符串可以使用那三种定义方法以及各自的区别是什么&#34;&gt;2.PHP中字符串可以使用那三种定义方法以及各自的区别是什么？&lt;/h5&gt;
&lt;p&gt;定义方式：单引号，双引号，heredoc和newdoc.&lt;/p&gt;
&lt;p&gt;单引号：不能解析变量，不能解析转义字符，只能解义单引号和反斜线本身，变量和变量，变量和字符串，字符串和字符串之间可以用.连接&lt;/p&gt;
&lt;p&gt;双引号：可以解析变量，变量可以使用特殊字符和{}包含，可以解义所有的转义字符，可以使用.连接&lt;/p&gt;
&lt;p&gt;单引号效率高&lt;/p&gt;
&lt;p&gt;heredoc类似于双引号，newdoc类似于单引号，两者都是用来处理大文本&lt;/p&gt;
&lt;p&gt;八大数据类型：标量（浮点，整型，字符串，布尔），复合（数组，对象），特殊（null，资源）&lt;/p&gt;
&lt;p&gt;布尔中与false七种：0,0.0,&amp;rsquo;&amp;rsquo;,&amp;lsquo;0&amp;rsquo;,false,array(),NULL&lt;/p&gt;
&lt;p&gt;超全局数组：$GLOBALS,$_GET,$_POST,$_REQUEST,$_SESSION,$_COOKIE,$_SERVER,$_FILES,$_ENV&lt;/p&gt;
&lt;p&gt;$_SERVER[&amp;rsquo;&amp;hellip;&amp;rsquo;]在下面⬇&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;        // 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 		获取上一级的来源地址
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;null：直接赋值为NULL，未定义变量，unset销毁的变量&lt;/p&gt;</description>
    </item>
    <item>
      <title>云之梦面试题</title>
      <link>/posts/3650482178/</link>
      <pubDate>Mon, 10 Dec 2018 01:12:10 +0000</pubDate>
      <guid>/posts/3650482178/</guid>
      <description>&lt;h5 id=&#34;第一课总结最新php面试教程httpwwwphpcncourse876html&#34;&gt;第一课总结(最新PHP面试教程http://www.php.cn/course/876.html)&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1.自己充满正能量,心态好,多吃苦,提升技能.
2.团队要正能量,融入团队,积极乐观.
3.人品第一,技能其次.
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;第二课&#34;&gt;第二课&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Use du.  当前目录的空间(Linux)

crontab -e
分时日月周(Linux)
cp f1.txt f2.txt 复制

看Linux启动信息:dmesg
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;第三课&#34;&gt;第三课&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;加号(+)可以进行数组合并
月:m和n
日:d和j(带不带前导零)
preg_split(/-|_/,$arr)  正则分割
str_split($arr,3)  按长度分割
str_replace(&amp;#39;1&amp;#39;,&amp;#39;2&amp;#39;,$str) 字符串替换(把1换成2)
preg_replace(/linux|php/,&amp;#39;js&amp;#39;,$arr) 字符串正则替换

类:protect,public,private
interface 接口
abstract 抽象类或抽象方法
final 最终版本的类或方法
static 静态属性或方法
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;5从表login中选出name字段包含admin的前10条结果所有信息的sql语句&#34;&gt;5.从表login中选出name字段包含admin的前10条结果所有信息的sql语句&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;select * from login where name like &amp;#34;%admin%&amp;#34; limit 10;
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;6解释左连接右链接内连接索引&#34;&gt;6.解释:左连接,右链接,内连接,索引&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;左连接:left ... join ... on
以左表为主导,先输出左边表的所有数据,右边匹配的输出,不匹配的值为null.
内连接:inner ... join ... on
相当于普通多表查询
索引:主键,唯一,普通
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;7简述论坛中无限分类等等实现原理&#34;&gt;7.简述论坛中无限分类等等实现原理&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;表字段至少4列:
id,name,pid(父类id),path(分类地图)
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;10描述一下大流量高并发量网站的解决方案&#34;&gt;10.描述一下大流量高并发量网站的解决方案&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1.服务器负载均衡
2.web服务器用nginx(3万)替换apache(3千)  (最大并发数)
6.调高apache的默认并发数调大
7.减少客户在服务器上的连接断开时间
4.数据缓存(memcache,redis,tp文件缓存)
5.表索引
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;11如何设计或配置mysql才能达到高效的使用目的&#34;&gt;11.如何设计或配置MySQL,才能达到高效的使用目的?&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1.mysql服务器主从复制
2.表分区
3.表引擎 数据小量尽量选择myisam
4.索引优化 用desc解析sql语句看字段
  是否需要优化
5.服务器优化
  max_connections=1500 并发连接数
  wait_timeout=120 链接关闭时间
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;12如何防sql注入&#34;&gt;12.如何防sql注入?&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1.表单尽量使用post提交
2.使用HTTP_REFERER检查源文件
3.开启addslashes 在特殊符号前加\
4.使用htmlspecialchars对字符串实体
5.提高并发连接数
6.减小链接关闭时间
7.用户授权登录
8.定期给mysql打补丁
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;23isset和empty的区别&#34;&gt;23.isset()和empty()的区别?&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;isset()为假(false),只有未定义变量
empty()为空(true):未定义,0,false,&amp;#39;&amp;#39;,&amp;#39;0&amp;#39;,array(),null
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;24如何在页面之间传递变量&#34;&gt;24.如何在页面之间传递变量?&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;get,post,ajax,curl,cookie,session
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;25冒泡排序&#34;&gt;25.冒泡排序?&lt;/h5&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;function mysort($arr){
    for($i=0;$i&amp;lt;count($arr)-1;$i++){
        for($j=0;$j&amp;lt;count($arr)-$i-1;$j++){
            if($arr[$j]&amp;gt;$arr[$j+1]){
                $x = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $x;
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;mysql中二次排序&#34;&gt;mysql中二次排序&lt;/h5&gt;
&lt;p&gt;第一次排完,第二次排序在第一次排序之后,
不影响第一次排序的基础上进行排序&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
