08 2018 档案
摘要:背景 用户:货都到了,购物车里怎么还有刚买的东西,what?产品:有用户反映,提单完成了,怎么没清购物车,研发赶紧看看是不是有bug啊?研发:恩,我看看,!@#¥%……&*()一顿狂查,搜嘎,当时在上线,重启应用,异步任务丢了……产品:能不能行,上线你就丢任务,丢不丢人啊!研发:………… 上线!重启
阅读全文
摘要:一、注解:深入理解JAVA注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。 1、元注解(meta-annotation): 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-a
阅读全文
摘要:1.synchronized与static synchronized 的区别 synchronized是对类的当前实例进行加锁,防止其他线程同时访问该类的该实例的所有synchronized块,注意这里是“类的当前实例”, 类的两个不同实例就没有这种约束了。那么static synchronized
阅读全文
摘要:可以关闭 ExecutorService,这将导致其拒绝新任务。提供两个方法来关闭 ExecutorService。shutdown() 方法在终止前允许执行以前提交的任务,而 shutdownNow() 方法阻止等待任务启动并试图停止当前正在执行的任务。在终止时,执行程序没有任务在执行,也没有任务
阅读全文
摘要:execute方法位于接口Executor中。 submit方法位于AbstractExecutorService中。 根据源码可以看到execute仅可以接受Runnable类型,而submit重载了三个方法,参数可以是Runnable类型的接口、Runnable类型接口加泛型result以及Ca
阅读全文
摘要:一、Future使用 FutureTask是Future和Callable的结合体。传统的代码是这样写的 Future f = executor.submit(new Callable()); 然后通过Future来取得计算结果。但是,若开启了多个任务,我们无从知晓哪个任务最先结束。因此,若要实现“
阅读全文
摘要:Callable接口: Runnable接口: 相同点: 不同点: 注意点: Callable接口支持返回执行结果,此时需要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取‘将来’结果;当不调用此方法时,主线程不会阻塞! Callable工作的Demo: 测试结果: Runn
阅读全文
摘要:1. 为什么使用线程池 诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP 或 POP)、通过 JMS 队列或者可能通过轮询数据库。不管请求如何到达
阅读全文
摘要:1. 闭锁CountDownLatch 闭锁CountDownLatch用于线程间的同步,它可以使得一个或者多个线程等待其它线程中的某些操作完成。它有一个int类型的属性count,当某个线程调用CountDownLatch对象的await方法时,将会阻塞,直到count的值变成0;count值可以
阅读全文
摘要:最近一直在设计新的功能模块,觉得画一个比较好的架构设计图对于整个需求理解非常重要。接下来向大家推荐几个程序员画图比较好用的几个工具。 1. Astah Community Astah Community是一个非常强大的免费的UML建图工具,支持最新的UML图。 地址:http://astah.net
阅读全文
摘要:一. 背景: 在测试工作中,为方便发现代码中的逻辑问题,尝试使用远程debug模式,在测试过程中走查代码,不仅可以辅助测试减少与开发的沟通成本,更便于了解业务提升测试深度。 二. 配置方式: 1. 调试的配置方式主要为设置JVM的参数,使之工作在debug模式下,常用参数为: 1 -Xdebug -
阅读全文
摘要:spring boot只是一个配置工具,整合工具,辅助工具. springmvc是框架,项目中实际运行的代码 Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring 的ioc和 aop,ioc 提供了依赖注入的容器, aop解决了面向
阅读全文
摘要:一,本文介绍Spring MVC的自定义异常处理,即在Controller中抛出自定义的异常时,客户端收到更友好的JSON格式的提示。而不是常见的报错页面。 二,场景描述:实现公用API,验证API key的逻辑,放在拦截器中判断(等同于在Controller中)并抛出异常,用户收到类似下图的提示:
阅读全文
摘要:Spring 为解耦而生,其中AOP(面向切面编程)是很浓重的一笔。 本文来探讨一下AOP实现的原理。 一. 概述 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在
阅读全文
摘要:对象优先在Eden分配,且新生代对象晋升到老年代有多种情况, 现在做一个总结: (1)、Eden区满时,进行Minor GC,当Eden和一个Survivor区中依然存活的对象无法放入到Survivor中,则通过分配担保机制提前转移到老年代中。 (2)、若对象体积太大, 新生代无法容纳这个对象,-X
阅读全文
摘要:一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法
阅读全文
摘要:什么是类反射—原理? ☆什么是反射 (1)Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。 (2)反射(Reflection)是Java程序
阅读全文
摘要:先看下@Transactional可以配制那些参数及以其所代表的意义。 isolation 枚举org.springframework.transaction.annotation.Isolation的值 事务隔离级别 noRollbackFor Class<? extends Throwable>
阅读全文
摘要:1.各协议的比较 2、协议的配置:<dubbo:protocal>(只需在服务提供方配置即可) dubbo协议缺省端口为20880, rmi协议缺省端口为1099, http和hessian协议缺省端口为80; 如果配置为-1或者没有配置port,则 会分配一个没有被占用的端口。 dubbo协议缺省
阅读全文
摘要:一、Duboo基本概念解释 Dubbo是一种分布式服务框架。 Webservice也是一种服务框架,但是webservice并不是分布式的服务框架,他需要结合F5实现负载均衡。因此,dubbo除了可以提供服务之外,还可以实现软负载均衡。它还提供了两个功能Monitor 监控中心和调用中心。这两个是可
阅读全文
摘要:什么是框架?框架解决的是什么问题? 编程有一个准则,Don't Repeat Yourself(不要重复你的代码),所以我们会将重复的代码抽取出来,封装到方法中;如果封装的方法过多,将将这些方法封装成工具类;如果工具类形成了规模,就整合成类库。类库更加系统,功能更加齐全。既然别人已经造好了轮子,我们
阅读全文
摘要:我知道在web.xml文件中我们是这样配置springmvc的: 我们的加载的入口就是dispatcherServlet。上一篇中我们说到了dispatcherServlet的集成关系,也反编译源码看到了具体的源码的截图。这里我们接着上篇中的集成关系说。在上篇说的httpServletBean的in
阅读全文
摘要:SpringMVC的工作原理图: SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处
阅读全文
摘要:IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待
阅读全文
摘要:1.什么是AQS? AQS的核心思想是基于volatile int state这样的volatile变量,配合Unsafe工具对其原子性的操作来实现对当前锁状态进行修改。同步器内部依赖一个FIFO的双向队列来完成资源获取线程的排队工作。 2.同步器的应用 同步器主要使用方式是继承,子类通过继承同步器
阅读全文
摘要:一、什么是CAS? 在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一
阅读全文
摘要:java在编写多线程程序时,为了保证线程安全,需要对数据同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock。 相似点: 这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的
阅读全文
摘要:1、使用 排序 2、原理 事实上Collections.sort方法底层就是调用的array.sort方法,而且不论是Collections.sort或者是Arrays.sort方法, 跟踪下源代码吧,首先我们写个demo 简单得不能再简单的方法了,让我们一步步跟踪 我们没有写比较器,所以用的第
阅读全文
摘要:提到集合之前,先说说数组Array和集合的区别: (1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) (2)JAVA集合可以存储和操作数目不固定的一组数据。 (3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。 F
阅读全文
摘要:1.java内存模型 1.JVM内存模型 JVM内存模型如上图,需要声明一点,这是《Java虚拟机规范(Java SE 7版)》规定的内容,实际区域由各JVM自己实现,所以可能略有不同。以下对各区域进行简短说明。 1.1程序计数器 程序计数器是众多编程语言都共有的一部分,作用是标示下一条需要执行的指
阅读全文
摘要:Java中Class.forName和classloader都可以用来对类进行加载。 Class.forName除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。 而classloader只干一件事情,就是将.class文件加载到jvm中,不会执行static
阅读全文
摘要:Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。 HashMap HashMap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。遍历时,取得数据的顺序是完全随机的。 HashMap最多只允许一条记录
阅读全文
摘要:Session和Cookie的区别 1.1 Session对象 浏览器访问服务器时,服务器会创建一个对象(该对象也称为session对象,该对象有一个唯一的id号与其对应)。然后,服务器会将id号发送给浏览器(默认情况下,使用cookie机制发送)。当浏览器再次访问服务器时,会将id号发送过来。服务
阅读全文
摘要:Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。 Queue的实现 1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口
阅读全文
摘要:1.Dubbo原理分析 alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。这个框架/工具/产品在实现的时候,都考虑到了容灾,扩展,负载均衡,于是出现一个配置中心(Con
阅读全文
摘要:一、隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 1. ISOLATION_READ_UNCOMMITTED:这
阅读全文
摘要:本文将简单介绍如何有效的解决分布式的一致性问题,其中包括什么是分布式事务,二阶段提交和三阶段提交。 分布式一致性回顾 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些
阅读全文
摘要:背景描述 通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数据。IP协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程。而端到端的通信才
阅读全文
摘要:1.HashMap类的定义 如上述代码所示, HashMap继承了AbstractMap类, 实现了Map, Cloneable, Serializable接口. 2. HashMap中定义的常量 3. HashMap中定义的变量 4. 构造方法 构造hash数组时, 必须保证数组的长度为2的幂次方
阅读全文
摘要:1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难; 链表 链表存储区间离散,占用内存比较宽松,故空间复杂度
阅读全文
摘要:日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也
阅读全文
摘要:class B extends A ,然后A类也就是父类里面有静态代码块,普通代码块,静态方法,静态成员变量,普通成员变量,普通方法。子类也是这样,然后继承之后,关于程序打印输出的结果。涉及到Java类的各种成员的初始化顺序。经测试,得到如下结论:1.父类【静态成员】和【静态代码块】,按在代码中出现
阅读全文

浙公网安备 33010602011771号