java中的关键词汇含义和细碎知识点

本文详细介绍了Java中的关键词汇,包括HandleInterceptor、instanceof、分布式跟踪技术如Dapper、Sleuth和Zipkin,以及Thymeleaf、幂等性、雪花算法、JPA和RESTful API等。同时讲解了注解如@Component、@CrossOrigin的用途,CAP理论,以及session、cookie、token在安全认证中的角色。此外,还探讨了多态、浅拷贝和深拷贝、反射中的Class.forName与ClassLoader的区别、JVM内存模型、动态代理、数组与链表的区别、异常类型,以及线程池和Redis的三种模式。文章最后讨论了单点登录原理和红黑树的实现及应用场景。
摘要由CSDN通过智能技术生成

JAVA关键词汇

一: java

https://blog.csdn.net/sinat_35512245/article/details/59056120
记录java项目中的关键词汇

1.1 HandleInterceptor拦截器

SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对请求进行拦截和处理。

  • preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
  • postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回
  • ModelAndView,但未进行页面渲染),有机会修改ModelAndView (这个博主就基本不怎么用了);
    afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染

单个实现类的执行顺序
preHandler -> Controller -> postHandler -> model渲染-> afterCompletion

1.2 instanceof

用来在运行时指出对象是否是特定类的一个实例,返回布尔类型

if (anObject instanceof String){
   

}else{
   

}

1.3 分布式跟踪技术

1.3.1 Dapper

  • Dapper:大规模分布式系统的跟踪系统,帮助理解系统行为,用于分析性能问题,

1.3.2 Sleuth框架

用于跟踪服务的调用过程
Sleuth借鉴了Google Dapper的设计,先了解两个概念

  • Trace 表示整个跟踪过程,从用户发起请求到最终的响应。一次跟踪包括多个跨度,这些跨度以树状结构进行保存。
  • Span:跨度,表示一次调用的过程,一次跟踪包含多次调用过程。假设用户向A服务发起请求,A服务又要调用B服务,那么此时将会产生两个跨度。用户调用A服务、A服务调用B服务。

1.3.3 RPC

  • RPC(Remote Procedure Call Protocol)–远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议
  • RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。

1.3.4 Zipkin

  • Zipkin是一个分布式跟踪系统,主要用于收集、管理微服务产生的数据。Zipkin的设计基于Google Dapper,在实际用时,我们需要让各个微服务Zipkin服务器报告过程数据。
  • 对于Spring Cloud来说,已经提供了几个模块来实现数据报告功能,仅需要加入依赖,以及简单配置,即可实现向Zipkin“写入”数据

1.4 Thymeleaf

  • Thymeleaf是一个流行的模板引擎,
  • 页面模板技术
  • Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板

传统的Spring WEB技术,使用JSP页面技术,spring boot 已不推荐,spring boot 支持以下页面模板语言

  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • JSP

1.4 安全幂等

get:安全幂等
post:不安全不幂等:当插入一条数据时,遇到网络不佳,可能会多插入,所以不幂等
update:多次更新,扔一个条数据,所以幂等
幂等:对数据库操作成功之后会不会产生影响,如果有影响则是不幂等
Post

1.5 snowflake (雪花)算法

  • 用于生成不同的ID,总共64位。

1.6 JPA

类似与mybatis

1.7 RESTful API

1.7.1 介绍

  • RESTful API就是一套协议来规范多种形式的前端和同一个后台的交互方式。
  • RESTful API由后台也就是SERVER来提供前端来调用。前端调用API向后台发起HTTP请求,后台响应请求将处理结果反馈给前端。也就是说RESTful 是典型的基于HTTP的协议

1.7.2 设计原则和规范

  • 资源:资源就是网络上的一个实体,一段文本,一张图片或者一首歌曲。资源总是要通过一种载体来反应它的内容。文本可以用TXT,也可以用HTML或者XML、图片可以用JPG格式或者PNG格式,JSON是现在最常用的资源表现形式。
  • 统一接口:RESTful风格的数据元操CRUD(create,read,update,delete)分别对应HTTP方法:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源,这样就统一了数据操作的接口。
  • URL:可以用一个URI(统一资源定位符)指向资源,即每个URI都对应一个特定的资源。要获取这个资源访问它的URI就可以,因此URI就成了每一个资源的地址或识别符。一般的,每个资源至少有一个URI与之对应,最典型的URI就是URL。
  • 无状态:所谓无状态即所有的资源都可以URI定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而变化。

二:注解

2.1 @Component

泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标记

2.2 @CrossOrigin

在微服务中,在controller层加上该注解,允许跨域请求

2.3@ConfigurationProperties和@EnableConfigurationProperties

  • @ConfigurationProperties注解主要用老吧properties配置文件转换为bean使用,
  • @EnableConfigurationProperties作用是为了让ConfigurationProperties注解生效,如果只使用前者,则无法将配置文件装成bean。

三:理论

3.1 CAP理论

CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

  • 一致性:即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,所以,一致性,说的就是数据一致性。
  • 可用性:服务一直可用,而且是正常响应时间。对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应。所以,一般我们在衡量一个系统的可用性的时候,都是通过停机时间来计算的。
  • 分区容错性:分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。简单点说,就是在网络中断,消息丢失的情况下,系统如果还能正常工作,就是有比较好的分区容错性。
    在这里插入图片描述

假设在N1和N2之间网络断开的时候,有用户向N1发送数据更新请求,那N1中的数据V0将被更新为V1,由于网络是断开的,所以分布式系统同步操作M,所以N2中的数据依旧是V0;这个时候,有用户向N2发送数据读取请求,由于数据还没有进行同步,应用程序没办法立即给用户返回最新的数据V1,怎么办呢?
有二种选择

  • 第一,牺牲数据一致性,保证可用性。响应旧的数据V0给用户;
  • 第二,牺牲可用性,保证数据一致性。阻塞等待,直到网络连接恢复,数据更新操作M完成之后,再给用户响应最新的数据V1。

这个过程,证明了要满足分区容错性的分布式系统,只能在一致性和可用性两者中,选择其中一个。

四:安全认证(session、cookie、token)

cookie:数据只会保存在浏览器中,当需要开发安卓IOS时,使用cookie比较麻烦,需要更改

4.1 session

会话标识:客户端和服务器中都需要保存,
客户端(浏览器)如何保存这个“身份标识”,一般默认采用 Cookie 的方式,这个会话标识(Session id)会存在客户端的Cookie中。

4.2 cookie

数据保存在浏览器中,
session的id一般存于cookie中。

  • session和cookie一般配合使用,cookie值保存在浏览器中,而session保存在服务端。但是当用户量太大的时候,会造成存储多,需要的服务多。

4.3 token

在这里插入图片描述
在这里插入图片描述

4.3 登录有状态、无状态区别

  • 有状态:服务器端保存记录(cookie、session)
  • 无状态:服务器端不用保存记录(JWT、token)

4.4 RBAC

RBAC基于角色的访问控制(Role-Based Access Control)是按角色进行授权,比如:主体的角色为总经理可以查
询企业运营报表,查询员工工资信息等,访问控制流程如下:

五:细碎知识点

5.1 多态

  • 必须满足的条件:
    继承
    重写
    父类引用指向子类对象
    在这里插入图片描述

5.2 浅拷贝和深拷贝的区别?

  • 浅拷贝可以使用列表自带的copy()函数(如list.copy()),或者使用copy模块的copy()函数。
  • 深拷贝只能使用copy模块的deepcopy()

区别

  • 浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象,当对象中含有对象时,则复制子对象的地址
  • 深拷贝把要复制的对象所引用的对象都复制了一遍。当对象中含有对象时,则将子对象也复制。改变子对象后,复制出来的对象里面的属性不会发生变化。而浅拷贝则会变化

5.3 反射中,Class.forName 和 ClassLoader 区别。

  • 在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三 步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:
      装载:查找和导入类或接口的二进制数据;
      链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
      校验:检查导入类或接口的二进制数据的正确性;
      准备:给类的静态变量分配并初始化存储空间;
      解析:将符号引用转成直接引用;
      初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
  • Class.forName(className)方法,其实调用的方法是Class.forName(className,true,classloader);注意看第2个boolean参数,它表示的意思,在loadClass后必须初始化。比较下我们前面准备jvm加载类的知识,我们可以清晰的看到在执行过此方法后,目标对象的 static块代码已经被执行,static参数也已经被初始化。
  • 再看ClassLoader.loadClass(className)方法,其实他调用的方法是ClassLoader.loadClass(className,false);还是注意看第2个 boolean参数,该参数表示目标对象被装载后不进行链接,**这就意味这不会去执行该类静态块中间的内容。**因此2者的区别就显而易见了。

5.4 .如何在父类中为子类自动完成所有的 hashcode 和 equals 实现?这么做有何优劣。

hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠

  • equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。
  • hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。

5.5描述动态代理的几种实现方式,分别说出相应的优缺点。

jdk、cglib

  • jdk动态代理是由java内部的反射机制来实现的,
  • cglib动态代理底层则是借助asm来实现的。
    jdk动态代理的应用前提,必须是目标类基于统一的接口。如果没有上述前提,jdk动态代理不能应用。由此可以看出,jdk动态代理有一定的局限性,cglib这种第三方类库实现的动态代理应用更加广泛,且在效率上更有优势。

5.6 数组与链表的优缺点和区别

  • 数组 
    **是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。**但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。
    如果应用需要快速访问数据,很少插入和删除元素&
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值