- 博客(74)
- 收藏
- 关注
原创 用java代码实现简单的概率随机抽奖算法,看完相信你也会
工作需要,这两天写一个简单的java抽奖算法,因为逻辑简单不复杂,所以代码也很简洁,可以做到不同权重有不用的中奖概率(就类似于nginx集群一样,权重越大,概率越高),在这里将java概率随机抽奖代码抽离出来分享给大家。具体需求:给第三方推送数据,每个第三方根据预算会有不同的额度,考虑到服务器压力,所以采取了主动推送的方式,在每次推送的时候,需要根据第三方的配额计算出相应的概率,然后挑选一个第...
2020-01-13 14:32:26
11544
原创 springboot项目打包时提示“程序包xxx不存在,找不到符号”
springboot多包工程,在使用maven进行打包的时候,一直提示“程序包xxx不存在,找不到符号”,但项目是可以正常启动运行的,开始一直以为是maven哪里没有配置好导致的,后来才发现原来是springboot的maven插件导致的。springboot项目打包时提示“程序包xxx不存在,找不到符号”项目结构:xxx-parent:顶级父工程xxx-a:子项目1xxx-b:子项目2...
2020-01-13 14:24:55
11627
2
原创 MyBatis 源码解析MyBatis如何解析配置 ?(六)
XMLMapperBuilder###parameterMapElement()//代码比较长了,因为parameterMap 涉及到比较多的东西 // <resultMap id="userMap" type="com.test.demo.model.SysUser">// <id property="id" column="id"/>// ...
2020-01-05 22:09:08
233
原创 MyBatis 源码解析MyBatis如何解析配置 ?(七)
最后还剩sql和select|insert|update|delete先看sql:XMLMapperBuilder###sqlElement() private void sqlElement(List<XNode> list) { //首先看是否配置了database id //如果配置了则将id传入,通过id进行选择 if (configura...
2020-01-05 22:05:42
173
原创 设计模式之适配器模式
假设姚明刚到火箭队的时候,由于语言不通,但是有需要接受教练的指挥。有以下三种办法:让姚明先学会英语让教练学会中文指挥给姚明配一个翻译显然,最具有可行性的方式便是给姚明配一个翻译。我们简单的模拟一下上面的情景模式://姚明类,刚开始只会接受中文指挥public class YaoMing { public void chineseOffensive(){ Sy...
2020-01-02 15:51:58
139
1
原创 MyBatis 的秘密 反射
MyBatis作为一款ORM框架,主要通过XML定义Object,这就难免用到反射,虽然JDK自带的反射已经方便使用,但是MyBatis依然结合业务功能,将反射功能封装成一个更加易用的包,这个包就在reflection中。在解析MyBatis的反色包之前,我们需要先通过需要看看MyBatis需要通过反射实现哪些功能。在MyBatis中,可以方便的获取数组属性和对象属性。比如:student.n...
2019-12-30 22:37:49
758
原创 MyBatis 的秘密动态SQL
动态SQL说到动态SQL,就不得不提Script,Java作为一个静态语音,代码需要先编译,然后再运行,虽然带来了效率,但是却损失了灵活性。Spring为此还专门提供了一套SpEL用来封装Java脚本语言API在MyBatis中,也支持动态SQL,想要将简单的String字符串编译成能运行的代码,需要其他的库的支持,MyBatis内部使用的是OGNL库。在OgnlCache中,是MyBat...
2019-12-30 22:27:47
157
原创 深入了解 MyBatis 源码解析(一)
之前在接触MyBatis的时候,就觉得这个技术的思想很新颖,要实现这些功能并不难,但是如何实现,以及MyBatis的整体架构却是我远远不及的。Mybatis作为一个半自动化ORM框架,同时具有灵活性和方便性,因此在国内各个大厂都十分受欢迎,如果让我自己实现这样一个框架,我可能会首先想到以下几块:XML解析模块,整个框架都是通过XML进行描述配置的,因此需要首先封装一个XML解析,可以考虑在To...
2019-12-29 22:13:57
177
原创 MyBatis代码整洁之道之设计模式细说责任链模式优缺点
责任链模式(Chain of Responsibility Pattern)需要了解更多可以参考这篇文章深入剖析 MyBatis 的内部设计和架构设计的实现细节【情景模式】在处理MQTT消息的时候,需要根据不同的Topic进行不同的处理,平时我们可以直接使用简单工厂。如下://消息处理接口public interface MessageHandler { void handleM...
2019-12-29 21:56:21
658
原创 MyBatis代码整洁之道之设计模式细说策略模式
设计模式之策略模式情景模式:设计一个超市收银系统,超市可能会根据不同节日给出不同的折扣代码:@Setterpublic class Market { private double price; private double discount=1; public double getPriceAfterDiscount() { ret...
2019-12-27 21:51:55
271
原创 无门无派 程序员整理的32个MyBatis面试专题。(都是干货)
1、什么是 MyBatis?答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。2、讲下 MyBatis 的缓存答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态),可在它的映射文件中配...
2019-12-26 22:19:23
539
原创 Spring Cloud《总有一篇详细告诉你SpringCloud是什么》
前言介绍为了更好的实现领域驱动设计的落地,不仅要在设计思路上做到领域职责清晰、系统边界明确,还需要使用到Spring Boot、Spring Cloud框架服务体系来更好的构建微服务。后续部分章节将针对Spring Cloud的使用以及有益于构建微服务的知识技能做系列案例整理,以最终完成架构设计专题案例。网上不免有很多优秀的文章,但为了系统的学习更需要事必躬亲,亲力亲为。内容概述...
2019-12-26 22:16:42
407
原创 设计模式之原型模式
设计模式之原型模式原型模式也是一种类创建型模式,对于原型模式,其实就是简单的C++中的拷贝构造函数,因此这里不再举情景模式。定义使用原型实例创建对象的种类,并通过拷贝这些原型创建新的对象。Java中的原型模式其实Java中,对原型模式最原生的支持便是Cloneable接口,Cloneable接口作为一个标记型接口,里面没有任何方法,不过如果未实现该接口的类被调用了clone()...
2019-12-25 22:24:04
83
原创 设计模式之建造者模式
建造者模式情景模式:需要写一个游戏程序,程序包含几个不同的角色,比如一个胖子角色,一个瘦子角色和一个比较帅气的角色。大概代码如下:比较瘦的人public class ThinPeople { private String leg; private String head; private String hand; private Stri...
2019-12-25 22:23:00
87
原创 Spring Boot——ConfigurationProperties介绍
ConfigurationProperties介绍ConfigurationProperties是一个注解,可以标注在一个Class上,这样Spring Boot会从Environment中获取其属性对应的属性值给其进行注入。比如下面的代码定义中,Spring Boot在实例化TestConfigurationProperties这个bean时就会把从Environment中获取属性名为app...
2019-12-24 21:07:31
505
原创 Spring Boot——参数配置机制
参数配置机制Spring Boot默认会读取Classpath根路径下的application.properties文件和application.yml文件作为配置文件(使用properties文件还是yaml文件就看个人的喜好了,就笔者而言,yaml文件结构更好,看起来更加的直观),并把它们封装到Environment对象。在应用中通过注入Enviroment对象就可以获取到applicat...
2019-12-24 21:04:04
658
原创 Spring Boot——如何创建自己的自动配置
创建自己的自动配置当你的应用需要以jar包的形式提供给其它应用使用时,可以考虑把它们封装为一个Spring Boot Starter。即该jar包是可以自动添加需要引用的依赖项,也能够对核心功能进行自动配置。自动配置的核心类是一个标注了@Configuration的类,然后在自动配置类中可以定义相应的bean。比如下面的配置类中定义了一个HelloBean类型的bean。@Configu...
2019-12-23 22:01:35
159
原创 Spring Boot——SpringApplication介绍
SpringApplication介绍通常启动Spring Boot应用时调用SpringApplication类的static run()进行启动。@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplicatio...
2019-12-23 21:59:54
272
原创 设计模式之组合模式
之前做一个需求,设计一个设置程序,设置程序中包含不同的页面,页面中又有不同的分组,每个分组下面又有不同的项,每个项包含不同的控件。当用户点击保存的时候,需要将所有的配置,都映射并保存在配置文件中。之前做的时候,是将每个控件都绑定一个映射项,然后遍历所有的页的组,在遍历组的项,再遍历项的控件调用保存。伪代码如下:for(Page page:pages){ if(page.co...
2019-12-19 22:06:07
89
原创 MyBatis代码整洁之道之设计模式
到目前为止,MyBatis的源代码也看的七七八八了,不得不说MyBatis的代码写的真的很不错,逻辑清晰的同时功能还很齐全,同时可以发现,MyBatis中使用了非常多的设计模式,接下来简单总结下:建造者模式在MyBaits的各种对象构建类中,大多数都继承自BaseBuilder类,并且大多数类都是通过建造者模式实现。比如:SqlSessionFactoryBuilder 构建Sql...
2019-12-18 20:46:21
136
转载 java应用性能调优之详解System的gc垃圾回收方法
一、什么是System.gc()?System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API。当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象)。名词解释:GC,Garbage Collection,垃圾回收,下文会经常使用。二、谁可以调用System.gc()?System.gc()可以从应用程序堆栈的各个部分调用:您自己开发的应用程序可以...
2019-12-17 22:59:30
102
转载 SpringBoot生命周期管理之停掉应用服务几种方法
前言在生产环境下管理Spring Boot应用的生命周期非常重要。Spring容器通过ApplicationContext处理应用服务的所有的beans的创建、初始化、销毁。本文着重于生命周期中的销毁阶段的处理,我将使用多种方式来实现关闭Spring Boot应用服务。如果你需要了解关于Spring Boot更多内容,请看我之前写过的文章和精品合辑!一、通过Actuato...
2019-12-17 22:49:55
694
原创 排序升级版—带你了解不一样的快速排序以及归并排序
快速排序算是最优的排序方式了,这两种排序的思想都是分治思想,一个使用递归,一个没使用,各有利弊。有兴趣的小伙伴可以多来探讨,写的不对的或者可以优化的地方可以给我留言。一,归并排序(英语:Merge sort,或mergesort)。1,排序思想:是创建在归并操作上的一种有效的排序算法,效率为O(n log n)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide a...
2019-12-16 22:24:47
219
原创 SpringBoot如何优雅的将静态资源配置注入到工具类中
场景:在Spring架构体系下,你是如何在工具类中获取静态资源配置信息的?总之,我之前是直接通过读取properties文件实现的,但那种方式,总感觉怪怪的,那么,我们就用Spring支持的方式来实现吧。其实,也不算原创,说好听点就是借鉴,只不过被我脱水了,只剩下干货了。资源注入类:@Configuration@ConfigurationProperties(locations...
2019-12-15 20:19:13
447
原创 如何对分布式服务进行状态管理
名词解释服务的状态: 举例来说,服务的状态信息,通常是指在服务端保存的“用户的登陆信息”,“用户的角色信息”,“请求的状态信息”等。不用的用户及角色拥有不同的权限,从而面对同样的请求返回不同的结果。无状态服务:就是同样的服务多次部署形成一个服务组,一个请求落到服务组的任意一个服务上,都会返回同样的结果。所谓无状态服务有两层含义,第一层就是真的没有状态信息,第二层就是服务组的状态不是存储在单...
2019-12-15 20:15:19
602
原创 结合RocketMQ说明一个成熟MQ要支持哪些特性
1 消息生产消费模式这个是对一个消息队列软件的基本要求,JMS规范目前支持两种生产消费模式:点对点模式(point to point)和发布/订阅模式(publish/subscribe)。其中集群负载模式是一种特殊的点对点模式,消息的分配是均衡的,无需进行编程处理,这一点是RocketMQ区别于其他的一些消息中间件重要的一点。2 Message Priority(消息优先级)...
2019-12-15 20:13:56
155
转载 Java字符串模板格式化汇总8法(附性能对比)
字符串格式化汇总Table of Contents1. ++ 2. StringBuffer / StringBuilder 3. StringUtil.format(String, Object…) 4. MessageFormatUtil.format(String, Object…) 5. Slf4jUtil.format(String, Object…) 6. St...
2019-12-13 22:46:43
504
原创 Java 干货之深入理解内部类
可以将一个类定义在另一个类或方法中,这样的类叫做内部类 –《Thinking in Java》说起内部类,大家并不陌生,并且会经常在实例化容器的时候使用到它。但是内部类的具体细节语法,原理以及实现是什么样的可以不少人都还挺陌生,这里作一篇总结,希望通过这篇总结提高对内部类的认识。内部类是什么?由文章开头可知,内部类的定义为:定义在另一个类或方法中的类。而根据使用场景的不同,内部类还可以...
2019-12-12 21:27:09
162
转载 一个适合绝大多数场景下的批量任务线程池(心得)
前言在工作中的一个场景中,需要紧急处理五千多份合同,合同处理的过程有些复杂,这里说的复杂不是代码复杂,是中间需要经过多个服务渠道,包括对外对接的一些业务,所以这五千来分如果同步处理的话,估计要跑上估计至少也得半天的时间了,而后期确定了还会面临同样的问题(坑爹的代码与凌乱的架构问题),因此写了一个处理合同的线程池,越写兴趣越浓,最后写出来以后发现这个鸟玩意儿实在是太通用了,几乎可以用在所有场景下...
2019-12-12 21:23:46
344
原创 JVM 中的守护线程
特点通常由JVM启动 运行在后台处理任务,比如垃圾回收等 用户启动线程执行结束或者JVM结束时,会等待所有的非守护线程执行结束,但是不会因为守护线程的存在而影响关闭。判断线程是否为守护线程判断一个线程是否为守护线程,主要依据如下的内容/* Whether or not the thread is a daemon thread. */private boolean daemo...
2019-12-11 21:58:28
403
原创 十分钟学会JDK动态代理及原理
相信大家多多少少对静态代理动态代理有所了解,我今天着重来说一下JDK动态代理,目前流行的动态代理实现有两种,一种是JDK动态代理,一种是cglib动态代理,JDK是使用反射原理来实现的,cglib是ASM字节码,所以cglib要比JDK动态代理性能好。。。我们今天来学JDK动态代理的原因是先接触一下动态代理下边是我建的一个测试案例package com.fyd.test; ...
2019-12-10 21:58:03
99
原创 spring源码学习之路---探索ION
网上也有很多关于spring源码学习的文章以及帖子,讲的也都不错,但是有些可能高估了读者的能力,该深入的地方反倒一句带过,我现在也是在一步一步研究,和大家的进度一样,所以可能在我的角度来和各位探讨,更加容易。首先我们来说一下IOC,IOC是spring最核心的理念,包括AOP也要屈居第二,那么IOC到底是什么呢,四个字,控制反转。网上有不少是这么解释IOC的,说IOC是将对象的创建和依赖关...
2019-12-10 21:56:58
96
转载 JVM内存管理--GC算法精解(五分钟教你终极算法---分代搜集算法)
引言何为终极算法?其实就是现在的JVM采用的算法,并非真正的终极。说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为相信高人们的能力。那么分代搜集算法是怎么处理GC的呢?对象分类上一章已经说过,分代搜集算法是针对对象的不同特性,而使用适合的算法,这里面并没有实际上的新算法产生。与其说分代搜集算法是第四个算法,不如说它是对前三个算法的实际应用。首先我们来探讨一下对...
2019-12-09 22:04:44
164
1
转载 疯狂的Java算法——从古至今的难题排序,来一场“算林大会”
从古至今的难题 在IT届有一道百算不厌其烦的题,俗称排序。不管是你参加BAT等高端笔试,亦或是藏匿于街头小巷的草根笔试,都会经常见到这样一道百年难得一解的问题。 今天有幸与各位分享一下算法届的草根明星,排序届的领衔大神——插入排序以及归并排序。最后,在头脑风暴下,又有幸认识了一位新朋友,名叫并行归并排序。接下来,咱们就一一认识一下,并且在最后来一次“算林大会”吧。插入排序简介 ...
2019-12-08 22:17:56
188
转载 一个草根程序员如何进入BAT。此文比较扎心,心态不好切勿点击
引言 认真看完就会有收获 写这篇文章的目的其实很简单,算是对之前LZ一篇文章的补充和完善。 之前LZ写过一篇《回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议》,那篇文章LZ主要介绍了如何应对社招面试,以及如何进行Java学习。 文章的反响还不错,不少猿友都感叹,“如果早看到这篇文章,说不定我已经成大神了。” 但是LZ只能很遗憾的告诉你,LZ...
2019-12-08 22:16:19
217
转载 如何做到招聘要求中的“要有扎实的Java基础”一篇文章教会你
来历 本文来自于一次和群里猿友的交流,具体的情况且听LZ慢慢道来。 一日,LZ在群里发话,“招人啦。” 然某群友曰,“群主,俺想去。” LZ回之,“你年几何?” 群友曰,“两年也。” LZ憾言之,“惜了,三至五为佳。然如汝有扎实之基础,且附一技之长,倒也并非不可呀。” 群友惑,问之,“何为一技之长?” LZ抚须答曰,“皆可,吾之一技即为写。” ...
2019-12-06 22:59:19
130
转载 设计模式详解(总纲)看了这篇文章还不会,你拍我
最近一直在学习设计模式相关的知识,还是老规矩,和各位一起学习,一起探讨,本系列所发表所有内容仅代表个人观点。《简介》说到设计模式,当初第一次听到时,第一反应就是很深奥,完全理解不了这个概念到底是什么意思,下面我先从网上摘录一份定义。设计模式(Designpattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。上面是百度当中的解释,来解释一下这句简单...
2019-12-05 22:22:48
74
原创 别在 Java代码里乱打日志了 此文给你答案,正确的打日志姿势
使用slf4j使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。 实现方式统一使用: Logback框架打日志的正确方式什么时候应该打日志当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。 当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能...
2019-12-05 22:20:35
115
原创 TCP/IP协议族 HTTP报文头解析
本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述。下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该字段名所对应的值,每个值之间有逗号分隔。如果该值需要优先级,那么在值的后方跟上优先级q=0.8(q的值由0~1,优先级从低到高)。值与优先级中间由分号相隔。头部字段名:值1, 值2;q=0.8下方就是截取的网...
2019-12-04 22:16:43
434
原创 XPath获取XML指定节点属性值的两种方法
前面有文章介绍了通过XPath解析xml报文的方法,今天工作中遇到了需要解析指定节点属性值的问题,现在总结一下,下面提供两种方法去获取属性值。首先是xml结构:1.<?xml version="1.0" encoding="utf-8" ?>2.<bookstore>3. <book>4. <title lang="en1">E...
2019-12-04 22:14:37
5670
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人