1.for循环和forEach的区别?
- for循环本质是一种循环机制,只能通过循环遍历数组;foreach其实是一个迭代器(使用next()方法返回对象),负责遍历可迭代的对象;
- for循环中可使用contine,break进行循环中断,foreach会报错;
- foreach循环内部删除自身元素,index不可被重置
- for循环可以控制循环的起点
- 性能方面for>foreach,for循环没有额外的函数调用栈和上下文,所以它的实现最为简单。forEach它的函数签名中包含了参数和上下文,所以性能会低于for循环。
2. Java迭代器Iterator和Iterable有什么区别?
Iterable是一个的接口,实现该接口的集合能够使用for-each循环遍历对象,此接口只有一个方法:iterator(),该方法返回在当前集合元素上进行迭代的迭代器,通过迭代器的hasNext()和next()方法判断是否存在对象和获取存在的对象。
3. 什么是jwt?
- JWT , 全写JSON Web Token, 是开放的行业标准RFC7591,用来实现端到端安全验证.简单来说, 就是通过一些算法对加密字符串和JSON对象之间进行加解密。JWT加密JSON,保存在客户端,不需要在服务端保存会话信息,可以应用在前后端分离的用户验证上,后端对前端输入的用户信息进行加密产生一个令牌字符串, 前端再次请求时附加此字符串,后端再使用算法解密。
4. 谈谈为什么要限流,限流的方案有哪些?
- 限流是一种常见的应用程序保护机制,用于控制对系统或接口的访问速率,主要作用:保护系统稳定性、防止恶意攻击、提供公平的网络环境等。
实现限流的方式:
- 判断是否有相同的请求,可以通过自身缓存挡住相同请求
- 用负载均衡,比如nginx
- 用缓存数据库,把热点数据get到缓存中,redis,ES
5.HTTPS 是如何保证传输安全的?
- HTTP 协议是一种基于文本的传输协议,它位于 OSI 网络模型中的
应用层,HTTP 协议中的报文都是以明文的方式进行传输,不做任何加密,所以是非常的不安全的。既然内容是明文那我使用对称加密的方式将报文加密,但其实在通讯过程中还是会以明文的方式暴露加密方式和秘钥,如果第一次通信被拦截到了,那么秘钥就会泄露给中间人,可以采用非对称加密,将秘钥进行加密不让中间人看到。 - HTTPS 其实是
SSL+HTTP的简称,其实SSL协议使用非对称加密,握手的过程中主要也是为了交换秘钥,然后再通讯过程中使用对称加密进行通讯,大概流程如下:
使用
CA 认证体系,防止中间人攻击的。
6.WebSocket 和 Socket 及 Http 的区别?
- TPC/IP协议是传输层协议,主要解决数据如何在网络中传输;
- Socket是对TCP/IP协议的封装和应用(程序员层面上);
- 而HTTP是应用层协议,主要解决如何包装数据。
7.ElasticSearch是什么?应用场景是什么?
ElasticSearch是一个分布式,高性能、高可用、可伸缩的搜索和分析系统,可以进行全文检索、全文检索,结构化检索,数据分析,对海量数据进行近实时的处理。