Java面试指导

我们是做就业服务的工作室,没有任何培训机构性质!!
主做Java、python、c++,前端vue,react等,
全国各地,简历包装,投递邀约,视频面试,技术面试包通过,离职背调等,
通过正常上班,不拿offer不收费,
不要浪费投递简历的机会和面试机会,
如果已经在职的话,并且不满意目前薪资也可以联系我们。关注公众号回复“就业”即可。

image-20241203185525611

或者添加微信咨询:
添加微信

网络

什么是认证和授权?如何设计⼀个权限认证框架?

认证: 就是对系统访问者的身份进⾏确认。

授权:就是对系统访问者的⾏为进⾏控制。授权通常是在认证之后,对系统内的⽤户隐私数据进⾏保 护。后台接⼝访问权限、前台控件的访问权限。

RBAC模型: 主体 -> ⻆⾊ -> 资源 -> 访问系统的⾏为。

认证和授权也是对⼀个权限认证框架进⾏扩展的两个主要的⽅⾯。

如果没有Cookie,Session还能进⾏身份验证吗?

当服务器tomcat第⼀次接收到客户端的请求时,会开辟⼀块独⽴的session空间,建⽴⼀个session对 象,同时会⽣成⼀个session id,通过响应头的⽅式保存到客户端浏览器的cookie当中。以后客户端的 每次请求,都会在请求头部带上这个session id,这样就可以对应上服务端的⼀些会话的相关信息,⽐ 如⽤户的登录状态。

如果没有客户端的Cookie,Session是⽆法进⾏身份验证的。

当服务端从单体应⽤升级为分布式之后,cookie+session这种机制要怎么扩展?

  1. session黏贴: 在负载均衡中,通过⼀个机制保证同⼀个客户端的所有请求都会转发到同⼀个 tomcat实例当中。问题: 当这个tomcat实例出现问题之后,请求就会被转发到其他实例,这时候 ⽤户的session信息就丢了。
  2. session复制: 当⼀个tomcat实例上保存了session信息后,主动将session 复制到集群中的其他实 例。问题: 复制是需要时间的,在复制过程中,容易产⽣session信息丢失。
  3. session共享: 就是将服务端的session信息保存到⼀个第三⽅中,⽐如Redis。

什么是CSRF攻击?如何防⽌?

CSRF: Cross Site Requst Forgery 跨站请求伪造,⼀个正常的请求会将合法⽤户的session id保存到 浏览器的cookie。这时候,如果⽤户在浏览器中打来另⼀个tab⻚, 那这个tab⻚也是可以获得浏览器的 cookie。⿊客就可以利⽤这个cookie信息进⾏攻击。

攻击过程:

  1. 某银⾏⽹站A可以以GET请求的⽅式发起转账操作。 www.xxx.com/transfor.do? accountNum=100&money=1000 accountNum表示⽬标账户。这个请求肯定是需要登录才可以正常访问的。
  2. 攻击者在某个论坛或者⽹站上,上传⼀个图⽚,链接地址是 www.xxx.com/transfer.do? accountNum=888&money=10000 其中这个accountNum就是攻击者⾃⼰的银⾏账户。
  3. 如果有⼀个⽤户,登录了银⾏⽹站,然后⼜打开浏览器的另⼀个tab⻚,点击了这个图⽚。这时,银⾏就会受理到⼀个带了正确cookie的请求,就会完成转账。⽤户的钱就被盗了。

CSRF防⽌⽅式:

  1. 尽量使⽤POST请求,限制GET请求。POST请求可以带请求体,攻击者就不容易伪造出请求。
  2. 将cookie设置为HttpOnly : respose.setHeader(“Set-Cookie”,”cookiename=cookievalue;HttpOnly”)。
  3. 增加token;
  4. 在请求中放⼊⼀个攻击者⽆法伪造的信息,并且该信息不存在于cookie当中。这也是Spring Security框架中采⽤的防范⽅式。

什么是OAuth2.0协议?有哪⼏种认证⽅式?

OAuth2.0是⼀个开放标准,允许⽤户授权第三⽅应⽤程序访问他们存储在另外的服务提供者上的信息, ⽽不需要将⽤户名和密码提供给第三⽅应⽤或分享他们数据的所有内容。

OAuth2.0协议的认证流程,简单理解,就是允许我们将之前的授权和认证过程交给⼀个独⽴的第三⽅进 ⾏担保。

OAuth2.0协议有四种认证⽅式:

  1. 授权码模式
  2. 简化模式
  3. 密码模式
  4. 客户端模式

什么是SSO?与OAuth2.0有什么关系?

OAuth2.0的使⽤场景通常称为联合登录, ⼀处注册,多处使⽤

SSO Single Sign On 单点登录。 ⼀处登录,多处同时登录

SSO Single Sign On 单点登录。 ⼀处登录,多处同时登录

如何设计⼀个开放授权平台?

开放授权平台也可以按照认证和授权两个⽅向来梳理。

  1. 认证: 就可以按照OAuth2.0协议来规划认证的过程。
  2. 授权:
  • ⾸先需要待接⼊的第三⽅应⽤在开放授权平台进⾏注册,注册需要提供⼏个必要的信息 clintID, 消息推送地址,密钥(⼀对公私钥,私钥由授权平台⾃⼰保存,公钥分发给第三⽅应⽤)。
  • 然后,第三⽅应⽤引导客户发起请求时,采⽤公钥进⾏参数加密,授权开放平台使⽤对应的私 钥解密。
  • 接下来:授权开放平台同步响应第三⽅应⽤的只是消息是否处理成功的结果。⽽真正的业务数 据由授权开放平台异步推动给第三⽅应⽤预留的推送地址。

epoll和poll的区别

  1. select模型,使⽤的是数组来存储Socket连接⽂件描述符,容量是固定的,需要通过轮询来判断是 否发⽣了IO事件
  2. poll模型,使⽤的是链表来存储Socket连接⽂件描述符,容量是不固定的,同样需要通过轮询来判 断是否发⽣了IO事件
  3. epoll模型,epoll和poll是完全不同的,epoll是⼀种事件通知模型,当发⽣了IO事件时,应⽤程序才 进⾏IO操作,不需要像poll模型那样主动去轮询

TCP的三次握⼿和四次挥⼿

TCP协议是7层⽹络协议中的传输层协议,负责数据的可靠传输。

在建⽴TCP连接时,需要通过三次握⼿来建⽴,过程是:

  1. 客户端向服务端发送⼀个SYN
  2. 服务端接收到SYN后,给客户端发送⼀个SYN_ACK
  3. 客户端接收到SYN_ACK后,再给服务端发送⼀个ACK

在断开TCP连接时,需要通过四次挥⼿来断开,过程是:

  1. 客户端向服务端发送FIN
  2. 服务端接收FIN后,向客户端发送ACK,表示我接收到了断开连接的请求,客户端你可以不发数据 了,不过服务端这边可能还有数据正在处理
  3. 服务端处理完所有数据后,向客户端发送FIN,表示服务端现在可以断开连接
  4. 客户端收到服务端的FIN,向服务端发送ACK,表示客户端也会断开连接了

浏览器发出⼀个请求到收到响应经历了哪些步骤?

  1. 浏览器解析用户输入的URL,生成一个HTTP格式的请求
  2. 先根据URL域名从本地hosts.文件查找是否有映射P,如果没有就将域名发送给电脑所配置的DNS进行域名解析,得到P地址
  3. 浏览器通过操作系统将请求通过四层网络协议发送出去
  4. 途中可能会经过各种路由器、交换机,最终到达服务器
  5. 服务器收到请求后,根据请求所指定的端口,将请求传递给绑定了该端口的应用程序,比如8080被tomcat占用了
  6. tomcat接收到请求数据后,按照http协议的格式进行解析,解析得到所要访问的servlet
  7. 然后servlet来处理这个请求,如果是Spring MVC中的DispatcherServlet,,那么则会找到对应的Controller中的方法,并执行该方法得到结果
  8. Tomcat得到响应结果后封装成HTTP响应的格式,并再次通过网络发送给浏览器所在的服务器
  9. 浏览器所在的服务器拿到结果后再传递给浏览器,浏览器则负责解析并渲染

跨域请求是什么?有什么问题?怎么解决?

跨域是指浏览器在发起⽹络请求时,会检查该请求所对应的协议、域名、端⼝和当前⽹⻚是否⼀致,如 果不⼀致则浏览器会进⾏限制,⽐如在www.baidu.com的某个⽹⻚中,如果使⽤ajax去访问 www.jd.com是不⾏的,但是如果是img、iframe、script等标签的src属性去访问则是可以的,之所以浏 览器要做这层限制,是为了⽤户信息安全。但是如果开发者想要绕过这层限制也是可以的:

  1. response添加header,⽐如resp.setHeader(“Access-Control-Allow-Origin”, “*”);表示可以访问 所有⽹站,不受是否同源的限制
  2. jsonp的⽅式,该技术底层就是基于script标签来实现的,因为script标签是可以跨域的
  3. 后台⾃⼰控制,先访问同域名下的接⼝,然后在接⼝中再去使⽤HTTPClient等⼯具去调⽤⽬标接⼝
  4. ⽹关,和第三种⽅式类似,都是交给后台服务来进⾏跨域访问

零拷⻉是什么

零拷⻉指的是,应⽤程序在需要把内核中的⼀块区域数据转移到另外⼀块内核区域去时,不需要经过先 复制到⽤户空间,再转移到⽬标内核区域去了,⽽直接实现转移。

公告
面试指导,100%帮您拿Offer,不拿Offer不收费!!!