- 博客(45)
- 收藏
- 关注
原创 JDK源码-线程池ThreadPoolExecutor
基本数据结构AtomicInteger ctl:前三位为线程池状态,后29位为活跃线程数目CAS–compareAndIncrementWorkerCount:活跃线程数增1(新增线程)阻塞队列–BlockingQueue workQueue:工作队列(需要被线程池执行的线程队列)可重入锁–ReentrantLock:添加工作线程等操作时的加锁HashSet workers:所有的工作...
2019-03-28 11:10:29 165
原创 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 203
原创 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 280
原创 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 214
原创 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 408
原创 mysql相关梳理
问:如何优化mysql的查询?优化mysql查询缓存优化索引对大数据表做拆分(垂直、水平)考虑使用本地缓存+mysql优化热点数据查询问:mysql的索引主要有哪几种?主要有B+树索引和哈希索引等问题:使用索引一定能提升性能吗?索引需要存储空间,所以也不是越多越好,如果引入索引的成本比不用索引增加的成本更大,就最好不用索引如果数据表中数据少,没有必要创建索引当对修改的...
2019-03-20 14:22:19 286
原创 JDK源码--Semaphore(AQS子类)
Semaphore称为计数信号量,允许n个任务同时访问某资源,可将信号量看做是在向外分发使用资源的许可证,只有成功获取许可证才能使用资源。支持公平与非公平两种获取方式。初始化public Semaphore(int permits) { sync = new NonfairSync(permits);}public Semaphore(int permits, boolea...
2019-03-20 14:11:00 204
原创 JDK源码--CountDownLatch(AQS子类)
CountDownLatch用于同步一或多个线程,强制它们等待由其他线程执行的一组操作完成。典型用法是将一个程序分为n个互相独立的可解决任务,并创建值为n的CountDownLatch。每个任务完成时都会调用countDown,等待问题被解决的任务调用await将自己挂起,直至计数结束。初始化public CountDownLatch(int count) { //参数为等待完成的线程数...
2019-03-20 13:59:36 194
原创 JDK源码--CopyOnWriteArrayList(写时复制)
原理如果多个调用者同时要求相同资源,他们会获取相同的资源,直到某个调用者试图修改资源时,系统才会真正复制一份副本给该调用者,而其他调用者见到的最初资源仍然保持不变。这对其他调用者都是透明的。优点是如果调用者没有修改资源,就不会有副本创建,多个调用者读取操作可共享同一资源。典型的读写分离思想不足大并发写时会创建多个副本,浪费内存,频繁GC只能保证数据最终的一致性,不能保证数据的实时一...
2019-03-20 13:39:45 655
原创 JDK阻塞队列--ArrayBlockingQueue、LinkedBlockingQueue
ArrayBlockingQueue基本数据结构数组实现线程安全保证:ReentrantLocknotEmpty等待队列:获取数据的消费者线程被阻塞时放置到该队列notFull等待队列:插入数据的生产者线程被阻塞时放置到该队列插入数据public void put(E e) throws InterruptedException { checkNotNull(e); ...
2019-03-20 13:39:29 120
原创 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 284
原创 数据库连接池简介
出现背景需要数据库连接得到高效、安全的复用,避免数据库连接频繁建立、关闭的开销。对共享资源有一个设计模式(资源池)来解决资源频繁分配、释放造成的问题。把该模式应用到数据库连接管理领域,就是建立数据库连接池。基本原理是在内部对象池维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法。第一代连接池一般采用单线程同步的架构设计的都属于第一代连接池,而采用多线程异步架构的则属于第二...
2019-03-11 11:04:14 123
原创 网络相关
1.简述https建立连接的过程1.客户端浏览器发出安全请求(https前缀)2.服务端发送数字证书(包含服务器的publicKey)3.客户端使用预置的CA列表验证证书,如果有问题则提示风险4.客户端生成随机的对称密钥,用服务器的publicKey加密5.服务器用自己的privateKey解密,得到对称密钥6.双方都使用对称密钥加密通信数字证书的原理:...
2019-03-09 14:21:05 153
原创 Spring相关
Spring中主要用到了哪几种设计模式?举例说明单例模式:spring容器中bean默认模式。容器中只会有一个bean实例(对所有的请求、依赖都一样);用于无状态的bean;spring容器完全管理单例bean的生命周期(默认是在关闭容器时销毁bean,可以自定义销毁逻辑)Prototype模式:每次对该bean的请求都会创建一个新实例,用于有交互状态的bean;spring不会完全管理Pr...
2019-03-09 13:58:23 139
原创 guava缓存原理--listener
有时我们需要在缓存被移除时得到这个通知,并做一些额外处理。这时RemovalListener就派上用场了。RemovalListener<Integer, AtomicInteger> removalListener = new RemovalListener<Integer, AtomicInteger>() { //覆盖接口的onR...
2019-03-07 16:51:52 328
原创 guava缓存原理--get操作
V get(K key, CacheLoader&lt;? super K, V&gt; loader) throws ExecutionException { int hash = hash(checkNotNull(key)); //这里使用了分段的hash表,原理参考ConcurrentHashMap return segmentFor(hash).get(key, ...
2019-03-07 15:29:32 1361
原创 如何进入深度学习状态
放下手机手机的信息嘈杂的头号干扰源卸载繁杂的软件尽可能让它安静社交媒体少去看散步有助于提升思考力每天给自己半小时散步或静坐的时间,思考自己一天的工作以及收获养成习惯理清自己的思路无需过度整理自己的东西,这样会花费很多时间做无可替代的事情,其他的暂缓意志力容易被消耗,但也可以锻炼你很容易高估自己的意志力每天给自己一小时,做深入的阅读,可以锻炼意志力多记录自己深度...
2019-03-07 10:12:44 378
原创 Collections集合接口
HashMap:数组+单链表维持哈希表,冲突节点头插LinkedHashMap:继承HashMap,双链表维持哈希表,可保证数据的有序性,冲突节点尾插ConcurrentHashMapTreeMap:红黑树,支持排序的map,相对于HashMapPriorityQueue:优先队列,内部是一个最小堆,根节点最小WeakHashMap(常用于缓存):使用同HashMap,不过WeakH...
2019-03-04 10:16:05 477
转载 HashMap与ConcurrentHashMap
扩容HashMap底层新生成一个数组,然后拷贝旧数组里每一个Node链表到新数组,在多线程下有问题,问题在于基于头插法的数据迁移,会有几率造成链表倒置,引发链表循环导致死循环,并吃满CPU。JDK8里HashMap的底层数据结构变为数组+链表+红黑树,因为在hash冲突严重时链表查询效率是O(n),所以JDK8做了优化,对于单个链表的个数大于8的链表,会直接转为红黑树算是以空间换时间,这样...
2019-02-26 15:47:08 128
原创 AQS解析
AbstractQueuedSynchronizer即抽象队列同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch。它维护了一个volatile int state(代表共享资源)和一个FIFO双端队列(多线程争用阻塞时线程进入此队列尾部,队列头节点是成功获取锁的线程,当头节点释放...
2019-02-22 21:46:51 147
原创 JAVA基础试题集合1
1.解释&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;static&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;和&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;
2019-02-21 21:56:08 736
原创 数据结构与算法相关
原子类Hbase:Hbase中HLog使用AtomicLong作为日志序列号,因为一个RS的多个region会并发写入HLog,使用AtomicLong保证线程安全。Kafka:生产者消息分发Partition—如果消息有key,使用key的哈希值与分区个数取模;如果没有key,使用AtomicInteger累加的counter与分区个数取模获取要发送的分区。(负载均衡)特殊数据结构Mys...
2019-02-21 17:26:23 103
原创 Kafka相关
消息发送producer 采用 push 模式将消息发布到 broker,每条消息都被 append 到 patition 中,属于顺序写磁盘(保障吞吐率)。日志文件的删除策略:启动一个后台线程定期扫描log file列表,把保存时间超过阀值的文件删除,为避免删除文件时仍然有read操作(consumer消费),采取copy-on-write方式。producer 发送消息到 brok...
2019-02-19 18:01:12 170
原创 JAVA编程问题总结
加密算法打包时出错Cipher.getInstance(“DES/ECB/NoPadding”);编码算法选择问题error_prone_core扫描出来java.security.InvalidKeyException: Parameters missingCipher.init(Cipher.DECRYPT_MODE, deskey);改为byte[] iv = new sun....
2019-02-19 15:58:57 445
原创 git-maven
maven按需打包 &amp;lt;plugin&amp;gt; &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;maven-jar-plugin&am
2019-02-18 21:32:52 93
原创 Jedis代码走读
核心类:redis.clients.jedis.Jedis(以set为例)Jedis#set(String, String, SetParams)Client#set(String,String,SetParams)BinaryClient#set(byte[], byte[], redis.clients.jedis.params.set.SetParams)Connection#...
2019-02-13 17:58:31 178
原创 Spring--官方文档部分翻译(第六章 AOP)
6.1 切点API6.11 概念核心接口:org.springframework.aop.Pointcutpublic interface Pointcut { ClassFilter getClassFilter(); MethodMatcher getMethodMatcher();}两个子对象都有matches方法,用于测试切点是否匹配特定的类或方法。这种测...
2019-02-13 17:58:04 144
原创 【Spring】Event事件机制
事件机制使用监听者模式。包含一个监听者Listener与之对应的事件Event,还有一个事件发布者EventPublish,过程就是EventPublish发布一个事件,被监听者捕获到,然后执行事件相应的方法。1.事件定义public class EventDemo extends ApplicationEvent { private String message; publi...
2019-01-29 16:43:21 428
原创 Spring--官方文档部分翻译(第五章 面向Aspect的编程-AOP)
AOP通过提供程序设计的另一种思路扩展了OOP,OOP的核心元素是class,而AOP的核心是Aspect。Aspect使得关注点模块化。AOP是spring的核心模块。虽然LOC容器不依赖AOP,但AOP通过提供非常有效的中间件解决方案扩展了IOC容器。Spring2.0引入了 @AspectJ样式(更简洁、有效的书写自定义Aspect)5.1 AOP概念这些概念不是spring...
2018-12-25 19:36:15 145
原创 Spring--官方文档部分翻译(第一章)
1.6.1 Bean生命周期控制生命周期的按照方式InitializingBean 和 DisposableBean回调接口自定义init() and destroy() 方法@PostConstruct and @PreDestroy 注解初始化执行次序:@PostConstruct—InitializingBean接口的afterPropertiesSet()...
2018-12-12 19:29:57 263
原创 Logback阅读
1.设置文件写入ch.qos.logback.core.rolling.RollingFileAppenderch.qos.logback.core.FileAppender#start(打开日志文件openFile())ch.qos.logback.core.OutputStreamAppender#startch.qos.logback.core.UnsynchronizedAppen...
2018-12-12 14:58:53 313
原创 运维--如何在公网用IP访问阿里云部署的服务
适用于自己使用,已经在阿里云上部署服务,但还没有域名的情况下使用1. 服务部署(springboot)//1.本地打包mvn clean install//2.sftp上传到阿里云服务器sftp root@127.xx.xx.xxput -r ./XX.jar//3.阿里云机器上部署服务(默认8080端口,使用localhost可访问)java -jar -Dservice.t...
2018-12-12 14:37:56 1282
原创 Spring框架--注解
@Autowired 与@Resource@Autowired是spring自己定义的注解,@Resource是JAVA规范JSR-250的注解,为spring所支持@Resource的作用相当于@Autowired,都可以用来装配bean,都可以写在字段或setter方法上。只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入@Compon...
2018-12-12 11:33:54 104
原创 Spring框架源码--顶层初始化
1. 顶层 AbstractApplicationContext#refreshpublic void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { //供子类重写个性化配置使用 prepareRefresh(); /...
2018-12-11 16:31:10 221
原创 mybatis--sqlSession脉络
总体org.apache.ibatis.session.defaults.DefaultSqlSession selectOne--&amp;amp;amp;amp;amp;gt;selectList--&amp;amp;amp;amp;amp;gt;selectListorg.apache.ibatis.executor.BaseExecutor query--&amp;amp;amp;amp;amp;gt;query重要模块1. SQL解析:
2018-12-10 12:23:25 125
转载 mybatis标签使用
https://blog.csdn.net/weixin_40950778/article/details/78655288基本标签select 标签id :唯一的标识符. parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User或user resultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的 ...
2018-12-09 17:49:06 112
转载 阿里云服务器部署mysql
https://www.cnblogs.com/xxoome/p/5864912.htmlhttps://www.cnblogs.com/fnlingnzb-learner/p/5830622.htmlyum -y install perl perl-devel autoconf libaiowget http://dev.mysql.com/get/Downloads/MySQL-5.6/...
2018-12-09 16:19:44 322
原创 python常见问题集合
1.urllib.error.URLError . certificate verify failed: unable to get local issue是python2.79以后版本的原因https链接不是从签发机构买的所以失败了,加一句ssl._create_default_https_context = ssl._create_unverified_context就可以2.P...
2018-12-07 19:13:15 272
转载 Linux后台运行程序
问题:mac终端中执行程序(比如运行jar包),当终端断开时程序也会运行中断当用户注销(logout)或网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新会话里成为不属于此终端的子进程。nohup 的用途就是让提交的命令忽略 hangup 信号nohup 使用方便,只需命令前加 nohup ,标准...
2018-11-16 10:53:40 91
原创 mysql问题汇总
1.org.apache.ibatis.binding.BindingException: Parameter ‘dateBefore’ not found. Available parameters are [arg1, arg0, param1, param2]解决:mapper接口中参数加@Param注解(多个参数时) int selectAllCount(@Param("date...
2018-11-16 10:34:15 78
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人