PHP部分:
一 : oop面向对象编程思想
面向对象部分:(https://www.cnblogs.com/-shu/p/4600987.html)
https://www.cnblogs.com/-shu/p/4600995.html https://www.cnblogs.com/-shu/p/4601002.html
1:面向对象可以帮助我们解决以下问题:1:方便扩展:代码的重构和重用 2:允许方法和成员变量隐藏,可控制哪些变量不允许被访问 3:使用设计模式,可以解决常见的设计问题 4:让代码调试更容易,可维护,效率更高。
2:面向对象的特征:
封装:封装是面向对象结合在一起的机制,代码和操纵数据,并防止外界干扰和误用,包装好的数据和方法到一个类作为封装。
继承:通过扩展派生一个对象成为一个新对象的过程称为继承。当你从另一个对象继承时,子类即继承派生的所有的属性和方法的超类。
多态性:对象可以来自父类或者保留父类的一部分属性。
3:public,private,protected权限修饰符
public: 修饰的属性或方法可以被其他类在外部访问。
protected: 修饰的成员变量或方法表示允许对象内部和子类的对象访问。
private : 只能由类本身的方法访问。
static : 静态方法虽然隶属于某个类,但他不受该类的束缚,不需要生命对象实例就可以直接被外部访问和存取
abstruct: 抽象方法不能直接使用,必须经过实现implement才可以使用。
final: 不能再重新声明,也不能被重写。
4: 魔术方法
__construct() 构造方法是在创建对象实例时自动执行的方法 __destruct() 销毁一个对象或相关的工作。
autoload() 自动加载 toString() 将类的实例转化为字符串
__set() __get()
__sleep()序列化一个实例的时候 __wakeup()反序列化一个实例的时候
unset() 删除私有属性时
5:设计模式
单例模式
class Single {
private $name;//声明一个私有的实例变量
private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
}
static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
if(!self::$instance) self::$instance = new self();
return self::$instance;
}
public function setname($n){ $this->name = $n; }
public function getname(){ return $this->name; }
}
$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();//good morning
echo $ob->getname();//good morning
6:MVC的特点,各种好与不好的原因
Model - 数据模型层:通常情况下对数据进行加工,进行一些其他的处理,与数据相关的一些操作都在 Model层 操作。
View - 视图层:跟用户进行交互的一些界面上的东西。
Controllear - 控制层:用来处理业务逻辑的
1、 MVC的优点
(1) 可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
(2) 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
(3) 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。
(4) 潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
2、 MVC的不足之处
(1) 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
(2) 视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
(3) 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
(4) 目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。
7:变量的传值和传引用
传值:在函数范围内,改变变量值得大小,都不会影响到函数外边的变量值.
传引用:在函数范围内,对值得任何改变,在函数外部也有所提现,因为传引用传的是内存地址.
8:php类型转换和判断类型的方法
is_numberic:检验变量 是不是为数码或者数码字符串
is_bool:检验变量是不是布尔型
is_float:检验测定变量是不是浮点型
is_int(整形) is_string(是不是字符串) is_object(是不是对象) is_array(是不是数组) is_null(是否为空)
getType(获取变量类型)
9:php运算符的优先级
10:php数组函数,预定义数组(array_map使用场景,array_merge()合并数组后键名的变化)
11:正则表达式,每个标号含义,邮箱、网址、标签匹配,正则函数。
12:PHP异常处理(级别,错误日志,控制错误输出)。
php.ini或者error_reporting();
13:php时间函数(php得到前一天的2015-08-24 10:20的函数)
date("Y-m-d H:i:s",strtotime("-1 day"));
14:session与cookie的区别,怎么解决分布式session共享的问题(cookie存session,nosql解决办法)
区别与联系:
使用session_start()调用session,服务器端在生成session文件的同时生成session ID哈希值和默认值为PHPSESSID 的session name,并向客户端发送变量为PHPSESSID(session name)(默认)值为一个128位的哈希值。服务器端将通 过该cookie与客户端进行交互,session变量的值经php内部系列化后保存在服务器 机器上的文本文件中,和客户端的 变量名默认情况下为PHPSESSID的cookie进行对应交
互,即服务器自动发送了http 头:header(‘Set-Cookie: session_name()=session_id(); path=/’);即setcookie(session_name(),session_id());当从该页跳转到的新页面并调用 session_start()后,PHP将检查与给定ID相关联的服务器端存贮的session数据,如果没找到则新建一个数据集。
共享方案:
1:使用数据库保存session, 使用数据库来保存session,就算服务器宕机了也没事,session照样在。问题:程序需要定制;每次请求都进行数据库读写开销不小,另外数据库是一个单点,可以做数据库的hash来解 决这个问题。
2:使用 memcached来保存session, 这种方式跟数据库类似,内存存取性能比数据库好很多。问题:程序需要定制,增加 了工作量;存入memcached中的数据都需要序列化,效率较低,断电或者重启电脑容易丢失数据;
3: 通过加密的cookie,在A服务器上登录,在用户的浏览器上添加加密的cookie,当用户访问B服务器时,检查有无Session,如果没有,就检验 Cookie是否有效,Cookie有效的话就在B服务器上重建session。简单,高效, 服务器的压力减小了,因为session数据不存在服务器磁盘上。根本就不会出现session读取不到的问题。
问题:网络请求占用很多。每次请求时,客户端都要通过cookie发送session数据给服务器,session中数据不能太多,浏览器对cookie 的大小存在限制。不适合高访问量的情况,因为高访问量的情况下
15:get与post的区别
16:http与https的区别(https怎么保准安全ssl)
1、HTTP是超文本传输协议,信息是明文传输,HTTPS是具有安全性的SSL加密传输协议。
2、HTTPS协议需要ca申请证书,一般免费证书少,因而需要一定费用。
3、HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样。前者是80,后者是443。
4、HTTP连接是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,安全性高于HTTP协议。
17:判断null的函数,变量是否存在的函数,是否为空的函数
1、当变量未定义时,is_null() 和“参数本身”是不允许作为参数判断的,会报Notice警告错误;
2、empty , isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 和 “参数本身”只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!
3、isset():仅当null和未定义,返回false;
4、empty():""、0、"0"、NULL、FALSE、array(),未定义,均返回true;
5、is_null():仅判断是否为null,未定义报警告;
6、变量本身作为参数,与empty()一致,但接受未定义变量时,报警告;
18:网络状态码含义,常用(204,304, 404, 504,502)。
200 - 服务器成功返回网页
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
404 - 请求的网页不存在
403 (禁止) 服务器拒绝请求。
503 - 服务不可用
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
19:PHP安全处理,过滤函数。
PDO
htmlspecialchars
htmlentitles
20:php字符串函数
21:网络各种攻击的名词含义(SQL攻击、XSS、CSRF、DDos),防止措施。
22:Apache配置文件,PHP配置文件,各个含义字段的含义。查看apacache端口号80的命令
23:url的处理函数,得到url指定的部分。
提取url,要求从”< a href=’sina.com.cn’>sina“中提取url部分(要求使用两种方法)
24:浏览器输入url到页面呈现经过的过程,域名解析的过程
- 要通过dns解析(浏览器是不能识别url地址的,需解析成ip地址),
- 返回相对应的IP地址,
- 建立tcp连接,(tcp三次握手)
- 发送Http请求,
- 服务器进行处理并返回Http报文,
- 浏览器渲染页面,
- 断开连接(tcp四次挥手)
25:int(10)与int(11)de 区别,char与varchar()的区别,int与bigint的区别
26:第三方登录和第三方支付的原理
27: 接口和抽象类的区别
抽象类是一种不能被实例化的类,只能作为其他类的父类来使用。抽象类是通过关键字abstract 来声明的。
抽象类与普通类相似,都包含成员变量和成员方法,两者的区别在于,抽象类中至少要包含一个抽象方法,抽象方法 没有方法体,该方法天生就是要被子类重写的。
抽象方法的格式为:abstract function abstractMethod();
接口是通过 interface 关键字来声明的,接口中的成员常量和方法都是 public 的,方法可以不写关键字 public,接口中 的方法也是没有方法体。接口中的方法也天生就是要被子类实现的。
抽象类和接口实现的功能十分相似,最大的不同是接口能实现多继承。在应用中选择抽象类还是接口要看具体实现。
子类继承抽象类使用 extends,子类实现接口使用 implements。
28:smarty模板引擎的特点:
速度快,编译型,缓存技术,插件机制,强大的表现逻辑
smarty是一个模板引擎,使用smarty主要是为了实现逻辑和外在内容的分离,如果不使用模板的话,通常的做法就是php代码和html代码混编。使用了模板之后,则可以将业务逻辑都放到php文件中,而负责显示内容的模板则放到html文件中。
Smarty在执行display方法的时候,读取模板文件,并进行数据替换,生成编译文件,之后每次访问都会直接访问编译文件,读取编译文件省去了读取模板文件,和字符串替换的时间,所以可以更快,编译文件里时间戳记录模板文件修改时间,如果模板被修改过就可以检测到,然后重新编译(编译是把静态内容保存起来,动态内容根据传入的参数不同而不同)。
如果启用了缓存,则会根据编译文件生成缓存文件,在访问的时候如果有缓存文件并且缓存文件没有过期,则直接访问缓存文件。
29: 写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名,例如:http://www.sina.com.cn/abc/de/fg.php?id=1需要取出php或.php
function getExt($url)
{
$url=basename($url);
$post1=strpos($url,'.');
$post2=strpos($url,'?');
if(strst($url,'?')){
return substr($url,$post1+1,$post2-$post1-1);
}else{
return substr($url,$post1+1);
}
}
$path = "http://www.sina.com.cn/abc/de/fg.php?id=1";
echo getExt2($path);
Mysql部分(https://www.cnblogs.com/-shu/p/4600985.html)
1:存储引擎,常用的几个,优缺点,差别,原理
2:数据库索引使用的那种数据结构,画出数据结构,为什么使用这种数据结构
3:索引建立的原则:最左原则,原因??
4:数据库的sql优化,哪些sql语句执行会忽略索引
5:mysql的字段类型,使用场景int(10)与int(11)
6: 事务
7:sql注入的解决办法
8:mysql的函数
Nosql部分
1:memcache呀redis的区别(印象笔记)
2:redis的消息队列来解决高并发的问题
Linux部分:(https://www.cnblogs.com/-shu/p/4600997.html)
1:linux的命令
top/ps/mv/find/df/cat/chmod/chgrp/grep/wc
2: linux查看80端口的命令
3:查看php-fpm进程的linux命令
4:Shell的使用,命令操作。
版本控制器:
1:SVN与GIT的区别,常用命令
数据结构:(https://www.cnblogs.com/-shu/p/4600992.html)
1:排序算法,时间复杂度(快速排序)
2:二分法查找的思想,时间复杂度
秒杀问题
https://www.cnblogs.com/zyf-zhaoyafei/p/4828358.html
https://app.yinxiang.com/shard/s49/nl/10640374/b9595138-748f-4796-a9d8-1069a037f23a