基础
赫萝的红苹果
心若有向往,何惧道阻且长!
https://github.com/yumoxuan-25
展开
-
表连接连接条件不当导致查询结果变多
首先,课表连接布置作业表,因为课表里面的课节和老师布置作业是一一对应的。综上,需要用课节id和学员id一起作为连接条件去关联表才行,这样才能定位到哪节课哪个人交的作业。一开始我的设计是课表通过课节id和布置作业关联,再接着用课表里面的课节id和作业的课节id关联进行查询。但实际数据比预期要多,因为一个课节会有多个人交作业,但我只关联了课节,这样不同人的作业都会被查出来。联表的时候需要注意联表的连接条件,因为要查询的一般是主表的信息,所以主表的一条记录对应的连接条件一般情况下只会对应连接表的一条记录匹配。原创 2023-11-13 11:25:08 · 245 阅读 · 0 评论 -
关于注解执行优先级、同优先级情况下执行顺序
如果想要自定义注解按照想要的顺序来执行,可以通过在注解实现类里面使用@Order注解来指定优先级。不设置优先级值。会有一个默认值:2147483647,也就是最小优先级。官方说法:相同优先级值的情况下:我在网上查,GPT的回复是按照注解的声明顺序执行。原创 2023-11-01 11:38:11 · 1554 阅读 · 3 评论 -
Java设置日期时间的毫秒数为0
只有在下午的时候才会凸显两者不同,就像注释说的,下午十点的时候,HOUR_OF_DAY的值是22,而HOUR的值是10。虽然说HOUR代表12小时制,但是也是可以给HOUR设置超过12的值的,效果就是在日期基础上加上所设置的小时数。从数据库取出来的Date对象没有毫秒,而直接创建的Date对象有毫秒,毫秒数不一样导致的两个Date对象不相等。发送时需要验证发送短信任务的预计发送时间和生产者传过来的时间是否一致,一致才发送。这样在存储时间的时候,会把毫秒部分截掉,导致和原来创建的Date对象不相等。原创 2023-11-01 10:08:06 · 428 阅读 · 0 评论 -
IDEA XML文件里写SQL比较大小条件
最近开发的时候,有一个需求的查询需要支持范围查询[a,b),并且查询的结果要求查询的范围含头端点不含尾端点。原创 2023-10-09 21:40:29 · 948 阅读 · 0 评论 -
多线程常见题型
线程有哪些状态?线程通常有五个状态:创建,就绪,运行,阻塞,死亡新建状态:新创建了一个线程对象。就绪状态:线程对象创建完毕之后,其他线程调用了该对象的start方法,虚拟机将该对象放入可运行线程池,线程对象进入就绪态,等待获取CPU时间片。运行:线程对象成功获取到锁,并开始运行。阻塞:线程因为某些原因放弃CPU使用权,暂时停止运行。直到线程进入就绪态,才有可能转到运行态。阻塞分为几种情况:等待阻塞:线程调用.wait()方法,线程会释放锁,线程会被放入等待池,然后进入阻塞状态,原创 2022-04-20 19:02:22 · 147 阅读 · 0 评论 -
jquery localStorage存储json数据
jquery存储内容的时候,存的是字符串,如果直接存储对象,那么在获取的时候,只能获取到object.因此在存储之前需要把json数据转换成字符串进行存储,在取数据的时候,在将字符串解析成json数据. //存储 var data={name:"zhangsan"}; data=JSON.stringify(data); localStorage.setItem("billList",data); //获取 var billList= localStorage.getItem("bil原创 2021-10-24 15:06:06 · 1872 阅读 · 0 评论 -
jquery清空input标签的值,清除标签里面的内容
清除input标签的值,可以通过直接将input标签的值设置为空来实现. <input id="user" type="text" name="username" placeholder="请输入用户名" required/>$('#user').val('');//通过val()方法设置value的值清除标签里面的内容,也可以用和上面类似的原理实现$('#notify').html('');但是这样有缺陷,清空的时候只会把里面的内容清空掉,如果里面的内容绑定了事件,事件是没有被原创 2021-10-24 10:10:27 · 19866 阅读 · 1 评论 -
jquery延时执行
格式://第一种setTimeout(function (){ //代码1 },2000);以上代码,延时两秒执行代码1.//第二种setTimeout('a()',2000);function a(){ $('.notify').hide();}//也可以写成这样,函数后面不能带括号setTimeout(a,2000);function a(){ $('.notify').hid原创 2021-10-24 09:52:51 · 5312 阅读 · 0 评论 -
jquery函数
独立的函数,不会直接运行(可以在dom标签里面onclick属性设置绑定函数,或者在函数里面调用函数):function function1(){ alert("function执行了");};下面是常用的给事件绑定函数的方式:$(function (){ //函数逻辑})//上面的写法相当于下面的缩写,是jquery的一种写法,当页面DOM树加载完毕之后触发.$(document).ready(function(){ //函数逻辑})//所有资源加载完毕才会触发,和原创 2021-10-23 22:16:18 · 165 阅读 · 0 评论 -
jquery发起get,post,ajax网络请求,同步异步请求
下面的三种请求默认都是异步的,如果想要使用同步,可以使用ajax设置async属性get请求:格式:$.get(URL,data,function(data,status,xhr),dataType)先是网址,然后是携带的参数,截止时返回结果,最后结果的数据类型.$.get("www.baidu.com", {name:"hello"}, function(data,status){ alert("数据: " + data + "\n状态: " + status); });post请求原创 2021-10-23 16:54:28 · 600 阅读 · 0 评论 -
HTML页面间数据传递,利用JS进行页面跳转
可以利用HTML5的新特性localStorage来进行数据传递,这个就相当于是缓存.采用键值对的方式存取数据.存的数据是全局的.localStorage.setItem("userCode",userCode);//存数据localStorage.getItem("userCode");//取数据JS里面有几个API可以进行页面跳转://第一种window.location.href="https://www.baidu.com";//采用完整路径//第二种window.open("/in原创 2021-10-23 16:34:00 · 343 阅读 · 0 评论 -
idea局部变量变全局变量(成员变量)快捷键
ctrl+alt+f原创 2021-10-22 10:26:19 · 5340 阅读 · 5 评论 -
查询当天的订单数量
可以先获取当前时间的日期,然后获取当天的0时对应的timestamp对象和第二天0时对应的timestamp对象,然后用时间字段between A and B就可以查出当天的订单数量。获取数据库timestamp对象一般是通过timestamp的构造函数,传入毫秒数来构造timestamp对象。因此我们需要获得所需时间所对应的毫秒数。可以利用Calendar的静态方法getInstance来获取当前时间,返回一个Calendar对象。通过Calendar.get(Calendar.YEAR)来获取C原创 2021-10-10 11:52:29 · 948 阅读 · 2 评论 -
java子类强转父类失败 类方法不能被重写
在java中,子类是不能直接转成父类的。如果直接强转就会出现ClassCastException。public class ChongXie extends A{ public static void hello(){ System.out.println("chongxie"); } public static void main(String[] args) { A a=new A(); ChongXie b=null;原创 2021-09-29 13:10:31 · 2394 阅读 · 0 评论 -
字符串常量池变化,字符串intern方法。
调用intern方法,如果常量池有该对象,会将常量池里面该String对象对应的地址返回。如果字符串常量池没有该对象,那么就会创建一个引用指向堆中的该对象。(jdk1.7以及以后,之前是检测到没有就在常量池创建对象,因为1.7之前常量池在方法区,而1.7开始常量池移到了堆)分析过程:从以下面代码为例。首先b的引用是一定指向堆中创建的该对象的。从第一块代码调用intern方法返回的地址和b的地址不一样可以看出,返回的地址是前面字符串c在字符串常量池创建的对象。而第二段代码,首先b是指向堆中的对象,三者相等原创 2021-09-16 00:09:04 · 107 阅读 · 0 评论 -
基本数据类型的常量池情况,基本数据类型包装类型的比较
基本数据类型和包装类型有自动装箱拆箱机制,因此有一个定律可以使用:取值范围在-128~127。并且两个引用都是包装类型,创建方式至少有一个是用new,那么两者就不相等,否则两者相等。注意char后面是字符还是ASCII码,ASCII常量池范围是0~127。原因:首先是自动装箱拆箱机制(这个是针对两个引用类型不同的情况),是在比较的时候,如果一个引用是基础类型,一个是包装类型,会将包装类型转成基本类型再进行比较;因此是比较值,无论值是多少都相等。如果引用是包装类型,使用直接赋值,并且范围在-128原创 2021-09-15 23:04:14 · 210 阅读 · 0 评论 -
java比较器,匿名比较器,lambda比较器,优先级队列的使用
java有一个比较器接口Comparator,里面有一个compare方法。比较函数有两个参数a,b;返回a-b就是升序,返回b-a就是降序。不过最好用比较,不要用相减。使用场景:Arrays里面有一个sort(T[],Comparator)可以根据比较器对数组的数据进行排序。排序二维数组是最好用的选择。例如每个人都有身高和体重[h,w],有n个人,就可以弄成二维数组。然后按照身高或者体重进行排序。数组降序排序也要使用比较器,根据比较器进行排序。优先级队列里面也要使用比较器。//poin原创 2021-09-10 12:17:56 · 719 阅读 · 0 评论 -
java 对整型数组进行倒叙排序api,List,Integer[]和int[]互转
对数组进行降序排序apijava中没有直接进行倒数排序的api,不过有可以按照比较器规则进行排序的api,可以使用这个api。Arrays.sort(T[] a, Comparator<? super T> c) ,该api传入的数组应该是对象数组,因此使用包装类。import java.util.Arrays;import java.util.Comparator;import java.util.stream.IntStream;import java.util.stream.S原创 2021-09-05 14:38:41 · 1122 阅读 · 8 评论 -
vscode写html属性名自动补多空格的情况
vscode是开发利器,在我们保存代码的时候,它会自动帮我们把代码规范化。如果打的代码没有错误,那么这个过程是正常的。但是如果像下面这样多个一个"<a href=" " id="first"">首页</a>那么在保存的时候,软件会在每一个属性的后面都加上一个空格,这样会导致属性的名字和js代码中的名字不一样,导致程序出错。...原创 2021-06-06 15:41:04 · 1361 阅读 · 5 评论 -
编译时常量和运行时常量
有些常量是在编译阶段就可以确定是自己指向常量池中的哪个地址;而有些在编译阶段无法确定,需要在运行阶段才能确定;但是在编译阶段会把要使用的常量全部加载到常量池。package JVM.RunTime;public class Test1 { static { System.out.println("test1的静态代码块"); } public static final int num=12345; public static final String原创 2021-04-05 11:29:17 · 381 阅读 · 0 评论 -
静态代码块/非静态代码块/子类父类执行顺序
学习笔记2021-03-27java的类加载出现在哪个阶段呢?出现在运行阶段。java程序的运行主要分为两个阶段:编译阶段和运行阶段。编译阶段的主要任务是:把java文件编译成class文件,放在系统类加载器里面,如果程序有语法错误就报错。运行阶段的任务是:使用类加载器通过加载器(加载器优先级:启动类加载器>拓展类加载器>系统类加载器)去加载需要的class文件。静态代码块的运行时机是类加载阶段。因此程序运行期间只会执行一次。非静态代码块(也叫构造块)运行时机是创建对象在构造方法执行原创 2021-03-27 11:13:25 · 902 阅读 · 0 评论 -
final关键字 java
关于java语言当中fina1关键字1、final是一个关键字,表示最终的,不可变的。2、final修饰的类无法被继承3、final修饰的方法无法被翟盖4、final修饰的变量一日"赋值之后,不可重新赋值【不可二次赋值】5、final修饰的实例变量,必须手动赋值,不能采用系统默认值6、final修饰的引用,一日指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收final修饰的引用虽然指向某个对象之后不能指向其它对象,但是所指向的对象内部的内存是可以被修改的。7、fin原创 2021-01-14 23:05:15 · 91 阅读 · 0 评论 -
java关于static的一些使用
静态代码块可以使用 static关键字来定义静态代码块:语法格式:static{ java语句;}静态代码块在类加载时执行,并且只执行一次。静态代码块在一个类中可以编写多个,并且遵循自上而下的顺序依次执行。静态代码块的作用什么?怎么用?用在哪儿?什么时候用?这当然和具体的需求有关,例如项目中要求在类加载的时刻/时机执行代码完成日志的记录那么这段记录日志的代码就可以编写到静态代码块当中,完成日志记录。静态代码块是java为程序员准备一个特殊的时刻,这个特珠的时刻被称为类加载时刻。若原创 2021-01-12 23:57:10 · 76 阅读 · 0 评论 -
关于java的对象参数传递的理解!
如果传递的是普通的数据类型,那么传递的就是拷贝,内外互不影响。1.如果传递的是类对象,传递的方式就类似于指针。传递的参数类似于一个指向外边类对象地址的指针,通过这个指针,就可以修改外部类对象的数据。package consumer;class nu{ public int flag=1;}public class test2 { static void add(nu s){ s.flag++; System.out.println(s.flag)原创 2021-01-09 22:18:55 · 517 阅读 · 5 评论 -
关于java web lib
build path 的lib是属于工程依赖,webcontent->web-inf->lib里面存放web服务器的依赖。比如如果服务器要连接数据库就需要mysql-connector-java-5.1.44.jar。服务器需要的API只会在这个文件夹里面找。原创 2021-01-09 18:22:43 · 140 阅读 · 0 评论 -
idea、eclipse快速生成局部变量、全局变量+批量修改变量名
写好构造函数,或者方法。new String()方法1:鼠标光标在上面,ctrl+1;出现的三个选项,一个是批量修改变量名,一个是快速生成局部变量,一个快捷生成全局变量。方法2 :写好方法之后,光标在最后面,shift+alt+L...原创 2021-01-07 21:21:04 · 3866 阅读 · 0 评论 -
中缀表达式转后缀表达式,后缀表达式实现复杂算术运算
后缀表达式也叫逆波兰表达式。接下来将用后缀表达式实现复杂算术运算系统类:midToLast():中缀表达式转后缀表达式cal():后缀表达式计算结果priority():计算符号优先级GetList():将字符串切割存在队列里中缀转后缀首先传入一个队列存储的中缀表达式;接着创建一个新队列,一个栈。循环读取队列的字符:如果是数字,压入新队列。如果是左括号也直接压入新队列。如果是运算符:①如果栈为空或者栈顶为“(”或者当前运算符优先级大于栈顶运算符,入栈。②否则,出栈,并.原创 2020-12-26 19:04:28 · 452 阅读 · 0 评论 -
java文件流 不清除文件内容进行续写
进行文件流操作,首先需要的就是头文件import java.io.*;java创建新文件1.用文件写功能创建文件OutputStream fs=new OutputStream("F:\\javatest\\test1.txt");//如果该文件不存在就会创建文件用creatNewFile()创建文件File fs=new File("F:\\javatest\\test1.txt");fs.createNewFile();java文件续写FileOutputStream fos=ne原创 2020-11-06 13:22:06 · 873 阅读 · 0 评论 -
java esclipse调试,IDEA调试 debug
想要掌握一门语言,学会调试是非常重要的。加减断点:双击代码前面蓝色区域。注意是否开启忽略所有断点,如果开启了,代码是不会停的。之后点击这个甲虫进行调试,代码会运行完第一个断点的上一行。也可以选择F11快速debug。或者选择上面的run->debug运行到断点之后,F5是进入当前方法F6是运行下一行代码,有方法也不进入。F7是退出当前方法,返回到调用层。F8是一直运行到下一个断点,如果没有下一个断点就会运行完。...原创 2020-11-06 13:05:48 · 263 阅读 · 0 评论 -
java多线程入门笔记,包括线程安全
多线程的创建,方式一:继承于 hread类(只能单继承)1.创建一个继承于 Thread类的子类2.重写Thread类的run()–>将此线程执行的操作声明在run()中3.创建 Thread类的子类的对象通过此对象调用 start()想要共享数据需要将数据设置为静态创建多线程的方式二:实现 Runnable接口1.创建一个实现了 Runnable接口的类2.实现类去实现 Runnable中的抽象方法:run()创建实现类的对象4.将此对象作为参数传递到 Thread类的构造器中原创 2020-11-06 11:15:18 · 86 阅读 · 0 评论 -
C++(一级指针、二级指针,指针引用)作为函数参数
结论指针作为函数参数,传进去的只是一个拷贝的指针,所以无法通过传进去的参数在函数内修改函数外面作为参数的该变量。传变量,传的是变量的拷贝,在函数里面修改该参数,改变的只是函数里面的局部变量。传一级指针,传的是一个指针的拷贝,在函数修改该指针所保存的地址(修改指针的指向),修改的也只是局部变量。但是可以通过指针来修改指针所指向的内存的数据。传二级指针,传的是一个指向指针的指针的拷贝,在函数里面修改该指向指针的指针所保存的地址(修改指向指针的指针的指向),修改的还是局部变量。但是可以通过二级指针指向一级原创 2020-08-22 11:14:04 · 971 阅读 · 0 评论 -
C++ 函数参数传递的三种方式 (传参、传地址、传引用)
传值参数传进来之后只是一个局部变量,修改形参的值不会改变实参的值,也就是在函数里面改变该参数并不会改变主函数里面该变量的值。#include<iostream>using namespace std;void add(int a){ a = a + 5;}void main(){ int b = 0; add(b); cout << b;}输出结果是0,函数里面的加5并没有改变主函数里面的值。传指针传进来的是一个地址,通过这个地址可以找到该地址存放的原创 2020-08-04 13:50:54 · 4813 阅读 · 0 评论