java
感性企鹅
数据驱动决策
展开
-
java-一道面试题(链式+stream编程)
题目要求:一分钟内完成此题,只能用一行代码实现。现在有5个用户,筛选:1、ID必须是偶数2、年龄必须大于23岁3、用户名转换为大写4、用户名字母倒排序5、只输出一个用户public class MyTest { User user1 = new User(1, "AB", 24); User user2 = new User(2, "cd", 25); User user3 = new User(3, "ef", 23); List<User> list = Arra.原创 2020-05-08 21:48:24 · 470 阅读 · 0 评论 -
并发编程-一个简单的例子阐述volatile的保持线程间内存可见性作用(volatile)
实践代码参考:https://gitee.com/wangtonggui/java_demo.git的keyword-demo使用volatile,线程可以停止不使用,线程不可以停止说明volatile可以进行变量的线程间同步评价使用一个例子可以方便的说明问题。...原创 2020-04-29 12:03:15 · 209 阅读 · 0 评论 -
java-注解解析与实践
背景原创 2020-04-23 15:34:03 · 142 阅读 · 0 评论 -
设计模式-java实现静态代理和动态代理
背景在进行mybatis的学习中,设计到了动态搭理,即仅仅定义接口和mapper,就能获取相应的接口实现类,进行dao的种种操作。实践过程参考代码:https://gitee.com/wangtonggui/design_pattern.git需求:使用代理的方式,实现某接口的时间调用时间纪录。静态代理Person实现了eat的接口,我们要通过代理的方式纪录eat的时间下面是通过继...原创 2020-04-22 14:38:48 · 180 阅读 · 0 评论 -
并发编程-juc-semaphore信号量实践
背景在进行限流与熔断的过程中,java信号量起到了很大的作用,本wiki将java的信号量做了最基础的实战。实践过程参考代码:https://gitee.com/wangtonggui/java_demo.git创建信号量,公平模式就是先到先得,抢占式就是看运气信号量阻塞-1,这个是线程安全的当信号量的可用许可证为0的时候,acquire就会阻塞release操作就是+1操作,...原创 2020-04-20 19:56:49 · 223 阅读 · 0 评论 -
java-jdk中常用类的使用demo(String类)
概述本文阐述jdk中String类的常用方法。实践过程下载示例代码源码地址:https://gitee.com/wangtonggui/java_demo.git跑一跑看看String的new,可以直接传入StringBuffer和StringBuilder方便的定位字符判断字符串是否相等判断字符串的大于小于和等于剩下的startWith、endWith、indexO...原创 2020-04-13 21:54:41 · 308 阅读 · 0 评论 -
设计模式-java实战建造者模式(uml+java)
背景20+种设计模式,实践ing。本wiki将阐述建造者模式(builder模式)。这个模式的特点是:降低同系列对象的创建难度。重点参考:https://www.bilibili.com/video/BV1Qx411o7tN?p=27实践过程需求分析拿视频里面的例子来说:客户端(client)想创建几个电脑对象,给不同的人使用,那么就会出现以下代码:// 电脑类如下@Datap...原创 2020-04-12 11:11:32 · 442 阅读 · 0 评论 -
java-mapStruct源码走读
背景最近在研究mapStruct,为了方便以后能顺手使用,本wiki将简单地走读一下源码。源码走读总览源码下载:https://gitee.com/mirrors/mapstruct.gitpom模块概览parent,只有一个pom文件,用于全局统一加载工具,例如guava、freemarker等build-config,一些配置的xml集合core,各种注解和常量的定义与...原创 2020-04-08 17:10:36 · 1350 阅读 · 0 评论 -
java-自定义代码生成器(spring boot+freemarker)
背景javaEE 开发的本质是进行数据操作,开发的难点其实是在数据库设计。本wiki将阐述一下数据库设计完毕后,直接生成代码的过程。生成代码过程clone自制的代码生成器:git clone https://gitee.com/wangtonggui/code-maker.git做一下数据库的简单配置:目标库是:dbpay生成器会自动生成这个库下所有表的model直接运行工程,查...原创 2020-04-08 14:56:13 · 866 阅读 · 0 评论 -
java-apt编程实践(Annotatino Processing Tool+maven)
背景最近在研究mapStruct,而mapStruct核心技巧就是apt,通过编译期注解+freemarker进行java文件生成,从而省去了很多编码。本wiki将阐述一个apt的编程实践。实践过程创建一个hello工程工程由两个模块组成:application模块,将使用自定义的编译器注解apt模块,自定义注解,并且完成AbstractProcessor的继承和实现根pom如...原创 2020-04-07 16:01:26 · 1298 阅读 · 0 评论 -
java-spi编程实践(Service Provider Interface+maven)
背景在研究java注解处理器的过程中,涉及到了spi机制的理解,本wiki将进行一下实践。spi机制spi机制的目标:实现接口与实现的解耦。spi机制在开源项目中的应用:spring中大量使用(ioc的过程会自动选取一个实现)数据库驱动加载dubbo等等在后续的博客中将对不同的框架进行调研并加以说明。spi简易demo创建一个maven项目pom文件如下<?xm...原创 2020-04-06 18:15:07 · 800 阅读 · 0 评论 -
效率提升-简化java开发中pojo的转换(mapstruct)
背景在java的web开发中,pojo转换难以避免,mapstruct工具帮我们进行了简化,本wiki将进行实践。实践过程简易实践创建一个hello项目(最简单的maven项目即可)。pom文件添加依赖 <properties> <mapstruct.version>1.2.0.Final</mapstruct.version>...原创 2020-04-03 16:40:30 · 616 阅读 · 0 评论 -
java-元组实现
背景在java工程开发的过程中,经常会遇到需要函数直接返回多个参数的情况,这里阐述一种自定义元组的方法。代码实战以下为元组类的定义public class Tuple { public static <A, B> TwoTuple<A, B> tuple(A a, B b) { return new TwoTuple<>(a, ...原创 2020-03-25 14:32:23 · 1292 阅读 · 0 评论 -
java-log4j2的配置实战
背景spring boot项目中用了log4j2,配置的设置只是重复的轮子,博主进行一下记录和分享。实战log4j2.xml<?xml version="1.0" encoding="UTF-8"?><!--设置log4j2的自身log级别为warn --><configuration status="warn"> <propertie...原创 2020-02-26 15:02:49 · 187 阅读 · 0 评论 -
java-Collections类方法走读
背景Collection集合接口类在java开发中经常使用到。实战代码public class CollectionDemo { public static void main(String[] args) throws Exception { newEmptyCollection(); addAll(); asLifoQueue();...原创 2019-11-26 08:49:14 · 218 阅读 · 0 评论 -
编程框架-spring boot之自动装配(spring-boot-autoconfigure)
背景spring boot可以简化配置,主要就是由自动装配实现,现在总结一篇详细的,之后在封装框架的时候用到。源码地址源码目录分布装配流程重点部分...原创 2019-09-05 17:28:57 · 3781 阅读 · 1 评论 -
算法实现-排序算法(java+选择排序)
背景选择排序和冒泡排序是最简单的两种排序方式。下面做一下选择排序的实现。实现package com.example.demo;public class SelectSort1 { public static void main(String[] args) { int[] data = {2, 1, 6, 5, 3, 8, 4, 7}; sort(...原创 2019-09-08 22:18:07 · 82 阅读 · 2 评论 -
框架编程-java-效率提升-通过API调用spring中所有bean的方法(spring boot+反射+fastjson+idea插件+save action+postman)
背景在开发base项目中,dubbo提供者开发完之后,研发需要进行接口函数自测。本博客将提供一种提高自测和调试的方法。旧的方法假如你写了一个service类,如下:写完了service之后,如果需要马上测试看效果的话,最常用的方法是,直接写一个测试单元。如果项目大一点,测试单元跑的时间肯定是超过10s以上的,甚至更多。这时,如果我们仅仅改变一行代码,想马上看到这行代码的调试结果,如...原创 2019-09-20 17:28:53 · 469 阅读 · 0 评论 -
性能优化-快速定位性能问题(postman+top+jstack+jstat+free+本机热部署调试)
背景功能问题容易定位,性能问题则需要立体化的分析才可以找到具体原因。本博客将阐释一次项目过程中的实战。注:由于本博客在起草时,问题已经解决,所以命令的执行截图仅供参考。问题现象某接口进行压测过程中出现诡异现象:偶尔会出现秒级的返回,甚至是超时单数据多用户压测不存在问题,参数化数据后多用户压测存在问题,有极长请求(3s以上的超时)定位过程使用脚本查看busy线程推荐脚本:htt...原创 2019-09-27 18:34:37 · 312 阅读 · 0 评论 -
java-反射-Method类走读
背景之前走读了Class类的函数,能让我们更灵活的获取一个类中的信息。然而仅有类信息还是不够的,想要达到灵活调用类中函数的功能还需要借助于reflect包的Method类,本博文将走读Method类的主要方法。代码+实战结果Main.javapublic class Main { public static void main(String[] args) throws NoSuc...原创 2019-10-07 13:03:00 · 150 阅读 · 1 评论 -
并发编程-ReentrantLock类走读
背景并发编程中需要使用锁在进行线程间同步和禁止同时访问共有资源的。下面走读下juc包中的ReentrantLock血缘关系ReentrantLock血缘Lock接口类,属于jdk中juc包,锁的基类(不包括synchronize关键字)ReentrantLock,可重入锁,实现了LockLock的其他派生类血缘可以看到,在juc的包中,除了读写锁,就没其他的锁实现Lock了,...原创 2019-10-07 23:11:48 · 162 阅读 · 0 评论 -
java-反射-Class类走读
背景用java必然会谈到反射,这边博文来谈谈反射的原理和实战,重点在实战。原理反射是java的一个特性,通过反射可以动态的去根据类的名字加载类,实现动态实战...原创 2019-08-31 08:59:38 · 152 阅读 · 0 评论 -
java-jdk自带监测工具(jstat)
背景之前看过了jps,现在我们来看下jstat。概要jstat(Java Virtual Machine statistics monitoring tool),虚拟机统计监控工具。一看就是用于监控的,可以用于服务性能优化。jstat可以检测多项虚拟机指标类加载器(-class)实战演示-class:类加载器相关信息jstat -class -t -h3 55912 1000...原创 2019-08-26 18:12:39 · 451 阅读 · 0 评论 -
java-jdk自带监测工具(Jps)
背景jdk有自己的监测工具,这里来进行看一下最基础的Jps命令的使用。Linux下查看命令man手册man jps命令格式options,可选参数(今天的主角)hostid,可以远程看其他机器jvm信息(暂时先不看)每个参数测试jps 或者 jps -V进程id类名jps -q类名jps -m进程idmain函数的入参jps -l进...原创 2019-08-25 23:02:00 · 302 阅读 · 0 评论 -
框架编程-spring框架工具包(StopWatch)
背景在查看spring boot的自动装配的时候,发现其中用到了StopWatch,阅读源码之后,发觉这个工具类可以之后为我们所用(查看调用任务耗时的情况)来源jar包:spring-core代码包:org.springframework.util(util里面还有很多其他的工具类,之后会写更多的博客加以阐述)函数列表重要代码构造/** * Construct a new s...原创 2019-08-25 11:48:32 · 604 阅读 · 0 评论 -
并发编程-编程实战(Executors+Callable+Thread.sleep+ExecutorService)
package com.mine.concurrent;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.*;/** * 并发编程实战1: * Executors + Callable + Thread.sleep */pub...原创 2019-06-30 14:56:17 · 209 阅读 · 0 评论 -
JNI中枚举类型作为参数
参考资料:使用JNI进行Java与C/C++语言混合编程(1)--在Java中调用C/C++本地库 java native方法及JNI实例JNI是Java Native Interface的英文缩写,中文翻译为本地调用, 自从Java 1.1开始就成为了Java标准的一部分.C/C++是系统级的编程语言, 可以用来开发任何和系统相关的程序和类库, 但是Java本身编转载 2015-07-14 14:09:03 · 2323 阅读 · 0 评论