zoukankan      html  css  js  c++  java
  • php 相关知识点


    1. Get与post两种方式?
    ans:
    GET->一般用于查询,参数可见不安全,且传值支持的大小不能超过2kb,效率高。
    post-> 一般用于修改保存数据,参数不可见比较安全。

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

    3.path相关:

    pathinfo:解析文件(文件名及扩展)

    path_url:解析URL(文件名及路由及参数)

    4.left join 与 right join

    left join: 先找出左表所有匹配的数据,右边不匹配的为null

    5.如何无限分类

    id,parentid,path(相对路径)

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

    7. 如何防sql注入?

    ans:
    SQL注入攻击是黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。

    主要两阶段防止:1.用户输入时候的数据校验 2.查询数据库时候的转义。3.尽量不要用mysql_error来抛出错误(错误信息进行封装)

    (1)查询条件尽量使用数组方式,这是更为安全的方式(post提交);

    (2)如果不得已必须使用字符串查询条件,使用预处理机制?

    (3)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了)(safe_mode = on 在php ini 中设置)

    (4)使用自动验证和自动完成机制进行针对应用的自定义过滤;(magic_quotes_gpc = on) 对sql 查询进行转换

    (5)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入。

     (6)addslashes(特使字符转义) 防止sql注入。

    用户输入校验:
    /*
    过滤用户代码
    */
    function security($str){
    $str = trim($str); //清理空格
    $str = strip_tags($str); //过滤html标签
    $str = htmlspecialchars($str); //将字符内容转化为html实体
    $str = addslashes($str);
    return $str;
    }


    8. XSS 与 CSRF?
    XSS:跨站脚本(cross—site script)发生在客户端,修复方式和防止sql注入类似
    ans:注入脚本的一种,例如提交评论中参杂javascript脚本,如果服务器没有进行过滤或转移这些脚本


    CSRF:跨站请求伪造(Cross_site_request_forgery) 发生在服务端(伪造成合法用户请求)(缓存中的session_id)
    CSFR攻击就是类似复制用户的session_id来冒充合法用户

    9.php正则函数

    php正则匹配掉js代码';
    $preg = "/<script[sS]*?</script>/i";
    $newstr = preg_replace($preg,"",$str,3); //第四个参数中的3表示替换3次,默认是-1,替换全部
    $newstr = preg_match($resg,$str,$newstr);
    echo $newstr;

    10. SESSION与COOKIE的区别?

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

    11. PHP处理数组的常用函数

    ans:
    ①array()创建数组;

    ②count()返回数组中元素的数目;

    ③array_push()将一个或多个元素插入数组的末尾(入栈);

    ④array_column()返回输入数组中某个单一列的值;

    ⑤array_combine()通过合并两个数组来创建一个新数组;

    ⑥array_reverse()以相反的顺序返回数组;

    ⑦array_unique()删除数组中的重复值;

    ⑧in_array()检查数组中是否存在指定的值

    12. PHP处理字符串的常用函数?
    ans:
    ①trim()移除字符串两侧的空白字符和其他字符;

    ②substr_replace()把字符串的一部分替换为另一个字符串;

    ③substr_count()计算子串在字符串中出现的次数;④substr()返回字符串的一部分;

    ⑤strtolower()把字符串转换为小写字母;

    ⑥strtoupper()把字符串转换为大写字母;

    ⑦strtr()转换字符串中特定的字符;

    ⑧strrchr()查找字符串在另一个字符串中最后一次出现;

    ⑨strstr()查找字符串在另一字符串中的第一次出现(对大小写敏感);

    strrev()反转字符串;

    strlen()返回字符串的长度;

    str_replace()替换字符串中的一些字符(对大小写敏感);

    print()输出一个或多个字符串;

    explode()把字符串打散为数组;

    is_string()检测变量是否是字符串;

    strip_tags()从一个字符串中去除HTML标签;

    mb_substr()用来截中文与英文的函数

    strpos 查找字符串所在位置

    13. 常用的魔术方法有哪些?
    __construct() 实例化类时自动调用。

    __destruct() 类对象使用结束时自动调用。

    __set() 在给未定义的属性赋值的时候调用。

    __get() 调用未定义的属性时候调用。

    __isset() 使用isset()或empty()函数时候会调用。

    __unset() 使用unset()时候会调用。

    __sleep() 使用serialize序列化时候调用。

    __wakeup() 使用unserialize反序列化的时候调用。

    __call() 调用一个不存在的方法的时候调用。

    __callStatic()调用一个不存在的静态方法是调用。

    __toString() 把对象转换成字符串的时候会调用。比如 echo。

    __invoke() 当尝试把对象当方法调用时调用。

    __set_state() 当使用var_export()函数时候调用。接受一个数组参数。

    __clone() 当使用clone复制一个对象时候调用。

    14. serialize与unserialize的认识?
    ans:
    serialize:将内存数据转化为字符串,写入硬盘 __sleep
    unserialize:将字符串转为内存数据如php变量 __wakeup

    15. include 与 require 的区别?
    include:根据流程引入,且不存在流程也能正常进行。 有返回值

    requeire:不管放在哪都是最先引入该文件,如果不存在则会报错。 无返回值

    include_once :只引入一次,如果引入过则不在引入。

    requeire_once :只引入一次,如果引入过则不在引入。

    16. 什么是composer可以解决自动加载类?
    ans:
    Composer 是 PHP 的一个依赖管理工具,"快速安装类库"。工作原理就是将已开发好的扩展包从 packagist.org composer仓库下载到我们的应用程序中,并声明依赖关系和版本控制。
    composer命令:

    composer list 列出所有可用的命令
    composer init 初始化composer.json文件(就不劳我们自己费力创建啦),会要求输入一些信息来描述我们当前的项目,还会要求输入依赖包
    composer install 读取composer.json内容,解析依赖关系,安装依赖包到vendor目录下
    composer update 更新最新的依赖关系到compsoer.lock文件,解析最新的依赖关系并且写入composer.lock文件
    composer search packagename 搜索包,packagename替换为你想查找的包名称
    composer require packagename 添加对packagename的依赖,packagename可修改为你想要的包名称
    composer show packagename
    composer self-update 更新 composer.phar文件自身
    composer dump-autoload --optimize 优化一下自动加载

    17. PHP7 和 PHP5 的区别,具体多了哪些新特性?
    ans:
    性能提升了两倍(
    因为:变量存储字节减小,减少内存占用,提升变量操作速度

    改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率

    改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率)

    结合比较运算符 (<=>)

    标量类型声明

    返回类型声明

    try...catch 增加多条件判断,更多 Error 错误可以进行异常处理

    匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义

    18. PHP 的设计模式?
    1. 单例模式(重点):
    ans:实例化出来的对象是唯一的。
    why: 当存在大量数据库操作时,可以避免大量new对象,减少数据库连接
    implement: 私有化实例,私有化构造方法,私有化克隆方法,公有化静态获取实例的方法(getinstant)
    2. 工厂模式(重点)
    ans:建立一个工厂来根据所需创建对象(解决紧耦合:改一个类就要改很多其他调用的地方)。
    工厂模式分为:简单工厂模式,工厂方法模式,抽象工厂模式
    3. 观察者模式(重点)
    4. 依赖注入(重点)

    19. 依赖注入实现原理?
    ans:实现低耦合高扩展。
    依赖注入DI:应用程序依赖容器创建并注入到所需的外部资源
    控制反转IOC:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源

    依赖注入就是组件通过构造器,方法或者属性字段来获取相应的依赖对象。
    为什么用依赖注入:解决高耦合。

    注入的途径:construct注入,set注入

    20. 请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
    if(isset($_POST['action']) && $_POST['action']==’submitted’){
    $email=$_POST['email'];
    if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(.[0-9a-zA-Z-]+){1,3}$/”,$email)){
    echo“电子邮件检测失败”;
    }else{
    echo“电子邮件检测成功”;
    }
    }

    21. sql注入之预处理(pdo)?

    22. 防止盗链?

    1.服务器防止: apach 或 nginx 做rewrite(重定向) 基于源来做判断防止盗链(防止别的网站请求我们网站的资源)

    2.代码防止: $_SERVER[‘HTTP_REFERER’] 判断是否来自我们网站的请求(通过判断域名和ip)

    所以一般来说,只有通过 <a></a> 超链接以及 POST 或 GET 表单访问的页面,$_SERVER['HTTP_REFERER'] 才有效。

    23 echo true =>1

       echo false => 空

    echo 默认打印十进制 echo012 => 18

    print 非函数

    eval():将字符串表达式执行

    $str = '$a = 1+1;'     注意要加上封号

    echo eval($str);

    24. 跨域问题?

    常见跨域方式:

    1.JSONP(只支持get)

    2.空iframe加form

    3.CORS:CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)跨域资源共享 CORS 详解。看名字就知道这是处理跨域问题的标准做法。CORS有两种请求,简单请求和非简单请求。

    例子:

    header('Access-Control-Allow-Origin: http://*.baidu.com'); //设置http://*.baidu.com允许跨域访问

    4.Nginx代理设置




  • 相关阅读:
    Benelux Algorithm Programming Contest 2016 Preliminary K. Translators’ Dinner(思路)
    Benelux Algorithm Programming Contest 2016 Preliminary Target Practice
    Benelux Algorithm Programming Contest 2016 Preliminary I. Rock Band
    Benelux Algorithm Programming Contest 2016 Preliminary A. Block Game
    ICPC Northeastern European Regional Contest 2019 Apprentice Learning Trajectory
    ICPC Northeastern European Regional Contest 2019 Key Storage
    2018 ACM ICPC Asia Regional
    2018 ACM ICPC Asia Regional
    Mybatis入库出现异常后,如何捕捉异常
    优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
  • 原文地址:https://www.cnblogs.com/-cyh/p/10140683.html
Copyright © 2011-2022 走看看