PHP小白-帝都行

面试题,直接发一些干货,具体的心得体会,因为受到几位好的面试官的点拨,所以还没有整理出来,等整理出来在一起发出。
当然一下内容多为真正的面试题。但是,发出这些,并不是说要背下来,而是以这些类型来看,进行复习或者准备。

小白面试干货

1. 基础http状态码须知

100     (消息类)继续发送信息
200     请求成功

301     永久重定向
302     临时重定向

401     未授权
402     留存下来,备用
403     禁止访问
404     文件未找到

500     服务器内部错误(多为asp错误)
501     服务器不具备请求功能
502     服务器内部错误(多为网关错误)
503     服务器不可用(正在维护或暂停)
504     网关请求超时
505     http版本不支持

2.session 和 cookie 的区别

首先,为什么有session和cookie,因为http协议的无状态性、无连接性,当数据交换完毕,客户端与服务端的连接就会断开。当再次进行交换数据的时候,需要重新建立连接。这时就意味着,①不能区分用户是否是从同一个网站上来的;②同一个用户,请求不同的页面,不能看作是同一个用户。 所以通过session和cookie来跟踪对话。

  1. cookie通过在客户端记录信息确定用户身份
  2. session通过在服务器端记录信息确定用户身份
  3. session依赖cookie携带的session_id进行传递
  4. session比较安全,cookie不安全

session共享

get和post请求的区别

  1. post相较于get更安全
  2. post相较于get能传递更多的值
  3. 提交方式不同:get请求方式会附在URL后面;post请求会通过请求体来进行传输
  4. 在服务器端的接收方式不同,(get使用:Request.QueryString获得变量;post使用:PostRequest.Form获取数据)
    总结: Get是向服务器发索取数据的一种请求,而post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为‘GET’。实际上,GET和POST只是发送机制不同,并不是一个取一个发。

MyISAM和InnoDB的区别

  • myisam和innodb数据存储结构是不一样的
  • myissam是支持压缩的,单InnoDB不支持压缩
    (缩引文件不可以压缩,数据文件可以被压缩)
  • myisam表的插入速度是非常快的。因为它不会排序。InnoDB表的插入速度相对myisam表慢一些。因为它会去排序。
  • myisam类型不支持事务等高级处理,而InnoDB类型支持
  • myisam不支持外键等高级操作,而InnoDB支持外键
  • myisam不支持行锁,InnoDB支持行锁
    MySQL5.5版本以后,默认使用InnoDB存储引擎。

传值和传引用的区别?和使用场景?

普通传值,传值以后,不同的地址名称,指向不同的内存实体。
引用传值,传值以后,不同的地址名称,指向同一个内存实体;改变其中一个,另外一个也会被改变。

  • 对象默认是引用传递
  • 按值传递时,php必须是复制值
  • 一用一般用于大字符串或对象,减少资源的占用

3. 三次握手,四次挥手

对于三次握手和四次挥手,我的理解比较表面化,说的都是一些自己的理解,如果大家真正的去理解的话,百度一下,有好多大神的介绍,图文并茂、生动形象。

三次握手

实质建立一个TCP连接
a. 客户端向服务端发送自己的序号,进行请求连接;发送SYN包,并进入等待状态。
b. 服务端接收到之后,把自己的序号返回,并指定自己所期待的话。发包,并进入等待状态。
c. 客服端接收到消息之后,进入连接状态,并告诉服务端,服务端接收消息后,也进入连接状态。

四次挥手

a. 客户端对服务端说,我要关闭连接了 b. 服务端对客户端说,确认要关闭了吗 c. 客户端接收到消息之后,会在等一会,等服务端是否还会发消息 服务端告诉客户端说,没有消息了,要关闭了 d. 客户端收到消息后,告诉服务端说,已经接收到了,并关闭连接 e. 服务端接收之后,也关闭连接

PHP的魔术方法

__construct()   //实例化对象的时候调用
__destruct()    //当对象所有引用被删除之后会调用
__clone()        //当对象被拷贝时直接调用
__toString()    //将对象转成字符串时,会调用
__invoke()      //当把对象当成函数调用时,会调用
__set()           //在给不可访问的属性赋值时,会调用该方法
__get()          //读取不可访问的属性时,会调用该方法
__isset()        //当对一个不可访问属性调用isset()或empty()时,会调用该方法
__unset()      //当对一个不可访问的属性调用unset时,会调用该函数
__call()         //在对象中调用一个不可访问的方法时,会调用改方法
__callStatic() //用静态方法调用一个不可访问的方法时,会调用该函数
__sleep()       //设置对象序列化要保存的成员属性
__wakeup()   //重新构建对象时

PHP魔术常量

__LINE__           //当前行号
__FILE__           //当前文件名(包含文件名)
__DIR__            //当前目录名
__FUNCTION__ //当前函数名
__CLASS__         //当前类名
__METHOD__     //当前方法名
__NAMESPACE__ //当前空间名

小疑问

FUNCTION和METHOND的区别?
在类外,方法中(function),返回的是一样的。
在类内,method 返回的前面会加类名 类名::...

预定义超全局变量(数组)

$_GET
$_POST
$_REQUEST

$_COOKIE
$_SESSION

$_FILES
$_SERVER

$_ENV
$_SERVER 由web服务器创建。包含了诸如头部(header)、路径以及脚本位置等信息。
$_ENV($_ENV['NAME']服务器的主机名;$_ENV['SHELL']系统shell)
$_ENV是从PHP解析器的运行环境。导入到PHP的全局命名空间。

$_GLOBALS 包含全部的上述预定义超全局数组,是一个更大的数组。

什么是面向对象?主要特征是什么?

面向对象是一种程序的设计模式,它利于提高程序的重用性,使程序结构更加清晰。
主要特征:①封装②继承③多态
(多态就是方法重写)

字符串函数

explode(',',$str) //将字符串变为数组
implode('_',$arr) //将一维数组变为字符串

strtolower() //将所有字符串小写
strtoupper() //将所有字符串大写

ucfirst() //将字符串,首字母大写
ucwords() //将字符串中每个单词都大写

strpos($str,'a') //获取字符串首次出现的位置
strrpos(\str,'a') //获取字符串最后出现的位置
配合:substr('abc',0,[1])

strstr($str,'a') //显示第一次找到,要查找的字符串,以及后面的字符串
strrchr($str,'a') //显示最后一次查找到,要查找的字符串,以及后面的字符

strlen() //字符串长度
trim($str,'_') //清除字符串,首尾空白行
strrev() //翻转字符串
str_shuffle() //随机打乱字符串中的字符

str_repeat('.',12) //重复一个字符串
str_replace('要替换','替换后',$str) //在字符串中,将a转换为
substr('abcdef',0,[2]) //返回一个字符串的子串

数组函数

array_push() //将一个元素添加到数组的末尾
array_pop() //将数组最后一个元素删除

array_unshift() //在数组开头插入一个元素
array_shift() //将数组开头的元素移除数组

  • sort() //排序
  • shuffle() //把数组中的元素按随机顺序重新排序
  • array_merge() //合并数组
  • array_rand($arr,2) //从数组中随机取出一个或多个键
  • array_sum() //计算数组中,数字或字符串数字的和
  • array_unique() //去除数组中的相同的元素
  • in_array() //检测一个值是否在数组中
  • array_search(6,$arr) //返回键值对应的键名
  • mt_rand(min,max) //生成一个随机数
  • range('开始','结束',[步长]) //建立一个包含指定范围单元的数组
  • array_splice($arr,2,1) //从0计数,第2个开始,删除一个
  • array_diff($arr1,$arr2) //比较两个数组的键值,并返回差集

MySQL优化

  1. 存储层(数据)
  2. 设计层
  3. 架构层
  4. 优化SQL语句

设计模式

一般常见的设计模式大概有23种。 (在面试中,会问到,会一般常见的几种一般还不顶事)
这23种设计模式一般有两种划分方法,①按目的来划分②按范围来划分。
我们按目的来分,可以分为三类:

  • 创建设计模式(5)
  • 结构设计模式(7)
  • 行为设计模式(11) 其中对于:单例模式、工厂的各个模式、观察者等基本常见的模式要了解。

基础的几个算法

  • 冒泡排序

  • 快速排序

  • 插入排序

  • 选择排序

  • 二分查找


Linux 的常用命令

  • ps 将某个进程显示出来
  • 三剑客
    1. awk 擅长取列
    2. sed 擅长取行
    3. grep 删除过滤
  • find 查找路径 查找的标准 查找到之后的动作

不重复加密的方式

md5(uniqid(md5(microtime(true),true)),true);


一些代码题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值