java
文章平均质量分 55
K-Darker
1、每天读书;2、学习新的语言;3、战胜你的恐惧;4、升级你的技能;5、承认自己的缺点;6、向你佩服的人学习
展开
-
Mybatis支持底层测试数据隔离
前言本文主要是讲通过 MyBaits 的 Interceptor 的拓展点进行对 MyBatis 执行 SQL 之前做一个逻辑拦截实现自定义逻辑的插入执行。适合场景:1. 比如限制数据库查询最大访问条数;2. 限制登录用户只能访问当前机构数据。定义是否开启注解定义是否开启注解, 主要做的一件事情就是是否添加 SQL 拦截器。 1 2 3 4 5 6 7 8 9 10 11 12 13原创 2022-03-09 11:08:06 · 247 阅读 · 0 评论 -
SpringCloud之熔断 --(Hystrix)
Hystrix(熔断)Hystrix介绍服务雪崩多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C有调用其他的微服务,这就是所谓的”扇出”,如扇出的链路上某个微服务的调用响应式过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统雪崩,所谓的”雪崩效应”这里的雪崩效应:在redis里面也是存在的,缓存穿透等,在大并发的情况下保证服务的一个...原创 2019-06-21 18:48:12 · 172 阅读 · 0 评论 -
Java的锁深入理解
Java的锁深入理解java线程通信介绍几种重要的锁实现方式:synchronized、ReentrantLock、ReentrantReadWriteLock。对象锁的内存结构以及各种转换。Java的API层面提供锁的源码分析(单独分析)。这一节介线程的等待和唤醒问题被弃用的supend和resumesupend/resume是在线程(Thread类中的)所以和锁是没关系的...原创 2019-06-10 19:45:56 · 188 阅读 · 0 评论 -
socket keepalive理解
java socket编程中有个keepalive选项,看到这个选项经常会误解为长连接,不设置则为短连接,实则不然。socket连接建立之后,只要双方均未主动关闭连接,那这个连接就是会一直保持的,就是持久的连接。keepalive只是为了防止连接的双方发生意外而通知不到对方,导致一方还持有连接,占用资源。其实这个选项的意思是TCP连接空闲时是否需要向对方发送探测包,实际上是依赖于底层的TCP模...转载 2019-06-20 10:34:09 · 790 阅读 · 1 评论 -
手写Spring(AOP)
Spring(AOP)AOP 介绍AOP(Aspect Oriented Programming) 面向切面编程。IOC/DI:AOP的核心是IOC必须在容器里面管理。采用动态代理对类对象进行增强。为什么需要AOP需要原因在不改变代码情况下对方法进行增强在类的方法的层面进行增强 ,首先思考的是在哪里进行对bean的增强在类字节码上增强 带有入侵性在对象上动态代理增强 ...原创 2019-06-03 19:57:39 · 493 阅读 · 0 评论 -
Java的线程通信基础
Java的线程通信基础java线程通信介绍java通信一般是会采用共享变量。使用共享变量就会有安全问题,就会产生锁(syncronized)。使用了锁就会有线程的等待和唤醒问题。这一节介线程的等待和唤醒问题被弃用的supend和resumesupend/resume是在线程(Thread类中的)所以和锁是没关系的supend/resume 是解决不了变量的共享问题所以就会引入...原创 2019-06-09 21:25:08 · 107 阅读 · 0 评论 -
SpringCloud之注册中心 --(Eureka)
微服务SpringCloud介绍Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, in...原创 2019-06-14 17:00:19 · 195 阅读 · 0 评论 -
手写Spring(IOC/DI)
Spring(IOC/DI )IOC/DI 介绍IOC:Inversion Of Control (创建对象有自己变成了容器)。DI: Dependcy injection (注入的参数包含构造参数和属性)。IOC/DI 是核心,分析为什么需要IOC和DI,怎么去实现他们。为什么需要IOC/DI需要原因我们开发应用有了三层架构(Controller Service Dao)首先...原创 2019-06-02 16:38:35 · 314 阅读 · 0 评论 -
Java的分布式事务(JTA和XA)
关于JTA事务和XA事务的介绍何为分布式事务一个事务包含多个操作,多个操作操作了多个数据源,这样的事务称为分布式事务。案例为什么不能简单的借助数据源的本地事务用数据源本地事务代码案例Con1 = db1.getConn..;Con2 = db2.getConn..;Try{con1.insert….con2.update….con1.commit;con2.commit;...原创 2019-06-13 16:45:25 · 8948 阅读 · 7 评论 -
Java中的数组深入学习
Java数组介绍数组介绍是一种连续的数据结构,且不可变的(计算中)。数组在java中不是基本数据结构,是一种对象。Java的数组封装ArrayList,实现动态扩容。数组 特性数组的为什么查找的时间复杂度为O(1)首先它是连续的内存空间,定位的时候是通过首地址加上所谓的偏移量(数据size*offset)数组是一个对象,继承了Object里面的属性重写了clone方法 和 提...原创 2019-06-02 08:47:40 · 186 阅读 · 0 评论 -
手写Spring的MVC
Spring的MVCMVC 概念MVC是一种软件设计典范。将业务逻辑,界面显示,和模型层分开。数据,控制和视图。MVC的流程流程MVC的请求流程DispatchServlet 是核心类用于分发请求的,需要将我们MVC的相关的类注入到我们的Bean工厂中会有一个请求分派和结果渲染的操作总图:分析一下:首先SpringMVC的会逐渐被SpringBoot取代,Spring...原创 2019-06-06 19:05:58 · 162 阅读 · 0 评论 -
手写Spring(配置)
Spring(配置)为啥提供配置配置管理bean更加灵活,不需要修改代码。选择什么样的配置(xml – 配置复杂 或者 注解 – 带有入侵性) 所以都需要支持。配置是属于那一阶段的,什么需要在配置体现。Spring配置的流程思路首先我们先看Bean的初始化流程(通过配置的方式)我们的配置目的是创建bean的定义对象我们先定义一些接口创建bean的接口规范和bean隔离开...原创 2019-06-04 21:51:46 · 286 阅读 · 1 评论 -
Java的Lock实现类介绍
Java的Lock实现类介绍Java的Lock实现类介绍所的实现类:AQS(AbstractQueuedSynchronizer)、ReentrantLock、ReentrantReadWriteLock,CountDownLatch,Semphore。其他多线程协作的场景: CyclicBarrier。AQS源码解析。Lock类介绍Lock类相关介绍Lock重要的实现类:Re...原创 2019-06-11 15:22:10 · 7861 阅读 · 2 评论 -
SpringCloud之网关 --(Zuul)
Zuul 介绍This project provides a library for building an API Gateway on top of Spring MVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting co...原创 2019-06-29 16:06:27 · 355 阅读 · 0 评论 -
SpringCloud之声明式客户端 --(Fegin)源码分享
Fegin(声明式的web服务客户端)Fegin介绍Fegin是一个声明似的web服务客户端,它使得编写web服务客户端变得更加容易。使用Fegin创建一个接口并对它进行注解。它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageC...原创 2019-06-27 19:27:19 · 236 阅读 · 0 评论 -
领域驱动设计-- 界限上下文协作
限界上下文通信边界对协作的影响确定限界上下文之间的关系不能想当然,需得全面考虑参与到两个限界上下文协作的业务场景,然后在场景中识别二者之间产生依赖的原因,确定依赖的方向,进而确定集成点,需要注意的是,限界上下文的通信边界对于界定协作关系至为关键。限界上下文的通信边界分为进程内边界与进程间边界,这种通信边界会直接影响到我们对上下文映射模式的选择。例如,采用进程间边界,就需得考虑跨进程访问的成本,如...转载 2019-07-08 21:56:22 · 1091 阅读 · 0 评论 -
java源码解析--(ThreadLocal)
ThreadLocal介绍ThreadLocal,很多人都叫它做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那样每个线程可以访问自己内部的副本变量。这句话从表面上看起来理解正确,但实际上这种理解是不太正确的。多线程并发执行时,需要数据共享,因此才有了volatile变量解决 多线程间的数据可见性,...原创 2019-07-02 21:42:00 · 167 阅读 · 0 评论 -
SpringCloud之熔断 --(Hystrix)源码分析
Hystrix(熔断)动态的修改熔断配置背景:hystrix 熔断过程问题 和日志问题 需要熔断的场景 动态改变我们的配置参数 智能化其实本身的HystrixCommand 注解也是通过切面配置的,我们这边可以通过自定义注解动态加入@Aspect@Componentpublic class MyHystrixCommandAspect { public static Boole...原创 2019-06-26 19:38:17 · 711 阅读 · 1 评论 -
SpringCloud之声明式客户端 --(Fegin)
Fegin(声明式的web服务客户端)Fegin介绍Fegin是一个声明似的web服务客户端,它使得编写web服务客户端变得更加容易。使用Fegin创建一个接口并对它进行注解。它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring Web 默认使用了HttpMessageC...原创 2019-06-23 17:26:56 · 573 阅读 · 0 评论 -
SpringCloud网关和负载均衡整合
场景如果网关使用的是springcloud的话就直接使用,springcloud的方法直接整合不讨论如果采用了数据库或者zk为注册中心的话,当服务端注册的时候就是注册自己的ip地址那么负载均衡取到的ip是真实的服务端的ip,但是我们需要保证我们的请求都是要走网关的所以我们需要对我们的负载均衡的代码进行扩展为什么需要网关呢?我们的服务需要记过统一的鉴权或者过滤请求等,而我们的网关往往不是...原创 2019-07-01 19:26:28 · 1406 阅读 · 0 评论 -
SpringCloud之负载均衡 --(Ribbon)源码分析
Ribbon介绍Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一...原创 2019-06-26 08:46:18 · 261 阅读 · 0 评论 -
线程上下文类加载器(ClassLoader)
ClassLoaderClassLoader介绍ClassLoader 顾名思义就是类加载器,ClassLoader 作用:负责将 Class 加载到 JVM 中审查每个类由谁加载(父优先的等级加载机制)将 Class 字节码重新解析成 JVM 统一要求的对象格式思考问题:1.首先是正常的一个类是怎么加载到虚拟机的 2.自定义的ClassLoader怎么加载类和卸载类ClassL...原创 2019-06-17 20:59:59 · 771 阅读 · 0 评论 -
HashMap中的位运算
位运算的介绍位运算介绍按位或 | 特性: 只要有1的就是1:导致按位或的得到数总是是变大的按位与 & 特性: 全部为1的才是1:导致按位或的得到数总是是变小的异或 ^ 特性: 不同为1 相同为0 :生成的数的大小是均匀的 (长用于hash算法 加密 数值交换等)位移 : 左移 :<< 右移 >> 无符号右移 >>>Has...原创 2019-05-29 11:22:29 · 1898 阅读 · 0 评论 -
java队列
Queue介绍Queue介绍每种数据结构会定义一个操作该数据结构的接口(封装)PriorityQueue 实现了一个简单的优先队列。开放Comparator 比较器PriorityQueue 特性首先Queue定义了一系列的操作 boolean add(E e); boolean offer(E e); E remove(); E poll(); E pee...原创 2019-05-31 22:15:29 · 522 阅读 · 0 评论 -
Java线程池(ForkJoinPool)
Java的线程池Java的Lock实现类介绍Java7 提供了ForkJoinPool来支持将一个任务拆分成多个“小任务”并行计算,再把多个“小任务”的结果合并成总的计算结果。ForkJoinPool是ExecutorService的实现类,因此是一种特殊的线程池。ForkJoinPool主要用来使用分治法(Divide-and-Conquer Algorithm)来解决问题。。Fo...原创 2019-06-12 16:52:38 · 562 阅读 · 0 评论 -
Java 8 动态类型语言Lambda表达式实现原理分析
Java8支持动态语言,看到了很酷的Lambda表达式,对一直以静态类型语言自居的Java,让人看到了Java虚拟机可以支持动态语言的目标。[java] view plain copy print?import java.util.function.Consumer; public class Lambda { public static v转载 2017-07-24 08:57:54 · 506 阅读 · 0 评论 -
intellij 关闭自动保存和标志修改文件为星号
关闭自动保存首先,声明一点,intellij 默认是不自动编译的 ,这一点跟Eclipse不同。By default, IntelliJ IDEA doesn't automatically compile projects on saving. 另外,我们会发现intellij默认会自动保存,并且修改了文件也没有星号标注。 去掉默认保存, File—>settings—->转载 2017-07-31 13:23:43 · 266 阅读 · 0 评论 -
redis整合spring mybatis --缓存方案
一、Spring集成redis1.在resource目录下创建spring-redis.xml文件,内容如下:beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://ww转载 2017-06-08 18:23:23 · 406 阅读 · 0 评论 -
Java内部类原理分析(静态内部类和成员内部类)
测试类产生的Classjavap -verbose -p TestClass使用查看测试类会自己添加2个方法一个access$0和access$1这个是根据你内部类访问的成员如果只访问一个就自己产生一个访问多个就产生多个(why 注:名称看来是为了安全) 注:有写工具看不到这2个方法还是用javap才是原生。javap -verbose -p Tes原创 2017-05-10 16:17:33 · 365 阅读 · 0 评论 -
java实现不用加减乘除做2个数的加法
public class Solution { public int Add(int num1,int num2) { while (num2!=0) { int temp = num1^num2; num2 = (num1&num2) num1 = temp; }原创 2017-05-08 17:44:02 · 1401 阅读 · 0 评论 -
JAVA的i++和++i的本质区别
1.首先i++是先将i赋值在做加法 ++i是先做加法再赋值,现在是从字节码深入分析命令:javap -verbose Demo 解析class的命令常量池部分:常量存放和类全名存放元数据的存放( this main 版本)第一个i=i++i=1;操作数栈是1 局部变量表第一个是1iload_1 从局部变量表中加载第一个int类型的数到操作数栈中原创 2017-02-15 17:33:11 · 614 阅读 · 0 评论 -
JSP中的动态包含和静态包含的区别
JSP中有两种包含:静态包含:动态包含:它们有什么区别,都知道,JSP在WEB服务器中都要转换成一个Java文件,java文件再编译成一个class文件。当请求JSP页面的时候,实际上运行的是这个class文件。从这个方面来说:静态包含发生在:JSP---->java文件阶段。动态包含发生在:执行class文件阶段。动态加入。静态包含:只生成一个ja转载 2017-05-06 11:05:25 · 471 阅读 · 0 评论 -
原理解析try-catch-finally里面的return
代码 public int main(String[] args) { try { int a = 10; return 10; } catch (Exception e) { // TODO: handle exception原创 2017-05-06 10:33:42 · 405 阅读 · 0 评论 -
模拟微信红包算法
1.第一种(自己想的) money count 将money分成count份 在自己的count份里面随机选择/** * 随机红包(最后拆红包的在数组里面再随机选择) * @param money * @param count * @return * @see[类、类#方法、类#成员] */ public static d原创 2017-05-12 09:36:02 · 1032 阅读 · 0 评论 -
Intellij IDEA的快捷键使用
Fix doc comment 修改添加注释 alt+shift+jDelete Line 删除一行 contrl+ddubugF9 resume programe 恢复程序Alt+F10 show execution point 显示执行断点F8 Step Over 相当于eclipse的f6 跳到下原创 2017-07-28 17:01:36 · 299 阅读 · 0 评论 -
Java nio的一个严重BUG,导致cpu 100%
这个BUG会在Linux上导致cpu 100%,使得nio server/client不可用,具体的详情可以看这里http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6403933 。令人失望的是这个BUG直到jdk 6u4才解决,sun的拖沓让人难以相信。这个BUG在server端容易出现,因为server端有频繁地接入断开连接。转载 2017-07-25 09:17:37 · 7183 阅读 · 1 评论 -
深入剖析ThreadLocal实现原理以及内存泄漏问题
一、概述在2017京东校园招聘笔试题中遇到了描述ThreadLocal的实现原理和内存泄漏的问题,之前看过ThreadLocal的实现原理,但是网上有很多文章将的很乱,其中有很多文章将ThreadLocal与线程同步机制混为一谈,特别注意的是ThreadLocal与线程同步无关,并不是为了解决多线程共享变量问题! ThreadLocal官网解释: This class provi原创 2017-08-15 13:45:09 · 247 阅读 · 0 评论 -
阅读Spring源码
如何阅读Spring源码学习源码的思路为扩展 调优 : 掌握框架的工作流程和原理。提升自己的编程能力:学习他人的设计模式和思路。掌握设计方法和分析思路。学习源码的方法思路掌握问题域理论和核心概念:搞明白做什么,如何做从整体到部分找到入口,先理清主干流程,后细节多思考,多分析文档查看流程文档地址https://spring.io/ 官网https://githu...原创 2019-06-05 17:41:10 · 260 阅读 · 0 评论 -
LinkedHashMap介绍
LinkedHashMap介绍LinkedHashMap介绍继承了HashMapLinkedHashMap实现与HashMap的不同之处在于,LinkedHashMap维护着一个运行于所有条目的双向链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。底层使用哈希表与双向链表来保存所有元素。其基本操作与父类HashMap相似,它通过重写父类相关的方法,来实现自己的链...原创 2019-05-30 19:13:15 · 145 阅读 · 0 评论 -
领域模型-谈实体对象和值对象
对于实体Entity和值对象Value Object是领域驱动设计里面两个重要的模型对象。所以有必要对两者的关系和区别进行理解。以下部分内容直接引用自《领域驱动设计》一书相关内容。首先对于实体Entity,实体核心是用唯一的标识符来定义,而不是通过属性来定义。即即使属性完全相同也可能是两个不同的对象。同时实体本身有状态的,实体又演进的生命周期,实体本身会体现出相关的业务行为,业务行为会实体属性或状...转载 2018-05-07 11:52:11 · 2768 阅读 · 0 评论