自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jingzhi_f

jingzhi_f

  • 博客(80)
  • 收藏
  • 关注

原创 对分数进行排名,排名必须连续

需求:对分数进行排名,排名必须连续CREATE TABLE `stu` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT '' COMMENT '学生名', `class` int(11) DEFAULT NULL COMMENT '班级', `score` int(11) DEFAULT NULL COMMENT '分数', PRIMARY KEY (`ID`), UNIQUE KEY `uni...

2020-05-11 22:22:58 269

转载 LeetCode_算法:有效的括号

/** * 给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。 * * 有效字符串需满足: * * 左括号必须用相同类型的右括号闭合。 * 左括号必须以正确的顺序闭合。 * 注意空字符串可被认为是有效字符串。 * * 来源:力扣(LeetCode) * 链接:https://leetcode-cn.com/problems/valid-parentheses * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 */..

2020-05-09 23:25:16 159

原创 java二分查找法

/** * 对一个从小到大排序且不重复数据的数组,可用二分查找法找出目标值的下标, * 时间复杂度是o(logn),即log2n,比如数组长度n是16,则log2n等于4(2的4次方等于16),代表最多查找4次就能找到 */public class Test { public static void main(String[] args) { System.out.println(find(new int[]{1,2,3},3));//输出2 System.

2020-05-08 22:59:35 165

原创 LeetCode_db:查出每个班级分数前3高的学生

需求:查出每个班级分数前3高的学生CREATE TABLE `stu` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT '' COMMENT '学生名', `class` int(11) DEFAULT NULL COMMENT '班级', `score` int(11) DEFAULT ...

2020-05-07 22:19:16 254

原创 dubbo整合springboot例子

新建一个父项目,里面包含Api,Provide和Consume三个子项目。Api:存放接口Provide:实现接口Consume:调用接口,返回的是Provide具体实现的内容父项目maven配置:<modules> <module>MyDemoProvide</module> <module>MyDemoServiceA...

2020-05-06 21:53:58 130

原创 LockSupport使用例子

LockSupport普通例子:public class LockSupportPark { public static void main(String[] args) throws InterruptedException { Thread t = new Thread(new Runnable() { public void run()...

2020-05-05 21:11:50 167

原创 jmap命令

jmap -dump:live,format=b,file=/tmp/myoom.txt 进程id导出dump文件分析,执行后会触发GC/Full GC (Heap Dump Initiated GC),然后再导出jmap -histo:live 进程id > /tmp/oom0317.txt导出每个class的实例数和占用内存数,执行后会触发GC/Full GC (Heap Ins...

2020-05-03 22:48:01 214

原创 Thread.join使用场景

Thread.join使用场景:如下例子,有一个任务需要花10秒才完成,现可分2个线程各做一半任务,2个线程同时跑,5秒后即可完成任务并得到结果。所以join可应用于,需要多线程执行任务以减少主线程花费时间的场景。public class ThreadJoin { public static void main(String[] args) throws Interrupte...

2020-04-30 23:35:20 396

原创 synchronized锁的5种状态

synchronized用的锁是存在java对象头中,上锁,改变的就是对象头。synchronized锁有5种状态:无锁,偏向锁,轻量级锁,重量级锁,GC标志信息。0.java应用启动的时候会有多个系统自带的线程执行synchronized代码块,必然会导致由偏向锁升级为轻量级锁,为了避免升级所带来额外的开销, 此时jvm会关闭偏向锁,直接使用轻量级锁,默认等待4秒后再开启偏向锁,可用...

2020-04-29 22:45:46 2023

原创 WaitNotifyAll消费者和生产者

//wait和notifyall不能独立使用,一定要配合synchronized一起使用。//notify只会随机唤醒一个线程,如果操作不当可能其他线程永远都不会唤醒,所以用notifyall安全点。public class WaitNotifyAll { //用来加锁的对象 static Object o = new Object(); //存储数据队列 s...

2020-04-28 14:40:36 106

原创 class文件加载成Class对象情况

通过编译.java文件得到.class文件,.class文件在以下情况下才会加载成java.lang.Class对象1.new该类的对象2.new该类的子类对象(也会使父类加载)3.访问该类静态变量,public static int i = 1;4.访问该类静态方法,public static void test(){}5.对该类进行反射操作,Class<?> user ...

2020-04-27 18:08:12 277

原创 cas(Conmpare And Swap)与aba

cas(Conmpare And Swap)比较和交换算法例子:对int i = 0;进行i++操作。1.读取数据i为02.对0自增后得到数值13.比较i的值是否还是原来的04.是的话把i赋值为1类似于数据库乐观锁update myTable set i = i + 1 where i = 0;所以3和4步必须要同时执行,要有原子性。比如AtomicInteger就使用了cas算...

2020-04-26 18:44:11 328

原创 java对象布局

<dependencies> <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> ...

2020-04-24 23:50:23 135

原创 zookeeper和redis分布式锁对比

zookeeper实现分布式锁方式:1.在某父节点下创建临时的顺序节点2.获取父节点下的所有节点,然后查看自己创建的节点是不是其中顺序最小的, 是的话则获取锁成功,然后执行自己的业务,最后删除节点 不是的话,监听上一个节点的删除事件,得到通知后,再查询一次父节点下所有节点,然后再判断自己是否顺序最小。3.如客户端获取锁后宕机了,zookeeper能自动检测到,然后把其创建的临时节点...

2020-04-23 15:44:45 858

原创 Redis_Redisson_Redlock

一,redis锁的普通实现设置key(myKey)的值为myUuid(当前线程唯一标志值),NX代表key不存在才设置,PX代表30秒后过期set myKey myUuid NX PX 30000使用lua脚本执行,保证原子性,判断key对应的值是当前线程的myUuid才删除,避免由于当前线程阻塞超过30秒后再删除key时,误删了其他线程设置的key。if redis.call('get...

2020-04-22 17:22:04 356

原创 分布式系统CAP理论,只能同时满足其中2个

C(Consistency):一致性每个节点数据保持一致。A(Availability):可用性服务可用,访问能正常返回数据。P(Partition tolerance):分区容错性某节点发生故障(或网络原因集群内访问不了)还能正常使用。只能同时满足2个条件CA:一致性和可用性要同时满足,只能是单机,所以不满足分区容错性,此时违背了分布式的理念。CP:一致性和分区容错性要...

2020-04-21 11:56:23 1150

原创 输出gc日志参数

-XX:+HeapDumpOnOutOfMemoryError 内存溢出时保存内存快照,配合HeapDumpPath使用-XX:HeapDumpPath=/data/app/tomcat/logs/oom.log-XX:-PrintGC(等价于-verbose:gc) 开启gc日志-XX:+PrintGCDetails 打印gc信息-XX:+PrintGCDateStamps 打印gc...

2020-04-20 23:16:08 407

原创 CyclicBarrier例子

public class CyclicBarrierTest { public static void main(String[] args) throws Exception { final CyclicBarrier cyclicBarrier = new CyclicBarrier(11); new Thread(new Runnable() { ...

2020-04-18 23:28:04 115

原创 CountDownLatch例子

public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { final CountDownLatch countDownLatch = new CountDownLatch(10); new Thread(new...

2020-04-17 18:14:00 102

原创 token与jwt使用例子

token使用例子1.客户端登录服务端后,服务端生成一个随机码token,存储到redis中,设置30分钟过期,然后将token返回给客户端2.客户端再次登录服务器并发送token,服务端根据到redis中查找到该token相关信息,返回登录成功3.token明文传输很危险,所以要用https放到post body中传输。JWT(json web token)使用例子1.客户端登录服...

2020-04-16 23:02:42 217

原创 cookie and session

cookie保存在客户端客户端访问服务端时,服务端会将cookie消息封装到响应头中返回给客户端,当客户端再次访问服务器时,在请求头中会携带cookie消息(浏览器会默认携带,且对同一个资源路径下的请求都会携带),这样服务器就能识别这个客户端做相对应得操作。seesion保存在服务端客户端第一次访问服务器时,服务端生成session对象保存客户端相关信息,并把sessionid通过c...

2020-04-15 18:20:36 69

原创 jvm垃圾回收器

1.回收器种类新生代:串行(Serial),一个垃圾回收线程并行(Parallel Scavenge),多个垃圾回收线程新并行(ParNew),由于原有的并行搭配不了CMS而开发的老年代:串行(Serial Old),一个垃圾回收线程并行(Parallel Old),多个垃圾回收线程CMS,并发标志清除(Concurrent Mark Sweep),该回收线程与应用线程几乎同时...

2020-04-14 23:19:17 60

原创 redis数据持久化策略

1.rdb将数据保存一个快照,存放在dump.rdb文件中在redis.conf文件中可配置以下属性rdbcompression yes 保存文件是否压缩,默认为yesrdbchecksum yes 保存文件是否进行rdb文件格式校验,默认为yesstop-writes-on-bgsave-error yes 保存文件时发生错误是否停止,默认为yesdbfilename dump....

2020-04-13 19:00:08 92

原创 redis内存淘汰策略

当redis使用的内存超过最大内存限制maxmemory时,会使用以下内存淘汰策略之一。volatile-lru: 对设置了过期时间的数据,淘汰最近最少使用的。volatile-ttl: 对设置了过期时间的数据,淘汰即将过期的。volatile-random:对设置了过期时间的数据,随机淘汰。volatile-lfu: 对设置了过期时间的数据,淘汰最少使用的。(新加策...

2020-04-10 23:17:05 129

原创 redis过期key删除策略

redis的key到了过期时间后,不会立刻被删除,会通过redis自身的删除策略来删除。1.定时删除策略在设置key过期时间的同时,创建一个定时器,等key到期了将其删除。优点:快速删除,节省内存空间缺点:当cpu高负载时,会给cpu添加额外的压力,同时导致redis服务器的处理效率有所下降总结:以cpu性能换内存空间2.惰性删除策略数据过期后不进行处理,等下次访问该数据时判断...

2020-04-09 18:06:51 648

原创 redis缓存穿透,击穿和雪崩

缓存穿透某个key在redis和db中都没有,如果大量去查,则会不停地查db,增加db的压力解决方案1.即使db中没有也可以缓存到redis,设置一个1-5分钟的过期时间即可2.针对黑客攻击的情况,更换加密key,这样攻击的url请求就通过不了校验流程缓存击穿某个经常查询的key突然过期了,导致大量请求落到db解决方案1.设置超热key(已确定每天都有超大访问量的key)永不过...

2020-04-08 18:29:54 103

原创 数据库乐观锁和悲观锁例子和分析

1.乐观锁:乐观地认为每次读数据别人都不会修改,所以不需要用数据库锁//查出商店中id=1的商品的版本号select version currentVersion from shop where id=1;//把id=1的商品库存减1,并把版本号自增1update shop set num = num - 1,version = version + 1 where id=1 and ve...

2020-04-07 22:52:04 329

原创 java8接口新特性

变量必须public static final(final则必须有初始值)方法必须public abstract(抽象就不是静态)java8新增public interface IUser { static void say() {//静态方法,必须public,不会被继承,不然如果继承2个接口都有相同方法,不知道继承哪个(变量可以继承,但也会出现上述问题,所以方法避开了这个坑)...

2020-04-04 23:57:23 83

原创 Feign整合Sentinel实现降级处理

场景:服务user,有一个接口/getUserOrder.do,调用服务order的/getOrder.do接口,获取用户订单信息。 若调用失败,需要进行降级处理,返回"已进行降级相关处理"字符串。一,Feign整合Sentinel实现降级处理新建配置类public class FeignConfiguration { @Bean public OrderPro...

2020-04-03 23:14:15 1936

原创 数据库事务隔离级别

四种事务隔离级别1.读未提交(Read Uncommitted) - 基本不用就是可以读到未提交的内容。会产生脏读,不可重复读,幻读。2.读提交(Read Committed) - SQL Server和Oracle的默认隔离级别就是只能读到已经提交了的内容。会产生不可重复读,幻读。3.可重复读(Repeated Read) - MySql的默认隔离级别就是专门针对"不可重复...

2020-03-31 10:28:08 118

原创 springboot使用事务

1.maven加相关依赖,让项目能使用spring boot和mybatis2.只需在需要执行事务的方法上加上注释即可@Transactional(rollbackFor = {RuntimeException.class, Error.class})public void dealMessage() { dao.insert1("1"); dao.insert2("2"...

2020-03-30 22:16:19 117

原创 rabbitmq 消息过期成为死信的2种方法

1.设置队列消息过期时间@Bean //注入正常交换器public FanoutExchange normalExchange() { return new FanoutExchange("NORMAL_EXCHANGE", true, false);}@Bean //注入正常队列public Queue normalQueue() { Map<String, ...

2020-03-29 21:17:49 1236

原创 nacos安装与使用

1.先在服务器上安装jdk1.8和maven3.2.x+2.https://github.com/alibaba/nacos/releases下载安装包tar -zxvf nacos-server-1.2.0.tar.gzcd nacos/bin程序启动默认占用的端口是8848,可以在conf文件下的application.properties中修改server.port=9090...

2020-03-28 22:18:40 1713

原创 mysql 分区表 测试实验例子

无论创建何种类型的分区,如果表中存在主键或唯一索引的列,则分区列必须是主键或唯一索引的一部分。索引列可以是null值。在没有主键和唯一索引的表中可以指定任意列为索引列。表中只能最多有一个唯一索引,即primary key 和unique key不能同时存在,primary key包含在unique key中时除外。如对id分区,1千万一个区,分了100个区,当查id=1时,没分区时原来的索...

2020-03-27 15:04:05 188

原创 rabbitmq动态注入队列bean到spring容器

如果有几百个队列,正常做法是用@Bean方法将队列注入到Queue对象中,但这样太麻烦了,我们可以把队列放到list中,然后再循环动态注入到spring容器中,@Configurationpublic class AutoBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {...

2020-03-24 10:41:27 953

原创 CurrentHashMap - jdk1.8

1.采用数组 + 链表/红黑树结构//数组transient volatile Node<K,V>[] table;//链表static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; volatile V val; vol...

2020-03-23 21:27:12 175

原创 CurrentHashMap - jdk1.7

//采用数组 + 链表结构,再对数组元素采用分段锁//数组final Segment<K,V>[] segments;//数组元素static final class Segment<K,V> extends ReentrantLock implements Serializable {transient volatile HashEntry<K,V&g...

2020-03-22 22:01:21 190

原创 HashMap - jdk1.8

1.采用数组 + 链表/红黑树结构,链表元素大于等于8时转为红黑树,树元素个数降到6时转为链表//数组transient Node<K,V>[] table;//链表static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V...

2020-03-20 21:29:28 63

原创 红黑树

红黑树特性1.根节点一定是黑色。2.红色节点的两个子节点一定是黑色。(结合1和2推导出,红色节点一定有父节点,且父节点一定是黑色的)3.对每个节点,若其没有子节点,都会虚构一个叶子节点(黑色,值为null)补上去,两个子节点缺哪个补哪个,两个都缺则都补。4.任意一节点,到所有叶子节点路径的中间,都存在相同的黑色节点。(所以红黑树不是完美平衡二叉树,而是黑色完美平衡二叉树)添加节点特性...

2020-03-19 17:34:02 100

原创 HashMap - jdk1.7

1.底层存储是Entry<K,V>[] table,Entry对象里面还有个Entry<K,V> next指着下一个对象 static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V...

2020-03-18 21:56:06 100

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除