Java基础
本文简要介绍了常见数据结构,包括线性结构(如动态数组、链表、栈、队列)、非线性结构(如优先级队列、哈希表、红黑树、跳表、B+树),并列举了Java中的典型实现类,适用于集合类学习与面试参考。
自定义注解
本文介绍如何在Spring项目中实现自定义注解,结合AOP与过滤器应用于日志、权限控制等场景。通过@Target、@Retention等元注解定义注解,配合Spring AOP或拦截器实现功能增强,提升代码可读性与复用性。
网络通信:RPC 框架在网络通信上更倾向于哪种网络 IO 模型?
本讲深入探讨RPC框架中的网络通信机制,重点分析常用网络IO模型。由于RPC调用本质是服务消费者与提供者间的网络数据交换,因此高效IO模型至关重要。常见的IO模型有BIO、NIO、IO多路复用和AIO,其中IO多路复用因支持高并发、节省资源,成为RPC框架首选,如Netty基于Reactor模式实现,广泛应用于Java体系。
6.3【追问】伊甸园、幸存区、老年代细节
对象诞生于伊甸园,经历多次年轻代回收后仍存活则晋升老年代。年轻代用标记-复制算法,老年代用标记-整理或清除算法。不同回收器晋升条件不同:Parallel默认15次回收后晋升,可调MaxTenuringThreshold;幸存区同龄对象超50%则提前晋升。大对象处理因回收器而异:Serial/CMS中超过PretenureSizeThreshold直接入老年代;G1中巨型对象存入巨型区,Region大小为堆/2048或由G1HeapRegionSize设定。注意《深入理解Java虚拟机》部分内容已过时,需批判性阅读。
5.7 线程池的核心参数
线程池七大参数:核心线程数(常驻)、最大线程数(救急上限)、非核心线程存活时间、工作队列(缓存任务)、线程工厂(定制线程)、拒绝策略(队列满时处理方式,含报错、推脱、弃老、直接丢弃)。
2.OAuth2.0实战案例
本案例详解OAuth2.0四种授权模式实战:通过创建资源与授权模块,配置Spring Security与OAuth2,依次实现授权码、简化、密码及客户端模式的令牌申请与资源访问,完成全流程安全认证集成。
Java基础
重载指方法名相同但参数不同,发生在编译期;重写指父子类中同名同参方法,发生在运行期。String不可变,StringBuilder非线程安全,StringBuffer线程安全,适用于多线程场景。
5、线程与并发
ThreadLocal通过线程私有的ThreadLocalMap实现变量隔离,避免多线程竞争。每个线程以ThreadLocal为key存储独立资源,使用后需调用remove()防止内存泄漏。悲观锁(如synchronized)假定竞争频繁,独占资源;乐观锁(如AtomicInteger)假定竞争少,失败则重试,适用于高并发低冲突场景。
序列化:对象怎么在网络中传输?
本课讲解RPC框架中的序列化机制,介绍JDK原生、JSON、Hessian、Protobuf等常用序列化方式,分析其性能、体积、兼容性与安全性。重点强调在选型时应优先考虑通用性、兼容性与安全性,其次才是性能与空间开销。同时指出使用中常见问题:对象过繁、过大、继承复杂等,建议入参返回值尽量简洁、扁平、使用原生类型,以提升RPC调用的稳定性与效率。
表达式自动类型提升
本示例演示Java中类型自动提升规则:byte、short、char参与运算时自动提升为int,表达式结果取范围更大的类型。如byte+int得int,char+int+long得long,两byte相加结果也为int。