- 博客(18)
- 资源 (29)
- 收藏
- 关注
原创 一致性hash算法实现数据库分库操作
关于一致性hash原理请参看https://liuhuiyao.blog.csdn.net/article/details/106523561一致性hash的原理,是构造一个hash环,设置X个节点,节点按从小到大排序,如果此时要值A映射到hash环,则找到大于A的第一个hash环节点即可。如此,就可以动态增加删除hash环上的节点。只有少部分的映射关系会改变。但是有个问题就是hash环的节点分布如何保证均衡。可以使用虚拟节点。模拟基于一致性Hash分库代码import j..
2020-07-28 12:40:11 938
原创 常见的几种jvm问题排查
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jstack和内存信息,然后重启系统,尽快保证系统的可用性。这种情况可能的原因主要有两种:代码中某个位置读取数据量较大,导致系统内存
2020-07-28 12:04:38 669
原创 bitmap 算法的实现 与作用
问题引入有一个无序有界int数组{1,2,5,7},初步估计占用内存44=16字节,因为只有4个数,很容易,可以很快找到需要的数。但是假如有10亿个这样的数呢,10亿个不重复并且没有排过序的无符号的int整数,给出一个整数,找出给定的某个数,你该如何操作?需求分析:Int类型在Java中的存储占用4个Byte,32Bit。10亿4/(102410241024)=3.72G左右。如果这样的一个大的数据做查找和排序,那估计内存也崩溃了,有人说,这些数据可以不用一次性加载,那就是要存盘了,存盘必然消耗IO
2020-07-28 12:00:50 611
原创 最少使用LRU算法实现
原理使用HashMap和双向链表实现每次新增数据时加到链表尾部,每次查询时移动到链表尾部。头部是最少使用的,尾部是最近使用的。数据满后,删除头部的数据。代码实现import java.util.HashMap;/** * 简单LRU实现,当新增数据时,如果链表长度大于预设值的最大值,则删除最少使用的。 * 链表尾部最近或者最多使用的数据,而头部则是最少使用数据 * @Description: * @author: lhy * @date: 20...
2020-07-28 11:50:47 201
原创 简单模拟实现 spring AOP Aspect的动态代理
package e;import java.lang.annotation.Annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import java.lang.reflect.InvocationH...
2020-07-23 18:58:25 264
转载 springboot的初始化启动过程
目录:构造SpringApplication实例对象 SpringApplication run方法核心逻辑 Environment简介 application配置文件加载过程 创建ApplicationContext ioc容器刷新前prepareContext ioc容器refresh过程(上篇) ioc容器refresh过程(下篇) ioc依赖注入 springboot自动配置机制 aop切面处理过程 springboot事务自动配置 自动配置springboot mvc
2020-07-18 12:15:51 907
转载 jdk1.8 1.7 ConcurrentHashMap HashMap 实现对比
前言理解HashMap和ConcurrentHashMap的重点在于:(1)理解HashMap的数据结构的设计和实现思路(2)在(1)的基础上,理解ConcurrentHashMap的并发安全的设计和实现思路前面的文章已经介绍过Map结构的底层实现,这里我们重点放在其扩容方法,这里分别对JDK7和JDK8版本的HashMap+ConcurrentHashMap来分析:JDK7的HashMap扩容这个版本的HashMap数据结构还是数组+链表的方式,扩容方法如下:...
2020-07-15 09:28:42 383
原创 springboot run方法初始化,spring 初始化,以及bean的生命周期。mvc的初始化以及生命周期
注意:l懒加载的bean初始化 只是创建BeanDefinition。实例化在BeanFactory.getBean()的时候才会产生beanspringboot run方法初始化主要根据main方法和自动配置文件META-INF/spring.factories 中的相关配置类进行自动化化加载初始化等操作。注册监事件听器。初始化容器上下文Context。解析@ComponentScan扫描Bean定义生成BeanDefinition、BeanDefinitionRegistry .
2020-07-15 09:28:26 1023
原创 Spring AOP 原理
总结基于AspectJ注解的 @Before,@After....,基于原生的,基于org.aopalliance.intercept.MethodInterceptor的,三种方式最终的实现原理都一样,都是通过创建bean的时候调用各自的BeanPostProcessor的后置处理器处理返回代理对象。只是继承org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator(实现了BeanPostProcessor接口)改写了.
2020-07-15 09:28:09 152
转载 springboot-admin+spring-boot-actuator 实现运行状态监控
注意本文:springboot2.1.6版本亲测没问题,如果版本不匹配会出错spring-boot-actuator-client用于向 actuator 的server 暴露自己的基础信息和运行,包括线程数,堆栈,等等。。。spring-boot-admin 用于界面展示这些信息。一个server 多个client1.Spring Boot Admin 简介官方原话:codecentric’s Spring Boot Admin is a community project to ma.
2020-07-15 09:27:55 1921 1
原创 spring mvc 初始化,生命周期 ,handlerMapping和handlerAddapter
mvc的初始化在分析DispatcherServlet之前,我们先看下DispatcherServlet的继承关系springmvc是主流的MVC框架,我先从使用开始一步一步解析其初始化过程,springmvc的核心是DispatcherServlet,它是前端控制器,负责拦截客户端发过来的请求,然后解析请求进行分发。DispatcherServlet是基于Servlet的,所以使用springmvc先在web.xml中配置DispatcherServlet个人认为初始化分为两部...
2020-07-15 09:27:37 287
原创 关于如何接管spring的 httpsession 的问题
正常的实现是通过filter过滤器 重新封装request和response来实现,并且在request的封装类中重写getSession方法,spring-session无缝替换应用服务器的request大概原理是:1.自定义个Filter,实现doFilter方法2.继承 HttpServletRequestWrapper 、HttpServletResponseWrapper 类,重写getSession等相关方法(在这些方法里调用相关的 session存储容器操作类)。3.在 第一步...
2020-07-15 09:27:00 346
原创 关于nginx负载均衡 配置 websocket,与web服务 集群的 总结
由于websocket底层是tcp长连接,所以一旦网络断开 就会 导致会话关闭。本次测试环境在一台机器上 启动两个 相同(端口不同)的websocket的server,一个端口8090,一个端口8091nginx 分别进行两种负载均衡测试(1)使用基于ip-hash在使用nginx的iphash 一台Websocket Server挂掉后,对应的前端Ws会提示断开,然后即使再次点击重新连接后台websocketServer 也无法连接上,因为 iphash 策略根据ip计算出的值是固..
2020-07-15 09:26:00 3653
原创 关于java的classLoader,与类加载过程
类加载过程一、类加载机制JVM把class文件加载到内存,并对数据进行校验、准备、解析、初始化,最终形成JVM可以直接使用的Java类型的过程。‘类加载全过程1、加载将class字节码文件加载到内存中,并将这些数据转换成方法区中的运行时数据(静态变量、静态代码块、常量池等),在堆中生成一个Class类对象代表这个类(反射原理),作为方法区类数据的访问入口。类的加载原理2、链接将Java类的二进制代码合并到JVM的运行状态之中。• 验证确保加载的类信息符合JVM规范,
2020-07-15 09:25:28 302
原创 关于java的线程池 ThreadPoolExecutor 如何做到线程复用的 源码解析
自己总结:重要的类java.util.concurrent.ThreadPoolExecutorjava.util.concurrent.ThreadPoolExecutor.Worker重要的属性//线程workerprivate final HashSet<Worker> workers = new HashSet<Worker>();//阻塞的任务队列private final BlockingQueue<Runnable> ..
2020-07-15 09:25:02 438
转载 CountDownLatch、CyclicBarrier、Semaphore源码解析
CountDownLatch1 前言CountDownLatch是一种同步辅助工具类,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止。(源码分析基于JDK1.8)CountDownLatch需要用给定的闩锁计数count初始化。await方法使当前线程阻塞(每执行一次countDown方法就将闩锁计数减1),直到闩锁计数达到零时(所有因此阻塞等待的线程都)才会被唤醒。CountDownLatch是一次性使用的同步工具,闩锁计数无法重置,如果需要重置计数,可能使用CyclicBar.
2020-07-15 09:24:51 435
转载 java锁 AQS、ReentrantLock、ReentrantReadWriteLock 源码分析
一、AQSAbstractQueuedSynchronizer(简称AQS),队列同步器,是用来构建锁或者其他同步组建的基础框架。该类主要包括:1、模式,分为共享和独占。2、volatile intstate,用来表示锁的状态。3、FIFO双向队列,用来维护等待获取锁的线程。AQS部分代码及说明如下:public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer.
2020-07-15 09:24:37 255
原创 关于javac 与 java,编译 运行的包路径问题
前言文件目录树注意着几个java文件都没又定义包名,但是他们都不在统一路径的问题Test.javapublic class Test{ public static void main(String[] args){ try{ Class c = Class.forName(args[0]); A w = (A)c.newInstance(); w.go("aaaa"); } catch(Exception e){ e.printStackTra.
2020-07-15 09:24:15 923
图像标注-labelImg_windows_v1.7
2020-10-25
nlp工具 word2vec nltk textblob crf++ 机器人 中文翻译 繁体转简体 关键词 主题 命名体识别 分词 聚类 词性标注 词向量
2018-07-20
CRF++ 0.58.tar.gz源文件for linux和.zip for windows
2017-01-18
jasperReports spring mvc 整合代码
2016-09-02
俄罗斯方块
2014-01-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人