摘要: Java注解 又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据。 Java语言中的类、方法、变量、参数和包等都可以被标注。Java标注和Javadoc不同,标注有自反性。在编译器生成类文件时,标注可以被嵌入到字节码中,由Java虚拟机执行时获取到标注[。 我们在平常编写代 阅读全文
posted @ 2019-07-31 21:27 qxwang 阅读(56) 评论(0) 推荐(0)
摘要: 1. 单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因。 从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化 阅读全文
posted @ 2019-07-31 21:27 qxwang 阅读(33) 评论(0) 推荐(0)
摘要: 基本IO操作代码 阅读全文
posted @ 2019-07-31 21:26 qxwang 阅读(52) 评论(0) 推荐(0)
摘要: 前言 在看《大话设计模式》中,经常会看到各种各样的UML类图的出现,用来描述设计模式中类与类,类与接口之间的关联关系。可能刚开始看到一些简单的UML图还能读得懂,越往后越觉得阅读UML类图的能力必不可少,所以针对UML类图做一次总结。 1、UML类图图示示例 2、类 类图分三层,第一层显示类的名称, 阅读全文
posted @ 2019-07-31 21:26 qxwang 阅读(76) 评论(0) 推荐(0)
摘要: 使用注解需要做的配置 用注解来向Spring容器注册Bean。需要在applicationContext.xml中注册<context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>。如:在base-package指明一个 阅读全文
posted @ 2019-07-31 21:25 qxwang 阅读(27) 评论(0) 推荐(0)
摘要: Java集合框架总体结构图 Collection 接口 定义集合基本方法 123456789101112131415 int size();boolean isEmpty();boolean contains(Object o);Iterator<E> iterator();Object[] toA 阅读全文
posted @ 2019-07-31 21:24 qxwang 阅读(48) 评论(0) 推荐(0)
摘要: HashMap的数据结构 要知道hashmap是什么,首先要搞清楚它的数据结构,在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个数组和链表的结合体(在数据结构中,一般称 阅读全文
posted @ 2019-07-31 21:23 qxwang 阅读(144) 评论(0) 推荐(0)
摘要: 红黑树特性 性质 1:每个节点要么是红色,要么是黑色。 性质 2:根节点永远是黑色的。 性质 3:所有的叶节点都是空节点(即 null),并且是黑色的。 性质 4:每个红色节点的两个子节点都是黑色。(从每个叶子到根的路径上不会有两个连续的红色节点) 性质 5:从任一节点到其子树中每个叶子节点的路径都 阅读全文
posted @ 2019-07-31 21:22 qxwang 阅读(183) 评论(0) 推荐(0)
摘要: 红黑树(Red-black tree)的基本知识 一.定义 红黑树是一种自平衡二叉查找树,高效的O(log n)时间内做查找,插入和删除。 NIL节点表示数据的结束,画图时应该也体现出来。 二.特点 任意节点的左子树不空,则左子树上所有节点的值均小于它的根结点的值; 任意节点的右子树不空,则右子树上 阅读全文
posted @ 2019-07-31 21:22 qxwang 阅读(96) 评论(0) 推荐(0)
摘要: 前言 统计记录下Spring相关Bean的类,以做记忆 Spring Bean解析与注册 BeanFactoryDefaultListableBeanFactoryXmlBeanFactoryXmlBeanDefinitionReaderBeanDefinitionHolderBeanDefinit 阅读全文
posted @ 2019-07-31 16:20 qxwang 阅读(26) 评论(0) 推荐(0)
摘要: ControllerAdvice作用 使用@ControllerAdvice能够在不侵入业务逻辑的情况下,进行业务异常的处理,尤其是针对于业务处理时,需要用异常的方式向前台传输异常编码的情况下,用@ControllerAdvice能够非常完美的实现异常的处理。 ControllerAdvice代码实 阅读全文
posted @ 2019-07-31 16:20 qxwang 阅读(51) 评论(0) 推荐(0)
摘要: 11 MyBatis一级缓存实现 每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数据库会话。 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了 阅读全文
posted @ 2019-07-31 16:19 qxwang 阅读(52) 评论(0) 推荐(0)
摘要: 1 引言 本文主要讲解JDBC怎么演变到Mybatis的渐变过程,重点讲解了为什么要将JDBC封装成Mybaits这样一个持久层框架。再而论述Mybatis作为一个数据持久层框架本身有待改进之处。 2 JDBC实现查询分析 我们先看看我们最熟悉也是最基础的通过JDBC查询数据库数据,一般需要以下七个 阅读全文
posted @ 2019-07-31 16:19 qxwang 阅读(37) 评论(0) 推荐(0)
摘要: 8 MyBatis数据源与连接池 MyBatis数据源实现是在以下四个包中: MyBatis把数据源DataSource分为三种: UNPOOLED 不使用连接池的数据源 POOLED 使用连接池的数据源 JNDI 使用JNDI实现的数据源 即: 相应地,MyBatis内部分别定义了实现了java. 阅读全文
posted @ 2019-07-31 16:18 qxwang 阅读(24) 评论(0) 推荐(0)
摘要: jvm 总体梳理 jvm体系总体分四大块: 类的加载机制 jvm内存结构 GC算法 垃圾回收 GC分析 命令调优 当然这些知识点在之前的文章中都有详细的介绍,这里只做主干的梳理 这里画了一个思维导图,将所有的知识点进行了陈列,因为图比较大可以点击右键下载了放大查看。 线程安全本质 线程安全本质是由于 阅读全文
posted @ 2019-07-31 16:18 qxwang 阅读(29) 评论(0) 推荐(0)
摘要: 前言 总结一下IO的相关,代码中都有相关注释 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 阅读全文
posted @ 2019-07-31 16:17 qxwang 阅读(49) 评论(0) 推荐(0)
摘要: 线程中断 thread的方法,线程中断涉及到三个方法,如下: void interrupt(): 中断线程 static boolean interrupted(): 测试当前线程是否已经中断 boolean isInterrupted(): 测试线程是否已经中断 1. interrupt()方法用 阅读全文
posted @ 2019-07-31 16:17 qxwang 阅读(124) 评论(0) 推荐(0)
摘要: 前言 从图中可以看出JAVA中的CAS操作都是通过sun包下Unsafe类实现,而Unsafe类中的方法都是native方法,由JVM本地实现,笔者为了弄清楚真正的实现原理,查看了openJDK7的源码,下面就稍作分析: Unsafe中对CAS的实现是C++写的,从上图可以看出最后调用的是Atomi 阅读全文
posted @ 2019-07-31 16:16 qxwang 阅读(58) 评论(0) 推荐(0)
摘要: 并行计算在处处都有大数据的今天已经不是一个新鲜的词汇了,现在已经有单机多核甚至多机集群并行计算,注意,这里说的是并行,而不是并发。严格的将,并行是指系统内有多个任务同时执行,而并发是指系统内有多个任务同时存在,不同的任务按时间分片的方式切换执行,由于切换的时间很短,给人的感觉好像是在同时执行。Jav 阅读全文
posted @ 2019-07-31 16:16 qxwang 阅读(67) 评论(0) 推荐(0)
摘要: JAVA并发涵盖一下知识块: 基础知识、并发理论(JMM)、并发关键字、Lock体系、并发容器、线程池(Executor体系)、原子操作类、并发工具、并发实践。如下图所示 基础知识: 包含并发编程的优缺点、线程的状态和一些基本操作 并发理论(JMM): 包含JMM内存模型、重排序、happens-b 阅读全文
posted @ 2019-07-31 16:15 qxwang 阅读(31) 评论(0) 推荐(0)
摘要: 1、线程池的优势 降低系统资源消耗。通过重用已存在的线程,降低线程创建和销毁造成的消耗; 提高系统响应速度。当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行; 方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切 阅读全文
posted @ 2019-07-31 16:15 qxwang 阅读(60) 评论(0) 推荐(0)
摘要: Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。 Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽 阅读全文
posted @ 2019-07-31 16:11 qxwang 阅读(50) 评论(0) 推荐(0)
摘要: 言归正传,这一段时间我的工作主要是改进公司的调度器,调度器调度线程池执行任务,生产者生产任务,消费者消费任务,那么这时就需要一个任务队列,生产者向队列里插入任务,消费者从队列里提取任务执行,调度器里是通过BlockingQueue实现的队列,随后小查一下,下面看看BlockingQueue的原理及其 阅读全文
posted @ 2019-07-31 16:10 qxwang 阅读(104) 评论(0) 推荐(0)
摘要: 先看一下大体结构 ThreadLocal(线程本地变量),作用是让每个线程都维护一份独立的变量副本,解决了变量并发访问冲突的问题。表面上看,变量是存储在ThreadLocal里面的,实则不然:1. ThreadLocal只是个“工具类”,对外暴露了get、set、remove接口;2. 内部实现:变 阅读全文
posted @ 2019-07-31 16:10 qxwang 阅读(50) 评论(0) 推荐(0)
摘要: 介绍 Kafka起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark等都支持与Kafka集成。 1. 概述 Kafka与传 阅读全文
posted @ 2019-07-31 16:09 qxwang 阅读(99) 评论(0) 推荐(0)
摘要: server.properties配置 原文作者:文/debugo原文标题:Kafka主要参数详解 阅读全文
posted @ 2019-07-31 16:08 qxwang 阅读(65) 评论(0) 推荐(0)
摘要: 前言 该篇文章为转载文章,Guava的功能强大,由于自己使用Guava并没有特别频繁,很多工具类也是在阅读本篇文章之后才发现原来开发的过程中可以省去很多的繁琐,例如Charsets的使用,例如HttpHeaders的使用,例如Multimap相关集合类的使用,都是在阅读过本篇文章之后才发现可以在实际 阅读全文
posted @ 2019-07-31 16:08 qxwang 阅读(133) 评论(0) 推荐(0)
摘要: Guava Learning 该工程主要用以学习Guava工具包的常用功能 前提 工程路径:https://github.com/litttlefisher/guava-learning该工程是以jdk1.8为版本的代码,所以lambda表达式会大量的出现。如果自己的工程是jdk1.8以下的,请自行 阅读全文
posted @ 2019-07-31 16:07 qxwang 阅读(91) 评论(0) 推荐(0)
摘要: 前言 Spring最关键的部分,也就是解析并加载Bean的处理了,本篇文章以个人的角度进行说明Spring的Bean都是如何处理的。期间有些部分会进行跳过,可能自己还没理解到,也或者可能觉得不太重要吧。本篇文章以解析Xml的方式加载Spring的Bean为前提,基于ClassPathXmlAppli 阅读全文
posted @ 2019-07-31 16:03 qxwang 阅读(70) 评论(0) 推荐(0)
摘要: 简介 ZooKeeper是一个开源的分布式协调服务,由雅虎创建,是Google Chubby的开源实现。ZooKeeper的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。 ZooKeeper是一个典型的分布式数据一致性的解 阅读全文
posted @ 2019-07-31 16:03 qxwang 阅读(40) 评论(0) 推荐(0)
摘要: 前言 电话面试的时候,发现去总结Kafka如何保证高可用时,整个脑袋是懵的,其实Kafka的原理我是懂的,可就是说不出来,这篇文章用来描述下Kafka在不同的情况下,如何保证高可用。具体Kafka原理解析,请移步Kafka数据可靠性深度解读 消息中间件出问题的可能性 Producer发送到消息中间件 阅读全文
posted @ 2019-07-31 16:02 qxwang 阅读(67) 评论(0) 推荐(0)
摘要: 一、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石 阅读全文
posted @ 2019-07-31 16:02 qxwang 阅读(56) 评论(0) 推荐(0)
摘要: 自我介绍 面试官您好,我叫XXX,毕业于XXX,现就职于XXX,是恒生下属的子公司,主要从事于互联网金融相关系统的开发。我自己是一个对技术有追求的人,不满足于每天就写写业务代码的,所以每天上下班的时候经常会在微信公众号、简书、开源中国等途径中获取最新的技术知识,来提升自己的能力。另外,我自己从一年前 阅读全文
posted @ 2019-07-31 16:01 qxwang 阅读(22) 评论(0) 推荐(0)
摘要: 前言 ThreadPoolExecutor是jdk内置线程池的一个实现,基本上大部分情况都会使用这个线程池完成各项操作。 本文分析ThreadPoolExecutor的实现原理。 ThreadPoolExecutor的状态和属性 ThreadPoolExecutor线程池有5个状态,分别是: RUN 阅读全文
posted @ 2019-07-31 16:01 qxwang 阅读(55) 评论(0) 推荐(0)
摘要: 前言 总结一些算法题目,面试使用源码地址: https://github.com/litttlefisher/algorithm 1. 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 兔 阅读全文
posted @ 2019-07-31 16:00 qxwang 阅读(39) 评论(0) 推荐(0)
摘要: 前言 总结排序算法 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747 阅读全文
posted @ 2019-07-31 16:00 qxwang 阅读(32) 评论(0) 推荐(0)
摘要: 前言 这两天对Docker进行从零部署,就是为了能够玩一玩devOps,现在将部署的过程既遇到的一些问题进行记录。 PS: 纯为自己兴趣而学,在公司会被认为不务正业。 服务器安装Docker 服务器安装docker 我这边的服务器是Centos系统,执行以上命令就会把docker安装并启动,至于测试 阅读全文
posted @ 2019-07-31 15:59 qxwang 阅读(68) 评论(0) 推荐(0)
摘要: 前言 这里只放一个标题,给自己定一个小小的目标,用于记录在Spring学习中,研磨Spring设计思想的感想。以前读Spring源码仅会去理解其中的逻辑,并没有去思考其中的设计原理,亦或者为什么这么设计,有什么更好的设计方案等等的。这里先罗列下我感觉可以深入思考下的问题。 阅读全文
posted @ 2019-07-31 15:58 qxwang 阅读(27) 评论(0) 推荐(0)
摘要: 个人技能学习路径 自我介绍 ThreadPoolExecutor源码,拒绝策略,Executors的几个线程池创建方法 阻塞队列区别,包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue Thr 阅读全文
posted @ 2019-07-31 15:57 qxwang 阅读(24) 评论(0) 推荐(0)
摘要: 前言 这里暂时放一个问题,后续进行解决。 JDK1.7到JDK1.8中ConcurrentHashMap的实现原理有变更,引入了红黑树,为什么引入红黑树? 桶中元素从链表转为红黑树有一个阙值,默认阙值是多少,为什么设置为这个值? ConcurrentHashMap和HashTable的区别? Con 阅读全文
posted @ 2019-07-31 15:57 qxwang 阅读(15) 评论(0) 推荐(0)
摘要: 简单解释一下J.U.C,是JDK中提供的并发工具包,java.util.concurrent。里面提供了很多并发编程中很常用的实用工具类,比如atomic原子操作、比如lock同步锁、fork/join等。 从Lock作为切入点 我想以lock作为切入点来讲解AQS,毕竟同步锁是解决线程安全问题的通 阅读全文
posted @ 2019-07-31 15:56 qxwang 阅读(44) 评论(0) 推荐(0)
摘要: 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致; 隔离性: 并发访问数据库时,一个用户的事物不被其他事物所干扰,各并发事 阅读全文
posted @ 2019-07-31 15:55 qxwang 阅读(39) 评论(0) 推荐(0)
摘要: TCP/IP原理 TCP/IP概述 TCP/IP起源于1969年美国国防部(DOD:The United States Department Of Defense)高级研究项目管理局(APRA:AdvancedResearch Projects Agency)对有关分组交换的广域网(Packet-S 阅读全文
posted @ 2019-07-31 15:54 qxwang 阅读(203) 评论(0) 推荐(0)
摘要: 客户端发起HTTPS请求这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。 服务端的配置采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书 阅读全文
posted @ 2019-07-31 15:53 qxwang 阅读(247) 评论(0) 推荐(0)
摘要: TCP 的特性 TCP提供一种面向连接的、可靠的字节流服务 在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP TCP使用校验和,确认和重传机制来保证可靠传输 TCP给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复 TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的 阅读全文
posted @ 2019-07-31 15:53 qxwang 阅读(36) 评论(0) 推荐(0)
摘要: SpringBoot Http2改造 前置说明 该文档仅说明使用jetty作为web服务器的场景下如何配置具体springboot有官方的说明文档,链接如下https://docs.spring.io/spring-boot/docs/2.0.0.RC2/reference/html/howto-e 阅读全文
posted @ 2019-07-31 15:52 qxwang 阅读(77) 评论(0) 推荐(0)
摘要: 类图 该类图比较简陋,具体的可以参考网上关于拦截过滤器的设计模式类图 PS:拦截过滤器模式好像并不是23种设计模式中的一种,而是后来扩展出来的 具体的代码实现 下面这个接口,就是类图中的Inteceptor和Chain,只不过Chain是Inteceptor的内部类,为了维护泛型 123456789 阅读全文
posted @ 2019-07-31 15:52 qxwang 阅读(52) 评论(0) 推荐(0)
摘要: 前言 Java8在我看来主要由2个大的特性,一个是lambda的使用,另一个是stream流的出现,该篇博文用于介绍stream流的常用操作符。 流和其它集合具体的区别 流的操作是以管道的方式串起来的。流管道包含一个数据源,接着包含零到N个中间操作,最后以一个终点操作结束。 创建Stream 可以通 阅读全文
posted @ 2019-07-31 15:51 qxwang 阅读(42) 评论(0) 推荐(0)
摘要: 前言 本文主要介绍具体如何配置JVM参数来达到调优的目的。 GC性能方面的考虑 1. Total Heap 默认情况下,vm会增加/减少heap大小以维持free space在整个vm中占的比例,这个比例由MinHeapFreeRatio和MaxHeapFreeRatio指定。 一般而言,serve 阅读全文
posted @ 2019-07-31 15:51 qxwang 阅读(116) 评论(0) 推荐(0)
摘要: 前言 运用JVM自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然JVM调优成熟的工具已经有很多:jconsole、大名鼎鼎的VisualVM,IBM的Memory Analyzer等等,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,另一方面喜欢装X的我们,总喜欢 阅读全文
posted @ 2019-07-31 15:50 qxwang 阅读(57) 评论(0) 推荐(0)
摘要: 前言 该篇博文介绍一下CheckStyle和PMD如何集成到工程中,以让工程打包时强制检查一遍代码,避免空谈代码检查却无人执行的尴尬境地。 搭建build-tools工程 可以在lang包中或者各个模块中定义一个build-tools工程,该工程中没有代码,仅是引入代码检查的配置文件 pom文件中引 阅读全文
posted @ 2019-07-31 15:49 qxwang 阅读(63) 评论(0) 推荐(0)