后端面试总结(转载请标明)

但愿对大家能有点帮助,找到理想的工作

关于架构、优化、缓存、前端的可以看一下我其他的几篇文章
架构前端 的文章都已经置顶了,缓存和优化的还没写,因为事情比较多,时间不太够用,不过接下来都会写的,欢迎大家关注~


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

关于 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、%、判断…)
  • 提前计算好表达式
  • 适当合理的索引(考虑在 whereorder by 涉及的列上建立索引)
  • 不要返回不必要的行和列(避免返回不必要的数据)
  • 避免大事务操作,提高系统并发能力
  • 避免在 where 子句中使用 or 来连接条件,可使用 union,否则将导致引擎放弃使用索引而进行全表扫描
  • 分表,分区

索引

  • 普通索引
  • 唯一索引
  • 主键索引
    ALTER TABLE tb_name ADD INDEX index_name (column_list) 

B+树,B树,B-树


单链表反转

存储当前节点(第一个)的next,当前节点(第一个)指向第三个(第二个的next),第二个指向(表头的next)变为链表首,表头指向第二个(之前存储的当前节点(第一个)的next)
currentnextNodethird

    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.openerwindow.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 之类


大流量网站

  1. pHp缓存
  2. 生成html静态页面
  3. 使用主辅数据库,把数据库的读写分开
  4. 使用负载均衡器和多台服务器

首先,确认服务器硬件是否足够支持当前的流量
其次,优化数据库访问。
第三,禁止外部的盗链。
第四,控制大文件的下载。
第五,使用不同主机分流主要流量
第六,使用流量分析统计软件


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


事件机制

  1. 捕获阶段 (即由根节点流向子节点,检测每个节点是否注册了监听器)
  2. 目标阶段 (激发在目标对象本身注册的监听程序)
  3. 冒泡阶段 (从目标节点到根节点,检测每个节点是否注册了监听器)
    当中涉及了两个属性 targetcurrentTargettarget 是事件的派发者,currentTarget 是正在检测的对象,当开始了事件流,事件的 currentTarget 属性处于不断变化中

PHP 打印出前一天的时间

echo date("Y-m-d H:i:s", time()-24*3600);


修改 SESSION 的生存时间

  1. php.inisession.gc_maxlifetime (默认为 1440)
  2. PHP
 $savepath = "./session_save_dir/";
 $lifeTime = 24 * 3600;
 session_save_path($savepath);
 session_set_cookie_params($lifeTime);
 session_start();
  1. 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值