zoukankan      html  css  js  c++  java
  • 面试题随记

    =》1
    TCP/IP UDP IMCP
    应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
    传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
    互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
    网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
    =》2
    SESSION 与COOKIE 的区别是什么,请从协议,产生的
    原因与作用说明?
    1、http 无状态协议,不能区分用户是否是从同一
    个网站上来的,同一个用户请求不同的页面不能看做是
    同一个用户。
    2、SESSION 存储在服务器端,COOKIE 保存在客户
    端。Session 比较安全,cookie 用某些手段可以修改,
    不安全。Session 依赖于cookie 进行传递。
    禁用cookie 后,session 不能正常使用。Session 的缺
    点:保存在服务器端,每次读取都从服务器进行读取,
    对服务器有资源消耗。Session 保存在服务器端的文件
    或数据库中,默认保存在文件中,文件路径由php 配置
    文件的session.save_path 指定。Session 文件是公有
    的。
    =》3
    从一段html中正则匹配出来图片的url。
    答案:
    $img = '<img src="http://img.yes.com/20160620094921829.jpg" />';
    $pattern = '/src="([w:/.]*)"/';
    preg_match_all($pattern, $img, $matches);
    array_shift($matches);
    return current($matches);
    =》4
    memcache和redis的区别写三条
    区别:
    1.Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
    2.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
    3.Redis支持数据的备份,即master-slave模式的数据备份。
    4.如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
    5.如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。
    6.redis可以做cache,但redis更多是作为内存数据库的角色存在,且一致性哈希的实现还不成熟
    7.redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。
    8.在100k以上的数据中,Memcached性能要高于Redis。

    =》5
    有200个长度为100的数组,这些数组已经是按顺序排的,从大到小。求top20,要求有代码和时间复杂度。
    合并两个有序数组
    function getSortArr($arrOne, $arrTwo)
    {
    $oneLength = count($arrOne);
    $twoLength = count($arrTwo);

    $res = [];
    $oneIndex = 0;
    $twoIndex = 0;
    // 1 循环两个数组
    while ( ($oneIndex < $oneLength) && ($twoIndex < $twoLength) ) {
    $res[] = $arrOne[$oneIndex] > $arrTwo[$twoIndex] ? $arrTwo[$twoIndex++] : $arrOne[$oneIndex++];
    }
    // 2 将剩余的oneArr中 添加到res数组
    while ($oneIndex < $oneLength) {
    $res[] = $arrOne[$oneIndex++];
    }
    // 3 将剩余的twoArr中 添加到res数组
    while ($twoIndex < $twoLength) {
    $res[] = $arrTwo[$twoIndex++];
    }

    return $res;
    }

    =》6
    给一个url(http://www.xxx.com/abc/4.html)要求返回
    {"url":{"domain":"www.xxx.com","extension":"html"}}
    答案:
    $content = 'http://www.xxx.com/abc/4.html';
    $host = parse_url($content);
    $ext = pathinfo($content);
    echo '{"url":{"domain":"'.$host['host'].'","extension":"'.$ext['extension'].'"}}';

    =>7
    HTTP 协议中GET、POST 和HEAD 的区别?
    HEAD: 只请求页面的首部。
    GET: 请求指定的页面信息,并返回实体主体。
    POST: 请求服务器接受所指定的文档作为对所标识的
    URI 的新的从属实体。
    (1)HTTP 定义了与服务器交互的不同方法,最基本的
    方法是GET 和POST。事实上GET 适用于多数请求,而
    保留POST 仅用于更新站点。
    (2)在FORM 提交的时候,如果不指定Method,则默认
    为GET 请求,Form 中提交的数据将会附加在url 之后,
    以?分开与url 分开。字母数字字符原样发送,但空格转
    换为“+“号,其它符号转换为%XX,其中XX 为该符号以
    16进制表示的ASCII(或ISO Latin-1)值。GET 请求请
    提交的数据放置在HTTP 请求协议头中,而POST 提交的
    数据则放在实体数据中;
    GET 方式提交的数据最多只能有1024字节,而POST 则没
    有此限制。
    (3)GET 这个是浏览器用语向服务器请求最常用的方
    法。POST 这个方法也是用来传送数据的,但是与GET 不
    同的是,使用POST 的时候,数据不是附在URI 后面传递
    的,而是要做为独立的行来传递,此时还必须要发送一
    个Content_length 标题,以标明数据长度,随后一个空
    白行,然后就是实际传送的数据。网页的表单通常是用
    POST 来传送的。

    =>8
    mysql的存储引擎和区别?
    1.Myisam MySQL的默认存储引擎来创建创建一个新表,新表的存储引擎不指定,则默认使用MyISAM。每个MyISAM分成三个文件存储在磁盘上。相同的文件名和表名的扩展。的FRM(存储表定义),MYD(MYDATA存储数据)。 MYI(MyIndex的,存储索引)。数据文件和索引文件可以被放置在不同的目录中,均匀地分布IO,获得更快的。
    2.InnoDB的存储引擎,提供了交易的安全性具有提交,回滚和崩溃恢复能力。不过对比在MyISAM,InnoDB的写处理效率和存储引擎会占用更多的磁盘空间来保存数据和索引。
    =》9
    如何截取http://www.xxx.com/abc/4.html扩展名.html?
    $file = "http://www.xxx.com/abc/4.html";
    $info = pathinfo($file);
    echo $info['extension'];

    =>10
    创建表文章分类和文章表?
    一、文章表:post,字段如下:
    id【唯一标识】,aid【作者id】,title【标题】,content【内容】,cid【分类id】
    二、分类表,category,字段如下
    id【唯一标识,与post表的cid关联】,name【分类名】

    =》11
    sql注入?
    SQL 注入漏洞产生的原因? 如何防止?
    SQL 注入产生的原因:程序开发过程中不注意规范书写
    sql 语句和对特殊字符进行过滤,导致客户端可以通过
    全局变量POST 和GET 提交一些sql 语句正常执行。
    防止SQL 注入:
    1、开启配置文件中的magic_quotes_gpc 和
    magic_quotes_runtime 设置
    2、执行sql 语句时使用addslashes 进行sql 语句转换
    3、Sql 语句书写尽量不要省略小引号和单引号
    4、过滤掉sql 语句中的一些关键字:update、insert、
    delete、select、*
    5、提高数据库表和字段的命名技巧,对一些重要的字段
    根据程序的特点命名,取不易被猜到的。
    6、Php 配置文件中设置register_globals 为off,关闭
    全局变量注册
    7、控制错误信息,不要再浏览器上输出错误信息,将错
    误信息写到日志文件中。

    =》12
    写一个类,实现一个简单的拦截器功能?
    // 若访问一个未定义的属性,则将调用get{$property}对应的方法
    function __get($property){
    $method = "get{$property}";
    if (method_exists($this, $method)){
    return $this->$method();
    }
    }

    // 若给一个未定义的属性设置值,则将调用set{$property}对应的方法
    function __set($property, $value){
    $method = "set{$property}";
    if (method_exists($this, $method)){
    return $this->$method($value);
    }
    }

    // 若用户对未定义的属性调用isset方法,
    function __isset($property){
    $method = "isset{$property}";
    if (method_exists($this, $method)){
    return $this->$method();
    }
    }

    // 若用户对未定义的属性调用unset方法,
    // 则认为调用对应的unset{$property}方法
    function __unset($property){
    $method = "unset{$property}";
    if (method_exists($this, $method)){
    return $this->$method();
    }
    }

    function __call($method, $arg_array){
    if (substr($method,0,3)=="get"){
    $property = substr($method,3);
    $property = strtolower(substr($property,0,1)).substr($property,1);
    return $this->$property;
    }
    }

    =》13
    写出10个 Linux命令,附带意思。
    1、ls:命令是列出目录内容
    2、lsblk:就是列出块设备
    3、md5sum:就是计算和检验MD5信息签名。
    4、dd:命令代表了转换和复制文件
    5、uname显示内核类别, uname -a显示详细信息。
    6、history:命令就是历史记录
    7、udo:(super user do)命令允许授权用户执行超级用户或者其它用户的命令
    8、mkdir:(Make directory)命令在命名路径下创建新的目录。
    9、touch:命令代表了将文件的访问和修改时间更新为当前时间
    10、chmod”命令就是改变文件的模式位。
    11、chown”命令就是改变文件拥有者和所在用户组。
    12、tar”命令是磁带归档(Tape Archive),对创建一些文件的的归档和它们的解压很有用。
    13、cal”(Calender),它用来显示当前月份或者未来或者过去任何年份中的月份。
    14、date”命令使用标准的输出打印当前的日期和时间,也可以深入设置。
    15、cat”代表了连结(Concatenation),连接两个或者更多文本文件或者以标准输出形式打印文件的内容。
    16、cp 命令“copy”就是复制。它会从一个地方复制一个文件到另外一个地方。
    17、mv 命令“mv”命令将一个地方的文件移动到另外一个地方去。
    18、pwd”(print working directory),在终端中显示当前工作目录的全路径。
    19、cd”命令代表了改变目录。
    20、Debian系列以“apt”命令为基础,“apt”代表了Advanced Package Tool。APT是一个为Debian系列系统(Ubuntu,Kubuntu等等)开发的高级包管理器,在Gnu/Linux系统上,它会为包自动地,智能地搜索,安装,升级以及解决依赖。

  • 相关阅读:
    vue store状态存储管理
    Git分支管理
    oracle事务不能回滚的原因
    vue教程(四)--其他实用用法补充
    vue教程(三)-slotkeep-alive的使用
    vue教程(二)--过滤器和监视改动功能
    vue教程(一)-html使用vue
    Linux后台命令导入MySQL语句
    CentOS6下的ElasticSearch运行步骤
    浅谈JAVA代码优化
  • 原文地址:https://www.cnblogs.com/hejianrong/p/6385498.html
Copyright © 2011-2022 走看看