面试经常提问
Posted hjp0516-qq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试经常提问相关的知识,希望对你有一定的参考价值。
一:如果chmod-x/bin/chmod执行上述命令后,如何恢复
- 重装coreutils
- 安装busybox,使用busybox chmod + x /bin/chmod改回来
Per版:sudo perl-e’chmod 0775,”/bin/chmod”
Python3版:sudo python-c”import os;os.chmod(“/bin/chmod”,0755)”
二:一台电脑配置无限好,可以同时打开多少个网页?
65535-1024=64511(端口数)
三:IP地址能被伪造吗?
http头部可以被篡改,但是只能修改X_FORWARDED_FOR,真实ip地址(REMOTE_ADDR)很难修改(除非是路由器去修改),因为真实IP是底层会话IP地址,而且因为TCP3次握手的存在,连接无法建立,伪造的意义不大,至于UDP的话,一般是内网才使用UDP通信。
四:有100万个奖品,每个人可以中奖3次,先到先得,怎么控制并发,不能发超,并保证完全的先到先得模式?
如果奖品相同,则在redis中初始化一个值5为100万的KV值,每当一个用户抽奖时,现在Redis判断该用户的抽奖记录,如果抽奖记录小于3则可去抽奖,并增加抽奖记录。否则重定向到静态页面,直到100W奖品抽完为止。如果奖品不通,需要根据奖品种类初始化奖品种类数量的KV值,重复上面过程。
五:Memcache和Redis的区别?
- Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcache相比一个最大的区别。
- Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcache只是简单的K/V缓存。
- 他们的扩展都需要做集群;实现方式:master-slave、Hash。
- 在100k以上的数据中,Memcache性能要高于Redis
- 如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcache。当然这和你的应用场景和数据特性有关。
- 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcache都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
- Redis和Memcache在写入性能上面差别不打,读取性能上面尤其是批量读取性能上面Memcache更强
- Redis支持多种数据结构,如string,list,dict,set,,zset,hyperloglog一个网页从输入地址回车,到完整展示网页内容这段时间里,做了哪些工作,越详细越好。
- 浏览器本地缓存匹配
- 本地hosts映射对比
- 本地dns缓存解析
- 远程dns解析获得服务器Ip地址
- 浏览器发送tcp连接请求包(syn)
- 请求包经过传输层、网络层、数据链路层封装通过网卡到达路由器
- 路由器转发数据包到所属运营商服务器
- 运营商服务器通过寻址最短路径通过中继节点到达指定IP地址
- 服务器端可能存在反向代理或者负载均衡,都是直接转发请求之上游服务器,当然也可以制定安全防御规则直接丢齐请求包
- 上游服务器收到连接请求,在自身可用的情况下,返回(syn+ack)
- 浏览器校验ack,再次发送(syn+ack)
- 服务器校验ack切换连接状态至established,然后根据请求传输数据包
- 当transform-encoding为chunked时浏览器开始渲染页面;四次挥手,连接关闭
- 渲染数据完成
六:HTTP Keep-Alive是什么?
HTTP协议采用“请求-应答”模式,当使用普通模式,即5非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(Http协议为无连接的协议),当时用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
Http1.0中默认是关闭的,需要在http头加入“Connection:Keep-Alive”,才能启用Keep-Alive;http1.1中默认启用Keep-Alive如果加入“Connection:close”,才关闭目前大部分浏览器都是用http1.1协议,也就是说默认都会发起Keep-Alive的连接请求了,所以是否能完成一个完整的Keep- Alive连接就看服务器设置情况。
七:myisam跟innodb有什么区别?
- InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
- InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败;
- InnoDB是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
- InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
- Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;
八:什么是 CSRF 攻击 ?XSS 攻击?如何防范?
XSS定义的主语是“脚本”,是一种跨站执行的脚本,也就是javascript脚本,指的是在网站上注入我们的javascript脚本,执行非法操作。
CSRF定义的主语是”请求“,是一种跨站的伪造的请求,指的是跨站伪造用户的请求,模拟用户的操作。
防御XSS攻击可以通过以下两方面操作:
对用户表单输入的数据进行过滤,对javascript代码进行转义,然后再存入数据库;
在信息的展示页面,也要进行转义,防止javascript在页面上执行。
CSRF攻击的防御可以通过以下两方面操作:
所有需要用户登录之后才能执行的操作属于重要操作,这些操作传递参数应该使用post方式,更加安全;
为防止跨站请求伪造,我们在某次请求的时候都要带上一个csrf_token参数,用于标识请求来源是否合法,csrf_token参数由系统生成,存储在SESSION中。
以上是关于面试经常提问的主要内容,如果未能解决你的问题,请参考以下文章