PHP技术模拟面试题

Posted on   君子不卿  阅读(134)  评论(0编辑  收藏  举报

开篇:

一个自信的有技术含量的自我介绍

关键词:聊天、推销自己、自信不浮夸、不少于3分钟

项目开发方向:

一、你做过哪些项目,简单描述一下这些项目

关键词: 项目功能概述、项目人数、项目工期、自己所负责模块

 

二、谈一下你对Laravel框架的理解

:  Laravel是一款简洁、优雅的、单入口的、基于面向对象和MVC软件设计模式的PHP        Web开发框架

优点:

  1. 具有富有表达性且简洁的语法,代码比较明白易懂,跟英语句子差不多
  2. 安全机制非常齐全,防SQL注入攻击、防CSRF攻击等方面表现优秀
  3. 提供路由功能,提高了网站的安全性,更有利于url地址的优化
  4. 通过中间件可以对网站进行访问控制及日志记录,过滤非法请求
  5. 提供了大量的第三方开源库(composer收录的超过5500个包),可以快速方便               的实现常见功能
  6. 借助于artisan命令行可以大大提高开发效率
  7. 网上文档非常丰富,社区也是非常活跃,现在全球范围内占有率最高,基本上所有               的问题都可以找到答案

缺点:

  1. 源代码复杂,不太容易上手,对新手稍有难度
  2. 提供强大的开放功能的同时也牺牲了部分执行效率

 

三、简述微信公众号开发流程

答:

  1. 申请微信公众号(订阅号、服务号、企业号),开启开发者模式
  2. 搭建个人的微信公众号服务器
  3. 在公众号管理后台填写服务器配置,并进行微信加密签名验证
  4. 依据接口文档实现相应的业务逻辑
  5. 一些高级功能需要开通过微信认证,一年费用300元

    注意:

  1. 使用CURL发送http请求
  2. 使用simplexml_load_string()将接收到的XML数据转为对象
  3. 使用sprintf()对发送的XML数据进行格式化处理

 

四、简述微信小程序开发流程

答:

  1. 申请微信小程序账号,获取小程序的AppID
  2. 下载安装小程序开发工具,填入刚刚申请到的AppID,创建一个小程序项目
  3. 小程序的代码由.json 后缀的JSON 配置文件,.wxml 后缀的 WXML 模板文             件,.wxss 后缀的 WXSS 样式文件,.js 后缀的 JS 脚本逻辑文件四个部分组成。
  4. 搭建API服务与小程序进行数据交互
  5. 依据小程序开发文档进行项目开发
  6. 功能测试
  7. 发布上线

 

五、高并发大数据网站的优化方案

答:

  1. 服务器运维方面优化

①     负载均衡集群、故障转移集群

②     图片服务器、数据服务器、业务服务器分离

③     增加服务器间网络带宽

④     使用分布式文件系统(NFS)

⑤     使用RAID磁盘阵列提高硬盘读写速度

⑥     使用CDN(内容分发网络)加速

⑦     搭建监控系统对服务器和网络性能进行实时监控

  1. 数据库方面优化

①     选择最合适的存储引擎

②     数据库主从分离、读写分离

③     数据库分表、分离活跃数据

④     数据库操作使用索引

⑤     数据库使用储存过程

⑥ sql语句 避免select *

  1. 网站开发方面优化

①     使用分布式缓存,比如Memcache、Redis

②     采用页面静态化技术

③     采用多线程处理方式

④     对图片、CSS、JS 等静态资源进行合并以及gzip压缩处理

⑤     对图片较多的页面采用延迟加载技术

⑥ 使用流量统计软件分析网站哪些页面访问流量最大,对具体页面优化

⑦ 控制大文件的下载 大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降

 

六、什么是二次开发,你用过哪些二次开发系统?

答:网站开发一般采用完全自主开发、使用框架开发和二次开发等方式

二次开发,简单的说就是在现有软件代码的基础上进行定制修改,功能的扩展,然后达到自己想要的功能效果

   二次开发的类型:

  1. 基于公司现有产品的二次开发
  2. 基于PHP开源项目的二次开发

①     电商开源系统:ecshop、ecmall、shopnc

②     论坛开源系统:discuz、phpwind

③     博客开源系统:wordpress

  1. 基于PHP开源CMS的二次开发

①     PHPCMS: 面向对象,功能强大,但不适合新手

②     帝国CMS:面向过程,功能强大,比较容易

③     DedeCMS: 面向过程,很容易学习,但不太安全

 

七、如何实现团购功能?

答:

1.创建团购表,设置团购结束时间,团购数量,团购价格,团购规则,成团人数等

2.创建团购商品表,添加团购商品

3.创建团购用户表,保存已参加团购用户信息

4.当有新用户参加团购,判断团购用户人数是否达到成团人数,如果达到成团要求则发送成团通知并生成团购订单,并为之前所有用户发送成团通知和生成订单

 

八、如何实现闪购功能?

答:

  1. 创建闪购列表,添加闪购商品id,闪购开始时间,闪购结束时间,闪购价格,闪购商品数量等
  2. 当商品加入抢购列表使用Redis创建一个符合闪购商品数量的队列,每当有人点击闪购时从队列中推出一个元素,并生成订单,当队列内全部推出完毕时,结束抢购
  3. 当抢购时间结束时,关闭抢购渠道

 

九、如何实现微信支付功能?

答:

  1. 登录微信商户平台(https://pay.weixin.qq.com),申请微信支付功能
  2. 调用开发平台中的API进行开发
  3. 建议下载对应语言的官方SDK进行开发
  4. 也可借助网络上的第三方SDK进行开发

 

十、你开发时使用过什么版本控制工具,简单介绍一下

答:常见的版本控制工具有SVN、Git

1.SVN是一款集中式版本控制工具,版本库是集中存放在中央服务器的,团队里每个成员从SVN服务器下载代码,个人编写后再提交给服务器。SVN的优点是好学易用,但是对服务依赖性强,必须要连接服务器。

2.Git是一款分布式版本控制系统,每一个用户都可以作为服务器。因为每一次Clone就是从服务器上pull到了所有的内容,包括版本信息,相当于是有一个本地仓库。Git的优点是服务器压力和数据量都不会太大,别外Git支持离线工作,连接不到服务器,不会影响本地代码编写

 

十一、如何书写API

答: API(Application Programming Interface)是互联网产品开发中出现的一种软架构模式,可以为很多应用程序提供所需的数据信息,并且诞生了很多专门提供API的公司

   比如:百度的APIStore、聚合数据等。

   开发中我们可以使用API为网站、小程序、公众号、手机APP等软件提供数据

   开发特点:

   1.API开发比web开发更简洁,API开发只需要返回结果,不需要呈现页面

   2.web开发更多的使用get和post请求,API开发还put、delete请求

   3.API的返回值一般为XML和JSON格式,从跨域的角度考虑建议使用json格式

   4.为了保证接口安全性,建议加入鉴权体系

   5.在线的API务必关闭所有的错误提示,可以把错误重定向到日志中

 

十二、如何实现RBAC

:   基于角色的权限访问控制(Role-Based Access Control)是一种传统的访问控制机制。

在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。由于角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多,这就极大地减小了授权管理的复杂性,降低了管理开销。

在RBAC中,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

在RBAC中,一般通过设计五张数据表来实现,如下图:

 

十三、购物车的实现原理

答:针对未登录用户将购物车信息写入Session,针对已登录用户则写入数据库购物车表,并将session中的购物车数据也转入数据库保存

   针对已购买商品只需要增加购买数量,不需要增新的购物车记录

 

十四、什么是composer?

答:Composer是PHP用来管理依赖关系的软件。在项目中只需通过配置文件composer.json中声明你要安装的库文件,则Composer会自动帮你安装所有需要依赖的文件

 

十五、什么是框架?你使用过哪些框架?分别简要介绍

答:框架是开发者定制的应用程序规范,提供了架构模式、设计模式以及丰富的功能库,使用框架开发效率更高、更加稳定、更加规范、有更好的扩展性和重用性。

用过的框架有Laravel、TP3.2、TP5等

ThinkPhp3.2简单、快速,基于MVC和面向对象,易用性较高,是一款简洁实用的轻量级框架,国内相关的文档十分丰富

ThinkPHP5和ThinkPHP3.2相比作了相当大程度的重构,比如废除了所有的单字母方法、增加了路由变量规则、增加了请求对象和响应对象等,如此大的变化使得TP5相对于TP3功能性和安全性都得到了提升,但也导致了两个版本间的不兼容

Laravel具有富有表达性且简洁的语法,提供了成熟的路由、中间件、artisan控制台等功能,对composer的支持也是最好的,有着十分完善的安全机制,适合于大中型网站的开发

 

PHP方向:

一、PHP7有哪些特性

答:1.PHP7使用新的 Zend Engine 3.0, 比PHP5.6性能提高两倍, 降低了 50% 的内存   消耗。 它可以服务于更多的并发用户,无需任何额外的硬件

       2.PHP7减少了内存分配次数,更多的使用栈内存,缓存数组hash值,使用大块连续     内存代替小块碎片内存

       3.PHP7新增吧如下新特性:

① 新增加了标量类型声明

② 新增加了函数的返回类型声明

③ 新增了空接合操作符 ??

④ 新增加了结合比较运算符 <=>

⑤ 新增加匿名类 new class

⑥ 致命错误,现在改成抛出异常  Error类

⑦ 全面一致的64位支持

  1. PHP7弃用了如下功能:

①     PHP4风格的构造函数

②     静态调用非静态方法

③     password_hash() - salt 选项

④     capture_session_meta SSL上下文选项

⑤     移除了一些老的不在支持的SAPI(服务器端应用编程端口)和扩展

 

二、什么是设计模式,简要描述单例模式、工厂模式的特点及实现方法

答:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设 计经验的总结,简而言之,设计模式就是前人总结的特定场景下的特定解决方案,Java

中有23种设计模式,而在php中设计模式用到的较少,比较常见的有单例和工厂

1.单例模式(Singleton Pattern)属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

查看代码
class single{
       private static $instance;
       private function  __construct(){}
       private function  __clone(){}
       public static function getInstance(){
               //如果本类中的$instance还没有数据
                if( !self::$instance ){
                  self::$instance = new self;
                 }
                return self::$instance;
       }

2.工厂模式(Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方 式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一       个共同的接口来指向新创建的对象

查看代码
class Factory{
       public static function getInstance($className){
           if(file_exists($className.”.class.php”))
$object=new $className();
return $object;
}
}

三、什么是算法,简要描述冒泡排序,插入排序,选择排序,快速排序算法的特点

答:算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制,简而言之,算法就是解决问题的步骤,比较常见的排序算法有冒泡排序,插入排序,选择排序,快速排序等

  1. 冒泡排序(Bubble Sort)是一种简单的排序算法。它依次比较两个相邻元素,如果发现大小顺序错误立即进行位置交换,这样最大(或最小)的元素会经由交换慢慢 “浮”出,冒泡之名由此而得
查看代码
function maopao(){ $l = count($arr); for($j=0;$j<$l-1;$j++){ for ($i=0;$i<$l-1-$j;$i++){ if($arr[$i]< $arr[$i+1]){ $temp = $arr[$i]; $arr[$i] = $arr[$i+1]; $arr[$i+1] = $temp; } } } }
  1. 选择排序(Selection sort)是一种简单直观的排序算法。它在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。相对于冒泡排序大大减少了替换的次数
  2.  插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法,它从第一个元素开始,认为该元素已经被排序取出下一个元素,在已经排序的元素数组中从后向前比较,如果该元素(已排序)大于新元素,将新元素插入到该元素之前,如果该元素(已排序)小于新元素,将新元素插入到该元素之后,是对于冒泡排序大大减少了比较次数
  3. 快速排序是由东尼·霍尔所发展的一种排序算法。其原理在于找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组,遍历整个数组元素,如果遍历到的元素比当前的元素要小,那么就放到左边的数组,否则放到右面的数组,然后再对新数组进行同样的操作。是四种排序算法中速度最快的

 

四、HTTP有哪几种请求方式,各有什么作用

答:1、Options   返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性

2、Get    从指定的资源请求数据

3、Post   向指定的资源提交要被处理的数据(提交表单、上传文件)

4、Put    向指定资源位置上上传其最新内容

5、Head  与 GET 相同,但只返回 HTTP 报头,不返回文档主体

6、Delete   删除指定资源

7、Trace   回显服务器收到的请求,用于测试和诊断

8、Connect   HTTP/1.1协议中能够将连接改为管道方式的代理服务器

 

HTTP服务器至少能实现get、head、post方法,其他都是可选的

 

五、GETPOST方式的区别

答:

 

六、简单介绍一下swoole

答:

  1. Swoole是运行在PHP下的一个extesion扩展,该扩展不是为了提升网站的性能,是为了提升网站的开发效率,利用Swoole扩展,开发一个复杂的Web功能,可以在很短的时间内完成
  2. Swoole使PHP 开发人员可以编写高性能的异步并发TCP、UDP、Unix Socket、HTTP,WebSocket 服务。
  3. Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域

 

七、什么是AjaxAjax的作用?实现Ajax的方式有哪些

答:

AJAX并不是一种语言,而是一种创建交互式网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

作用:①减轻服务器的负担,AJAX一般只从服务器获取需要的数据。

②无刷新页面更新,减少用户等待时间。

③更好的客户体验,可以将一些服务器的工作转移到客户端完成,节约网络资源,提高用户体验

④促进显示与数据相分离

 

常用的使用方式有以下三种:

$.ajax()

查看代码
$.ajax({
url:'服务器url地址',
data:'',
type:'post|get',
dataType:'xml|html|text|json|script',
success:function(res){
},
error:function(xhr){
       },            
  timeout:2000,
  async:true     ,
  cache:false  
})

$.get()

查看代码
$.get('服务器url地址'"json格式或字符串格式"function(res){   
        //处理返回的数据
}), "xml|html|json|text|script")

$.post()

查看代码
$.post('服务器url地址'"json格式或字符串格式"function(res)
        //处理返回的数据
}), "xml|html|json|text|script")

 

八、PHP中包含文件的方式有哪些,区别是什么?

答:include、require、include_once和require_once都可以用来引入文件

    include如果引入文件不存在,则报警告级别的错误,不会影响后面代码的继续执行

    require如果引入文件不存在,则报致命级别的错误,后面程序不再继续执行

    如果要引入的文件对于后码的程序是不可缺少的建议用require,反之用include

    include_once和require_once在引入之前会自动判断该文件是否已被引入,如果已被引入则不再重复引入

 

九、简述sessioncookie的工作原理,以及两者之间的关系

答:由于http协议是无状态协议,无法对用户进行会话跟踪,session和cookie都是一种用于会话跟踪的技术

    Cookie工作原理:

    1.浏览器第一次访问服务器时,服务器给浏览器分配一个session_id,然后将session_id以响应给浏览器

    2.浏览器将以session_id作为名称在客户机上创建cookie文件,用来保存会话信息

    3.浏览器以后每次访问服务器都需要携带session_id

    4.服务器根据session_id来判断是哪个用户来访问

    Session工作原理

     1.浏览器第一次访问服务器时,服务器给浏览器分配一个session_id,并以session_id作为名称在服务器上创建session文件,用来保存会话信息

     2.再将session_id以cookie的方式响应给浏览器,浏览器保存session_id

     3.浏览器以后每次访问服务器都需要携带session_id

     4.服务器根据session_id来判断是哪个用户来访问

 

     区别:session信息存在服务器端,安全性高,但是会占用服务器存储空间,主要应用于用户登录、购物车等功能

               cookie信息存在客户端,安全性低,但是不会占用服务器存储空间,主要应于浏览历史记录等功能

     关系 :Session默认是要借助cookie来在浏览器中保存Session_id,但是如果客户端的cookie被禁用,还可以通过url地址来传替session_id,session依赖于cookie ,禁用cookie后session不能用

 

十、OOPPOP的区别

答:面向过程(POP)以事件为中心,分析出解决问题的步骤,然后用代码将这些代码一步步实现

   优点:性能比较高,执行速度比较快

   缺点:不易维护,不易复用,不易扩展

   应用:主要针对性能要求很高的情况,比如单片机、嵌入式开发、操作系统驱动

 

   面向对象(OOP)以事物为中心,一切都看作对象,由实体引发事件

   优点:易维护、易复用、易扩展

   缺点:性能底,开销大

   应用:软件开发的主流

 

十一、谈谈OOP的三大特征

答: 封装:简单来说就是对某一类事物的属性和行为的抽象,并且通过访问控制修饰符对访问进行控制。

       继承:通过继承子类可以获取父类的属性和方法,并且可以进行重写和扩展

       多态:同一个类的同一方法在作用不同的对象时可能表现出不同的形态,比如说人这个类实现化出的对象都会唱歌,但是有的人唱的好听,有的五音不全

 

十二、谈谈你对MVC的理解

答:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件架构模式,用来将数据、界面、业务逻辑进行分离。

   好处是有利用开发分工以及代码重用,现在主流的面向对象的框架基本都是基于MVC设计的。

   工作原理:控制器接收用户请求并选择合适的模型进行数据处理,模型模型进行数据处理并将处理结果返回控制器,控制器将数据分配给视图并选择视图进行展示

 

十三、谈谈你对Memcache的理解

答: Memcache是一个高性能的分布式的内存缓存系统,作用是用来减轻数据库访问压力,提高数据的访问速度。

  工作原理:当用户查询数据时首先判断内存中有没有缓存,如果缓存中存在则直接获取,如果缓存中没有则从数据库中读取,并写入缓存中。并且当数据库中的数据发生变化时(比如增加、更新、删除)需要更新缓存。

 

十四、谈谈你对Redis的理解

答:Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库存储系统,提供有多种语言的API

Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

Redis支持数据的持久化,可以将内存中的数据保持在磁盘中

Redis支持数据的备份,即master-slave主从同步。

 

十五、php支持多继承吗?用什么关键字来实现继承?如何解决PHP单继承的问题

答:不可以。PHP类只能继承一个父类,并用关键字“extends”标识

1)   通过接口来解决,一个类可以同时实现多个接口 implements

2)   通过trait来解决,一个类可以能过use来获取多个trait的属性和方法

3)   还可以使用__call()魔术方法来解决,但不推荐使用

 将各个父类实例化,然后作为子类的属性。这些父类提供一些公有的方法。当子类拥有某方法时,__call()函数不会被调用。这相当于“覆盖”了父类的方法。当调用了不存在的方法时,通过__call()方法依次从父类中寻找可以调用的方法

 

十六、写出30PHP函数

数组

in_array(判断数组中是否有某个元素)

implode(将数组按照一定规律分解)

json_encode(将数组转化成json)

sort(排序,有很多排序的函数这里就说一个)

array_push(将一个活多个单元压入数组的末尾)

array_merge(合并数组)

array_key_exists(检查键名是否存在于数组中)

array_unique(去除数组中重复的值,只能对一位数组起作用)

array_shift(移除数组中第一个单元)

字符串

substr(截取字符串)

strlen(获取字符串长度)

strpos(查找字符串首次出现的位置)

str_replace(字符串替换)

explode(将字符串按照规律转化成数组)

strtoupper(将所有字母变成大写)

strtolower(将所有字母变成小写)

ucfirst(将字符串的首字母变成大写)

ucwords(将字符串中每个单词的首字母变成大写)

strrev(反转字符串,其实不是很常用)

substr_replace(替换字符串的子串,注意与str_replace的区别)

strip_tags(去除html和php标记,可以选择保留想要的标签)

trim(去除空格)

explode(分割成数组)

十七、闭包的概念

闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁

十八、PHP中常见的错误类型有哪些?

答:     PHP中遇到的错误类型大致有3类。

提示:这都是一些非常正常的信息,而非重大的错误,有些甚至不会展示给用户。比如访问不存在的变量。

警告:这是有点严重的错误,将会把警告信息展示给用户,但不会影响代码的输出,比如包含一些不存在的文件。

错误:这是真正的严重错误,比如访问不存在的PHP类。

 十九、HTTP常用状态吗?

一二三四五原则:

    一. 消息系列

    二. 成功系列

    三. 重定向系列 302:临时转移成功,请求的内容已转移到新位置

    四. 请求错误系列 403:禁止访问 404代表未授权。

    五. 服务器端错误系列 500:服务器内部错误

MySQL方向:

一、关系型数据库设计三范式

答:为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型       数据库中这种规则就称为范式

第一范式(确保每列保持原子性)

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说       明该数据库表满足了第一范式。

第二范式(确保表中的每列都和主键相关,解决部分依赖)

第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和       主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一       个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表       中。

第三范式(确保每列都和主键列直接相关,而不是间接相关,解决传递依赖)

满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要 求一个数据库表中不包含已在其它表中已包含的非主关键字信息

 

二、什么是索引,索引的作用,什么时候需要使用索引,什么时候不需要使用索引

答:索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,相       当于图书上的目录,可以加快查询速度,但会使修改、插入、删除操作变慢,同时还会    占用较大的磁盘空间

可以通过explain语句对SQL语句进行分析,来决定哪些字段需要创建索引,一般情   况下,可得出以下结论:

必须创建索引的情况:

1.where子句、group子句中出现的字段,要创建索引

2.order by子句的字段,要创建索引

3.统计聚合函数中的字段,要创建索引。比如count(字段)  、max(字段)

 

不需要创建索引的情况:

1.如果需要取到表中所有记录,则没必要创建索引

2.对非唯一有大量重复值的字段,没必要创建索引,如性别

3.经常进行修改、删除等操作的字段,没必要创建索引

4.记录比较少的表,没必要创建索引

 

三、MyISAMInnoDB存储引擎的区别

答: 数据表的类型由存储引擎来决定

     MyIsam类型的数据表不支持事务、不支持外键,访问速度快、支持全文索引

     InnoDB类型的数据表支持事务、支持外键、不支持数据压缩、写入速度慢、会占用更多内存和磁盘空间

 

四、什么是事务处理

答:事务处理有四个特性:ACID

    A是原子性:事务处理中所有的SQL操作都被看一个最小逻辑单元,这个逻辑单元中的操作要么全部执行成功,要么全部不执行

    C是一致性:只有合法的数据才能被写入数据库,否则事务将回滚到最初状态

    I是隔离性:事务允许多个用户对同一数据进行并发操作。但一个事务的处理结果如果影响到其他事务,则其它事务会回滚。

    D是可靠性: 事务处理完成后,对数据的影响是永久的,即使出现系统故障也不会丢失

 

五、SQL注入漏洞产生的原因?如何防止?

答:SQL注入的根本原因就是通过拼接SQL语句进行攻击。

常见的预防措施有:

  1.开启配置文件中的magic_quotes_gpc和magic_quotes_runtime设置

  2.Php配置文件中设置register_globals为off,关闭全局变量注册

  3.执行sql语句时使用addslashes进行sql语句转换

  4.Sql语句书写尽量不要省略小引号和单引号

  5.字符串过滤,通过正则过滤传入的数据进行特殊字符和关键字的过滤

  6.对提交的数据进行SQL关键字的过滤 update delete insert .....

  7.提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。

  8.在前端通过js进行过滤

  9.控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。

 

六、数据库增删改查的SQL怎么写

答:1.插入

INSERT INTO 表名 [(字段名1,字段名2,…字段名n)] VALUES(‘值1’,‘值2’,…,’值n’);

2.删除

delete from 表名  [where 条件子句]  [order by 字段 asc|desc ]   [limit 条数]

3.修改

 update    表名  set  字段名=新值,字段名=新值,.......     [where 条件子句]   [order by 字段 asc|desc ]    [limit 条数]

4.查询:

select  |[字段名,字段名,...]   from 表名 

[where 查询条件]

[group by 分组]

[having 分组子条件]

[order by 排序字段名 [asc|desc]]

[limit m[,n]] 获取部分数据

 七、请简述drop、delete与trubcate的区别?

 

①  Drop和不带where语句的delete以及trubcate都会删除表内所有数据

② Trubcate和delete只删除数据不删除表中结构,drop语句将删除表的结构被依赖的约束,

③ Delete语句是数据库操作语言,这个操作会等事务提交之后才会生效,

④ Drop,truncate是数据库定义语言,操作立即生效,不能回滚

 

Linux方向:

一、Linux常见的发行版本有哪些?

答:Linux常见的发行版本大体分为两类,一类是商业公司维护的发行版本,一类是社区组 织维护的发行版本。前者以著名的redhat(RHEL)为代表,后者以debian为代表

1) 红帽系列的:

RedHat Enterprise Linux  7 (红帽企业版,功能强大,非常稳定)

CentOS 7  (redhat的社区版,功能和RHEL类似,但免费)

Fedora  28  (就是redhat的桌面版本,界面优雅,功能和工具版本都非常靠前,但不 是很稳定)

2) Debian系列:

Debian  9  (社区类Linux发展的典范,是迄今为止最遵循GNU规范的Linux系统)

Ubuntu 18 (Ubuntu是一个拥有debian所有的优点,以及自己所加强的优点的近乎完   美的Linux桌面系统)

 

二、Linux远程连接一般使用什么协议?你常用的远程连接工具是什么

答:远程连接一般采用SSH协议,端口为22

常用的远程连接工具有:XShell、SecureCRT

 

三、Vi编辑器有哪几种模式,分别有什么作用

答:1.    命令模式:vi默认进入的就是命令模式,可以进行光标定位、复制、粘贴、删除、        撤销等操作。

  1. 输入模式:在命令模式下输入a、A、i、I、o、O等字母可进行输入模式。进行输        入模式后可直接进行文本的编辑操作。按下ESC键可以返回命令模式
  2. 末行模式:在命令模式下输入:可进行末行模式。末行模式下可以进行文件的保存、      退出、设置行号、搜索、替换等操作

 

四、写出10Linux命令

 

五、Linux软件常见的安装方式有哪几种,各有什么特点

答:1. rpm命令安装,特点是使用rpm包安装,但是需要手动解决软件的依赖关系

  1. yum安装,特点是通过yum源服务器下载并安装软件,而且yum会自动解决依赖关系
  2. 源码编译安装,特点是可以更快的获取到软件的最新版本,还可以根据用户需求灵活定制软件功能。

 

六、Linux中源码安装的步骤

答:

1../configure安装前的配置,设置安装目录、安装模块等选项

2.make 编译,生成可执行二进制文件

3.make install 安装

 

七、简单对比一下ApacheNginx这两款web服务软件

1.Nginx比Apache更轻量级,使用更少的内存及资源

2.Nginx有更好的抗并发能力,apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程

3.Nginx除了可以提供web服务还可以提供反向代理服务和邮件服务

4.Nginx 静态处理性能比 Apache 高 3倍以上

5.apache适合处理动态请求,所以现在一般前端用nginx作为反向代理抗住压力,apache作为后端处理动态请求。

6.Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端来使用 ,Apache 的组件比 Nginx 多

7.Apache比Nginx运行更加稳定

 

八、Linux任务计划如何实现

答:1.一次性任务计划:         at

      2.周期性任务计划:       crontab  -e

 

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

随笔 - 57, 文章 - 0, 评论 - 0, 阅读 - 23060

Copyright © 2025 君子不卿
Powered by .NET 9.0 on Kubernetes

//评论
点击右上角即可分享
微信分享提示