回答问题最好说上我项目中是怎么怎么做的,回答问题不是解释问题,要给出的确实的解决方案!
如果遇到不会的问题不要一言不发(把自己知道的想法全说出来,但不能瞎说)--(实在不会可以虚心的想面试官请教)--(表现出一种求知欲)
1、用自己学过的方法将字符串good_hesd_dss变成GoodHesdDss
//方法一
$a='good_hesd_dss';
$b='GoodHesdDss';
//
$d=explode('_', $a);
$d=implode(' ', $d);
$d=ucwords($d);
$d=str_replace(' ', '', $d);
echo $d;
//方法二
$d=str_replace('_', ' ', $a);
$d=ucwords($d);//将单词的首字母变为大写
$d=str_replace(' ', '', $d);
echo "
";
echo $d;
2、写5个不同的自己的函数,来获取一个全路径的文件的扩展名,允许封装 php 库中已有的函数。
//各个函数的解释
// 1.substr($str,3);获得字符串从下标3开始之后的元素 (包含下标3的元素)
// 2.strrchr($str,$a);/strstr($path,'.');获取到$a 元素之后的元素 (包含$a元素)
// 3.strrpos($str,$a);获得$a最后一次出现的下标
// 4.pathinfo($path) ;获得$path路径的各种信息
// 5.explode('.',$path )用点把$path字符串分成数组
// 6.end($a);获得数组中的最后一个元素
//
// strrpos— 计算指定字符串在目标字符串中最后一次出现的位置
//方法1
function f1($path){
return substr(strrchr($path, "."),1);
}
// //方法2
function f2($path){
// echo $path;
return substr($path, strrpos($path, '.')+1);
}
// //方法3
function f3($path){
echo '
';
var_dump(pathinfo($path));
return pathinfo($path)['extension'];
}
// // //方法4
function f4($path){
$a =explode('.',$path );
// return $a[count($a)-1];
return end($a);
}
//方法5
function f5($path){
$p =strstr($path,'.');
// return substr($p,1);
return substr($p,1);
}
// echo __FILE__;die;
$path =str_replace("\\", "/", __FILE__);
// echo $path;
// echo '
';
// // //方法1
// echo f1($path);
// echo '
';
// echo f2($path);
// echo '
';
// echo f3($path);
// echo '
';
// echo f4($path);
echo '
';
echo f5($path);
echo __FILE__;
?>
3、面向对象
如何理解面向对象
是一种编程思想
面向对象是对于面向过程说的。
面向过程:开发的代码执行效率高,但不利于代码的利用率和项目的扩展
面向对象的特性:
封装:一定的安全性提高代码的利用率
继承:方便更好的扩展和再次开发
多态:就是多种形态(PHP中没有真正的多态)
4
什么是三次握手?
建立TCP连接有三次操作(本质是在发送报文)可以理解为:
1、客户端给服务端发送一个消息(我要发消息)
2、服务端回复:准备好了可以发送
3、客户端再发送:接下来我开始发消息了
5谈谈你对数据库优化的想法
1、存储层
存储引擎的选择myisam innodb(支持事务)(用于关于金钱方面)(此时会引出二者区别的问题)
列(字段)的选择(选择合适的字段例如能用char就不用varchar 此时会引出char和varchar有什么区别的问题)
2、设计层
加索引(频繁使用的字段)(此时会引出你知道哪些索引)
分区、分表(当数据量较大的情况下)
3、SQL语句
1、查询时少用* in not in等(会降低查询速率)
2、当查询一条是 用limit 1
3、在where条件中尽量不要计算
4、当SQL语句查询慢时,可以用explain检查SQL语句运行的情况
4、架构层(自己看过一些资料)
当项目大是就得需要多台服务器用主从复制实现读写分离(也许会问你用过吗?)如果会尽情的说,不会(就说实际中没用用过这是我浏览一些博客。。。学到的)-----尽量体现自己的学习能力
6
TP框架中的单字母方法
M:实例化基类模型类
D:实例化自定义模型类
G:性能调试
I:接收参数的
U:URL地址
S:实现缓存的
7
TP框架中的四种访问模式
TP中有四种访问模式,分别是 0、1、2、3
0:普通模式
1:PATHINFO
2:REWRITE(重写模式)
3:兼容模式
myisam跟innodb引擎之间区别
https://www.pureweber.com/article/myisam-vs-innodb/
MyISAMInnoDB
存储结构每张表被存放在三个文件:
frm-表格定义
MYD(MYData)-数据文件
MYI(MYIndex)-索引文件
所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB
存储空间MyISAM可被压缩,存储空间较小InnoDB的表需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引
可移植性、备份及恢复由于MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了
事务安全不支持 每次查询具有原子性支持 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表
AUTO_INCREMENTMyISAM表可以和其他字段一起建立联合索引InnoDB中必须包含只有该字段的索引
SELECTMyISAM更优
INSERTInnoDB更优
UPDATEInnoDB更优
DELETEInnoDB更优 它不会重新建立表,而是一行一行的删除
COUNT without WHEREMyISAM更优。因为MyISAM保存了表的具体行数InnoDB没有保存表的具体行数,需要逐行扫描统计,就很慢了
COUNT with WHERE一样一样,InnoDB也会锁表
锁只支持表锁支持表锁、行锁 行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的
外键不支持支持
FULLTEXT全文索引支持不支持 可以通过使用Sphinx从InnoDB中获得全文索引,会慢一点
总的来说,MyISAM和InnoDB各有优劣,各有各的使用环境。
但是InnoDB的设计目标是处理大容量数据库系统,它的CPU利用率是其它基于磁盘的关系数据库引擎所不能比的。
我觉得使用InnoDB可以应对更为复杂的情况,特别是对并发的处理要比MyISAM高效。同时结合memcache也可以缓存SELECT来减少SELECT查询,从而提高整体性能。
myisam
1、表锁
2、相对于innodb数据读取速度略快
3、支持全文索引(全文索引只支持英文,可以使用搜索引擎实现)
4、支持压缩功能
innodb
1、支持事物功能
2、支持外键
3、支持行锁
4、低版本不支持全文索引(5.6之后支持)
myisam跟innodb存储方式
在mysql配置文件中有一个配置项datadir该配置项指定mysql数据库为文件时的存储地址
事物的应用场景
我们用的大多是在支付方面,例如订单提交(重要数据)
8
谈谈事务
简单说:事务就是一件事的完整性,一件事情有多个步骤,每一件都必须完成,否则回滚到起始点!
事物的四大特性(笔试可能性大)
1、原子性:就是一件事要么成功要么失败没有其他可能
2、一致性:就是数据的一致性,例如A给B转500 那么A被减掉500 B必须加上500
3、隔离性:就是多个事物之间互不干扰
4、持久性:事务一旦提交,不可改变
9
关于防SQL注入你是怎么想的
SQL注入:主要也是利用和用户交互的地方进行攻击,主要是利用SQL,将(恶意)的SQL命令注入到后台数据库。
1、首先从业务逻辑上预防,在表单提交时就进行一次判断(用正则)
2、用PHP函数 addslashes()
3、Mysql也提供了转译函数mysql_real_escape_string($data,$link)---用此函数有一前提必须连接上数据库
4、在TP框架中有I()方法
等等
10
SQL语句中内连接与外链接的区别
1、内联:仅选出俩个表相互匹配的内容;inner join
2、外联:分为左连接 和 右连接 左连接就是以左表为主 右表多的数据不显示 少的数据用null补齐 (右连接同左连接一样)
11
状态码
1、消息
2、成功200:请求成功
3、重定向302:文件的离时移动
4、请求错误403:禁止访问 404:文件找不到
5、服务器错误502:服务器内部错误
12
关于权限控制符
1、Public:公共的 那都可以调用
2、Private:私有的 只能在本类中使用
3、Protected:受保护的 子类中可以用
13
屏蔽错误的方法
1、错误抑制符@
2、PHP.ini中display_errors=on/off
3、脚本前边将一句error_reporting(0)
4、框架中有开发模式、生产模式
14
你知道哪些超全局变量
$_GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_REQUEST
$_COOKIE
$_SESSION
15
PHP的运行模式(了解)
1、运行模式
关于PHP目前比较常见的五大运行模式:
1)CGI(通用网关接口 / Common Gateway Interface)
2)FastCGI(常驻型CGI / Long-Live CGI)
3)CLI(命令行运行 / Command Line Interface)
4)Web模块模式(Apache等Web服务器运行的模式)
5)ISAPI(Internet Server Application Program Interface)
相关网址:
http://blog.csdn.net/zxxssdsd/article/details/52431204
16
百万级秒杀如何处理(大体思路)(了解至少会说)
静态化(俩个静态页面)+锁+队列(需要多方面结合);首先用户看到的是倒计时的一个静态页面;{另外一个静态页面是货物被抢光的提示页面};锁的作用是当将购的用户在Redis中充到一定的数量时,将其锁住,然后让Redis队列中用户去购买货物;
17
开发模式
框架、原生、二次开发
18
写出至少五个PHP中常用的魔术方法,并说明各自的用法。
__sleep:serialize(序列化)之前被调用
__wakeup:unserialize(反序列化)时被调用
__toString:打印一个对象时被调用
__set__state:调用var_export时被调用,用__set__state的返回值作为var_export的返回值
__construct:构造函数,实例化对象时被调用
__destruct:析构函数,当对象销毁时被调用
__call:对象调用某个方法,若存在该方法,则直接调用,若不存在,则调用__call函数
__get:读取一个属性时,若属性存在,则直接返回,若不存在,则调用__get函数
__set:设置一个对象的属性时,若属性存在,则直接赋值,若不存在,则调用__set函数
__isset:检测一个对象的属性是否被设置时调用
__unset:unset一个对象的属性时被调用
__clone:clone一个对象时被调用
__autoload:实例化一个对象时,如果对应的类不存在,则该方法被调用
19
Redis和 memcache的区别
1、Redis支持持久化
2、支持的数据类型memcache只支持字符串 Redis 字符串 哈希 有序集合 无序集合 列表
3、大小memcache 1 M Redis 512 M
4、对key的限制 Redis 无限制 memcache 250个字符
5、线程memcache多线程 Redis 单线程
20
写出下列几个预定义全局变量的作用
$_SERVER['DOCUMENT_ROOT'] //当前运行脚本所在的文档根目录
$_SERVER['HTTP_HOST '] //当前请求的 Host: 头部的内容
$_SERVER['REMOTE_ADDR'] //正在浏览当前页面用户的 IP 地址
$_SERVER['HTTP_REFERER'] //链接到当前页面的前一页面的 URL 地址
$_SERVER['SERVER_NAME'] //当前运行脚本所在服务器主机的名称
$_FILES //包含有所有上传的文件信息
S_FILES['userfile']['name'] //客户端机器文件的原名称
$_FILES['userfile']['type'] //文件 MIME 类型,如果浏览器提供此信息的话,如“image/gif”。
$_FILES['userfile']['size'] //已上传文件的大小,单位为字节
$_FILES['userfile']['tmp_name'] //文件被上传后在服务端储存的临时文件名
$_FILES['userfile']['error'] //和该文件上传相关的错误代码
21
用PHP 打印出前一天的时间格式是 2006-5-10 22:21:21。
22
将1234567890 转换成 1,234,567,890 每 3 位用逗号隔开的形式
23
用PHP 写出显示客户端 IP 与服务器 IP 的代码。
客户端 IP:$_SERVER["REMOTE_ADDR"]
服务器端 IP:$_SERVER["SERVER_ADDR"]
24
执行程序段和?php echo (-8)%3 ?>将输%为取模运算,输出-2
$a % $b 其结果的正负取决于 $a 的符号。
25
include和 require区别
二者区别只有一个,那就是对包含文件的需求程度,
include 就是包含,如果被包含的 文件不存在的话,那么则会提示一个错误,但是程序会继续执行下去。
而require 意思是需要,如果被包含文件不存在或者无法打开的时候,则会提示错误,并且会终止程序的执行。这两种结构除了在如何处理失败之外完全一样。once 的意思是一次,那么 include_once 和 require_once 表示只包含一次,避免重复包含。
26
session与cookie
序言:帮助理解
【应该跟客户端,浏览器这些有关。当浏览器第一次请求时,服务器创建一个session对象,同时生成一个sessionId,并在此次响应中将sessionId以响应报文的方式些回客户端浏览器内存或以重写url方式送回客户端,来保持整个会话。关闭此浏览器窗口,其内存中的sessionId也就随之销毁。重新请求时,会重新生成一个sessionId给客户端浏览器,并存在浏览内存中。SessionID值是使用保证唯一性和随机性的算法生成的,其中保证唯一性的目的是确保会话不冲突,保证随机性的目的是确保怀有恶意的用户不能使用新的SessionID来计算现有会话的 SessionID。】
面试回答方式:分层次去讲,包括(存储位置,存储大小,存储方式,安全性,机制等)
Cookie,session的区别:
位置不同:cookie是储存在浏览器端
Session是储存在服务器端
存储大小:cookie: 2k ,但针对不同浏览器存储的 cookie 个数会有所不同
Session:理论上没有限制大小
储存类型:cookie只可以存储字符串
Session除了资源型都可以
安全性:
机制:session是基于 cookie 的
数据类型:
cookie只能存储字符串,
session是以序列化来进行存储的
session共享
对于做负载均衡的项目session是不能正常使用的。因此需要将session写入一个共同的存储介子
1、session写入数据库(每次使用session都需要查询数据,会给数据库增加负担)
2、session写入到memcache中
cookie禁用session怎么办?
27
nginx与Apache的区别
1、Apache功能强大。但是并发性不好,基于进程的模式
2、Nginx轻量,但是并发性能特别好。基于进程的模式,异步非阻塞网络模式。
3、Apache稳定性比Nginx要强
4、Nginx对静态资源处理效率非常高 因为在Nginx下有一个缓冲expire模块
28
char与varchar的区别
29
你知道索引有哪些(索引是加在经常查寻的字段上原因是需要消耗一定的空间)---以空间互换时间
主键主键是特殊的唯一索引一张表只有一个
唯一索引字段内容不能重复一张表可以有多个
普通索引
复合索引
等
30
你用过的加密方法
MD5()、sha1()、sha2()
说的时候把自己的思想说进去(例如加盐)
31
MVC理解(一种开发模式)
由模型(model),视图(view),控制器(controller)完成的应用程序由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
MVC 是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。视图是用户看到并与之交互的界面。模型表示企业数据和业务规则。控制器接受用户的输入并调用模型和视图去完成用户的需求。
MVC 的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理MVC 的缺点:没有明确的定义,完全理解 MVC 并不容易。不适合小型规模的应用程序。
32
数据类型
在js中包括基本数据类型和混合数据类型。
基本数据类型(5种):Number、String、Boolean、null、undefined
混合数据类型(1种)object
PHP
基本数据类型
1、字符串
2、整形
3、布尔
4、浮点
复合数据类型
5、数组
6、对象
特殊数据类型
7、null
8、资源
33
无限级分类
1、数据库分类表的设计:就是在表中加一个pid 字段、子类的pid就是父类的id
34
正则
邮箱
/^\w{5,15}@\w{2,4}\.[a-zA-Z]{2,4}$/参考
手机号
/^0?1[34578]\d{9}$/参考
用户名
1到8位有且大小写字母加数组
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-z][\w]{1,8}$/ 参考
35
JSon数据格式(主流)
Json是一种数据格式:主要就是下面的两个函数
json_encode($str)将数据转化为JSon格式
json_decode($json[参数]),将JSon格式的数据转化为数组(参数=true)或对象(参数=false或默认)
php:
json_encode()把数组变为一个json格式的字符串
json_decode()把json格式字符串变为一个php可以解析的变量
js:
JSON.parse()把json格式的字符串变为一个js可以解析的变量
JSON.stringify()把json对象变为json格式的字符串
36
Php正则
function validate($name){
$pattern = '/^[a-zA-Z][a-zA-Z0-9]{5,}$/';
preg_match($pattern,$name,$matches);//参数1:正则规则、参数2:要匹配的字符串,参数3:匹配到的结果
var_dump($matches);
}
validate('abcdefegjeigj123');
37
序列化与反序列化函数
serialize()将数据格式化。
unserialize()将格式化的数据还原。
38
Ajax:
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
39
跨域理解
什么是跨域?
三个条件:1、域名不一样。2、协议不一样。3、端口号不一样
跨域的方法?
解决跨域的办法
1、
40
时间类型
Datetime:日期时间类型 2017-06-08 15:16:00
date:日期类型2017-06-08
time:时间类型15:16:00
Year:年份2017
Timestamp:时间戳
41
Memcache
Memcache是内存型的缓存系统。以键值对的方式存储数据
1、memcache是将数据写入到内存中的
2、缓存系统:内存中数据会丢失(服务器重启)
3、键值对:通过键名获取到数据
42
Xss攻击
thinkPHP中
本身I方法是可以防Xss攻击的;I方法的核心函数是htmlspecialchars
但是他把标签实体化后;相册的图片就显示不出来;
我们可以引入一个插件核心函数是HTMLPurifier他可以通过设置让你不想实体化的标签跳过;
43
.网络7层架构
分层
应用层(Application):
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS
表示层(Presentation Layer):
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、DECOIC、加密格式等
会话层(Session Layer):
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
传输层(Transport):
定义传输数据的协议端口号,以及流控和差错效验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层(Network):
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
数据链路层(Link):
建立逻辑连接、进行硬件地址寻址、差错效验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层(Physical Layer):
建立、维护、断开物理连接。(由底层网络定义协议)
图1显示了 TCP/IP 层级模型结构,应用层之间的协议通过逐级调用传输层(Transport layer)、网络层(Network Layer)和物理数据链路层(Physical Data Link)而可以实现应用层的应用程序通信互联。
应用层需要关心应用程序的逻辑细节,而不是数据在网络中的传输活动。应用层其下三层则处理真正的通信细节。在Internet整个发展过程中的所有思想和着重点都以一种称为 RFC(Request For Comments)的文档格式存在。针对每一种特定的 TCP/IP 应用,有相应的 RFC 文档。一些典型的 TCP/IP 应用有 FTP、Telnet、SMTP、SNTP、REXEC、TFTP、LPD、SNMP、NFS、INETD 等。RFC 使一些基本相同的 TCP/IP 应用程序实现了标准化,从而使得不同厂家开发的应用程序可以互相通信
44
端口号
45
版本号(仅供参考)
46
闭包
掌握闭包必须要清楚js中的全局作用域(window)和局部作用域(函数内部)
变量的作用域无非就是两种:全局变量和局部变量(es6有let定义的块级作用域)
由之前的知识可以得知:
函数内部可以读取全局变量,函数外部无法读取函数内的局部变量。
但是要注意的是在函数内部声明一个变量的时候如果没有使用var指定,实际上是声明了一个window的全局变量,会成为window的一个全局属性
闭包介绍
JavaScript中当一个函数执行时可以让其内部的局部变量不受其他作用域的影响,同时当函数执行完毕后还可让其内部的局部变量常驻内存不销毁的运行机制称之为JavaScript的闭包。
先看下方的代码
注意:上面的函数f2其实就是一个闭包函数,f2首先在自己的函数AO环境中寻找,如果没有找到则去它父函数f1找变量a,找到之后,就把变量获取到。
也可以把闭包这样理解:闭包就是获取一个函数作用域内变量的函数
注意:闭包建议少用,因为闭包使用的局部变量没有销毁,一致驻留在内存中,严重的话可能会造成网页性能的问题。
47
SQL
格式:SELECT [选项子句] 字段表达式子句 [FROM子句] [WHERE子句] [GROUP BY子句] [HAVING子句] [ORDER BY子句] [LIMIT子句]
48
外连接
语法格式:Select * from table1 inner join table2 on 连接条件;
外连接分为:
Left join :左外连接,以左表为主,左表的数据将全部出现在结果中,包括和右表连接失败的记录,这些失败记录的右表部分用null补齐
Right join :右外连接,以右表为主,右表的数据将全部出现在结果中,连接失败的左表部分用null补齐
49
版本控制器
Git
svn
50
写出发帖数最多的十个人的SQL 利用下表:post(id,uid,title,content)
解答:select uid,count(uid) as total from post GROUP BY uid order by total desc limit 2
查询结果:
51
修改session的生存时间
如何修改session的生存时间:
方法一:在php.ini里,修改session.gc_maxlifetime=1440 //默认时间
方法二:(代码实现):
$lifeTime=24*3600; //保存一天
session_set_cookie_params($lifeTime);
session_start();
51
关于cookie
cookie
主的作用就是用于标识客户端(将唯一一个数据保存到客户端浏览器的cookie中)。
cookie的操作:
setcookie(name,value,expire,path,domain,secure,httponly);
说明:
expire 有效期单位秒
path 路径
默认cookie的路径必须是所请求的php文件的父路径。
整站有效 ‘/’
domain 可以实现跨域
secure 设置是否只允许https携带cookie
httponly 设置是否只允许php访问cookie
所有的客户端携带过来的数据都是保存在$_COOKIE
cookie值的问题:
cookie的值只能是字符串,cookie名也只能是字符串
setcookie(‘arr[name]’,’zhansan’)
setcookie(‘arr[age]’,20);
删除cookie
setcookie(name,value,time()-1);
52设计出一个高性能的 可扩展得web 系统架构
53可看1月15号刘老师的视频
解答:
定时脚本的编写
54
常用函数
55
对盒子模型的理解
https://www.cnblogs.com/TwinklingZ/archive/2016/03/29/5334363.html
56
jQuery常用哪些函数和过滤器
http://blog.csdn.net/sinat_21843047/article/details/77248172
http://www.jb51.net/article/84997.htm
JS常用函数
1.var offset=$("#id名字").offset();//获得当前id控件的位置信息
offset.left;//获得当前控件离浏览器左边框的距离
offset.top;//获得当前控件离浏览器上边框的距离
2.$("#id").height();//获得当前控件的高度--$("#id").height(num);//设置当前控件的高度--$("#id").width();//获得当前控件的宽度--$("#id").width(num);//设置当前控件的宽度
3.$("#id").css("top"--"left"--"display:block显示,none不显示");//设置当前控件的css样式()里面可以写各种该控件的属性
4.$("#id").val(str)//给当前控件赋值--如果是给select标签赋值就可以给让select标签选中这值$("#bqmbselect").change();
5.$("#id").empty();//清空当前控件的值
6.$("#id name")//获得当前控件的子控件 --name指标签名字
7.$("#id").append(str);//动态的给该控件写代码,可以写标准的html代码,例如:$("#mydiv ul").append("
" value2 "
");
8.$("#id li").each(function(a,b){});//循环一个控件,例如:li,a为当前循环内容的索引,b为每一个当前循环的控件,都为必填
9.$(a).attr(b);//取得a控件b属性的值
10.setTimeout(function(){},100);//控制方法在多少毫秒后执行
11.$("#id").focus(function(){});//聚焦事件
12.$("#id").blur(function(){});//失焦事件
13.eval(str);//动态执行字符串
14.$("#id").html();//获得当前控件在html上显示的值 $("#id").text();//获取input框的值
15.$("#id").click(function(){});//点击事件
16.$.trim(str);//去空格
17.$.cookie("cookieName","cookieValue");
18.$("#id").prop("selected",'selected');//设置当前控件的属性的值
19.$("#id").hover(function(){});//鼠标悬停事件
20.$.ajax({
type : "POST",
url : url,
data : json,
dataType : "json",
success : function(data) {}
});
21.$("#id").find("option[value='?'] input[name='?'] select[name='?']")
22.isNaN(str);//判断一个字符串是不是数字,返回的是一个boolean
23.parseFloat(str);//将一个数字字符串转换成数字
24.var jsvalue=(isNaN($.trim($(n).find("td").eq(3).html())) ||
$.trim($(n).find("td").eq(3).html())=="")?0:parseFloat($.trim($(n).find("td").eq(3).html()));
25.$("#id").parent();//获得该id元素的父元素
26.$("#id").children();//获得该id元素的子元素,$("#id").children("a");//获得该元素子元素中的a标签元素
27.$("#id").sibling();//获得该id元素的同辈元素
28.$("#id").addClass("abc");//给该Id元素添加名字为abc的样式,删除为removClass("abc");
29.$("#id").unbind();//删除该id绑定的函数事件,括号内有字符串的话则删除的是指定事件,例:"click"
30.$("#id").clone(true);//克隆
31.$("#id").not($("#id last"));//不是id中最后一个
32.Num.toFixed(num);//保存数字Num的num位小数
33.$("#id").hide();//隐藏id
34.$("#id").show();//显示id
35.alert("val");//输出值
1.jQuery的过滤器
a.$("div:first")选取所有
元素中的第一个
元素
b.$("div:last")选取所有
元素中的最后一个
元素
c.$("input:not(.myClass)")选取class不是myClass的元素‘
e.$("input:even")选取索引是偶数的元素
f.$("input:odd")选取索引是奇数的元素
g.$("input:eq(1)")选取索引等于1的元素
h.$("input:gt(1)")选取索引大于1的元素(注:大于1,而不包括1)
i.$("input:lt(1)")选取索引小于1的元素(注:小于1,而不包括1)
2.内容过滤选择器
a.$("div:contains('我')")选取含有文本'我'的
b.$("div:empty")选取不包含子元素(包括文本元素)的
c.$("div:has(p)")选取含有
的
57
display 和float常用的值
http://blog.csdn.net/feifei884431/article/details/51438989
float:left(或right),向左(或右)浮动
display:inline和block,
58
同步和异步的理解
先解释一下同步和异步的概念
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
使用者用于调用WEB服务的通信选择:同步或异步。
使用者可以同步或异步实现服务调用。从使用者的观点来看,这两种方式的不同之处在于:
同步——使用者通过单个线程调用服务;该线程发送请求,在服务运行时阻塞,并且等待响应。
异步——使用者通过两个线程调用服务;一个线程发送请求,而另一个单独的线程接收响应。
59
商品属性
重点强调一下其中用到ajax,异步功能(添加图片/删除相册)
逻辑:
60
http 与https区别
HTTP和HTTPS的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
HTTP与HTTPS有什么区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
61了解
TCP和UDP的区别(转)了解
TCP协议与UDP协议的区别
首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信!
TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。
TCP/IP协议集包括应用层,传输层,网络层,网络访问层。
其中应用层包括:
超文本传输协议(HTTP):万维网的基本协议.
文件传输(TFTP简单文件传输协议):
远程登录(Telnet),提供远程访问其它主机功能,它允许用户登录
internet主机,并在这台主机上执行命令.
网络管理(SNMP简单网络管理协议),该协议提供了监控网络设备的方法,以及配置管理,统计信息收集,性能管理及安全管理等.
域名系统(DNS),该系统用于在internet中将域名及其公共广播的网络节点转换成IP地址.
其次网络层包括:
Internet协议(IP)
Internet控制信息协议(ICMP)
地址解析协议(ARP)
反向地址解析协议(RARP)
最后说网络访问层:网络访问层又称作主机到网络层(host-to-network).网络访问层的功能包括IP地址与物理地址硬件的映射,以及将IP封装成帧.基于不同硬件类型的网络接口,网络访问层定义了和物理介质的连接.
当然我这里说得不够完善,TCP/IP协议本来就是一门学问,每一个分支都是一个很复杂的流程,但我相信每位学习软件开发的同学都有必要去仔细了解一番。
下面我着重讲解一下TCP协议和UDP协议的区别。
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。
详细点说就是:(文章部分转载http://zhangjiangxing-gmail-com.iteye.com,主要是这个人讲解得很到位,的确很容易使人理解!)
TCP三次握手过程
1
主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,
主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.
2 主机B 收到主机A的请求后,用一个带有确认应答(ACK-
ACK (Acknowledgement)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。在TCP/IP协议中,如果接收方成功的接收到数据,那么会回复一个ACK数据。通常ACK信号有自己固定的格式,长度大小,由接收方回复给发送方。
)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:
我已经收到你的请求了,你可以传输数据了;你要用哪佧序列号作为起始数据段来回应我
3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了
这样3次握手就完成了,主机A和主机B 就可以传输数据了.
3次握手的特点
没有应用层的数据
SYN这个标志位只有在TCP建产连接时才会被置1
握手完成后SYN标志位被置0
TCP
建立连接要进行3次握手,而断开连接要进行4次
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B 端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端
和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础
名词解释
ACK TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段
都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.
SYN 同步序列号,TCP建立连接时将这个位置1
FIN 发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1
TCP的包头结构:源端口 16位
目标端口 16位
序列号 32位
回应序号 32位
TCP头长度 4位
reserved 6位
控制代码 6位
窗口大小 16位
偏移量 16位
校验和 16位
选项 32位(可选)
这样我们得出了TCP包头的最小长度,为20字节。
UDP(User Data Protocol,用户数据报协议)
(1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
UDP的包头结构:源端口 16位
目的端口 16位
长度 16位
校验和 16位
小结TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
62
关于一些加密的问题
这里就是PHP5.5以后,提供给我们用于密码加密和验证密码的两个函数password_hash()【此函数加密以后同样的密码,每次刷新时都是不一样的结果】和password_verify。
好处:密码即便一致,但是生成的加密串每次都不一样,但是PHP自身提供了password_verify来验证。这带来的安全性非常高。
坏处:这个密码验证功能只能交给PHP完成了,如果我们项目涉及到多平台,多编程语言的。就会带来很大的不便利性。
但是,的确现在md5和sha1两个加密算法已经随着计算机的计算能力提升,已经变得不可靠了,所以如果是多语言,多平台的,有两个解决方法:
1.PHP这边提供密码验证的接口给对方。
2. 采用盐值加上hash函数来实现密码的加密和验证加密。
hash函数可以有我们自定义加密算法
从安全性上面来说,password_hash和password_verify更安全,可以防止密码遭到时序攻击的破解。
破解密码的几个方式:
暴力破解
SQL注入
时序攻击
时序攻击:
在密码学中,时序攻击是一种侧信道攻击,攻击者试图通过分析加密算法的时间执行来推导出密码。每一个逻辑运算在计算机需要时间来执行,根据输入不同,精确测量执行时间,根据执行时间反推出密码。
63
use能引入类 那我引入函数和常量可以吗!
可以:
PHP5.6以前,我们的命名空间,use关键词只能导入类,而不能导入常量和函数。
在PHP5.6以后,我们可以使用use function 或者use const来导入不同命名空间里面的函数或者常量,这个会给我们在调用不同空间中的函数或常量带来书写上面的便利,同时,我们同样可以预测,以后基于PHP7开发的新的系统或新的框架,不仅会针对于类使用命名空间进行划分,同时,以后的常量和函数都会使用这个命名空间,因为PHP支持了命名空间导入函数或常量的语法了。
64
命名空间的作用
1、命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。
2、方便类文件的引入
65
两个命令刻意记一下
linux部分命令
php -m |grep 22222 查看22222的扩展
find / -name 2222 搜索2222文件
vi/vim 2222 打开编辑2222文件
service iptables stop / strat /status 防火墙开关/查看状态
ps aux | grep php 查看PHP进程
mv srs ../ 将srs目录移动到上一目录
PHP --ini 查找PHP配置文件
vim /etc/group 查看所有组
66
对755和644的理解
67
laravel最新的lts(长期维护)版本是5.5 2017.8.30发布的
69
发邮件 和收邮件的协议和版本号
smtp:简单邮件传输协议 25
pop3:收邮件协议 110
70
什么是路由?
为什么用路由?
71
面向对象
72
csrf攻击
.CSRF是什么?
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
下边的cors改csrf
73
die()和exit()区别
die()一般是用来做代码块的终止的;exit()用于做函数或是方法的返回值使用 ;--从功能上是一样的!
74
解释型语言 和 编译型语言的区别(强类型语言和弱类型语言的区别)
75(了解)
76
如何解决2038的问题(PHP 21亿 最大2038年)
77跨域请求有没有发出去?
为什么不能跨域?浏览器的同源策略
请求到底发出去没?发了 也成功的接受了
有没有回应?也响应了 被浏览器拦截了
78
PHP header 的几种用法
1. 跳转页面header('Location:'.$url); //Location和":"之间无空格。
复制代码
2. 声明content-typeheader('content-type:text/html;charset=utf-8');
复制代码
3. 返回response状态码header('HTTP/1.1 404 Not Found');
复制代码
4. 在某个时间后执行跳转header('Refresh: 10; url=http://www.baidu.com/'); //10s后跳转。
复制代码
5. 控制浏览器缓存header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
复制代码
6. 执行http验证header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
80
如何获得本月第一天
$BeginDate=date('Y-m-01', strtotime(date("Y-m-d")));
echo $BeginDate; 本月第一天
81
linux下mysql导入外部数据SQL文件
mysql -u账号 -p密码 数据库名称<外部文件
82
POST GET 和 HEADER的区别
http://blog.csdn.net/sparkjin/article/details/9208131
可能被问到的问题(合理即可)
1、你对上家公司怎么看:(不要说不好尽量说好)
2、你对我们公司了解吗 (去面试之前必须去把这家公司了解透--尽量说好夸他上天)
3、为什么来我们公司
4、为什么离职
5、你有什么优点
6、你能为公司带来什么价值
7、公司在哪
8、你在哪住
9、怎么学的
10、你为什么来深圳(1,来大城市看看 。。。。。。2,我女盆友在深圳)
11、你能接受加班吗(IT行业可以适量加班)最好问一下有加班费吗?
你大学什么专业(有哪些专业课)【计算机操作系统,数据库概论,数据结构,java,C++,计算机组成原理,软件工程概论】