一.gc的过程。
1.第一步进行第一次标记,也就是从GCroot对象往下确认调用链,没有被引用的对象标记为垃圾,这种方法为可达性分析,gcroot对象从虚拟机栈,本地方法栈对象,方法区静态变量对象,方法区常量对象中选取。
2.第二步进行第二次标记,查看对象的finilize方法的引用对象是否在第一次标记的引用链上,如果有引用则放弃该对象的回收。
3.进行回收操作,新生代采用的是复制算法,老年代采用的是标记清除算法,或者标记整理法进行回收垃圾。
二、.双token机制
双token机制是为了解决活跃用户频繁登录设计的,用户登录后会返回两个token一个是accesstoken一个是refreshtoken,accesstoken一般有效期为30分钟内,accesstoken一般为一天或者两天,校验过程如下,1.服务器端校验accesstoken有效则放行 ,无效则校验refreshtoken
2.校验refreshtoken在有效期内,则说明该用户至少在这一天或者2天内是活跃的,刷新accesstoken和refreshtoken给到客户端。
3.这样如果用户是一天内活跃的就不用重新登录了。
4.如果两个token都失效了,则证明该用户一天或者两天没有活跃了,需要重新登录。
三、springgateway原理
1.springgateway底层使用的springwebflux框架进行通信,这个框架使用的是netty的reactor模型进行服务调用转发。
2.在多cpu的场景下,高并发使用的是主从reactor多线程模型进行服务转发。
3.reactor进行服务连接的建立和io事件处理。当请求过来的时候,分配给acceptor,acceptor分配给subreactor。
4.subReactor负责多路分离已连接的socket,读写网络数据;业务处理功能,其交给worker线程池完成。通常,subReactor个数上可与CPU个数等同。
5.该通信模式为io多路复用,在高并发的情景下性能更好。
四、springzuul原理
1.zuul原理和gateway不同,使用的是tomcat进行服务连接建立,通过zuulservlet进行服务的转发调用。
2.可以实现各种filter进行服务拦截。包括请求前,请求后处理。
五、springateway路由刷新
1.RefreshRoutesEvent继承了ApplicationEvent ,并且在定时任务里面去发布事件。
2.在发布事件里面,把路由定义也就是rotedefinition放到DynamicRouteDefinitionRepository类中,实现路由的刷新。
六、一万人同时登录能否使用消息去做。
1.不能使用消息去做,登录属于实时性要求很高的接口,消息适合处理实时性不高,但是并发量大的事务。
2.一万人同时操作,登录的接口链路尽量要短,对于一些异步操作不用使用同步去做,例如打点操作异步去做,用户信息存储redis,加快用户登录成功后获取用户信息速度。
七、如何从架构层面优化性能。
1.高并发服务单独做一个服务出来。
只能想到这个了,有厉害的可以评论区指导下。
八、saas平台如何架构
知识盲区。