![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 93
shanchahua123456
这个作者很懒,什么都没留下…
展开
-
Tomcat 原理
https://blog.csdn.net/ly823260355/article/details/104181278原创 2020-06-25 11:59:35 · 140 阅读 · 0 评论 -
微服务间数据跨库关联
在微服务环境下,不同服务之间会出现数据库独立情况,不可避免的需要跨库关联JOIN。例如:订单服务、商品服务、用户服务等,在独立分库后分别对应订单数据库、商品数据库、用户数据库。在查询订单是需要携带用户信息+商品信息,就出现了跨库join的使用场景。解决方案:1、数据冗余:在订单数据库订单表中,保存商品和用户完整信息。优点:sql简单且性能高。缺点:空间浪费且商品信息更新需要同步。2、S...原创 2020-05-07 17:17:33 · 4936 阅读 · 0 评论 -
Netty IO随记
https://www.cnblogs.com/imstudy/p/9908791.html线程模型Netty Reactor 模型,介绍服务端 Netty 的工作架构图:1)初始化创建 2 个 NioEventLoopGroup:其中 boosGroup 用于 Accetpt 连接建立事件并分发请求,workerGroup 用于处理 I/O 读写事件和业务逻辑。2)基于 S...转载 2020-04-23 10:33:11 · 192 阅读 · 0 评论 -
海量大数据处理
https://blog.csdn.net/v_july_v/article/details/7382693转载 2020-04-02 13:37:40 · 176 阅读 · 0 评论 -
JVM 对象内存分配流程
1. Java对象分配流程 2. 栈上分配 2.1 本质:Java虚拟机提供的一项优化技术 2.2 基本思想: 将线程私有的对象打散分配在栈上 2.3 优点: 2.3.1 可以在函数调用结束后自行销毁对象,不需要垃圾回收器的介入,有效避免垃圾回收带来的负面影响 2.3.2 栈上分配速度快,提高系统性能 2.4 局...转载 2020-03-28 16:09:03 · 763 阅读 · 0 评论 -
Seata 分布式事务 随记
官网AT模式:https://github.com/seata/seata/wiki/AT-Mode流程解释:http://seata.io/zh-cn/docs/overview/what-is-seata.htmlAT流程图解https://www.cnblogs.com/smileIce/p/11200829.html注意1、表必须有主键。2、截止到0.9版不支持...原创 2019-10-28 17:01:39 · 573 阅读 · 0 评论 -
JAVA 类加载 随记
视频: https://www.bilibili.com/video/av295028771 JVM把Class加载到内存当中,检验解析初始化。默认使用的懒加载方式。以下步骤是并行执行 可以把加载源看成JAVA配置文件。解析:符号引用: 类名,基本类型直接引用:内存地址初始化:1 类初始化是线程安全的,多个线程同时触发类初始化时,只有...原创 2019-02-01 17:32:38 · 164 阅读 · 0 评论 -
算法 递归与回溯
递归递归思想1 正向思想:深度优先搜索,向下一级分支执行同样的操作,并等待从此分支返回后,继续深入操作其它分支。2 逆向思想:将一个复杂问题分解成一个/多个简单问题递推,先求简单问题在合并结果,是不是有微积分的感觉哈哈。 例如:归并排序;斐波那契数列f(n)=f(n-1)+1,求f(n)需要先求f(n-1),。递归特点递归是利用方法栈帧后进先出的特点。先进入的方法栈帧等...原创 2018-12-17 22:37:49 · 215 阅读 · 0 评论 -
JAVA8 ConcurrentHashMap 源码分析
参考文章:http://www.cnblogs.com/huaizuo/archive/2016/04/20/5413069.htmlhttps://www.cnblogs.com/leesf456/p/5453341.htmlhttps://www.toutiao.com/a6644172932811588103/?tt_from=weixin&utm_campaign=cl...原创 2019-01-09 14:12:53 · 260 阅读 · 0 评论 -
IDEA 插件与配置
注册http://idea.lanyus.com/按说明修改hosts文件,复制注册码到IDEA即可使用。同项目/模块运行多个实例Run/Debug Configurations -> Single instance only功能1 方法抽取:当一个方法代码很长影响可读性,或其中一部分需要复用时,可以选中其中一段代码,将其抽取成一个独立方法。选中代码段,右键-&...原创 2020-09-08 23:35:27 · 445 阅读 · 0 评论 -
Guava库
Guava是Google提供的JAVA拓展类库,其对JDK原生类库进行了拓展和优化。实现了很多实用的新功能和数据结构,且优化了很多JDK已有方法,大大提高了执行效率。一些相同功能,在相同情况对比JDK8的原生方法,都有明显的速度优势。一 集合容器1.1 集合常用处理集合的相应处理主要由Guava提供的Lists,Sets,Maps,Collections2等工具类中静态方法实现。1...原创 2019-01-17 15:12:54 · 383 阅读 · 0 评论 -
JAVA 容器集合+数据结构 模拟SQL实现交并差统计等操作
JAVA代码同样可以通过合理运用数据结构和算法的特点实现SQL中的大部分操作,例如:JOIN ON ,WHERE ,UNION ,IN/NOT IN ,GROUPBY ,TOP ,LIMIT 等等大数据量的 去重、交并差.....等集合操作,都可以适当借助中间容器实现,并且合理运用不同的数据结构的特点做中间容器,可以大大提高效率优化时间复杂度。尽可能避免循环嵌套的遍历,造成倍数级别(n行x ...原创 2019-01-17 09:57:32 · 573 阅读 · 0 评论 -
Github项目NettyRpc 阅读(Netty+同/异步通讯+多线程+AQS+CAS+volatile)
Github项目:https://github.com/luxiaoxun/NettyRpcFork:https://github.com/sw008/NettyRpc此项目很适合学习多线程和NettyRPC调用流程大体思路:整个异步/同步通讯流程,适用于大多数同步/异步socket通讯场景。可以在此基础上拓展实现例如异步回调等多种使用功能。整个异步请求+响应过程,通过Concu...原创 2019-01-06 17:19:23 · 308 阅读 · 0 评论 -
分布式事务解决方案:TCC与最终一致
之前总结的一些分布式事务文章开源项目TCC-Transaction:https://blog.csdn.net/shanchahua123456/article/details/86767156最终一致性模型:https://blog.csdn.net/shanchahua123456/article/details/84950628https://blog.csdn.net/shan...转载 2019-02-10 21:23:29 · 2252 阅读 · 0 评论 -
Spring 常用注解
1.声明bean的注解@Component 组件,没有明确的角色@Service 在业务逻辑层使用(service层)@Repository 在数据访问层使用(dao层)@Controller 在展现层使用,控制器的声明(C)2.注入bean的注解@Autowired:由Spring提供@Inject:由JSR-330提供@Resource:由JSR-250提供...转载 2018-12-16 16:35:18 · 85 阅读 · 0 评论 -
JAVA 容器集合+数据结构 处理大数据
原文:https://blog.csdn.net/lzc4869/article/details/80909910场景一海量日志数据,提取出某日访问百度次数最多的那个IP首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率...转载 2019-01-17 09:26:30 · 455 阅读 · 0 评论 -
TCC-Transaction 分布式事务
项目地址:https://github.com/changmingxie/tcc-transactionhttps://blog.csdn.net/github_38592071/article/details/79576454https://www.liangzl.com/get-article-detail-525.htmlhttp://www.tianshouzhi.com/ap...原创 2019-02-10 14:33:40 · 491 阅读 · 0 评论 -
JVM 变量存储位置
1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:方法执行时创建方法栈帧,存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆:存放所有new出来的对象。4. 静态域(方法区):存放静态成员(static定义的)5. 常量池(方法区):存放字符串常量和基本类型常量(p...原创 2018-03-18 22:20:12 · 4922 阅读 · 3 评论 -
SpringAop注解源码
分析贴https://blog.csdn.net/jy02268879/article/details/88409710https://www.cnblogs.com/nullllun/p/9222627.html概述在Bean初始化阶段,Spring为Bean生成代理对象,一个bean对象对应一个代理对象,代理对象的advisors:List中保存所有扫描到的和bean.c...原创 2019-09-07 15:17:40 · 469 阅读 · 0 评论 -
JODA-TIME
文档:https://www.cnblogs.com/wihainan/p/5999771.htmlAPI初始化DateTime time = new DateTime();// 获得当前时间DateTime dateTime =newDateTime(2000,1,1,0,0,0,0);// 获得指定时间DateTime dateTime1 = DateTime...转载 2019-05-10 10:24:17 · 117 阅读 · 0 评论 -
JAVA 算法 分配算法
收集一些有趣的分配算法思路https://blog.csdn.net/u010466329/article/details/78672553https://blog.csdn.net/u010900754/article/details/84452036https://blog.csdn.net/qq_24598601/article/details/83928514https:/...转载 2019-05-07 14:49:02 · 2457 阅读 · 0 评论 -
HashMap中的并发resize出现死链
死链主要出现在并发执行resize()方法中的转移方法中,假设两个线程同时扩容,都生成自己的局部变量newTable[],并开始转移当前table[]元素。此时虽然newTable是局部变量线程独立的,但是table以及其中的Entry是线程共享的。newTable是局部变量,但是原table上的Entry都是共享的。扩容转移节点时是把原链表节点倒序放入新table。例如:原Table...原创 2019-04-24 21:11:55 · 2052 阅读 · 0 评论 -
JAVA ThreadPoolExecutor线程池
部分资料来自网络https://www.cnblogs.com/fixzd/p/9253203.htmlhttps://blog.csdn.net/qq_30572275/article/details/80543921设计ThreadPoolExecutor中存在内部类Worker,线程池通过HashSet<Worker>保存这些Worker对象。Worker...原创 2019-04-16 10:39:41 · 241 阅读 · 0 评论 -
Bio Nio
IO通讯时操作系统会现将IO数据拷贝到内核内存中存储,然后再拷贝到应用程序的内存。这个过程也存在一定时间消耗,且当Java程序在执行IO操作时除了会用到JVM内存外,还会用到操作系统直接内存。不关闭链接这些内存都不会释放。Bio阻塞IO,在accept和IO读写时当前线程阻塞。Socket clientScoket=server.accept(); //阻塞等待客户端Socke...原创 2019-01-29 22:17:06 · 119 阅读 · 0 评论 -
JAVA 代码安全规范
申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%84%E8%8C%83%E6%96%87%E6%A1%A3/2018-08-17-SDL-3-java%E5%AE%89%E5%85%A8%E7%BC%96%E7%A0%81%E8%A7%84%E8%8...转载 2018-12-16 16:18:14 · 2275 阅读 · 1 评论 -
JAVA 算法小技巧
原贴:https://blog.csdn.net/m0_37907797/article/details/849604021. 巧用数组下标数组的下标是一个隐含的很有用的数组,特别是在统计一些数字,或者判断一些整型数是否出现过的时候。例如,给你一串字母,让你判断这些字母出现的次数时,我们就可以把这些字母作为下标,在遍历的时候,如果字母a遍历到,则arr[a]就可以加1了,即 arr[a]++...转载 2018-12-14 10:58:06 · 302 阅读 · 0 评论 -
SpringBoot 随记
服务压力向前放1 浏览器缓存 2 nginx缓存 3 服务本地缓存 4redis缓存 5 数据库注意带宽控制:500k的文件瞬时200的请求就能填满100M的带宽配置文件注意结尾不要有多余的空字符或空格,注意:和= 不要错通过配置文件配置Servlet容器统一JSON返回格式统一的返回格式更容易做前后端交互。包含:是否成功+返回码+信息+返回体value{}...原创 2018-07-01 21:49:55 · 1088 阅读 · 1 评论 -
java 接口演变
原文 https://blog.csdn.net/tracydragonlxy/article/details/78082600Java7中的接口Java8中的接口Java9中的接口在接口中定义私有方法为什么我们需要在接口中使用私有方法Java7中的接口静态常量(作用域public final static,可以不写)抽象方法(作用域public,可以不写)我们不能在接口中提供方法实现。如果我们要...转载 2018-04-03 21:22:03 · 216 阅读 · 0 评论 -
JVM 老年代对象来源
一般情况是四种,但是尤其以第一种来源最多1.新生代对象每经历依次minor gc,年龄会加一,当达到年龄阀值会直接进入老年代。阀值大小一般为152.Survivor空间中年龄所有对象大小的总和大于survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,而无需等到年龄阀值3.大对象直接进入老年代4.新生代复制算法需要一个survivor区进行轮换备份,如果出现大量对象在minor...原创 2018-03-21 00:25:27 · 892 阅读 · 0 评论 -
触发JVM进行Full GC的情况及应对策略
本文参考:http://blog.csdn.net/chenleixing/article/details/46706039 1.调用System.gc2.老年代空间不足3、永生区空间不足4、CMS GC时出现promotion failed和concurrent mode failure5、统计得到的Minor GC晋升到旧生代的平均大小大于老年代的剩余空间6、堆中分配很大的对象...转载 2018-03-21 00:14:52 · 151 阅读 · 0 评论 -
Java NIO SocketChannel+Buffer+Selector 详解(含多人聊天室实例)
一、Java NIO 的核心组件Java NIO的核心组件包括:Channel(通道),Buffer(缓冲区),Selector(选择器),其中Channel和Buffer比较好理解简单来说NIO是面向通道和缓冲区的,意思就是:数据总是从通道中读到buffer缓冲区内,或者从buffer写入到通道中。关于Channel 和 Buffer的详细讲解请看:Java NIO 教程二、J...转载 2018-03-13 20:21:40 · 2334 阅读 · 0 评论 -
JAVA 重入锁 synchronized+ReentrantLock
1重入锁:线程重复获得已经持有的锁,锁有一个"持有计数器"跟踪锁的嵌套2 锁和条件的作用 锁:用来保护代码片段,任何时候同一个对象只能有一个线程执行被某一个锁保护的代码 锁:管理试图进入被保护代码片段的线程,同一对象的一个锁在同一时间只能被一个线程持有 锁:可以拥有多个不同的条件对象 条件对象:管理已经持有锁(已进入保护代码片段),但是不满足某个条件不能继续的线程,使其暂时放弃锁...原创 2018-03-19 21:06:17 · 163 阅读 · 0 评论 -
NIO+SocketChannel+Buffer+Selector 多路复用
原文 点击打开链接现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。再者,现在互联网的面试中上点level的都会涉及一下NIO或者AIO的问题(AIO下次再讲述,本篇主要讲述NIO),掌握好NIO也能帮助你获得一份较好的offer。 驱使博主写这篇文章的关键是网上关于N...转载 2018-03-12 21:25:50 · 388 阅读 · 0 评论 -
Eclipse+sts 搭建ssm环境/使用 随记
1Eclipse安装 sts插件 (spring tool suite) 可以在Eclipse市场中安装:Eclipse->Help->Eclipse Marketplact 或是Spring 官网下载 安装后即可直接新建Spring/MVC 项目,以集成Maven2 在pom.xml中添加/修改Maven依赖 修改JDK配置:下面...原创 2018-03-05 22:40:07 · 1724 阅读 · 0 评论 -
JAVA AtomicRefence 原子引用CAS
1AtomicRefence的CAS操作只比较引用变量的引用是否发生变化,若引用没变则设置为新的引用。CAS操作不关心引用的对象的属性变化,只关心引用变化,因为CAS操作用"=="比较原值CAS思想流程: now=get()当前值 --> 计算处理 --> CAS比较now? 交换 : 失败(原子完成)例如:public class AtomicRefence测试 ...原创 2018-03-17 13:37:07 · 427 阅读 · 0 评论 -
CountDownLatch 倒计时门栓用例
import java.util.concurrent.CountDownLatch;class Driver { void main() throws InterruptedException { CountDownLatch startSignal = new CountDownLatch(1); CountDownLatch doneSignal = n...原创 2018-03-10 12:08:08 · 240 阅读 · 0 评论 -
JAVA ThreadLocal<T>
ThreadLocal:线程本地变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。适用:1 需要各个线程间独立的变量,2 同线程下多方法传递的变量(解决某些方法无法相互传参)1ThreadLocal适合解决共享/单例对象 的成员变量,在多线程下保持各个线程独立性2 类的静态ThreadLocal,注意同线程变量覆盖问题3T...原创 2018-03-06 22:20:49 · 227 阅读 · 0 评论 -
JAVA 线程安全三要素
(转载)1 . 原子性(Atomicity):Java中,对基本数据类型的读取和赋值操作是原子性操作,所谓原子性操作就是指这些操作是不可中断的,要做一定做完,要么就没有执行。比如:i = 2; //原子j = i; //非原子 (1 读i,2 赋值j)i++; //非原子 (1 读i,2 +1 ,3 赋值i)i = i + 1; //非原子 (1 读i,2 +1 ,3 赋值i)上面4...原创 2018-03-06 21:15:11 · 2316 阅读 · 0 评论 -
JVM 调优/问题排查 浅谈
参考:https://www.cnblogs.com/xingzc/p/5756119.htmlhttps://www.cnblogs.com/yang-hao/p/5939487.htmlhttps://blog.csdn.net/chenjianandiyi/article/details/52442021https://www.bilibili.com/video/av52674...原创 2018-08-15 22:44:31 · 1125 阅读 · 0 评论 -
接口重名方法
实现类要满足方法重载的基本原则:1 方法名相同 2 参数列表不同两个接口中抽象方法重名:1 参数列表+返回值 都相同:实现类只要实现一次此方法即可2 参数列表相同+返回值不同:实现类无法直接实现两个方法(IDE报错),因为不满足方法重载原则3 参数列表不相同:实现类可以分别实现两个方法,可以方法重载 两个接口中默认方法重名:则IDE会提示重写只能其中一个接口的方法,重写...原创 2018-09-16 12:23:49 · 1017 阅读 · 0 评论