- 博客(47)
- 收藏
- 关注
原创 MySql
幻读指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。如下图:\1. Q1 只返回 id=5 这一行;\2. 在 T2 时刻,session B 把 id=0 这一行的 d 值改成了 5,因此 T3 时刻 Q2 查出来的是id=0 和 id=5 这两行;\3. 在 T4 时刻,session C 又插入一行(1,1,5),因此 T5 时刻 Q3 查出来的是 id=0、id=1 和 id=5 的这三行。
2023-06-07 21:26:53 936 2
原创 如何让Java项目兼容更多的客户端设备(二)
一、Token认证的原理传统的单体JavaWeb项目通常采用HttpSession保存登陆成功的凭证,但是HttpSession需要浏览器的Cookie机制配合。也就是说Web项目的客户端只能是浏览器,不可以是APP、机顶盒、智能家电等。为了让Java项目兼容更多的客户端设备,所以我们要放弃在客户端用Cookie保存SessionId的做法。我们在服务端生成Token字符串,然后交给客户端保存。APP也好、浏览器也好、机顶盒也好,都能保存字符串。
2022-11-28 22:28:12 947
原创 如何让Java项目兼容更多的客户端设备(一)
HTTP访问是无状态的,(服务器不知道是不是你访问的)所以我们不知道每次登录的是谁如果想实现每次登录不用重复登录,最简单的就是让浏览器记住用户名和密码。但这样做风险极大,如果电脑被黑了就会泄露出去密码;而且每次浏览器都要想办法在请求里加入用户名和密码。
2022-11-27 23:38:41 342
原创 动态规划模板总结(1)
一维实现:运用了滚动数组的思想,每次找最大值就是从前面一次的数组寻值,而且由于公式的原因不可能从原地址取值。运用了一维就可以直接把前面i代表的那一维去掉。滚动数组:如果f()只用到了上层的数据,完全可以只用f(2)和f(1)交替来算。不需要创建额外的空间。f(i,j)表示的是集合的某种属性,是个值。
2022-11-20 18:40:07 539
原创 KMP算法
KMP算法Knuth–Morris–Pratt(KMP)算法是一种改进的字符串匹配算法,它的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。它的时间复杂度是 O(m+n)Java代码public int strStr(String haystack, String needle) { if(needle.length()==0) return 0; int m = haystack.length(), i = 0; i
2022-05-30 20:41:57 168
原创 Tomcat
Tomcat此处省去Tomcat的安装CS:客户端服务器架构模式优点:充分利用客户端机器的资源,减轻服务器的负荷(一部分安全要求不高的计算任务存储任务放在客户端执行,不需要把所有的计算和存储都在服务器端执行,从而能够减轻服务器的压力,也能够减轻网络负荷)缺点:需要安装;升级维护成本较高BS:浏览器服务器架构模式优点:客户端不需要安装;维护成本较低缺点:所有的计算和存储任务都是放在服务器端的,服务器的负荷较重;在服务端计算完成之后把结果再传输给客户端,因此客户端和服务器端会进行非
2022-05-26 20:24:31 90
原创 队列和栈的基本算法题
力扣总结思路:创建一个栈存放温度数组的元素下标在创建一个数组放答案,只要在i天之后温度高了就将栈顶元素弹出栈,并保存栈顶元素赋值到答案数组思路: 这题没有什么难的,但是由这题联想到剑指 Offer 30. 包含min函数的栈 - 力扣(LeetCode)在用Java创建Stack并用Integer泛型的时候出现了栈溢出的情况。通过查阅资料发现是因为...
2022-05-22 21:09:07 165
原创 栈和队列的实现及简单应用
一.栈1)栈的实现//用链表实现栈(链式储存结构)public class LLNode { public static void main(String[] args) { LLStack llStack = new LLStack(); llStack.push(1); llStack.push(2); llStack.push(3); System.out.println("栈里面的个数...
2022-05-15 19:25:23 221
原创 递归学习(一)
一.含义递归,就是在运行的过程中调用自己。二.模板及条件public void function(参数0) { if (终止条件) { return; } function(参数1);}ps:1.注意终止条件要放调用之前,不然会报StackOverflowError。2.递归是把一个大的问题细分为更小的子问题,是一个重复的过程,只需要知道递归函数的功能即可,不要把递归一层一层的拆开来想。三.举例1)汉诺塔汉诺塔的原理就是借助一个柱子
2022-05-08 21:30:01 377
原创 JAVASE学习总结(20):字符串相关的类--StringBuffer
一。String、StringBuffer、StringBuilder三者的异同?String:不可变的字符序列;底层使用char[]存储StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储 源码分析: String str = new String();//char[] value = new char[0]; String s
2022-01-08 14:48:27 84
原创 JAVASE学习总结(18):多线程下
1)创建多线程的方式三:实现Callable接口。 --- JDK 5.0新增如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大?1. call()可以有返回值的。2. call()可以抛出异常,被外面的操作捕获,获取异常的信息3. Callable是支持泛型的//1.创建一个实现Callable的实现类class NumThread implements Callable{ //2.实现call方法,将此线程需要执行的操作声明在
2022-01-06 22:44:39 58
原创 XUPT第三届新生算法赛
A、dls的黑粉 题目描述 众所周知,邓老师在西邮有众多的应援团,其中邓老师西邮应援团东区分团和邓老师西邮应 援团西区分团是主要的两个应援团,但是这两个应援团谁都看不上对面,都觉得自己才是邓 老师唯一的应援团,觉得对方是黑粉,有一天,这两个应援团的粉丝们又在粉丝群吵起来 了,邓老师实在受不了了,所以他提出了一个方案:让双方都派出一个人互相做一个游戏, 谁输了,谁就是黑粉。 这个游戏的内容是这样的:有 个石子,每个人都只能从中取出一个石子,特别的是,如 果石子的总数是偶数,那么
2021-12-14 21:20:09 1880
原创 JAVASE学习总结(13)
一。一维数组1.数组的概述2.数组的相关概念3.数组的特点 1)数组是有序排列的 2)数组属于引用数据类型的变量,数组的元素,既可以是基本数据类型,也可以是引用数据类型4.数组的分类5.一维数组的使用 1)初始化1.1静态初始化:数组的初始化和数组元素的赋值操作同时进行 int[] ids; ids = new int[]{1001,1002,1003,1004};//int[] ids...
2021-12-10 21:51:08 182
原创 JAVASE学习总结(15)
写构造器习惯上先提供空参的输出语句中的双单引号:输出用双引号 ,单引号是字符,会被当成加法。如'\t'(加上去)和"\t"(空四格)引用数据类型赋值赋的都是地址一。内部类 1.定义:Java中允许将一个类A声明在另一个类B中,A称为内部类,B称为外部类 2.为什么需要内部类?在定义一个类的属性时,往往就凭基本数据类型是无法完全表达某个属性的,这时需要定义一个类来补全此属性,但这个类就用这一次,于是将其直接定义在这个类内部,称为内部类 3...
2021-12-10 21:48:12 525
原创 Java方法使用
一。System.arraycopy()方法public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)其中:src表示源数组,srcPos表示源数组要复制的起始位置,destPos表示目标数组要复制得起始位置,desc表示目标数组,length表示要复制的长度 package leetcode; import java.util.Arrays;p..
2021-12-08 21:44:55 1003
原创 JAVASE学习总结(12)
C语言:取模运算和除法运算结果的正负是由左操作数的正负决定的。C语言负数的除法和求余运算int取值范围为什么是-2^31- 2^31-1?-1是因为这其中包括了0(两位最大表示3),0占去了一个。而负数不用-1是因为1000 0000 0000 0000 0000 0000 0000 0000(2)“-0”这个数被用去表达-2^31 void main(void) { int a=-2147483648; int b=-a; p...
2021-12-07 22:22:24 83 1
原创 JAVASE学习总结(11)
native关键字:要往下调C/C++的代码了static:体现了随着类的加载而加载 final:体现不能变属性大写:常量staitc存在于方法区的静态域当中(静态:static 域:field/属性 专门给static准备的(类当中声明为static的属性))子类之所以能调用父类的属性和方法,是因为调用父类的构造器,就会加载父类构造器不能重写,只能重载static修饰的方法不能被重写多态的举例:方法名 (形参列表(里面是某类类型,恰巧此类又是抽象类,那只能传入...
2021-12-06 22:09:41 419 2
原创 JAVASE学习总结(9)
p290-p293赋值左右两边类型要一样(多态性相关看左边),要不就有自动类型提升向上转型:new了一个woman转成objectObject obj = new Woman();一。多态性:向下转型的使用/instance of关键字的使用 1)有了对象的多态性以后,内存中实际上是加载了子类特有的方法和属性的,但是由于变量声明为父类类型时,编译器不能识别,故子类特有的属性与方法不能调用 使用强制类型转换符向下转型以解决这...
2021-11-30 22:23:52 162
原创 JAVASE学习总结(7)
公式:获取[a,b]范围的随机数:(int)(Math.random()*(b-a+1))+a什么是继承性?继承性是怎么体现的(what)构造器要与类同名一。继承性(拿到调到)setAge(age)
2021-11-28 22:29:40 118
原创 JAVASE学习总结(5)
API:Java提供的类库API文档:关于API怎么使用的说明jar包习惯上,一个源文件写一个类**************************************************************************************************************一。封装性1)为什么需要封装性2)封装性的体现 1.将类的属性私有化,同时提供Public方法来获取(getXxx)和设置(SetXxx)此...
2021-11-24 18:11:56 302 3
原创 JAVASE学习总结(4)
一。值传(方法的形参的传递机制)(普通的)方法里调方法,可以不用new对象自己定义的对象为引用数据类型1.形参:方法定义时,声明的小括号内的参数 实参:方法调用时,实际传递给形参的数据如果参数是基本数据类型,此时实参赋给形参的是实参真实存在的数据值如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值举例:交换某两个数组元素的值形参包含数组名,和两个数组的索引(下标)println(char[])//打印出数组元素的值ps:如果是以“对象.方法”更改属..
2021-11-23 22:30:39 176 1
原创 JAVASE学习总结(3)
一.对象数组的内存解析main方法一执行,就考虑内存中的加载类本身就是引用数据类型调用数组元素的属性时,如果此时数组元素没new(即为FULL),会造成空指针异常。引用类型的变量,只可能存储两类值:null或地址值(也包含了变量类型)二。匿名对象的使用使用:1.一次:直接 new的边.方法 2.两次:将new的那边塞进形参里 等于把地址传给了方法的形参(局部变量在栈中) 就可以调用多次了理解:创建的对象没有显示的赋给一个变量名三。方法的重载(Over...
2021-11-22 21:03:50 189 2
原创 JAVASE学习总结(2)
1.课后练习,类的设计1)方法结束了,(局部)变量的作用域就结束了,变量也就出栈了 ,就消失了。2)Main方法是程序的入口,只有有了main(main也是一种方法)了,程序才能运行。3)调用的方法如果有返回值,要定义个变量去接收 后者 直接把方法放在在sysout里,(编译器会把方法当成变量,变量的值就是返回值)方法结束了(比如main)里面的局部变量也就压出栈了。ctrl+/注释掉所选代码4)要不要形参,就看外界是否传东西进来Ps:同一包下的类不能重名5)调用类中的方
2021-11-21 20:50:33 109 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人