暂无个人介绍
泛型更多是在编译层面的优化,简化语法,只是一种类型擦除,运行时和不用泛型没有本质的区别
在楼上基础上补充: 1. 异常处理,错误码清晰,是否可重试
JSR133 是关于Java内存模型的标准
线程池就是一个资源池,里面预先创建好一定数量的线程。当你需要时,直接从池中取就可以,用完归还~池的思想可以极大减少每次创建线程的代价。 类似思想在很多地方均有应用,如数据库连接池(可参看common-dbcp 连接池)
直接看JDK源码最清晰了~ Thread类里面 ThreadLocal.ThreadLocalMap threadLocals , 每个Thread都有一个 ThreadLocalMap,存放了线程相关的 ThreadLocal对象
这是由JVM内存模型决定的~ volatile特性 避免了 多CPU下读取到寄存器缓存数据的不一致问题
大学期间肯定还是要打好底层基础的,像计算机系统原理、网络协议、数据库、分布式系统等等。工作后的项目经验,本质上还是依赖这些底层基础~ Java语言本身是很容易上手的,至于各类框架无非还是为了解决特定的问题进行的一些通用功能的封装
DB、存储、分布式系统 这些基础打牢!! 各种框架只是解决特定问题
spring最初就是一个依赖注入组件。现在变得功能很全也很大。如果只想看一个IOC框架怎么实现,可以看下PicoContainer这个
看你们公司的业务规模吧~ 一般来说,不建议立即更新的。 但如果业务很小,你有较大的自主权,也可以立马用起来,快速熟悉新特性
Spring源码里面有完成的test,可以从一个test 出发 ,一步步Debug。 先搞清楚 Spring启动时bean的加载过程~ 深入的可以继续看下 AOP代理在事物方面的应用
Spring的AOP实现最底层还是 通过 Cglib或JdkProxy 2中方式生成代理对象完成
IOC:则是通过配置bean之间的依赖关系,由Bean容器完成bean的依赖注入
Sring已经有15年以上的历史了,最初是一个简单的依赖注入组件,后面形成了一整套生态。目前是整个业界 JavaWeb 开发必不可少的框架
是的,默认会保证数据存储3副本全部成功才算成功
根据Java内存模型,volatile变量在每次读取、更新时 都会同步到 主内存中,而不会读写CPU寄存器缓存
大并发的情况下,核心应该是防止单点雪崩,即怎样保护系统不被流量打垮~
一般的方式有: 1. 限流 如Sentinel 2. 增加服务器 3. 排队 4. 先优化自己的系统性能,如有无慢sql、接口耗时 5. 对下游依赖系统一定要配置好 超时时间等、降级等
一致性: 在请求量较大时,一般采用最终一致性,即允许短暂的数据不一致。
你的分布式事物仅限于DB层面么~? 分布式环境下,像消息投递也会涉及提交或回滚的问题
基本思路:
在发起方发起一个分布式事物,通过拦截器记录下游的参与者信息(比如rpc的泛化接口信息),分2个阶段,一阶段上下游执行正常的业务逻辑,下游一般完成一些流水的落DB。 在发起方本地事物提交时,通过spring事物提交回调,感知到发起方的事物是提交还是回滚,根据发起方拦截器记录的下游参与者信息,来调用下游的PRC的commit或rollback