
java
文章平均质量分 72
Andyzhu_2005
这个作者很懒,什么都没留下…
展开
-
在多线程和反射中java异常处理
1、概述java异常可以理解为因为程序运行环境或者代码逻辑等原因,致使程序不能继续正常工作的一种情况。而在java中定义了很多种不同类型的异常,使得jvm在抛出异常的时候,我们能根据这个异常的种类,快速的定位出程序出问题的原因。1.1 异常的种类在java中所有的异常都继承于Throwable类。而Throwable又分为两个子类,Error类和Exception类。Error:代表着程序...原创 2019-06-27 15:52:30 · 650 阅读 · 0 评论 -
rocketmq消费消息流程
主要讲述rocketmq的消费流程,ack机制以及消费失败的处理问题。1 rocketmq的消费流程 public static void main(String[] args) throws InterruptedException, MQClientException { /* * Instantiate with specified consum...原创 2019-01-08 15:47:26 · 2330 阅读 · 0 评论 -
在Java项目中如何使用log4j和slf4j实现日志打印(转)
转载于:https://blog.youkuaiyun.com/xiao_mengxi/article/details/54910450什么是log4j?Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级...转载 2018-12-16 14:58:50 · 621 阅读 · 0 评论 -
Rocketmq的通信协议和方法分析
根据rocketmq的模块设计,其通信相关的代码放在源码包下的rocketmq-remoting模块。主要内容包括了编解码处理,使用了nety框架对接收发送消息的处理等。其类图见下:其中,以RemotingService为最上层接口,提供了三个接口:void start();void shutdown();void registerRPCHook(RPCHook rpcHook);R...原创 2018-12-20 17:47:23 · 4602 阅读 · 0 评论 -
spring解析dubbo标签
1、spring自定义标签的步骤(参考https://my.oschina.net/lenglingx/blog/889662)a、编写xsd文件描述自定义的元素。看下面的代码实例,这里定义了application。其中上面的代码是具体的元素定义,下面的是自定义元素名。<?xml version="1.0" encoding="UTF-8" standalone=&a原创 2018-11-28 20:46:26 · 409 阅读 · 0 评论 -
dubbo的服务调用过程
服务消费的过程:referenceConfig类的init方法调用Protocol的refer方法,生成invoker实例,然后把Invoker转换为客户端需要的接口。2、源码解析dubbo的消费端初始化在ReferenceConfig的get()方法 public synchronized T get() { if (destroyed){ thro...原创 2018-11-28 10:29:56 · 568 阅读 · 0 评论 -
dubbo的proxyFactory和动态代理相关
动态代理,可以理解为在系统运行期间,为目标类生成二进制的class文件并运行,当系统运行完,这个class文件也会消失。dubbo中,每一个spi注解的接口,都会通过动态代理,生成一个类似于ProtocolAdpative等的xxxAdpative等的xxxAdpative等的xxxAdpative的class文件。动态代理在dubbo的另一个典型应用是proxyFactory。proxyFa...原创 2018-12-02 19:54:24 · 1480 阅读 · 0 评论 -
dubbo的服务发布过程
dubbo发布服务的流程1、具体的服务转为invoker: ServiceConfig类通过ProxyFactory类的getInvoker方法,将服务提供类ref生成invoker。2、Invoker转换成Exporter:打开通信端口,接听来自客户端的申请。具体解析1、当Spring容器实例化bean完成,ServiceBean会执行onApplicationEvent方法,该方法调用...原创 2018-11-27 15:13:28 · 585 阅读 · 0 评论 -
由dubbo的TpsLimitFilter限流,说说dubbo的Filter实现机制
Dubbo提供了过程拦截(即Filter)功能。dubbo的大多数功能都基于此功能实现。在dubbo的服务端,提供了一个限流Filter(TpsLimitFilter),用于在服务端控制单位时间内(默认是60s)的调用数量tps。超过此数量,则服务端将会报错。一、TpsLimitFilter的使用# 1.1、TpsLimitFilter源码@Activate(group = Constan...原创 2018-11-29 19:57:34 · 2416 阅读 · 1 评论 -
模拟个人微信号登录进行相关操作
1.需求这两天帮一个同事调研一个需求。他的一个销售朋友想实现这么一个功能,在程序中登录个人的微信号,然后可以对微信好友进行分组,并对每个微信号进行相关的标签标定。比如好友A,是xx公司的研发总监,好友B,是yy公司的产品经理。把好友A和B拉进来后,发一条消息(对于好友A和B来说,还是单独发送的),会自动的把A改成xx公司的研发总监,B改成yy公司的产品经理,然后发送。需求很简单,功能类似于一个...原创 2019-06-12 11:11:03 · 7662 阅读 · 0 评论 -
spring-boot浅析
1、何为spring-boot可以理解为spring-boot是为了快速构建spring项目的一种框架。比如普通的开发spring-mvc项目,正常的话需要在web.xml配置dispach-servlet,需要在我们的xml文件中配置视图解析器、配置handlermapping和handleradapter解析器、定义扫描包目录、配置事务管理器等。另外还需要配置tomcat服务器,通过mave...原创 2019-05-20 11:11:32 · 395 阅读 · 0 评论 -
spring-boot子模块打包去掉BOOT-INF文件夹
1.spring-boot maven打包,一般pom.xml文件里会加 org.springframework.boot spring-boot-maven-plugin这样打的jar里会多一个目录BOOT-INF。2.引起问题,程序包不存在。3.解决办法,如果A子模块包依赖了B子模块包,在B子模块的pom文件,加入 org.springframework.b...转载 2019-04-08 19:24:17 · 372 阅读 · 0 评论 -
netty中的Bytebuf管理
前言netty中的Bytebuf类似于java nio中的ByteBuffer。不过,与原生的ByteBuffer相比,Bytebuf采用了读写两个指针,使用起来更加方便,不至于每次在读写切换过程中都需要flip()操作。而且Bytebuf支持动态扩展。netty为了实现高效操作,对Bytebuf设置了两种实现,一种是在堆上实现的HeapBytebuf,另一种是在堆外实现的DirecetByt...原创 2019-03-24 10:47:54 · 736 阅读 · 0 评论 -
netty线程模型
概述netty本质上还是采用了java的nio,只是对nio进行了相关的封装,使用起来更加的方便。在netty服务端开发时,一般会有两个线程池。一个是用于接收链接申请的线程池,如果并发量不是巨大的话,可以设置为1,一般可以称之为boss线程。一个是用于io读写的线程池,可以称之为工作线程池,即boss线程收到的tcp链接,会转给这个工作线程池进行io读写的处理。一般推荐线程池内线程数量为cpu核...原创 2019-03-20 18:59:58 · 625 阅读 · 0 评论 -
dubbo自定义filter,报No such extension xxxFilter for filter/com.alibaba.dubbo.rpc.Filter错误
前言最近在学习dubbo的filter时候,根据dubbo的开发手册,自定义了一个filter,然后配置,结果控制台报 No such extension xxxFilter for filter/com.alibaba.dubbo.rpc.Filter错误。特此记录。自定义filter首先定义filter,需要实现com.alibaba.dubbo.rpc.Filter接口/** ...原创 2018-11-27 17:13:27 · 15280 阅读 · 2 评论 -
dubbo的spi机制
1、proxyFactory 是用来干嘛的对于Server端,主要负责将服务如HelloServiceImpl统一进行包装成一个Invoker,通过反射来执行具体的HelloServiceImpl对象的方法2、在调用servicebean时,会先初始化serviceconfig。在初始化时serviceconfig时,会最先初始化 private static final Protocol...原创 2018-11-26 15:29:41 · 455 阅读 · 0 评论 -
io和nio对操作文件的效率对比
对于文件拷贝,传统的io是先从输入流中取出一小部分字节,然后写入输出流中。而nio是将输入流对应的channel直接transfer到输出流对应的channel,避免了中间的byte数组的缓冲区,这也是所谓零拷贝的一种。public class FileIOTest { /** * @param args * @throws IOException ...原创 2018-05-07 14:31:18 · 1392 阅读 · 1 评论 -
基于delayqueue的缓存
/** * All rights Reserved, Designed By www.tydic.com * @Title: CacheClass.java * @Package com.andy.jcu.cachetest * @Description: TODO(用一句话描述该文件做什么) * @author: andyzhu * @date:...原创 2018-04-18 20:19:44 · 491 阅读 · 0 评论 -
CountDownLatch分析
CountDownLatch是并发包中的一个工具类,用于控制多个线程在其他任务完成后再继续执行的逻辑。public class CountDownLatchTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated...原创 2018-04-12 16:25:43 · 164 阅读 · 0 评论 -
ArrayBlockingQueue实现生产者消费者模型
ArrayBlockingQueue是一个由数组构成的有界阻塞队列,其常用构造方法://fair判断是否为公平锁,为true的话表明先进入的线程优先访问数据 public ArrayBlockingQueue(int capacity, boolean fair) { // 初始容量必须大于0 if (capacity <= 0) ...原创 2018-04-16 16:13:01 · 575 阅读 · 0 评论 -
CopyonWriteArrayList
CopyonWriteArrayList是java并发包中提供的一个类,基于写入时复制的思想。 普通的ArrayList或者Vector(虽然vector是线程安全的,但是复合操作不是,删除或者添加元素后,其结构发生了变化,modcount还是改变了,也会发生异常),如果有两个线程,一个线程进行iterator迭代显示,同时另外一个线程进行add或者reomve操作,则进行迭代显示的操作会报Co...原创 2018-04-16 15:41:30 · 185 阅读 · 0 评论 -
Lock中AbstractQueuedSynchronizer分析
Lock的实现基于队列同步器AbstractQueuedSynchronizer的子类实现的AbstractQueuedSynchronizer用一个int表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。同步器的设计基于模板方法,即开发者需要继承同步器并重写指定的方法,随后同步器组合将在自定义同步组件的过程中,调用同步器的模板方法,这些模板方法又去调用开发者编写的方法。Loc...原创 2018-04-10 17:17:07 · 255 阅读 · 0 评论 -
ThreadPoolExecutor核心方法分析
ThreadPoolExecutor类的核心是Worker内部类,其对资源进行了服用,减少创建线程的开销。Worker实现Runnable接口,并继承AbstractqueuedSynchronizer。 内部有一个worker的HashSet,存放工作线程。 线程池的状态:Runnable,shutdown,stop,tidying,terminated。 其核心方法: 1、execut...原创 2018-04-09 16:31:41 · 280 阅读 · 0 评论 -
yum设置本地源
yum设置本地源1、将iso文件拷centos的目录下,比如 /mnt/iso/centos.iso 2、mount -o loop /mnt/iso/centos.iso /mnt/cdrom #将光盘挂载到新建的cdrom目录上 一定要加上 -o loop 参数 3、 在cdrom的目录下用ls 查看里面的内容,可以确认挂载是否成功 4、备份系统原有yum源文件,修改名...原创 2018-03-30 08:53:49 · 447 阅读 · 0 评论 -
发布远程tomcat后如何查看日志
今天遇到一个问题,web的后台工程在eclipse的maven管理的tomcat插件中运行是正常的,但是发布到远程的taocat服务器上运行,却失败了,显示 FAIL - Application at context path /arcgis/rest could not be started 开始,以为是本地的jdk版本和远程tomcat的jdk版本不一致造成的,后来把远程tomcat所在的原创 2018-02-07 16:45:16 · 2650 阅读 · 0 评论 -
mybatis报exception is java.lang.RuntimeException: org.apache.ibatis.binding.BindingException: Invalid
二月 02, 2018 2:16:49 下午 org.apache.coyote.AbstractProtocol start信息: Starting ProtocolHandler ["http-bio-8080"]二月 02, 2018 2:17:58 下午 org.apache.catalina.core.StandardWrapperValve invoke严重: Servlet.s...原创 2018-02-05 21:57:39 · 4045 阅读 · 1 评论 -
java获取classes下的配置文件
public static void main(String[] args) { // TODO Auto-generated method stub Properties prop = new Properties();// 属性集合对象 FileInputStream fis; try { InputStream ra = TestP...原创 2018-02-08 15:52:01 · 345 阅读 · 0 评论 -
java的动态代理小记
spring的两大核心思想是Ioc(控制反转)和AOP(切面编程)。AOP主要通过java的动态代理和cglib代理实现。动态代理需要所代理的类要有接口。而cglib是通过集成所代理的类来实现,一般情况下优先使用java的动态代理。 下面通过一个例子说明动态代理的实现以及需要注意的事项。 UserService对于一个增删改查的接口。 public interfac...原创 2018-06-23 17:20:39 · 308 阅读 · 0 评论 -
spring aop的基于xml以及注解的配置
1、首先定义目标接口和目标类public interface UserService { void insert(String name,String password); void update(String name,String password); int query(String name,String password); void de...原创 2018-06-24 11:06:12 · 233 阅读 · 1 评论 -
Thread类中的中断分析
interrupt()分析先看javadoc里的关于Thread类的interrupt()方法说明Interrupts this thread. Unless the current thread is interrupting itself, which is always permitted, the checkAccess method of this thread is invok...原创 2018-09-28 16:32:45 · 364 阅读 · 0 评论 -
dubbo总结
集群模式下的容错模式集群模式下,调用服务失败时的容错机制1、默认是failover,重试机制,默认是两次。通常可用于读操作2、failfast,快速失败模式,当调用失败时候就报错,通常用于写操作3、failsafe,失败安全模式,当调用失败时直接忽略。通常用于写入日志等操作。...原创 2018-10-01 19:27:26 · 449 阅读 · 2 评论 -
Maven手动构建jar包
Maven入门何为mavenMaven的目录结构Maven构建命令引用了其他jar包的情况(第三方jar包不与package打成一个包)引用了其他jar包的情况(第三方jar包与package打成一个包)何为maven新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPant...原创 2018-09-20 15:27:08 · 604 阅读 · 0 评论 -
java异步调用future、callable以及futuretask分析
通过线程池的submit方法和实现了callable接口的对象,可以返回一个future接口的对象,通过此对象可以异步获取callable方法的运行结果。future.get() 阻塞式的返回结果,如果任务未执行完毕,就阻塞等待结果产生。future.get(10000, TimeUnit.MILLISECONDS); 在时间范围内得到结果,没有的话就报错public class Fut...原创 2018-09-29 09:34:15 · 690 阅读 · 0 评论 -
转:导出/导入Eclipse的workspace配置(备份Eclipse配置)以及xshell中文乱码问题以及
设置好workspace配置后可以将配置保存为 *.epf 文件。进入 File -&amp;gt; Export ;选择 General -&amp;gt; Preferences ,下一步;选择 Export all,在 To preference file 中输入要保存的路径和文件名;Finish。将 *.epf 配置文件导入workspace。进入 File -&amp;gt; Expor...转载 2018-09-13 15:38:25 · 350 阅读 · 0 评论 -
ThreadLocal
ThreadLocal:线程本地变量,其通过在每一个线程中为变量存储副本的方式,解决变量的多线程访问的问题。与Synchroniezd等加锁方式不同,其是通过以空间换时间的方式。 ThreadLocal的方法主要为一下四个:public T get() { }public void set(T value) { }public void remove() { }protected ...原创 2018-08-19 17:00:06 · 142 阅读 · 0 评论 -
spring的bean在多线程中注入的问题
问题描述在spring中,如果需要在异步线程中注入bean,会发现bean是空的情况。原因据说是spring bean 出于线程安全考虑,不得注入bean至线程类(Runnable)。 代码如下:public class DealThreadTask implements Runnable{ @Autowired private DealService dealSe...原创 2018-08-19 10:26:15 · 3022 阅读 · 1 评论 -
spring事务相关
事务简介事务是对数据库操作的一组序列。当操作序列中的所有操作都成功执行时,事务执行成功。当序列中任一操作失败时,此时对数据库的操作返回至事务未执行的状态。事务的4个特性事务的特性可以总结为ACID 原子性(Atomicity):事务里的操作看做一个整体,是不可分割的原子单位,其所有操作要么全部成功,要么全部失败; 一致性(Consistency):事务一旦完成,其业务结果必须有...原创 2018-08-15 08:35:00 · 205 阅读 · 0 评论 -
java自定义注解解析及相关场景实现
注解(Annotation)是java1.5之后提供的一种语法。其主要作用是编译检查(比如@override)和代码分析(通过代码中添加注解,利用注解解析器对添加了注解的代码进行分析,获取想要的结果,一般自定义的注解都是这一种功能)。1.1 JDK提供的注解JDK提供的注解最常用的是3个,@Override,@Deprecated和@SuppressWarnings.1.1.1...原创 2018-08-02 16:41:14 · 10287 阅读 · 3 评论 -
Servlet、servletContext小结
1、Servlet是sun提供的一种规范,用于服务器端处理http请求。一般需要我们继承Servlet接口或者HttpServlet接口。并实现其中的方法。(Servlet接口需要实现service方法,HttpServlet接口需要实现doget和dopost方法)。Servlet要正常运行,需要在web.xml配置。 其生命周期是随着第一次访问而创建(或者设置了load-on-startup就...原创 2018-06-26 19:18:02 · 226 阅读 · 0 评论 -
http从请求到响应分析
http协议是互联网开发的基石,其基于请求/响应模型,请求和响应必须成对出现,默认端口是80.下面分别对http的请求和响应分别做说明。 1、前期准备 新建springmvc工程,将一个html文件放到tomcat的webapp下,其内容j就是一个简单的表单提交页面,如下:&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;meta ch原创 2018-06-25 17:07:29 · 324 阅读 · 0 评论