资讯专栏INFORMATION COLUMN

面试常见问题

jayzou / 1737人阅读

摘要:也可以用于访问类的静态属性静态方法和常量,指向的是实际调用时的类。当进行非静态方法调用时,该类名指向的类名为该对象所属的类,即实际调用时的对象所属的类。

网络协议

计算机网络的五层协议:物理层、数据链路层、网络层、运输层、应用层

计算机网络的七层协议(OSI):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP(是一个协议族,非单个协议):网络接口层、 IP层、传输层、应用层

      网线与集线器属于物理层       网卡与交换机属于数据链路层       路由器属于网络层
TCP和UDP

tcp面向连接的字节流服务,对系统资源要求较多,程序结构复杂,保证数据的正确性和顺序性

udp是无连接的,面向数据报,对系统资源要求较少,程序结构简单,不能保证数据的正确性和顺序性

网站安全与防护

sql注入防治方法:使用例如PDO的预处理,使用或者编写类似mysqli_real_escape_string的方法对sql的特殊字符进行转义

xss(cross site script)跨站脚本攻击:将外部脚本植入到页面中

      防治方法:htmlspecialchars()转义特殊字符为字符实体,strip_tags()过滤html标签, addslashes(可转义单双引号反斜杠NULL) 在特殊字符前面加反斜杠进行转义

csrf(cross-site request forgery)跨站请求伪造:伪造受信任的用户信息来请求网站

      防治方法:请求附加随机token进行校验,或验证码
基础算法相关

基本排序算法:

冒泡排序(时间复杂度:o(n方))

for($i = 0; $i < count($arr); $i++)
    for($j = 0; $j < count($arr) - 1 - $i; $j++)
        if($arr[$j] < $arr[$j+1]) 两者交换

选择排序(时间复杂度:o(n方))

for($i = 0; $i < count($arr) - 1, $i++)
    $min = $i;
    for($j = $i + 1; $j < count($arr); $j++)
        if($arr[$min] > $arr[$j])
            $min = $j;
        将最小值与当前的第i位置内容交换

快速排序思想:通过一趟排序将序列分成两部分,一部分所有数据比另一部分所有数据小,然后在这两个序列的内部再分别进行快速排序操作,直到最后形成一个有序序列

二分插入排序思想(之前的序列为有序):插入第i个元素时,对前面的0~i-1进行折半,当前元素与中间元素比较,如果小,前半部分再次折半,如果大,后半部分进行折半,直到最后left>right,然后把目标位置到i-1的所有元素整体后移,把当前元素放进去

基本查找算法:

顺序查找

二分法查找(折半查找):将序列分为两部分,找到序列的中间值,如果查找值大于中间值,继续对右半部分进行折半,如果查找值小于中间值,对左半部分进行折半,直到找到或front>end结束,时间复杂度O(log2n)以2为底n的对数

设计模式

MVC是一种设计框架,而不是设计模式,框架是比模式更高的概念 model负责数据逻辑 controller负责用户交互 view负责数据显示 流程:用户对控制器的某个方法发出请求,控制器调用相应的模型返回数据,然后将数据渲染到视图中返回给用户

1) 单例模式 i. 私有化构造方法和__clone方法 ii. 提供公有的静态的方法返回实例 iii. 提供私有的静态属性保存实例

2) 简单工厂模式(重点在创建不同对象,作用就是用来创建对象的) - 例如一个计算器的加减乘除求余取整 i. 定义抽象基类让子类分别继承并实现相应方法 ii. 定义Factory工厂类里面提供静态方法用于根据不同的参数实例化相应的子类对象

3) 策略模式(重点在于实例化不同类的解决策略不同,作用是根据不同的情况调用相应的策略或算法) - 例如qq普通用户 vip svip购买皮肤的优惠策略 i. 定义抽象基类让子类分别继承并实现相应的方法 ii. 根据不同的场景实例化相应的类,然后调用其中的方法获取结果

4) 观察者模式 i. 需要有一个抽象的主题接口和一个抽象的观察者接口 ii. 实现一个主题,实现多个观察者 iii. 实例化主题,然后调用主题的方法并将不同的观察者对象实例化传入,在主题的方法中保存传入的观察者对象到一个属性,在主题中定义另外的方法通过保存观察者对象调用观察者的方法

名词解释

ORM模型:将表映射到类,将行记录映射到实例对象,将字段映射到对象的属性

OOP:面向对象编程

nosql:redis、MongoDB、memcached

大流量高并发网站解决思路

防盗链(别人网站上链接着你的服务器上的的资源),验证来源:$_SERVER["HTTP_REFERER"] apache或者nginx进行相关配置

CDN加速

减少http请求,添加异步请求

启用浏览器缓存

代码压缩(去除空白符)

页面静态化:信息变更不是很频繁的页面进行静态化处理,生成html文件

数据缓存(数据库缓存redis,文件缓存)

使用Nginx,负载均衡

mysql数据库优化

字段数据类型优化

索引优化

SQL语句优化

存储引擎优化

表结构设计优化

分表分库分区

主从复制,读写分离

COOKIE 和 SESSION

session与cookie都是会话技术,默认情况下session在客户端依赖于cookie


cookie保存在客户端,保存的是字符串,session保存在服务端,保存的是对象

cookie安全性低,可被拦截或从本地分析得到,session安全性高

session保存在服务器上,会占用服务器的资源,理论上大小没有限制,和服务器内存有关

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多20个cookie

登录信息等重要信息存放为session,其他信息如需保留,可以存在cookie中

include 和 require

引入文件,include在用到时加载,require在一开始就加载

include引入文件出现错误,会给出警告,并继续执行下面代码,require引入文件出现错误,报出致命错误并终止当前程序运行

MyISAM 和 InnoDB

MyISAM不支持事务和外键操作,InnoDB支持事务处理和外键

MyISAM是表级锁,InnoDB是行级锁

执行大量的select MyISAM更好,执行大量的insert update用InnoDB更好

global 和 $GLOBALS

$GLOBALS["var"] 是外部的全局变量$var本身。

global $var 是外部$var的同名引用或者指针

empty 和 isset

empty以下条件会被认为空

"" (空字符串)

0 (作为整数的0)

0.0 (作为浮点数的0)

"0" (作为字符串的0)

NULL

FALSE

array() (一个空数组)

$var; (一个声明了,但是没有值的变量)

isset以下条件会被认为存在

变量存在并且值不是 NULL,则返回 TRUE

get 和 post

get主要用于获取数据,post主要用于提交数据

get提交参数追加在url后面,post通过http body提交

get的url会有长度上的限制,post传递数据理论上是无限

get提交信息明文显示在url上,不够安全,post相对来说比较安全

get提交可以被浏览器缓存,post不会被浏览器缓存

static 和 self

self 可以用于访问类的静态属性、静态方法和常量,但 self 指向的是当前定义所在的类,这是 self 的限制。

static 也可以用于访问类的静态属性、静态方法和常量,static 指向的是实际调用时的类。

当进行非静态方法调用时,该类名(static指向的类名)为该对象所属的类,即实际调用时的对象所属的类。

一次完整的HTTP请求过程
1.首先域名解析(DNS解析):浏览器解析域名(主机名)为相应的IP地址 2.建立TCP连接:三次握手
客户端:你能听到我说话吗?
服务器:我能听到,你能听到我说话吗?
客户端:我也能,那我开始发送数据喽。。
3.浏览器向服务器发起http请求 4.服务器响应http请求,返回html代码 5.浏览器解析html代码并请求html中的资源 6.浏览器对页面进行渲染然后展示给用户 7.关闭TCP连接:四次挥手
    - 客户端:“兄弟,我这边没数据要传了,咱关闭连接吧。”
    - 服务端:“收到,我看看我这边有木有数据了。”
    - 服务端:“兄弟,我这边也没数据要传你了,咱可以关闭连接了。”
    - 客户端:“好嘞。”


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29719.html

相关文章

  • web前端面试题一

    摘要:需求一个输入框,用户输入时有联想搜索,每次用户输入都会触发请求,过多的请求会造成服务器的压力,如何去解决这个问题请求函数面试者延迟发送可以去解决这样的问题。 写在前面的话 一般来说,面试质量的高低很大程度影响公司是否想接受改人才,也影响了人才是否愿意去公司。质量高的面试,公司能表明对人才的要求,个人也能表明所期待的公司是一个什么模式的公司。最终会有利于双向选择的过程。能尽早的把问题暴露...

    bergwhite 评论0 收藏0
  • Android-Java面试

    摘要:好不容易在月号这天中午点左右接到了来自阿里的面试电话。这里会不断收集和更新基础相关的面试题,目前已收集题。面试重难点的和的打包过程多线程机制机制系统启动过程,启动过程等等扫清面试障碍最新面试经验分享,此为第一篇,开篇。 2016 年末,腾讯,百度,华为,搜狗和滴滴面试题汇总 2016 年未,腾讯,百度,华为,搜狗和滴滴面试题汇总 各大公司 Java 后端开发面试题总结 各大公司 Jav...

    TalkingData 评论0 收藏0
  • 如何顺利通过编程面试

    摘要:事后看来,我认为它在我顺利通过微软的面试中发挥了重要作用。在过去几年中,技术公司正在转向使用在线协作编码平台进行远程面试。同样重要的是确保在整个面试过程中与面试官保持有效的沟通。 如果你是一个刚毕业的学生业生或一个职业生涯中期的工程师,那么准备接受你梦寐以求的工作的技术面试可能既费时又令人紧张。想象一下,人们期望你能够在现场解决一个复杂的挑战,并将其转化为无错误的代码? 好了,不用担心...

    _ivan 评论0 收藏0
  • 如何顺利通过编程面试

    摘要:事后看来,我认为它在我顺利通过微软的面试中发挥了重要作用。在过去几年中,技术公司正在转向使用在线协作编码平台进行远程面试。同样重要的是确保在整个面试过程中与面试官保持有效的沟通。 如果你是一个刚毕业的学生业生或一个职业生涯中期的工程师,那么准备接受你梦寐以求的工作的技术面试可能既费时又令人紧张。想象一下,人们期望你能够在现场解决一个复杂的挑战,并将其转化为无错误的代码? 好了,不用担心...

    fsmStudy 评论0 收藏0
  • 如何顺利通过编程面试

    摘要:事后看来,我认为它在我顺利通过微软的面试中发挥了重要作用。在过去几年中,技术公司正在转向使用在线协作编码平台进行远程面试。同样重要的是确保在整个面试过程中与面试官保持有效的沟通。 如果你是一个刚毕业的学生业生或一个职业生涯中期的工程师,那么准备接受你梦寐以求的工作的技术面试可能既费时又令人紧张。想象一下,人们期望你能够在现场解决一个复杂的挑战,并将其转化为无错误的代码? 好了,不用担心...

    jas0n 评论0 收藏0

发表评论

0条评论

jayzou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<