- 博客(18)
- 收藏
- 关注
原创 使用分页工具遇到的一个小BUG
这是一个分页查询员工的SQL,在这里我习惯的在SQL语句结束之后加了一个分号。导致在测试的时候一直报SQL语法异常,后经排查发现是分页工具在拼接的时候把分号拼接进去了,导致SQL语法错误。测试的时候一直报SQL语法异常,后经排查发现是分页工具在拼接的时候把分号拼接进去了,导致SQL语法错误。所以大家在使用分页工具的时候和动态SQL的时候不要使用分号啊。最近在学习一个外卖项目中使用了一个分页工具,遇到了一个小bug,来看下怎么回事吧。这个语句会与后面的SQL语句进行拼接进行分页,无需手动进行分页。
2024-07-09 11:20:04
246
原创 你知道单例模式有几种写法吗
上面这两种方式创建单例对象的方式基本一样,因为类加载是线程安全的,故这两种都是线程安全的创建方式,但有可能对象创建出来但是不使用,因此存在浪费内存的情况。枚举类是实现单例模式最推荐的一种方式,因为枚举类是线程安全的,并且只会装载一次,可以充分利用枚举类这个特性来实现单例模式,且不会被反射破环,实现起来简单。单例设计模式是Java中最简单的设计模式之一,这种类型属于创建型模式,它提供了创建对象的最佳方式。懒汉式:类加载不会导致该单实例对象被创建,首次使用才会创建。主要用来防止指令重排,这种方式是线程安全的。
2024-07-06 17:32:03
153
原创 JAVA只能用new创建对象吗?
首先在需要创建对象时,JVM会检查这个指令的参数能不能定位到常量池里的符号引用,看其所代表的类是不是已经被加载了,如果没有,则执行类加载过程,具体可以看这篇博客。内存规整:内存分为两块,一块用过,一块没有,中间使用一个指针作为分界点,这个时候分配内存只需要移动指针即可。内存不规整:JVM会维护一个列表,记录可用的内存区域,在分配时找到足够的内存区域分给对象实例。另一种就是利用TLAB区域,这块是线程私有的区域,所有是线程安全的。设置对象头信息,包括执行类信息的指针,哈希码,GC分代年龄,锁信息等等。
2024-06-20 16:44:08
682
原创 JVM堆区域的相关知识
这里需要注意,在Eden区域还有一小块区域叫做TLAB,这块区域是线程私有,因为对象分配并不是线程安全的,需要枷锁,所以这块区域用于提高对象分配效率,但是分配对象大于这块区域或者这块区域已经满了,仍然需要加锁分配对象内存。对于Java应用程序来说,Java堆是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块区域,在虚拟机启动的时候创建,几乎所有的对象实例都在这块分配。:这块是堆内存区域占用空间最大的一块。新生代的区域,新建的对象实例大多都分配在这里。提到堆区域,那就不得不提到垃圾回收了。
2024-06-19 19:00:50
1371
原创 无重复字符的最长子串
*思路:**采用双指针算法(快慢指针),因为上面提到的性质,所以慢指针不用回退。那么我们还需要一个数据结构来维护二个字符串之间的信息,能保存字符串里每个字符出现的个数,很容易就想到了哈希表。请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。输入: s = “abcabcbb”
2024-06-19 10:57:22
181
原创 一文看懂JVM类加载过程
类加载机制:JVM把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称为类加载机制。这个阶段的目的是确保加载的类的字节码是合法的、符合JVM规范的,并且不会危害JVM的安全。编译器的收集顺序是由语句在源文件出现的顺序决定的,静态语句块只能访问到定义在静态语句之前的变量,定义在它之后的变量可以访问,可以赋值但是不可以访问。加载通过一个类的全限定名获取类的二进制流,将字节流的的静态储存转化为方法区的运行时数据结构。
2024-06-16 16:51:47
1529
原创 力扣算法题分享
其实我们思考一下发现,我们要找的是当前位置的数与前面的数相加的结果是24的倍数(为了避免重复所以后面位置暂时不算)。给你一个整数数组 hours,表示以 小时 为单位的时间,返回一个整数,表示满足 i < j 且 hours[i] + hours[j] 构成 整天 的下标对 i, j 的数目。例如,1 天是 24 小时,2 天是 48 小时,3 天是 72 小时,以此类推。构成整天的下标对分别是 (0, 1)、(0, 2) 和 (1, 2)。输入: hours = [12,12,30,24,24]
2024-06-16 13:51:34
281
原创 JS学习笔记
需要注意的是,某些方法(如 reload 和 replace)可能会在不同的浏览器中有所不同,并且可能会受到浏览器的缓存策略的影响。键值对存储:localStorage 以键值对的形式存储数据,其中键是字符串,值可以是字符串、数字、布尔值或对象(序列化后存储)。事件监听:当 localStorage 中的数据被修改时,会触发一个 storage 事件,允许开发者监听和响应数据的变化。同步访问:所有打开相同域的页面都可以访问相同的 localStorage 数据,这可能会导致潜在的安全问题。
2024-06-11 21:27:24
317
原创 2024-06-08JS学习笔记
什么是事件:事件是在编程时系统内部发生的动作或者发生的事件,比如单击一个按钮。指的是函数内部特殊的变量this,它代表当前函数的运行时所处环境。事件源.addEventListener(事件,事件处理函数)如果将函数A作为参数传递给函数B时,我们称A为回调函数。on方式会覆盖,addEventListener不会。事件源.on事件 = function(){}谁调用this就是指向谁。
2024-06-08 12:09:31
335
原创 2024-06-07 JS学习日记
标签生成的对象,所有标签的属性都能找到,修改这个对象的属性会映射到标签身上。是浏览器提供专门用来操作网页内容的功能,开发特效和实现用户交互。文档以树状结构直观的表达出来,体现了标签与标签之间的关系。语法:对象.属性 = 值。作用: 使用js操作。
2024-06-07 22:36:11
129
原创 ArrayList源码分析
ArrayList是我们平时开发中很常见的一种集合,那么它的底层是如何实现的呢?下面介绍一下ArrayList主要属性和方法。
2024-06-06 23:00:33
320
原创 二分法的几种常见写法,边界处理
int search1(int q[],int left,int right,int target){ //定义封闭空间 while(left<=right){ //left==right 有效 int mid=left+(right-left)/2; if(q[mid]<target) left=mid+1; //目标在[mid+1,right]区间内 else if(q[mid]>target) right=mid-1; .
2022-02-28 10:25:30
182
原创 2021-11-03
java中四个引用的区别:强引用:类似Object obj=new Object()这种引用关系。只要有强引用关系还存在,垃圾收集器就永远不会回收被引用的对象。软引用:用来描述一些还有用,但非必须的对象。在内存将要发生内存溢出异常时,会把这些对象进行二次回收。弱引用:它的强度比软引用更弱一点,被软引用关联的对象只能生存到下一次垃圾回收发生。在JDK1.2中提供了WeakReference类来实现弱引用。虚引用:一个对象是否有虚引用的存在,完全不会对其生存时间产生影响,也无法通过虚引用来取得一个对象实
2021-11-03 10:24:30
92
原创 2021-10-29
happens-before简介介绍:如果一个操作执行的结果对另一个操作可见,那么这二个操作之间必须存在happens-before关系。规则:一、一个线程中的每个操作,happens-before于改线程中的任意后续操作。二、对于一个锁的解锁,happens-before于随后对这个锁的加锁。三、对volatile域的写,happens-before于任意后续对volatole域的读。四、如果A happens-beforeB,且B happens-before C,那么A happens-b
2021-10-29 18:57:06
67
原创 2021-10-17
设计模式(刘伟老师设计模式学习笔记)一、单例模式为什么要使用单例模式?有时需要确保系统中只有一个唯一实例。当一个实例创建成功后,我们无法再创建一个同类型的其他对象。如何实现单例模式?1。将构造器私有化,这样外部就不能随意创建对象。2。在类的内部创建并保存一个类的私有静态成员变量。3。增加一个私有的静态方法用于创建实例。在该方法中首先判断对象是否存在,如果存在返回已有对象,没有则继续创建。饿汉式单例:在类的内部已经创立好对象,直接返回,确保对象的唯一性。优点:线程安全缺点:不确定创建对象
2021-10-17 21:31:45
67
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人