
JAVA
嗨嗨人生
这个作者很懒,什么都没留下…
展开
-
一个注册中心的实现
我们先不考虑代码层面怎么实现,单说一个注册中心需要那些模块配合才能正常工作。最先想到,第一个模块,应该是服务地址表,作为系统最核心的存储模块,不仅涉及到大量的读写操作,还要设计高效的存储数据结构。常见的存储结构有哪些呢?树(前缀树,ES索引使用到) hasMap 红黑树(concurrentHashMap使用到) 跳跃表(可以快速的排序、检索) znode(zookeeper的默认实现)由于我们查询的维度比较多(按照服务的provider、consumer),所以这种情况使用一个...原创 2021-11-23 13:52:35 · 919 阅读 · 0 评论 -
程序员如何坚持学计算机英语
作为一名程序员,虽说每天都在和英语打交道,但是当看到一篇英语文档或者英语技术文章的时候还是比较头疼,理解他们的意思也只能是20%。尤其是使用google搜索的时候,很多问题解决办法都是英文的,还有一些国外比较有名的网站比如 stack overflow,上面也有很多学习的资源。怎样才能让自己顺利阅读这些技术文章呢?其实学英语和其他技能没什么太大区别,无论是你想在英语阅读、口语或写作方面提升自己,都需要进行长期的不间断的练习,坚持一段时间后(时间长短根据你自己的效率、每天用时、频率都有关系),你会发现自己的原创 2020-05-27 20:07:21 · 318 阅读 · 0 评论 -
如何做一个合格的Java面试官
先欠着原创 2019-11-13 19:37:20 · 830 阅读 · 0 评论 -
枚举实现单例模式的原理
单例的枚举实现在《Effective Java》中有提到,因为其功能完整、使用简洁、无偿地提供了序列化机制、在面对复杂的序列化或者反射攻击时仍然可以绝对防止多次实例化等优点,单元素的枚举类型被作者认为是实现Singleton的最佳方法。其实现非常简单,如下:publicenumSingleton{INSTANCE;privateSingleton(){}}...转载 2019-03-19 09:46:48 · 4112 阅读 · 0 评论 -
Transactional事务原理
这个是spring的声明式事务管理,基于AOP编程,是一种动态代理模式。 疑问 1.这个注解是怎么生效的? 配置了transactional注解后,spring容器初始化bean的时候,给他生成...原创 2019-03-26 17:40:31 · 502 阅读 · 0 评论 -
OOM内存溢出汇总
OOM内存溢出汇总http://hellojava.info/?p=319CASE1一.出现问题在前一段时间日常环境很不稳定,前端调用接口会出网络异常或服务不存在的异常。查询了服务器上的服务会有偶尔挂死的情况,服务器上的接口服务都不可用。于是我们对服务器上的状况进行了排查。二.排查问题的过程三.排查问题的步骤1.查看服务器大概情况首先最容易想到的是top命令,...转载 2019-03-27 10:42:55 · 7406 阅读 · 0 评论 -
当多线程并发遇到Actor
当多线程并发遇到Actor把需要加锁的对象都看作一个Actor,基于消息通知,顺序执行;但是这样qps下来了多线程并发的难题张大胖在做一个银行相关的项目,写了一个Account的类,用来表示一个用户的银行账号,根据银行的常规业务,自然要提供两个方法,存款(deposit)和取款(withdraw)。为了防止多线程并发时导致的数据不一致问题,张大胖给每个方法都加了synch...转载 2019-03-22 10:42:56 · 337 阅读 · 0 评论 -
漫谈并发编程:Actor模型
0x00 前言 文章结构 0x01 基本概念 什么是Actor模型 消息和信箱 0x02 Akka中的Actor Actor System Actor的层级 Actor的生命周期 0x03 例子 1. HelloWorld 简单版 2. HelloWorld 升级版 3. 伪分布式 WordCount 0x04 总结 参考0x00 前...转载 2019-03-22 10:33:29 · 805 阅读 · 0 评论 -
是Arthas找到热点代码
Arathas是阿里开源的一个JVM监控工具,可以实时在线排查jvm的问题,官网:https://github.com/alibaba/arthas现在遇到一个问题,想知道一个方法的每秒执行次数,java自带的那些命令都无法实现,所以找到了这个神器,我们来看看他是怎么用的。monitor/watch/trace - relatedAttention: commands here ar...原创 2019-03-25 16:15:55 · 977 阅读 · 0 评论 -
新生代垃圾回收频繁GC
下图可以看出,新对象基本都是直接分配在eden区域分析快速增加的对象借助于java自带的工具jmap -histo pid,可以快速多次获取虚拟机堆中当前各对象的实例数量以及占用内存大小。虽然获取内存dump文件也可以,但是耗时太长,另外机器可用内存太小,dump过程可能会有副作用。数据(jmap -histo pid): 1: 18541049 1...原创 2019-03-18 15:49:01 · 5293 阅读 · 0 评论 -
ThreadLocal的原理
注意ThreadLocalMap是使用弱引用来保存ThreadLocal对象1)ThreadLocal的介绍ThreadLocal是一个线程的内部存储类,可以在每个线程的内部存储数据,当某个数据的作用域应该对应线程的时候就应该使用它;而是当某个很复杂的逻辑下的对象传递,需要在线程这个作用域内贯穿其中,用ThreadLocal可以避免这个创建多个静态类。当你创建一个ThreadL...原创 2019-03-21 17:43:49 · 166 阅读 · 0 评论 -
内存溢出导致JVM进程被kill
查看gc.log为什么会有promotion fail呢,是因为垃圾回收时,新生代的对象晋升到老年代,但是老年代放不下了,因此会触发这个报错。可以看出来,上一次GC完新生代已使用空间为345M,老年代已使用空间大约3540M,难怪晋升失败。最后一次GC结束,新生代居然还有4.5G的存活对象。promotion-failed 产生原因:当进行young gc时,由于新生代空间不足,有部分对...原创 2019-03-27 10:47:54 · 2995 阅读 · 0 评论 -
JVM中产生“concurrent mode failure”导致FullGC的原因
原因:【1】老年代中存活的数据太大,以致老年代没有足够空间支持分配,即导致concurrent-mode-failure【2】如果长时间频繁出现,有可能是老年代设置太小或者CMSGC后没有进行压缩的原因导致【3】应用本身行为变化,导致JVM无法充分的预估新晋升对象的大小。(如:突然有一个非常大的对象,以致新生代无法存放,而老生代空间虽然大于平时预估对象大小,但是此对象老生代还是无法存放)解...原创 2019-03-27 10:59:29 · 1480 阅读 · 0 评论 -
mvn
如果是正式版,可以在nexus直接上传如果是nexus包,可以用命令上传。不过注意,jar包的位置千万不要放在本地maven仓库里面,否则会报错的。mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=/Users/maso/Downloads/parent-1.0.2.pom -DgroupId=com.taobao -Dartif...原创 2019-09-07 15:30:35 · 189 阅读 · 0 评论 -
卸载mac的flash player
找了很多办法都不行,官方的卸载工具会一直卡在卸载那一步,最后没想到还是腾讯管家靠谱。顺便把阿里的云壳也卸载了。厉害Mac怎么彻底删除Flash player插件?最近PC6苹果网小编的Mac上Flash player插件又抽风了,为了看优酷为Safari安装了Flash后,我的Macbook风扇呼呼转,耗电到我根本无法接受,决定强力卸载干净Fash,因为之前删除Flash插件总是有残留,这次P...原创 2019-07-18 16:41:03 · 1621 阅读 · 0 评论 -
MAC卸载赛门铁克
使用 RemoveSymantecMacFiles 卸载适用于 Mac 操作系统的赛门铁克软件TECH103489Last Updated August 17, 2018Situation您需要卸载安装在 Mac OS X 中适用于 Macintosh 的赛门铁克产品。您已尝试过多种方法(包括手动卸载或运行 Symantec Uninstaller),但均未成功。或者,技术人......原创 2019-07-18 10:25:01 · 10429 阅读 · 3 评论 -
GC算法的分类
GC算法的分类 Serial GC (-XX:+UseSerialGC)Serial收集器是一个新生代收集器,单线程执行,使用复制算法。它在进行垃圾收集时,必须暂停其他所有的工作线程(用户线程)。是Jvm client模式下默认的新生代收集器。对于限定单个CPU的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单 线程收集效率。Pa...原创 2019-03-28 10:16:24 · 441 阅读 · 0 评论 -
java反射机制实例学习与解析
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;简单说就是:只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。这种动态获取以及动态调用对象方法的功能称为java语言的反射机制。一、例子解读JAVA反射机制有一个用户自定义的类Car.Classpublic class Car { ...原创 2019-03-27 16:10:59 · 211 阅读 · 0 评论 -
mysql db路由
DBRouteConfig路由方法 /** * �������ݿ�·�ɵ�����ڣ�һ��ͻ��˾����ô˷�������Ӧ�ò�ѯ�����ݿ⡣ * * @param dbRoute * @param statement * * @return * * @throws DBRouterExceptio...原创 2019-03-12 15:43:48 · 20919 阅读 · 0 评论 -
ClassNotFoundException 和NoClassDefFoundError
加载时从外存储器找不到需要的class就出现ClassNotFoundException 连接时从内存找不到需要的class就出现NoClassDefFoundError ClassNotFoundException的产生原因:Java支持使用Class.forName方法来动态地加载类,任意一个类的类名如果被作为参数传递给这个方法都将导致该类被加载到JVM内存中,如果这个类在类路...原创 2019-02-14 15:53:05 · 311 阅读 · 0 评论 -
排序算法总结
package com.example.springmvcdemo;/** * @author shaohui.msh */public class Sort { public void choseSort(int[] array) { int length = array.length; for (int i = 0; i < lengt...原创 2019-02-14 15:12:28 · 79 阅读 · 0 评论 -
jmap怎么和JVM通信:java attach
java attach的实现原理通信方式:socket执行逻辑:JVM里面命令:jmap --histo:live pidjava SA通信方式:执行逻辑:主要在SA原创 2019-02-25 10:55:34 · 362 阅读 · 1 评论 -
浅谈内存映射文件原理与DirectMemory
Linux进程的虚拟内存结构(内核空间+用户空间)Memory mapped region for shared libraries 这一块就是直接虚拟内存映射到文件,减少了文件拷贝到内核空间,再拷贝到用户空间此图为 Linux 2.X 中的进程虚拟存储器,即进程的虚拟地址空间,如果你的机子是 32 位,那么就有 2^32 = 4G的虚拟地址空间,我们可以看到图中有一块区域: “Me...原创 2019-02-19 15:38:32 · 1176 阅读 · 0 评论 -
SpringMVC的处理流程
(1)用户发送请求至前端控制器DispatcherServlet;(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;(4)DispatcherServlet通过HandlerA...转载 2019-02-24 17:22:47 · 109 阅读 · 0 评论 -
一些开源的技术
分布式:HSF,zookeeper,kafka,redis,metaQservice mesh:sofaMesh,mesher大数据:spark,blink,flink人工智能:tensorflow容器:docker,kubernetes原创 2019-02-22 17:52:28 · 137 阅读 · 0 评论 -
java流
java流处理是IO环节避不开的话题,Java语言本身提供流一系列的类支持字节流的读写,我们今天来看看。 场景一,读取一个文件内的内容这时候通常做法是使用FileInputStream封装了一个File文件,然后调用read方法一个字节一个字节的读出来;当然也可以一次性读取多个字节,将数据读到字节数组里面。最后一定要记得close这个inputStream. ...原创 2019-01-30 15:39:11 · 125 阅读 · 0 评论 -
AbstractQueuedSynchronizer(AQS)的原理剖析
aqs作为java锁、countDownLatch、信号量的实现核心,功能非常强大,理解起来也分费解数据结构state的意义1 表示当前线程已经被取消-1 表示后继节点线程需要从阻塞变成就绪状态-2 表示当前线程在等待一个资源-3 表示acquireShare应该被无条件传播0 表示不是任何一种 static final class Node { /** Ma...原创 2019-02-14 18:33:09 · 291 阅读 · 0 评论 -
web项目打war包后的结构
典型的war包内部结构如下: webapp.war | index.jsp | |— images |— META-INF |— WEB-INF | web.xml // WAR包的描述文件 | |— clas原创 2017-11-30 09:50:02 · 5463 阅读 · 0 评论 -
人人网糯米网框架Rose jade解读
我们公司“首席架构师”自己写了一个mvc框架和一个持久层的框架。配合spring,实现了大部分网站模块。一,持久层框架paoding-rose-jade 是一个基于Annotation的数据库访问框架,它支持以接口 + Annotation + SQL 语句的形式,依据开发者的DAO接口在运行时通过java proxy技术创建DAO实例,不需要编写DAO实际实现代码。于是我们的dao层变成了类...原创 2013-02-27 15:28:22 · 2992 阅读 · 2 评论 -
合理配置Java线程池
合理的配置线程池要想合理的配置线程池,就必须首先分析任务特性,可以从以下几个角度来进行分析:1.任务的性质:CPU密集型任务,IO密集型任务和混合型任务。2.任务的优先级:高,中和低。3.任务的执行时间:长,中和短。4.任务的依赖性:是否依赖其他系统资源,如数据库连接。任务性质不同的任务可以用不同规模的线程池分开处...原创 2019-03-20 14:09:39 · 444 阅读 · 1 评论 -
高并发系统的问题
1.数据一致性2.低延时3.可扩展4.高性能、稳定顺滑要求服务RT没有抖动,cpu不会负载突然升高,一般问题是GC,Jit编译,代码性能,日志打印block,磁盘打满。导致cpu飙高到原因可能是jvm JIT编译导致在线上发布(特别是流量较大时)时候,我们都会碰到一个程序"预热"的问题,原因是:JVM在应用刚启动时,先开始的是字节码的解释执行,直到执...原创 2019-03-11 09:33:21 · 330 阅读 · 0 评论 -
小团队的管理
◆明确自己的职责何谓主管? 首先我们必须对主管的本质进行定义。如果定义模棱两可,每个人对主管的理解各有不同,大家就会不知道自己应该做些什么。 在本书中,我将主管定义为“通过下属实现经营者的目标的人”。下面的四象限图,有四种角色。 纵向从“做什么工作”的角度,将工作分为“实现经营者的目标”和“完成具体业务”两大类。横向从“谁来做”的视点出发,分为“自己做”和“让下属做”两类。 其中,“完成具...原创 2019-03-10 21:29:21 · 867 阅读 · 0 评论 -
Java堆外内存DirectByteBuffer 回收原理
DirectByteBuffer简介DirectByteBuffer这个类是JDK提供使用堆外内存的一种途径,当然常见的应用一般不会接触到,即使涉及到也可能是框架(如netty、rpc等)使用的,对框架使用者来说也是透明的。DirectByteBuffer作用堆外内存优势在于IO操作上,能够节省堆内存到堆外内存的拷贝,所以性能更高,看过netty源码的同学应该了解;另外磁盘IO时,可以...转载 2019-03-06 14:41:58 · 876 阅读 · 0 评论 -
详解java中Reference的实现与相应的执行过程
一、Reference类型(除强引用)可以理解为Reference的直接子类都是由jvm定制化处理的,因此在代码中直接继承于Reference类型没有任何作用.只能继承于它的子类,相应的子类类型包括以下几种.(忽略没有在java中使用的,如jnireference)SoftReferenceWeakReferenceFinalReference...转载 2019-03-06 15:50:26 · 536 阅读 · 0 评论 -
堆外内存之 DirectByteBuffer 详解
原文出处:tomas家的小拨浪鼓堆外内存堆外内存是相对于堆内内存的一个概念。堆内内存是由JVM所管控的Java进程内存,我们平时在Java中创建的对象都处于堆内内存中,并且它们遵循JVM的内存管理机制,JVM会采用垃圾回收机制统一管理它们的内存。那么堆外内存就是存在于JVM管控之外的一块内存区域,因此它是不受JVM的管控。在讲解DirectByteBuffer之前,需要先简单了解两个...转载 2019-03-06 11:24:17 · 242 阅读 · 0 评论 -
IntelliJ IDEA 12 与 Tomcat集成并运行Web项目 配置
下面分享下我在IDEA上直接把Web项目跑到Tomcat上的方法(跟Eclipse好像不太一样,有那么一点点小麻烦)具体步骤如下:1. 创建Web项目创建Web项目的方法我就不多说了,参考:用社区版 IDEA 和 普通版的 Eclipse 开发 Java Web 项目使用Idea社区版开发Web项目我直接使用从Eclipse导入过来的oschina项目。2. 配置你转载 2013-03-04 16:40:42 · 1982 阅读 · 0 评论