但愿对大家能有点帮助,找到理想的工作
关于架构、优化、缓存、前端的可以看一下我其他的几篇文章
架构
和 前端
的文章都已经置顶了,缓存和优化的还没写,因为事情比较多,时间不太够用,不过接下来都会写的,欢迎大家关注~
JS中网页前进和后退的代码
- 前进:
history.forward();=history.go(1);
- 后退:
history.back();=history.go(-1);
PHP 中 WEB 上传文件的原理,如何限制上传文件的大小?
$_FILES["file"]["tmp_name"]
is_uploaded_file()
和 move_uploaded_file()
php.ini: upload_max_filesize
php.ini: memory_limit
php.ini: post_max_size
多台web服务器如何共享 SESSION
- 专门的一个数据库服务器用来存储
session
- 使用服务器脚本进行服务器之间
session
同步- 使用
cookie
存储在客户端- 使用
cache server
比如memcache
COOKIE 与 SEESION
关于 session ID 的存取
PHP 获取远程文件
获取:
curl
readfile
读一个文件到缓存中ob_get_contents
读缓存file_get_contents
保存到本地:
$th = fopen($filepath, "w");
fwrite($th, $file);
fclose($fh);
POST 和 GET 有何区别
GET 传输时需要进行url编码
POST 和 GET 的最大容量
2MB / 1024B
三个数最大值
function($a, $b, $c){
return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c);
}
三范式
存储过程
数据库分区
- 范围分区
数据库分表
- 按日期分表
- …
数据库查询优化
- 避免会导致全表扫描的操作(null、%、判断…)
- 提前计算好表达式
- 适当合理的索引(考虑在
where
及order by
涉及的列上建立索引)- 不要返回不必要的行和列(避免返回不必要的数据)
- 避免大事务操作,提高系统并发能力
- 避免在
where
子句中使用or
来连接条件,可使用union
,否则将导致引擎放弃使用索引而进行全表扫描- 分表,分区
索引
- 普通索引
- 唯一索引
- 主键索引
ALTER TABLE tb_name ADD INDEX index_name (column_list)
B+树,B树,B-树
单链表反转
存储当前节点(第一个)的next,当前节点(第一个)指向第三个(第二个的next),第二个指向(表头的next)变为链表首,表头指向第二个(之前存储的当前节点(第一个)的next)
current
,nextNode
,third
current = L->next;
while(current) {
tmp = current->next;
current->next = nextNode->next;
nextNode->next = L->next;
L->next = tmp;
}
两数交换
void swap(int &a, int &b)
{
tmp = a ^ b; // a = a ^ b;
a = a ^ tmp;
b = b ^ tmp;
}
void swap(int &a, int &b)
{
a ^= b;
b ^= a;
a ^= b;
}
8个小球,其中一个比其它7个都重,其它7个一样重。给你一个天平,至少要称几次?
2次
从8个球中任意取2组3个球放在天平上称,
如果重量相等,那么重的球必然在余下的2个球中,故将那个2个球放在天平上称即可;
如果有一边重,那么重的球必然在这一边的3个球里,
再从这3个球中任意取2个出来称,
如果一样重,那么重的球就是余下的那个球,
如果一边更重,则便是这个球了.
操作系统的线程与进程的区别
- 一个程序至少有一个进程,一个进程至少有一个线程
- 进程是一个独立的运行单位,也是系统进行资源分配和调度的基本单位
- 线程是操作系统进程中能够并发执行的实体,是处理器调度和分派的基本单位
- 线程高并发,进程并行
给你程序额外的内存块,你会把内存块分配给程序的堆区还是栈区
malloc
、申请内存、内存块,都是分配到堆
include、require
incluce
在用到时加载require
在一开始就加载include
的文件中出错了,主程序继续往下执行;require
的文件出错了,主程序也停止require()
和include()
语句是语言结构,不是真正的函数,可以像php中其他的语言结构一样,例如echo()
可以使用echo("ab")
形式,也可以使用echo "abc"
形式输出字符串abc。require()
和include()
语句也可以不加圆括号而直接加参数。
error_reporting(2047)
相当于
error_reporting(‘E_ALL’);
JavaScript 子窗口调用父窗口
window.opener
是window.open
打开的子页面调用父页面对象
客户端 IP 与服务器 IP
- 客户端
getenv('REMOTE_ADDR');
- 服务器端
getenv('SERVER_ADDR');
gethostbyname("www.baidu.com");
对多个数组或多维数组进行排序
array_multisort
类型转换
非数字字符串 -> 整型 0
数字字符串 -> 整型 数字
打开 php.ini 中的 Safe_mode,会影响哪些参数
与文件、系统操作有关的函数,如:
ckdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,highlight_file,show_source,include,symlink,link,touch,mkdir,unlink
pathinfo,basename,fopen,system,exec,proc_open
一些操作
mkdir
创建目录 touch
创建文件夹 修改权限 chmod
之类
大流量网站
- pHp缓存
- 生成html静态页面
- 使用主辅数据库,把数据库的读写分开
- 使用负载均衡器和多台服务器
首先,确认服务器硬件是否足够支持当前的流量
其次,优化数据库访问。
第三,禁止外部的盗链。
第四,控制大文件的下载。
第五,使用不同主机分流主要流量
第六,使用流量分析统计软件
Apache
以Apache模块的方式安装pHp,在文件http.conf中首先要用语句(10)动态装载pHp模块,
然后再用语句(11)使得Apache把所有扩展名为php的文件都作为pHp脚本处理。
(10)
LoadModule php5_module "c:/php/php5apache2.dll"
(11)AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml
序列化
类的属性可以序列化后保存到
session
中,从而以后可以恢复整个类,serialize()
/unserialize()
函数的参数不能是对变量的引用
一个函数的参数不能是对变量的引用,除非在php.ini中把 allow_call_time_pass_reference
设为 on
PHP 是什么
Hypertext Preprocessor
,是一种用来开发动态网站的服务器脚本语言
PHP 不支持多继承
PHP 类只能继承一个父类,并用关键字
extended
标识
PHP 获取图像尺寸
getimagesize ()
获取图片的尺寸
Imagesx ()
获取图片的宽度
Imagesy ()
获取图片的高度
PEAR
PHP 扩展与应用库(
PHP Extension and Application Repository
),它是一个 PHP 扩展及应用的一个代码仓库
魔术方法
__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone(), __debugInfo()
__sleep
serialize()
函数会检查类中是否存在一个魔术方法 __sleep()
。如果存在,该方法会先被调用,然后才执行序列化操作。此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。
__wakeup
unserialize()
会检查是否存在一个 __wakeup()
方法。如果存在,则会先调用 __wakeup
方法,预先准备对象需要的资源。
魔术变量
__LINE__ , __FILE__ , __DIR__ , __FUNCTION__ , __CLASS__ , __TRAIT__ , __METHOD__ , __NAMESPACE__
表单提交
<a href="javascript: document.myform.submit();">Submit Me</a>
获取居中的位置
mc.x = stage.StageWidth / 2
mc.y = stage.StageHeight / 2
OOP
Object OrientedProgramming
事件机制
- 捕获阶段 (即由根节点流向子节点,检测每个节点是否注册了监听器)
- 目标阶段 (激发在目标对象本身注册的监听程序)
- 冒泡阶段 (从目标节点到根节点,检测每个节点是否注册了监听器)
当中涉及了两个属性target
和currentTarget
,target
是事件的派发者,currentTarget
是正在检测的对象,当开始了事件流,事件的currentTarget
属性处于不断变化中
PHP 打印出前一天的时间
echo date("Y-m-d H:i:s", time()-24*3600);
修改 SESSION 的生存时间
php.ini
中session.gc_maxlifetime
(默认为 1440)- PHP
$savepath = "./session_save_dir/";
$lifeTime = 24 * 3600;
session_save_path($savepath);
session_set_cookie_params($lifeTime);
session_start();
setcookie()
或session_set_cookie_params($lifeTime)
多个进程同时写入一个文件成功
function processWriteInFile($path, $mode, $data)
{
fopen($path, $mode);
$times = 0;
while (true) {
if ($times > 30) {
echo "file locked";
return 0;
}
if (flock($path, LOCK_EX)) {
fwrite($path, $data);
break;
} else {
$times++;
usleep(1000);
}
}
flock($path, LOCK_UN);
fclose($path);
}
代理模式
class A
{
public function printer()
{
print_r("I'm print!");
}
}
class B
{
private $print;
function __construct()
{
$this->print = new A();
}
function __call($method, $args)
{
if (!method_exists($this->print, $method)) {
exit("the method didn't exist");
}
$this->print->$method();
}
}
$kof = new B();
$kof->printer();
执行效率分析
xdebug
统计函数执行次数和具体时间进行分析,配合winCacheGrind
分析explain(mysql)
,启用slow query log
记录慢查询
mysql
CREATE TABLE test(
id int not null primary key,
name char(20) not null default ""
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
linux 静态库 动态库
静态库文件
.a
动态库文件.so
vi / vim 3 种模式
- 命令模式
esc
- 插入模式
i
- 命令行模式
esc + :
vi / vim 删除行
1,10d
Linux 下网络配置文件目录
/etc
Linux下权限修改
修改/usr/local目录下的文件file的权限为755,修改/home/th1下的所有文件的所有者和组为th1和ggv?
chmod 755 /usr/local/file
chown th1:ggv /home/th1/*
常用的字符串操作
substr(),strtolower(),ucwords(),ucfirst(),strtoupper(),implode(),explode(),str_replace(),strpos(),strrev()
PHP 缓存机制
- 代码缓存和数据缓存
- APC opcode 缓存
- memcache
- redis