- 博客(19)
- 资源 (2)
- 收藏
- 关注
原创 多线程之ThreadLocal原理分析
ThreadLocal使用场景源码分析setgetThreadLocalMap3种引用强引用内存泄漏使用场景ThreadLocal提供了线程独有的局部变量,可以在整个线程存活的过程中随时取用,极大地方便了一些逻辑的实现。常见的ThreadLocal用法有:1.存储单个线程上下文信息。一次request中可以将一些用户信息存到ThreadLocal中,在业务处理是可以随时获取。2.使变量线程安全。变量既然成为了每个线程内部的局部变量,自然就不会存在并发问题了;3.减少参数传递。比如做一个trace工
2021-02-28 22:48:41
173
原创 java基础Synchronized底层monitor
synchronized底层使用monitor来控制锁的活动。了解monitor中的各个属性值的含义,锁的竞争流程。ObjectMonitor主要数据结构如下:
2021-02-25 18:27:34
2281
2
原创 java基础ReentrantLock和AQS同步队列
ReentrantLock和AQS同步队列ReentrantLock同步队列(AQS)ReentrantLock#lock()NonfairSync#lock()AQS#compareAndSetStateAQS#acquireSync#nonfairTryAcquire 非公平锁Sync#fairTryAcquire 公平锁AQS#addWaiter(Node)AQS#acquireQueuedparkAndCheckInterruptReentrantLock#unlock()unparkSuccess
2021-02-23 17:32:57
1214
1
原创 java基础Synchronized原理及逃逸分析
Synchronized用法锁升级无锁identity hashcodeagebiased locklock偏向锁轻量级锁重量级锁用法synchronized可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。synchronized有三种应用方式:作用于实例方法,当前实例加锁,进入同步代码前要获得当前实例的锁;作用于静态方法,当前类加锁,进去同步代码前要获得当前类对象的锁;作用于代码块,对括号里配置的对象加锁。锁升级在说锁升级前时先
2021-02-22 11:29:30
370
原创 java基础之ConcurrentHashMap1.8(一)
put方法public V put(K key, V value) { return putVal(key, value, false); } /** Implementation for put and putIfAbsent */ final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || value == null) throw new NullPoint
2021-02-20 15:24:25
219
原创 java基础之HashMap
Map相关问题总结HashMap1.7数组+链表头插1.8数组+链表+红黑树尾插扩容机制LoadFactory 默认0.75创建一个空数组重新HashHash公式跟长度有关线程不安全2的幂次方便位运算均匀分布
2021-02-19 17:26:18
109
原创 Nginx limit_req_zone限流实战
1.基本配置根据ip限流主要用到limit_req_zone模块,下面分别对两个接口做了不同规则的限流,配置代码如下:http{limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;limit_req_zone $binary_remote_addr zone=two:10m rate=60r/m; server { # zone要和上方声明的对应 location /search/ { limit_re
2021-02-05 18:20:06
957
原创 【转自公众号】spring的重试机制,可用用于io超时
概要Spring实现了一套重试机制,功能简单实用。Spring Retry是从Spring Batch独立出来的一个功能,已经广泛应用于Spring Batch,Spring Integration, Spring for Apache Hadoop等Spring项目。本文将讲述如何使用Spring Retry及其实现原理。背景重试,其实我们其实很多时候都需要的,为了保证容错性,可用性,一致性等。一般用来应对外部系统的一些不可预料的返回、异常等,特别是网络延迟,中断等情况。还有在现在流行的微服务
2020-12-14 15:14:45
147
原创 discard long time none received connection
记一次com.alibaba.druid的bug背景服务从springboot1.5升级到spring boot 2.x时 报连接错误,应该是druid 1.0.x版本不支持springboot2.x版本,所以用了druid1.2.1。果然启动和使用都正常了。但运行一段时间有报下列错误[2020-10-21 15:53:24:008][service-courseware-processer-pic][] [ERROR] - com.alibaba.druid.pool.DruidAbstractD
2020-10-22 14:46:22
3253
1
原创 记一次DDOS攻击
发生在测试环境,有外网域名。客户端同学反映接口不能请求,看了下日志没有错误,重启了一下可以正常启动。过了一段时间又不能访问了,开始排查nginx日志。发现一瞬间有大量的请求响应码为404,之后我们的请求响应499。因为测试环境跑了多个服务,内存使用率较高98%,考虑是不是内存不足引起的开始做服务迁移,将我的服务迁走并且nginx转发的新服务,观察一段时间。好景不长,第二天又挂了。说明不是内存的问题,再看nginx日志发现还是一样的情况,大量的请求,其中不乏sql注入,env,secret
2020-09-28 17:32:51
694
原创 java基础之UDP,TCP
tcp3次,4次握手seq:初始序列号由自己定,而后绪的序列号由对端的 ACK 决定:SN_x = ACK_y (x 的序列号 = y 发给 x 的 ACK)Acknowledgment Numbe:称为「确认序列号」。确认序列号是接收确认端所期望收到的下一序列号。确认序号应当是上次已成功收到数据字节序号加1,只有当标志位中的 ACK 标志为 1 时该确认序列号的字段才有效。主要用来解决不...
2020-05-13 18:05:51
169
原创 java基础之finally训练
1、不管有没有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally中最好不要包含...
2020-05-13 18:05:01
143
转载 一致性hash在 redis中应用
1.ShardedJedis内部实现首先我们来看一下ShardedJedis的一个继承关系 看完了图,那么我们一步一步跟着我们的代码调用来看,以我们最简单的 ShardedJedis.get(key)方法为例: public String get(String key) { Jedis j = getShard(key); return j.get(key)...
2018-09-12 15:19:04
380
原创 一致性hash java实现
前言之前讲了 一致性hash算法的原理,现在撸代码。环的数据结构,可能首先想到的是常用的List。一致性hash需要找比当前元素大的节点,那么list要么排好序然后比较找到对应的节点,要么是不排序直接遍历算差值。显然在这种查找比较频繁的场景树结构更适合,所以我们用有序的树结构TreeMap。 节点的hash冲突时我们再取一次hash值/**一致性hash * Created by ...
2018-09-11 12:53:43
680
原创 了解一致性HASH算法
Hash取余算法适合在项目初期使用流量少的时候使用。比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ,list.get(hash(object)%n);图 1-1如图1-1中,有3个cache,...
2018-09-08 19:47:00
184
转载 Hibernate多对多查询
一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有.要查询教拥有书"a"的学生的老师!HQL如何写呀?如何取值?class Teacher{String id;String name;Set students;}class Student{String id;String name;Set teachers;Set b
2015-06-17 15:16:37
238
转载 严重: IOException while loading persisted sessions: java.io.EOFException
tomcat在启动时出现如下异常问题: 严重: IOException while loading persisted sessions: java.io.EOFException 严重: Exception loading sessions from persistent storage 分析:EOFException表示输入过程中意
2015-06-17 15:04:34
214
转载 Java静态代码块(static block)调用陷阱小记
Java 中的static代码块并不一定会被调用。设两个含静态方法和静态块的两个类(父类Base 子类Extend)static块要写在public类里,所以两个类要写在单独的两个.java文件里//父类public class Base { public static String who = "Mr. Base"; Base(){
2015-06-02 17:08:04
251
转载 java定时任务,每天定时执行任务
public class TimerManager { //时间间隔 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; public TimerManager() { Calendar calendar = Calendar.getInstance(); /*** 定制每日2:00执行
2015-05-29 15:19:29
192
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人