![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
Helloworld先生
往后台架构方向走
展开
-
AQS: 等待队列详解(AbstractQueuedSynchronizer)
目录AQS中的等待队列:是一个双向链表,并使用了“CLH锁”的思想实现等待队列一.CLH锁二.Node的数据结构:记录了等待状态、当前线程、前后节点的引用三.Node如何入队acquire(int arg):获取资源acquireQueued(final Node node, int arg):通过入队获取资源shouldParkAfterFailedAcquire(Nod...原创 2019-03-17 20:11:41 · 2260 阅读 · 2 评论 -
N皇后问题:通过DFS方式输出所有的棋子放置方案
https://leetcode-cn.com/problems/n-queens/N皇后问题是指在N×N格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路1.如何判断(row, col)位置是否能放皇后(1)使用col存储已经摆放皇后的列索引(2)sum存储 /方向的对角线,因为 / 方向的对角线的坐标满足 (...原创 2019-03-17 22:34:50 · 614 阅读 · 0 评论 -
字符串相乘:2种解题思路
目录第一种:实现字符串的乘法算法,乘法算法通过实现字符串的加法完成。第二种:利用乘法公式,把num1,num2的每个位相乘的结果放到在数组对应的偏移位上,最终数组上的值就是相乘的结果。第一种思路的代码实现:第二种思路的代码实现:字符串相乘是leetcode中的43题:https://leetcode-cn.com/problems/multiply-strings/目前有2...原创 2019-03-24 00:48:37 · 2498 阅读 · 0 评论 -
ThreadPoolExecutor中的keepAliveTime详解
ThreadPoolExecutor中的keepAliveTime详解阅读这篇文章,你将会知道:keepAliveTime的概念。keepAliveTime是如何设置的。线程是如何根据keepAliveTime进行销毁的。一.keepAliveTime的概念:keepAliveTime的单位是纳秒,即1s=1000000000ns,1秒等于10亿纳秒。keepAliveTi...原创 2019-04-20 17:02:02 · 51744 阅读 · 1 评论 -
Mybatis: 理解Mapper接口的代理流程
目录关系梳理:ConfigurationMapperRegistryMapperProxyFactoryMapperProxyMapperMethod关于SqlSession的,会另起一篇文章介绍,本次关于Mapper接口的代理就到这里了,谢谢大家。一.关系梳理二.Configuration配置实体,可以理解为读取了xml配置文件后生成的配置实体。...原创 2019-04-14 19:42:39 · 954 阅读 · 0 评论 -
Mybatis:了解SqlSessionTemplate
读完这篇文章,你将会知道:SqlSessionTemplate 和 SqlSessionManager 有什么不同。 SqlSessionTemplate 如何实现线程安全。 SqlSessionTemplate 怎么和数据库打交道。目录SqlSessionTemplate 和 SqlSessionManager 有什么不同。SqlSessionTemplate 如何实现线程安全...原创 2019-04-17 23:42:19 · 22887 阅读 · 1 评论 -
Java线程的状态以及不同状态下线程中断机制的效果
阅读这篇文章,你将会了解1.Java线程有什么状态,以及状态扭转的方式2.Java线程的中断对于各个状态的Java线程有什么效果。一.Java线程的状态:线程的中断不属于线程的状态,中断是一种操作,当用户不希望某个线程继续执行时,可以通过中断机制去完成这个事情。但是,Java线程的中断对于各个状态的Java线程有不一样的效果。Java线程有6个状态,可以进入源码Thread.jav...原创 2019-04-28 00:11:01 · 648 阅读 · 0 评论 -
理解Mybatis一级缓存,以及如何真正使用到一级缓存
阅读这篇文章,你将会了解1.什么是会话(SqlSession)、执行器(Executor)2.什么是Mybatis一级缓存3.一级缓存的生命周期4.一级缓存的CacheKey生成策略5.在日常开发时,怎么才能用到一级缓存(通过事务)一.类关系图:二.什么是会话(SqlSession)在Mybatis中,SqlSession可以理解为数据库访问的最小粒度,每次的数据库访问,...原创 2019-05-02 19:21:59 · 4686 阅读 · 4 评论 -
ForkJoinPool实现原理和源码解析
这是在部门做技术分享的时候写的一篇学习笔记,顺便贴在这里给大家看看,欢迎指出错误,共同学习ForkJoin是什么ForkJoin是用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。数据结构关键的调用图源码解析p...原创 2018-11-11 22:35:51 · 5292 阅读 · 6 评论 -
HashMap:为什么容量总是为2的次幂
HashMap:为什么容量总是为2的次幂HashMap是根据key的hash值决策key放入到哪个桶(bucket)中,通过 tab=[(n - 1) & hash] 公式计算得出。其中tab是一个哈希表1)为什么要通过 (n - 1) & hash 决定桶的索引呢?(1)key具体应该在哪个桶中,肯定要和key挂钩的,HashMap顾名思义就是通过hash算法高效的把存储原创 2018-09-24 21:13:32 · 30823 阅读 · 9 评论 -
在Tomcat服务器下,java使用HttpClient发请求返回400错误
首先要明白400错误是什么意思:由于语法格式有误,服务器无法理解此请求。不作修改,客户程序就无法重复此请求。然后在java代码中,打印请求的url,会发现url中存在空格,可能是使用各种序列化根据(Gson等)导致的。这时候要把url中的所有空格替换点,url.replaceAll(" ","")。这时候在请求就好了。为什么浏览器上访问可以呢?因为浏原创 2015-12-08 11:27:27 · 22003 阅读 · 3 评论 -
《netty权威指南》私有协议栈开发中遇到的坑
这是我上传的项目的链接:直接下载项目项目里面把:编解码、登录权限、心跳包都实现了。《netty权威指南》私有协议栈开发:主要是书上写的不太全,而且有些地方要用到前几章学得东西,所以这里直接把一些书上的编解码粘贴出来 书上用到JBoss的marshalling进行编解码,所以首先要添加marshalling的依赖dependency> groupId>org.jbos原创 2016-03-08 16:15:19 · 4045 阅读 · 3 评论 -
jvm:停止复制、标记清除、标记整理算法(垃圾回收)
jvm:停止复制、标记清除、标记整理算法(垃圾回收)转载 2016-03-21 12:24:55 · 9058 阅读 · 0 评论 -
java:四种Reference的区别
启动的时候要加上启动配置: -Xms10m -Xmx10m -verbose:gc如果要使用Jconsole还要加上 :-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false1、 强引用只要引用存在,垃圾回收器永远不会回收O原创 2016-03-18 10:44:37 · 3354 阅读 · 0 评论 -
Java:volatile的理解与应用
首先,先理解这样一个运算 :i = i+1当程序执行这条语句时,会先从主存中读取i的值,然后复制一份到高速缓存中,然后cpu执行指令对i进行加1操作,然后将数据写入高速缓存,最后将高速缓存中的i最新的值刷新到主存当中。在并发中,有这样3个概念:1.原子性:一个操作或多个操作要么全部执行并且执行的过程不会被任何因素打断,要么全部不执行Java中对基础数据类型的变量的原创 2016-03-09 17:08:50 · 463 阅读 · 0 评论 -
java 原码、反码、补码计算 以及 取反(~)运算
1. 原码、反码、补码:(1)在Java中,所有数据的表示方式都是以补码形式来表示(2)正数:原码、反码、补码相同(3)负数:符号位为1,其余各位是对原码取反,然后整个数加1(4)~按位取反(反码加1称为补码。)步骤就是先求出这个数(因为java存的数是补码)的原码,然后对原码取反得到X,这个X就是我们要求的那个数的补码2. 取反(~)运算(1)n=37 ,二进制数就...原创 2016-10-18 16:51:34 · 20937 阅读 · 7 评论 -
Java类加载问题:变量初始化顺序
昨天看到一个简单的问题:父类和子类有同样名称的私有变量,在父类构造器中执行打印变量的方法,同时在子类中覆盖这个方法,这时候打印的变量值不是父类和子类的变量值而是变量的默认初始化值。public class BaseClass { private int num = 1; public BaseClass() { this.print(); }原创 2016-03-04 10:46:19 · 572 阅读 · 0 评论 -
Java的notify,wait,notifyAll方法使用介绍
wait, notify, notyfyAll 都是Object里面的方法,每个Object其实自身都带有一个隐形锁。一般wait和notify都是要配合synchronized一起使用的假设线程A执行一下代码,首先获得test的锁,然后test调用wait方法(在线程A中调用wait方法的时候,线程A会释放test的锁)原创 2017-08-17 22:56:14 · 635 阅读 · 0 评论 -
为源码写注释: ReentrantLock
ReentrantLock: 先简单讲下ReentrantLock里面的成员变量。(1)int state:用于分辨当前锁是否已经被锁上 1)state=0: 未上锁 2)state>=1:已上锁,并且state>=1时记录的时重入锁的次数(2)Node head:引用始终指向获得了锁的节点,它不会被取消。acquire操作成功就表示获得了锁,acquire过程中如果中断,那么acquire就原创 2017-08-07 23:09:40 · 365 阅读 · 0 评论 -
Java类加载机制:双亲委派机制,还是应该叫做“父委派模型”?
阅读这篇文章,你会了解到:1.上面是类加载器2.为什么应该叫做“父委派模型”,而不是“双亲委派机制”3.在JNDI中,“父委派模型”是怎么被违背的4.不只是JNDI,还有TOMCAT的类加载器模型是怎样的,他们有无违背“父委派模型”?一.什么是类加载器讲“双亲委派机制”前,要先要讲一讲类和类加载器的关系1.类(Class)我们在编写代码时,创建的每个“*.java”文件都可以认...原创 2019-05-01 15:53:10 · 4287 阅读 · 7 评论