只适合工做(1-3)年的PHPerjavascript
写简历的网站:php
超级简历 推荐html
冷熊简历 刚开始我用的这个,后来感受太过于简单,不过程序员也不须要什么花里胡哨的简历,若是不喜欢第一个能够用这个前端
SAPI 是服务器应用编程接口,做为应用层(好比 Apache、Nginx、CLI等)和 PHP 交互数据的入口java
SAPI 实现了和各类应用层的兼容,应用层能够根据自身状况定制 SAPI,例:程序员
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据能够保存在集群、数据库、文件中。ajax
Coookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。算法
参考sql
Session和Cookie的区别thinkphp
参考
__LINE__ 当前行号
__DIR__ 当前目录
__FILE__ 当前文件完整的文件地址
__FUNCTION__ 当前函数名
__METHOD__ 类的方法榠
__CLASS__ 类名
__NAMESPACE__ 当前命名空间名称
复制代码
__construct、__destruct、__call、__callStatic、__get、__set、__isset、
__unset、__toString、__set_state、__debuginfo、__clone、__sleep、__wakeup、__invoke
复制代码
参考
它们在加上
_ones
后缀时表示已加载文件的不加载
加载失败的处理方式不一样
require 加载失败,会报出一个 Fatal error 脚本中止执行
include 加载失败,会报出一个 Warning 脚本会继续执行
性能不一样
include 执行文件每次都要进行读取和评估;
require 文件只处理一次
若是可能执行屡次的代码,就用 require 效率比较高
PHP 5.3 版本以前都是采用引用计数的方式管理内存,PHP 全部的变量存在一个叫 zval
的变量容器中,当变量被引用的时候,引用计数会+1,变量引用计数变为0时,PHP 将在内存中销毁这个变量。
可是引用计数中的循环引用,引用计数不会消减为 0,就会致使内存泄露。
在 5.3 版本以后,作了这些优化:
经过设置一个初始中间值,来将须要排序的数组分红3部分,小于中间值的左边,中间值,大于中间值的右边,继续递归用相同的方式来排序左边和右边,最后合并数组
function quickSort($array) {
if(!isset($array[1]))
return $array;
$nMid = $array[0]; //获取一个用于分割的关键字,通常是首个元素
$arrLeft = array();
$arrRight = array();
foreach($array as $v)
{
if($v > $nMid)
$arrRight[] = $v; //把比$nMid大的数放到一个数组里
if($v < $nMid)
$arrLeft[] = $v; //把比$nMid小的数放到另外一个数组里
}
$arrLeft = quickSort($arrLeft); //把比较小的数组再一次进行分割
$arrLeft[] = $nMid; //把分割的元素加到小的数组后面,不能忘了它哦
$arrRight = quickSort($arrRight); //把比较大的数组再一次进行分割
return array_merge($arrLeft,$arrRight); //组合两个结果
}// END quickSort
复制代码
$arrArr = array(345,4,17,6,52,16,58,69,32,8,234);
$length = count($arrArr);
for ($i = 1; $i < $length; $i ++)
{
for ($j = $length-1; $j >= $i; $j --)
{
if ($arrArr[$j] < $arrArr[$j-1])
{
$interim = $arrArr[$j-1];
$arrArr[$j-1] = $arrArr[$j];
$arrArr[$j] = $interim;
}
}
}
复制代码
参考
参考
MVC是模型、视图、控制器的缩写,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑汇集到一个部件里面
优势
在前端表单用户输入进行控制或限制
由后端传参数和数据时进行过滤等等
参考
列出四种解决方案,推荐去看一下前三种解决方案的例子。
在前端控制有效请求,例如一分钟才正常请求一次
在后端过滤无效请求,将操做放进队列中实现,也能够用锁的机制,第二个等待第一个完成,一个接一个
参考
Get 的参数包含在 URL,Get 请求会被浏览器主动缓存,有字符限制参数为 ASCII 字符
Post 经过 request body 传递参数,有多种编码方式
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,须要请求着继续执行操做 |
2** | 成功,操做被成功接受处理 |
3** | 重定向,须要进一步的操做以完成请求 |
4** | 客户端错误,请求包含语法错误或没法完成请求 |
5** | 服务器错误,服务器在处理请求的过程当中发生了错误 |
三次握手的目的是:为了防止已失效的链接请求报文段忽然又传送到了服务端,于是产生错误
是以 Web 为平台围绕着资源展开的创建 API 时遵照的一种规则 / 风格
RESTful 规定,数据的 CURD 操做对应着 HTTP 方法:
https://api.example.com/v1/employees
复制代码
协议
API 与用户的通讯协议为 HTTPS 协议
域名
应该尽可能将 API 部署在专用子域名下,或者独立域名
版本
应该将 API 的版本号放入 URL
路径
代表 API 的具体功能地址
HTTP 动词
就是上方对应的 HTTP 方法
过滤信息
若是记录数量不少,服务器不可能将它们都返回给用户,API 应该提供参数,过滤返回结果,好比说指定返回多少条数据,或者页数之类的。
状态码跟提示信息
错误处理
返回结果
针对不一样操做,返回结果符合规范
string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
MyISAM性能强,执行速度快,支持表锁和全文索引
InnoDB安全性强,支持事务处理、外键跟行锁
参考
索引是一种数据结构,能帮助咱们快速的检索数据库中的数据
PRIMARY KEY 主键索引
主键是一种惟一性索引,每一个表只能有一个主键,在单表查询中,PRIMARY主键索引与UNIQUE惟一索引的检索效率并无多大的区别,
但在关联查询中,PRIMARY主键索引的检索速度要高于UNIQUE惟一索引。
INDEX 普通索引
这是最基本的索引类型,并且它没有惟一性之类的限制。
UNIQUE 惟一索引
这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的全部值都只能出现一次,即必须惟一。
FULLTEXT 全文索引
MySql从3.23版开始支持全文索引和全文检索。全文索引只能够在VARCHAR或者TEXT类型的列上建立。
对于大规模的数据集,经过ALTER TABLE(或者CREATE INDEX)命令建立全文索引要比把记录插入带有全文索引的空表更快。
组合索引(较特殊)
在索引的建立中,有两种场景,即为单列索引和多列索引
原子性、一致性、隔离性、持久性
参考
利用 Innodb 的 undo log 回滚日志实现,当事务回滚时撤销全部已经成功执行的 sql 语句
从两个层面来保证一致性,从数据库层面来讲,能够经过原子性、隔离性和持久性来保证一致性。
从应用层来讲,经过代码判断数据库数据是否有效,而后决定回滚仍是提交数据
利用锁机制来实现隔离性
利用 Innobd 的 redo log 重写日志
未提交读、已提交读、可重复读、序列化
参考
开启慢查询日志,监测SQL语句执行
set global slow_query_log = ON;
set global long_query_time = 3600;
复制代码
优化不合理的SQL
在经常使用的字段上创建合理的索引
在联合索引查询中遵循最左原则
参考
使用 Iframe 标签订义须要跨域的域名,而后使用 contentWindow.postMessage
发送跨域数据,使用 window.addEventListener
接收返回数据
域名 A 下
<iframe id="iframe" src="http://www.domain2.com/b.html" style="display:none;"></iframe>
<script> var iframe = document.getElementById('iframe'); iframe.onload = function() { var data = { name: 'aym' }; // 向domain2传送跨域数据 iframe.contentWindow.postMessage(JSON.stringify(data), 'http://www.domain2.com'); }; // 接受domain2返回数据 window.addEventListener('message', function(e) { alert('data from domain2 ---> ' + e.data); }, false); </script>
复制代码
域名 B 下
// 接收domain1的数据
window.addEventListener('message', function(e) {
alert('data from domain1 ---> ' + e.data);
var data = JSON.parse(e.data);
if (data) {
data.number = 16;
// 处理后再发回domain1
window.parent.postMessage(JSON.stringify(data), 'http://www.domain1.com');
}
}, false);
复制代码
$.ajax({
url: 'http://www.domain2.com:8080/login',
type: 'get',
dataType: 'jsonp', // 请求方式为jsonp
jsonpCallback: "handleCallback", // 自定义回调函数名
data: {}
});
handleCallback(res)
{
console.log(JSON.stringify(res));
}// END handleCallback
复制代码
闭包就是读取其余函数内部变量的函数
wx.login
接口来获取到 code
AppId、Appsecret、code
使用curl调用微信接口获取到 openid 和 session_key参考
Template 模版是用来作显示做用的,只建立 wxml、wxss 文件就能够了
Component 组件有本身的业务逻辑,若是涉及到业务逻辑交互较多就用 Component
按本身实际理解讲