PHP模拟面试+技术题
开篇:
一个自信的有技术含量的自我介绍
关键词:聊天、推销自己、自信不浮夸、不少于3分钟
项目开发方向:
一、你做过哪些项目,简单描述一下这些项目
关键词: 项目功能概述、项目人数、项目工期、自己所负责模块
二、谈一下你对Laravel框架的理解
答: Laravel是一款简洁、优雅的、单入口的、基于面向对象和MVC软件设计模式的PHP Web开发框架
优点:
- 具有富有表达性且简洁的语法,代码比较明白易懂,跟英语句子差不多
- 安全机制非常齐全,防SQL注入攻击、防CSRF攻击等方面表现优秀
- 提供路由功能,提高了网站的安全性,更有利于url地址的优化
- 通过中间件可以对网站进行访问控制及日志记录,过滤非法请求
- 提供了大量的第三方开源库(composer收录的超过5500个包),可以快速方便的实现常见功能
- 借助于artisan命令行可以大大提高开发效率
- 网上文档非常丰富,社区也是非常活跃,现在全球范围内占有率最高,基本上所有的问题都可以找到答案
缺点:
- 源代码复杂,不太容易上手,对新手稍有难度
- 提供强大的开放功能的同时也牺牲了部分执行效率
三、简述微信公众号开发流程
答:
- 申请微信公众号(订阅号、服务号、企业号),开启开发者模式
- 搭建个人的微信公众号服务器
- 在公众号管理后台填写服务器配置,并进行微信加密签名验证
- 依据接口文档实现相应的业务逻辑
- 一些高级功能需要开通过微信认证,一年费用300元
注意:
- 使用CURL发送http请求
- 使用simplexml_load_string()将接收到的XML数据转为对象
- 使用sprintf()对发送的XML数据进行格式化处理
四、简述微信小程序开发流程
答:
- 申请微信小程序账号,获取小程序的AppID
- 下载安装小程序开发工具,填入刚刚申请到的AppID,创建一个小程序项目
- 小程序的代码由.json 后缀的JSON 配置文件,.wxml 后缀的 WXML 模板文件,.wxss 后缀的 WXSS 样式文件,.js 后缀的 JS 脚本逻辑文件四个部分组成。
- 搭建API服务与小程序进行数据交互
- 依据小程序开发文档进行项目开发
- 功能测试
- 发布上线
五、高并发大数据网站的优化方案
答:
- 服务器运维方面优化
① 负载均衡集群、故障转移集群
② 图片服务器、数据服务器、业务服务器分离
③ 增加服务器间网络带宽
④ 使用分布式文件系统(NFS)
⑤ 使用RAID磁盘阵列提高硬盘读写速度
⑥ 使用CDN(内容分发网络)加速
⑦ 搭建监控系统对服务器和网络性能进行实时监控
- 数据库方面优化
① 选择最合适的存储引擎
② 数据库主从分离、读写分离
③ 数据库分表、分离活跃数据
④ 数据库操作使用索引
⑤ 数据库使用储存过程
⑥ sql语句 避免select *
- 网站开发方面优化
① 使用分布式缓存,比如Memcache、Redis
② 采用页面静态化技术
③ 采用多线程处理方式
④ 对图片、CSS、JS 等静态资源进行合并以及gzip压缩处理
⑤ 对图片较多的页面采用延迟加载技术
⑥ 使用流量统计软件分析网站哪些页面访问流量最大,对具体页面优化
⑦ 控制大文件的下载 大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降
六、什么是二次开发,你用过哪些二次开发系统?
答:网站开发一般采用完全自主开发、使用框架开发和二次开发等方式
二次开发,简单的说就是在现有软件代码的基础上进行定制修改,功能的扩展,然后达到自己想要的功能效果
二次开发的类型:
- 基于公司现有产品的二次开发
- 基于PHP开源项目的二次开发
① 电商开源系统:ecshop、ecmall、shopnc
② 论坛开源系统:discuz、phpwind
③ 博客开源系统:wordpress
- 基于PHP开源CMS的二次开发
① PHPCMS: 面向对象,功能强大,但不适合新手
② 帝国CMS:面向过程,功能强大,比较容易
③ DedeCMS: 面向过程,很容易学习,但不太安全
七、如何实现团购功能?
答:
1.创建团购表,设置团购结束时间,团购数量,团购价格,团购规则,成团人数等
2.创建团购商品表,添加团购商品
3.创建团购用户表,保存已参加团购用户信息
4.当有新用户参加团购,判断团购用户人数是否达到成团人数,如果达到成团要求则发送成团通知并生成团购订单,并为之前所有用户发送成团通知和生成订单
八、如何实现闪购功能?
答:
- 创建闪购列表,添加闪购商品id,闪购开始时间,闪购结束时间,闪购价格,闪购商品数量等
- 当商品加入抢购列表使用Redis创建一个符合闪购商品数量的队列,每当有人点击闪购时从队列中推出一个元素,并生成订单,当队列内全部推出完毕时,结束抢购
- 当抢购时间结束时,关闭抢购渠道
九、如何实现微信支付功能?
答:
- 登录微信商户平台(https://pay.weixin.qq.com),申请微信支付功能
- 调用开发平台中的API进行开发
- 建议下载对应语言的官方SDK进行开发
- 也可借助网络上的第三方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位支持
- 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;
}
- 工厂模式(Factory Pattern)属于创建型模式,它提供了一种创建对象的最佳方 式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象
class Factory{
public static function getInstance($className){
if(file_exists($className.”.class.php”)){
$object=new $className();
return $object;
}
}
三、什么是算法,简要描述冒泡排序,插入排序,选择排序,快速排序算法的特点
答:算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制,简而言之,算法就是解决问题的步骤,比较常见的排序算法有冒泡排序,插入排序,选择排序,快速排序等
- 冒泡排序(Bubble Sort)是一种简单的排序算法。它依次比较两个相邻元素,如果发现大小顺序错误立即进行位置交换,这样最大(或最小)的元素会经由交换慢慢“浮”出,冒泡之名由此而得
function maopao($arr)
{
$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;
}
}
}
return $arr;
}
- 选择排序(Selection sort)是一种简单直观的排序算法。它在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。相对于冒泡排序大大减少了替换的次数
- 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法,它从第一个元素开始,认为该元素已经被排序取出下一个元素,在已经排序的元素数组中从后向前比较,如果该元素(已排序)大于新元素,将新元素插入到该元素之前,如果该元素(已排序)小于新元素,将新元素插入到该元素之后,是对于冒泡排序大大减少了比较次数
- 快速排序是由东尼·霍尔所发展的一种排序算法。其原理在于找到当前数组中的任意一个元素(一般选择第一个元素),作为标准,新建两个空数组,遍历整个数组元素,如果遍历到的元素比当前的元素要小,那么就放到左边的数组,否则放到右面的数组,然后再对新数组进行同样的操作。是四种排序算法中速度最快的
四、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方法,其他都是可选的
五、GET和POST方式的区别
答:
六、简单介绍一下swoole
答:
- Swoole是运行在PHP下的一个extesion扩展,该扩展不是为了提升网站的性能,是为了提升网站的开发效率,利用Swoole扩展,开发一个复杂的Web功能,可以在很短的时间内完成
- Swoole使PHP开发人员可以编写高性能的异步并发TCP、UDP、Unix Socket、HTTP,WebSocket 服务。
- Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域
七、什么是Ajax?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('服务器url地址',"json格式或字符串格式",function(res){
//处理返回的数据
}), "xml|html|json|text|script")
$.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在引入之前会自动判断该文件是否已被引入,如果已被引入则不再重复引入
九、简述session和cookie的工作原理,以及两者之间的关系
答:由于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不能用
十、OOP和POP的区别
答:面向过程(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()方法依次从父类中寻找可以调用的方法
十六、写出30个PHP函数
数组
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.记录比较少的表,没必要创建索引
三、MyISAM和InnoDB存储引擎的区别
答: 数据表的类型由存储引擎来决定
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默认进入的就是命令模式,可以进行光标定位、复制、粘贴、删除、撤销等操作。
- 输入模式:在命令模式下输入a、A、i、I、o、O等字母可进行输入模式。进行输入模式后可直接进行文本的编辑操作。按下ESC键可以返回命令模式
- 末行模式:在命令模式下输入:可进行末行模式。末行模式下可以进行文件的保存、退出、设置行号、搜索、替换等操作
四、写出10个Linux命令
1. ls — List
ls会列举出当前工作目录的内容(文件或文件夹)
2.mkdir — Make Directory
mkdir 用于新建一个新目录
3.pwd — Print Working Directory
显示当前工作目录
4.cd — Change Directory
切换文件路径,cd 将给定的文件夹(或目录)设置成当前工作目录。
5.rmdir— Remove Directory
删除给定的目录。
6. rm— Remove
rm 会删除给定的文件
7. cp— Copy
cp 命令对文件进行复制
8. mv— Move
mv 命令对文件或文件夹进行移动,如果文件或文件夹存在于当前工作目录,还可以对文件或文件夹进行重命名。
9. cat— concatenate and print files
cat 用于在标准输出(监控器或屏幕)上查看文件内容
10. tail — print TAIL(from last)
ail 默认在标准输出上显示给定文件的最后10行内容,可以使用tail -n N 指定在标准输出上显示文件的最后N行内容。
11.help
help会在终端列出所有可用的命令,可以使用任何命令的-h或-help选项来查看该命令的具体用法。图就省略啦,会有详细列表显示出来的。
12.exit
exit用于结束当前的终端会话。
13.who — Who Is logged in
who能列出当前登录的用户名。
14.su — Switch User
su 用于切换不同的用户。即使没有使用密码,超级用户也能切换到其它用户
五、Linux软件常见的安装方式有哪几种,各有什么特点
答:1. rpm命令安装,特点是使用rpm包安装,但是需要手动解决软件的依赖关系
- yum安装,特点是通过yum源服务器下载并安装软件,而且yum会自动解决依赖关系
- 源码编译安装,特点是可以更快的获取到软件的最新版本,还可以根据用户需求灵活定制软件功能。
六、Linux中源码安装的步骤
答:
1../configure安装前的配置,设置安装目录、安装模块等选项
2.make 编译,生成可执行二进制文件
3.make install 安装
七、简单对比一下Apache和Nginx这两款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