面试知识点总结

沈阳–》北京–》沈阳

面试了这么多,总结一下吧。

不是为了别的,只是为了证明我的青春岁月真是存在过;我奋斗过,我努力过,哪怕失败了,我也能告诉我自己曾经我TMD是个战士。

1、 http协议:
超文本传输协议,服务器端与用户端(/浏览器端)传输协议,也可以说是请求应答协议(面向对象的协议 ),能传输文本、页面(主要),它本身是不安全的。推荐用https(在http协议的基础上加ssl加密),但是baidu这方面做得没有google好。baidu的https爬的时候有问题。
http的报文(应答与请求)。
响应状态码:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求

2、 TCP与UDP协议:
TCP协议是面向连接的协议—传输控制协议:3次握手和4次挥手。
作为可靠的协议,TCP协议保证可靠传输,保证传输(信息的完整和安全)。
传输单位是包。
UDP协议是无连接的协议—-用户数据报协议。
作为不可靠的协议,不保证传输只负责传输而已。
速度快和资源消耗小但是不可靠。

3、 事务***
事务的应用场景:几个操作需要实时和原子性。需要把多个操作集合为一个集合去实现。这个集合要求有:ACID等特性。
事务:
原子性 每一个事务是一个工作单元。它不能被分割成更小的部分。这个属性意味着在事务中定义的一切数据更改要么都完成,要么都不完成。
一致性 一个事务不能违背定义在数据库中的任何完整性检查。为了维护一致性,所有的规则、约束、检查和触发都会应用在事务中。由于所有的数据更改在事务期间内进行,这些数据在事务开始和事务结束前会被确保为一致的。
隔离性 事务必须与其他事务进行的数据更改相隔离。这意味着没有其他操作可以改变中间态(没有提交的)的数据。为了避免中间态数据被更改,事务必须要么等待来自其他事务的更改被提交,要么只能查看到处于上一个提交状态的数据。
持久性 在一个事务完成,并且客户端应用程序已经被提示这个事务已经成功完成后,无论发生任何系统错误,这些更改的数据将永久存在。
隐式事务和显式事务。
基本的事务语句。
隐式事务:
INSERT INTO table VALUES( );
显式事务:
BEGIN TRY

BEGIN TRAN

     INSERT INTO table1 (i,col1,col2)

     VALUES (1,'First row','First row');

     INSERT INTO table1 (i,col1,col2)

     VALUES (2,NULL,'Second row');

     INSERT INTO table1 (i,col1,col2)

     VALUES (3,'Third row','Third row');

    COMMIT TRAN;

    END TRY

4、 数据库缓存:
这玩意几句话能说清楚?逗我?

缓存的应用场景:

  1. 查询缓存能够加速已经存在缓存的查询语句的速度,可以不用重新解析和执行而获得正确得记录集;
  2. 查询缓存中涉及的表,每一个表对象都有一个属于自己的全局性质的锁;
  3. 表若是做DDL、FLUSH TABLES 等类似操作,触发相关表的查询缓存信息清空;
  4. 表对象的DML操作,必须优先判断是否需要清理相关查询缓存的记录信息,将不可避免地出现锁等待事件;
  5. 查询缓存的内存分配问题,不可避免地产生一些内存碎片;
  6. 查询缓存对是否是一样的查询语句,要求非常苛刻,而且还不智能;
    综上:整个系统以读为主的业务,比如门户型、新闻类、报表型、论坛等网站;
    查询语句操作的表对象,非频繁地进行DML操作,可以使用query_cache_type=2模式,然后SQL语句加SQL_CACHE参数指定;
    5、 字符串翻转功能函数的实现:

    第一种: a="abcdefg";=> a=”gfedcba”;

$a = "abcdef";
function  getStr( $str )
{
     if( is_string( $str )  )
     {
         //如果sh如果是如果是字符串如果是字符串字符串
            $length = mb_strlen( $str ) ; 
            $reStr = '';
           for( $i =$length-1 ; $i>=0 ; $i--    )
           {
               $reStr .= $str[$i]  ;
           }
           return $reStr ; 
     }
     else
     {
         return false;
     }
}
$out = getStr( $a ) ;
print_r(  $out );


//求(索引)数组长度的函数
function getLength ( $arr = array() )
{
    if( is_array( $arr ) )
    {
        $length  = 0;
        while( $arr[$length] )//可以换为isset(),但是可能不允许使用函数
        {
            $length ++;
        }
        return $length ;
    }
    else
    {
       return false;   
    }
}
$out = getLength( [1,2,3,4,5,6,6,7,8,9,10] ) ;
print_r(  $out );//11
//获取字符串长度
function getLengthS ( $str )
{
    if( is_string( $str ) )
    {
        $length  = 0;
        while( isset($str[$length]) )
        //while( $str[$length] )
        {
            $length ++;
        }
        return $length ;
    }
    else
    {
       return false;   
    }
}
$out = getLengthS( $str = "张张abcdefgabchzhangasd" ) ;//1个中文占3个长度
print_r(  $out );//25

第二种: a="abcabe2afg!";=> a = ” cba abe2 afg! “;//包含特殊字符的单词不翻转


function getStrR ( $str )
{
    if( is_string( $str ) )
    {
        $arr = array();
        $arr = explode( ' ' , $str ) ;
        foreach ($arr as $k => $value)
        {
            // code...
            if( preg_match( '/^[a-zA-Z]*$/',$value ) )
            {
                //翻转fanzhaun
                $va = '';
                $length = strlen( $value ) ;
                for( $i = $length-1  ;  $i>=0   ; $i--   )
                {
                    $va .= $value[$i] ;
                }
                $arr[$k] = $va ;
            }
        }
        return implode(' ',$arr ) ;
    }
    else
    {
       return false;   
    }
}

$out = getStrR( $str = "abc def gabc1 h zhang asd!" ) ;
print_r(  $out );//cba fed gabc1 h gnahz asd!

6、 数据库表的优化:

7、 数据库优化方法:

8、 排序的种类,对应的时间复杂度、空间复杂度:

9、 ajax的理解:

10、 数据结构的种类:

11、 php实现队列:

12、 php实现栈:

13、 tp的子查询:

14、 表的多对多关联:

15、 tp的左连接

16、 数据库缓存:

17、 数据库的锁机制

18、 字符串处理函数strtoken

19、 数组函数列举
函数

20、 字符串函数列举
函数
函数2

21、 动态页面的静态化的实现

22、 搜索优化

23、 char与varchar的区别

24、 int类型的判断(各种类型判断)

25、 数组的去重和排序函数的实现

26、 各个状态码的含义(12345原则)
这是一篇好博客
常见的:
100
101
200
300
301
400
401
404
403
500
501
503
504
505

27、 shell命令
这是好的博客

28、 常用sql语句(CURD)
create table name (
id int () not null primary key,
name varchar unique not null,
);
insert into table
values();
update table set ;

        delete * from table;
        transcate
        drop

29、 sql语句加减乘除
+
-
*
/
数学函数
30、 ucwords与ucfirst
ucwords大写字符串的每个单词的首字母,ucfirst()大写字符串的首字母。
31、 数组重复元素的计数函数的实现

32、 laravel框架

33、 json_decode()函数
json_decode()与json_encode()相反,将数组与json的转换,返回object。
但是json_decode(参数1,true)返回array;
34、 接口开发及其测试工具
postman
fireBUG应该也算一个。
35、 加密函数列举
加密和解密
36、 数组与json的转换
json_encode()与json_decode();
37、 树与图的区别与联系
图包含树。
树有根节点,图没有。
树能深搜,图不能。
我觉得:树没有环路,而图有。
38、 mvc
问这个问题的面试官(个人认为)可以判定其为垃圾。
39、 建表和库
if exists ‘name drop table name
else
create database name;
create table name();
40、 算法:累加
f(1) =1 ,f(2) =1,f(3)=f(1)+f(2),f(4)=f(3)+f(2),,,,f(n)=?至少2种以上方法。
1 递归
个人写的小函数,希望有高手留下一招半式!

//递归
echo getRecursive(8);//21
function  sumRecursive ( $i , $n  ,$sum , $n1 )
{
    if( $i ==1  )
    {
        $n1 = 1;
        $sum = 1;
    }
    else if( $i ==2 )
    {
         $n1 = 1;
        $sum = 1;
    }
     if( $i ==  $n  )
    {

        return $sum ;
    }
    else
    {
        $i++;
        $temp = $sum ;
        $sum += $n1 ;//加前一个数
        $n1 = $temp;//n-1的值向前滚加
        $sum =sumRecursive ( $i , $n  ,$sum , $n1 );//递归调用自己
        return $sum;//结束回调
    }
}

function   getRecursive( $n  )
{
    if( $n == intval($n) )
    {
     return  sumRecursive( 1 ,$n , 0,0  );
    }
    else
    {
        return false;
    }
}
    2 迭代
//迭代与递归的不同是,迭代是循环,递归是调用自己。
echo getLteration(90);//2880067194370816120
function   getLteration( $n   )
{
    $n1 = 1 ;//第一个
    $sum = 1;//第二个
    for( $i = 3 ; $i <= $n ; $i++  )
    {
    //从3开始计算,前2个太特殊
            $temp = $sum ;
            $sum += $n1 ;
            $n1 = $temp ;
    }
    return $sum ;//迭代结束,返回值
}
    3 其他
echo getElse(7);
function   getElse( $n   )
{
    if( $n == intval($n)  )
    {
        $sum = 0;
        $n1 = 0;
        $i = 0;
        while( $i!=($n+1)  )
        {
        switch ($i) 
        {
                case 1:
                // code...
                $n1 =1 ;
                $sum = 1;
                $i++;
                break;
                case 2:
                // code...
                $n1 = 1;
                $sum = 1 ;
                $i++;
                break;
                default:
                // code...
                        $temp = $sum ;
                        $sum += $n1 ;
                        $n1 = $temp ;
                         $i++;
                break;
        }
        }
        return  $sum ;
    }
    else
    {
        return false;
    }
}

正在找其他方法解决这个算法,,,,

41、 不用if和权限管理实现权限管理的功能

42、 七层架构
7层与5层

43、 echo 与var_dump、print、print_r的区别:
thinkPHP
echo 不是函数,所以没有返回值这一说,是一个语句(如同if,else,等等语句一样)。可以同时输出多个变量;
print() 语言结构,也是可以输出多个变量,但是它只能打印简单变量(比如打印数组时就只能打印数组类型),返回值总是true/false;性能慢
print_r()打印值和类型,只能打印单一变量,它的返回值是true/false,如果多加一个参数(true),则不会返回boolea值,默认是false;
注释: 参数 return 是在 PHP 4.3.0 的时候加上的。记住,print_r() 对数组作用后将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
printf()打印一个格式化过的字符串,可以追加参数(字符串中的变量,字符串中药有类似c语言一样的类型提示符%s,%d等等)而要打印%要使用%%;对应的vprintf()
sprintf()返回一个格式化的字符串;vsprintf()
(数组指针没有太理解,求高手指教!)
var_dump()只是一个测试函数,打印值和类型。
var_export()与var_dump类似,但是添加参数true可以改变输出的显示。
总结:
1、 越小的公司问的越具体;
2、 mvc基本不问了(估计会背的人太多了),最好不要被概念,说理解;
3、 面试官10个有9个是(你懂的),剩下一个是装逼的;
4、面试官也不一定会面试题;
5、随时做好遇到坑比的准备(这个问题您怎么看?面试官:这个问题几句说不清楚。说不清楚你问我,让我说?艹);
6、会答题不一定会开发,会开发不一定回答题;
7、一定不要怂,上去就是干。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值