1、Redis同时访问大量不存在的key会发生什么?
-
如果是缓存和数据库中都不存在,那么就会发生缓存穿透。
-
举个例子:某个黑客故意制造一些非法的 key 发起大量请求,导致大量请求落到数据库,结果数据库上也没有查到对应的数据。
-
解决办法:
- 1)缓存无效 key,(给无效 key设置过期时间)
- 2)布隆过滤器,(判断 key 是否合法)
- 布隆过滤器维护了一个比特数组,配合多个hash函数一同使用,可将一个key映射到数组多个位置,并把对应位置bit数组值变为1,谈若某个key,映射到比特数组位置,发现对应位置存在0,那么证明,该key在数组中一定不存在。反之,只能说一定概率存在,因为可能多个key通过hash函数映射到相同位置。
-
当然,热点数据 ,该数据 存在于数据库中,但不存在于缓存中(通常是因为缓存中的那份数据已经过期),那么会发生缓存击穿。
2、Linux的5个命令,linux中实时查看滚动的业务日志用什么命令?
-
目录切换命令
- cd
-
目录的操作命令(增删改查)
- mkdir : 增加目录。
- rm [-rf] : 删除目录。
- mv 目录名称 新目录名称: 修改目录的名称。
- find :寻找目录。
-
文件的操作命令(增删改查)
- touch 文件名称: 文件的创建(增)。
- rm -rf 文件: 删除文件(删)。
- vim 文件: 修改文件的内容(改)。
- cat/more/less/tail 文件名称 :文件的查看(查) 。
-
压缩文件的操作命令
- tar -cvf/xvf/zcvf/zxvf 文件。
-
网络通信命令
- 查看当前系统的网卡信息:ifconfig。
- 查看与某台机器的连接情况:ping。
- 查看当前系统的端口使用:netstat -an。
-
最常用的tail -f filename,可以实时看滚动查看日志 。
- -f循环读取
3、在linux上搭建过环境吗?
- 在 VM 上,安装 3 台基于 CentOS7 的虚拟机。为避免虚拟机重启之后,DHCP 动态的分配 ip 地址,不利于 Nginx反向代理的配置,因此将 3 台虚拟机更改为局域网内的静态 ip。在 1 号虚拟机当中安装 Nginx 服务器并配置反向代理,同时在 html 目录中部署前端项目;在 2 号机和 3 号机当中同时安装 JDK、Git 和 maven 工具以及 mysql 数据库。项目部署策略采用 shell 脚本进行自动部署。首先查找项目进程,若进程存在则杀掉进程,然后使用 Git 从码云拉取后端项目代码,并使用 maven 打成 jar 包,最后基于 JDK 运行 jar 包,并将日志输出到当前目录。
4、线程和进程的区别?
-
进程和线程的区别?
- 进程:操作系统资源分配的最小单位。
- 线程:CPU进行运算调度的基本单位。
- 线程是进程内运算/运行单位==车间于生产线。
5、重写和重载的区别?
- 重写(override):也称为覆盖。重写是子类对父类非static、private,final修饰,非constructor等的实现过程进 行重新编写 , 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
- 重载:同一方法名,拥有不同的实现。
- 1.方法名必须相同;
- 2.参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
6、selenium用过吗?了解多少?
- selenium是开源免费的WEB端UI自动化测试框架,通常结合PO设计模式和单元测试框架UniteTest一起使用。
- PO设计模式通常为四层:依次是对象逻辑业务和数据驱动层,但我更喜欢叫做对象操作业务和数据驱动层。
- 对象层,通常完成元素定位。而元素定位依赖于属性名/标签名/层级/路径,具体的定位方式,主要方式有:
- id/name/class_name(class属性定位)/ tag_name(标签名称)
- link_text(定位超连接 a标签)/partial_link_text(定位超链接 a标签 模糊)
- xpath(基于元素路径)/css(元素选择器)
-逻辑层:通常通过元素定位之后,我们要进行键值或者点击等操作。所以我喜欢叫做操作层。
-业务层,主要完成业务处理,比如说对于一个网页计算机,我们先进行1点击在完成2点击,最后完成等于号点击,最后获取结果返回。
- 数据驱动层,需要继承单元测试框架类UniteTest.TestCase,我们一般先构造一个数据生成器,数据生成器,内部通过json.load加载已经打开的Json文件,加载进字典,并返回。使用@parameterized.expand(self.build_data)注解,完成测试用例函数参数的数据注入。
7、equals和==的区别?
- ==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
- ==指引用是否相同, equals()指的是值是否相同
8、public,private,protected的区别?
- 1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
- 2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用。
- 3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。互为友好关系的类。
9、子类怎么访问父类的私有方法
- 可以通过super关键字访问,主要是调用父类构造函数。
- 父类中有get和set方法,子类可通过调用this.方法名访问父类的私有属性。
10、查询成绩表的平均分,按降序排列
- SELECT AVG(progress) FROM student ORDER BY AVG(progress) DESC;
11、数据库的四个特性
- 1.原子性:事务是内定义的操作是一个整体,是不可分割的。
- 2.一致性:同一个事务,多次读取数据库中的同一个数据,读取的内容应该是一致的,不变的。
- 3.隔离性:不同事务之间相互独立、互不干扰。
- 4.持久性:事务提交质、事务内的操作对数据库的修改被永久保存在数据库文件。
- 隔离性,涉及事务的四种隔离级别:读未提交,读已提交,可重复读,可串行化。
- 读未提交,会造成脏读,不可重复度以及幻读。
- 读已提交,解决脏读问题,会造成不可重复度,以及幻读。
- 可重复读,解决脏读和不可重复读,但是会造成幻读。innodb默认隔离级别。
- 可串行化:解决脏读,不可重复读,和幻读。
- 不可重复度主要侧重于记录的改变和减少,幻读主要侧重于记录的增加。
- 隔离性,涉及事务的四种隔离级别:读未提交,读已提交,可重复读,可串行化。
- 对于持久性,涉及二次写操作:第一次写主要是刷脏页之前,会记录在redolog中,防止宕机的情况大致持久化失败,redolog可重新恢复脏页。第二次写:主要是脏页写入表中,但在此之前会进行持久化备份(同第一次写)。主要也是防止宕机等情况,导致脏页损坏。
12、char和varchar的区别
- char的长度是不可变的,而varchar的长度是可变的。
- char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找。
- char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节。
13、cookie和session的区别?为什么session这么好还要用cookie?
- cookie和session都是用来记录浏览器用户上下文状态信息。
- cookie: 将用户上下文状态信息保存在客户端。
- session:将用户上下文状态信息保存在服务端。
- 虽然,session技术将用户状态信息维护在了服务器端,但是还是会用到cookie,主要是为了区分不同的用户,此时的cookie不在有用户的上下文状态信息只是单纯的用户身份标识SessionID.
- cookie安全性不高,存在cookie欺骗,session相对来说安全性高一点,但是加重服务器的负担,安全性也不是绝对的,但我们访问一些不法网站的时候,非常容易遭到CSRF攻击,他会利用用户状态信息,发送不法请求。
14、UDP和TCP的区别?
- 是否有连接状态:TCP有连接状态(延申:三次握手,四次挥手),UDP是无连接状态
- 是否提供可靠性传输:TCP提供可靠性传输,UDP不提供可靠性传输,只是简单的校验和。
- TCP以数据块进行传输,提供失序数据包重排机制,提供超时重传,流量控制,拥塞控制(慢启动,拥塞避免,超时重传,快重传,快恢复)
- TCP传输效率低,UDP传输效率高
- TCP首部大概花销是20-60字节,UDP首部大概花销是8字节。
- TCP提供点到点传输,UDP提供广播服务,可一对一,一对多,多对多。
15、三次握手讲一下?
- 三次握手是TCP建立连接的过程,概括起来说是一次请求过程,和两次确认过程
- 第一次过程,客户端可服务端发送一个一个SYN同步请求,请求建立连接。
- 第二次过程,服务端向客户端发送一个ACK确认请求,表示已经收到客户端请求,同意建立连接。
- 第三个过程,客户端向服务端发送一个ACK请求,表示对之前的确认请求再次确认。
- 其实只需要两次握手就可以建立连接,之所以需要三次,主要是因为两点原因。
- 第一个是TCP是双向连接。
- 第二个是防止网络中之前阻塞的请求再次发起连接。
16、求一个字符串中出现次数最多的一个字符?
二面:
有了解过Spring MVC吗?怎么实现的?
- 什么是MVC?
- 是一种软件设计规范,MVC是一种架构模式。
- Model(模型):主要负责与数据库打交道,进行数据存取。
- View(视图):负责进行模型数据的展示,一般是前端页面。
- Controller(控制器):主要负责前后端数据交互逻辑处理。
- 什么是springMVC?
- 基于java实现的一个轻量级web框架。通过反射机制实现MVC的分离。
- SpringMVC以DispatcherServlet为核心,负责协调和组织不同组件以完成请求处理并响应返回的工作,实现了MVC模式。
- 实现:延申反射机制
Kafka是怎么实现消息的异步?
- 生产者和消费者模型:生产者往队列当中投放消息,消费者拉取消息,并进行处理。
cookies和sesssion的区别?
- cookie和session都是用来记录浏览器用户上下文状态信息。
- cookie: 将用户上下文状态信息保存在客户端。
- session:将用户上下文状态信息保存在服务端。
- 虽然,session技术将用户状态信息维护在了服务器端,但是还是会用到cookie,主要是为了区分不同的用户,此时的cookie不在有用户的上下文状态信息只是单纯的用户身份标识SessionID.
- cookie安全性不高,存在cookie欺骗,session相对来说安全性高一点,但是加重服务器的负担,安全性也不是绝对的,但我们访问一些不法网站的时候,非常容易遭到CSRF攻击,他会利用用户状态信息,发送不法请求。
重载和重写?java反射机制,设计模式有了解吗
- 重写(override):也称为覆盖。重写是子类对父类非static、private,final修饰,非constructor等的实现过程进 行重新编写 , 返回值和形参都不能改变。即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
- 重载:同一方法名,拥有不同的实现。
- 1.方法名必须相同;
- 2.参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
数据库视图有了解过吗?
- 视图就是执行查询语句后所返回的结果集(虚拟表)。
- 视图只供查询,数据不可更改。
- 应用:复杂的sql/权限管理
红黑树有了解过吗?
- 红黑树是自平衡二叉树(AVL)。
- 增删改查时间复杂度都在logn以内。
- 其中当插入一个元素导致AVL数不平衡,分为以下4中情况进行探讨。
- 第一种情况:往左子树的左节点插入,致使AVL不平衡,那么向右单转。
- 第二种情况:往右子树的右节点插入,致使AVL不平衡,那么向左单转。
- 第三种情况:往左子树的右节点插入,致使AVL不平衡,那么先向左旋转在向右旋转。
- 第四种情况:往右子树的左节点插入,致使AVL不平衡,那么先向右旋转在向左旋转。
数据库删除一个表的数据,有更简洁快速的方法吗?
- drop,truncate,delete
- drop:(删除表)直接删除一个表结构以及表数据。
- truncate:(清空表中的数据)不删除表结构,但要删除表数据。
- delete:(删除表中的数据)。
请求有哪几种方法
- 常见的有GET,POST,DELETE,PUT
- GET/DELETE:一般没有请求体。
有了解过Paas和Saas吗?
- iaas基础架构即服务,paas平台即服务,saas软件即服务。
- iaas:一切网络最基础的服务(甚至没有操作系统,裸机):华为云,阿里云。
- paas:(有操作系统,有数据库,各种中间件和运行库:就差应用软件)语音识别系统,人脸识别系统。
- saas(软件也准备好了,只需要进行数据管理):百度网盘,美团外卖。
淘宝页面,我的订单服务,整个页面的逻辑,你会怎么测试?
界面测试
1、页面的字样是否正确
2、文字格式大小是否统一
3、排版是否整齐、布局是否合理
4、重点和热销物品是否突出
5、页面上的所有链接是否有点击提示
6、页面上的二维码是否可扫
7、已点击过的链接是否与未点击过得做颜色区别
8、交互界面的设计是否方便;
功能测试
1、不输入任何东西点击搜索,能否跳转(默认搜索搜索框中物品)
2、输入特殊字符能否搜正常搜索到物品
3、这个页面上所出现的所有链接可不可以正确跳转,像天猫,聚划算,充值话费等;
4、是否可以通过淘宝APP扫码登录;
5、点击搜索框的相机会不会跳到本地图片选择界面;
6、输入英文是否可搜索,
7、搜索关键字过长,还能不能搜索
8、复制粘贴过来的搜索词能否正常搜索
9、在搜索框输入空格,能否正常搜索
10、反复输入相同的搜索词8次以上,处理结果是否依然正确
11、是否支持回车键进行搜索
12、搜索词输错时可不可以删了重新输入
13、查询结果是否罗列有序;
14、有多条重复搜索历史时只保留一条
性能测试
1、从点击到搜索结果出来需要多久,分网络良好和网络不好两种情况
2、搜索页面打开速度是否满足358原则
3、对淘宝不断加压测试,不断地向淘宝提交请求
4、它所占据的cpu利用率是多少
5、压力测试,在不同并发用户数下,它的响应时间是多少;
6、能承受的最大用户量是多少;
7、常规压力下能正常持续稳定运行多久;
兼容性测试
1、淘宝首页的链接能不能通过在新窗口打开链接
2、不同的浏览器,比如搜狗、谷歌
3、不同的移动端。
4、不同的操作系统
5、淘宝的不同的版本
6、用简体字繁体字分别测试
安全性测试
1、敏感内容应该是禁止搜索的,这方面是否做了过滤
2、如果搜索词带有病毒也不允许搜索
3、有sql注入时还能否搜索
4、淘宝内部删除加密或进行去其他处理过的数据还能不能搜索
易用性
1、有没有在线帮助文档
2、输入一个关键词下面有没有关键词相对应的物品提示
3、如果没有搜出来会不会有相对应的提示(您要找的是不是***)
4、能不能通过别人分享的链接搜索
其他测试
1、查询过程中断网或者关机
2、查询过程中强行关闭页面
3、有没有容错方面处理