自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 JDK源码-线程池ThreadPoolExecutor

基本数据结构AtomicInteger ctl:前三位为线程池状态,后29位为活跃线程数目CAS–compareAndIncrementWorkerCount:活跃线程数增1(新增线程)阻塞队列–BlockingQueue workQueue:工作队列(需要被线程池执行的线程队列)可重入锁–ReentrantLock:添加工作线程等操作时的加锁HashSet workers:所有的工作...

2019-03-28 11:10:29 148

原创 JDK源码-PriorityBlockingQueue(优先阻塞队列)

数据结构//二叉平衡堆private transient Object[] queue;//外部操作加锁private final ReentrantLock lock;private final Condition notEmpty;//通过CAS获取的自旋锁private transient volatile int allocationSpinLock;初始化publi...

2019-03-22 15:54:59 185

原创 JDK源码--StringBuilder/StringBuffer(字符串操作)

StringBuilderappendpublic AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len = str.length(); ensureCapacityInternal(count + len); //开辟len长度的...

2019-03-21 19:36:42 264

原创 JDK源码-ReetrantReadWriteLock(可重入读写锁)

读锁加锁:没有线程持有锁,或者持有的都是读锁写锁加锁:没有线程持有锁写锁加锁public void lock() { sync.acquire(1);}public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.E...

2019-03-21 13:55:31 199

原创 JDK源码--ReetrantLock(可重入锁)

加锁时判断是否已加锁的为当前线程,如果是则加锁成功同时增加锁次数解锁时需要把加的锁次数扣减至0才算解锁成功分为公平和非公平锁加锁public void lock() { acquire(1);}protected final boolean tryAcquire(int acquires) { final Thread current = Thread.curren...

2019-03-21 11:56:24 396

原创 mysql相关梳理

问:如何优化mysql的查询?优化mysql查询缓存优化索引对大数据表做拆分(垂直、水平)考虑使用本地缓存+mysql优化热点数据查询问:mysql的索引主要有哪几种?主要有B+树索引和哈希索引等问题:使用索引一定能提升性能吗?索引需要存储空间,所以也不是越多越好,如果引入索引的成本比不用索引增加的成本更大,就最好不用索引如果数据表中数据少,没有必要创建索引当对修改的...

2019-03-20 14:22:19 276

原创 JDK源码--Semaphore(AQS子类)

Semaphore称为计数信号量,允许n个任务同时访问某资源,可将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证才能使用资源。支持公平与非公平两种获取方式。初始化public Semaphore(int permits) { sync = new NonfairSync(permits);}public Semaphore(int permits, boolea...

2019-03-20 14:11:00 187

原创 JDK源码--CountDownLatch(AQS子类)

CountDownLatch用于同步一或多个线程,强制它们等待由其他线程执行的一组操作完成。典型用法是将一个程序分为n个互相独立的可解决任务,并创建值为n的CountDownLatch。每个任务完成时都会调用countDown,等待问题被解决的任务调用await将自己挂起,直至计数结束。初始化public CountDownLatch(int count) { //参数为等待完成的线程数...

2019-03-20 13:59:36 188

原创 JDK源码--CopyOnWriteArrayList(写时复制)

原理如果多个调用者同时要求相同资源,他们会获取相同的资源,直到某个调用者试图修改资源时,系统才会真正复制一份副本给该调用者,而其他调用者见到的最初资源仍然保持不变。这对其他调用者都是透明的。优点是如果调用者没有修改资源,就不会有副本创建,多个调用者读取操作可共享同一资源。典型的读写分离思想不足大并发写时会创建多个副本,浪费内存,频繁GC只能保证数据最终的一致性,不能保证数据的实时一...

2019-03-20 13:39:45 634

原创 JDK阻塞队列--ArrayBlockingQueue、LinkedBlockingQueue

ArrayBlockingQueue基本数据结构数组实现线程安全保证:ReentrantLocknotEmpty等待队列:获取数据的消费者线程被阻塞时放置到该队列notFull等待队列:插入数据的生产者线程被阻塞时放置到该队列插入数据public void put(E e) throws InterruptedException { checkNotNull(e); ...

2019-03-20 13:39:29 111

原创 JDK源码--ConcurrentSkipListMap(跳跃表)

原理Redis有序集合中使用,跟红黑树相同的时间效率,但实现更简单。读取数据private V doGet(Object key) { if (key == null) throw new NullPointerException(); Comparator<? super K> cmp = comparator; ...

2019-03-20 13:39:05 266

原创 数据库连接池简介

出现背景需要数据库连接得到高效、安全的复用,避免数据库连接频繁建立、关闭的开销。对共享资源有一个设计模式(资源池)来解决资源频繁分配、释放造成的问题。把该模式应用到数据库连接管理领域,就是建立数据库连接池。基本原理是在内部对象池维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。第一代连接池一般采用单线程同步的架构设计的都属于第一代连接池,而采用多线程异步架构的则属于第二...

2019-03-11 11:04:14 115

原创 网络相关

1.简述https建立连接的过程1.客户端浏览器发出安全请求(https前缀)2.服务端发送数字证书(包含服务器的publicKey)3.客户端使用预置的CA列表验证证书,如果有问题则提示风险4.客户端生成随机的对称密钥,用服务器的publicKey加密5.服务器用自己的privateKey解密,得到对称密钥6.双方都使用对称密钥加密通信数字证书的原理:...

2019-03-09 14:21:05 143

原创 Spring相关

Spring中主要用到了哪几种设计模式?举例说明单例模式:spring容器中bean默认模式。容器中只会有一个bean实例(对所有的请求、依赖都一样);用于无状态的bean;spring容器完全管理单例bean的生命周期(默认是在关闭容器时销毁bean,可以自定义销毁逻辑)Prototype模式:每次对该bean的请求都会创建一个新实例,用于有交互状态的bean;spring不会完全管理Pr...

2019-03-09 13:58:23 128

原创 guava缓存原理--listener

有时我们需要在缓存被移除时得到这个通知,并做一些额外处理。这时RemovalListener就派上用场了。RemovalListener&lt;Integer, AtomicInteger&gt; removalListener = new RemovalListener&lt;Integer, AtomicInteger&gt;() { //覆盖接口的onR...

2019-03-07 16:51:52 318

原创 guava缓存原理--get操作

V get(K key, CacheLoader&amp;lt;? super K, V&amp;gt; loader) throws ExecutionException { int hash = hash(checkNotNull(key)); //这里使用了分段的hash表,原理参考ConcurrentHashMap return segmentFor(hash).get(key, ...

2019-03-07 15:29:32 1336

原创 如何进入深度学习状态

放下手机手机的信息嘈杂的头号干扰源卸载繁杂的软件尽可能让它安静社交媒体少去看散步有助于提升思考力每天给自己半小时散步或静坐的时间,思考自己一天的工作以及收获养成习惯理清自己的思路无需过度整理自己的东西,这样会花费很多时间做无可替代的事情,其他的暂缓意志力容易被消耗,但也可以锻炼你很容易高估自己的意志力每天给自己一小时,做深入的阅读,可以锻炼意志力多记录自己深度...

2019-03-07 10:12:44 363

原创 Collections集合接口

HashMap:数组+单链表维持哈希表,冲突节点头插LinkedHashMap:继承HashMap,双链表维持哈希表,可保证数据的有序性,冲突节点尾插ConcurrentHashMapTreeMap:红黑树,支持排序的map,相对于HashMapPriorityQueue:优先队列,内部是一个最小堆,根节点最小WeakHashMap(常用于缓存):使用同HashMap,不过WeakH...

2019-03-04 10:16:05 466

空空如也

空空如也

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

TA关注的人

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