Moonike Blogs
  • 首页
  • 归档
  • 分类
  • 关于

序列化

序列化和反序列化 序列化:将数据结构或对象转换成可以存储或传输的形式,通常是二进制字节流,也可以是 JSON, XML 等文本格式 反序列化:将在序列化过程中所生成的数据转换为原始数据结构或者对象的过程 常用场景 网络传输:对象在进行网络传输(比如远程方法调用 RPC 的时候)之前需要先被序列化,接收到序列化的对象之后需要再进行反序列化; 持久化:将对象存储到文件、数据库或内存之前需要进行序列化
2024-12-17
Java > Java基础

OOP:封装、继承、多态

封装封装就是把一个对象的状态信息隐藏在对象内部,不允许外部对象直接访问;但是可以对外提供一些方法来操作属性。其他对象只能通过已经授权的操作来和封装的对象进行操作,而无需了解其内部的实现细节。 继承不同类型的对象之间经常会有一些共同点,同时每一个对象中又定义了额外的特性使他们与众不同,我们通过继承就可以使得复用之前的代码非常容易。通过继承,我们可以直接使用父类的属性和方法,又可以实现自己独特的属性和
2024-12-13
Java > Java基础

浅谈 equals() 和 hashCode()

equals() 和 ==== 可以用来判断基本数据类型和引用数据类型: 对于基本数据类型来说,== 比较的是值。 对于引用数据类型来说,== 比较的是对象的内存地址。 equals() 只能用来判断两个对象是否相等。 equals() 方法存在于 Object 类中,所以所有类都有 equals() 方法。 Object 类中 equals() 方法的实现: 123public boole
2024-12-05
Java > Java基础

ArrayList

底层实现 底层使用 Object[] 数组存储元素。 当调用无参构造函数时,ArrayList 会被初始化为一个空的 Object[],容量为 0。只有在添加第一个元素时,容量才会扩展到默认值 10。 当调用带参构造函数时: 如果传入的参数为 0,则 ArrayList 同样会初始化为一个空的 Object[],容量为 0; 如果传入的参数大于 0,则会直接将 Object[] 的大小初始化为传入
2024-12-03
Java > Java集合

Java代理模式

代理模式也属于一种设计模式,简单来说就是我们实现一个代理对象,使其代替对真实对象的访问,这样就能够在不修改原对象的基础上来提供额外操作。代理对象的主要作用就是扩展目标对象的功能,比如在目标方法的执行前后添加一些自定义的操作。代理模式有 静态代理 和 动态代理 两种实现方式。 静态代理静态代理的几个特点: - 一对一。每个目标类都要单独写一个代理类。 - 纯手动。对每个方法的增强都是手动完成的,一旦
2024-11-25
Java > Java基础

CAS

乐观锁和悲观锁 乐观锁多用于“读多写少“的环境,避免频繁加锁影响性能; 悲观锁多用于”写多读少“的环境,避免频繁失败和重试影响性能 什么是 CAS V:要更新的变量(var) (可以理解成旧值实际是多少) E:预期值(expected) (可以理解成旧值应该是多少) N:新值(new) 比较并交换的过程如下: 判断 V 的值是否等于 E,如果等于,将 V 的值设置为 N;如果不等,说明已经有其
2024-11-20
Java > Java并发编程

并发编程中涉及到哪些锁

为了减少获得锁和释放锁带来的性能消耗,JDK 1.6 引入了偏向锁 和 轻量级锁 的概念,对 synchronized 做了一次重大的升级,升级后的synchronized性能可以说上了一个新台阶。 在 JDK 1.6 及其以后,一个对象其实有四种锁状态,它们级别由低到高依次是: 无锁状态 偏向锁状态 轻量级锁状态 重量级锁状态 锁的存放位置每一个 Java 对象都有一个对象头,64 位 J
2024-11-20
Java > Java并发编程

JMM

Java 内存模型(Java Memory Model,JMM)定义了 Java 程序中的变量、线程如何和主存以及工作内存进行交互的规则,主要涉及到多线程环境下的共享变量可见性、指令重排等问题。Java通过共享内存并发模型来解决不同线程之间的通信和同步问题。Java 线程之间的通信由 Java 内存模型(简称 JMM)控制。 共享变量 由图可见,如果线程A想要和线程B进行通信,则要经过以下两个步骤
2024-11-20
Java > Java并发编程

并发编程中的一些基础知识

进程和线程进程进程是程序运行的基本单位。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,我们启动 main 函数时其实就是启动了一个 JVM 的线程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。 线程线程是比进程更小的程序执行单位,一个进程在其执行过程中可以产生多个线程。 同一个进程中的多个线程共享一个 堆 和 方法区,但每个线程有自己 独立 的 程
2024-11-20
Java > Java并发编程

ConcurrentHashMap

JDK 1.8 之前 基本信息底层通过 Segment 段 + 数组 + 链表实现。 线程安全通过对 Segment 加锁实现。 Segment 的数量在初始化时确定,无法动态改变,因此 Segment 的个数决定了 最高并发线程数(默认最多支持 16 个线程并发,具体取决于初始化时的配置)。 初始化 判断 ConcurrencyLevel 是否大于最大值,若大于则将其重置为最大值 65535,无
2024-11-20
Java > Java集合
1234

搜索

Copyright 2025 Moonike. All rights reserved.
Powed by Hexo Fluid
载入天数... 载入时分秒...
总访问量 次 总访客数 人