一、互联网公司的服务器时常要面对黑客的攻击,一旦服务器被黑客登录,后果不敢想象,那么如何使用一种简单的方法来做简单的防御呢?
答案
处于安全考虑,现在要求屏蔽每分钟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:回显服务器收到的请求,主要用于测试或诊断