自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 2.线上论坛项目

本项目是一个功能丰富的线上论坛,用户可编辑、发布、删除帖子,并评论、点赞。帖子按版块分类,方便查找。同时,用户可以修改和展示个人信息,还能发送私信与其他用户交流。

2024-06-16 18:31:11 1001

原创 1.个人博客系统项目

本项目为一个功能完善的个人博客系统,支持文章的编辑、修改、删除和发布,以及作者个人信息的展示等功能。

2024-06-16 00:46:49 988

原创 3.UI自动化测试中的PO模式

PO模式是一种将某个页面的所有元素对象定位和对元素对象的操作封装成一个Page类的设计模式。它强调以页面为单位来编写测试用例,实现页面对象和测试用例的分离。

2024-06-12 22:00:18 484

原创 2.负载压力测试

负载压力测试是一种重要的系统测试方法,旨在评估系统在正常和峰值负载情况下的性能表现。

2024-06-12 20:25:18 826 2

原创 1.提交一个bug需要包括什么内容

提交一个bug需要包括什么内容

2024-06-12 15:22:11 612

原创 2.Spring中用到的设计模式

Spring框架中使用了多种设计模式来构建其强大且灵活的功能。

2024-05-23 20:35:40 320

原创 27.Java中单例模式的实现方式

枚举是实现单例模式的最佳方式,将单例对象定义为一个枚举类型,这种实现方式可以保证线程安全,同时也可以防止反射、反序列化破坏单例模式。

2024-05-23 01:42:32 538

原创 26.synchronized和ReentrantLock的区别

ReentrantLock可以实现选择性通知(借助Condition接口和NewCondition()方法实现,在一个Lock对象中创建多个Condition实例(对象监视器),线程可以注册在指定的Condition中,signal()方法会唤醒一个等待在该Condition上的线程,而signalAll()方法会唤醒所有等待在该Condition上的线程,从而实现有选择性的线程通知。),而synchronized不行,只能随机唤醒一个线程notify(),或者全部唤醒notifyAll()。

2024-05-19 23:35:55 287

原创 1.对IOC和DI的理解

在传统的应用程序中,对象的生命周期和对象间的依赖关系通常是由程序自身来负责。而在 IOC 中,对象的生命周期和对象间的依赖关系是由容器来负责,通过这种方式,对象之间的依赖关系变得更加灵活和可配置。DI(Dependency Injection,依赖注入),它是IOC的一种实现方式。(就是容器在实例化对象的时候,把这个对象所依赖的类注入给它。使用IOC最大的好处是降低耦合度,硬编码会造成对象间的过度耦合,而使用IOC后,可以降低使用资源双方之间的依赖程度。

2024-05-19 21:32:31 216

原创 25.线程的状态、线程池的状态

在 Java 中,线程的状态和线程池的状态。

2024-05-18 22:19:49 256

原创 24.HashMap的扩容机制

JDK 1.7和JDK1.8的HashMap扩容机制。

2024-05-16 02:03:02 810

原创 23.HashMap的put方法流程

【代码】HashMap的put方法流程。

2024-05-15 22:07:22 405

原创 22.HashMap的底层数据结构

其中,桶数组是用来存储数据元素,链表是用来解决冲突(哈希冲突:多个键通过哈希函数处理后得到相同的哈希值),红黑树是为了提高查询的效率。

2024-05-15 17:55:47 258

原创 3.TCP的三次握手和四次挥手

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在传输数据前通信双方必须建立连接(所谓连接,是指客户端和服务端各自保存一份关于对方的信息,比如ip地址,端口号等)。2.序列号(Sequence number):占32位,用来标识从TCP源端向目的端发送的字节流。1.源端口和目的端口(Source port,Destination port):这两个字段用来标识发送端和接收端的端口号,占16位。4.标志位:占6位,包含URG、ACK、PSH、RST、SYN、FIN等标志。

2024-05-15 02:22:38 1509

原创 21.JVM的垃圾回收算法

标记-整理算法是在标记-清除算法的基础上进行改进,它的标记阶段与标记-清除算法一样,但后续不是直接清除可回收对象。而是将所有存活的对象移动到内存空间的一端,然后直接清理掉边界以外的内存空间。当这块区域用完了,就将还存活的对象复制到另一块区域,然后把使用过的这一块内存区域一次性清理掉。进行垃圾回收过程中会涉及对象的移动,那么为了保证对象引用更新的正确性,必须暂停所有的用户线程。b.清除阶段:会再次遍历所有的对象,回收被标记了的对象。a.标记阶段:会遍历所有的对象,标记出需要回收的对象。

2024-05-13 00:25:09 369

原创 20.并发,并行,串行之间的区别

并发就是在同一时刻,只有一个线程在执行,但是在一个时间段内,从整体上看是多个线程同时执行了。(并发的实现依赖于CPU切换线程,因为切换的时间特别短,所以用户基本上是感知不到的)并行就是在同一时刻多个线程都在同时执行。(要求有多个CPU分别执行一个线程)串行就是一个线程执行完,再执行另一个。

2024-05-12 23:30:29 120

原创 19.守护线程,用户线程

Java中线程分为两种,一种是daemon(守护线程),另一种是user(用户线程)。

2024-05-12 23:14:29 112

原创 18.异常的处理方式

是指遇到异常并不进行具体的处理,而是向上抛给上层调用者。b.throws,用在方法上,来声明可能会抛出的异常类,可以声明多个。a.throw, 用在方法里面显式地抛出异常对象。c.系统自动抛异常。

2024-05-10 00:09:37 360

原创 17.Java中的异常体系

b.RuntimeException运行时异常,程序运行时出现的异常,比如空指针异常(NullPointerException),数组下标越界异常(ArrayIndexOutOfBoundsException)等。Error是系统内部错误,这些错误通常是由Java虚拟机抛出的,程序无法捕获和处理。比如有栈溢出(StackOverflowError),内存溢出(OutOfMemoryError)。a.CheckedException受检异常,编译器会强制检查并要求处理的异常。

2024-05-09 23:34:18 154

原创 16.字节码

字节码就是Java程序经过编译之后产生的.class文件。

2024-05-09 23:01:15 178

原创 15.深拷贝与浅拷贝

指的是对对象的拷贝,而对象里面有两种数据类型,一种是基本数据类型,一种是引用数据类型。

2024-05-06 15:17:51 379

原创 14.List和Set的区别

List的实现类有 ArrayList,LinkedList,Vector。Set的实现类主要有HashSet,TreeSet。

2024-05-06 00:34:17 203

原创 13.ArrayList和LinkedList的区别

因为ArrayList基于数组实现,get(index)直接通过数组下标获取,时间复杂度为O(1);LinkedList基于双向链表实现,get(index)需要遍历链表,时间复杂度为O(n)。ArrayList的增删,如果是在数组末尾,直接插入或删除即可,但是如果在数组中间位置,则需要移动元素,而且还有可能触发扩容操作。LinkedList基于双向链表,无法根据序号直接获取元素,不支持随机访问。ArrayList基于数组实现,LinkedList基于双向链表实现。

2024-05-05 23:55:36 255

原创 12.重载和重写的区别

a.被 final(final关键字用于防止被修改),static(静态方法属于类本身),private(私有方法,只能在自己类中访问,子类访问不到)修饰的方法不能被重写。b.子类返回值范围小于等于父类,抛出异常范围小于等于父类,访问修饰符范围大于等于父类。重写发生在子类与父类之间,子类重写父类的方法,方法名和参数列表相同。重载在同一类中,方法名相同,参数列表不同。a.返回类型和访问权限没有限制。

2024-05-05 23:12:43 212

原创 11.==与equals的区别,hashCode与equals之间的关系

而在hashMap的源码中,是先通过hashCode方法获取对象的哈希值,比较两个对象的hash值是否相等,再通过equals方法来进行比较。一旦重写了equals方法,即不再用对象内存地址比较,有自定义的比较规则,那么为了保持这两个方法比较对象是否相等结果的一致性,所以也必须重写hashCode方法,让它不再通过对象的内存地址来获取哈希值,而是自定义其获取哈希值的方式,来实现两个对象使用equals方法比较为true 那么通过hashCode方法获取它们的hash值也必须相等。

2024-04-28 22:48:38 807

原创 10.String,StringBuffer,StringBuider之间的区别

String是引用类型,被final修饰,无法被继承。String的值创建后就不能被修改,任何对String值的修改都会引发新的String对象的生成。StringBuffer与String类似,但它的值可以被修改,使用Synchronized来保证线程安全。StringBuider是StringBuffer的线程不安全版本,但它的性能更高。

2024-04-28 21:43:55 174

原创 9.JDK,JRE,JVM之间的区别

JRE(Java Runtime Environment)Java运行时环境,是运行已编译Java程序所需所有资源的集合,包括JVM,Java类库,Java命令和其他的一些基础构件。JVM(Java Virtual Machine)Java虚拟机,Java程序运行在Java虚拟机上。针对不同的系统有不同的JVM,所以Java语言可以实现平台无关性。JDK(Java Development Kit)Java开发工具包,拥有JRE拥有的一切,还有编译器和工具,能够创建和编译程序。

2024-04-28 21:23:42 303

原创 8.Java中创建线程执行任务的方式

3.实现Callable接口,重写call方法,可以通过FutureTask来获取任务执行的返回值。1.继承Thread类,重写run方法,调用start()启动线程。以上两种方式没有返回值,要获取线程的执行结果,可以。2.实现Runnable接口,重写run方法。

2024-04-23 22:36:04 137

原创 7.对象的创建过程

5.然后设置对象头,对象头里包含了对象是哪个类的实例、如何找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息。2.检查这个符号引用代表的类是否已被加载、解析和初始化过,如果还没有,就执行相应的类加载过程。4.内存分配完成之后,JVM将分配到的内存空间(其中不包括对象头)都初始化为零值。1.首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用。3.类加载检查通过后,JVM就会为这个新生的对象分配内存。

2024-04-23 21:43:03 268

原创 6.类加载器,类加载过程,类的生命周期

用户自定义类加载器(user ClassLoader),用户通过继承 java.lang.ClassLoader类的方式自定义实现的类加载器。

2024-04-22 17:50:26 347

原创 5.JVM内存模型

JVM内存区域分为线程私有区和线程共享区,其中方法区和堆是线程共享区,虚拟机栈,本地方法栈,程序计数器是线程隔离的数据区。

2024-04-22 11:22:28 151

原创 2.TCP保证传输可靠性

TCP主要提供了连接管理,校验和,序列号/确认应答,流量控制,最大消息长度,超时重传,拥塞控制等方式实现可靠性传输。

2024-04-20 12:18:37 256 1

原创 1.OSI七层模型,TCP/IP四层模型

在物理层提供比特流(二进制位组成的数据流,是计算机处理和传输数据的最基本形式)服务的基础上,建立相邻节点之间的数据链路。为源端与目的端之间提供可靠的透明数据传输,传输层协议为不同主机上运行的进程提供逻辑通信。确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。将网络地址翻译成对应的物理地址,实现不同网络之间的路径选择。OSI七层模型是国际标准化组织制定的一个用于计算机或通信系统间互联的标准体系。应用层协议定义的是应用进程间通信和交互的规则。建立、管理、终止会话,是用户应用程序和网络之间的接口。

2024-04-20 10:21:21 192

原创 4.常见典型锁策略

乐观锁认为锁竞争是不激烈的,即是多个线程同时访问同一个共享变量冲突的概率是较小的,所以并不会真正地去加锁,而是直接尝试去访问数据。(其中写锁是只能被独占的,读锁是可以被共享的)实现的方式是:在锁中记录持有该锁的线程身份以及一个计数器来记录该线程的加锁次数,如果发现当前尝试加锁的线程就是此时持有锁的线程,则计数器+1即可。自旋锁的优点是:没有放弃CPU资源,一旦锁被其它线程释放就能第一时间获取到锁,更高效,在锁持有时间比较短的场景下非常有用。悲观锁的实现:先加锁,获取到锁再去操作数据,获取不到锁就等待。

2024-04-18 10:43:22 406

原创 3.CAS机制

CAS叫做CompareAndSwap,比较并交换,主要是通过处理器的指令来保证操作的原子性。CAS指令包含3个参数:共享变量的内存地址、预期的值、该共享变量要设置成的新值。只有当共享变量内存地址处的值等于预期的值时,才能将该共享变量设置成新值。作为一条CPU指令,CAS指令本身是能够保证原子性的。

2024-04-16 19:28:48 266

原创 2.常见的Java集合

集合相关的类和接口都在Java.util中,主要分为三种: List(列表)、Set (集)、Map (映射)。Map是另外的接口,是键值对映射结构的集合。List:存储的元素是有序的,可重复的。Set:存储的元素是无序的,不可重复的。

2024-04-08 23:09:08 113

原创 1.理解Java面向对象

多态是指程序中定义的引用变量所指向的具体类型和通过这个引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。子类拥有父类所有的属性和方法(包括私有属性和私有方法),但是对于父类中的私有属性和私有方法,子类只是拥有,无法访问。Java中有两种形式实现多态:继承(多个子类对父类同一方法的重写)和接口(实现接口并重写接口中的同一方法)。继承是使用已经存在的类作为基础创建新的类,子类继承父类的属性和方法,也可以增加新的属性和方法。可以把一个对象的属性私有化,同时可以对外界提供一些访问属性的方法。

2024-04-08 22:45:33 271

原创 Java七大排序算法

Java七大排序算法。

2024-04-01 16:22:36 201

原创 文件操作和IO

介绍Java中对文件的系统操作和io(读写)

2023-04-22 12:44:17 82 1

原创 进程(计算机基本组成,操作系统,进程,线程)

记录自己学习,哪里有问题,请和我说一下.简单介绍现代计算机的组成,操作系统的概念及其工作,还有进程与线程相关概念。CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存(硬盘)和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备.

2023-04-07 12:26:15 118 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除