- 博客(18)
- 收藏
- 关注
原创 redis实现乐观锁
悲观锁认为什么时候都会出问题,无论做什么都加锁;乐观锁认为什么时候都不会出问题,所以不会加锁;在更新数据的时候判断一下在此期间是否有人改动了此数据;获取version更新数据的时候比较version正常情况127.0.0.1:6379> set money 100OK127.0.0.1:6379> set out 0OK127.0.0.1:6379> watch money #监视money对象,事务执行成功以后监控就会自动取消OK127.0.0.1:
2020-09-16 11:01:01
128
原创 redis事务
1. 开启事务(Multi)2. 命令入队3. 执行事务(exec)127.0.0.1:6379> multiOK127.0.0.1:6379> set k1 v1QUEUED # 表示该命令以及入队,但还没有执行127.0.0.1:6379> get k1QUEUED127.0.0.1:6379> set k2 v2QUEUED127.0.0.1:6379> exec # 执行exec后,以上命令一次性执行1) OK2) "v1"3) O
2020-09-16 10:08:29
141
原创 Integer对象范围
Integer integer = new Integer(10); Integer integer1 = new Integer(10); System.out.println(integer == integer1); //false Integer a = 127; Integer b = 127; System.out.println(a == b); //true Integer a1 = 128;...
2020-09-13 15:36:46
2623
原创 MySQL基础语句
# tips:时间戳未解决# DDL (Data Definition Language) 数据定义语言#创建数据库create database basic;create database basic character set utf8;create database if not exists basic;create database if not exists basic character set gbk;#展示所有的数据库show databases;#查询当前正在使
2020-09-12 23:38:30
171
原创 关于<? extends T>和<? super T>
<? extends T>表示上界通配符,可以表示所有T的子类以及T; <? super T>表示下界通配符,可以表示所有T的父类以及T;
2020-08-29 16:53:34
306
原创 Synchronized的用法
synchronized修饰类的成员方法(将synchronized关键字放在返回值类型前面),此时锁对象为该类的对象; synchronized修饰同步代码块(用法:synchronized(锁对象){同步代码块}),此时括号内可以填三种; this,锁对象是类的对象 obj,锁对象是obj(Object obj = new Object()) 类名.class,锁对象为类的class对象 注意:synchronized关键字的核心是找到唯一的锁对象;...
2020-08-25 22:45:29
230
原创 面向对象的三大特征
封装:把客观的事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息隐藏。隐 藏实现细节,使得代码模块化。 继承: 特点:类是单继承的,接口可以多继承;类是可以多级基础的;一个子类只能有一个父类,一个父类可以有多个子类; 多态:...
2020-08-21 23:45:24
113
原创 四种权限修饰符
public修饰,所有类都可以使用 private修饰,只能在当前类中使用 注意:通过创建子类对象访问父类的属性方法(以下以属性为例) 例:Demo1为父类,protected int a,Demo2为子类,在Demo3中的main()中new Demo2(),此时能不能访问Demo1中的a属性,取决于Demo3和Demo1的位置,在同一个包下,则可以访问。若为friendly(默认不写),则不可以访问。 ...
2020-08-21 23:45:12
179
原创 继承--父子类构造方法的特点
子类的构造方法中有默认的super()调用,一定是先调用了父类的构造方法,再调用子类的构造方法。 public class Fu { public Fu(){ System.out.println("父类的无参构造!!!"); }; public Fu(int num){ System.out.println("父类的有参构造!!!"); };} 父类的构造方法必须在子类构造方法的第一行,可以是有参构造也可以是无参构造;
2020-08-21 22:54:44
167
原创 二分查找
二分查找的前提是数据已经排好序; //二分查找public class ErFen { public static void main(String[] args) { int [] data = {1, 3, 4, 6, 8, 23, 45, 87, 99}; int index = 87; //要查找的数 //定义开始和结束下标 int beginPos = 0; int endPos = data.le
2020-08-20 20:29:25
121
原创 选择排序
先将第一个元素作为最小元素,依次与第二个、第三个...比较,如果出现更小的,则data[0]的数据与之交换,一次循环之后,data[0]得到最小的元素;排除data[0],将第二个元素作为最小元素,与上面类似循环。//选择排序算法public class XuanZe { public static void main(String[] args) { int [] data = {3, 4, 2, 34, 23, 0, 6}; for (int i=0;
2020-08-20 19:55:12
98
原创 冒泡排序
将第一个元素与第二个比较,第二个与第三个....以此类推,如果第一个比第二个大就交换,则最右边的元素最大,右二次之..... //冒泡排序的算法public class MaoPao { public static void main(String[] args) { int [] data = {1,3,2,8,34,3,0}; for (int i=data.length-1; i>0; i--){ for (int j=
2020-08-20 19:23:10
83
原创 数组的拷贝
//数组的拷贝public class Demo2 { public static void main(String[] args) { int [] src = {1, 2, 3, 4, 5, 6}; int [] des = {4, 5, 6, 6, 0, 0}; System.arraycopy(src, 0, des, 2, 3); for (int i = 0; i < des.length; i.
2020-08-20 18:26:03
72
原创 数组的扩容
原来的数组所占据的空间将会被垃圾回收级制(GC)回收; 数组扩容涉及数组的拷贝,数组拷贝会耗费大量的资源; 数组的优化: 创建数组的时候,预先估计数组中存储元素的个数,给定初始化容量,减少数组的拷贝,提高程序的执行效率。 ...
2020-08-20 18:06:44
281
原创 数组的比较
数组是引用数据类型,而且底层被封装好了,不能重写equals()方法。 eg: int [ ] a = {1, 2, 3} int [ ] b = {1, 2, 3},由于比较的是地址,所以a.equals(b)为false; 解决数据的比较有两种方法: 自定义方法 使用工具类java.util.Arrays public class Demo1 { //自定义比较方法 public static boolean isEquals(int [] a,int [...
2020-08-20 17:02:55
2033
原创 String、StringBuffer和StringBuilder之间的比较
首先,三者的源码都是使用数组来创建字符串,由于string底层的数组使用final关键字修饰,所以不可以改变。 String不可以用于字符串的拼接:因为使用String创建的变量的内容不可以改变。 stringbuffer是线程安全的,使用了锁,效率没有stringbuilder高,stringbuilder是线程不安全的。...
2020-07-30 20:41:44
122
原创 java包名、类名、方法名等命名规则
包:由小写英文字母组成; 类和接口:所有单词首字母大写,例如ThreadDemo1; 方法和变量:首字母必须小写,如果该变量名有多个单词组成,后面的单词首字母大写,单词与单词之间不要使用"_"做连接; 常量:单个单词组成,全部大写,多个单词组成,单词全部大写,并用_(下划线)连接。...
2020-07-20 17:42:50
1365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人