Java基础知识
文章平均质量分 83
松柏123
这个作者很懒,什么都没留下…
展开
-
⛳面试题-简述并分析ThreadLocalMap的key为什么是弱引用
注意:因为 ThreadLocal 的使用规范是使用 static final 进行修饰,所以 ThreadLocal 是存放在常量池的,不容易被回收,所以,ThreadLocalMap 在使用 ThreadLocal 对象作为 key 的时候需要使用弱引用,以保证不会出现内存泄漏;然而,需要注意的是,由于弱引用的特性,在某些情况下可能会导致 key 被提前回收,导致数据访问异常,因此在使用 ThreadLocal 时也需要注意合理的生命周期管理,避免出现意外情况;ThreadLocal 源码结构。原创 2023-11-14 11:37:34 · 777 阅读 · 0 评论 -
⛳ 面试题-单例模式会存在线程安全问题吗?
单例模式是 Java 中常用的设计模式之一,属于设计模式三大类中的创建型模式。在运行期间,保证某个类仅有一个实例,并提供一个访问它的全局访问点。单例模式所属类的构造方法是私有的,所以单例类是不能被继承的。实现线程安全的单例模式有以下几种方式有:饿汉式、懒汉式、懒汉式改良版(双重同步锁),内部静态类、枚举;相比于饿汉式,懒汉式显得没那么 “饿”,在真正需要的时候在去创建实例。优点:线程安全的,可以延时加载。缺点:调用效率不高(有锁,且需要先创建对象)、使用反射,序列化创建对象依然可以不是单例的。原创 2023-08-31 13:13:17 · 1055 阅读 · 0 评论 -
⛳ TCP 协议面试题
关闭连接时,被动断开⽅在收到对⽅的FIN结束请求报⽂时,很可能业务数据没有发送完成,并不能⽴即关闭连接,被动⽅只能先回复⼀个ACK响应报⽂,告诉主动断开⽅: “你发的FIN报⽂我收到了,只有等到我所有的业务报⽂都发送完了,我才能真正的结 束,在结束之前,我会发你FIN+ACK报⽂的,你先等着”。假设⽹络是不可靠的,被动断开⽅发送FIN+ACK报⽂后,其主动⽅的ACK响应报⽂有可能丢失,这时候的被动断开⽅处于LAST-ACK状态的,由于收不到ACK确认被动⽅⼀直不能正常的进⼊CLOSED状态。原创 2023-08-20 16:26:00 · 1330 阅读 · 0 评论 -
⛳ Java 网络编程
TCP/IP模型中的各种协议,依其功能不同,被分别归属到这四层之中,常被视为是简化过后的七层OSI模型。域名解析的过程:先找本机hostsC:\Windows\System32\drivers\etc\hosts,是否有输入的域名地址,没有的话,再通过DNS服务器,找主机。TCP/IP 以其两个主要协议:传输控制协议(TCP)和网络互联协议(IP)而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。原创 2023-08-20 16:16:03 · 128 阅读 · 0 评论 -
⛳ TCP 协议详解
TCP / IP 协议包含了一系列的协议,也叫TCP / IP协议族(TCP / IP Protocol Suite , 或 TCP / IP Protocols ),简称 TCP / IP。TCP / IP 协议族提供了点对点的连接机制,并且将传输数据帧的封装、寻址、传输、路由以及接受方式,都予以标准化。原创 2023-08-20 14:11:18 · 1115 阅读 · 0 评论 -
⛳ Java - IO
Java的IO库主要分为两大类:字节流和字符流。字节流(Byte Streams):字节流以字节为单位进行数据传输,适用于处理二进制数据和字节流。常用的字节流类有InputStream和OutputStream。其中,InputStream用于从输入源读取字节数据,而OutputStream用于向输出目标写入字节数据。字符流(Character Streams):字符流以字符为单位进行数据传输,适用于处理文本数据和字符操作。常用的字符流类有Reader和Writer。原创 2023-08-17 17:35:00 · 115 阅读 · 0 评论 -
⛳ Java 反射
Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助缺德任何类的内部信息,并直接操作任意对象的内部属性及方法。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。**🎃 使用反射的前提条件: **原创 2023-08-16 21:27:47 · 102 阅读 · 0 评论 -
⛳ Java集合框架
早在Java 2之前,Java 就提供了特设类。DictionaryVectorStack和Properties这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。集合框架被设计成要满足以下几个目标。该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。原创 2023-08-13 15:08:56 · 144 阅读 · 0 评论 -
⛳ Java 枚举
类的对象只有有限个,确定的。程状态:创建、就绪、运行、阻塞、死亡。原创 2023-08-07 11:47:17 · 81 阅读 · 0 评论 -
⛳ Java注解
当一个 Annotation 类型被定义为运行时 Annotation 后, 该注解才是运行时可见, 当 class 文件被载入时保存在 class 文件中的 Annotation 才会被虚拟机读取。@Target: 用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素。@Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被javadoc 工具提取成文档。默认情况下, javadoc是不包括注解的。原创 2023-08-07 11:33:18 · 75 阅读 · 0 评论 -
⛳ StringBuffer and StringBuilder 处理字符串
当append()和insert()时,如果原来的value数组长度不够,可扩容。扩容原理:/**} }和中的方法支持方法链操作} // return this 返回对象本身。原创 2023-08-05 11:42:25 · 128 阅读 · 0 评论 -
⛳ 多线程面试-什么是多线程上下文切换?
多线程会共同使用一组计算机上的CPU ,而线程数大于给线程分配的 CPU 数量时,为了让各个线程都有执行的机会,就需要轮转使用CPU。不同的线程切换使用 CPU, 发生的切换数据等, 就是上下文切换在上下文切换过程中, CPU 会停止处理当前运行的程序, 并保存当前程序运行的具体位置, 以便之后继续运行. 从这个角度来看, 上下文切换有点像我们同时阅读几本书, 在来回切换书本的同时我们需要记住每本书当前读到的页码. 在程序中, 上下文切换过程中的 “页码” 信息是保存在进程控制块(PCB)中的。原创 2023-08-05 10:41:09 · 390 阅读 · 0 评论 -
⛳ String 字符串的存储原理及常用方法
代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。String是一个final类,代表不可变的字符序列。字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。String对象的字符内容是存储在一个字符数组value[]中的。原创 2023-08-04 15:17:52 · 1178 阅读 · 0 评论 -
⛳ Java多线程 一,线程基础
在计算机科学中,程序(Program),进程(Process)和线程(Thread)是三个重要的概念,它们都与执行计算机任务和程序相关。程序(Program):程序是一系列指令的集合,这些指令按照特定的顺序组织,用于完成特定的任务或执行特定的操作。程序是静态的,它们只是存储在计算机磁盘或存储设备中,并不直接执行。当我们想要运行一个程序时,操作系统会将程序加载到内存中,并将其转换为进程,然后才能执行其中的指令。进程(Process):进程是计算机程序在执行时的实例。原创 2023-08-01 21:25:29 · 206 阅读 · 0 评论 -
⛳ 面向对象面试题
在JDK1.7及之前,HotSpot虚拟机将Java信息,常量池,静态变量,即使编译后的代码(JIT)等数据,存储在Perm(永久代)里(对于其它虚拟机如BEA JRockit、IBM J9等是不存在永久带概念的),类的元数据和静态变量在类加载的时候被分配到Perm里,当常量池回收或者类被卸载时,垃圾收集器会回收这部分内存,但效果不太理想。 由于是实例的一部分,在类初始化的时候,从运行时常量池取出直接引用或者值,与初始化的对象一起放入堆中。的限制,所以此配置已经失效了,现在可以使用更多的本地内存。原创 2023-07-26 16:24:34 · 1285 阅读 · 5 评论 -
⛳ 抽象类和接口的区别
所以一开头就说了,继承的方式太死了,是什么就是什么。不得不说这是一种糟糕的方案,因为这种方案违反了面向对象设计中的一个核心原则ISP,在Door的定义中把Door概念本身固有的行为方法和另外一个概念"报警器"的行为方法混在了一起,这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为"报警器"这个概念的改变而改变(比如修改alarm方法的参数),反之亦然。由于Java多态的特性,接口的引用是可以接受子类对象的,用实现的子类实例化声明的接口后,就可以通过接口调用子类重写的方法。原创 2023-07-24 18:44:44 · 152 阅读 · 0 评论 -
⛳Java中的静态
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PgnYjk8v-1690195345747)(https://gitee.com/galloping_pony/img-home/raw/master/%E9%9D%99%E6%80%81%E5%8F%98%E9%87%8F.drawio.png)]使用范围:在Java类中, 可用static修饰属性、 方法、 代码块、 内部类。类方法,类中使用static修饰的方法。原创 2023-07-24 18:42:58 · 507 阅读 · 0 评论 -
⛳ Java单例模式
如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。事实上,通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Jav单例实现失效。提供静态方法返回对象实例,返回的是静态实例(静态的特征),所以只有一个实例。单例模式:要求程序中某个,再程序运行的整个整个周期中中,只有一个实例。原创 2023-07-24 18:40:36 · 68 阅读 · 0 评论 -
⛳ Java中的装箱和拆箱
在Java SE5之前,如果要生成一个数值为10的Integer这个过程中会自动根据数值创建对应的 Integer对象,这就是装箱。那什么是拆箱呢?//装箱 int n = i;//拆箱简单一点说,装箱就是 自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。int(4字节)Integerbyte(1字节)Byteshort(2字节)Shortlong(8字节)Longfloat(4字节)Floatdouble(8字节)Double。原创 2023-07-22 16:27:41 · 323 阅读 · 0 评论 -
⛳ 如何使用 getResourceAsStream() 加载文件
是java中用于加载资源文件的方法之一。它是和Class类提供的方法,用于从类路径(ClassPath)中获取资源文件并返回一个输入流 (。这个方法常用于加载配置文件,模板文件,图片,音频等各种类型的资源。name: 表示要加载的资源我呢见的路径,可以是相对路径或绝对路径。对于相对路径,其起始点通常是调用方法的类或类加载器的位置,需要看是调用, 还是调用。具体细节看下文。如果找到资源文件,则返回一个对象,允许你以字节流的方式读取资源文件的内容。如果找不到资源文件,则返回 null。原创 2023-07-21 22:37:54 · 7167 阅读 · 1 评论 -
⛳ Java面向对象
面向过程,强调的是功能行为,以函数为最小单位类(Class)和对象(Object)是面向对象的核心概念。类是对一类事物的描述,是抽象的、概念上的定义对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。可以理解为:类=抽象概念的人;对象=实实在在的某个人面向对象程序设计的重点是类的设计类的设计,其实就是类的成员的设计。原创 2023-07-20 20:01:40 · 54 阅读 · 0 评论 -
⛳ JVM内存模型和五大结构详解
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,有着自己完善的硬件架构,如处理器,堆栈等,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。原创 2023-07-20 17:22:28 · 208 阅读 · 0 评论 -
⛳ Java数组
数组是一种数组结构,用于存储相同类型的多个元素。它提供了一个连续的内存块,用于存储数组元素。数组的特点和数组结构:1. 连续内存:Java数组的元素在内存中是连续存储的。这意味着数组的每个元素在内存中占据相同大小的空间,并且可以通过索引进行快速访问。2. 零基索引:Java数组的索引是从0开始,即第一个元素的索引为0,第二次元素的索引为1,以此类推。通过索引,可以访问数组中的特定元素。原创 2023-07-19 16:23:02 · 476 阅读 · 0 评论 -
⛳ Java开发命名规范(嵩山版)
【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等。正例:ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion。反例:forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion。反例:MAX_COUNT / EXPIRED_TIME。原创 2023-07-17 14:38:39 · 109 阅读 · 0 评论 -
⛳ java8 :: 用法 (JDK8 双冒号用法)
JDK8中有双冒号的用法,就是把方法当做参数传到stream内部,使stream的每个元素都传入到该方法里面执行一下。原创 2023-06-30 09:44:50 · 416 阅读 · 0 评论 -
⛳ 一个通用的数据库操作类
编写了对数据库的更新、删除、插入、普通查询、复杂查询等操作,是一个通用的数据库操作类。该数据库操作类较为偏向底层的。原创 2023-06-10 11:14:25 · 111 阅读 · 0 评论 -
⛳ Class.forName()方法
此外,如果使用默认的类加载器加载类,可以直接使用类名.class获取对应的Class对象,不需要使用Class.forName()方法。在上面的代码中,我们使用了Class.forName()方法来加载"com.example.MyClass"类,并将返回的Class对象赋值给了myClass变量。另外,需要注意的是,Class.forName()方法只能加载已经被类加载器加载过的类,否则会抛出ClassNotFoundException异常。该方法会返回一个Class对象,该对象代表了被加载的类。原创 2023-06-06 12:15:55 · 1477 阅读 · 0 评论 -
⛳ Java中getClass()方法
Java中的抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类用abstract关键字来修饰。原创 2023-06-06 12:12:50 · 3445 阅读 · 0 评论 -
⛳ java中抽象类
Java中的抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类用abstract关键字来修饰。原创 2023-06-06 11:11:25 · 622 阅读 · 0 评论