- 博客(42)
- 收藏
- 关注
原创 JVM之类加载机制
在某些情况下,当类中定义了静态常量,并在其他类中被引用时,可能会触发该类的初始化。特别是当常量在其他类中被直接引用时,JVM 可能会在编译时将其替换为常量值,从而触发类的初始化。
2024-07-26 11:08:19
189
原创 JVM之经典垃圾收集器
收集器能够对扮演不同角色的Region采用不同的策略去处理,这样无论是新创建的对象还是已经存活了一段时间、熬过多次收集的旧对象都能获取很好的收集效果。同样是基于标记-复制算法实现的收集器,也是能够并行收集的多线程收集器,Parallel Scavenge收集器的特点是它的关注点与其他收集器不同,CMS等收集器的关注点是尽可能 地缩短垃圾收集时用户线程的停顿时间,而Parallel Scavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。STW,标记在并发标记过程中产生的垃圾。
2024-07-26 10:59:31
244
原创 JVM之垃圾收集策略与内存分配策略
堆里面存在大量对象实例,垃圾收集器在对堆进行回收前,要先判断哪些对象已死(“死去”即不可能再被任何途径使用的对象)。
2024-07-26 10:52:14
351
原创 JVM之对象的创建过程
reference中存储的是稳定句柄址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要被修改。前提:Java堆中内存是绝对规整的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针 作为分界点的指示器。,即我们在程序代码里面所定义的各种类型的字段内容,无论是从父类继承下来的,还是在子类中定义的字段都必须记录起来。为对象分配空间就是把。如果Java堆中的内存并不是规整的,已被使用的内存和空闲的内存相互交错在一起。
2024-07-26 10:43:30
311
原创 JVM之内存区域的划分与功能
JVM作为一个运行在操作系统之上的虚拟层,负责管理和分配内存给Java应用程序,而这些内存最终都来源于物理内存。首先JVM向操作系统申请内存空间(物理内存),JVM将申请的内存划分为多个区域,包括堆区、栈区、方法区等,这些区域共同构成了JVM的内存空间。JVM通过垃圾收集器(GC)来管理堆内存中的对象。当堆内存中的对象不再被使用时,GC会将其回收以释放内存空间。当JVM需要更多内存时,它会向操作系统申请新的内存空间;当不再需要某些内存时,JVM会将其释放回操作系统。
2024-07-26 10:36:57
262
原创 JVM深入浅出(个人造诣)
如果将字符串数组中改变某一个字符串,那么他本身不可修改,变的是数组中存放的地址,修改后的新地址会指向字符串常量池中新的字符串(如果没有那就在字符串常量池新建)只有将java栈区域中自定义的方法线程转化为本地方法栈中的方法线程,然后调动本地方法栈中的线程方法,才是真正的调动操作系统内核,最终体现为硬件执行。进入就绪态的线程,谁先执行由操作系统决定,不一定按进入就绪态的顺序。在这个栈中同一时刻只能有一个方法运行,方法运行时拷贝入栈,运行完自动出栈(出栈即为标记为无效,下一个方法入栈时,将无效的方法覆盖掉)。
2024-07-26 10:03:42
307
原创 设计模式笔记(一)
Java设计模式是一套在Java程序设计中经过反复使用、多数人知晓的、代码设计经验的总结。它提供了一种框架和结构,旨在帮助开发者更好地理解和设计复杂的系统。设计模式不仅仅是一种语法规则,更是一种思想和方法论,能够帮助开发者更好地分析、设计和实现软件系统,确保代码的重用性、可维护性和可扩展性。这些模式通常被分为创建型模式、结构型模式和行为型模式,每种模式都针对特定的设计问题提供了标准的解决方案。
2024-07-25 22:44:13
398
原创 MyBatis
MyBatis是基于Java的持久层框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不用关注JDBC的代码,使开发变得更加的简单。MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL的动态参数进行映射,并最终执行SQL语句。执行SQL后,最终将结果已Java对象返回。采用了ORM的思想。
2024-07-23 00:08:55
955
原创 springMVC常用注解
(完整版示例代码可接前几篇关于springMVC的文章,这是一个整体的演示springMVC的demo),则可用@RequestParam注解,指定一下前端请求参数。作用:把请求中的指定名称的参数传递给控制器中的形参赋值。前端请求参数name与后端方法的参数不一致。这里给一个index.jsp用于前端演示。get方法不可以,必须用post方法。获取前端传过来的参数和id然后通过。此时Integer id就是5。此时,前端传递的可以是。
2024-07-22 23:26:39
524
原创 springMVC前后端不同类型请求参数绑定传递
*** 进行类型转换的方法* @param s 用户输入的内容* @return*/// 判断throw new RuntimeException("请输入内容");// 进行转换try {// 进行转换。
2024-07-18 09:05:16
509
原创 SpringMVC框架
是一种基于Java实现的MVC设计模型的请求驱动类型的轻量级WEB框架。Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。
2024-07-17 10:46:56
931
原创 spring框架之AOP注解方式(java代码实例)
*** @Component // 把该类交给IOC去管理* @Aspect // 声明是切面类 == <aop:aspect ref="myXmlAspect">*/@Component@Aspect/*** 通知的方法*/// @Before(value = "切入点的表达式")System.out.println("前置方法执行了!!");
2024-07-17 00:48:02
142
原创 spring框架之AOP 面向切面编程
*** 定义自己的切面类* 自定义切面类 = 切入点(表达式) + 通知(增强的代码)*//*** 通知*/// 发送手机短信// 发送邮件/记录日志/事务管理System.out.println("增强的方法执行了...");/*** 异常*/// 发送手机短信// 发送邮件/记录日志/事务管理System.out.println("增强的方法的异常执行了...");/*** 最终*/// 发送手机短信// 发送邮件/记录日志/事务管理。
2024-07-17 00:41:50
612
原创 java代理模式之JDK动态代理
动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以通过调用代理对象来实现对目标对象的调用。
2024-07-17 00:34:35
304
原创 spring框架:IOC注解形式的管理
之前,我们一直在配置文件里写bean标签,用DI注入的方式,将实现类交给spring工厂去管理,然后通过spring工厂去创建实现类的对象下面我们来看一种新的将实现类交给spring工厂去管理的方式:IOC注解不用再写配置文件,进行注入首先我们来看。
2024-07-16 09:24:26
403
原创 前端开发之盒子模型
特征:独占一行,对宽度高度支持 如:p div ul li h1~h6特征:不独占一行,对宽度高度不支持 如:a span特征:不独占一行,对宽度高度支持 如:图片img 输入框input特征:一个父级元素设置成弹性盒子,其子元素默认始终横向布局。
2024-07-15 09:39:28
397
原创 文件流的解析过程
3、再将byte型数组转换为int型数组,最后转化为原字符输出(完成从byte万能数组到int编码数组,再到原字符串的转化)在本篇文章开始之前,我们要了解 数组与字符之间的转换(UTF-8编码,32个比特为可转换为一个汉字字符)。1、先将字符串内每个字符转化为int型数字,此时输出编码(完成从字符到数组流的转化)2、再将int型数组转化为byte型数组(转化为byte万能数组)
2024-07-15 00:54:50
123
原创 计算机图像转化过程解析:从比特流到图像信息
首先,我们要先明白一点,由。比特流数据呢,就是存储在计算机硬盘上的一系列二进制数,如果用代码表示,它一定是基本类型数组。用java语言来举个例子,char类型数组,每次从比特流中选8个数,组成一个数组元素;short类型数组,每次选16个二进制数,组成一个数组元素,int类型数组每次选32个,来组成自己的数组元素。比特流数据可以简单直观的看成下面这个:由多个0和1组成的一串数据。
2024-07-15 00:32:33
737
原创 从源码角度分析 如何向hashmap中put一个值
在源码分析之前,首先我们来说说哈希冲突。在Java中,哈希表使用哈希码来确定存储对象的位置。哈希码不同,则一定表示不同的对象。
2024-07-14 23:21:34
225
原创 数据结构小测试:排序算法
冒泡排序:将相邻元素之间的比较和交换,使得每一轮比较后,最大的元素能够到达数组的末尾。重复这个过程,直到整个数组有序。选择排序:在每一轮中,找到数组中最小的元素,并将其与当前轮的第一个元素交换位置。重复这一操作,使得每一轮过后,都有一个元素被放到了正确的位置上。插入排序:将数组分为已排序部分和未排序部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置上。希尔排序:首先确定一个间隔序列,按此间隔将数组元素分组并进行插入排序。随后逐渐缩小间隔并重复排序过程,直到间隔为1。
2024-07-14 18:09:34
607
原创 数据结构-java中链表的存储原理及使用方式
它可以不断扩容,无固定长度每一个节点都是由value和next构成有两种插入的方式:头插法尾插法。
2024-07-14 15:05:15
1027
原创 前端开发之JavaScript
arr.push() 数组中增加元素console.log(arr.length) 输出数组长度放在大括号内,格式为 对象:对象的值 每一部分之间用逗号隔开数组中也可以放数组类型,对象类型等复合类型对象中 对象值也可以是数组类型,对象类型一般用匿名函数较多。
2024-07-14 14:46:00
823
原创 前端开发之定位方式
4、结合使用relative和absoute 祖先元素使用relative,当前元素使用absoute,保证当前元素不保留自己原有的物理空间,以使用relativer的祖先元素为定位参考点,随着浏览器的滚动而滚动。使用定位的目的是使用其配套属性,配套属性有:left、bottom、top、right(方位属性) z-index(z轴的层次,值越大越靠近人眼)配套属性只适用于后三个position值。1、纯使用relative 依然保留自己原有的物理空间,以原有的位置为定位参考点,随着浏览器的滚动而滚动。
2024-07-14 14:42:15
276
原创 前端开发之选择器
nth-1ast-child()倒位置计数括号内直接放数字,从1开始,代表元素顺序位置;:nth-child()正位置计数,括号内直接放数字,从1开始,代表元素顺序位置;:last-child等价与 :nth-last-child(1)content元素不仅可以插入并显示文本,还可以插入并显示图片。content元素不仅可以插入并显示文本,还可以插入并显示图片。:first-child等价与 :nth-child(1):not() 排除元素,若需排除多个元素,连续书写即可。使用前提必须是块级元素。
2024-07-14 14:30:44
346
原创 前端开发体系+html文件详解
target:指定超文本资源路径打开方式 _self(本窗口内打开) _blank(新窗口内打开) _parent(跳出父级窗口) _top(跳出顶级窗口)controls="true"手动控制音频播放,也可换为autoplay(进入网页自动播放)或loop(循环播放)width="500px" height="300px"可改变视频窗口大小但不会改变原视频外框的形状。此时的a标签为为锚点,如果要跳到另一个同目录页面的一个指定位置,在href后加其他页面路径。优先级:行内样式>内部样式=外部样式。
2024-07-14 14:13:54
574
原创 类的加载顺序
第一阶段从上往下执行静态的初始化语句,初始化块,执行的时候,不给它们赋值,只赋0值或空值,比如第一轮执行,K=0 t1=null t2=null i=0 n =0 由于静态初始化块是赋值操作 所以第一轮静态初始化块不执行。此时控制台开始输出打印第一行结果 是17行的print函数执行 (是伴随t1对象创建而来)控制台 九、十、十一行 的打印结果是 37行代码创建了test对象执行打印的。注意:创建对象需要执行的是:非静态的初始化语句初始化块以及构造函数。14行 n的赋值没有输出 只是将n赋值为99。
2024-07-11 00:23:34
176
原创 抽象类和接口
就是加上abstract关键字,然后去掉大括号,直接分号结束。抽象方法所在的类,必须是抽象类才行。在class之前写上abstract即可。如何使用抽象类和抽象方法:1.不能直接创建new抽象类对象。必须用一个子类来继承抽象父类,2.子类必须覆盖重写抽象父类当中所有的抽象方法。3.霍盖重写(实现):子类去掉抽象方法的abstract关键字,然后补上方法体大括号。4.创建子类对象进行使用。2、3、代码举例:(子类覆盖重写抽象方法)4、代码举例:(创建子类对象进行使用,调用抽象类子类的方法)
2024-07-09 19:29:23
657
原创 string字符串不可变性+String buffer+字符串在JVM中的存储(常量池)
string字符串的不可变性;String 和Stringbuilder以及String buffer三者的区别;字符串常量池;字符串类型数组;String类包含的方法
2024-07-09 18:42:01
581
原创 object类的常见问题(重点)
如果两边是基本类型,表示两边值相等如果是非基本类型,表示两边指的是同一块内存地址如果用于字符串则检测两个字符串是否是相同的除字符串类型外,其他的引用类型也可以用equals比较是否相等,但是此时equals的含义与“==”是一样的,检测两边是否指向同一块地址在此处代码中== 检测两边的字符串是否指向同一块地址x1.equals(x4) 检测两个字符串是否是相同的。
2024-07-09 13:52:59
355
原创 springMVC
SpringMVC是用来替代Servlet的,但是使用SpringMVC进行开发会更加简单快捷,二者功能大同小异均可用于表现层的开发。
2024-02-18 23:58:03
1626
原创 SSM框架概述
建立好Dao之后再建立service层,service层又要在controller层之下,因为既要调用Dao层的接口又要提供接口给controller层。先设计接口然后再设计实类,然后再在Spring的配置文件中配置其实现的关联。业务流程的不同会有不同的控制器,在具体的开发中可以将我们的流程进行抽象的归纳,设计出可以重复利用的子单元流程模块。持久层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此。Dao层首先设计的是接口,然后再Spring的配置文件中定义接口的实现类。
2024-02-18 23:26:06
572
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人