面试总结(持续更新中.....)

1. GET和POST的区别

  区别:

Get从服务器获取数据,Post向服务器传送数据

Get传值在url中可见,Post在url中不可见

Get传值一般在2KB以内,Post传值大小可以在php.ini中进行设置

Get安全性非常低,Post安全性较高,执行效率却比Post高

  建议:

get式安全性较Post式要差些包含机密信息建议用Post数据提交式;

做数据查询建议用Get式;做数据添加、修改或删除建议用Post方式

2. SESSION和COOKIE的区别

cookie数据存放在客户的浏览器上,session数据放在服务器上。

cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

3. SESSION多服务器间共享

服务器实现的 session 复制或 session 共享,如 webSphere或 JBOSS 在搭集群时配置实现 session 复制或 session 共享.致命缺点:不好扩展和移植。

利用成熟技术做session复制,如12306使用的gemfire,如常见内存数据库redis或memorycache,虽较普适但依赖第三方.

将 session维护在客户端,利用 cookie,但客户端存在风险数据不安全,且可以存放的数据量较小,所以将session 维护在客户端还要对 session 中的信息加密。

第二种方案和第三种方案的合体,可用gemfire实现 session 复制共享,还可将session 维护在 redis中实现 session 共享,同时可将 session 维护在客户端的cookie 中,但前提是数据要加密。

4. 浏览器禁用cookie后php如何保持session会话

可以用隐藏表单手动带上sessid

在使用session时,服务器会发送sessionid,标志为PHPSESSID(这个关键字可以在php.ini文件中配置),我们可以在超链接传输地址参数时,把PHPSESSID带上/或者带上常量sid,sid是php中sessionid的常量,一般sid的格式为PHPSESSID=6ibdh4timhdpi14acq1ianqte6,以key=value键值对方式记录,value是session文件的名称,可以在启动session之前,指定sessionid

if (isset($_GET['PHPSESSID'])){

session_id($_GET['PHPSESSID']);

}

session_start();

5. Redis

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

Redis 优势:性能极高 丰富的数据类型 原子性 丰富的特性。

6.什么是存储过程?用什么来调用?  MySQL存储过程

7. 数据库优化

(1)选择正确的存储引擎(2)优化字段的数据类型(3)为搜索字段添加索引(4)只返回需要的字段,避免使用Select *(5)使用 ENUM 而不是 VARCHAR(6)尽可能的使用 NOT NULL(7)固定表的长度(8)数据分页处理(9)减少交互次数(10)使用存储过程(11)防止SQL注入(11)提高SQL可读性(12)Like模糊查询 

8. HTTP协议

基于客户端/服务端(C/S)的架构模型,是一个无状态的请求/响应协议,通过URL进行数据传输和建立连接。

客户端请求格式:请求行(request line)、请求头部(header)、空行和请求数据。

服务器响应分别是:状态行、消息报头、空行和响应正文。

HTTP请求方法:GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE 和 CONNECT。

HTTP状态码:1**(信息), 2**(成功), 3**(重定向), 4**(客户端错误), 5**(服务器错误)

HTTP content-type(内容类型).

9. 微信开发

1. 微信运行机制

公众号与php之间用什么语言通信:Xml

如何接收公众号数据的:

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收数据  XML数据

2. 消息类型

   微信目前提供了7种基本消息类型,分别为:

(1)文本消息(text);(2)图片消息(image);(3)语音(voice)(4)视频(video)(5)地理位置(location);(6)链接消息(link);(7)事件推送(event)类型。掌握不同的消息类型发送时的数据传递格式

10. PHP7新特性

1PHP 标量类型与返回值类型声明

2PHP NULL 合并运算符

3PHP 太空船运算符(组合比较符)

4PHP 常量数组

5PHP 匿名类

6PHP Closure::call()

7PHP 过滤 unserialize()

8PHP IntlChar()

9PHP CSPRNG

10PHP 7 异常

11PHP 7 use 语句

12PHP 7 错误处理

13PHP intdiv() 函数

14PHP 7 Session 选项

15PHP 7 废弃特性

16PHP 7 移除的扩展

17PHP 7 移除的 SAPI

11. 浏览器数据库

随着浏览器的处理能力不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少用户等待从服务器获取数据的时间。

一、localStorage  — 本地存储  可以长期存储数据,没有时间限制。

      可以存储 :数组、json数据、图片、脚本、样式文件

function test(){

if(window.localStorage){//判断浏览器是否支持 localStorage

var ls=window.localStorage;

ls.setItem("name","张三");//设置值

var name= ls.getItem("name");//取值

ls.removeItem("name");//删除数据

}else{

alert('浏览器不支持 localStorage');

}

}

 存在的局限性: 子域名之间不能共享存储数据;超出存储范围后可以使用 LRU、FIFO 技术处理;

二、sessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。

三、IndexedDB

1、使用IndexedDB的原因

      现有的浏览器端数据储存方案,都不适合储存大量数据:cookie不超过4KB,且每次请求都会发送回服务器端;Window.name属性缺乏安全性,

 且没有统一的标准;localStorage在2.5MB到10MB之间(各家浏览器不同)。所以,需要一种新的   解  决方案,这就是IndexedDB诞生的背景。

2、什么是IndexedDB

        通俗地说,IndexedDB就是浏览器端数据库,可以被网页脚本程序创建和操作。它允许储存大量数据,提供查找接口,还能建立索引。

  这些都是localStorage所不具备的。就数据库类型而言,IndexedDB不属于关系型数据库(不支持SQL查询语   句),更接近NoSQL数据库。

3、IndexedDB的特点。

(1)      键值对储存。 IndexedDB内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括JavaScript对象。在对象仓库中,

        数据以“键值对”的形式保存,每一个数据都有对应的键名,键名是独一无二的,不能有重复,否则会抛出一个错误。

(2)异步。 IndexedDB操作时不会锁死浏览器,用户依然可以进行其他操作,这与localStorage形成对比,后者的操作是同步的。异步设计是为了防止大量数据的读写,拖慢网页的表现。

(3)支持事务。 IndexedDB支持事务(transaction),这意味着一系列操作步骤之中,只要有一步失败,整个事务就都取消,数据库回到事务发生之前的状态,不存在只改写一部分数据的情况。

(4)同域限制 IndexedDB也受到同域限制,每一个数据库对应创建该数据库的域名。来自不同域名的网页,只能访问自身域名下的数据库,而不能访问其他域名下的数据库。

(5)储存空间大 IndexedDB的储存空间比localStorage大得多,一般来说不少于250MB。IE的储存上限是250MB,Chrome和Opera是剩余空间的某个百分比,Firefox则没有上限。

(6)支持二进制储存。 IndexedDB不仅可以储存字符串,还可以储存二进制数据。

目前,Chrome 27+、Firefox 21+、Opera 15+和IE 10+支持这个API,但是Safari完全不支持。

IndexedDB是HTML5规范里新出现的浏览器里内置的数据库。对于在浏览器里存储数据,你可以使用cookies或local storage,但它们都是比较简单的技术,而IndexedDB提供了类似数据库风格的数据存储和使用方式。存储在IndexedDB里的数据是永久保存,不像cookies那样只是临时的。IndexedDB里提供了查询数据的功能,在online和offline模式下都能使用。你可以用IndexedDB存储大型数据。

IndexedDB里数据以对象的形式存储,每个对象都有一个key值索引。IndexedDB里的操作都是事务性的。一种对象存储在一个objectStore里,objectStore就相当于关系数据库里的表。IndexedDB可以有很多objectStore,objectStore里可以有很多对象。每个对象可以用key值获取。

IndexedDB vs LocalStorage

IndexedDB和LocalStorage都是用来在浏览器里存储数据,但它们使用不同的技术,有不同的用途,你需要根据自己的情况适当的选择使用哪种。LocalStorage是用key-value键值模式存储数据,但跟IndexedDB不一样的是,它的数据并不是按对象形式存储。它存储的数据都是字符串形式。如果你想让LocalStorage存储对象,你需要借助JSON.stringify()能将对象变成字符串形式,再用JSON.parse()将字符串还原成对象。但如果要存储大量的复杂的数据,这并不是一种很好的方案。毕竟,localstorage就是专门为小数量数据设计的,它的api是同步的。

IndexedDB很适合存储大量数据,它的API是异步调用的。IndexedDB使用索引存储数据,各种数据库操作放在事务中执行。IndexedDB甚至还支持简单的数据类型。IndexedDB比localstorage强大得多,但它的API也相对复杂。

对于简单的数据,你应该继续使用localstorage,但当你希望存储大量数据时,IndexedDB会明显的更适合,IndexedDB能提供你更为复杂的查询数据的方式。

IndexedDB vs Web SQL

WebSQL也是一种在浏览器里存储数据的技术,跟IndexedDB不同的是,IndexedDB更像是一个NoSQL数据库,而WebSQL更像是关系型数据库,使用SQL查询数据。W3C已经不再支持这种技术。具体情况请看:http://www.w3.org/TR/webdatabase/。

因为不再支持,所以你就不要在项目中使用这种技术了。

IndexedDB vs Cookies

Cookies(小甜点)听起来很好吃,但实际上并不是。每次HTTP接受和发送都会传递Cookies数据,它会占用额外的流量。例如,如果你有一个10KB的Cookies数据,发送10次请求,那么,总计就会有100KB的数据在网络上传输。Cookies只能是字符串。浏览器里存储Cookies的空间有限,很多用户禁止浏览器使用Cookies。所以,Cookies只能用来存储小量的非关键的数据。

IndexedDB的用法

想要理解IndexedDB,最好的方法是创建一个简单的web应用:把你们班的学生的学号和姓名存储在IndexedDB里。IndexedDB里提供了简单的增、删、改、查接口。

打开一个IndexedDB数据库

首先,你需要知道你的浏览器是否支持IndexedDB。请使用最新版的谷歌浏览器或火狐浏览器。低版本的IE是不行的。

window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;

if(!window.indexedDB)

{

    console.log("你的浏览器不支持IndexedDB");

}

一旦你的浏览器支持IndexedDB,我们就可以打开它。你不能直接打开IndexedDB数据库。IndexedDB需要你创建一个请求来打开它。

var request = window.indexedDB.open("testDB", 2);

第一个参数是数据库的名称,第二个参数是数据库的版本号。版本号可以在升级数据库时用来调整数据库结构和数据。

但你增加数据库版本号时,会触发onupgradeneeded事件,这时可能会出现成功、失败和阻止事件三种情况。

var db;

request.onerror = function(event){

    console.log("打开DB失败", event);

}

request.onupgradeneeded  = function(event){

    console.log("Upgrading");

    db = event.target.result;

    var objectStore = db.createObjectStore("students", { keyPath : "rollNo" });

};

request.onsuccess  = function(event){

    console.log("成功打开DB");

    db = event.target.result;

}

onupgradeneeded事件在第一次打开页面初始化数据库时会被调用,或在当有版本号变化时。所以,你应该在onupgradeneeded函数里创建你的存储数据。如果没有版本号变化,而且页面之前被打开过,你会获得一个onsuccess事件。如果有错误发生时则触发onerror事件。如果你之前没有关闭连接,则会触发onblocked事件。

在上面的代码片段里,我们创建了一个Object Store,叫做“students”,用“rollNo”做数据键名。

往ObjectStore里新增对象

为了往数据库里新增数据,我们首先需要创建一个事务,并要求具有读写权限。在indexedDB里任何的存取对象的操作都需要放在事务里执行。

var transaction = db.transaction(["students"],"readwrite");

transaction.oncomplete = function(event) {

    console.log("Success");

};

transaction.onerror = function(event) {

    console.log("Error");

}; 

var objectStore = transaction.objectStore("students");

objectStore.add({rollNo: rollNo, name: name});

从ObjectStore里删除对象

删除跟新增一样,需要创建事务,然后调用删除接口,通过key删除对象。

db.transaction(["students"],"readwrite").objectStore("students").delete(rollNo);

我把语句合并到了一起,变得更简单,但效果是一样的。

通过key取出对象

往get()方法里传入对象的key值,取出相应的对象。

var request = db.transaction(["students"],"readwrite").objectStore("students").get(rollNo);

request.onsuccess = function(event){

    console.log("Name : "+request.result.name);   

};

更新一个对象

为了更新一个对象,首先要把它取出来,修改,然后再放回去。

var transaction = db.transaction(["students"],"readwrite");

var objectStore = transaction.objectStore("students");

var request = objectStore.get(rollNo);

request.onsuccess = function(event){

    console.log("Updating : "+request.result.name + " to " + name);

    request.result.name = name;

    objectStore.put(request.result);

};

12.简单理解php的socket编程

13.三层结构

        所谓三层体系结构,是在客户端与数据库之间加入了一个中间件层,也叫组件层。这里所 说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也 不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一 台机器上。 三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中 间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通 讯与中间层建立连接,再经由中间层与数据库进行交换。

概念

表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。

业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。

 优点

无需开发客户端软件,维护和升级方便。

可跨平台操作。

具有良好的开放性和可扩充性。

便于数据库移植。

安全性好

资源重用性好。

缺点

有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

相对于不分层的编程方法,使用三层或多层架构的应用于程序运行效率低,代码量大,难度增加。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 3月1日面试(知春路一小公司)由浅入深 1.应用程序的生命周期。 有storyboard情况下: 1.main函数...
    Leo_hai阅读 145评论 0 1
  •   支持离线 Web 应用开发是 HTML5 的另一个重点。   所谓离线 Web 应用,就是在设备不能上网的情况...
    霜天晓阅读 1,011评论 0 2
  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 5,588评论 1 49
  • 三种本地存储方式 cookie 前言 网络早期最大的问题之一是如何管理状态。简而言之,服务器无法知道两个请求是否来...
    流动码文阅读 4,946评论 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,400评论 1 45