小滴课堂后端面试题(6)~持续更新中

一、互联网公司的服务器时常要面对黑客的攻击,一旦服务器被黑客登录,后果不敢想象,那么如何使用一种简单的方法来做简单的防御呢?

答案

处于安全考虑,现在要求屏蔽每分钟ssh尝试登陆linux服务器 超过10次的IP进行屏蔽

编写shell脚本获取对应ip加入黑名单(基于iptables并非fifirewall)

#!/bin/bash

DATE=$(date +"%a %b %e %H:%M") #星期月天时分 %e单数字时显示7,而%d显示07

ABNORMAL_IP=$(lastb |grep "$DATE" |awk '{a[$3]++}END{for(i in

a)if(a[i]>10)print i}')

for IP in $ABNORMAL_IP; do

   if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then

  iptables -I INPUT -s $IP -j DROP

   fi

done
复制代码

二、分布式应用的登录校验解决方案有哪几种

方案一

  • 真实的应用不可能单节点部署,所以就有个多节点登录session共享的问题需要解决

  • tomcat支持session共享,但是有广播风暴;用户量大的时候,占用资源就严重,不推荐

方案二

使用redis存储token:

  • 服务端使用UUID生成随机64位或者128位token,放入redis中,然后返回给客户端并存储在cookie中

  • 用户每次访问都携带此token,服务端去redis中校验是否有此用户即可

方案三

JWT,即 json wen token

  • JWT 是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名

  • 简单来说: 就是通过一定规范来生成token,然后可以通过解密算法逆向解密token,这样就可以获取用户信息

优点

  • 生产的token可以包含基本信息,比如id、用户昵称、头像等信息,避免再次查库

  • 存储在客户端,不占用服务端的内存资源

缺点

  • token是经过base64编码,所以可以解码,因此token加密前的对象不应该包含敏感信息,如用户权限,密码等

  • 如果没有服务端存储,则不能做登录失效处理,除非服务端改秘钥

三、搭建过mysql数据库主从复制,你能画出流程图说下异步复制原理吗?

四、除了使用ThreadPoolExecutor ,还有没有其他方式创建线程池?

答案

可以通过Executors去进行创建,分别有:

  • newCachedThreadPool:创建一个可以根据需要创建新线程的线程池,如果有空闲线程,优先使用空闲的线程

  • newFixedThreadPool:创建一个固定大小的线程池,在任何时候,最多只有N个线程在处理任务

  • newScheduledThreadPool:能延迟执行、定时执行的线程池

  • newWorkStealingPool:工作窃取,使用多个队列来减少竞争

  • newSingleThreadExecutor:单一线程的线程次,只会使用唯一一个线程来执行任务,即使提交再多的任务,也都是会放到等待队列里进行等待

  • newSingleThreadScheduledExecutor:单线程能延迟执行、定时执行的线程池

上面这几种方式,底层还是使用ThreadPoolExecutor创建线程池,且如果使用不当,容易造成oom

  • newFixedThreadPool newSingleThreadExecutor:允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。

  • newCachedThreadPool newScheduledThreadPool:允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM

此时,如果能结合某个具体例子进行说明,效果会更加好,比如:

在某次线上发生OOM,通过分析程序因为无法创建新的线程而OOM,初步判断可能是线程过多导致的OOM,整个应用存在大量线程,再从代码分析,是由于使用了newCachedThreadPool创建线程池,在该时刻提交的任务数过大,导致的OOM。后面改为new ThreadPoolExecutor ,显示指定拒绝策略

五、常见的Http Method有哪些,使用场景分别是?

答案

http1.0定义了三种:

  • GET: 向服务器获取资源,比如常见的查询请求

  • POST: 向服务器提交数据而发送的请求

  • Head: 和get类似,返回的响应中没有具体的内容,用于获取报头

http1.1定义了六种:

  • PUT:一般是用于更新请求,比如更新个人信息、商品信息全量更新

  • PATCH:PUT 方法的补充,更新指定资源的部分数据

  • DELETE:用于删除指定的资源

  • OPTIONS: 获取服务器支持的HTTP请求方法,服务器性能、跨域检查等

  • CONNECT: 方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户,网页开发基本不用这个方法,如果是http代理就会使用这个,让服务器代理用户去访问其他网页,类似中介

  • TRACE:回显服务器收到的请求,主要用于测试或诊断


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值