菜鸟须知道

js 8种数据类型
基本:字符,数值,布尔。undefined null 属于=》值传递
复合:数组,对象,函数 属于=》引用传递

php 8种数据类型
标量:字符,整型,浮点,布尔
复合:数组,对象
特殊:null,资源

Linux 下 m vi/vim  有几种模式,分别是什么
三种方式: 命令方式,插入方式, 命令行方式


值传递:将变量拷贝一份给另一个变量
改变任何一个变量的值都不会影响另一个
比如:
$a=100;
$b=$a;
echo $a;//这里输出:100
echo $b;//这里输出:100


引用传递:将变量的值的内存地址给另一个变量
两个变量指向同一个值或地址;改动会互相影响
比如:
$a="100"; $b =&$a; 
echo $a;//这里输出:100 
echo $b;//这里输出:100
$b="200"; 
echo $a;//这里$a的值变为200 所以输出200 
echo $b;//这里输出200


行内元素和块元素的区别


1.行内元素默认显示在一行,块元素独占一行
2.行内元素不能设置宽和高;块元素可以设置宽度和高度
3.行内元素的大小由内容撑大,块元素的宽度默认撑满整个网页(100%)
4.行内元素通过display:block转化为块元素(独占一行,可设置宽高)
5.行内元素通过display:inline-block转化为行内块元素(显示在一行,但可以设置宽高)
6.行内元素通过float属性,转化为行内块元素(显示在一行,但可以设置宽高)
7.块元素通过display:inline,转化为行内元素(显示在一行,无法设置宽高 ) 


HTTP的状态码?
一二三四五原则: 
一. 消息系列 
二. 成功系列
三. 重定向系列 
四. 请求错误系列 
五. 服务器端错误系列
200 是请求成功,
302:临时转移成功,请求的内容已转移到新位置
401 代表未授权
403:禁止访问 
404 是文件未找到 
500:服务器内部错误
502 是服务器内部错误


连接数据有哪些方式?


常用普通方法
$mysql_conf = array(
    'host'    => '127.0.0.1:3306', 
    'db'      => 'test', 
    'db_user' => 'root', 
    'db_pwd'  => 'root123456', 
    );
$mysql_conn = @mysql_connect($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if ($mysql_conn) {
echo "数据库连接成功";
}else{
echo "数据库连接失败";
}
mysql_close($mysql_conn);
 php7.0 废弃mysql_connect
$mysql_conf = array(
    'host'    => '127.0.0.1:3306', 
    'db'      => 'test', 
    'db_user' => 'root', 
    'db_pwd'  => 'root123456', 
    );
$mysql_conn = @mysqli_connect($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if ($mysql_conn) {
echo "数据库连接成功";
}else{
echo "数据库连接失败";
}
mysqli_close($mysql_conn);
面向对象方法
$mysql_conf = array(
    'host'    => '127.0.0.1:3306', 
    'db'      => 'test', 
    'db_user' => 'root', 
    'db_pwd'  => 'root123456', 
    );


$mysqli = @new mysqli($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if ($mysqli) {
echo "数据库连接成功";
}else{
echo "数据库连接失败";
}

$mysqli->close();
PDO 
$mysql_conf = array(
    'host'    => '127.0.0.1:3306', 
    'db'      => 'test', 
    'db_user' => 'root', 
    'db_pwd'  => 'root123456', 
    );
$pdo = new PDO("mysql:host=" . $mysql_conf['host'] . ";dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
if ($pdo) {
echo "数据库连接成功";
}else{
echo "数据库连接失败";
}
$pdo = null;//关闭连接


Linux
常用命令
ls 显示文件或目录
mkdir 创建目录
cd 切换目录
touch 创建空文件
echo 创建带有内容的文件
cat 查看文件
cp 拷贝
mv 移动
rm 删除
find 文件中搜索文件
wc 统计文本中行数、字数、字符数
grep 在文本文件中查找某个字符串
rmdir 删除空目录
tree 树形结构显示目录,需要安装 tree 包
pwd 显示当前目录
ln 创建链接文件
more、less 分页显示文本文件内容
head、tail 显示文件头、尾内容
ctrl+alt+F1 命令行全屏模式


单例模式
 class mysqldb{
  private static $instance;
  private function __construct(){


  }
  private function __clone(){


  }
  public static function getInstance(){
  if(!self::$instance instanceof self){
  self::$instance=new self;
  }
  return self::$instance;
  }
 }


 $db1 = mysqldb::getInstance();
 $db2 = mysqldb::getInstance();
 var_dump($db1,$db2);






实现tp5自动验证,如何进行批量验证
引入use think\Validate;


//验证规则
$rule = [
    'name'  => 'require|max:25',
    'age'   => 'number|between:1,120',
    'email' => 'email',
];
//提示信息
$msg = [
    'name.require' => '名称必须',
    'name.max'     => '名称最多不能超过25个字符',
    'age.number'   => '年龄必须是数字',
    'age.between'  => '年龄只能在1-120之间',
    'email'        => '邮箱格式错误',
];
//验证的数据(此处是写定的数据,项目中为提交表单获取的表单数据)
$data = [
    'name'  => 'thinkphp',
    'age'   => 10,
    'email' => '[email protected]',
];


$validate = new Validate($rule, $msg);
$result   = $validate->check($data);
批量验证:
$validate = new Validate($rule, $msg);
$result   = $validate->batch()->check($data);


实现TP5中软删除
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;
class User extends Model
{
    use SoftDelete;
    protected $deleteTime = 'delete_time';
}


1. 禁用COOKIE 后 SEESION 还能用吗?
能用 可以通过url get方式


2. 抓取远程图片到本地,你会用什么函数?
file_get_contents 或者 curl 


3. 已知姓名A,姓名B,给一个求他们缘份的算法


5. 简述POST 和GET传输的最大容量分别是多少?
POST 根据你php.ini文件配置(默认是8M)    GET的话 大小限制在2KB


6. 用最少的代码写一个求3值最大值的函数.
$max = max($a ,$b $c);






1.表单中 get与post提交方法的区别?
答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. 




2.session与cookie的区别?
答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。 
两者都可通过时间来设置时间长短




3.数据库中的事务是什么?
答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。




简述题:
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)
答:echo date('Y-m-d H:i:s', strtotime('-1 days')); 




2、echo(),print(),print_r()的区别(3分)
答:echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) 
print() 只能打印出简单类型变量的值(如int,string)
print_r()可以打印出复杂类型变量的值(如数组,对象) 
echo 输出一个或者多个字符串


3、能够使HTML和PHP分离开使用的模板(1分)
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate




4、使用哪些工具进行版本控制?(1分)
答:cvs,svn,vss;




5、如何实现字符串翻转?(3分)
答:echo strrev($a);




6、优化MYSQL数据库的方法。(4分,多写多得)
答:
   1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如'省份,性别',最好设置为ENUM
   2、使用连接(JOIN)来代替子查询:
      a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
      b.提取所有没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
      c.提高b的速度优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid
      WHERE orderinfo.customerid IS NULL
      3、使用联合(UNION)来代替手动创建的临时表
      a.创建临时表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`
      4、事务处理:
      a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败
                  mysql_query("BEGIN");
         mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";
         mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
         mysql_query("COMMIT");
5、锁定表,优化事务处理:
     a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。
     包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,
     不会有其它的访问来对 inventory 进行插入、更新或者删除的操作
          mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");
          mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);
          mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id);
          mysql_query("UNLOCK TABLES");
6、使用外键,优化锁定表
     a.把customerinfo里的customerid映射到orderinfo里的customerid,
     任何一条没有合法的customerid的记录不会写到orderinfo里
           CREATE TABLE customerinfo
           (
               customerid INT NOT NULL,
                PRIMARY KEY(customerid) 
            )TYPE = INNODB;
           CREATE TABLE orderinfo
           (
               orderid INT NOT NULL,
               customerid INT NOT NULL,
               PRIMARY KEY(customerid,orderid),
               FOREIGN KEY (customerid) REFERENCES customerinfo
               (customerid) ON DELETE CASCADE 
           )TYPE = INNODB;
           注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
           表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
7、建立索引:
      a.格式:
           (普通索引)->
           创建:CREATE INDEX <索引名> ON tablename (索引字段)
           修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
           创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段)) 
           (唯一索引)->
           创建:CREATE UNIQUE <索引名> ON tablename (索引字段)
           修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
           创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段)) 
           (主键)->
           它是唯一索引,一般在创建表是建立,格式为:
           CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
8、优化查询语句
      a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
       例子1:
           SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
           SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
       例子2:
           SELECT * FROM order WHERE addtime/7<24;(慢)
           SELECT * FROM order WHERE addtime<24*7;(快)
        例子3:
           SELECT * FROM order WHERE title like "%good%";
           SELECT * FROM order WHERE title>="good" and name<"good";




8、PHP的意思(送1分)
答:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页




9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
答:now(),date()




10、实现中文字串截取无乱码的方法。(3分)
答:
function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.'...';
}else{
return $string;
}
}




12、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分)
答:用过,smarty


13、请简单阐述您最得意的开发之作(4分)
答:信息分类




14、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)
答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,
程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量




15、用PHP写出显示客户端IP与服务器IP的代码1分)
答:打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');
打印服务器IP:echo gethostbyname("www.bolaiwu.com")




16、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)
答:require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require 
include->include有返回值,而require没有(可能因为如此require的速度比include快) 
注意:包含文件不存在或者语法错误的时候require是致命的,include不是




17、如何修改SESSION的生存时间(1分).
答:
方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
方法2:$savePath = "./session_save_dir/";
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
方法3:setcookie() and session_set_cookie_params($lifeTime);




1、PHP语言的一大优势是跨平台,什么是跨平台?
PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以叫跨平台


2、WEB开发中数据提交方式有几种?有什么区别?百度使用哪种方式?
Get与post两种方式
区别:
1. Get从服务器获取数据,post向服务器传送数据
2. Get传值在url中可见,post在url中不可见
3. Get传值一般在2KB以内,post传值大小可以在php.ini中进行设置
4. get安全性非低,post安全性较高,执行效率却比Post高
建议:
1、get式安全性较Post式要差些包含机密信息建议用Post数据提交式;
2、做数据查询建议用Get式;做数据添加、修改或删除建议用Post方式;
百度使用的get方式,因为可以从它的URL中看出


3、掌握PHP的哪些框架、模板引擎、系统等
框架:框架有很多,例如zendframe、CI、Yii等等,咱们学过的是thinkphp
模板引擎:也有很多,在课本中有,咱们学过的是smarty
系统:有很多,例如:康盛的产品(uchome、supesite、discuzX等),帝国系统、DEDE(织梦)、ecshop等,咱们学过的是DEDECMS、Ecshop


4、说一下你所掌握的网页前端技术有哪些?
熟练掌握DIV+CSS网页布局,JavaScript,jQuery框架、photoshop图片处理


5、AJAX的优势是什么?
ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验


6、安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?
①防远程提交;②防SQL注入,对特殊代码进行过滤;③防止注册机灌水,使用验证码;


7、在程序的开发中,如何提高程序的运行效率?
①优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询;②数据表中创建索引;③对程序中经常用到的数据生成缓存;


8、PHP可否与其它的数据库搭配使用?
PHP与MYSQL数据库是最优搭配,当然PHP也可以去其它的数据库搭配使用,例如MSSQL等,PHP中预留了操作MSSQL的函数,只要开启就可以使用


9、现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点?
MVC三层分别指:业务模型、视图、控制器,由控制器层调用模型处理数据,然后将数据映射到视图层进行显示,优点是:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式


10、对json数据格式的理解?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json数据格式固定,可以被多种语言用作数据的传递
PHP中处理json格式的函数为json_decode( string $json [, bool $assoc ] ) ,接受一个 JSON格式的字符串并且把它转换为PHP变量,参数json待解码的json string格式的字符串。assoc当该参数为TRUE时,将返回array而非object;
Json_encode:将PHP变量转换成json格式


11、Print、echo、print_r有什么区别?
① echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出echo会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用。
② print 是打印字符串
③ print_r 则是打印复合类型 如数组 对象


12、SESSION与COOKIE的区别?
①存储位置:session存储于服务器,cookie存储于浏览器
②安全性:session安全性比cookie高
③session为‘会话服务’,在使用时需要开启服务,cookie不需要开启,可以直接用


13、PHP处理数组的常用函数?(重点看函数的‘参数’和‘返回值’)
①array()创建数组;②count()返回数组中元素的数目;③array_push()将一个或多个元素插入数组的末尾(入栈);④array_column()返回输入数组中某个单一列的值;⑤array_combine()通过合并两个数组来创建一个新数组;⑥array_reverse()以相反的顺序返回数组;⑦array_unique()删除除数组中的重复值;⑧in_array()检查数组中是否存在指定的值;


14、PHP处理字符串的常用函数?(重点看函数的‘参数’和‘返回值’)
①trim()移除字符串两侧的空白字符和其他字符;
②substr_replace()把字符串的一部分替换为另一个字符串;
③substr_count()计算子串在字符串中出现的次数;
④substr()返回字符串的一部分;
⑤strtolower()把字符串转换为小写字母;
⑥strtoupper()把字符串转换为大写字母;
⑦strtr()转换字符串中特定的字符;
⑧strrchr()查找字符串在另一个字符串中最后一次出现;
⑨strstr()查找字符串在另一字符串中的第一次出现(对大小写敏感);strrev()反转字符串;strlen()返回字符串的长度;str_replace()替换字符串中的一些字符(对大小写敏感);print()输出一个或多个字符串;explode()把字符串打散为数组;is_string()检测变量是否是字符串;strip_tags()从一个字符串中去除HTML标签;mb_substr()用来截中文与英文的函数


15、PHP处理时间的常用函数?(重点看函数的‘参数’和‘返回值’)
date_default_timezone_get()返回默认时区。
date_default_timezone_set()设置默认时区。
date()格式化本地时间/日期。
getdate()返回日期/时间信息。
gettimeofday()返回当前时间信息。
microtime()返回当前时间的微秒数。
mktime()返回一个日期的 Unix时间戳。
strtotime()将任何英文文本的日期或时间描述解析为 Unix时间戳。
time()返回当前时间的 Unix时间戳。


16、PHP处理数据库的常用函数?(重点看函数的‘参数’和‘返回值’)
请参照php手册,认真查看,此项非常重要


17、PHP操作文件的常用函数?(重点看函数的‘参数’和‘返回值’)
①打开文件;②删除文件;③读取文件;④写入文件;⑤修改文件;⑥关闭文件;⑦创建文件等等,此项非常重要,在工作中经常用来生成缓存或者静态文件,请参照php手册,认真查看


18、PHP操作目录(文件夹)的常用函数?(重点看函数的‘参数’和‘返回值’)
①打开目录;②删除目录;③读取目录;④创建目录;⑤修改目录;⑥关闭目录等等,此项非常重要,在工作中经常用来创建或者删除上传文件的目录,创建或者删除缓存、静态页面的目录,请参照php手册,认真查看


session和cookie的用法和区别
Session和cookie 都是用来保存会话机制的,
①cookie将会话保存在浏览器端,session将会话保存在服务器端
②cookie只保存字符串,session可以保存除资源类型外的所有数据类型
③从安全性角度来讲,session更安全
session依赖cookie,cookie禁用时,只要能把session_id传回服务器


简述RBAC
RBAC: Role-based access control 基于角色的访问权限控制。
核心原理: 系统将具体的权限分配给角色,用户必须归属于某个角色,那么用户就会有具
           体的权限了。
数据表设计:RBAC至少涉及到3张表,user表(用户表)、role表(角色表)、auth表(权限表)。user表中的roleid字段管理role表中的roleid字段,role表中的authid字段关联auth中的auth_id字段。三张表就可以联合控制器用户具体拥有的权限了。


什么是面向对象?主要特征是什么?
面向对象是程序的一种设计模式,利于提高程序的重用性,是程序结构更清晰
主要特征:封装、继承、多态


MVC  的优缺点
优点:
分散关注、松散耦合、逻辑复用、标准定义
a. 开发人员可以只关注整个结构中的其中某一层,方便多开发人员间的分工
b. 可以很容易的用新的实现来替换原有层次的实现
c. 降低层与层之间的依赖
d. 利于各层逻辑的复用,有利于标准化
e. 对单元测试的支持更加出色
缺点:
a. 清晰的构架以代码的复杂性为代价, 对小项目优可能反而降低开发效率
b. 降低了系统的性能,例如业务造访数据库现在必须通过中间层来完成
c. 控制层和表现层有时会过于紧密,导致没有真正分离和重用
d. 有时会导致级联的修改,如果在表示层中增加一个功能,为保证符合分层式结构,可能需要
在相应的控制层和模型层中都增加相应的代码


Nginx 和Apache 分别在处理PHP  访问时的各自的优点缺点?
a)  nginx 相对于 apache 的优点:
b)  轻量级,同样起 web 服务,比 apache 占用更少的内存及资源
c)  抗并发,nginx 处理请求是异步非阻塞的,而 apache 则是阻塞型的,在高并发下 nginx 能
保持低资源低消耗高性能
d)  apache 相对于 nginx 的优点:
e)  rewrite ,比 nginx 的 rewrite 强大
f)  动态页面
g)  模块超多,基本想到的都可以找到
h)  少 bug ,nginx 的 bug 相对较多
i)  超稳定




redis
redis是什么
是一个基于内存的高性能key-value数据库。
redis支持的数据类型
Strings
Lists
Sets 求交集、并集
Sorted Set 
hashes
Redis是单进程单线程的
redis利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销


使用Redis有哪些好处?


(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
(2) 支持丰富数据类型,支持string,list,set,sorted set,hash
(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除


 redis相比memcached有哪些优势?


(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis的速度比memcached快很多
(3) redis可以持久化其数据


redis常见性能问题和解决方案:
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3...
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。




memcache
Memcached是什么
Memcached是一个开源的,高性能的内存绶存软件,从名称上看Mem就是内存的意思,而Cache就是缓存的意思
 
Redis 与 Memcached的区别
1)、存储方式
Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。
Redis有部份存在硬盘上,这样能保证数据的持久性。
2)、数据支持类型
Memcache对数据类型支持相对简单。
Redis有复杂的数据类型。
3)、使用底层模型不同
它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。
Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4),value大小
redis最大可以达到1GB,而memcache只有1MB


Redis 和 Memcached的对比
1、Redis 只使用单核,而 Memcached 可以使用多核。
2、Redis 在存储小数据时比 Memcached 性能更高;而在 100k 以上的数据中,Memcached 性能要高于
Redis
3、简单的 key-value 存储,Memcached 的内存利用率更高。而如果 Redis 采用 hash 结构来做 key-value
存储,由于其组合式的压缩,其内存利用率会高于 Memcached
4、如果对数据持久化和数据同步有所要求,那么 Redis 性能高于 Memcached
5、Redis 相比 Memcached 来说,拥有更多的数据结构,并支持更丰富的数据操作
6、在 Redis 中,复杂的操作通常和一般的 GET/SET一样高效。需要缓存能够支持更复杂的结构和操作, 所以 Redis 在这方面的性能要更高




mysql的事务隔离级别有哪些?都有哪些区别


未提交读(ReadUncommitted)
允许脏读,也就是可能读取到其他会话中未提交事务修改的数据
提交读(Read Committed)
只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)
可重复读(Repeated Read)
可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读
串行读(Serializable)
完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞


什么是事务
事务是可以整个撤消的一段操作,可能是一个或几个或部份的存储过程,也可能是一或几条指令,事务是记录的一系列的操作和变化


事务的特性  (ACID  特性) 
原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一
致性与原子性是密切相关的。
隔离性(Isolation):一个事务的执行不能被其他事务干扰。
持续性/永久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。






php解决网站大数据大流量与高并发


1:硬件方面
主要影响服务器的速度有:网络-硬盘读写速度-内存大小-cpu处理速度。
2:软件方面
第一个 数据库 
查询尽量不用* 避免相关子查询 给经常查询的添加索引 用排序来取代非顺序存取,如果条件允许 ,一般MySQL服务器最好安装。关于apache和nginx在高并发的情况下推荐使用nginx,nginx是Apache服务器不错的替代品。nginx内存消耗少 官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。php方面不需要的模块尽量关闭,使用memcached,Memcached 是一个高性能的分布式内存对象缓存系统,不使用数据库直接从内存当中调数据,这样大大提升了速度,iiS或Apache启用GZIP压缩优化网站,压缩网站内容大大节省网站流量。
第二,禁止外部的盗链。
外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对 于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗链,Apache自 己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能。当 然,伪造refer也可以通过代码来实现盗链,不过目前蓄意伪造refer盗链的还不多, 可以先不去考虑,或者使用非技术手段来解决,比如在图片上增加水印。
第三,控制大文件的下载。
大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗CPU,使得网站响应能力下降。因此,尽量不要提供超过2M的大文件下载,如果需要提供,建议将大文件放在另外一台服务器上。
第四,使用不同主机分流主要流量
将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服务将RSS输出放在其他主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了


第五,使用流量分析统计软件。
在网站上安装一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化,因此,解决流量问题还需要进行精确的统计分析才可以。比如:Google Analytics(Google分析)。








PDO 的事务处理 
pdo->transaction






php7.0有哪些特性


1、NULL 合并运算符
PHP7 中添加了 NULL 合并运算符,不要小看这个“??”,有了它我们就能很方便的获取一个参数,并
能在其为空的情况下提供一个默认值。如何??运算符左侧值存在并且不为 NULL,则返回左侧,否则将
返回其右侧值。我们还是通过下面一段代码来体验一下??运算符的强大吧。
// PHP5 中我们这样来实现:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// PHP7 中,使用??运算符更便捷:
$username = $_GET['user'] ?? 'nobody';
?>
2、函数返回值类型声明
3、标量类型声明
增加了对标量类型(int,float,string,bool)的声明支持,增加 declare(strict_types=1)指令声明
是否严格类型校验
declare(strict_types=1)
function add(int $x, int $y) : int
{
return $x + $y;
}
echo add(1, 2); //int(7)
有效的类型有:class/interface name、self、array,、callable、bool、float、int 和 string。
4、use 批量声明
5、匿名类
顾名思义没有类名称,其声明和实例化是同时的,PHP7 支持通过 new class 来实例化一个匿名类,
可以用来替代一些”用后即焚”的完整类定义。










GET 请求指定的页面信息,并返回实体主体。
POST 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
DELETE 请求服务器删除指定的页面。
PUT  从客户端向服务器传送的数据取代指定的文档的内容。
OPTION  允许客户端查看服务器的性能。




如何设置一个严格30分钟过期的Session
1. 设置Cookie过期时间30分钟, 并设置Session的lifetime也为30分钟.
2. 自己为每一个Session值增加Time stamp.
3. 每次访问之前, 判断时间戳.


mysql的几种备份
逻辑备份  
使用mysql自带的mysqldump工具进行备份。备份成sql文件形式。
优点:
最大好处是能够与正在运行的mysql自动协同工作,在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问)。
缺点:
备份的速度比较慢。如果是数据量很多的时候。就很耗时间
物理备份:
直接拷贝mysql的数据目录。
直接拷贝只适用于myisam类型的表。不是所有表都用myisam引擎
缺点:
不能操作正在运行的mysql服务器
双机热备份
mysql数据库没有增量备份的机制。当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制(也就是双机热备)


优点:
适合数据量大的时候。现在明白了。大的互联网公司对于mysql数据备份,都是采用热机备份。搭建多台数据库服务器,进行主从复制。




TP  特性总结
1.多表查询非常方便,在 model 里几句代码就可以完成完成多表的关联操作。
2.融合了 smarty 框架技术,使前台和后台独立分开
3.支持多种缓存技术,memcache 技术支持非常好
4.命名规范,模型,视图和控制器严格遵循命名规则,通过命名一一对应
5.类库扩展、驱动扩展、应用扩展、模型扩展、控制器扩展、标签库扩展、模板引擎扩
展、Widget 扩展、行为扩展和模式扩展
6.支持多种 URL 模式
7.自动完成表单数据的验证过滤,生成安全的数据对象
8.内置 AJAX 数据返回方法,支持 JSON、XML 和 EVAL 格式返回客户端
9.内建丰富的查询机制,包括组合查询、复合查询、区间查询、统计查询、定位查询、
动态查询和原生查询,让你的数据查询简洁高效
10.系统支持多数据库连接和动态切换机制,支持分布式数据库






Laravel  特性总结
1.强大的 rest router:用简单的回调函数就可以调用,快速绑定 controller 和 router
2.artisan: 命令行工具,很多手动的工作都自动化
3.可继承的模版,简化 view 的开发和管理
4.  blade 模版:据说渲染速度更快
5.  ORM
6.  migration: 管理数据库和版本控制
7.测试功能也很强大
8.composer 也是亮点,现在新更新的项目都支持




TP  框架优缺点:
优点: 
动态模型:可以实现不需要定义 Model 充分利用了 PHP5 的特性
部署简单只需一个入口文件,一切搞定,简单高效中文文档齐全,入门超级简单
自带模板引擎,具有独特数据验证和自动填充功能,框架更新速度比较迅速缺点
操作方法的命名就是当前的 ACTION_NAME,这也造成了 ACTION_NAME 的命名可能会
和 PHP 关键字冲突的情况
缺点:
耦合太深,很多组件没法替换






Lavarel  框架优缺点:
优点:
Laravel 的设计思想是很先进的,非常适合应用各种开发模式 TDD, DDD 和 BDD,作为一
个框架,它准备好了一切,composer 是个 php 的未来,没有 composer,PHP 肯定要走向
没落。
laravel 最大的特点和优秀之处就是集合了 php 比较新的特性,以及各种各样的设计模式
Ioc 容器,依赖注入等。
缺点:
基于组件式的框架,所以比较臃肿命名空间,相比较太复杂


1.函数内部 static 和 global 关键字的作用

static 是静态变量,在局部函数中存在且只初始化一次,使用过后再次使用会使用上次执行的结果; 作为计数,程序内部缓存,单例模式中都有用到。

global 关键字,引用全局变量,wordpress中大量用到,如面向过程开发。

static 静态方法,是类的成员方法,但不需要实例化类可直接使用

$GLOBAL 在函数内使用具有全局作用域的变量,如$GLOBAL['a']

2.子类重写父类的 protected 方法有什么限制?或者说有什么要遵守的规则?

用例子说明,以 Laravel 框架中的控制器作为说明

①final修饰的类方法不可被子类重写

②PHP是否重写父类方法只会根据方法名是否一致判断(5.3以后重写父类方法参数个数必须一致)

③重写时访问级别只可以等于或者宽松于父类 不可提升访问级别

3.PHP文件末尾是否应该加 ?> 结束符号,为什么?

主要防止 include,require 引用文件,把文件末尾可能的回车和空格等字符引用进来,还有一些函数必须在没有任何输出之前调用,就会造成不是期望的结果。PHP文件的编码不包含BOM的UTF8. 这也是PSR-2中的规范:纯PHP代码文件必须省略最后的 ?> 结束标签。

4.谈一谈 PHP 开源框架 CI,ThinkPHP,Laravel 的优缺点及选型依据

CI非常轻量级,是一个简单的MVC框架,性能也很快。

ThinkPHP3.2国内使用比较多,优点是文档非常多,各种问题解决方案比较多,缺点是代码不够规范,理念落后。

Laravel 是一个现代化的PHP开发框架,代码优雅,使用 composer 方式扩展功能,社区活跃,缺点是比较重,比较适合做后台管理或者应用型WEB系统。

5.Memcache 和 Redis 的读写性能(qps)如何?两者优缺点?Redis 支持哪些数据类型?Redis 如何持久化?

读写性能:

memcache更加快速,在读取性能上比 Redis 快,缺点是仅支持字符串。

Redis支持丰富的数据结构类型,字符串,散列(哈希),集合,有序集合,还支持订阅发布,地理位置等等。

实际运用中可以redis,memcache结合,memcache可作为session存储的方式,session都是KV类型键值对。

Redis 提供了多种不同级别的持久化方式:

RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。

AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。

Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。

你甚至可以关闭持久化功能,让数据只在服务器运行时存在。

参见:http://doc.redisfans.com/topic/persistence.html

6.使用 PHP 下载网络图片,有哪些方法?

1.file_get_contents

2.readfile读取内容

3.fopen系列函数

4.curl

7.什么是 CGI?什么是 FastCGI?php-fpm,FastCGI,Nginx 之间是什么关系?

CGI,通用网关接口,用于WEB服务器和应用程序间的交互,定义输入输出规范,用户的请求通过WEB服务器转发给FastCGI进程,FastCGI进程再调用应用程序进行处理,如php解析器,应用程序的处理结果如html返回给FastCGI,FastCGI返回给Nginx 进行输出。假设这里WEB服务器是Nginx,应用程序是 PHP,而 php-fpm 是管理 FastCGI 的,这也就是 php-fpm,FastCGI,和 Nginx 之间的关系。

FastCGI 用来提高 cgi 程序性能,启动一个master,再启动多个 worker,不需要每次解析 php.ini. 而 php-fpm 实现了 FastCGI 协议,是 FastCGI 的进程管理器,支持平滑重启,可以启动的时候预先生成多个进程。

8.什么是 CSRF 攻击 ?XSS 攻击?如何防范?

CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。

讲述基本原理:用户访问A网站登陆并生成了cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网站给A网站的请求(此时相当于是用户访问),A网站会认为是用户发的请求,从而B网站就成功伪装了你的身份,因此叫跨站脚本攻击。

CSRF防范:

1.合理规范api请求方式,GET,POST

2.对POST请求加token令牌验证,生成一个随机码并存入session,表单中带上这个随机码,提交的时候服务端进行验证随机码是否相同。

XSS,跨站脚本攻击。

防范:不相信任何输入,过滤输入。

9.列举常用的设计模式并说明?单例模式,观察者模式等等

看示例代码。

10.写一段代码,实现PHP内部的通知机制,如当一个类的属性发生变化时,另外一个类就可以收到通知。

菜鸟须知道_第1张图片

观察者模式的应用,使用代码示例说明。

对象的一种一对多的关系,当依赖的对象状态发生改变时,所有依赖它的对象都得到通知并被自动更新。

观察者模式又称发布订阅模式。

1.抽象主体(Subject)角色:主体角色将所有对观察者对象的引用保存在一个集合中,每个主体可以有任意多个观察者。 抽象主体提供了增加和删除观察者对象的接口。主体也就是被观察者。

2.抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在观察的主体发生改变时更新自己。

3.具体主体(ConcreteSubject)角色:存储相关状态到具体观察者对象,当具体主体的内部状态改变时,给所有登记过的观察者发出通知。具体主体角色通常用一个具体子类实现。

4.具体观察者(ConcretedObserver)角色:存储一个具体主体对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致。

二、前端部分

1.$(“#content .abc”) 和 $(“#content”).find(“.abc”) 哪个效率更高?

后者,后者使用原生的document.getElementByN ame,ID>Tag>Class.

$(“#content”).find(“.abc”) .find()方法会调用浏览器的原生方法(getElementById,getElementByName,getElementByTagName等等),所以速度较快。比$(“#content .abc”) 效率快很多。

第一种慢的原因:在于 jQuery 内部使用各种选择器链条的选择顺序是从右到左,所以这条语句是先选.abc,然后再一个个过滤出父元素#content,这导致它慢很多。

2.ajax 中如何执行跨域访问?同子域的情况如何处理?不同子域的情况如何处理?

跨域的存在是因为浏览器的同源策略,一个源表示协议,端口,域名都相同,否则就形成了跨域。

①jsonp,非官方协议,简单实用

通过JavaScript的callback方式调用,jQuery封装了jsonp方式的请求。

callback({“result”:0,”msg”:”ok”,”data”:{xxx}})

②服务器响应头

header("Access-Control-Allow-Origin:*");

/星号表示所有的域都可以接受,/

header(“Access-Control-Allow-Methods:GET,POST");

③iframe实现跨域

3.$(document).ready()函数作用域是什么?

片段1:

var MyProject = {};
$(document).ready(function() {
    MyProject.intro = "";
    MyProject.intro = "something";
});console.log(MyProject.intro); // "something"

片段2:

$(document).ready(function() {
    var1 = 12;      // no var =global
    var var2 = 24;  // local});

alert(var1)
alert(var2)

4.$(this) 和 this 关键字在 jQuery 中有何不同?

一个是jquery对象,一个是js的属性

5.jsonp 和 iframe 跨域访问原理是什么?

一个jsonp的例子,js代码:

//JAVASCRIPT
$.getJSON('http://www.example.com/jsonp.php?callback=?','firstname=Jeff',function(res){    alert('Your name is '+res.fullname); });
//SERVER SIDE   $fname = $_GET['firstname'];      
 if($fname=='Jeff'){          
   //header("Content-Type: application/json");    echo $_GET['callback'] . '(' . "{'fullname' : 'Jeff Hansen'}" . ')'; }
?>

Ajax发jsonp请求:

$.ajax({        
url: "http://api.flickr.com/services/rest/?method=flickr.interestingness.getList ",        
dataType: "jsonp",        
jsonp: 'jsoncallback',        
success: function(data) { alert(data); }});

注意:对于上面第二个ajax示例,url中不必带有callback参数,jquery会自动添加。

Jsonp参数是callback名称,指的就是服务端$_GET[‘callback’]里的callback的名称。

实际发的请求就是http://api.flickr.com/services/rest/?method=flickr.interestingness.getList?jsoncallback=jquery332232323&_1471419449018

dataType: 'jsonp',用于表示这是一个 JSONP 请求。
jsonp: 'callback',用于告知服务器根据这个参数获取回调函数的名称,通常约定就叫 callback。
jsonpCallback: 'dosomething',回调函数的名称,也是前面callback参数的值,可省略,jquery会自动生成。
JSONP 的原理

AJAX 无法跨域是受到“同源政策”的限制,但是带有src属性的标签(例如

你可能感兴趣的:(自助烧烤)